From a8713a3c7170c3c9b9bd038373a6ab8d6c83a762 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Tue, 21 Feb 2023 11:17:25 -0500 Subject: [PATCH 001/130] fix: current CType meta schema ignores additional properties in claim contents (#726) --- .../core/src/credential/Credential.spec.ts | 34 ++- packages/core/src/ctype/CType.schemas.ts | 105 ++++++- packages/core/src/ctype/CType.spec.ts | 266 ++++++++++-------- packages/core/src/ctype/CType.ts | 52 ++-- packages/core/src/ctype/Ctype.nested.spec.ts | 4 +- packages/types/src/CType.ts | 12 +- packages/utils/src/SDKErrors.ts | 2 - 7 files changed, 302 insertions(+), 173 deletions(-) diff --git a/packages/core/src/credential/Credential.spec.ts b/packages/core/src/credential/Credential.spec.ts index de70653a0..33c019a58 100644 --- a/packages/core/src/credential/Credential.spec.ts +++ b/packages/core/src/credential/Credential.spec.ts @@ -37,8 +37,10 @@ import * as Claim from '../claim' import * as CType from '../ctype' import * as Credential from './Credential' -const testCType = CType.fromProperties('raw ctype', { - name: { type: 'string' }, +const testCType = CType.fromProperties('Credential', { + a: { type: 'string' }, + b: { type: 'string' }, + c: { type: 'string' }, }) function buildCredential( @@ -292,9 +294,19 @@ describe('Credential', () => { Credential.verifyAgainstCType(builtCredential, testCType) ).toThrow() }) + + it('two Credentials on an empty ctype will have different root hashes', async () => { + const ctype = CType.fromProperties('CType', {}) + const claimA1 = Claim.fromCTypeAndClaimContents(ctype, {}, identityAlice) + const claimA2 = Claim.fromCTypeAndClaimContents(ctype, {}, identityAlice) + + expect(Credential.fromClaim(claimA1).rootHash).not.toEqual( + Credential.fromClaim(claimA2).rootHash + ) + }) }) -describe('Credential', () => { +describe('Presentations', () => { let keyAlice: KeyTool let keyCharlie: KeyTool let identityAlice: DidDocument @@ -327,12 +339,11 @@ describe('Credential', () => { sign: SignCallback ): Promise<[ICredentialPresentation, IAttestation]> { // create claim - - const ctype = CType.fromProperties('Credential', { - name: { type: 'string' }, - }) - - const claim = Claim.fromCTypeAndClaimContents(ctype, contents, claimer.uri) + const claim = Claim.fromCTypeAndClaimContents( + testCType, + contents, + claimer.uri + ) // build credential with legitimations const credential = Credential.fromClaim(claim, { legitimations, @@ -576,7 +587,10 @@ describe('create presentation', () => { let attester: DidDocument let credential: ICredential - const ctype = CType.fromProperties(testCType.title, testCType.properties) + const ctype = CType.fromProperties('otherCType', { + name: { type: 'string' }, + age: { type: 'number' }, + }) // Returns a full DID that has the same subject of the first light DID, but the same key authentication key as the second one, if provided, or as the first one otherwise. function createMinimalFullDidFromLightDid( diff --git a/packages/core/src/ctype/CType.schemas.ts b/packages/core/src/ctype/CType.schemas.ts index ce63b0ddf..75c5e3adf 100644 --- a/packages/core/src/ctype/CType.schemas.ts +++ b/packages/core/src/ctype/CType.schemas.ts @@ -7,9 +7,72 @@ import { JsonSchema } from '@kiltprotocol/utils' -export const CTypeModel: JsonSchema.Schema = { +export const CTypeModelV1: JsonSchema.Schema & { $id: string } = { + // $id is not contained in schema when fetched from ipfs bc that is impossible with a content-addressed system + $id: 'ipfs://bafybeifzfxz6tfd2xo7ijxbfceaxo3l655yg7sovlsnpxgq2rwfl4kbfgm', + $schema: 'http://json-schema.org/draft-07/schema#', + title: 'CType Metaschema (V1)', + description: + 'Describes a CType, which is a JSON schema for validating KILT claim types.', + type: 'object', + properties: { + $id: { pattern: '^kilt:ctype:0x[0-9a-f]+$', type: 'string' }, + $schema: { + type: 'string', + // can't use a const referencing schema id for a content-addressed schema + }, + title: { type: 'string' }, + type: { const: 'object', type: 'string' }, + properties: { + patternProperties: { + '^.+$': { + oneOf: [ + { + additionalProperties: false, + properties: { + $ref: { + pattern: '^kilt:ctype:0x[0-9a-f]+(#/properties/.+)?$', + format: 'uri', + type: 'string', + }, + }, + required: ['$ref'], + }, + { + additionalProperties: false, + properties: { + format: { enum: ['date', 'time', 'uri'], type: 'string' }, + type: { + enum: ['boolean', 'integer', 'number', 'string'], + type: 'string', + }, + }, + required: ['type'], + }, + ], + type: 'object', + }, + }, + type: 'object', + }, + additionalProperties: { const: false, type: 'boolean' }, + }, + additionalProperties: false, + required: [ + '$id', + '$schema', + 'additionalProperties', + 'properties', + 'title', + 'type', + ], +} + +export const CTypeModelDraft01: JsonSchema.Schema & { $id: string } = { $id: 'http://kilt-protocol.org/draft-01/ctype#', $schema: 'http://json-schema.org/draft-07/schema#', + title: 'CType Metaschema (draft-01)', + description: `Describes a CType, which is a JSON schema for validating KILT claim types. This version has known issues, the use of schema ${CTypeModelV1.$id} is recommended instead.`, type: 'object', properties: { $id: { @@ -65,7 +128,44 @@ export const CTypeModel: JsonSchema.Schema = { required: ['$id', 'title', '$schema', 'properties', 'type'], } -export const MetadataModel = { +/** + * Schema describing any currently known CType; this means it either conforms to V1 or draft-01 of the CType schema. + * Using this schema allows CType validation to be agnostic to which version is used. + */ +export const CTypeModel: JsonSchema.Schema = { + $schema: 'http://json-schema.org/draft-07/schema', + oneOf: [ + // Option A): conforms to draft-01 of the CType meta sschema, which defines that the CType's $schema property must be equal to the CType meta schema's $id. + { $ref: CTypeModelDraft01.$id }, + // Option B): The CType's $schema property references V1 of the CType meta schema, in which case this meta schema must apply. + // The structure is different because V1 does not define the exact value of the $schema property because its $id is derived from the hash of its contents. + { + allOf: [ + // verifies that both of two (sub-)schemas validate against CType object. + { + // subschema 1: $schema is equal to CType meta schema V1's $id. + properties: { + $schema: { + type: 'string', + const: CTypeModelV1.$id, + }, + }, + }, + { + // subschema 2: CType meta schema V1. + $ref: CTypeModelV1.$id, + }, + ], + }, + ], + // CType meta schemas are embedded here, so that the references ($ref) can be resolved without having to load them first. + definitions: { + [CTypeModelDraft01.$id]: CTypeModelDraft01, + [CTypeModelV1.$id]: CTypeModelV1, + }, +} + +export const MetadataModel: JsonSchema.Schema = { $id: 'http://kilt-protocol.org/draft-01/ctype-metadata', $schema: 'http://json-schema.org/draft-07/schema#', type: 'object', @@ -103,7 +203,6 @@ export const MetadataModel = { }, properties: { type: 'object', - properties: {}, patternProperties: { '^.*$': { type: 'object', diff --git a/packages/core/src/ctype/CType.spec.ts b/packages/core/src/ctype/CType.spec.ts index 9a3451ad9..50815ec0a 100644 --- a/packages/core/src/ctype/CType.spec.ts +++ b/packages/core/src/ctype/CType.spec.ts @@ -12,11 +12,10 @@ import { SDKErrors } from '@kiltprotocol/utils' import { ConfigService } from '@kiltprotocol/config' import { ApiMocks } from '@kiltprotocol/testing' -import type { ICType, IClaim } from '@kiltprotocol/types' +import type { ICType } from '@kiltprotocol/types' import * as Claim from '../claim' -import * as Credential from '../credential' import * as CType from './CType.js' -import { CTypeModel } from './CType.schemas' +import { CTypeModel, CTypeModelDraft01 } from './CType.schemas' const mockedApi: any = ApiMocks.getMockedApi() ConfigService.set({ api: mockedApi }) @@ -28,76 +27,52 @@ const encodedAliceDid = ApiMocks.mockChainQueryReturn( ) const didAlice = 'did:kilt:4p6K4tpdZtY3rNqM2uorQmsS6d3woxtnWMHjtzGftHmDb41N' -describe('CType', () => { - let claimCtype: ICType - let claimContents: any - let claim: IClaim - beforeAll(async () => { - claimCtype = CType.fromProperties('CtypeModel 2', { - name: { type: 'string' }, - }) - - claimContents = { - name: 'Bob', - } - - claim = Claim.fromCTypeAndClaimContents(claimCtype, claimContents, didAlice) +it('consistent CType id generation', () => { + const ctypeV1 = CType.fromProperties('CtypeModel 1', { + 'first-property': { type: 'integer' }, + 'second-property': { type: 'string' }, }) - it('makes ctype object from schema without id', () => { - const ctype = CType.fromProperties('CtypeModel 1', { + expect(ctypeV1.$id).toMatchInlineSnapshot( + `"kilt:ctype:0x12c8edb42b455aa6c29fabda8f3768bd1e8577f0618f122072828e41b6f4f728"` + ) + + const ctypeV0 = CType.fromProperties( + 'CtypeModel 1', + { 'first-property': { type: 'integer' }, 'second-property': { type: 'string' }, - }) - - expect(ctype.$id).toBe( - 'kilt:ctype:0xba15bf4960766b0a6ad7613aa3338edce95df6b22ed29dd72f6e72d740829b84' - ) - }) + }, + 'draft-01' + ) - it('verifies the claim structure', () => { - expect(() => - CType.verifyClaimAgainstSchema(claim.contents, claimCtype) - ).not.toThrow() - claim.contents.name = 123 - expect(() => - CType.verifyClaimAgainstSchema(claim.contents, claimCtype) - ).toThrow() - }) - - it('throws error on faulty input', () => { - const wrongHashCtype: ICType = { - ...claimCtype, - $id: 'kilt:ctype:0x1234', - } - const faultySchemaCtype: ICType = { - ...claimCtype, - properties: null as unknown as ICType['properties'], - } + expect(ctypeV0.$id).toMatchInlineSnapshot( + `"kilt:ctype:0xba15bf4960766b0a6ad7613aa3338edce95df6b22ed29dd72f6e72d740829b84"` + ) +}) - const wrongSchemaIdCType: ICType = { - ...claimCtype, - $id: claimCtype.$id.replace('1', '2') as ICType['$id'], - } - expect(() => CType.verifyDataStructure(wrongHashCtype)).toThrowError( - SDKErrors.CTypeIdMismatchError - ) - expect(() => CType.verifyDataStructure(faultySchemaCtype)).toThrowError( - SDKErrors.ObjectUnverifiableError - ) - expect(() => - CType.verifyDataStructure(wrongSchemaIdCType) - ).toThrowErrorMatchingInlineSnapshot( - `"Provided $id \\"kilt:ctype:0xd5302762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c\\" does not match schema $id \\"kilt:ctype:0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c\\""` - ) +it('e2e', () => { + const claimCtype = CType.fromProperties('CtypeModel 2', { + name: { type: 'string' }, }) - it('verifies whether a ctype is registered on chain ', async () => { - await expect(CType.verifyStored(claimCtype)).rejects.toThrow() + const claimContents = { + name: 'Bob', + } - mockedApi.query.ctype.ctypes.mockResolvedValueOnce(encodedAliceDid) - await expect(CType.verifyStored(claimCtype)).resolves.not.toThrow() - }) + const claim = Claim.fromCTypeAndClaimContents( + claimCtype, + claimContents, + didAlice + ) + + expect(() => + CType.verifyClaimAgainstSchema(claim.contents, claimCtype) + ).not.toThrow() + claim.contents.name = 123 + expect(() => + CType.verifyClaimAgainstSchema(claim.contents, claimCtype) + ).toThrow() }) describe('blank ctypes', () => { @@ -109,83 +84,128 @@ describe('blank ctypes', () => { ctype2 = CType.fromProperties('claimedSomething', {}) }) - it('two ctypes with no properties have different hashes if id is different', () => { + it('two ctypes with no properties have different hashes if name is different', () => { expect(ctype1.$schema).toEqual(ctype2.$schema) expect(ctype1.properties).toEqual(ctype2.properties) expect(ctype1.title).not.toEqual(ctype2.title) expect(ctype1.$id).not.toEqual(ctype2.$id) }) - it('two claims on an empty ctypes will have different root hash', async () => { - const claimA1 = Claim.fromCTypeAndClaimContents(ctype1, {}, didAlice) - const claimA2 = Claim.fromCTypeAndClaimContents(ctype2, {}, didAlice) - - expect(Credential.fromClaim(claimA1).rootHash).not.toEqual( - Credential.fromClaim(claimA2).rootHash - ) - }) it('typeguard returns true or false for complete or incomplete CTypes', () => { expect(CType.isICType(ctype1)).toBe(true) expect(CType.isICType({ ...ctype2, owner: '' })).toBe(false) }) }) -describe('CType verification', () => { - const ctypeInput = { - $id: 'kilt:ctype:0x1', - $schema: 'http://kilt-protocol.org/draft-01/ctype-input#', - title: 'Ctype Title', - properties: [ - { - $id: 'kilt:ctype:0xfirst-property', - $ref: 'First Property', - type: 'integer', - }, - { - $id: 'kilt:ctype:0xsecond-property', - $ref: 'Second Property', - type: 'string', - }, - ], - type: 'object', - required: ['first-property', 'second-property'], - } as unknown as ICType - - const ctypeWrapperModel: ICType = CType.fromProperties('name', { +const cTypeDraft01: ICType = CType.fromProperties( + 'name', + { 'first-property': { type: 'integer' }, 'second-property': { type: 'string' }, - }) + }, + 'draft-01' +) - const goodClaim = { - 'first-property': 10, - 'second-property': '12', +const cTypeV1: ICType = CType.fromProperties('name', { + 'first-property': { type: 'integer' }, + 'second-property': { type: 'string' }, +}) + +describe.each([[cTypeDraft01], [cTypeV1]])( + 'Claim verification with CType of schema version %#', + (cType) => { + const goodClaim = { + 'first-property': 10, + 'second-property': '12', + } + const partialClaim = { + 'first-property': 10, + } + const badClaim = { + ...goodClaim, + 'first-property': '1', + } + const unexpectedPropsClaim = { + ...goodClaim, + 'third-property': true, + } + + it('accepts good CType', () => { + expect(() => CType.verifyDataStructure(cType)).not.toThrow() + expect(() => + CType.verifyObjectAgainstSchema(cType, CTypeModel) + ).not.toThrow() + }) + + it('accepts correct & partial claims', () => { + expect(() => + CType.verifyClaimAgainstSchema(goodClaim, cType) + ).not.toThrow() + expect(() => + CType.verifyClaimAgainstSchema(partialClaim, cType) + ).not.toThrow() + expect(() => CType.verifyClaimAgainstSchema({}, cType)).not.toThrow() + }) + it('rejects incorrect claims', () => { + expect(() => CType.verifyClaimAgainstSchema(badClaim, cType)).toThrow( + SDKErrors.ObjectUnverifiableError + ) + // only the CTypes following the newer model protect against additional properties + if (cType.$schema === CTypeModelDraft01.$id) { + expect(() => + CType.verifyClaimAgainstSchema(unexpectedPropsClaim, cType) + ).not.toThrow() + } else { + expect(() => + CType.verifyClaimAgainstSchema(unexpectedPropsClaim, cType) + ).toThrow(SDKErrors.ObjectUnverifiableError) + } + }) } +) - const badClaim = { - 'first-property': '1', - 'second-property': '12', - 'third-property': true, +describe.each([[cTypeDraft01], [cTypeV1]])( + 'CType verification with schema version %#', + (cType) => { + it('id verification', () => { + const wrongIdCtype: ICType = { + ...cType, + $id: cType.$id.substring(11) as ICType['$id'], + } + const wrongHashCType: ICType = { + ...cType, + $id: cType.$id.replace(/[1-9]/, (i) => + String(Number(i) - 1) + ) as ICType['$id'], + } + expect(() => CType.verifyDataStructure(wrongIdCtype)).toThrowError( + SDKErrors.ObjectUnverifiableError + ) + expect(() => CType.verifyDataStructure(wrongHashCType)).toThrowError( + SDKErrors.CTypeIdMismatchError + ) + }) + it('throws error on faulty input', () => { + const faultySchemaCtype: ICType = { + ...cType, + properties: null as unknown as ICType['properties'], + } + const wrongSchemaIdCType: ICType = { + ...cType, + $schema: cType.$schema.replace(/[1-9]/, (i) => + String(Number(i) - 1) + ) as ICType['$id'], + } + + expect(() => CType.verifyDataStructure(faultySchemaCtype)).toThrowError( + SDKErrors.ObjectUnverifiableError + ) + expect(() => CType.verifyDataStructure(wrongSchemaIdCType)).toThrowError( + SDKErrors.ObjectUnverifiableError + ) + }) } - it('verifies claims', () => { - expect(() => - CType.verifyClaimAgainstSchema(goodClaim, ctypeWrapperModel) - ).not.toThrow() - expect(() => - CType.verifyClaimAgainstSchema(badClaim, ctypeWrapperModel) - ).toThrow() - expect(() => - CType.verifyObjectAgainstSchema(badClaim, CTypeModel, []) - ).toThrow() - expect(() => { - CType.verifyClaimAgainstSchema(badClaim, ctypeInput) - }).toThrow(SDKErrors.ObjectUnverifiableError) - }) - it('verifies ctypes', () => { - expect(() => - CType.verifyObjectAgainstSchema(ctypeWrapperModel, CTypeModel) - ).not.toThrow() - }) -}) +) describe('CType registration verification', () => { const ctype = CType.fromProperties('CtypeModel 2', { diff --git a/packages/core/src/ctype/CType.ts b/packages/core/src/ctype/CType.ts index ec928a388..6c061809d 100644 --- a/packages/core/src/ctype/CType.ts +++ b/packages/core/src/ctype/CType.ts @@ -23,7 +23,12 @@ import type { } from '@kiltprotocol/types' import { Crypto, SDKErrors, JsonSchema, jsonabc } from '@kiltprotocol/utils' import { ConfigService } from '@kiltprotocol/config' -import { CTypeModel, MetadataModel } from './CType.schemas.js' +import { + CTypeModel, + MetadataModel, + CTypeModelDraft01, + CTypeModelV1, +} from './CType.schemas.js' /** * Utility for (re)creating CType hashes. Sorts the schema and strips the $id property (which contains the CType hash) before stringifying. @@ -93,15 +98,17 @@ export function getIdForSchema( * @param object Data to be verified against schema. * @param schema Schema to verify against. * @param messages Optional empty array. If passed, this receives all verification errors. + * @param referencedSchemas If schema contains references ($ref) to other schemas, their definitions must be added here in form of an array. */ export function verifyObjectAgainstSchema( object: Record, - schema: Record, - messages?: string[] + schema: JsonSchema.Schema, + messages?: string[], + referencedSchemas?: JsonSchema.Schema[] ): void { const validator = new JsonSchema.Validator(schema, '7', false) - if (schema.$id !== CTypeModel.$id) { - validator.addSchema(CTypeModel) + if (referencedSchemas) { + referencedSchemas.forEach((i) => validator.addSchema(i)) } const { valid, errors } = validator.validate(object) if (valid === true) return @@ -128,7 +135,7 @@ export function verifyClaimAgainstSchema( schema: ICType, messages?: string[] ): void { - verifyObjectAgainstSchema(schema, CTypeModel) + verifyObjectAgainstSchema(schema, CTypeModel, messages) verifyObjectAgainstSchema(claimContents, schema, messages) } @@ -175,21 +182,8 @@ export function verifyClaimAgainstNestedSchemas( claimContents: Record, messages?: string[] ): void { - const validator = new JsonSchema.Validator(cType, '7', false) - nestedCTypes.forEach((ctype) => { - validator.addSchema(ctype) - }) - validator.addSchema(CTypeModel) - const { valid, errors } = validator.validate(claimContents) - if (valid === true) return - if (messages) { - errors.forEach((error) => { - messages.push(error.error) - }) - } - throw new SDKErrors.NestedClaimUnverifiableError(undefined, { - cause: errors, - }) + verifyObjectAgainstSchema(cType, CTypeModel, messages) + verifyObjectAgainstSchema(claimContents, cType, messages, nestedCTypes) } /** @@ -201,24 +195,34 @@ export function verifyCTypeMetadata(metadata: ICTypeMetadata): void { verifyObjectAgainstSchema(metadata, MetadataModel) } +const cTypeVersionToSchemaId = { + 'draft-01': CTypeModelDraft01.$id, + V1: CTypeModelV1.$id, +} + /** * Creates a new [[ICType]] object from a set of atomic claims and a title. * The CType id will be automatically generated. * * @param title The new CType's title as a string. * @param properties Key-value pairs describing the admissible atomic claims for a credential with this CType. The value of each property is a json-schema (for example `{ "type": "number" }`) used to validate that property. - * @returns A ctype object, including cTypeId, $schema, and type. + * @param version Use 'V1' to create a CType according to the latest metaschema version (default) and 'draft-01' to produce a legacy CType. Included for backwards-compatibility. + * @returns A complete JSON schema (CType) with an $id derived from the hashed schema. Each CType references a meta schema that applies to it via the $schema property; its value depends on the `version` parameter. */ export function fromProperties( title: ICType['title'], - properties: ICType['properties'] + properties: ICType['properties'], + version: 'draft-01' | 'V1' = 'V1' ): ICType { const schema: Omit = { properties, title, - $schema: 'http://kilt-protocol.org/draft-01/ctype#', + $schema: cTypeVersionToSchemaId[version], type: 'object', } + if (version === 'V1') { + schema.additionalProperties = false + } const ctype = jsonabc.sortObj({ ...schema, $id: getIdForSchema(schema) }) verifyDataStructure(ctype) return ctype diff --git a/packages/core/src/ctype/Ctype.nested.spec.ts b/packages/core/src/ctype/Ctype.nested.spec.ts index 4c813daae..5b9dd7b8e 100644 --- a/packages/core/src/ctype/Ctype.nested.spec.ts +++ b/packages/core/src/ctype/Ctype.nested.spec.ts @@ -134,7 +134,7 @@ describe('Nested CTypes', () => { claimContents, didAlice ) - ).toThrowError(SDKErrors.NestedClaimUnverifiableError) + ).toThrowError(SDKErrors.ObjectUnverifiableError) expect(() => CType.verifyClaimAgainstNestedSchemas( deeplyNestedCType, @@ -164,6 +164,6 @@ describe('Nested CTypes', () => { claimDeepContents, didAlice ) - ).toThrowError(SDKErrors.NestedClaimUnverifiableError) + ).toThrowError(SDKErrors.ObjectUnverifiableError) }) }) diff --git a/packages/types/src/CType.ts b/packages/types/src/CType.ts index 45bfc673c..f056abeac 100644 --- a/packages/types/src/CType.ts +++ b/packages/types/src/CType.ts @@ -7,14 +7,7 @@ import type { HexString } from '@polkadot/util/types' -export type InstanceType = - | 'array' - | 'boolean' - | 'integer' - | 'null' - | 'number' - | 'object' - | 'string' +export type InstanceType = 'boolean' | 'integer' | 'number' | 'string' export type CTypeHash = HexString @@ -23,7 +16,8 @@ export interface ICType { $schema: string title: string properties: { - [key: string]: { $ref?: string; type?: InstanceType; format?: string } + [key: string]: { type: InstanceType; format?: string } | { $ref: string } } type: 'object' + additionalProperties?: false } diff --git a/packages/utils/src/SDKErrors.ts b/packages/utils/src/SDKErrors.ts index e13e13b67..2ffe303e9 100644 --- a/packages/utils/src/SDKErrors.ts +++ b/packages/utils/src/SDKErrors.ts @@ -159,8 +159,6 @@ export class CredentialUnverifiableError extends SDKError {} export class ClaimUnverifiableError extends SDKError {} -export class NestedClaimUnverifiableError extends SDKError {} - export class IdentityMismatchError extends SDKError { constructor(context?: string, type?: string) { if (type && context) { From 6f2c0122d061958727f65908f1891125722dc6fd Mon Sep 17 00:00:00 2001 From: Github Action Date: Tue, 21 Feb 2023 16:22:40 +0000 Subject: [PATCH 002/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 6009ebfe3..bf83c6085 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.0-5", + "version": "0.32.0-6", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index fe3ad5cc8..7939d44d6 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.0-5", + "version": "0.32.0-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index f0cd9f71b..200d12df5 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.0-5", + "version": "0.32.0-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 28b6a0eff..aa532b501 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.0-5", + "version": "0.32.0-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 83d62f9fd..1c2fb28ca 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.0-5", + "version": "0.32.0-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 122efe505..b11f4e4c0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.0-5", + "version": "0.32.0-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index a89f967b1..eedc251ec 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.0-5", + "version": "0.32.0-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 4997dc8ec..e3fae11e8 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.0-5", + "version": "0.32.0-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index d337f57fa..6ffbc5ec2 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.0-5", + "version": "0.32.0-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index a717376d3..f352af1df 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.0-5", + "version": "0.32.0-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 7755b5156..67233dd1c 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.0-5", + "version": "0.32.0-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 53f397575..f08543e3e 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.0-5", + "version": "0.32.0-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 99a8c9944..09a208a5a 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.0-5", + "version": "0.32.0-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 3af68425c..563f98463 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.0-5", + "version": "0.32.0-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From e10398faf598d97d3224576c29a116c0f79e75c9 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Wed, 1 Mar 2023 10:49:17 +0100 Subject: [PATCH 003/130] chore: enable tests for ethereum linking (#724) --- .../AccountLinking.spec.ts | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/packages/core/src/__integrationtests__/AccountLinking.spec.ts b/packages/core/src/__integrationtests__/AccountLinking.spec.ts index 62d855c94..111ce49b1 100644 --- a/packages/core/src/__integrationtests__/AccountLinking.spec.ts +++ b/packages/core/src/__integrationtests__/AccountLinking.spec.ts @@ -149,15 +149,19 @@ describe('When there is an on-chain DID', () => { describe.each(['ed25519', 'sr25519', 'ecdsa', 'ethereum'])( 'and an %s account different than the sender to link', (keyType) => { - // TODO: remove this line to test against ethereum linking enabled chains - const it = keyType === 'ethereum' ? test.skip : test - + let skip = false let keypair: KeyringPair let keypairChain: string beforeAll(async () => { - // TODO: remove this line to test against ethereum linking enabled chains - if (keyType === 'ethereum') return - + if ( + keyType === 'ethereum' && + // @ts-ignore palletVersion exists but is not augmented + (await api.query.didLookup.palletVersion()) < 3 + ) { + console.warn('skipping ethereum tests') + skip = true + return + } const keyTool = makeSigningKeyTool(keyType as KiltKeyringPair['type']) keypair = keyTool.keypair keypairChain = Did.accountToChain(keypair.address) @@ -168,6 +172,9 @@ describe('When there is an on-chain DID', () => { }, 40_000) it('should be possible to associate the account while the sender pays the deposit', async () => { + if (skip) { + return + } const args = await Did.associateAccountToChainArgs( keypair.address, did.uri, @@ -204,6 +211,9 @@ describe('When there is an on-chain DID', () => { expect(queryByAccount.document.uri).toStrictEqual(did.uri) }) it('should be possible to associate the account to a new DID while the sender pays the deposit', async () => { + if (skip) { + return + } const args = await Did.associateAccountToChainArgs( keypair.address, newDid.uri, @@ -237,6 +247,9 @@ describe('When there is an on-chain DID', () => { expect(queryByAccount.document.uri).toStrictEqual(newDid.uri) }) it('should be possible for the DID to remove the link', async () => { + if (skip) { + return + } const removeLinkTx = api.tx.didLookup.removeAccountAssociation(keypairChain) const signedTx = await Did.authorizeTx( From f8b54cd31f5ff1338990a825e5fec7497d3af278 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Wed, 1 Mar 2023 12:52:49 +0100 Subject: [PATCH 004/130] refactor!: fetch attestation as part of verifyCredential (#708) * feat: credential attestation verification helper * feat: report attestation <> credential mismatching attributes in error message * refactor!: call verifyAttested from verifyCredential * refactor!: return VerifiedCredential from verify{Credential,Presenation} * fix: verifyAgainstCredential didn't check delegation * chore: add {} to all ifs * chore: improve docstrings * test: add tests for attestation recheck --- .../__integrationtests__/Attestation.spec.ts | 14 +- .../__integrationtests__/Delegation.spec.ts | 2 +- packages/core/src/attestation/Attestation.ts | 20 +- .../core/src/credential/Credential.spec.ts | 205 ++++++++++++++++-- packages/core/src/credential/Credential.ts | 134 +++++++++--- .../core/src/delegation/DelegationNode.ts | 9 +- 6 files changed, 324 insertions(+), 60 deletions(-) diff --git a/packages/core/src/__integrationtests__/Attestation.spec.ts b/packages/core/src/__integrationtests__/Attestation.spec.ts index ea780fe03..749484602 100644 --- a/packages/core/src/__integrationtests__/Attestation.spec.ts +++ b/packages/core/src/__integrationtests__/Attestation.spec.ts @@ -158,7 +158,7 @@ describe('When there is an attester, claimer and ctype drivers license', () => { await expect( Credential.verifySignature(presentation) ).resolves.not.toThrow() - await Credential.verifyPresentation(presentation) + Credential.verifyWellFormed(presentation, { ctype: driversLicenseCType }) const attestation = Attestation.fromCredentialAndDid( presentation, @@ -183,6 +183,10 @@ describe('When there is an attester, claimer and ctype drivers license', () => { expect(storedAttestation).not.toBeNull() expect(storedAttestation?.revoked).toBe(false) + await expect( + Credential.verifyPresentation(presentation) + ).resolves.toMatchObject({ attester: attester.uri, revoked: false }) + // Claim the deposit back by submitting the reclaimDeposit extrinsic with the deposit payer's account. const reclaimTx = api.tx.attestation.reclaimDeposit(attestation.claimHash) await submitTx(reclaimTx, tokenHolder) @@ -191,6 +195,10 @@ describe('When there is an attester, claimer and ctype drivers license', () => { expect( (await api.query.attestation.attestations(attestation.claimHash)).isNone ).toBe(true) + + await expect( + Credential.verifyPresentation(presentation) + ).rejects.toThrowErrorMatchingInlineSnapshot(`"Attestation not found"`) }, 60_000) it('should not be possible to attest a claim without enough tokens', async () => { @@ -399,6 +407,10 @@ describe('When there is an attester, claimer and ctype drivers license', () => { ) expect(storedAttestationAfter).not.toBeNull() expect(storedAttestationAfter?.revoked).toBe(true) + + await expect( + Credential.verifyCredential(credential) + ).resolves.toMatchObject({ attester: attester.uri, revoked: true }) }, 40_000) it('should be possible for the deposit payer to remove an attestation', async () => { diff --git a/packages/core/src/__integrationtests__/Delegation.spec.ts b/packages/core/src/__integrationtests__/Delegation.spec.ts index 340e1463c..b2d56a31a 100644 --- a/packages/core/src/__integrationtests__/Delegation.spec.ts +++ b/packages/core/src/__integrationtests__/Delegation.spec.ts @@ -195,7 +195,7 @@ describe('and attestation rights have been delegated', () => { await expect( Credential.verifySignature(presentation) ).resolves.not.toThrow() - await Credential.verifyPresentation(presentation) + Credential.verifyWellFormed(presentation, { ctype: driversLicenseCType }) const attestation = Attestation.fromCredentialAndDid( credential, diff --git a/packages/core/src/attestation/Attestation.ts b/packages/core/src/attestation/Attestation.ts index aceb40d81..8e6ddb4f4 100644 --- a/packages/core/src/attestation/Attestation.ts +++ b/packages/core/src/attestation/Attestation.ts @@ -136,12 +136,22 @@ export function verifyAgainstCredential( attestation: IAttestation, credential: ICredential ): void { - if ( - credential.claim.cTypeHash !== attestation.cTypeHash || - credential.rootHash !== attestation.claimHash - ) { + const credentialMismatch = + credential.claim.cTypeHash !== attestation.cTypeHash + const ctypeMismatch = credential.rootHash !== attestation.claimHash + const delegationMismatch = + credential.delegationId !== attestation.delegationId + if (credentialMismatch || ctypeMismatch || delegationMismatch) { throw new SDKErrors.CredentialUnverifiableError( - 'Attestation does not match credential' + `Some attributes of the on-chain attestation diverge from the credential: ${[ + 'cTypeHash', + 'delegationId', + 'claimHash', + ] + .filter( + (_, i) => [ctypeMismatch, delegationMismatch, credentialMismatch][i] + ) + .join(', ')}` ) } Credential.verifyDataIntegrity(credential) diff --git a/packages/core/src/credential/Credential.spec.ts b/packages/core/src/credential/Credential.spec.ts index 33c019a58..2d303ce80 100644 --- a/packages/core/src/credential/Credential.spec.ts +++ b/packages/core/src/credential/Credential.spec.ts @@ -28,14 +28,18 @@ import type { import { Crypto, SDKErrors, UUID } from '@kiltprotocol/utils' import * as Did from '@kiltprotocol/did' import { + ApiMocks, createLocalDemoFullDidFromKeypair, KeyTool, makeSigningKeyTool, } from '@kiltprotocol/testing' +import { ConfigService } from '@kiltprotocol/config' +import { randomAsHex } from '@polkadot/util-crypto' import * as Attestation from '../attestation' import * as Claim from '../claim' import * as CType from '../ctype' import * as Credential from './Credential' +import { init } from '../kilt' const testCType = CType.fromProperties('Credential', { a: { type: 'string' }, @@ -62,6 +66,20 @@ function buildCredential( return credential } +beforeAll(async () => { + const api = ApiMocks.createAugmentedApi() + api.query.attestation = { + attestations: jest.fn().mockResolvedValue( + ApiMocks.mockChainQueryReturn('attestation', 'attestations', { + revoked: false, + attester: '4s5d7QHWSX9xx4DLafDtnTHK87n5e9G3UoKRrCDQ2gnrzYmZ', + ctypeHash: CType.idToHash(testCType.$id), + } as any) + ), + } as any + await init({ api }) +}) + describe('Credential', () => { const identityAlice = 'did:kilt:4nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS' @@ -85,9 +103,11 @@ describe('Credential', () => { ) // check proof on complete data expect(() => Credential.verifyDataIntegrity(credential)).not.toThrow() - await Credential.verifyCredential(credential, { - ctype: testCType, - }) + await expect( + Credential.verifyCredential(credential, { + ctype: testCType, + }) + ).resolves.toMatchObject({ revoked: false, attester: identityBob }) // just deleting a field will result in a wrong proof delete credential.claimNonceMap[Object.keys(credential.claimNonceMap)[0]] @@ -287,11 +307,19 @@ describe('Credential', () => { [] ) expect(() => - Credential.verifyAgainstCType(builtCredential, testCType) + Credential.verifyWellFormed(builtCredential, { ctype: testCType }) ).not.toThrow() - builtCredential.claim.contents.name = 123 + const builtCredentialWrong = buildCredential( + identityBob, + { + a: 'a', + b: 'b', + c: 1, + }, + [] + ) expect(() => - Credential.verifyAgainstCType(builtCredential, testCType) + Credential.verifyWellFormed(builtCredentialWrong, { ctype: testCType }) ).toThrow() }) @@ -304,6 +332,103 @@ describe('Credential', () => { Credential.fromClaim(claimA2).rootHash ) }) + + it('re-checks attestation status', async () => { + const api = ConfigService.get('api') + const credential = buildCredential( + identityBob, + { + a: 'a', + b: 'b', + c: 'c', + }, + [] + ) + + const { attester, revoked } = await Credential.verifyAttested(credential) + expect(revoked).toBe(false) + await expect( + Credential.refreshRevocationStatus({ ...credential, revoked, attester }) + ).resolves.toMatchObject({ revoked, attester }) + + jest.mocked(api.query.attestation.attestations).mockResolvedValueOnce( + ApiMocks.mockChainQueryReturn('attestation', 'attestations', { + revoked: true, + attester: Did.toChain(attester), + ctypeHash: credential.claim.cTypeHash, + } as any) as any + ) + await expect( + Credential.refreshRevocationStatus({ ...credential, revoked, attester }) + ).resolves.toMatchObject({ revoked: true, attester }) + + await expect( + Credential.refreshRevocationStatus(credential as any) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"This function expects a VerifiedCredential with properties \`revoked\` (boolean) and \`attester\` (string)"` + ) + + jest + .mocked(api.query.attestation.attestations) + .mockResolvedValueOnce( + ApiMocks.mockChainQueryReturn('attestation', 'attestations') as any + ) + await expect( + Credential.refreshRevocationStatus({ ...credential, revoked, attester }) + ).rejects.toThrowErrorMatchingInlineSnapshot(`"Attestation not found"`) + + jest.mocked(api.query.attestation.attestations).mockResolvedValueOnce( + ApiMocks.mockChainQueryReturn( + 'attestation', + 'attestations', + ApiMocks.mockChainQueryReturn('attestation', 'attestations', { + revoked: false, + attester: Did.toChain(identityAlice), + ctypeHash: credential.claim.cTypeHash, + } as any) as any + ) as any + ) + await expect( + Credential.refreshRevocationStatus({ ...credential, revoked, attester }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Attester has changed since first verification"` + ) + + jest.mocked(api.query.attestation.attestations).mockResolvedValueOnce( + ApiMocks.mockChainQueryReturn( + 'attestation', + 'attestations', + ApiMocks.mockChainQueryReturn('attestation', 'attestations', { + revoked: true, + attester: Did.toChain(attester), + ctypeHash: randomAsHex(), + } as any) as any + ) as any + ) + await expect( + Credential.refreshRevocationStatus({ ...credential, revoked, attester }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Some attributes of the on-chain attestation diverge from the credential: claimHash"` + ) + + jest.mocked(api.query.attestation.attestations).mockResolvedValueOnce( + ApiMocks.mockChainQueryReturn( + 'attestation', + 'attestations', + ApiMocks.mockChainQueryReturn('attestation', 'attestations', { + revoked: true, + attester: Did.toChain(attester), + ctypeHash: credential.claim.cTypeHash, + authorizationId: { Delegation: randomAsHex() }, + } as any) as any + ) as any + ) + await expect( + Credential.refreshRevocationStatus({ ...credential, revoked, attester }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Some attributes of the on-chain attestation diverge from the credential: delegationId"` + ) + }) }) describe('Presentations', () => { @@ -378,6 +503,16 @@ describe('Presentations', () => { [], keyAlice.getSignCallback(identityAlice) ) + + jest + .mocked(ConfigService.get('api').query.attestation.attestations) + .mockResolvedValue( + ApiMocks.mockChainQueryReturn('attestation', 'attestations', { + revoked: false, + attester: Did.toChain(identityBob.uri), + ctypeHash: CType.idToHash(testCType.$id), + } as any) as any + ) }) it('verify credentials signed by a full DID', async () => { @@ -395,9 +530,11 @@ describe('Presentations', () => { // check proof on complete data expect(() => Credential.verifyDataIntegrity(presentation)).not.toThrow() - await Credential.verifyPresentation(presentation, { - didResolveKey, - }) + await expect( + Credential.verifyPresentation(presentation, { + didResolveKey, + }) + ).resolves.toMatchObject({ revoked: false, attester: identityBob.uri }) }) it('verify credentials signed by a light DID', async () => { const { getSignCallback, authentication } = makeSigningKeyTool('ed25519') @@ -419,9 +556,11 @@ describe('Presentations', () => { // check proof on complete data expect(() => Credential.verifyDataIntegrity(presentation)).not.toThrow() - await Credential.verifyPresentation(presentation, { - didResolveKey, - }) + await expect( + Credential.verifyPresentation(presentation, { + didResolveKey, + }) + ).resolves.toMatchObject({ revoked: false, attester: identityBob.uri }) }) it('throws if signature is missing on credential presentation', async () => { @@ -658,6 +797,16 @@ describe('create presentation', () => { migratedClaimerFullDid.uri ) ) + + jest + .mocked(ConfigService.get('api').query.attestation.attestations) + .mockResolvedValue( + ApiMocks.mockChainQueryReturn('attestation', 'attestations', { + revoked: false, + attester: Did.toChain(attester.uri), + ctypeHash: CType.idToHash(ctype.$id), + } as any) as any + ) }) it('should create presentation and exclude specific attributes using a full DID', async () => { @@ -670,9 +819,11 @@ describe('create presentation', () => { ), challenge, }) - await Credential.verifyPresentation(presentation, { - didResolveKey, - }) + await expect( + Credential.verifyPresentation(presentation, { + didResolveKey, + }) + ).resolves.toMatchObject({ revoked: false, attester: attester.uri }) expect(presentation.claimerSignature?.challenge).toEqual(challenge) }) it('should create presentation and exclude specific attributes using a light DID', async () => { @@ -697,9 +848,11 @@ describe('create presentation', () => { ), challenge, }) - await Credential.verifyPresentation(presentation, { - didResolveKey, - }) + await expect( + Credential.verifyPresentation(presentation, { + didResolveKey, + }) + ).resolves.toMatchObject({ revoked: false, attester: attester.uri }) expect(presentation.claimerSignature?.challenge).toEqual(challenge) }) it('should create presentation and exclude specific attributes using a migrated DID', async () => { @@ -726,9 +879,11 @@ describe('create presentation', () => { ), challenge, }) - await Credential.verifyPresentation(presentation, { - didResolveKey, - }) + await expect( + Credential.verifyPresentation(presentation, { + didResolveKey, + }) + ).resolves.toMatchObject({ revoked: false, attester: attester.uri }) expect(presentation.claimerSignature?.challenge).toEqual(challenge) }) @@ -795,9 +950,13 @@ describe('create presentation', () => { }) it('should verify the credential claims structure against the ctype', () => { - expect(() => Credential.verifyAgainstCType(credential, ctype)).not.toThrow() + expect(() => + CType.verifyClaimAgainstSchema(credential.claim.contents, ctype) + ).not.toThrow() credential.claim.contents.name = 123 - expect(() => Credential.verifyAgainstCType(credential, ctype)).toThrow() + expect(() => + CType.verifyClaimAgainstSchema(credential.claim.contents, ctype) + ).toThrow() }) }) diff --git a/packages/core/src/credential/Credential.ts b/packages/core/src/credential/Credential.ts index 45a08a574..ca24f967f 100644 --- a/packages/core/src/credential/Credential.ts +++ b/packages/core/src/credential/Credential.ts @@ -17,6 +17,7 @@ * @packageDocumentation */ +import { ConfigService } from '@kiltprotocol/config' import { isDidSignature, verifyDidSignature, @@ -26,6 +27,7 @@ import { } from '@kiltprotocol/did' import type { DidResolveKey, + DidUri, Hash, IAttestation, IClaim, @@ -36,6 +38,7 @@ import type { SignCallback, } from '@kiltprotocol/types' import { Crypto, DataUtils, SDKErrors } from '@kiltprotocol/utils' +import * as Attestation from '../attestation/index.js' import * as Claim from '../claim/index.js' import { hashClaimContents } from '../claim/index.js' import { verifyClaimAgainstSchema } from '../ctype/index.js' @@ -128,8 +131,9 @@ export function makeSigningData( * @param input - The credential to check. */ export function verifyRootHash(input: ICredential): void { - if (input.rootHash !== calculateRootHash(input)) + if (input.rootHash !== calculateRootHash(input)) { throw new SDKErrors.RootHashUnverifiableError() + } } /** @@ -175,12 +179,14 @@ export function verifyDataStructure(input: ICredential): void { if (!('claimNonceMap' in input)) { throw new SDKErrors.ClaimNonceMapMissingError() } - if (typeof input.claimNonceMap !== 'object') + if (typeof input.claimNonceMap !== 'object') { throw new SDKErrors.ClaimNonceMapMalformedError() + } Object.entries(input.claimNonceMap).forEach(([digest, nonce]) => { DataUtils.verifyIsHex(digest, 256) - if (!digest || typeof nonce !== 'string' || !nonce) + if (!digest || typeof nonce !== 'string' || !nonce) { throw new SDKErrors.ClaimNonceMapMalformedError() + } }) if (!('claimHashes' in input)) { @@ -192,20 +198,6 @@ export function verifyDataStructure(input: ICredential): void { } } -/** - * Checks the [[Credential]] with a given [[CType]] to check if the included claim meets the [[ICType.$schema]] structure. - * - * @param credential A [[Credential]] for the attester. - * @param ctype A [[CType]] to verify the [[Claim]] structure. - */ -export function verifyAgainstCType( - credential: ICredential, - ctype: ICType -): void { - verifyDataStructure(credential) - verifyClaimAgainstSchema(credential.claim.contents, ctype) -} - /** * Verifies the signature of the [[ICredentialPresentation]]. * It supports migrated DIDs, meaning that if the original claim within the [[ICredential]] included a light DID that was afterwards upgraded, @@ -228,11 +220,11 @@ export async function verifySignature( } = {} ): Promise { const { claimerSignature } = input - if (challenge && challenge !== claimerSignature.challenge) + if (challenge && challenge !== claimerSignature.challenge) { throw new SDKErrors.SignatureUnverifiableError( 'Challenge differs from expected' ) - + } const signingData = makeSigningData(input, claimerSignature.challenge) await verifyDidSignature({ ...signatureFromJson(claimerSignature), @@ -293,43 +285,133 @@ type VerifyOptions = { /** * Verifies data structure & data integrity of a credential object. + * This combines all offline sanity checks that can be performed on an ICredential object. + * A credential is valid only if it is well formed AND there is an on-chain attestation record referencing its root hash. + * To check the latter condition as well, you need to call [[verifyCredential]] or [[verifyPresentation]]. * * @param credential - The object to check. * @param options - Additional parameter for more verification steps. * @param options.ctype - CType which the included claim should be checked against. */ -export async function verifyCredential( +export function verifyWellFormed( credential: ICredential, { ctype }: VerifyOptions = {} -): Promise { +): void { verifyDataStructure(credential) verifyDataIntegrity(credential) if (ctype) { - verifyAgainstCType(credential, ctype) + verifyClaimAgainstSchema(credential.claim.contents, ctype) } } /** - * Verifies data structure, data integrity and the claimer's signature of a credential presentation. + * Queries the attestation record for a credential and matches their data. Fails if no attestation exists, if it is revoked, or if the attestation data does not match the credential. * - * Upon presentation of a credential, a verifier would call this function. + * @param credential The [[ICredential]] whose attestation status should be checked. + * @returns An object containing the `attester` DID and `revoked` status of the on-chain attestation. + */ +export async function verifyAttested(credential: ICredential): Promise<{ + attester: DidUri + revoked: boolean +}> { + const api = ConfigService.get('api') + const { rootHash } = credential + const maybeAttestation = await api.query.attestation.attestations(rootHash) + if (maybeAttestation.isNone) { + throw new SDKErrors.CredentialUnverifiableError('Attestation not found') + } + const attestation = Attestation.fromChain( + maybeAttestation, + credential.rootHash + ) + Attestation.verifyAgainstCredential(attestation, credential) + const { owner: attester, revoked } = attestation + return { attester, revoked } +} + +export interface VerifiedCredential extends ICredential { + revoked: boolean + attester: DidUri +} + +/** + * Updates the revocation status of a previously verified credential to allow checking if it is still valid. + * + * @param verifiedCredential The output of [[verifyCredential]] or [[verifyPresentation]], which adds a `revoked` and `attester` property. + * @returns A promise of resolving to the same object but with the `revoked` property updated. + * The promise rejects if the attestation has been deleted or its data changed since verification. + */ +export async function refreshRevocationStatus( + verifiedCredential: VerifiedCredential +): Promise { + if ( + typeof verifiedCredential.attester !== 'string' || + typeof verifiedCredential.revoked !== 'boolean' + ) { + throw new TypeError( + 'This function expects a VerifiedCredential with properties `revoked` (boolean) and `attester` (string)' + ) + } + const { revoked, attester } = await verifyAttested(verifiedCredential) + if (attester !== verifiedCredential.attester) { + throw new SDKErrors.CredentialUnverifiableError( + 'Attester has changed since first verification' + ) + } + return { ...verifiedCredential, revoked } +} + +/** + * Performs all steps to verify a credential (unsigned), which includes verifying data structure, data integrity, and looking up its attestation on the KILT blockchain. + * In most cases, credentials submitted by a third party would be expected to be signed (a 'presentation'). + * To verify the additional signature as well, use `verifyPresentation`. + * + * @param credential - The object to check. + * @param options - Additional parameter for more verification steps. + * @param options.ctype - CType which the included claim should be checked against. + * @returns A [[VerifiedCredential]] object, which is the orignal credential with two additional properties: a boolean `revoked` status flag and the `attester` DID. + */ +export async function verifyCredential( + credential: ICredential, + { ctype }: VerifyOptions = {} +): Promise { + verifyWellFormed(credential, { ctype }) + const { revoked, attester } = await verifyAttested(credential) + return { + ...credential, + revoked, + attester, + } +} + +/** + * Performs all steps to verify a credential presentation (signed). + * In addition to verifying data structure, data integrity, and looking up the attestation record on the KILT blockchain, + * this involves verifying the claimer's signature over the credential. + * + * This is the function verifiers would typically call upon receiving a credential presentation from a third party. + * The attester's identity and the credential revocation status returned by this function would then be either displayed to an end user + * or processed in application logic deciding whether to accept or reject a credential submission + * (e.g., by matching the attester DID against an allow-list of trusted attesters). * * @param presentation - The object to check. * @param options - Additional parameter for more verification steps. * @param options.ctype - CType which the included claim should be checked against. * @param options.challenge - The expected value of the challenge. Verification will fail in case of a mismatch. * @param options.didResolveKey - The function used to resolve the claimer's key. Defaults to [[resolveKey]]. + * @returns A [[VerifiedCredential]] object, which is the orignal credential presentation with two additional properties: + * a boolean `revoked` status flag and the `attester` DID. */ export async function verifyPresentation( presentation: ICredentialPresentation, { ctype, challenge, didResolveKey = resolveKey }: VerifyOptions = {} -): Promise { - await verifyCredential(presentation, { ctype }) +): Promise { await verifySignature(presentation, { challenge, didResolveKey, }) + return verifyCredential(presentation, { ctype }) } /** diff --git a/packages/core/src/delegation/DelegationNode.ts b/packages/core/src/delegation/DelegationNode.ts index 106c54190..60d50a96d 100644 --- a/packages/core/src/delegation/DelegationNode.ts +++ b/packages/core/src/delegation/DelegationNode.ts @@ -341,14 +341,15 @@ export class DelegationNode implements IDelegationNode { /** * Checks on chain whether an identity with the given DID is delegating to the current node. * - * @param did The DID to search for. + * @param dids A DID or an array of DIDs to search for. * * @returns An object containing a `node` owned by the identity if it is delegating, plus the number of `steps` traversed. `steps` is 0 if the DID is owner of the current node. */ public async findAncestorOwnedBy( - did: DidUri + dids: DidUri | DidUri[] ): Promise<{ steps: number; node: DelegationNode | null }> { - if (this.account === did) { + const acceptedDids = Array.isArray(dids) ? dids : [dids] + if (acceptedDids.includes(this.account)) { return { steps: 0, node: this, @@ -362,7 +363,7 @@ export class DelegationNode implements IDelegationNode { } try { const parent = await fetch(this.parentId) - const result = await parent.findAncestorOwnedBy(did) + const result = await parent.findAncestorOwnedBy(acceptedDids) result.steps += 1 return result } catch { From 887b0abdb4109ce99730e57040ef09bbebb2422d Mon Sep 17 00:00:00 2001 From: Github Action Date: Wed, 1 Mar 2023 11:57:52 +0000 Subject: [PATCH 005/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index bf83c6085..135372b4e 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.0-6", + "version": "0.32.0-7", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 7939d44d6..45d56d8f6 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.0-6", + "version": "0.32.0-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 200d12df5..dd33a4e53 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.0-6", + "version": "0.32.0-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index aa532b501..243bd704e 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.0-6", + "version": "0.32.0-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 1c2fb28ca..0eecfbd65 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.0-6", + "version": "0.32.0-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index b11f4e4c0..335a7899e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.0-6", + "version": "0.32.0-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index eedc251ec..749179af5 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.0-6", + "version": "0.32.0-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index e3fae11e8..cb1b9f3c5 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.0-6", + "version": "0.32.0-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 6ffbc5ec2..31f368f1f 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.0-6", + "version": "0.32.0-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index f352af1df..c75fc7543 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.0-6", + "version": "0.32.0-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 67233dd1c..25859fba8 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.0-6", + "version": "0.32.0-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index f08543e3e..77eafee4c 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.0-6", + "version": "0.32.0-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 09a208a5a..fe12547a4 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.0-6", + "version": "0.32.0-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 563f98463..1d3b64edb 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.0-6", + "version": "0.32.0-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From fea185fa41f1c8d7b1aa4cc4bbaa30e4c7432cd0 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Wed, 1 Mar 2023 14:46:11 +0100 Subject: [PATCH 006/130] fix: integration test error matching --- .../src/__integrationtests__/Attestation.spec.ts | 14 ++++++++++---- .../core/src/__integrationtests__/Ctypes.spec.ts | 5 ++++- packages/core/src/__integrationtests__/Did.spec.ts | 8 +++++--- .../src/__integrationtests__/ErrorHandler.spec.ts | 2 +- .../src/__integrationtests__/Web3Names.spec.ts | 2 +- 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/packages/core/src/__integrationtests__/Attestation.spec.ts b/packages/core/src/__integrationtests__/Attestation.spec.ts index 749484602..46883e811 100644 --- a/packages/core/src/__integrationtests__/Attestation.spec.ts +++ b/packages/core/src/__integrationtests__/Attestation.spec.ts @@ -89,7 +89,7 @@ describe('handling attestations that do not exist', () => { ) await expect(submitTx(authorized, tokenHolder)).rejects.toMatchObject({ section: 'attestation', - name: 'AttestationNotFound', + name: expect.stringMatching(/^(Attestation)?NotFound$/), }) }, 30_000) @@ -103,7 +103,7 @@ describe('handling attestations that do not exist', () => { ) await expect(submitTx(authorized, tokenHolder)).rejects.toMatchObject({ section: 'attestation', - name: 'AttestationNotFound', + name: expect.stringMatching(/^(Attestation)?NotFound$/), }) }, 30_000) }) @@ -283,7 +283,10 @@ describe('When there is an attester, claimer and ctype drivers license', () => { await expect( submitTx(authorizedStoreTx, tokenHolder) - ).rejects.toMatchObject({ section: 'ctype', name: 'CTypeNotFound' }) + ).rejects.toMatchObject({ + section: 'ctype', + name: expect.stringMatching(/^(CType)?NotFound$/), + }) }, 60_000) describe('when there is a credential on-chain', () => { @@ -375,7 +378,10 @@ describe('When there is an attester, claimer and ctype drivers license', () => { await expect( submitTx(authorizedRevokeTx, tokenHolder) - ).rejects.toMatchObject({ section: 'attestation', name: 'Unauthorized' }) + ).rejects.toMatchObject({ + section: 'attestation', + name: expect.stringMatching(/^(Unauthorized|NotAuthorized)$/), + }) const storedAttestation = Attestation.fromChain( await api.query.attestation.attestations(attestation.claimHash), attestation.claimHash diff --git a/packages/core/src/__integrationtests__/Ctypes.spec.ts b/packages/core/src/__integrationtests__/Ctypes.spec.ts index 889e27c3a..4fac16e74 100644 --- a/packages/core/src/__integrationtests__/Ctypes.spec.ts +++ b/packages/core/src/__integrationtests__/Ctypes.spec.ts @@ -111,7 +111,10 @@ describe('When there is an CtypeCreator and a verifier', () => { ) await expect( submitTx(authorizedStoreTx2, paymentAccount) - ).rejects.toMatchObject({ section: 'ctype', name: 'CTypeAlreadyExists' }) + ).rejects.toMatchObject({ + section: 'ctype', + name: expect.stringMatching(/^(CType)?AlreadyExists$/), + }) if (hasBlockNumbers) { const retrievedCType = await CType.fetchFromChain(ctype.$id) diff --git a/packages/core/src/__integrationtests__/Did.spec.ts b/packages/core/src/__integrationtests__/Did.spec.ts index 2be5535d3..b86915244 100644 --- a/packages/core/src/__integrationtests__/Did.spec.ts +++ b/packages/core/src/__integrationtests__/Did.spec.ts @@ -184,7 +184,9 @@ describe('write and didDeleteTx', () => { // Will fail because count provided is too low await expect(submitTx(submittable, paymentAccount)).rejects.toMatchObject({ section: 'did', - name: 'StoredEndpointsCountTooLarge', + name: expect.stringMatching( + /^(StoredEndpointsCountTooLarge|MaxStoredEndpointsCountExceeded)$/ + ), }) }, 60_000) @@ -555,7 +557,7 @@ describe('DID authorization', () => { ) await expect(submitTx(tx2, paymentAccount)).rejects.toMatchObject({ section: 'did', - name: 'DidNotPresent', + name: expect.stringMatching(/^(DidNotPresent|NotFound)$/), }) await expect(CType.verifyStored(ctype)).rejects.toThrow() @@ -983,7 +985,7 @@ describe('DID management batching', () => { // Now, submitting will result in the second operation to fail AND the batch to fail, so we can test the atomic flag. await expect(submitTx(updateTx, paymentAccount)).rejects.toMatchObject({ section: 'did', - name: 'ServiceAlreadyPresent', + name: expect.stringMatching(/^ServiceAlready(Exists|Present)$/), }) const updatedFullDidLinkedInfo = await api.call.did.query( diff --git a/packages/core/src/__integrationtests__/ErrorHandler.spec.ts b/packages/core/src/__integrationtests__/ErrorHandler.spec.ts index 65b3ab444..497cc4139 100644 --- a/packages/core/src/__integrationtests__/ErrorHandler.spec.ts +++ b/packages/core/src/__integrationtests__/ErrorHandler.spec.ts @@ -76,7 +76,7 @@ it('records an extrinsic error when ctype does not exist', async () => { ) await expect(submitTx(tx, paymentAccount)).rejects.toMatchObject({ section: 'ctype', - name: 'CTypeNotFound', + name: expect.stringMatching(/^(CType)?NotFound$/), }) }, 30_000) diff --git a/packages/core/src/__integrationtests__/Web3Names.spec.ts b/packages/core/src/__integrationtests__/Web3Names.spec.ts index 1c814a65a..da6b9bba9 100644 --- a/packages/core/src/__integrationtests__/Web3Names.spec.ts +++ b/packages/core/src/__integrationtests__/Web3Names.spec.ts @@ -120,7 +120,7 @@ describe('When there is an Web3NameCreator and a payer', () => { await expect(p).rejects.toMatchObject({ section: 'web3Names', - name: 'Web3NameAlreadyClaimed', + name: expect.stringMatching(/^(Web3NameAlreadyClaimed|AlreadyExists)$/), }) }, 30_000) From 11ffbcb3414816ef7915beef87ab2ae96e6e9ef5 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Mon, 6 Mar 2023 10:07:53 +0100 Subject: [PATCH 007/130] fix: fromFemtoKilt fails for non-english locales (#731) * fixes balance formatting in fromFemtoKilt by forcing an English locale in the internals --- packages/core/src/balance/Balance.utils.ts | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/core/src/balance/Balance.utils.ts b/packages/core/src/balance/Balance.utils.ts index 548760f30..d475751aa 100644 --- a/packages/core/src/balance/Balance.utils.ts +++ b/packages/core/src/balance/Balance.utils.ts @@ -43,7 +43,7 @@ export const Prefixes = new Map([ * @returns String representation of the given BN with prefix and unit ('KILT' as default). */ export function formatKiltBalance( - amount: BN, + amount: BalanceNumber, additionalOptions?: BalanceOptions ): string { const options = { @@ -144,17 +144,15 @@ export function toFemtoKilt( export function fromFemtoKilt( input: BalanceNumber, decimals = 4, - options?: BalanceOptions + options: BalanceOptions = {} ): string { const inputBN = new BN(balanceNumberToString(input)) - const formatted = formatKiltBalance(inputBN, options) + // overwriting the locale as parsing a number from a string only works with English locale formatted numbers + const formatted = formatKiltBalance(inputBN, { ...options, locale: 'en' }) const [number, ...rest] = formatted.split(' ') - const negative = number.startsWith('-') - const localeNumber = new Intl.NumberFormat(options?.locale, { - minimumFractionDigits: 4, - }).format(Number(negative ? number.slice(1) : number)) - return `${negative ? '-' : ''}${localeNumber.slice( - 0, - localeNumber.length - 4 + decimals - )} ${rest.join(' ')}` + const localeNumber = new Intl.NumberFormat(options.locale, { + minimumFractionDigits: decimals + 1, + maximumFractionDigits: decimals + 1, + }).format(Number(number)) + return `${localeNumber.slice(0, localeNumber.length - 1)} ${rest.join(' ')}` } From 446a19c981b85a2986a70972a9b61142a2b82b14 Mon Sep 17 00:00:00 2001 From: Github Action Date: Mon, 6 Mar 2023 09:13:00 +0000 Subject: [PATCH 008/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 135372b4e..af787e397 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.0-7", + "version": "0.32.0-8", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 45d56d8f6..a6385d143 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.0-7", + "version": "0.32.0-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index dd33a4e53..bd25d4554 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.0-7", + "version": "0.32.0-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 243bd704e..1714cd1c8 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.0-7", + "version": "0.32.0-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 0eecfbd65..523b8bb2d 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.0-7", + "version": "0.32.0-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 335a7899e..8ffbea462 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.0-7", + "version": "0.32.0-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index 749179af5..10b407051 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.0-7", + "version": "0.32.0-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index cb1b9f3c5..7277f5ca5 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.0-7", + "version": "0.32.0-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 31f368f1f..476bf4cf3 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.0-7", + "version": "0.32.0-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index c75fc7543..f90758faa 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.0-7", + "version": "0.32.0-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 25859fba8..1f88122e0 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.0-7", + "version": "0.32.0-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 77eafee4c..584a254e1 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.0-7", + "version": "0.32.0-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index fe12547a4..2605c854a 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.0-7", + "version": "0.32.0-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 1d3b64edb..4f963aaa6 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.0-7", + "version": "0.32.0-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From fbcbeac7fe3d6e7a2ed8caeedec6ca3f75eae97b Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Mon, 6 Mar 2023 15:23:09 +0100 Subject: [PATCH 009/130] chore: have renovate update polkadot dev deps too --- .github/renovate.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/renovate.json b/.github/renovate.json index ee5b7ccbf..1c3e0bea2 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -1,7 +1,6 @@ { "extends": [ ":preserveSemverRanges", - ":disableDevDependencies", ":disablePeerDependencies", ":semanticCommits" ], @@ -36,6 +35,15 @@ "separateMinorPatch": false, "groupName": "polkadot dependencies", "groupSlug": "polkadot" + }, + { + "matchDepTypes": [ + "devDependencies" + ], + "excludePackagePatterns": [ + "^@polkadot/*" + ], + "enabled": false } ] } \ No newline at end of file From 6e32aefa5d8a937ec9ffa6f3f64f99696d95e052 Mon Sep 17 00:00:00 2001 From: Albrecht Date: Tue, 7 Mar 2023 10:59:49 +0100 Subject: [PATCH 010/130] feat: split `associateAccountToChainArgs` (#730) This makes it possible to use the high level associateAccountToChainArgs in most cases, but also use the building blocks in edge cases where parts are already done by other parts of the app (e.g. the wrapping of bytes). fixes [#2484](https://github.com/KILTprotocol/ticket/issues/2484) --------- Co-authored-by: Antonio --- .../did/src/DidLinks/AccountLinks.chain.ts | 157 ++++++++++++++---- 1 file changed, 121 insertions(+), 36 deletions(-) diff --git a/packages/did/src/DidLinks/AccountLinks.chain.ts b/packages/did/src/DidLinks/AccountLinks.chain.ts index 1b0373e63..be3a372c6 100644 --- a/packages/did/src/DidLinks/AccountLinks.chain.ts +++ b/packages/did/src/DidLinks/AccountLinks.chain.ts @@ -16,6 +16,7 @@ import { u8aConcatStrict, u8aToHex, u8aWrapBytes, + BN, } from '@polkadot/util' import { ApiPromise } from '@polkadot/api' @@ -26,7 +27,9 @@ import { ConfigService } from '@kiltprotocol/config' import { EncodedSignature } from '../Did.utils.js' import { toChain } from '../Did.chain.js' -/// A chain-agnostic address, which can be encoded using any network prefix. +/** + * A chain-agnostic address, which can be encoded using any network prefix. + */ export type SubstrateAddress = KeyringPair['address'] export type EthereumAddress = HexString @@ -124,28 +127,12 @@ function getUnprefixedSignature( throw new SDKErrors.SignatureUnverifiableError() } -/** - * Builds the parameters for an extrinsic to link the `account` to the `did` where the fees and deposit are covered by some third account. - * This extrinsic must be authorized using the same full DID. - * Note that in addition to the signing account and DID used here, the submitting account will also be able to dissolve the link via reclaiming its deposit! - * - * @param accountAddress Address of the account to be linked. - * @param did Full DID to be linked. - * @param sign The sign callback that generates the account signature over the encoded (DidAddress, BlockNumber) tuple. - * @param nBlocksValid The link request will be rejected if submitted later than (current block number + nBlocksValid)? - * @returns An array of parameters for `api.tx.didLookup.associateAccount` that must be DID-authorized by the full DID used. - */ -export async function associateAccountToChainArgs( - accountAddress: Address, +async function getLinkingChallengeV1( did: DidUri, - sign: (encodedLinkingDetails: HexString) => Promise, - nBlocksValid = 10 -): Promise { + validUntil: BN +): Promise { const api = ConfigService.get('api') - const blockNo = await api.query.system.number() - const validTill = blockNo.addn(nBlocksValid) - // Gets the current definition of BlockNumber (second tx argument) from the metadata. const BlockNumber = api.tx.didLookup.associateAccount.meta.args[1].type.toString() @@ -158,33 +145,63 @@ export async function associateAccountToChainArgs( ).sub as TypeDef[] )[0].type // get the type of the first key, which is the DidAddress - const encoded = api - .createType(`(${DidAddress}, ${BlockNumber})`, [toChain(did), validTill]) + return api + .createType(`(${DidAddress}, ${BlockNumber})`, [toChain(did), validUntil]) .toU8a() +} - const isAccountId32 = decodeAddress(accountAddress).length > 20 - const length = stringToU8a(String(encoded.length)) - const paddedDetails = u8aToHex( - isAccountId32 - ? u8aWrapBytes(encoded) - : u8aConcatStrict([U8A_WRAP_ETHEREUM, length, encoded]) +function getLinkingChallengeV2(did: DidUri, validUntil: BN): Uint8Array { + return stringToU8a( + `Publicly link the signing address to ${did} before block number ${validUntil}` ) +} - const { signature, type } = getUnprefixedSignature( - paddedDetails, - await sign(paddedDetails), - accountAddress - ) +/** + * Generates the challenge that links a DID to an account. + * The account has to sign the challenge, while the DID will sign the extrinsic that contains the challenge and will + * link the account to the DID. + * + * @param did The URI of the DID that that should be linked to an account. + * @param validUntil Last blocknumber that this challenge is valid for. + * @returns The encoded challenge. + */ +export async function getLinkingChallenge( + did: DidUri, + validUntil: BN +): Promise { + const api = ConfigService.get('api') + if (isEthereumEnabled(api)) { + return getLinkingChallengeV2(did, validUntil) + } + return getLinkingChallengeV1(did, validUntil) +} + +/** + * Generates the arguments for the extrinsic that links an account to a DID. + * + * @param accountAddress Address of the account to be linked. + * @param validUntil Last blocknumber that this challenge is valid for. + * @param signature The signature for the linking challenge. + * @param type The key type used to sign the challenge. + * @returns The arguments for the call that links account and DID. + */ +export async function getLinkingArguments( + accountAddress: Address, + validUntil: BN, + signature: Uint8Array, + type: KeypairType +): Promise { + const api = ConfigService.get('api') const proof = { [type]: signature } as EncodedSignature if (isEthereumEnabled(api)) { if (type === 'ethereum') { - const result = [{ Ethereum: [accountAddress, signature] }, validTill] + const result = [{ Ethereum: [accountAddress, signature] }, validUntil] // Force type cast to enable the old blockchain types to accept the future format return result as unknown as AssociateAccountToChainResult } - const result = [{ Dotsama: [accountAddress, proof] }, validTill] + const result = [{ Polkadot: [accountAddress, proof] }, validUntil] // Force type cast to enable the old blockchain types to accept the future format return result as unknown as AssociateAccountToChainResult } @@ -194,5 +211,73 @@ export async function associateAccountToChainArgs( 'Ethereum linking is not yet supported by this chain' ) - return [accountAddress, validTill, proof] + return [accountAddress, validUntil, proof] +} + +/** + * Identifies the strategy to wrap raw bytes for signing. + */ +export type WrappingStrategy = 'ethereum' | 'polkadot' + +/** + * Wraps the provided challenge according to the key type. + * + * Ethereum addresses will cause the challenge to be prefixed with + * `\x19Ethereum Signed Message:\n` and the length of the message. + * + * For all other key types the message will be wrapped in `..`. + * + * @param type The key type that will sign the challenge. + * @param challenge The challenge to proof ownership of both account and DID. + * @returns The wrapped challenge. + */ +export function getWrappedChallenge( + type: WrappingStrategy, + challenge: Uint8Array +): Uint8Array { + if (type === 'ethereum') { + const length = stringToU8a(String(challenge.length)) + return u8aConcatStrict([U8A_WRAP_ETHEREUM, length, challenge]) + } + return u8aWrapBytes(challenge) +} + +/** + * Builds the parameters for an extrinsic to link the `account` to the `did` where the fees and deposit are covered by some third account. + * This extrinsic must be authorized using the same full DID. + * Note that in addition to the signing account and DID used here, the submitting account will also be able to dissolve the link via reclaiming its deposit! + * + * @param accountAddress Address of the account to be linked. + * @param did Full DID to be linked. + * @param sign The sign callback that generates the account signature over the encoded (DidAddress, BlockNumber) tuple. + * @param nBlocksValid The link request will be rejected if submitted later than (current block number + nBlocksValid)? + * @returns An array of parameters for `api.tx.didLookup.associateAccount` that must be DID-authorized by the full DID used. + */ +export async function associateAccountToChainArgs( + accountAddress: Address, + did: DidUri, + sign: (encodedLinkingDetails: HexString) => Promise, + nBlocksValid = 10 +): Promise { + const api = ConfigService.get('api') + + const blockNo = await api.query.system.number() + const validTill = blockNo.addn(nBlocksValid) + + const challenge = await getLinkingChallenge(did, validTill) + + // ethereum addresses are 42 characters long since they are 20 bytes hex encoded strings + // (they start with 0x, 2 characters per byte) + const predictedType = accountAddress.length === 42 ? 'ethereum' : 'polkadot' + const wrappedChallenge = u8aToHex( + getWrappedChallenge(predictedType, challenge) + ) + + const { signature, type } = getUnprefixedSignature( + wrappedChallenge, + await sign(wrappedChallenge), + accountAddress + ) + + return getLinkingArguments(accountAddress, validTill, signature, type) } From b8548b26c1b975ed53fdddaeb79cacf63d13f532 Mon Sep 17 00:00:00 2001 From: Github Action Date: Tue, 7 Mar 2023 10:05:16 +0000 Subject: [PATCH 011/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index af787e397..b6732f940 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.0-8", + "version": "0.32.0-9", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index a6385d143..a2e85ea19 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.0-8", + "version": "0.32.0-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index bd25d4554..d68533f44 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.0-8", + "version": "0.32.0-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 1714cd1c8..b46db4785 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.0-8", + "version": "0.32.0-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 523b8bb2d..0fe2717d2 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.0-8", + "version": "0.32.0-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 8ffbea462..49d147d6a 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.0-8", + "version": "0.32.0-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index 10b407051..8554ad650 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.0-8", + "version": "0.32.0-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 7277f5ca5..d47b58963 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.0-8", + "version": "0.32.0-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 476bf4cf3..93ccf4101 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.0-8", + "version": "0.32.0-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index f90758faa..6bb5bed1c 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.0-8", + "version": "0.32.0-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 1f88122e0..b3462b405 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.0-8", + "version": "0.32.0-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 584a254e1..748fc0414 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.0-8", + "version": "0.32.0-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 2605c854a..71a2b8f83 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.0-8", + "version": "0.32.0-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 4f963aaa6..dcccacb7e 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.0-8", + "version": "0.32.0-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 73439d1a4d6e35b69a7f6e9a523a64b3dd27ca20 Mon Sep 17 00:00:00 2001 From: Timo Welde Date: Tue, 14 Mar 2023 13:42:33 +0100 Subject: [PATCH 012/130] test: breaking changes (#642) --- package.json | 1 + packages/testing/package.json | 5 +- packages/testing/src/BreakingChanges.spec.ts | 236 +++++++++++++ .../BreakingChanges.spec.ts.snap | 315 ++++++++++++++++++ yarn.lock | 5 +- 5 files changed, 560 insertions(+), 2 deletions(-) create mode 100644 packages/testing/src/BreakingChanges.spec.ts create mode 100644 packages/testing/src/__snapshots__/BreakingChanges.spec.ts.snap diff --git a/package.json b/package.json index b6732f940..41dab6110 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "style": "prettier -l packages", "style:fix": "yarn style --write", "test": "jest --coverage --group=unit", + "test:breaking": "jest --group=breaking", "test:ci": "yarn test --ci --forceExit", "test:integration": "jest --group=integration -w 3 --testTimeout=30000", "test:integration:ci": "jest --group=integration -b -w 3 --testTimeout=60000", diff --git a/packages/testing/package.json b/packages/testing/package.json index 6bb5bed1c..428d1279a 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -34,6 +34,7 @@ "@kiltprotocol/chain-helpers": "workspace:*", "@kiltprotocol/config": "workspace:*", "@kiltprotocol/did": "workspace:*", + "@kiltprotocol/sdk-js": "workspace:*", "@kiltprotocol/type-definitions": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", @@ -41,7 +42,9 @@ "@polkadot/keyring": "^10.2.1", "@polkadot/types": "^9.10.2", "@polkadot/util": "^10.2.1", - "@polkadot/util-crypto": "^10.2.1" + "@polkadot/util-crypto": "^10.2.1", + "tweetnacl": "^1.0.3", + "uuid": "^9.0.0" }, "devDependencies": { "rimraf": "^3.0.2", diff --git a/packages/testing/src/BreakingChanges.spec.ts b/packages/testing/src/BreakingChanges.spec.ts new file mode 100644 index 000000000..6890ec11a --- /dev/null +++ b/packages/testing/src/BreakingChanges.spec.ts @@ -0,0 +1,236 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/** + * @group breaking + */ + +import { + Attestation, + Claim, + Credential, + CType, + Did, + DidDocument, + DidKey, + DidResourceUri, + ICType, + Message, + MessageBody, + ResolvedDidKey, + Utils, +} from '@kiltprotocol/sdk-js' +import nacl from 'tweetnacl' +import { v4 } from 'uuid' +import { makeEncryptionKeyTool } from './TestUtils' + +jest.mock('uuid') +jest.mocked(v4).mockReturnValue('1ee1307c-9e65-475d-9061-0b5bfd86d2f7') + +// Mock nacl randombytes, so that the nonce and ciphertext stay the same between runs +jest.spyOn(nacl, 'randomBytes').mockReturnValue(new Uint8Array(24).fill(42)) + +function makeLightDidFromSeed(seed: string) { + const keypair = Utils.Crypto.makeKeypairFromUri(seed, 'sr25519') + const { keyAgreement, encrypt, decrypt } = makeEncryptionKeyTool(seed) + + const did = Did.createLightDidDocument({ + authentication: [keypair], + keyAgreement, + service: [ + { + id: '#1234', + type: ['KiltPublishedCredentialCollectionV1'], + serviceEndpoint: [ + 'https://ipfs.io/ipfs/QmNUAwg7JPK9nnuZiUri5nDaqLHqUFtNoZYtfD22Q6w3c8', + ], + }, + ], + }) + + return { did, encrypt, decrypt } +} + +function makeResolveKey(document: DidDocument) { + return async function resolveKey( + keyUri: DidResourceUri + ): Promise { + const { fragment } = Did.parse(keyUri) + const key = Did.getKey(document, fragment!) as DidKey + return { + controller: document!.uri, + id: keyUri!, + publicKey: key.publicKey, + type: key.type, + } + } +} + +describe('Breaking Changes', () => { + describe('Light DID', () => { + it('does not break the light did uri generation', () => { + const { did } = makeLightDidFromSeed( + '0x127f2375faf3472c2f94ffcdd5424590b27294631f2cb8041407e501bc97c44c' + ) + + expect(did.uri).toMatchInlineSnapshot( + `"did:kilt:light:004quk8nu1MLvzdoT4fE6SJsLS4fFpyvuGz7sQpMF7ZAWTDoF5:z1msTRicERqs59nwMvp3yzMRBhUYGmkum7ehY7rtKQc8HzfEx4b4eyRhrc37ZShT3oG7E89x89vaG9W4hRxPS23EAFnCSeVbVRrKGJmFQvYhjgKSMmrGC7gSxgHe1a3g41uamhD49AEi13YVMkgeHpyEQJBy7N7gGyW7jTWFcwzAnws4wSazBVG1qHmVJrhmusoJoTfKTPKXkExKyur8Z341EkcRkHteY8dV3VjLXHnfhRW2yU9oM2cRm5ozgaufxrXsQBx33ygTW2wvrfzzXsYw4Bs6Vf2tC3ipBTDcKyCk6G88LYnzBosRM15W3KmDRciJ2iPjqiQkhYm77EQyaw"` + ) + + expect( + Did.parseDocumentFromLightDid( + 'did:kilt:light:004quk8nu1MLvzdoT4fE6SJsLS4fFpyvuGz7sQpMF7ZAWTDoF5:z1msTRicERqs59nwMvp3yzMRBhUYGmkum7ehY7rtKQc8HzfEx4b4eyRhrc37ZShT3oG7E89x89vaG9W4hRxPS23EAFnCSeVbVRrKGJmFQvYhjgKSMmrGC7gSxgHe1a3g41uamhD49AEi13YVMkgeHpyEQJBy7N7gGyW7jTWFcwzAnws4wSazBVG1qHmVJrhmusoJoTfKTPKXkExKyur8Z341EkcRkHteY8dV3VjLXHnfhRW2yU9oM2cRm5ozgaufxrXsQBx33ygTW2wvrfzzXsYw4Bs6Vf2tC3ipBTDcKyCk6G88LYnzBosRM15W3KmDRciJ2iPjqiQkhYm77EQyaw' + ) + ).toMatchSnapshot() + }) + }) + describe('Messages', () => { + it('does not break Message & EncryptedMessage structure', async () => { + const { did: aliceDid, encrypt } = makeLightDidFromSeed( + '0xdc6f4d21a91848eeeac1811c73a2323060ef2d8d4a07ece2f216d5b8f977520b' + ) + const { did: bobDid, decrypt } = makeLightDidFromSeed( + '0xa748f38e896ddc52b6e5cc5baa754f7f841381ef32bf1d86d51026857c6c05dc' + ) + + // Mock Date object for message.createdAt property + jest.useFakeTimers().setSystemTime(1657727664899) + + const message = Message.fromBody( + { + type: 'request-terms', + content: { + cTypeHash: '0x1234', + }, + }, + aliceDid.uri, + bobDid.uri + ) + + expect(message).toMatchSnapshot() + + const encrypted = await Message.encrypt( + message, + encrypt(aliceDid), + `${bobDid.uri}#encryption`, + { + resolveKey: makeResolveKey(bobDid), + } + ) + + expect(encrypted).toMatchSnapshot() + + const decrypted = await Message.decrypt(encrypted, decrypt, { + resolveKey: makeResolveKey(aliceDid), + }) + + expect(decrypted).toMatchObject(message) + }) + + it('does not break for attestation flow', async () => { + // attestation flow + + const attester = makeLightDidFromSeed( + '0xdc6f4d21a91848eeeac1811c73a2323060ef2d8d4a07ece2f216d5b8f977520b' + ) + const user = makeLightDidFromSeed( + '0xa748f38e896ddc52b6e5cc5baa754f7f841381ef32bf1d86d51026857c6c05dc' + ) + + const cType: ICType = { + $id: 'kilt:ctype:0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c', + $schema: 'http://kilt-protocol.org/draft-01/ctype#', + title: 'CtypeModel 2', + properties: { + name: { type: 'string' }, + }, + type: 'object', + } + + const requestTerms: MessageBody = { + type: 'request-terms', + content: { + cTypeHash: CType.idToHash(cType.$id), + }, + } + expect(requestTerms).toMatchSnapshot('request-terms') + + const claim = Claim.fromCTypeAndClaimContents( + cType, + { name: 'Bob' }, + attester.did.uri + ) + expect(claim).toMatchSnapshot('claim') + + const submitTerms: MessageBody = { + type: 'submit-terms', + content: { + claim, + legitimations: [], + }, + } + expect(submitTerms).toMatchSnapshot('submit-terms') + + claim.owner = user.did.uri + const credential = Credential.fromClaim(claim, { legitimations: [] }) + expect(credential).toMatchSnapshot('credential') + + const requestAttestation: MessageBody = { + type: 'request-attestation', + content: { credential }, + } + expect(requestAttestation).toMatchSnapshot('request-attestation') + + const attestation = Attestation.fromCredentialAndDid( + credential, + attester.did.uri + ) + expect(attestation).toMatchSnapshot('attestation') + + const submitAttestation: MessageBody = { + type: 'submit-attestation', + content: { attestation }, + } + expect(submitAttestation).toMatchSnapshot('submit-attestation') + + // verification flow + + const challenge = '0xCAFE' + const requestCredential: MessageBody = { + type: 'request-credential', + content: { + cTypes: [ + { + cTypeHash: CType.idToHash(cType.$id), + requiredProperties: ['name'], + trustedAttesters: [attester.did.uri], + }, + ], + challenge, + }, + } + expect(requestCredential).toMatchSnapshot('request-credential') + + const presentation = await Credential.createPresentation({ + credential, + challenge, + signCallback: async () => ({ + signature: new Uint8Array(32).fill(0), + keyUri: `${user.did.uri}${user.did.authentication[0].id}`, + keyType: user.did.authentication[0].type, + }), + }) + expect(presentation).toMatchSnapshot('presentation') + + const submitCredential: MessageBody = { + type: 'submit-credential', + content: [presentation], + } + expect(submitCredential).toMatchSnapshot('submit-credential') + }) + }) +}) diff --git a/packages/testing/src/__snapshots__/BreakingChanges.spec.ts.snap b/packages/testing/src/__snapshots__/BreakingChanges.spec.ts.snap new file mode 100644 index 000000000..4fbd05fa3 --- /dev/null +++ b/packages/testing/src/__snapshots__/BreakingChanges.spec.ts.snap @@ -0,0 +1,315 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Breaking Changes Light DID does not break the light did uri generation 2`] = ` +Object { + "authentication": Array [ + Object { + "id": "#authentication", + "publicKey": Uint8Array [ + 132, + 117, + 202, + 107, + 32, + 117, + 65, + 75, + 144, + 208, + 20, + 4, + 48, + 45, + 244, + 241, + 128, + 233, + 2, + 34, + 245, + 207, + 151, + 130, + 136, + 196, + 221, + 171, + 217, + 138, + 223, + 87, + ], + "type": "sr25519", + }, + ], + "keyAgreement": Array [ + Object { + "id": "#encryption", + "publicKey": Uint8Array [ + 179, + 105, + 8, + 2, + 142, + 166, + 2, + 93, + 171, + 137, + 241, + 223, + 93, + 81, + 205, + 56, + 196, + 187, + 68, + 98, + 208, + 96, + 61, + 232, + 107, + 199, + 25, + 48, + 0, + 117, + 210, + 19, + ], + "type": "x25519", + }, + ], + "service": Array [ + Object { + "id": "#1234", + "serviceEndpoint": Array [ + "https://ipfs.io/ipfs/QmNUAwg7JPK9nnuZiUri5nDaqLHqUFtNoZYtfD22Q6w3c8", + ], + "type": Array [ + "KiltPublishedCredentialCollectionV1", + ], + }, + ], + "uri": "did:kilt:light:004quk8nu1MLvzdoT4fE6SJsLS4fFpyvuGz7sQpMF7ZAWTDoF5:z1msTRicERqs59nwMvp3yzMRBhUYGmkum7ehY7rtKQc8HzfEx4b4eyRhrc37ZShT3oG7E89x89vaG9W4hRxPS23EAFnCSeVbVRrKGJmFQvYhjgKSMmrGC7gSxgHe1a3g41uamhD49AEi13YVMkgeHpyEQJBy7N7gGyW7jTWFcwzAnws4wSazBVG1qHmVJrhmusoJoTfKTPKXkExKyur8Z341EkcRkHteY8dV3VjLXHnfhRW2yU9oM2cRm5ozgaufxrXsQBx33ygTW2wvrfzzXsYw4Bs6Vf2tC3ipBTDcKyCk6G88LYnzBosRM15W3KmDRciJ2iPjqiQkhYm77EQyaw", +} +`; + +exports[`Breaking Changes Messages does not break Message & EncryptedMessage structure 1`] = ` +Object { + "body": Object { + "content": Object { + "cTypeHash": "0x1234", + }, + "type": "request-terms", + }, + "createdAt": 1657727664899, + "messageId": "0xa3970143a4d6796c764c4fb49cecfb55229429f6fb8d7748969bf1f3679db22a", + "receiver": "did:kilt:light:004rzcHqKvv6TbsA46VpG53JrvdzRr6ccyboUNeCGTvDw2AozU:z1msTRicERqs59nwMvp3yzMRBhQhYShb1vEhbpWo5ZbqVAgi2UFELJk7MbUSeEfBdAVsJhdqcEAhXxH4YrV5nwgTYjFYszWKLFnYvSUhgZ7teDiLt1FbAo484ihnagUKQkE46o3fqSv52WgM6VatrEqetD3ekokxFtz4yn2vFYPdDMPmKE3cVxdKqPMa3Ewh6k46SENeEDZFLg1L8Yi73ZVEA9AwDg2RDuBDnpjetxBC6U5qMKVfqbh1rjgxpubpSj6sppHDq8xZ4LDU2bs1a9g6qcWJjkrtS69t3PTFZv5Ey84epnvbXEm8hsVnzTKsY6LbQmCiVqwKWUPUwXpj83", + "sender": "did:kilt:light:004rn1Xps9QSMiAb2aMoKQbAred94wh1iLjGmNBYy1FVCS81ry:z1msTRicERqs59nwMvp3yzMRBhRatQoZZaiSZfyN7TzqeEs1bHHTCH3RURC6zWk5B8HXGZThZos9PJFJrkiYchNGbAGQRKSKucBVDVoXBLDyEm4P1dsco9wyoaWa5kkFw6DZgnKrTJg8Y8iCy7k2yo8GeMXAuR8qoBFFXj7Up7DxKJrMoQudvFHTy2uk2HPNfqkzJX17Wqsny1MKHD82eC3TcjrGCkhMZy3NmzkySmLsDmmHnG2csZ5vvefFRFZ1hSKfUtcV8EnLd3zozsiZByaLrED2XVbuHqPVzqcnrCJF8fSm49NcGDgsQkwnQwbuKfMkov9WwJoxhDSYG6e7WP", +} +`; + +exports[`Breaking Changes Messages does not break Message & EncryptedMessage structure 2`] = ` +Object { + "ciphertext": "0x8edac73d2230d66ba1a177db550773afa4f2d914786050424594c89f07ccbc2f643df95ba030281079a92215c66d76a74b39e6013cb8a5e1459a6853fdbfb522bff1295cbf9e5e2d6947de5974dafe6de32e6d42e2c349f07b5bb934a504d0a227d502e920cadfae44869ed041d86916cee71e0619650f15a1a04f27751f0839e8f3c629d626a54f489c4170b3ffefe118039925124acba91c097bf4d8c582f26c8a3b0f1dba93bf8da6b8f2a2a4303ac529c7028aec026f6baeb1ae95d90884f12890f4bc2d535247a170dd68a6828573e36502ef0d99fb4cdb0750b84902876009cca8662f952746cad88c9a8285b8be42ad349c67de540fb92e122d52c2ffa4c8e229076990ce60b13b64ddb6d769017262597bb33085cb8e09d5189f2077e48ece3c0100a1aa11935237a1ee3ef80200c4ccf92bb41d75c83238ac18360c6ce81df45ade968a59aff9fddf6a475fd976f581c267ddc377a1a239997ccdfd92f0e8d3a6b1b76f520e1c25ea7e3954ed555eb4ac02d68562cd1f031b724a063606c95d528c91b80ea49786303d0a6e7201e16f3e0d5571f205069da31874ed8e6c5d380cce070b2cb96961d2f594cc4a5dffc94e3782bf6a1da3bbc1af2f773e79250e09c3206b0e0c7a08a001393526220831f3735c07bf68c8ccca07260b8cb1acbb66163c73af0d783eb035a99add5d604f10916432846279524e8741b57961d52583ced5b79943c986a9f28d99be029b00e5688afcb3731152861a37ddf5e70c95dd64e2d765a4d0a662f93d16a3650c505dc2e4a048b0d585fadc8c4efa23360e81292c2ae88027068deed4ff3cd97d961b58afd95728aa4ce03340ebf13a4bc7d4b6f8b5e69a7a3ecb18c79a06946466d0b29ca0bd00c47d1256fe564b48eac37b389c246d9b556dc67921e27fb6a8aeb93953c1947834432e5ade8117bcad7173f9d8b43ebf4cce89789744d55215a8bbdfd9a7222cafccc02a3c62e5a26794ef21d1bba441f0aa9ca3e077f32e06daa22264345b66dbf34dbb9219434ad7c21b386de7587c3612fc36b63bdf650206a191fea82855a5181942c151c8a90741c8a930c570350f863ca448d908f7f1a098b0521a14c9c49bf99bd1715ebed5a93b3bc7e04fcd845efcc564448d0426e21496ca124ca8c96a1a598e90529d65fc33d64b937b16a077eaa052b10d34ef91a321a2c0476601318a7eaecc8308d618d82db10f8978c4310e1384bfb043d0a12c20325c4ceef36e144a9f2fb94d0dc546b5b4cbce162569e8e40454d219750eb85758555547c0900874bd2ca7c561aeab4e2b5e26130d91e22196fd138e8e73f6414c50c08a6f981e8a1ed244c2ee2f5c4d446d793e0039b5f75ea40215ebb2e2bcf8fae608173a00ccc24e016176417bbac0ce5682932341fc3a2a106a4f6d83dbf17a81fc7d0e5cbe52c92ece5789e8e8b3", + "nonce": "0x2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a", + "receivedAt": undefined, + "receiverKeyUri": "did:kilt:light:004rzcHqKvv6TbsA46VpG53JrvdzRr6ccyboUNeCGTvDw2AozU:z1msTRicERqs59nwMvp3yzMRBhQhYShb1vEhbpWo5ZbqVAgi2UFELJk7MbUSeEfBdAVsJhdqcEAhXxH4YrV5nwgTYjFYszWKLFnYvSUhgZ7teDiLt1FbAo484ihnagUKQkE46o3fqSv52WgM6VatrEqetD3ekokxFtz4yn2vFYPdDMPmKE3cVxdKqPMa3Ewh6k46SENeEDZFLg1L8Yi73ZVEA9AwDg2RDuBDnpjetxBC6U5qMKVfqbh1rjgxpubpSj6sppHDq8xZ4LDU2bs1a9g6qcWJjkrtS69t3PTFZv5Ey84epnvbXEm8hsVnzTKsY6LbQmCiVqwKWUPUwXpj83#encryption", + "senderKeyUri": "did:kilt:light:004rn1Xps9QSMiAb2aMoKQbAred94wh1iLjGmNBYy1FVCS81ry:z1msTRicERqs59nwMvp3yzMRBhRatQoZZaiSZfyN7TzqeEs1bHHTCH3RURC6zWk5B8HXGZThZos9PJFJrkiYchNGbAGQRKSKucBVDVoXBLDyEm4P1dsco9wyoaWa5kkFw6DZgnKrTJg8Y8iCy7k2yo8GeMXAuR8qoBFFXj7Up7DxKJrMoQudvFHTy2uk2HPNfqkzJX17Wqsny1MKHD82eC3TcjrGCkhMZy3NmzkySmLsDmmHnG2csZ5vvefFRFZ1hSKfUtcV8EnLd3zozsiZByaLrED2XVbuHqPVzqcnrCJF8fSm49NcGDgsQkwnQwbuKfMkov9WwJoxhDSYG6e7WP#encryption", +} +`; + +exports[`Breaking Changes Messages does not break for attestation flow: attestation 1`] = ` +Object { + "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", + "claimHash": "0x453559279a1816c20673194e21eb72f121e7b31f5b33ea3a8d3264d6f4d319ac", + "delegationId": null, + "owner": "did:kilt:light:004rn1Xps9QSMiAb2aMoKQbAred94wh1iLjGmNBYy1FVCS81ry:z1msTRicERqs59nwMvp3yzMRBhRatQoZZaiSZfyN7TzqeEs1bHHTCH3RURC6zWk5B8HXGZThZos9PJFJrkiYchNGbAGQRKSKucBVDVoXBLDyEm4P1dsco9wyoaWa5kkFw6DZgnKrTJg8Y8iCy7k2yo8GeMXAuR8qoBFFXj7Up7DxKJrMoQudvFHTy2uk2HPNfqkzJX17Wqsny1MKHD82eC3TcjrGCkhMZy3NmzkySmLsDmmHnG2csZ5vvefFRFZ1hSKfUtcV8EnLd3zozsiZByaLrED2XVbuHqPVzqcnrCJF8fSm49NcGDgsQkwnQwbuKfMkov9WwJoxhDSYG6e7WP", + "revoked": false, +} +`; + +exports[`Breaking Changes Messages does not break for attestation flow: claim 1`] = ` +Object { + "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", + "contents": Object { + "name": "Bob", + }, + "owner": "did:kilt:light:004rn1Xps9QSMiAb2aMoKQbAred94wh1iLjGmNBYy1FVCS81ry:z1msTRicERqs59nwMvp3yzMRBhRatQoZZaiSZfyN7TzqeEs1bHHTCH3RURC6zWk5B8HXGZThZos9PJFJrkiYchNGbAGQRKSKucBVDVoXBLDyEm4P1dsco9wyoaWa5kkFw6DZgnKrTJg8Y8iCy7k2yo8GeMXAuR8qoBFFXj7Up7DxKJrMoQudvFHTy2uk2HPNfqkzJX17Wqsny1MKHD82eC3TcjrGCkhMZy3NmzkySmLsDmmHnG2csZ5vvefFRFZ1hSKfUtcV8EnLd3zozsiZByaLrED2XVbuHqPVzqcnrCJF8fSm49NcGDgsQkwnQwbuKfMkov9WwJoxhDSYG6e7WP", +} +`; + +exports[`Breaking Changes Messages does not break for attestation flow: credential 1`] = ` +Object { + "claim": Object { + "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", + "contents": Object { + "name": "Bob", + }, + "owner": "did:kilt:light:004rzcHqKvv6TbsA46VpG53JrvdzRr6ccyboUNeCGTvDw2AozU:z1msTRicERqs59nwMvp3yzMRBhQhYShb1vEhbpWo5ZbqVAgi2UFELJk7MbUSeEfBdAVsJhdqcEAhXxH4YrV5nwgTYjFYszWKLFnYvSUhgZ7teDiLt1FbAo484ihnagUKQkE46o3fqSv52WgM6VatrEqetD3ekokxFtz4yn2vFYPdDMPmKE3cVxdKqPMa3Ewh6k46SENeEDZFLg1L8Yi73ZVEA9AwDg2RDuBDnpjetxBC6U5qMKVfqbh1rjgxpubpSj6sppHDq8xZ4LDU2bs1a9g6qcWJjkrtS69t3PTFZv5Ey84epnvbXEm8hsVnzTKsY6LbQmCiVqwKWUPUwXpj83", + }, + "claimHashes": Array [ + "0x901805bb5659ecf21cc79d50a98021d49eb83ee136a2609d4377dd615a271a78", + "0xdaff2311c04ea4d2c16e9bd3dc4debba9822e5c4cfb53e36b48f090036169575", + ], + "claimNonceMap": Object { + "0x499856031d06ddecbda0c1e0f1c0de4f53f614732f205190d81d0c76e793bdf0": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", + "0x721cf4dd222afba0b79565332ac711cb634762052c3c2d45434f53f465d030f7": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", + }, + "delegationId": null, + "legitimations": Array [], + "rootHash": "0x453559279a1816c20673194e21eb72f121e7b31f5b33ea3a8d3264d6f4d319ac", +} +`; + +exports[`Breaking Changes Messages does not break for attestation flow: presentation 1`] = ` +Object { + "claim": Object { + "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", + "contents": Object { + "name": "Bob", + }, + "owner": "did:kilt:light:004rzcHqKvv6TbsA46VpG53JrvdzRr6ccyboUNeCGTvDw2AozU:z1msTRicERqs59nwMvp3yzMRBhQhYShb1vEhbpWo5ZbqVAgi2UFELJk7MbUSeEfBdAVsJhdqcEAhXxH4YrV5nwgTYjFYszWKLFnYvSUhgZ7teDiLt1FbAo484ihnagUKQkE46o3fqSv52WgM6VatrEqetD3ekokxFtz4yn2vFYPdDMPmKE3cVxdKqPMa3Ewh6k46SENeEDZFLg1L8Yi73ZVEA9AwDg2RDuBDnpjetxBC6U5qMKVfqbh1rjgxpubpSj6sppHDq8xZ4LDU2bs1a9g6qcWJjkrtS69t3PTFZv5Ey84epnvbXEm8hsVnzTKsY6LbQmCiVqwKWUPUwXpj83", + }, + "claimHashes": Array [ + "0x901805bb5659ecf21cc79d50a98021d49eb83ee136a2609d4377dd615a271a78", + "0xdaff2311c04ea4d2c16e9bd3dc4debba9822e5c4cfb53e36b48f090036169575", + ], + "claimNonceMap": Object { + "0x499856031d06ddecbda0c1e0f1c0de4f53f614732f205190d81d0c76e793bdf0": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", + "0x721cf4dd222afba0b79565332ac711cb634762052c3c2d45434f53f465d030f7": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", + }, + "claimerSignature": Object { + "challenge": "0xCAFE", + "keyUri": "did:kilt:light:004rzcHqKvv6TbsA46VpG53JrvdzRr6ccyboUNeCGTvDw2AozU:z1msTRicERqs59nwMvp3yzMRBhQhYShb1vEhbpWo5ZbqVAgi2UFELJk7MbUSeEfBdAVsJhdqcEAhXxH4YrV5nwgTYjFYszWKLFnYvSUhgZ7teDiLt1FbAo484ihnagUKQkE46o3fqSv52WgM6VatrEqetD3ekokxFtz4yn2vFYPdDMPmKE3cVxdKqPMa3Ewh6k46SENeEDZFLg1L8Yi73ZVEA9AwDg2RDuBDnpjetxBC6U5qMKVfqbh1rjgxpubpSj6sppHDq8xZ4LDU2bs1a9g6qcWJjkrtS69t3PTFZv5Ey84epnvbXEm8hsVnzTKsY6LbQmCiVqwKWUPUwXpj83#authentication", + "signature": "0x0000000000000000000000000000000000000000000000000000000000000000", + }, + "delegationId": null, + "legitimations": Array [], + "rootHash": "0x453559279a1816c20673194e21eb72f121e7b31f5b33ea3a8d3264d6f4d319ac", +} +`; + +exports[`Breaking Changes Messages does not break for attestation flow: request-attestation 1`] = ` +Object { + "content": Object { + "credential": Object { + "claim": Object { + "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", + "contents": Object { + "name": "Bob", + }, + "owner": "did:kilt:light:004rzcHqKvv6TbsA46VpG53JrvdzRr6ccyboUNeCGTvDw2AozU:z1msTRicERqs59nwMvp3yzMRBhQhYShb1vEhbpWo5ZbqVAgi2UFELJk7MbUSeEfBdAVsJhdqcEAhXxH4YrV5nwgTYjFYszWKLFnYvSUhgZ7teDiLt1FbAo484ihnagUKQkE46o3fqSv52WgM6VatrEqetD3ekokxFtz4yn2vFYPdDMPmKE3cVxdKqPMa3Ewh6k46SENeEDZFLg1L8Yi73ZVEA9AwDg2RDuBDnpjetxBC6U5qMKVfqbh1rjgxpubpSj6sppHDq8xZ4LDU2bs1a9g6qcWJjkrtS69t3PTFZv5Ey84epnvbXEm8hsVnzTKsY6LbQmCiVqwKWUPUwXpj83", + }, + "claimHashes": Array [ + "0x901805bb5659ecf21cc79d50a98021d49eb83ee136a2609d4377dd615a271a78", + "0xdaff2311c04ea4d2c16e9bd3dc4debba9822e5c4cfb53e36b48f090036169575", + ], + "claimNonceMap": Object { + "0x499856031d06ddecbda0c1e0f1c0de4f53f614732f205190d81d0c76e793bdf0": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", + "0x721cf4dd222afba0b79565332ac711cb634762052c3c2d45434f53f465d030f7": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", + }, + "delegationId": null, + "legitimations": Array [], + "rootHash": "0x453559279a1816c20673194e21eb72f121e7b31f5b33ea3a8d3264d6f4d319ac", + }, + }, + "type": "request-attestation", +} +`; + +exports[`Breaking Changes Messages does not break for attestation flow: request-credential 1`] = ` +Object { + "content": Object { + "cTypes": Array [ + Object { + "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", + "requiredProperties": Array [ + "name", + ], + "trustedAttesters": Array [ + "did:kilt:light:004rn1Xps9QSMiAb2aMoKQbAred94wh1iLjGmNBYy1FVCS81ry:z1msTRicERqs59nwMvp3yzMRBhRatQoZZaiSZfyN7TzqeEs1bHHTCH3RURC6zWk5B8HXGZThZos9PJFJrkiYchNGbAGQRKSKucBVDVoXBLDyEm4P1dsco9wyoaWa5kkFw6DZgnKrTJg8Y8iCy7k2yo8GeMXAuR8qoBFFXj7Up7DxKJrMoQudvFHTy2uk2HPNfqkzJX17Wqsny1MKHD82eC3TcjrGCkhMZy3NmzkySmLsDmmHnG2csZ5vvefFRFZ1hSKfUtcV8EnLd3zozsiZByaLrED2XVbuHqPVzqcnrCJF8fSm49NcGDgsQkwnQwbuKfMkov9WwJoxhDSYG6e7WP", + ], + }, + ], + "challenge": "0xCAFE", + }, + "type": "request-credential", +} +`; + +exports[`Breaking Changes Messages does not break for attestation flow: request-terms 1`] = ` +Object { + "content": Object { + "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", + }, + "type": "request-terms", +} +`; + +exports[`Breaking Changes Messages does not break for attestation flow: submit-attestation 1`] = ` +Object { + "content": Object { + "attestation": Object { + "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", + "claimHash": "0x453559279a1816c20673194e21eb72f121e7b31f5b33ea3a8d3264d6f4d319ac", + "delegationId": null, + "owner": "did:kilt:light:004rn1Xps9QSMiAb2aMoKQbAred94wh1iLjGmNBYy1FVCS81ry:z1msTRicERqs59nwMvp3yzMRBhRatQoZZaiSZfyN7TzqeEs1bHHTCH3RURC6zWk5B8HXGZThZos9PJFJrkiYchNGbAGQRKSKucBVDVoXBLDyEm4P1dsco9wyoaWa5kkFw6DZgnKrTJg8Y8iCy7k2yo8GeMXAuR8qoBFFXj7Up7DxKJrMoQudvFHTy2uk2HPNfqkzJX17Wqsny1MKHD82eC3TcjrGCkhMZy3NmzkySmLsDmmHnG2csZ5vvefFRFZ1hSKfUtcV8EnLd3zozsiZByaLrED2XVbuHqPVzqcnrCJF8fSm49NcGDgsQkwnQwbuKfMkov9WwJoxhDSYG6e7WP", + "revoked": false, + }, + }, + "type": "submit-attestation", +} +`; + +exports[`Breaking Changes Messages does not break for attestation flow: submit-credential 1`] = ` +Object { + "content": Array [ + Object { + "claim": Object { + "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", + "contents": Object { + "name": "Bob", + }, + "owner": "did:kilt:light:004rzcHqKvv6TbsA46VpG53JrvdzRr6ccyboUNeCGTvDw2AozU:z1msTRicERqs59nwMvp3yzMRBhQhYShb1vEhbpWo5ZbqVAgi2UFELJk7MbUSeEfBdAVsJhdqcEAhXxH4YrV5nwgTYjFYszWKLFnYvSUhgZ7teDiLt1FbAo484ihnagUKQkE46o3fqSv52WgM6VatrEqetD3ekokxFtz4yn2vFYPdDMPmKE3cVxdKqPMa3Ewh6k46SENeEDZFLg1L8Yi73ZVEA9AwDg2RDuBDnpjetxBC6U5qMKVfqbh1rjgxpubpSj6sppHDq8xZ4LDU2bs1a9g6qcWJjkrtS69t3PTFZv5Ey84epnvbXEm8hsVnzTKsY6LbQmCiVqwKWUPUwXpj83", + }, + "claimHashes": Array [ + "0x901805bb5659ecf21cc79d50a98021d49eb83ee136a2609d4377dd615a271a78", + "0xdaff2311c04ea4d2c16e9bd3dc4debba9822e5c4cfb53e36b48f090036169575", + ], + "claimNonceMap": Object { + "0x499856031d06ddecbda0c1e0f1c0de4f53f614732f205190d81d0c76e793bdf0": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", + "0x721cf4dd222afba0b79565332ac711cb634762052c3c2d45434f53f465d030f7": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", + }, + "claimerSignature": Object { + "challenge": "0xCAFE", + "keyUri": "did:kilt:light:004rzcHqKvv6TbsA46VpG53JrvdzRr6ccyboUNeCGTvDw2AozU:z1msTRicERqs59nwMvp3yzMRBhQhYShb1vEhbpWo5ZbqVAgi2UFELJk7MbUSeEfBdAVsJhdqcEAhXxH4YrV5nwgTYjFYszWKLFnYvSUhgZ7teDiLt1FbAo484ihnagUKQkE46o3fqSv52WgM6VatrEqetD3ekokxFtz4yn2vFYPdDMPmKE3cVxdKqPMa3Ewh6k46SENeEDZFLg1L8Yi73ZVEA9AwDg2RDuBDnpjetxBC6U5qMKVfqbh1rjgxpubpSj6sppHDq8xZ4LDU2bs1a9g6qcWJjkrtS69t3PTFZv5Ey84epnvbXEm8hsVnzTKsY6LbQmCiVqwKWUPUwXpj83#authentication", + "signature": "0x0000000000000000000000000000000000000000000000000000000000000000", + }, + "delegationId": null, + "legitimations": Array [], + "rootHash": "0x453559279a1816c20673194e21eb72f121e7b31f5b33ea3a8d3264d6f4d319ac", + }, + ], + "type": "submit-credential", +} +`; + +exports[`Breaking Changes Messages does not break for attestation flow: submit-terms 1`] = ` +Object { + "content": Object { + "claim": Object { + "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", + "contents": Object { + "name": "Bob", + }, + "owner": "did:kilt:light:004rn1Xps9QSMiAb2aMoKQbAred94wh1iLjGmNBYy1FVCS81ry:z1msTRicERqs59nwMvp3yzMRBhRatQoZZaiSZfyN7TzqeEs1bHHTCH3RURC6zWk5B8HXGZThZos9PJFJrkiYchNGbAGQRKSKucBVDVoXBLDyEm4P1dsco9wyoaWa5kkFw6DZgnKrTJg8Y8iCy7k2yo8GeMXAuR8qoBFFXj7Up7DxKJrMoQudvFHTy2uk2HPNfqkzJX17Wqsny1MKHD82eC3TcjrGCkhMZy3NmzkySmLsDmmHnG2csZ5vvefFRFZ1hSKfUtcV8EnLd3zozsiZByaLrED2XVbuHqPVzqcnrCJF8fSm49NcGDgsQkwnQwbuKfMkov9WwJoxhDSYG6e7WP", + }, + "legitimations": Array [], + }, + "type": "submit-terms", +} +`; diff --git a/yarn.lock b/yarn.lock index 1b56c7a24..8aeec1b8c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1960,7 +1960,7 @@ __metadata: languageName: unknown linkType: soft -"@kiltprotocol/sdk-js@workspace:packages/sdk-js": +"@kiltprotocol/sdk-js@workspace:*, @kiltprotocol/sdk-js@workspace:packages/sdk-js": version: 0.0.0-use.local resolution: "@kiltprotocol/sdk-js@workspace:packages/sdk-js" dependencies: @@ -1992,6 +1992,7 @@ __metadata: "@kiltprotocol/chain-helpers": "workspace:*" "@kiltprotocol/config": "workspace:*" "@kiltprotocol/did": "workspace:*" + "@kiltprotocol/sdk-js": "workspace:*" "@kiltprotocol/type-definitions": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" @@ -2001,7 +2002,9 @@ __metadata: "@polkadot/util": ^10.2.1 "@polkadot/util-crypto": ^10.2.1 rimraf: ^3.0.2 + tweetnacl: ^1.0.3 typescript: ^4.8.3 + uuid: ^9.0.0 languageName: unknown linkType: soft From 918096371a28331f5819e6adf28e7b24787262a5 Mon Sep 17 00:00:00 2001 From: Github Action Date: Tue, 14 Mar 2023 12:47:39 +0000 Subject: [PATCH 013/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 41dab6110..d86170f2c 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.0-9", + "version": "0.32.0-10", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index a2e85ea19..c5a9fa822 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.0-9", + "version": "0.32.0-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index d68533f44..8c7d97b08 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.0-9", + "version": "0.32.0-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index b46db4785..3659904ac 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.0-9", + "version": "0.32.0-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 0fe2717d2..927264b19 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.0-9", + "version": "0.32.0-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 49d147d6a..61b0f4e33 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.0-9", + "version": "0.32.0-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index 8554ad650..e0aab7561 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.0-9", + "version": "0.32.0-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index d47b58963..7f25441d4 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.0-9", + "version": "0.32.0-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 93ccf4101..030a172d0 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.0-9", + "version": "0.32.0-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 428d1279a..2488fa8ac 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.0-9", + "version": "0.32.0-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index b3462b405..9ce879b51 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.0-9", + "version": "0.32.0-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 748fc0414..8586bdb4d 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.0-9", + "version": "0.32.0-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 71a2b8f83..ab05384a0 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.0-9", + "version": "0.32.0-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index dcccacb7e..30972037b 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.0-9", + "version": "0.32.0-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From db2b1b87a770c04a2db975d5c5f828e095a9038e Mon Sep 17 00:00:00 2001 From: GustavHemmelmayr <34513708+GustavHemmelmayr@users.noreply.github.com> Date: Tue, 14 Mar 2023 15:34:16 +0100 Subject: [PATCH 014/130] feat: update LICENSE (#737) * Update LICENSE changed to built on KILT --------- Co-authored-by: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> --- LICENSE | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/LICENSE b/LICENSE index 3fbfa7d7d..5330e4207 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ -Copyright (c) 2018-2023, BOTLabs GmbH +Copyright (c) 2018-2023, Built on KILT All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes software developed by the BOTLabs GmbH. -4. Neither the name of the BOTLabs GmbH nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +3. All advertising materials mentioning features or use of this software must display the following acknowledgement: Built on KILT. +4. Neither the name of KILT nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY BOTLABS GMBH ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BOTLABS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. From 2b329867463bbc8356520e72ef85f131ed4db144 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Mar 2023 17:52:39 +0100 Subject: [PATCH 015/130] chore(deps): update polkadot dependencies (#732) * chore(deps): update polkadot dependencies * fix: spies * refactor: jest.mocked --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Tom Adler --- docs/package.json | 8 +- packages/augment-api/package.json | 4 +- packages/chain-helpers/package.json | 6 +- packages/config/package.json | 2 +- packages/core/package.json | 10 +- packages/did/package.json | 12 +- packages/messaging/package.json | 2 +- packages/testing/package.json | 10 +- packages/types/package.json | 10 +- packages/utils/package.json | 8 +- packages/vc-export/package.json | 8 +- .../src/exportToVerifiableCredential.spec.ts | 7 +- .../vc-js/suites/KiltAttestedSuite.spec.ts | 6 +- yarn.lock | 902 ++++++++---------- 14 files changed, 456 insertions(+), 539 deletions(-) diff --git a/docs/package.json b/docs/package.json index e4036b9d1..aac75ef45 100644 --- a/docs/package.json +++ b/docs/package.json @@ -17,11 +17,11 @@ "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "dependencies": { "@kiltprotocol/sdk-js": "workspace:*", - "@polkadot/keyring": "^10.2.1", - "@polkadot/types": "^9.10.2", - "@polkadot/util": "^10.2.1", + "@polkadot/keyring": "^11.0.0", + "@polkadot/types": "^10.0.0", + "@polkadot/util": "^11.0.0", "typescript-logging": "^0.6.4", - "@polkadot/util-crypto": "^10.2.1", + "@polkadot/util-crypto": "^11.0.0", "testcontainers": "^9.0.0" } } \ No newline at end of file diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 8c7d97b08..a1ca0bc35 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -36,8 +36,8 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { - "@polkadot/api": "^9.10.2", - "@polkadot/typegen": "^9.10.2", + "@polkadot/api": "^10.0.0", + "@polkadot/typegen": "^10.0.0", "@types/websocket": "^1.0.5", "glob": "^7.1.1", "rimraf": "^3.0.2", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 3659904ac..fd9fa9735 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -31,7 +31,7 @@ "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { "@kiltprotocol/testing": "workspace:*", - "@polkadot/keyring": "^10.2.1", + "@polkadot/keyring": "^11.0.0", "rimraf": "^3.0.2", "typescript": "^4.8.3" }, @@ -39,7 +39,7 @@ "@kiltprotocol/config": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^9.10.2", - "@polkadot/types": "^9.10.2" + "@polkadot/api": "^10.0.0", + "@polkadot/types": "^10.0.0" } } diff --git a/packages/config/package.json b/packages/config/package.json index 927264b19..1dbb7ab97 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -36,7 +36,7 @@ "dependencies": { "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^9.10.2", + "@polkadot/api": "^10.0.0", "typescript-logging": "^1.0.0" } } diff --git a/packages/core/package.json b/packages/core/package.json index 61b0f4e33..db74380f4 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -45,11 +45,11 @@ "@kiltprotocol/type-definitions": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^9.10.2", - "@polkadot/keyring": "^10.2.1", - "@polkadot/types": "^9.10.2", - "@polkadot/util": "^10.2.1", - "@polkadot/util-crypto": "^10.2.1", + "@polkadot/api": "^10.0.0", + "@polkadot/keyring": "^11.0.0", + "@polkadot/types": "^10.0.0", + "@polkadot/util": "^11.0.0", + "@polkadot/util-crypto": "^11.0.0", "cbor": "^8.1.0" } } diff --git a/packages/did/package.json b/packages/did/package.json index e0aab7561..48fb368c2 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -39,12 +39,12 @@ "@kiltprotocol/config": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^9.10.2", - "@polkadot/keyring": "^10.2.1", - "@polkadot/types": "^9.10.2", - "@polkadot/types-codec": "^9.10.2", - "@polkadot/util": "^10.2.1", - "@polkadot/util-crypto": "^10.2.1", + "@polkadot/api": "^10.0.0", + "@polkadot/keyring": "^11.0.0", + "@polkadot/types": "^10.0.0", + "@polkadot/types-codec": "^10.0.0", + "@polkadot/util": "^11.0.0", + "@polkadot/util-crypto": "^11.0.0", "cbor": "^8.1.0" } } diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 7f25441d4..e8bef8fb6 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -39,6 +39,6 @@ "@kiltprotocol/did": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/util": "^10.2.1" + "@polkadot/util": "^11.0.0" } } diff --git a/packages/testing/package.json b/packages/testing/package.json index 2488fa8ac..2061062b7 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -38,11 +38,11 @@ "@kiltprotocol/type-definitions": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^9.10.2", - "@polkadot/keyring": "^10.2.1", - "@polkadot/types": "^9.10.2", - "@polkadot/util": "^10.2.1", - "@polkadot/util-crypto": "^10.2.1", + "@polkadot/api": "^10.0.0", + "@polkadot/keyring": "^11.0.0", + "@polkadot/types": "^10.0.0", + "@polkadot/util": "^11.0.0", + "@polkadot/util-crypto": "^11.0.0", "tweetnacl": "^1.0.3", "uuid": "^9.0.0" }, diff --git a/packages/types/package.json b/packages/types/package.json index 8586bdb4d..83db7e343 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -30,11 +30,11 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "dependencies": { - "@polkadot/api": "^9.10.2", - "@polkadot/keyring": "^10.2.1", - "@polkadot/types": "^9.10.2", - "@polkadot/util": "^10.2.1", - "@polkadot/util-crypto": "^10.2.1" + "@polkadot/api": "^10.0.0", + "@polkadot/keyring": "^11.0.0", + "@polkadot/types": "^10.0.0", + "@polkadot/util": "^11.0.0", + "@polkadot/util-crypto": "^11.0.0" }, "devDependencies": { "rimraf": "^3.0.2", diff --git a/packages/utils/package.json b/packages/utils/package.json index ab05384a0..ec950f0db 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -35,10 +35,10 @@ }, "dependencies": { "@kiltprotocol/types": "workspace:*", - "@polkadot/api": "^9.10.2", - "@polkadot/keyring": "^10.2.1", - "@polkadot/util": "^10.2.1", - "@polkadot/util-crypto": "^10.2.1", + "@polkadot/api": "^10.0.0", + "@polkadot/keyring": "^11.0.0", + "@polkadot/util": "^11.0.0", + "@polkadot/util-crypto": "^11.0.0", "tweetnacl": "^1.0.3", "uuid": "^9.0.0" } diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 30972037b..38dba7c90 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -41,10 +41,10 @@ "@kiltprotocol/did": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^9.10.2", - "@polkadot/types": "^9.10.2", - "@polkadot/util": "^10.2.1", - "@polkadot/util-crypto": "^10.2.1", + "@polkadot/api": "^10.0.0", + "@polkadot/types": "^10.0.0", + "@polkadot/util": "^11.0.0", + "@polkadot/util-crypto": "^11.0.0", "jsonld": "^2.0.2", "jsonld-signatures": "^5.0.0", "vc-js": "^0.6.4" diff --git a/packages/vc-export/src/exportToVerifiableCredential.spec.ts b/packages/vc-export/src/exportToVerifiableCredential.spec.ts index 391ee338d..ba815b371 100644 --- a/packages/vc-export/src/exportToVerifiableCredential.spec.ts +++ b/packages/vc-export/src/exportToVerifiableCredential.spec.ts @@ -33,6 +33,11 @@ import { KILT_VERIFIABLECREDENTIAL_TYPE, } from './constants' +jest.mock('@kiltprotocol/core', () => ({ + ...jest.requireActual('@kiltprotocol/core'), + Attestation: { fromChain: jest.fn() }, +})) + const mockedApi: any = ApiMocks.getMockedApi() const ctype: ICType = { @@ -327,7 +332,7 @@ describe('proofs', () => { mockedApi.query.attestation.attestations.mockResolvedValueOnce( encodedAttestation ) - jest.spyOn(Attestation, 'fromChain').mockReturnValue(attestation) + jest.mocked(Attestation.fromChain).mockReturnValue(attestation) const result = await verificationUtils.verifyAttestedProof( VC, diff --git a/packages/vc-export/src/vc-js/suites/KiltAttestedSuite.spec.ts b/packages/vc-export/src/vc-js/suites/KiltAttestedSuite.spec.ts index de3ac0162..b5a76b6f8 100644 --- a/packages/vc-export/src/vc-js/suites/KiltAttestedSuite.spec.ts +++ b/packages/vc-export/src/vc-js/suites/KiltAttestedSuite.spec.ts @@ -46,7 +46,11 @@ const encodedAttestation = ApiMocks.mockChainQueryReturn( ) mockedApi.query.attestation.attestations.mockResolvedValue(encodedAttestation) -const spy = jest.spyOn(Attestation, 'fromChain').mockReturnValue(attestation) +jest.mock('@kiltprotocol/core', () => ({ + ...jest.requireActual('@kiltprotocol/core'), + Attestation: { fromChain: jest.fn() }, +})) +const spy = jest.mocked(Attestation.fromChain).mockReturnValue(attestation) let suite: AttestationSuite let purpose: jsigs.purposes.ProofPurpose diff --git a/yarn.lock b/yarn.lock index 8aeec1b8c..16366e820 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,7 +39,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.20.5, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": +"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": version: 7.20.5 resolution: "@babel/core@npm:7.20.5" dependencies: @@ -1243,22 +1243,7 @@ __metadata: languageName: node linkType: hard -"@babel/register@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/register@npm:7.18.9" - dependencies: - clone-deep: ^4.0.1 - find-cache-dir: ^2.0.0 - make-dir: ^2.1.0 - pirates: ^4.0.5 - source-map-support: ^0.5.16 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 4aeaff97e061a397f632659082ba86c539ef8194697b236d991c10d1c2ea8f73213d3b5b3b2c24625951a1ef726b7a7d2e70f70ffcb37f79ef0c1a745eebef21 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.6": +"@babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.6": version: 7.20.6 resolution: "@babel/runtime@npm:7.20.6" dependencies: @@ -1857,8 +1842,8 @@ __metadata: resolution: "@kiltprotocol/augment-api@workspace:packages/augment-api" dependencies: "@kiltprotocol/type-definitions": "workspace:*" - "@polkadot/api": ^9.10.2 - "@polkadot/typegen": ^9.10.2 + "@polkadot/api": ^10.0.0 + "@polkadot/typegen": ^10.0.0 "@types/websocket": ^1.0.5 glob: ^7.1.1 rimraf: ^3.0.2 @@ -1877,9 +1862,9 @@ __metadata: "@kiltprotocol/testing": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^9.10.2 - "@polkadot/keyring": ^10.2.1 - "@polkadot/types": ^9.10.2 + "@polkadot/api": ^10.0.0 + "@polkadot/keyring": ^11.0.0 + "@polkadot/types": ^10.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 languageName: unknown @@ -1891,7 +1876,7 @@ __metadata: dependencies: "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^9.10.2 + "@polkadot/api": ^10.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 typescript-logging: ^1.0.0 @@ -1911,11 +1896,11 @@ __metadata: "@kiltprotocol/type-definitions": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^9.10.2 - "@polkadot/keyring": ^10.2.1 - "@polkadot/types": ^9.10.2 - "@polkadot/util": ^10.2.1 - "@polkadot/util-crypto": ^10.2.1 + "@polkadot/api": ^10.0.0 + "@polkadot/keyring": ^11.0.0 + "@polkadot/types": ^10.0.0 + "@polkadot/util": ^11.0.0 + "@polkadot/util-crypto": ^11.0.0 "@types/uuid": ^8.0.0 cbor: ^8.1.0 rimraf: ^3.0.2 @@ -1933,12 +1918,12 @@ __metadata: "@kiltprotocol/testing": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^9.10.2 - "@polkadot/keyring": ^10.2.1 - "@polkadot/types": ^9.10.2 - "@polkadot/types-codec": ^9.10.2 - "@polkadot/util": ^10.2.1 - "@polkadot/util-crypto": ^10.2.1 + "@polkadot/api": ^10.0.0 + "@polkadot/keyring": ^11.0.0 + "@polkadot/types": ^10.0.0 + "@polkadot/types-codec": ^10.0.0 + "@polkadot/util": ^11.0.0 + "@polkadot/util-crypto": ^11.0.0 cbor: ^8.1.0 rimraf: ^3.0.2 typescript: ^4.8.3 @@ -1954,7 +1939,7 @@ __metadata: "@kiltprotocol/testing": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/util": ^10.2.1 + "@polkadot/util": ^11.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 languageName: unknown @@ -1996,11 +1981,11 @@ __metadata: "@kiltprotocol/type-definitions": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^9.10.2 - "@polkadot/keyring": ^10.2.1 - "@polkadot/types": ^9.10.2 - "@polkadot/util": ^10.2.1 - "@polkadot/util-crypto": ^10.2.1 + "@polkadot/api": ^10.0.0 + "@polkadot/keyring": ^11.0.0 + "@polkadot/types": ^10.0.0 + "@polkadot/util": ^11.0.0 + "@polkadot/util-crypto": ^11.0.0 rimraf: ^3.0.2 tweetnacl: ^1.0.3 typescript: ^4.8.3 @@ -2021,11 +2006,11 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/types@workspace:packages/types" dependencies: - "@polkadot/api": ^9.10.2 - "@polkadot/keyring": ^10.2.1 - "@polkadot/types": ^9.10.2 - "@polkadot/util": ^10.2.1 - "@polkadot/util-crypto": ^10.2.1 + "@polkadot/api": ^10.0.0 + "@polkadot/keyring": ^11.0.0 + "@polkadot/types": ^10.0.0 + "@polkadot/util": ^11.0.0 + "@polkadot/util-crypto": ^11.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 languageName: unknown @@ -2036,10 +2021,10 @@ __metadata: resolution: "@kiltprotocol/utils@workspace:packages/utils" dependencies: "@kiltprotocol/types": "workspace:*" - "@polkadot/api": ^9.10.2 - "@polkadot/keyring": ^10.2.1 - "@polkadot/util": ^10.2.1 - "@polkadot/util-crypto": ^10.2.1 + "@polkadot/api": ^10.0.0 + "@polkadot/keyring": ^11.0.0 + "@polkadot/util": ^11.0.0 + "@polkadot/util-crypto": ^11.0.0 rimraf: ^3.0.2 tweetnacl: ^1.0.3 typescript: ^4.8.3 @@ -2057,10 +2042,10 @@ __metadata: "@kiltprotocol/testing": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^9.10.2 - "@polkadot/types": ^9.10.2 - "@polkadot/util": ^10.2.1 - "@polkadot/util-crypto": ^10.2.1 + "@polkadot/api": ^10.0.0 + "@polkadot/types": ^10.0.0 + "@polkadot/util": ^11.0.0 + "@polkadot/util-crypto": ^11.0.0 "@types/jsonld": 1.5.1 jsonld: ^2.0.2 jsonld-signatures: ^5.0.0 @@ -2070,17 +2055,17 @@ __metadata: languageName: unknown linkType: soft -"@noble/hashes@npm:1.1.3": - version: 1.1.3 - resolution: "@noble/hashes@npm:1.1.3" - checksum: a6f9783d2a33fc528c8709532b1c26cc3f5866f79c66256e881b28c61a1585be3899b008aa4e5e2b4e01b95c713722f52591cbb18ec51aa0ec63e7eaece1b89c +"@noble/hashes@npm:1.2.0": + version: 1.2.0 + resolution: "@noble/hashes@npm:1.2.0" + checksum: 8ca080ce557b8f40fb2f78d3aedffd95825a415ac8e13d7ffe3643f8626a8c2d99a3e5975b555027ac24316d8b3c02a35b8358567c0c23af681e6573602aa434 languageName: node linkType: hard -"@noble/secp256k1@npm:1.7.0": - version: 1.7.0 - resolution: "@noble/secp256k1@npm:1.7.0" - checksum: 540a2b8e527ee1e5522af1c430e54945ad373883cac983b115136cd0950efa1f2c473ee6a36d8e69b6809b3ee586276de62f5fa705c77a9425721e81bada8116 +"@noble/secp256k1@npm:1.7.1": + version: 1.7.1 + resolution: "@noble/secp256k1@npm:1.7.1" + checksum: d2301f1f7690368d8409a3152450458f27e54df47e3f917292de3de82c298770890c2de7c967d237eff9c95b70af485389a9695f73eb05a43e2bd562d18b18cb languageName: node linkType: hard @@ -2143,440 +2128,438 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-augment@npm:9.10.2": - version: 9.10.2 - resolution: "@polkadot/api-augment@npm:9.10.2" - dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/api-base": 9.10.2 - "@polkadot/rpc-augment": 9.10.2 - "@polkadot/types": 9.10.2 - "@polkadot/types-augment": 9.10.2 - "@polkadot/types-codec": 9.10.2 - "@polkadot/util": ^10.2.1 - checksum: 79b2162195b63933aae4be1452f07c00ce78f7d08e927f6c832942a2609438ebd32a4ec6103b779e36a0dad53a0e622416b36a3d67a91232219f3d7b4244fae3 - languageName: node - linkType: hard - -"@polkadot/api-base@npm:9.10.2": - version: 9.10.2 - resolution: "@polkadot/api-base@npm:9.10.2" - dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/rpc-core": 9.10.2 - "@polkadot/types": 9.10.2 - "@polkadot/util": ^10.2.1 - rxjs: ^7.6.0 - checksum: 648616b77e11adc3dfd09a1d5d5128c5ba6510f23d5a6b16599fce3c31e19d4d2b69367ae9b0891839f17f618e054b2dbc01f7322900a32c97e740a07080dada - languageName: node - linkType: hard - -"@polkadot/api-derive@npm:9.10.2": - version: 9.10.2 - resolution: "@polkadot/api-derive@npm:9.10.2" - dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/api": 9.10.2 - "@polkadot/api-augment": 9.10.2 - "@polkadot/api-base": 9.10.2 - "@polkadot/rpc-core": 9.10.2 - "@polkadot/types": 9.10.2 - "@polkadot/types-codec": 9.10.2 - "@polkadot/util": ^10.2.1 - "@polkadot/util-crypto": ^10.2.1 - rxjs: ^7.6.0 - checksum: 4cd5f26baaea161908b942ffff68d5311b139c70bee4067718757e02bce1d38ec0e02c2d8658b7f14794f86e139283f1db51f2294a57f865d5ce8326b39eb1b5 - languageName: node - linkType: hard - -"@polkadot/api@npm:9.10.2, @polkadot/api@npm:^9.10.2": - version: 9.10.2 - resolution: "@polkadot/api@npm:9.10.2" - dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/api-augment": 9.10.2 - "@polkadot/api-base": 9.10.2 - "@polkadot/api-derive": 9.10.2 - "@polkadot/keyring": ^10.2.1 - "@polkadot/rpc-augment": 9.10.2 - "@polkadot/rpc-core": 9.10.2 - "@polkadot/rpc-provider": 9.10.2 - "@polkadot/types": 9.10.2 - "@polkadot/types-augment": 9.10.2 - "@polkadot/types-codec": 9.10.2 - "@polkadot/types-create": 9.10.2 - "@polkadot/types-known": 9.10.2 - "@polkadot/util": ^10.2.1 - "@polkadot/util-crypto": ^10.2.1 - eventemitter3: ^4.0.7 - rxjs: ^7.6.0 - checksum: dc912213e567cfdb262ccfdfae71bb03da5172760f452968173c371015130bad48a9cb65335fe94acda5dd39a1c8f1a0820f9a885150c9f325c53e1578002e25 +"@polkadot/api-augment@npm:10.1.2": + version: 10.1.2 + resolution: "@polkadot/api-augment@npm:10.1.2" + dependencies: + "@polkadot/api-base": 10.1.2 + "@polkadot/rpc-augment": 10.1.2 + "@polkadot/types": 10.1.2 + "@polkadot/types-augment": 10.1.2 + "@polkadot/types-codec": 10.1.2 + "@polkadot/util": ^11.0.2 + tslib: ^2.5.0 + checksum: 74d6f0dd0dabdc80b7cb60161c92eaff281b371cf12cccd77c6d6895347877d3f0e21e541f7f79dbada4e19ca7de6e72d945f849d5d103dd02fe918530a81783 + languageName: node + linkType: hard + +"@polkadot/api-base@npm:10.1.2": + version: 10.1.2 + resolution: "@polkadot/api-base@npm:10.1.2" + dependencies: + "@polkadot/rpc-core": 10.1.2 + "@polkadot/types": 10.1.2 + "@polkadot/util": ^11.0.2 + rxjs: ^7.8.0 + tslib: ^2.5.0 + checksum: fcb3f8cb61ea5438b28e06d4d34c2d6a331afa4ab4637929410bcf50d0ab0423df249bcd60846a3f7f0e0cdaa5bb3a033525514f0c3e19db4b0bb37da8b64d8a + languageName: node + linkType: hard + +"@polkadot/api-derive@npm:10.1.2": + version: 10.1.2 + resolution: "@polkadot/api-derive@npm:10.1.2" + dependencies: + "@polkadot/api": 10.1.2 + "@polkadot/api-augment": 10.1.2 + "@polkadot/api-base": 10.1.2 + "@polkadot/rpc-core": 10.1.2 + "@polkadot/types": 10.1.2 + "@polkadot/types-codec": 10.1.2 + "@polkadot/util": ^11.0.2 + "@polkadot/util-crypto": ^11.0.2 + rxjs: ^7.8.0 + tslib: ^2.5.0 + checksum: 0727d34b4dab54e3e845db4779ad53cfb1e02540306505c232bf395fb78c67de043622d0761e27349b53d9b13cc3f69a7a93f5e948ca36bbda1f1a451758426c languageName: node linkType: hard -"@polkadot/keyring@npm:^10.2.1": - version: 10.2.1 - resolution: "@polkadot/keyring@npm:10.2.1" +"@polkadot/api@npm:10.1.2, @polkadot/api@npm:^10.0.0": + version: 10.1.2 + resolution: "@polkadot/api@npm:10.1.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/util": 10.2.1 - "@polkadot/util-crypto": 10.2.1 + "@polkadot/api-augment": 10.1.2 + "@polkadot/api-base": 10.1.2 + "@polkadot/api-derive": 10.1.2 + "@polkadot/keyring": ^11.0.2 + "@polkadot/rpc-augment": 10.1.2 + "@polkadot/rpc-core": 10.1.2 + "@polkadot/rpc-provider": 10.1.2 + "@polkadot/types": 10.1.2 + "@polkadot/types-augment": 10.1.2 + "@polkadot/types-codec": 10.1.2 + "@polkadot/types-create": 10.1.2 + "@polkadot/types-known": 10.1.2 + "@polkadot/util": ^11.0.2 + "@polkadot/util-crypto": ^11.0.2 + eventemitter3: ^5.0.0 + rxjs: ^7.8.0 + tslib: ^2.5.0 + checksum: b62c18797a5475a76ef08f752500a1156bfd6f425d6fd702857fa25fd58b85b6d8c5e008fec48ea856aea88da17d9266bc7271a4fd4b745b28f435bdbab0b1f8 + languageName: node + linkType: hard + +"@polkadot/keyring@npm:^11.0.0, @polkadot/keyring@npm:^11.0.2": + version: 11.0.2 + resolution: "@polkadot/keyring@npm:11.0.2" + dependencies: + "@polkadot/util": 11.0.2 + "@polkadot/util-crypto": 11.0.2 + tslib: ^2.5.0 peerDependencies: - "@polkadot/util": 10.2.1 - "@polkadot/util-crypto": 10.2.1 - checksum: 7a7fa99c92d6381a706cd763c56b3ef53798b005e9abd1d4d15aaf5088b0bd1f2fc3152b6acc140c851bc8c8c3236bf4a6bc47b64da2cb1af94b442df24cdbff + "@polkadot/util": 11.0.2 + "@polkadot/util-crypto": 11.0.2 + checksum: 24c60f1f14319b170b474d2175693acd06cacf164ab0748248f56681ea6749bbb0bd3a3d86d287d93cc0d7bdd88b4ad0c223950830d2a10cf0ae1cb0f4ae6a77 languageName: node linkType: hard -"@polkadot/networks@npm:10.2.1, @polkadot/networks@npm:^10.2.1": - version: 10.2.1 - resolution: "@polkadot/networks@npm:10.2.1" +"@polkadot/networks@npm:11.0.2, @polkadot/networks@npm:^11.0.2": + version: 11.0.2 + resolution: "@polkadot/networks@npm:11.0.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/util": 10.2.1 - "@substrate/ss58-registry": ^1.35.0 - checksum: e0c741731facc15edbe62b8dc84844cae651d27020af3586a0bc29307e3b9b21b4394d70f170826d69531b58ab45a86857b655f0e9bb7e29161aed1d0f624170 + "@polkadot/util": 11.0.2 + "@substrate/ss58-registry": ^1.39.0 + tslib: ^2.5.0 + checksum: cd2d5bc6934749a854ee185e5d8961c683d2a4d6aa39e640f8ab225e578713c644d70431c641fd8ce378c4194ac4776352f34bec773ae5a6309083af6d00dbcd languageName: node linkType: hard -"@polkadot/rpc-augment@npm:9.10.2": - version: 9.10.2 - resolution: "@polkadot/rpc-augment@npm:9.10.2" +"@polkadot/rpc-augment@npm:10.1.2": + version: 10.1.2 + resolution: "@polkadot/rpc-augment@npm:10.1.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/rpc-core": 9.10.2 - "@polkadot/types": 9.10.2 - "@polkadot/types-codec": 9.10.2 - "@polkadot/util": ^10.2.1 - checksum: 8221e8bd746da9b258920c94a5d813e45d8f52e7e26e0116890752561a1b16a386468218237b1c2275906768bb01a495827c082e1b0e642ab35169517e54be15 + "@polkadot/rpc-core": 10.1.2 + "@polkadot/types": 10.1.2 + "@polkadot/types-codec": 10.1.2 + "@polkadot/util": ^11.0.2 + tslib: ^2.5.0 + checksum: 16139da5ced163197e13b6b9bf2c3ee0d7e6ee83753d07918d22653329f1dda49ae4fd23a989a9f19f77d02f18e64892eb3a34f6413f907dd4d2fd6d59af4d80 languageName: node linkType: hard -"@polkadot/rpc-core@npm:9.10.2": - version: 9.10.2 - resolution: "@polkadot/rpc-core@npm:9.10.2" +"@polkadot/rpc-core@npm:10.1.2": + version: 10.1.2 + resolution: "@polkadot/rpc-core@npm:10.1.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/rpc-augment": 9.10.2 - "@polkadot/rpc-provider": 9.10.2 - "@polkadot/types": 9.10.2 - "@polkadot/util": ^10.2.1 - rxjs: ^7.6.0 - checksum: 1b87438a59bc6c65568517df3cddbd43b34df5af01a83831c17987f4e1e37b8a5e1d80eabb98741bc547b72cd65a4b5e48b414463c79c56c187af141cab7f711 + "@polkadot/rpc-augment": 10.1.2 + "@polkadot/rpc-provider": 10.1.2 + "@polkadot/types": 10.1.2 + "@polkadot/util": ^11.0.2 + rxjs: ^7.8.0 + tslib: ^2.5.0 + checksum: 2c5c5510506489542689d8db8f00310097623d3ef1764f1faf0e5688770c4d0f0057b43870771e0036a723bb311487238def4a1c689c4a10e3eb07ef925fab59 languageName: node linkType: hard -"@polkadot/rpc-provider@npm:9.10.2": - version: 9.10.2 - resolution: "@polkadot/rpc-provider@npm:9.10.2" +"@polkadot/rpc-provider@npm:10.1.2": + version: 10.1.2 + resolution: "@polkadot/rpc-provider@npm:10.1.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/keyring": ^10.2.1 - "@polkadot/types": 9.10.2 - "@polkadot/types-support": 9.10.2 - "@polkadot/util": ^10.2.1 - "@polkadot/util-crypto": ^10.2.1 - "@polkadot/x-fetch": ^10.2.1 - "@polkadot/x-global": ^10.2.1 - "@polkadot/x-ws": ^10.2.1 - "@substrate/connect": 0.7.17 - eventemitter3: ^4.0.7 - mock-socket: ^9.1.5 - nock: ^13.2.9 - checksum: b3fdc1fdcde27d57af542fad30af441328fc8270f9bef7e5537dc253c96b660894e20c109b177b7ba2d82e050c5ae5ff2929a9c6fb985de7a0b90f5bb6e3f867 - languageName: node - linkType: hard - -"@polkadot/typegen@npm:^9.10.2": - version: 9.10.2 - resolution: "@polkadot/typegen@npm:9.10.2" - dependencies: - "@babel/core": ^7.20.5 - "@babel/register": ^7.18.9 - "@babel/runtime": ^7.20.6 - "@polkadot/api": 9.10.2 - "@polkadot/api-augment": 9.10.2 - "@polkadot/rpc-augment": 9.10.2 - "@polkadot/rpc-provider": 9.10.2 - "@polkadot/types": 9.10.2 - "@polkadot/types-augment": 9.10.2 - "@polkadot/types-codec": 9.10.2 - "@polkadot/types-create": 9.10.2 - "@polkadot/types-support": 9.10.2 - "@polkadot/util": ^10.2.1 - "@polkadot/util-crypto": ^10.2.1 - "@polkadot/x-ws": ^10.2.1 + "@polkadot/keyring": ^11.0.2 + "@polkadot/types": 10.1.2 + "@polkadot/types-support": 10.1.2 + "@polkadot/util": ^11.0.2 + "@polkadot/util-crypto": ^11.0.2 + "@polkadot/x-fetch": ^11.0.2 + "@polkadot/x-global": ^11.0.2 + "@polkadot/x-ws": ^11.0.2 + "@substrate/connect": 0.7.20 + eventemitter3: ^5.0.0 + mock-socket: ^9.2.1 + nock: ^13.3.0 + tslib: ^2.5.0 + dependenciesMeta: + "@substrate/connect": + optional: true + checksum: 049d8149952f0934e6dfda71a948b44bf81168f8988bb1b165ff1d7f0130e9005bf034048fe5648617de5fffa20e255263761b2ad3b591894968cae8dfb112f8 + languageName: node + linkType: hard + +"@polkadot/typegen@npm:^10.0.0": + version: 10.1.2 + resolution: "@polkadot/typegen@npm:10.1.2" + dependencies: + "@polkadot/api": 10.1.2 + "@polkadot/api-augment": 10.1.2 + "@polkadot/rpc-augment": 10.1.2 + "@polkadot/rpc-provider": 10.1.2 + "@polkadot/types": 10.1.2 + "@polkadot/types-augment": 10.1.2 + "@polkadot/types-codec": 10.1.2 + "@polkadot/types-create": 10.1.2 + "@polkadot/types-support": 10.1.2 + "@polkadot/util": ^11.0.2 + "@polkadot/util-crypto": ^11.0.2 + "@polkadot/x-ws": ^11.0.2 handlebars: ^4.7.7 - websocket: ^1.0.34 - yargs: ^17.6.2 + tslib: ^2.5.0 + yargs: ^17.7.1 bin: - polkadot-types-chain-info: scripts/polkadot-types-chain-info.cjs - polkadot-types-from-chain: scripts/polkadot-types-from-chain.cjs - polkadot-types-from-defs: scripts/polkadot-types-from-defs.cjs - polkadot-types-internal-interfaces: scripts/polkadot-types-internal-interfaces.cjs - polkadot-types-internal-metadata: scripts/polkadot-types-internal-metadata.cjs - checksum: c2ecdb251cfb4021f0fddc2eebe6605db6d921d12d86a6298517b71056cfa0d0350d4fbf86e43c358792786540558a66b8b30da50c12281591f8fa716ba1dd19 + polkadot-types-chain-info: scripts/polkadot-types-chain-info.mjs + polkadot-types-from-chain: scripts/polkadot-types-from-chain.mjs + polkadot-types-from-defs: scripts/polkadot-types-from-defs.mjs + polkadot-types-internal-interfaces: scripts/polkadot-types-internal-interfaces.mjs + polkadot-types-internal-metadata: scripts/polkadot-types-internal-metadata.mjs + checksum: 6fd595991d920cfc318ff55981d3fc25af47658ef86b9455c3c1628ecfee94c1ede0493175d537bfb7a5dd7090976788c9fcd85ed294771b0dd4bc6fe29661c3 languageName: node linkType: hard -"@polkadot/types-augment@npm:9.10.2": - version: 9.10.2 - resolution: "@polkadot/types-augment@npm:9.10.2" +"@polkadot/types-augment@npm:10.1.2": + version: 10.1.2 + resolution: "@polkadot/types-augment@npm:10.1.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/types": 9.10.2 - "@polkadot/types-codec": 9.10.2 - "@polkadot/util": ^10.2.1 - checksum: 6d6671726a5e025a16d5386db9039a06e864a7a52c70d301de07ba4884d2d2735e5c6a26029fb4b7db02d67a30d26d2e6891d5eff6085530daf8c048bf9ca240 + "@polkadot/types": 10.1.2 + "@polkadot/types-codec": 10.1.2 + "@polkadot/util": ^11.0.2 + tslib: ^2.5.0 + checksum: 83ec36d6735f93c7081d724f1161d69505bd95bb07ef596ec676d945e476358c768710196f1b814f2442517d0d0af1ed716cf3e697dd1cd92f908c1ffbcfaae2 languageName: node linkType: hard -"@polkadot/types-codec@npm:9.10.2, @polkadot/types-codec@npm:^9.10.2": - version: 9.10.2 - resolution: "@polkadot/types-codec@npm:9.10.2" +"@polkadot/types-codec@npm:10.1.2, @polkadot/types-codec@npm:^10.0.0": + version: 10.1.2 + resolution: "@polkadot/types-codec@npm:10.1.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/util": ^10.2.1 - "@polkadot/x-bigint": ^10.2.1 - checksum: 69366a7975f2ccf02b91a087579185e9580d7448e1aab96519ceb4e76d3b5d8e6a90337fc51789c7e6fec649067e7f05467bd8ff5e44d985a72068ae2e256603 + "@polkadot/util": ^11.0.2 + "@polkadot/x-bigint": ^11.0.2 + tslib: ^2.5.0 + checksum: 5078111eab71db1149cd444902ebd4fa03e570ab372c83e9d976a6249c35794cb912056b298c4ba87f86e8ce4d66e2b2ed4b070b66ff00b8a9b18080aa20ddfb languageName: node linkType: hard -"@polkadot/types-create@npm:9.10.2": - version: 9.10.2 - resolution: "@polkadot/types-create@npm:9.10.2" +"@polkadot/types-create@npm:10.1.2": + version: 10.1.2 + resolution: "@polkadot/types-create@npm:10.1.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/types-codec": 9.10.2 - "@polkadot/util": ^10.2.1 - checksum: c32a07924512d3698fcbdc38da9490ee5ce91910533d7756fbab9a8455b8010bc8bba33b727869299aae0acfeaaa49b661364593b49b0ee7df6882cad30e7e4a + "@polkadot/types-codec": 10.1.2 + "@polkadot/util": ^11.0.2 + tslib: ^2.5.0 + checksum: d280ab7db0e88282468fe5371559f754065839f19c942f275d6aa3ebc5adac32359ee13a1b65e79e945ccb8d18fd7906b4567b452c782bbae7ec7e00bb370a30 languageName: node linkType: hard -"@polkadot/types-known@npm:9.10.2": - version: 9.10.2 - resolution: "@polkadot/types-known@npm:9.10.2" +"@polkadot/types-known@npm:10.1.2": + version: 10.1.2 + resolution: "@polkadot/types-known@npm:10.1.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/networks": ^10.2.1 - "@polkadot/types": 9.10.2 - "@polkadot/types-codec": 9.10.2 - "@polkadot/types-create": 9.10.2 - "@polkadot/util": ^10.2.1 - checksum: 9e0fb68bf5136f752955564b8691fc218f0f41415d791d93171d22c83bc88f524dbc3b6e49c17b9621aee80ba8953022c5b25d0da71256214331215121f82d19 + "@polkadot/networks": ^11.0.2 + "@polkadot/types": 10.1.2 + "@polkadot/types-codec": 10.1.2 + "@polkadot/types-create": 10.1.2 + "@polkadot/util": ^11.0.2 + tslib: ^2.5.0 + checksum: f1078e954e940ea3c68f3823d8efa56070cef44b57b9ecf1a82c5b06f6de43555cf874721a7c8f46635e03127a835c32254c772680f4d84337dea336b6ac0d38 languageName: node linkType: hard -"@polkadot/types-support@npm:9.10.2": - version: 9.10.2 - resolution: "@polkadot/types-support@npm:9.10.2" +"@polkadot/types-support@npm:10.1.2": + version: 10.1.2 + resolution: "@polkadot/types-support@npm:10.1.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/util": ^10.2.1 - checksum: 8e00f42211a7d8155a36ab8662b3ddf5b6b849e4e16a36213b12d6cb2030b47664fc7433d29a7bab61808142e9c03e68ddfe30d33fa70dee5d10333a37faaf5d + "@polkadot/util": ^11.0.2 + tslib: ^2.5.0 + checksum: 517a19c84df0ea114508677f499cffe79038e7fbd209888dc2c4e9cfbf093299e4ac69cd77098b2913a13b4dab5be08630024730bb6633364f7ab17b84a1b847 languageName: node linkType: hard -"@polkadot/types@npm:9.10.2, @polkadot/types@npm:^9.10.2": - version: 9.10.2 - resolution: "@polkadot/types@npm:9.10.2" +"@polkadot/types@npm:10.1.2, @polkadot/types@npm:^10.0.0": + version: 10.1.2 + resolution: "@polkadot/types@npm:10.1.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/keyring": ^10.2.1 - "@polkadot/types-augment": 9.10.2 - "@polkadot/types-codec": 9.10.2 - "@polkadot/types-create": 9.10.2 - "@polkadot/util": ^10.2.1 - "@polkadot/util-crypto": ^10.2.1 - rxjs: ^7.6.0 - checksum: f2973ec02b086d3df395151170c7dba5b33791a40e5ce9f40f8bbb475c53c7097d1305aa9be64097c9642b2e7334e97bc0c93aebc15c07a59633e81b3d2a8975 + "@polkadot/keyring": ^11.0.2 + "@polkadot/types-augment": 10.1.2 + "@polkadot/types-codec": 10.1.2 + "@polkadot/types-create": 10.1.2 + "@polkadot/util": ^11.0.2 + "@polkadot/util-crypto": ^11.0.2 + rxjs: ^7.8.0 + tslib: ^2.5.0 + checksum: 875fd0320f51193d6809e40b4ef4c819eb118c711a2a67356dad822a3d4c501c4823dd53070e4ee7d0ec5855b3d678bdd832bd4173d2b4afa847392c0c087bd8 languageName: node linkType: hard -"@polkadot/util-crypto@npm:10.2.1, @polkadot/util-crypto@npm:^10.2.1": - version: 10.2.1 - resolution: "@polkadot/util-crypto@npm:10.2.1" +"@polkadot/util-crypto@npm:11.0.2, @polkadot/util-crypto@npm:^11.0.0, @polkadot/util-crypto@npm:^11.0.2": + version: 11.0.2 + resolution: "@polkadot/util-crypto@npm:11.0.2" dependencies: - "@babel/runtime": ^7.20.6 - "@noble/hashes": 1.1.3 - "@noble/secp256k1": 1.7.0 - "@polkadot/networks": 10.2.1 - "@polkadot/util": 10.2.1 - "@polkadot/wasm-crypto": ^6.4.1 - "@polkadot/x-bigint": 10.2.1 - "@polkadot/x-randomvalues": 10.2.1 + "@noble/hashes": 1.2.0 + "@noble/secp256k1": 1.7.1 + "@polkadot/networks": 11.0.2 + "@polkadot/util": 11.0.2 + "@polkadot/wasm-crypto": ^7.0.3 + "@polkadot/x-bigint": 11.0.2 + "@polkadot/x-randomvalues": 11.0.2 "@scure/base": 1.1.1 ed2curve: ^0.3.0 + tslib: ^2.5.0 tweetnacl: ^1.0.3 peerDependencies: - "@polkadot/util": 10.2.1 - checksum: 159860330435550eb3266c87a36d8076a602adb82724aa8109e32028f1148abbf2082f8eb89ebdbabb708e7190a746c328750b192b8e990d6bd06d1e3f7bf582 + "@polkadot/util": 11.0.2 + checksum: 80f972254ea5c15d99ea8724d28f26f2ac094355782d1cec52f48054efffc914e4368e478f7bec6494fb9834c4af870914c69c485f8baf045d06c429d8450ec2 languageName: node linkType: hard -"@polkadot/util@npm:10.2.1, @polkadot/util@npm:^10.2.1": - version: 10.2.1 - resolution: "@polkadot/util@npm:10.2.1" +"@polkadot/util@npm:11.0.2, @polkadot/util@npm:^11.0.0, @polkadot/util@npm:^11.0.2": + version: 11.0.2 + resolution: "@polkadot/util@npm:11.0.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/x-bigint": 10.2.1 - "@polkadot/x-global": 10.2.1 - "@polkadot/x-textdecoder": 10.2.1 - "@polkadot/x-textencoder": 10.2.1 + "@polkadot/x-bigint": 11.0.2 + "@polkadot/x-global": 11.0.2 + "@polkadot/x-textdecoder": 11.0.2 + "@polkadot/x-textencoder": 11.0.2 "@types/bn.js": ^5.1.1 bn.js: ^5.2.1 - checksum: e4ee46762e36410f8fd3cfd61b340030a72081387acae5cf4fdb14de4bb57fde81c2df02e78d8dc9f1df88ca3a606de1e85945d735ac0ac7996740fbb7970c0f + tslib: ^2.5.0 + checksum: 1003ae76c912d635134f0618988110f08c56be81195d46f6148d822dce8513b0f026f1981bfba7e93d9bd4412379591f8ee90862de3a4d4d97c407d04929c5dd languageName: node linkType: hard -"@polkadot/wasm-bridge@npm:6.4.1": - version: 6.4.1 - resolution: "@polkadot/wasm-bridge@npm:6.4.1" +"@polkadot/wasm-bridge@npm:7.0.3": + version: 7.0.3 + resolution: "@polkadot/wasm-bridge@npm:7.0.3" dependencies: - "@babel/runtime": ^7.20.6 + tslib: ^2.5.0 peerDependencies: "@polkadot/util": "*" "@polkadot/x-randomvalues": "*" - checksum: 02d9cd1b5c2f6d0261004229751137ef829b38c12e0e844548ef356f9b65dc9a82ec4dcad32f4a156e3c8666b21ef4a8e0c2e5e0e1c51a51a2d7d00373f6f65e + checksum: 9603e0bfca80e0fbe1192783653c095990d34e4eb0b187f8fedd97abaeee4a3147e4f5e66e910b63f024030b0e7e21aedf118c0c58407a4464837ca7f2355809 languageName: node linkType: hard -"@polkadot/wasm-crypto-asmjs@npm:6.4.1": - version: 6.4.1 - resolution: "@polkadot/wasm-crypto-asmjs@npm:6.4.1" +"@polkadot/wasm-crypto-asmjs@npm:7.0.3": + version: 7.0.3 + resolution: "@polkadot/wasm-crypto-asmjs@npm:7.0.3" dependencies: - "@babel/runtime": ^7.20.6 + tslib: ^2.5.0 peerDependencies: "@polkadot/util": "*" - checksum: 6c2bba5014c373dfc18ec82bb7779141bfaea7d90e3e198fee0bc8ba3078238fee9bf1bb7138a3cbb8b5ad01ade603c44ce838e17940a610fbeec6341a17a0f3 + checksum: 6f819ba35612c475b3b14f286efa432086bdb9599ddb034c1abf448f0ad6e376ae81bac0ad4984564f6d5f82691ed5c4b74735ebc75dfdecf8f96f2e4bfcd5a3 languageName: node linkType: hard -"@polkadot/wasm-crypto-init@npm:6.4.1": - version: 6.4.1 - resolution: "@polkadot/wasm-crypto-init@npm:6.4.1" +"@polkadot/wasm-crypto-init@npm:7.0.3": + version: 7.0.3 + resolution: "@polkadot/wasm-crypto-init@npm:7.0.3" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/wasm-bridge": 6.4.1 - "@polkadot/wasm-crypto-asmjs": 6.4.1 - "@polkadot/wasm-crypto-wasm": 6.4.1 + "@polkadot/wasm-bridge": 7.0.3 + "@polkadot/wasm-crypto-asmjs": 7.0.3 + "@polkadot/wasm-crypto-wasm": 7.0.3 + tslib: ^2.5.0 peerDependencies: "@polkadot/util": "*" "@polkadot/x-randomvalues": "*" - checksum: e1d30cae9588607cbbe35f539df2cb3fca6b69d65ab7907ca24183931953de0e8d7e61be4af7c30a05295a16a1a9255256a6420a049ddf38c155400f91187956 + checksum: ee5957c0b2297e58d913e59a5eecde10c8272a2bfc6e072e669ee8ada0105444f8d9cae535948849406fd696941620094daea12cc2950e18a0439d7fba2e19d8 languageName: node linkType: hard -"@polkadot/wasm-crypto-wasm@npm:6.4.1": - version: 6.4.1 - resolution: "@polkadot/wasm-crypto-wasm@npm:6.4.1" +"@polkadot/wasm-crypto-wasm@npm:7.0.3": + version: 7.0.3 + resolution: "@polkadot/wasm-crypto-wasm@npm:7.0.3" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/wasm-util": 6.4.1 + "@polkadot/wasm-util": 7.0.3 + tslib: ^2.5.0 peerDependencies: "@polkadot/util": "*" - checksum: 21c72028d2e4333b54fb212980e3dc51827ffaf90364df1932205162859eab9b1be3a7767e1c3c5e8cfcf6ad2bc8cb9dafd3be59ada250b77679fa7ade67c646 + checksum: ef9e6e88e066762e3803b8b0f4276035b835b2eaab86c53f004f977073442b6e51d7baf4c7bc308913c091975056c1b64ef1c00085e31f9988e12155b24111fb languageName: node linkType: hard -"@polkadot/wasm-crypto@npm:^6.4.1": - version: 6.4.1 - resolution: "@polkadot/wasm-crypto@npm:6.4.1" - dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/wasm-bridge": 6.4.1 - "@polkadot/wasm-crypto-asmjs": 6.4.1 - "@polkadot/wasm-crypto-init": 6.4.1 - "@polkadot/wasm-crypto-wasm": 6.4.1 - "@polkadot/wasm-util": 6.4.1 +"@polkadot/wasm-crypto@npm:^7.0.3": + version: 7.0.3 + resolution: "@polkadot/wasm-crypto@npm:7.0.3" + dependencies: + "@polkadot/wasm-bridge": 7.0.3 + "@polkadot/wasm-crypto-asmjs": 7.0.3 + "@polkadot/wasm-crypto-init": 7.0.3 + "@polkadot/wasm-crypto-wasm": 7.0.3 + "@polkadot/wasm-util": 7.0.3 + tslib: ^2.5.0 peerDependencies: "@polkadot/util": "*" "@polkadot/x-randomvalues": "*" - checksum: 2892834aa2357e5974257810be625b0f08a35a3ba1def4a87e4989636dc7a43691357fdbfbeab4595eb47cd90177dba3c0ce95e593219db7c488fdf450d86357 + checksum: e63fefca98685ea5ef488304e5aa7c30b1c483d7f633cda1efebfc95f8255faaf62fbaba439d81e57fadc11e53d3033a5b71272742cbdc0207f4ba617dba8123 languageName: node linkType: hard -"@polkadot/wasm-util@npm:6.4.1": - version: 6.4.1 - resolution: "@polkadot/wasm-util@npm:6.4.1" +"@polkadot/wasm-util@npm:7.0.3": + version: 7.0.3 + resolution: "@polkadot/wasm-util@npm:7.0.3" dependencies: - "@babel/runtime": ^7.20.6 + tslib: ^2.5.0 peerDependencies: "@polkadot/util": "*" - checksum: 6d5ef0aa9af7ca9fe23149793bd1fa9f864b41695b49ab5ae5c23b3ac761c310edf382fe0d0a0d812dc07b10a2d0b056de5750947867a94ab87ab51e176d94b3 + checksum: b20414290bbc9f67523c5180345f20ea8ef6244c90768936e0a25cce642448b086374869b99e6f2f7c071c0dea318ac9fb9761b8efefdeb24b75828c5d8bec3d languageName: node linkType: hard -"@polkadot/x-bigint@npm:10.2.1, @polkadot/x-bigint@npm:^10.2.1": - version: 10.2.1 - resolution: "@polkadot/x-bigint@npm:10.2.1" +"@polkadot/x-bigint@npm:11.0.2, @polkadot/x-bigint@npm:^11.0.2": + version: 11.0.2 + resolution: "@polkadot/x-bigint@npm:11.0.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/x-global": 10.2.1 - checksum: 46e104ed1d3dc30fa4eda10e128e465a04a9a5dfced4e203dd16f50840ce8af44e60a351844afc26005c7c803a244d8101bd26a7d85c0df5efede3d9c823a752 + "@polkadot/x-global": 11.0.2 + tslib: ^2.5.0 + checksum: ad9d9c15d9b19b9d7393ce09bbf5b70b90d054efcfbc32160871db2aee8703e2d81518a306086fdc4ee52d2645eee33d99e832692b6676fb5b2d2f7fe5d82a61 languageName: node linkType: hard -"@polkadot/x-fetch@npm:^10.2.1": - version: 10.2.1 - resolution: "@polkadot/x-fetch@npm:10.2.1" +"@polkadot/x-fetch@npm:^11.0.2": + version: 11.0.2 + resolution: "@polkadot/x-fetch@npm:11.0.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/x-global": 10.2.1 - "@types/node-fetch": ^2.6.2 + "@polkadot/x-global": 11.0.2 node-fetch: ^3.3.0 - checksum: db4f0a933cf3318d8d8002ec017773d64b1076eb265fb5f05de252e3a34fe1784805854e6dd480e53a5c9f5bf6a1b4cddfae75f385b679a1b15c25968eae19c3 + tslib: ^2.5.0 + checksum: 6dad22e61a27eea2432d276378d60fe9a86f688f3f6c8c9cba04f45bf279c0618a139167260d5aa387a9e3f9689bfd6ba119956d785e7b1183d671bf24c9c4fe languageName: node linkType: hard -"@polkadot/x-global@npm:10.2.1, @polkadot/x-global@npm:^10.2.1": - version: 10.2.1 - resolution: "@polkadot/x-global@npm:10.2.1" +"@polkadot/x-global@npm:11.0.2, @polkadot/x-global@npm:^11.0.2": + version: 11.0.2 + resolution: "@polkadot/x-global@npm:11.0.2" dependencies: - "@babel/runtime": ^7.20.6 - checksum: 7032f7677916b402ff6bc0ee438ae18aa860909310aec7de535ddd45c40a4b46b26f2ddf78f2178a9a978f97ab8110b9e5fbce3701ea36183eb122cb4136c366 + tslib: ^2.5.0 + checksum: d8c48fff95d4febffff0f426eaccab1f0e28e9ff2f3251f1d496dcde2eebac37c791d9def781123c17806f1814b7e5ed659d1c878608dfa7753ff9141ca12257 languageName: node linkType: hard -"@polkadot/x-randomvalues@npm:10.2.1": - version: 10.2.1 - resolution: "@polkadot/x-randomvalues@npm:10.2.1" +"@polkadot/x-randomvalues@npm:11.0.2": + version: 11.0.2 + resolution: "@polkadot/x-randomvalues@npm:11.0.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/x-global": 10.2.1 - checksum: e7f32d7f432fb0fdc9386eb379012edb0f6836135222d4750a2858845c4f8188c297070fa79d947bf3b199e57b20aa23f1dc1cd318ff371f42ae929c90f2c151 + "@polkadot/x-global": 11.0.2 + tslib: ^2.5.0 + checksum: 07fcf64da977a52e70b03ac94d5b2e2fa22653e50739d064f94140acad6a9631619e42ae6d4f68519d428c4377f77986b069be4f32862002153580d84635d6c9 languageName: node linkType: hard -"@polkadot/x-textdecoder@npm:10.2.1": - version: 10.2.1 - resolution: "@polkadot/x-textdecoder@npm:10.2.1" +"@polkadot/x-textdecoder@npm:11.0.2": + version: 11.0.2 + resolution: "@polkadot/x-textdecoder@npm:11.0.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/x-global": 10.2.1 - checksum: e7edcb4f0321bf474ce47c71c89fa2b4685e3fa2b77c17bc346a9034d204a48a4855ff8c882fb1047531bd1e0893fd9367085ea223c555ea51fe509a44347826 + "@polkadot/x-global": 11.0.2 + tslib: ^2.5.0 + checksum: 26df03b20b7f89dacaa99c7f5e511ac7234ec6cbd2249596374535836b21f0b014306260233f4581b3ba7040f59704c9afc912206c254b43914ef0edca888bf1 languageName: node linkType: hard -"@polkadot/x-textencoder@npm:10.2.1": - version: 10.2.1 - resolution: "@polkadot/x-textencoder@npm:10.2.1" +"@polkadot/x-textencoder@npm:11.0.2": + version: 11.0.2 + resolution: "@polkadot/x-textencoder@npm:11.0.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/x-global": 10.2.1 - checksum: 758daf0f192e88ceeb331e82a97fc2a06db9cb88fcbefb906cf7bda1b5be988ec9c3ca0ffe599852e1b167cd3b95309c16d3fa09cb9279b0f2d8eb2b017edda7 + "@polkadot/x-global": 11.0.2 + tslib: ^2.5.0 + checksum: 928035abcac8e5a904004ced651aabf04944bef05eec4770663962f429c5e6f9ce6fee46813a2724b4c91436ee076024672e14fb2a105a4ea322137d0ec2b14e languageName: node linkType: hard -"@polkadot/x-ws@npm:^10.2.1": - version: 10.2.1 - resolution: "@polkadot/x-ws@npm:10.2.1" +"@polkadot/x-ws@npm:^11.0.2": + version: 11.0.2 + resolution: "@polkadot/x-ws@npm:11.0.2" dependencies: - "@babel/runtime": ^7.20.6 - "@polkadot/x-global": 10.2.1 - "@types/websocket": ^1.0.5 - websocket: ^1.0.34 - checksum: 888426bf894f5f1be041cd8f26c7ad665dec3631be19e31938291714dee92a4be940b03d2969f2ccafe38c371900e04fc0758bbe0e81afea81769353d473e3b6 + "@polkadot/x-global": 11.0.2 + tslib: ^2.5.0 + ws: ^8.13.0 + checksum: b6069ed1815a42fed4798943a1687b656b471d802ab3f8516b8505814be48edf9c533b9f43db3202ea2a11fd813c6db211a883ec3e03d83e77aed1db48bf8dae languageName: node linkType: hard @@ -2612,31 +2595,21 @@ __metadata: languageName: node linkType: hard -"@substrate/connect@npm:0.7.17": - version: 0.7.17 - resolution: "@substrate/connect@npm:0.7.17" +"@substrate/connect@npm:0.7.20": + version: 0.7.20 + resolution: "@substrate/connect@npm:0.7.20" dependencies: "@substrate/connect-extension-protocol": ^1.0.1 - "@substrate/smoldot-light": 0.7.7 eventemitter3: ^4.0.7 - checksum: 902e89d28da9034e11abc33b47f850f01e5bd247ff291fac415366b27c363306738f1f60d8758fb949db4360018292474e2a835145b94dfa0d9fc12651bf94fe + smoldot: 0.7.11 + checksum: 397419d77fa7811e602d4964450660f5e95dd501dd94e7b6bced7cd8a41ebacb889faed6708b0a621b81ab552c5aa9aa5786b25cf0d65de725a8bf8f5e3a9bc8 languageName: node linkType: hard -"@substrate/smoldot-light@npm:0.7.7": - version: 0.7.7 - resolution: "@substrate/smoldot-light@npm:0.7.7" - dependencies: - pako: ^2.0.4 - ws: ^8.8.1 - checksum: 56870615f295619a7ad6d323eae8fccd6935f845592089bdcc4c43feef4fb1897b84bc907368d02fcf3bbe6dda19707c5fe88034337fd6d99bbf9e2b79d1e357 - languageName: node - linkType: hard - -"@substrate/ss58-registry@npm:^1.35.0": - version: 1.36.0 - resolution: "@substrate/ss58-registry@npm:1.36.0" - checksum: 4a804142d8f8cc693c2816e3eb4b5b195cc1d612f0f935b51ed9c77f980064b56b8001aae4aab7ec04d13f9ff7cde8346ac4d5e69ebabe52309713257dafb216 +"@substrate/ss58-registry@npm:^1.39.0": + version: 1.39.0 + resolution: "@substrate/ss58-registry@npm:1.39.0" + checksum: 1a16d1f637ea8c9a0cd2cabedb8731b81cafa1e979912a2183c2c670d680dc759136ad5f4183bef48359bd9f0a005f676e7ab78a4f076c19a2cf32974049a1f8 languageName: node linkType: hard @@ -2877,16 +2850,6 @@ __metadata: languageName: node linkType: hard -"@types/node-fetch@npm:^2.6.2": - version: 2.6.2 - resolution: "@types/node-fetch@npm:2.6.2" - dependencies: - "@types/node": "*" - form-data: ^3.0.0 - checksum: 6f73b1470000d303d25a6fb92875ea837a216656cb7474f66cdd67bb014aa81a5a11e7ac9c21fe19bee9ecb2ef87c1962bceeaec31386119d1ac86e4c30ad7a6 - languageName: node - linkType: hard - "@types/node@npm:*": version: 17.0.22 resolution: "@types/node@npm:17.0.22" @@ -4412,13 +4375,6 @@ __metadata: languageName: node linkType: hard -"commondir@npm:^1.0.1": - version: 1.0.1 - resolution: "commondir@npm:1.0.1" - checksum: 59715f2fc456a73f68826285718503340b9f0dd89bfffc42749906c5cf3d4277ef11ef1cca0350d0e79204f00f1f6d83851ececc9095dc88512a697ac0b9bdcb - languageName: node - linkType: hard - "compare-func@npm:^1.3.1": version: 1.3.4 resolution: "compare-func@npm:1.3.4" @@ -5546,6 +5502,13 @@ __metadata: languageName: node linkType: hard +"eventemitter3@npm:^5.0.0": + version: 5.0.0 + resolution: "eventemitter3@npm:5.0.0" + checksum: b974bafbab860e0a5bbb21add4c4e82f9d5691c583c03f2e4c5d44a2d6c4556d79223621bdcfc6c8e14366a4af9df6b5ea9d6caf65fbffc80b66f3e1dceacbc9 + languageName: node + linkType: hard + "events@npm:^3.2.0": version: 3.3.0 resolution: "events@npm:3.3.0" @@ -5724,17 +5687,6 @@ __metadata: languageName: node linkType: hard -"find-cache-dir@npm:^2.0.0": - version: 2.1.0 - resolution: "find-cache-dir@npm:2.1.0" - dependencies: - commondir: ^1.0.1 - make-dir: ^2.0.0 - pkg-dir: ^3.0.0 - checksum: 60ad475a6da9f257df4e81900f78986ab367d4f65d33cf802c5b91e969c28a8762f098693d7a571b6e4dd4c15166c2da32ae2d18b6766a18e2071079448fdce4 - languageName: node - linkType: hard - "find-up@npm:^2.1.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" @@ -5744,15 +5696,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^3.0.0": - version: 3.0.0 - resolution: "find-up@npm:3.0.0" - dependencies: - locate-path: ^3.0.0 - checksum: 38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 - languageName: node - linkType: hard - "find-up@npm:^4.0.0, find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" @@ -7600,16 +7543,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"locate-path@npm:^3.0.0": - version: 3.0.0 - resolution: "locate-path@npm:3.0.0" - dependencies: - p-locate: ^3.0.0 - path-exists: ^3.0.0 - checksum: 53db3996672f21f8b0bf2a2c645ae2c13ffdae1eeecfcd399a583bce8516c0b88dcb4222ca6efbbbeb6949df7e46860895be2c02e8d3219abd373ace3bfb4e11 - languageName: node - linkType: hard - "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -7730,16 +7663,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"make-dir@npm:^2.0.0, make-dir@npm:^2.1.0": - version: 2.1.0 - resolution: "make-dir@npm:2.1.0" - dependencies: - pify: ^4.0.1 - semver: ^5.6.0 - checksum: 043548886bfaf1820323c6a2997e6d2fa51ccc2586ac14e6f14634f7458b4db2daf15f8c310e2a0abd3e0cddc64df1890d8fc7263033602c47bb12cbfcf86aab - languageName: node - linkType: hard - "make-dir@npm:^3.0.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" @@ -8044,10 +7967,10 @@ fsevents@^2.3.2: languageName: node linkType: hard -"mock-socket@npm:^9.1.5": - version: 9.1.5 - resolution: "mock-socket@npm:9.1.5" - checksum: a01586bc2850eb5809eda6de0c7ab19255c1e0eb217a805f86ba662bb4aab00b919032d67e7c826c6c12bcfb2fbe19cecbacf0ab6184936487edc4ba37d3ba53 +"mock-socket@npm:^9.2.1": + version: 9.2.1 + resolution: "mock-socket@npm:9.2.1" + checksum: daf07689563163dbcefbefe23b2a9784a75d0af31706f23ad535c6ab2abbcdefa2e91acddeb50a3c39009139e47a8f909cbb38e8137452193ccb9331637fee3e languageName: node linkType: hard @@ -8109,15 +8032,15 @@ fsevents@^2.3.2: languageName: node linkType: hard -"nock@npm:^13.2.9": - version: 13.2.9 - resolution: "nock@npm:13.2.9" +"nock@npm:^13.3.0": + version: 13.3.0 + resolution: "nock@npm:13.3.0" dependencies: debug: ^4.1.0 json-stringify-safe: ^5.0.1 lodash: ^4.17.21 propagate: ^2.0.0 - checksum: 04a2dc60b4b55fd1240f28fe34865bbc744088a4570db3781fcf66021644cc3cc9178fd86a0cb0c1f28ea77b83e8f1c9288535f6b39a6d07100059f156ccc23b + checksum: 118d04e95a17f493898a82b5dfecc03762776e1980d9c3b2077479747e60b77109c5f7c0df969d1a8f6039260abe5961733553a5841f0f627bb35238576a0009 languageName: node linkType: hard @@ -8401,7 +8324,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": +"p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" dependencies: @@ -8428,15 +8351,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"p-locate@npm:^3.0.0": - version: 3.0.0 - resolution: "p-locate@npm:3.0.0" - dependencies: - p-limit: ^2.0.0 - checksum: 83991734a9854a05fe9dbb29f707ea8a0599391f52daac32b86f08e21415e857ffa60f0e120bfe7ce0cc4faf9274a50239c7895fc0d0579d08411e513b83a4ae - languageName: node - linkType: hard - "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -8602,29 +8516,13 @@ fsevents@^2.3.2: languageName: node linkType: hard -"pify@npm:^4.0.1": - version: 4.0.1 - resolution: "pify@npm:4.0.1" - checksum: 9c4e34278cb09987685fa5ef81499c82546c033713518f6441778fbec623fc708777fe8ac633097c72d88470d5963094076c7305cafc7ad340aae27cfacd856b - languageName: node - linkType: hard - -"pirates@npm:^4.0.4, pirates@npm:^4.0.5": +"pirates@npm:^4.0.4": version: 4.0.5 resolution: "pirates@npm:4.0.5" checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 languageName: node linkType: hard -"pkg-dir@npm:^3.0.0": - version: 3.0.0 - resolution: "pkg-dir@npm:3.0.0" - dependencies: - find-up: ^3.0.0 - checksum: 70c9476ffefc77552cc6b1880176b71ad70bfac4f367604b2b04efd19337309a4eec985e94823271c7c0e83946fa5aeb18cd360d15d10a5d7533e19344bfa808 - languageName: node - linkType: hard - "pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" @@ -9237,12 +9135,12 @@ fsevents@^2.3.2: languageName: node linkType: hard -"rxjs@npm:^7.6.0": - version: 7.6.0 - resolution: "rxjs@npm:7.6.0" +"rxjs@npm:^7.8.0": + version: 7.8.0 + resolution: "rxjs@npm:7.8.0" dependencies: tslib: ^2.1.0 - checksum: b3abbbfe1ddfd06fca9314b83cbd13bcddc3320429218136f75c79a4802ac430dd13873364aac1ded54fd457f8c77df332d205a92d8a1c61656565bb718c50af + checksum: 61b4d4fd323c1043d8d6ceb91f24183b28bcf5def4f01ca111511d5c6b66755bc5578587fe714ef5d67cf4c9f2e26f4490d4e1d8cabf9bd5967687835e9866a2 languageName: node linkType: hard @@ -9308,7 +9206,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0": +"semver@npm:2 || 3 || 4 || 5": version: 5.7.1 resolution: "semver@npm:5.7.1" bin: @@ -9469,6 +9367,16 @@ fsevents@^2.3.2: languageName: node linkType: hard +"smoldot@npm:0.7.11": + version: 0.7.11 + resolution: "smoldot@npm:0.7.11" + dependencies: + pako: ^2.0.4 + ws: ^8.8.1 + checksum: 99861d92d28eeb3c150b518ecc25de1f403ca9a3134b8d240071e825a6b8d2da7e2c13e52c2a692a425e643b74a314ed0598bfb66a9482583a265b5bb464df7f + languageName: node + linkType: hard + "socks-proxy-agent@npm:^6.1.1": version: 6.1.1 resolution: "socks-proxy-agent@npm:6.1.1" @@ -9500,7 +9408,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": +"source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -10218,10 +10126,10 @@ fsevents@^2.3.2: languageName: node linkType: hard -"tslib@npm:^2.1.0": - version: 2.3.1 - resolution: "tslib@npm:2.3.1" - checksum: de17a98d4614481f7fcb5cd53ffc1aaf8654313be0291e1bfaee4b4bb31a20494b7d218ff2e15017883e8ea9626599b3b0e0229c18383ba9dce89da2adf15cb9 +"tslib@npm:^2.1.0, tslib@npm:^2.5.0": + version: 2.5.0 + resolution: "tslib@npm:2.5.0" + checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 languageName: node linkType: hard @@ -10966,18 +10874,18 @@ typescript@^4.8.3: languageName: node linkType: hard -"ws@npm:^8.8.1": - version: 8.8.1 - resolution: "ws@npm:8.8.1" +"ws@npm:^8.13.0, ws@npm:^8.8.1": + version: 8.13.0 + resolution: "ws@npm:8.13.0" peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - checksum: 2152cf862cae0693f3775bc688a6afb2e989d19d626d215e70f5fcd8eb55b1c3b0d3a6a4052905ec320e2d7734e20aeedbf9744496d62f15a26ad79cf4cf7dae + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c languageName: node linkType: hard @@ -11102,9 +11010,9 @@ typescript@^4.8.3: languageName: node linkType: hard -"yargs@npm:^17.6.2": - version: 17.6.2 - resolution: "yargs@npm:17.6.2" +"yargs@npm:^17.7.1": + version: 17.7.1 + resolution: "yargs@npm:17.7.1" dependencies: cliui: ^8.0.1 escalade: ^3.1.1 @@ -11113,7 +11021,7 @@ typescript@^4.8.3: string-width: ^4.2.3 y18n: ^5.0.5 yargs-parser: ^21.1.1 - checksum: 47da1b0d854fa16d45a3ded57b716b013b2179022352a5f7467409da5a04a1eef5b3b3d97a2dfc13e8bbe5f2ffc0afe3bc6a4a72f8254e60f5a4bd7947138643 + checksum: 3d8a43c336a4942bc68080768664aca85c7bd406f018bad362fd255c41c8f4e650277f42fd65d543fce99e084124ddafee7bbfc1a5c6a8fda4cec78609dcf8d4 languageName: node linkType: hard From b2ce8ebcd928c903d33dd3a765b00555bd618a3e Mon Sep 17 00:00:00 2001 From: Github Action Date: Thu, 16 Mar 2023 16:57:41 +0000 Subject: [PATCH 016/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index d86170f2c..aa9597c53 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.0-10", + "version": "0.32.0-11", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index c5a9fa822..fca31ace8 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.0-10", + "version": "0.32.0-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index a1ca0bc35..a6dc80f8a 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.0-10", + "version": "0.32.0-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index fd9fa9735..d68ff46bf 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.0-10", + "version": "0.32.0-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 1dbb7ab97..962018643 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.0-10", + "version": "0.32.0-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index db74380f4..27578fe8c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.0-10", + "version": "0.32.0-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index 48fb368c2..05db4283e 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.0-10", + "version": "0.32.0-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index e8bef8fb6..c2914f1ee 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.0-10", + "version": "0.32.0-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 030a172d0..0b1d1e03b 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.0-10", + "version": "0.32.0-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 2061062b7..34398f1bd 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.0-10", + "version": "0.32.0-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 9ce879b51..981d4c151 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.0-10", + "version": "0.32.0-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 83db7e343..35a21eab2 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.0-10", + "version": "0.32.0-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index ec950f0db..6f4423db9 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.0-10", + "version": "0.32.0-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 38dba7c90..909b97bc1 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.0-10", + "version": "0.32.0-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 354fd831e84773763437e475ae00bb6d7950aae7 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Tue, 21 Mar 2023 19:31:24 +0100 Subject: [PATCH 017/130] chore: merge rf-release-0.32.0 back into develop --- docs/package.json | 27 - package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/metadata/spiritnet.json | 2 +- packages/augment-api/package.json | 2 +- .../src/interfaces/augment-api-consts.ts | 8 - .../src/interfaces/augment-api-errors.ts | 202 +-- .../src/interfaces/augment-api-events.ts | 103 +- .../src/interfaces/augment-api-query.ts | 19 +- .../src/interfaces/augment-api-runtime.ts | 29 +- .../src/interfaces/augment-api-tx.ts | 60 +- packages/augment-api/src/interfaces/lookup.ts | 1515 ++++++++++------- .../augment-api/src/interfaces/registry.ts | 73 +- .../src/interfaces/types-lookup.ts | 1463 +++++++++------- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- .../AccountLinking.spec.ts | 3 - packages/core/src/balance/Balance.utils.ts | 2 + packages/did/package.json | 2 +- packages/did/src/Did.rpc.ts | 14 +- .../did/src/DidLinks/AccountLinks.chain.ts | 43 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 29 files changed, 2053 insertions(+), 1538 deletions(-) delete mode 100644 docs/package.json diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index aac75ef45..000000000 --- a/docs/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "@kiltprotocol/docs", - "version": "0.24.0-7", - "description": "", - "scripts": { - "clean": "rimraf ./lib", - "build": "yarn clean && yarn build:ts", - "build:ts": "tsc --declaration -p tsconfig.build.json" - }, - "repository": "github:kiltprotocol/sdk-js", - "engines": { - "node": ">=14.0" - }, - "author": "", - "license": "BSD-4-Clause", - "bugs": "https://github.com/KILTprotocol/sdk-js/issues", - "homepage": "https://github.com/KILTprotocol/sdk-js#readme", - "dependencies": { - "@kiltprotocol/sdk-js": "workspace:*", - "@polkadot/keyring": "^11.0.0", - "@polkadot/types": "^10.0.0", - "@polkadot/util": "^11.0.0", - "typescript-logging": "^0.6.4", - "@polkadot/util-crypto": "^11.0.0", - "testcontainers": "^9.0.0" - } -} \ No newline at end of file diff --git a/package.json b/package.json index aa9597c53..c96815748 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.0-11", + "version": "0.32.0", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index fca31ace8..63ae29571 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.0-11", + "version": "0.32.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/metadata/spiritnet.json b/packages/augment-api/metadata/spiritnet.json index 39f9dbfcf..d99ec5b39 100644 --- a/packages/augment-api/metadata/spiritnet.json +++ b/packages/augment-api/metadata/spiritnet.json @@ -1 +1 @@ -{"result":"0x6d6574610e7907000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d6572731c0120526566436f756e7400012470726f7669646572731c0120526566436f756e7400012c73756666696369656e74731c0120526566436f756e740001106461746114012c4163636f756e7444617461000010000005060014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0000050500200c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540124000c01186e6f726d616c2401045400012c6f7065726174696f6e616c240104540001246d616e6461746f7279240104540000240c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6528010c75363400012870726f6f665f73697a6528010c75363400002800000610002c083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000030000002080034102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677338013c5665633c4469676573744974656d3e0000380000023c003c102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e00060024436f6e73656e7375730800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000400105365616c0800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000500144f74686572040030011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000400000030400000008004400000248004808306672616d655f73797374656d2c4576656e745265636f7264080445014c0454012c000c011470686173654102011450686173650001146576656e744c010445000118746f70696373450201185665633c543e00004c08447370697269746e65745f72756e74696d653052756e74696d654576656e740001781853797374656d04005001706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c496e6469636573040074017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e0005002042616c616e636573040078017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000600485472616e73616374696f6e5061796d656e7404008001a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0007001c53657373696f6e040084015470616c6c65745f73657373696f6e3a3a4576656e740016004050617261636861696e5374616b696e67040088018470617261636861696e5f7374616b696e673a3a4576656e743c52756e74696d653e0015002444656d6f6372616379040090018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e001e001c436f756e63696c0400a001fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400b001fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020004c546563686e6963616c4d656d626572736869700400b401fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365313e0022002054726561737572790400b8017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0023001c5574696c6974790400bc015470616c6c65745f7574696c6974793a3a4576656e740028001c56657374696e670400c0017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e002900245363686564756c65720400c4018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e002a001450726f78790400d0017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002b0020507265696d6167650400dc017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e002c0038546970734d656d626572736869700400e001fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365323e002d0010546970730400e4016c70616c6c65745f746970733a3a4576656e743c52756e74696d653e002e001443747970650400e8015463747970653a3a4576656e743c52756e74696d653e003d002c4174746573746174696f6e0400ec016c6174746573746174696f6e3a3a4576656e743c52756e74696d653e003e002844656c65676174696f6e0400f8016864656c65676174696f6e3a3a4576656e743c52756e74696d653e003f000c44696404000101014c6469643a3a4576656e743c52756e74696d653e004000244469644c6f6f6b757004000501018470616c6c65745f6469645f6c6f6f6b75703a3a4576656e743c52756e74696d653e00430024576562334e616d657304001501018470616c6c65745f776562335f6e616d65733a3a4576656e743c52756e74696d653e004400445075626c696343726564656e7469616c730400210101887075626c69635f63726564656e7469616c733a3a4576656e743c52756e74696d653e0045003c50617261636861696e53797374656d0400910101bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0050002458636d7051756575650400950101a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e0052002c506f6c6b61646f7458636d0400a501016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e0053002843756d756c757358636d04003902018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e00540020446d70517565756504003d0201a063756d756c75735f70616c6c65745f646d705f71756575653a3a4576656e743c52756e74696d653e00550000500c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5401304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7260013444697370617463684572726f7200013464697370617463685f696e666f5401304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e744964000110686173682c011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e540c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874240118576569676874000114636c6173735801344469737061746368436c617373000120706179735f6665655c0110506179730000580c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f7279000200005c0c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000060082873705f72756e74696d653444697370617463684572726f72000134144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040064012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400680128546f6b656e4572726f720007002841726974686d6574696304006c013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007001485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c000064082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7240018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000068082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f72746564000600006c083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000070082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000740c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909780c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475737c01185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909097c14346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000800c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909840c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e6465781c013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909880c4470617261636861696e5f7374616b696e671870616c6c6574144576656e74040454000154204e6577526f756e640800100138543a3a426c6f636b4e756d62657200001c013053657373696f6e496e6465780000088041206e6577207374616b696e6720726f756e642068617320737461727465642e785c5b626c6f636b206e756d6265722c20726f756e64206e756d6265725c5d50456e7465726564546f7043616e646964617465730400000130543a3a4163636f756e744964000108cc41206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d444c656674546f7043616e646964617465730400000130543a3a4163636f756e744964000208d8416e206163636f756e74207761732072656d6f7665642066726f6d2074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d604a6f696e6564436f6c6c61746f7243616e646964617465730800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000308e041206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620636f6c6c61746f722063616e646964617465732ebc5c5b6163636f756e742c20616d6f756e74207374616b656420627920746865206e65772063616e6469646174655c5d48436f6c6c61746f725374616b65644d6f72650c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00040801014120636f6c6c61746f722063616e6469646174652068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d48436f6c6c61746f725374616b65644c6573730c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00050801014120636f6c6c61746f722063616e64696461746520686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d54436f6c6c61746f725363686564756c6564457869740c001c013053657373696f6e496e6465780000000130543a3a4163636f756e74496400001c013053657373696f6e496e64657800061001014120636f6c6c61746f722063616e646964617465206861732073746172746564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e646964617465732e205c5b726f756e64206e756d6265722c20636f6c6c61746f722773206163636f756e742c20726f756e64206e756d626572207768656ee074686520636f6c6c61746f722077696c6c206265206566666563746976656c792072656d6f7665642066726f6d2074686520736574206f663063616e646964617465735c5d50436f6c6c61746f7243616e63656c6564457869740400000130543a3a4163636f756e74496400070c05014120636f6c6c61746f722063616e646964617465206861732063616e63656c6564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e6469646174657320616e6420776173206164646564206261636b20746f207468652063616e64696461746520706f6f6c2e205c5b636f6c6c61746f722773246163636f756e745c5d3443616e6469646174654c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000808cc416e206163636f756e7420686173206c6566742074686520736574206f6620636f6c6c61746f722063616e646964617465732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d3c436f6c6c61746f7252656d6f7665640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000908e4416e206163636f756e742077617320666f726365646c792072656d6f7665642066726f6d207468652020736574206f6620636f6c6c61746f72c863616e646964617465732e205c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d604d617843616e6469646174655374616b654368616e676564040018013042616c616e63654f663c543e000a08b4546865206d6178696d756d2063616e646964617465207374616b6520686173206265656e206368616e6765642e485c5b6e6577206d617820616d6f756e745c5d4c44656c656761746f725374616b65644d6f72651000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000b0cf0412064656c656761746f722068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d4c44656c656761746f725374616b65644c6573731000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000c0cf0412064656c656761746f7220686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d3444656c656761746f724c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000d08a8416e206163636f756e7420686173206c6566742074686520736574206f662064656c656761746f72732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d2844656c65676174696f6e1000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000e0cc8416e206163636f756e74206861732064656c6567617465642061206e657720636f6c6c61746f722063616e6469646174652e11015c5b6163636f756e742c20616d6f756e74206f662066756e6473207374616b65642c20746f74616c20616d6f756e74206f662064656c656761746f7273272066756e64738c7374616b656420666f722074686520636f6c6c61746f722063616e6469646174655c5d4844656c65676174696f6e5265706c616365641800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000f180d0141206e65772064656c65676174696f6e20686173207265706c6163656420616e206578697374696e67206f6e6520696e2074686520736574206f66206f6e676f696e67010164656c65676174696f6e7320666f72206120636f6c6c61746f722063616e6469646174652e205c5b6e65772064656c656761746f722773206163636f756e742c0901616d6f756e74206f662066756e6473207374616b656420696e20746865206e65772064656c65676174696f6e2c207265706c616365642064656c656761746f7227730d016163636f756e742c20616d6f756e74206f662066756e6473207374616b656420696e20746865207265706c6163652064656c65676174696f6e2c20636f6c6c61746f72050163616e6469646174652773206163636f756e742c206e657720746f74616c20616d6f756e74206f662064656c656761746f7273272066756e6473207374616b656470666f722074686520636f6c6c61746f722063616e6469646174655c5d5444656c656761746f724c656674436f6c6c61746f721000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00100cdc416e206163636f756e74206861732073746f707065642064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e09015c5b6163636f756e742c20636f6c6c61746f722063616e6469646174652773206163636f756e742c206f6c6420616d6f756e74206f662064656c656761746f727327d866756e6473207374616b65642c206e657720616d6f756e74206f662064656c656761746f7273272066756e6473207374616b65645c5d2052657761726465640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e001108c04120636f6c6c61746f72206f7220612064656c656761746f72206861732072656365697665642061207265776172642e745c5b6163636f756e742c20616d6f756e74206f66207265776172645c5d44526f756e64496e666c6174696f6e53657410008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00120c0501496e666c6174696f6e20636f6e66696775726174696f6e20666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e09015c5b6d6178696d756d20636f6c6c61746f722773207374616b696e6720726174652c206d6178696d756d20636f6c6c61746f7227732072657761726420726174652c0d016d6178696d756d2064656c656761746f722773207374616b696e6720726174652c206d6178696d756d2064656c656761746f7227732072657761726420726174655c5d604d617853656c656374656443616e6469646174657353657408001c010c75333200001c010c753332001308f0546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c656374656420696e20667574757265dc76616c69646174696f6e20726f756e647320686173206368616e6765642e205c5b6f6c642076616c75652c206e65772076616c75655c5d44426c6f636b73506572526f756e6453657410001c013053657373696f6e496e6465780000100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d62657200140cf8546865206c656e67746820696e20626c6f636b7320666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e01015c5b726f756e64206e756d6265722c20666972737420626c6f636b20696e207468652063757272656e7420726f756e642c206f6c642076616c75652c206e65771c76616c75655c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098c0c3473705f61726974686d65746963287065725f7468696e67732c5065727175696e74696c6c0000040010010c7536340000900c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001382050726f706f73656408013870726f706f73616c5f696e6465781c012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e6465781c012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e6465781c013c5265666572656e64756d496e6465780001247468726573686f6c64940134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e6465781c013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e6465781c013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e6465781c013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011048323536000114756e74696c100138543a3a426c6f636b4e756d62657200090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f686173682c011048323536000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e6465781c013c5265666572656e64756d496e646578000110766f74659801644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e6465781c012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e6465781c012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909940c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f7269747900020000980c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f74659c0110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e6365000100009c0c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000a00c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800013470726f706f73616c5f686173682c011c543a3a486173680001247468726573686f6c641c012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011c543a3a48617368000114766f746564a40110626f6f6c00010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74a801384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74a801384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f686173682c011c543a3a4861736800010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a40000050000a80418526573756c7408045401ac044501600108084f6b0400ac000000000c4572720400600000010000ac0000040000b00c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800013470726f706f73616c5f686173682c011c543a3a486173680001247468726573686f6c641c012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011c543a3a48617368000114766f746564a40110626f6f6c00010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74a801384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74a801384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f686173682c011c543a3a4861736800010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b40c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b80c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001242050726f706f73656404013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909bc0c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e6465781c010c7533320001146572726f7260013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7260013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74a801384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c00c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c40c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736bc8016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964cc01404f7074696f6e3c5461736b4e616d653e000118726573756c74a801384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736bc8016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964cc01404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736bc8016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964cc01404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736bc8016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964cc01404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652ec800000408101c00cc04184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000d00c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74a801384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065d40130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e646578d8010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f686173682c013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200040450412070726f7879207761732072656d6f7665642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d408447370697269746e65745f72756e74696d652450726f7879547970650001180c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e63650002004050617261636861696e5374616b696e670003002c43616e63656c50726f7879000400484e6f6e4465706f736974436c61696d696e6700050000d80000050400dc0c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f746564040110686173682c011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e24526571756573746564040110686173682c011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c6561726564040110686173682c011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e00c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e40c2c70616c6c65745f746970731870616c6c6574144576656e74080454000449000114184e65775469700401207469705f686173682c011c543a3a486173680000049441206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e28546970436c6f73696e670401207469705f686173682c011c543a3a48617368000104d841207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e24546970436c6f7365640c01207469705f686173682c011c543a3a4861736800010c77686f000130543a3a4163636f756e7449640001187061796f757418013c42616c616e63654f663c542c20493e0002048441207469702073756767657374696f6e20686173206265656e20636c6f7365642e305469705265747261637465640401207469705f686173682c011c543a3a486173680003049041207469702073756767657374696f6e20686173206265656e207265747261637465642e28546970536c61736865640c01207469705f686173682c011c543a3a4861736800011866696e646572000130543a3a4163636f756e74496400011c6465706f73697418013c42616c616e63654f663c542c20493e0004048841207469702073756767657374696f6e20686173206265656e20736c61736865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e80c1463747970651870616c6c6574144576656e74040454000108304354797065437265617465640800000144437479706543726561746f724f663c543e00002c01384374797065486173684f663c543e0000087441206e657720435479706520686173206265656e20637265617465642e885c5b63726561746f72206964656e7469666965722c20435479706520686173685c5d3043547970655570646174656404002c01384374797065486173684f663c543e000108ac496e666f726d6174696f6e2061626f7574206120435479706520686173206265656e20757064617465642e385c5b435479706520686173685c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ec0c2c6174746573746174696f6e1870616c6c6574144576656e74040454000110484174746573746174696f6e43726561746564100000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00002c01384374797065486173684f663c543e0000f001704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e0000088c41206e6577206174746573746174696f6e20686173206265656e20637265617465642e05015c5b61747465737465722049442c20636c61696d20686173682c20435479706520686173682c20286f7074696f6e616c292064656c65676174696f6e2049445c5d484174746573746174696f6e5265766f6b6564080000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00010880416e206174746573746174696f6e20686173206265656e207265766f6b65642e685c5b6163636f756e742069642c20636c61696d20686173685c5d484174746573746174696f6e52656d6f766564080000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00020880416e206174746573746174696f6e20686173206265656e2072656d6f7665642e685c5b6163636f756e742069642c20636c61696d20686173685c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e00002c0138436c61696d486173684f663c543e0003080501546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e2e685c5b6163636f756e742069642c20636c61696d20686173685c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f004184f7074696f6e04045401f40108104e6f6e6500000010536f6d650400f40000010000f40c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c417574686f72697a6174696f6e4964043044656c65676174696f6e4964012c01042844656c65676174696f6e04002c013044656c65676174696f6e496400000000f80c2864656c65676174696f6e1870616c6c6574144576656e7404045400011c40486965726172636879437265617465640c0000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c01384374797065486173684f663c543e0000088441206e65772068696572617263687920686173206265656e20637265617465642ea05c5b63726561746f722049442c20726f6f74206e6f64652049442c20435459504520686173685c5d404869657261726368795265766f6b6564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00010874412068696572617263687920686173206265656e207265766f6b65642e705c5b7265766f6b65722049442c20726f6f74206e6f64652049445c5d4048696572617263687952656d6f766564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000208dc412068696572617263687920686173206265656e2072656d6f7665642066726f6d207468652073746f72616765206f6e20636861696e2e705c5b72656d6f7665722049442c20726f6f74206e6f64652049445c5d4444656c65676174696f6e43726561746564180000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000000014044656c656761746f7249644f663c543e0000fc012c5065726d697373696f6e7300030c8841206e65772064656c65676174696f6e20686173206265656e20637265617465642efc5c5b63726561746f722049442c20726f6f74206e6f64652049442c2064656c65676174696f6e206e6f64652049442c20706172656e74206e6f64652049442c6864656c65676174652049442c207065726d697373696f6e735c5d4444656c65676174696f6e5265766f6b6564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00040878412064656c65676174696f6e20686173206265656e207265766f6b65642e885c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d4444656c65676174696f6e52656d6f76656408000001384163636f756e7449644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00050878412064656c65676174696f6e20686173206265656e2072656d6f7665642e885c5b72656d6f7665722049442c2064656c65676174696f6e206e6f64652049445c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000608f8546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720612064656c65676174696f6eac737562747265652e205c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909fc0c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368792c5065726d697373696f6e730000040110626974731c010c753332000001010c0c6469641870616c6c6574144576656e74040454000110284469644372656174656408000001384163636f756e7449644f663c543e00000001484469644964656e7469666965724f663c543e0000086c41206e65772044494420686173206265656e20637265617465642e985c5b7472616e73616374696f6e207369676e65722c20444944206964656e7469666965725c5d284469645570646174656404000001484469644964656e7469666965724f663c543e0001085c412044494420686173206265656e20757064617465642e485c5b444944206964656e7469666965725c5d2844696444656c6574656404000001484469644964656e7469666965724f663c543e0002085c412044494420686173206265656e2064656c657465642e485c5b444944206964656e7469666965725c5d4444696443616c6c4469737061746368656408000001484469644964656e7469666965724f663c543e0000a801384469737061746368526573756c74000308a041204449442d617574686f72697365642063616c6c20686173206265656e2065786563757465642e7c5c5b4449442063616c6c65722c20646973706174636820726573756c745c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090905010c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144576656e74040454000108584173736f63696174696f6e45737461626c69736865640800090101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000004f841206e6577206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e742049442077617320637265617465642e484173736f63696174696f6e52656d6f7665640800090101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000104ec416e206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e74204944207761732072656d6f7665642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090909010c4470616c6c65745f6469645f6c6f6f6b7570406c696e6b61626c655f6163636f756e74444c696e6b61626c654163636f756e7449640001082c4163636f756e744964323004000d01012c4163636f756e74496432300000002c4163636f756e7449643332040000012c4163636f756e7449643332000100000d010c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e742c4163636f756e744964323000000400110101205b75383b2032305d0000110100000314000000080015010c4470616c6c65745f776562335f6e616d65731870616c6c6574144576656e740404540001103c576562334e616d65436c61696d65640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6519010134576562334e616d654f663c543e0000047041206e6577206e616d6520686173206265656e20636c61696d65642e40576562334e616d6552656c65617365640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6519010134576562334e616d654f663c543e0001046441206e616d6520686173206265656e2072656c65617365642e38576562334e616d6542616e6e65640401106e616d6519010134576562334e616d654f663c543e0002045c41206e616d6520686173206265656e2062616e6e65642e40576562334e616d65556e62616e6e65640401106e616d6519010134576562334e616d654f663c543e0003046441206e616d6520686173206265656e20756e62616e6e65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090919010c4470616c6c65745f776562335f6e616d657324776562335f6e616d65344173636969576562334e616d65040454000004001d010180426f756e6465645665633c75382c20543a3a4d61784e616d654c656e6774683e00001d01101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000021010c487075626c69635f63726564656e7469616c731870616c6c6574144576656e740404540001104043726564656e7469616c53746f7265640801287375626a6563745f696425010130543a3a5375626a65637449640488546865207375626a656374206f6620746865206e65772063726564656e7469616c2e013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0474546865206964206f6620746865206e65772063726564656e7469616c2e0004a041206e6577207075626c69632063726564656e7469616c20686173206265656e206973737565642e4443726564656e7469616c52656d6f7665640801287375626a6563745f696425010130543a3a5375626a65637449640498546865207375626a656374206f66207468652072656d6f7665642063726564656e7469616c2e013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0484546865206964206f66207468652072656d6f7665642063726564656e7469616c2e01049841207075626c69632063726564656e7469616c7320686173206265656e2072656d6f7665642e4443726564656e7469616c5265766f6b656404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0484546865206964206f6620746865207265766f6b65642063726564656e7469616c2e02049441207075626c69632063726564656e7469616c20686173206265656e207265766f6b65642e4c43726564656e7469616c556e7265766f6b656404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e048c546865206964206f662074686520756e7265766f6b65642063726564656e7469616c2e03049c41207075626c69632063726564656e7469616c20686173206265656e20756e7265766f6b65642e0490546865206576656e74732067656e65726174656420627920746869732070616c6c65742e25010c3872756e74696d655f636f6d6d6f6e18617373657473204173736574446964000004002901013c41737365744964656e746966696572000029010c3c6b696c745f61737365745f646964730876312041737365744469640000080120636861696e5f69642d01011c436861696e496400012061737365745f69645501011c4173736574496400002d01103c6b696c745f61737365745f6469647314636861696e0876311c436861696e49640001141845697031353504003101013c4569703135355265666572656e63650000001842697031323204003501016447656e657369734865784861736833325265666572656e63650001001c446f7473616d6104003501016447656e657369734865784861736833325265666572656e636500020018536f6c616e6104003d01017047656e657369734261736535384861736833325265666572656e63650003001c47656e6572696304004501013847656e65726963436861696e4964000400003101103c6b696c745f61737365745f6469647314636861696e0876313c4569703135355265666572656e6365000004001801107531323800003501103c6b696c745f61737365745f6469647314636861696e0876316447656e657369734865784861736833325265666572656e636500000400390101205b75383b2031365d000039010000031000000008003d01103c6b696c745f61737365745f6469647314636861696e0876317047656e657369734261736535384861736833325265666572656e63650000040041010170426f756e6465645665633c75382c20436f6e73745533323c33323e3e00004101101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00004501103c6b696c745f61737365745f6469647314636861696e0876313847656e65726963436861696e496400000801246e616d6573706163654901015447656e65726963436861696e4e616d6573706163650001247265666572656e63655101015447656e65726963436861696e5265666572656e636500004901103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e4e616d657370616365000004004d0101d8426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f4e414d4553504143455f4c454e4754485f5533323e3e00004d01101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00005101103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e5265666572656e636500000400410101d8426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f5245464552454e43455f4c454e4754485f5533323e3e00005501103c6b696c745f61737365745f646964731461737365740876311c4173736574496400011418536c6970343404005901013c536c697034345265666572656e636500000014457263323004006501018445766d536d617274436f6e747261637446756e6769626c655265666572656e63650001001845726337323104006901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650002001c4572633131353504006901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650003001c47656e6572696304007901013847656e6572696341737365744964000400005901103c6b696c745f61737365745f646964731461737365740876313c536c697034345265666572656e6365000004005d0101105532353600005d01083c7072696d69746976655f7479706573105532353600000400610101205b7536343b20345d000061010000030400000010006501103c6b696c745f61737365745f646964731461737365740876318445766d536d617274436f6e747261637446756e6769626c655265666572656e636500000400110101205b75383b2032305d00006901103c6b696c745f61737365745f646964731461737365740876319045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e6365000008006501018445766d536d617274436f6e747261637446756e6769626c655265666572656e636500006d0101b44f7074696f6e3c45766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e7469666965723e00006d0104184f7074696f6e0404540171010108104e6f6e6500000010536f6d650400710100000100007101103c6b696c745f61737365745f646964731461737365740876319445766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e74696669657200000400750101dc426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f4944454e5449464945525f4c454e4754485f5533323e3e00007501101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00007901103c6b696c745f61737365745f646964731461737365740876313847656e657269634173736574496400000c01246e616d6573706163657d01015447656e6572696341737365744e616d6573706163650001247265666572656e63658101015447656e6572696341737365745265666572656e63650001086964890101784f7074696f6e3c47656e6572696341737365744964656e7469666965723e00007d01103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365744e616d657370616365000004004d0101d8426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f4e414d4553504143455f4c454e4754485f5533323e3e00008101103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365745265666572656e636500000400850101d8426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f5245464552454e43455f4c454e4754485f5533323e3e00008501101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000890104184f7074696f6e040454018d010108104e6f6e6500000010536f6d6504008d0100000100008d01103c6b696c745f61737365745f646964731461737365740876315847656e6572696341737365744964656e74696669657200000400750101dc426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f4944454e5449464945525f4c454e4754485f5533323e3e000091010c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e740404540001186056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d1c015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e4455706772616465417574686f72697a6564040124636f64655f686173682c011c543a3a486173680003047c416e207570677261646520686173206265656e20617574686f72697a65642e60446f776e776172644d657373616765735265636569766564040114636f756e741c010c7533320004040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564240118576569676874000120646d715f686561642c014472656c61795f636861696e3a3a48617368000504e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090995010c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e740404540001201c537563636573730801306d6573736167655f686173689901013c4f7074696f6e3c543a3a486173683e00011877656967687424011857656967687400000464536f6d652058434d20776173206578656375746564206f6b2e104661696c0c01306d6573736167655f686173689901013c4f7074696f6e3c543a3a486173683e0001146572726f729d01012058636d4572726f7200011877656967687424011857656967687400010440536f6d652058434d206661696c65642e2842616456657273696f6e0401306d6573736167655f686173689901013c4f7074696f6e3c543a3a486173683e000204544261642058434d2076657273696f6e20757365642e24426164466f726d61740401306d6573736167655f686173689901013c4f7074696f6e3c543a3a486173683e000304504261642058434d20666f726d617420757365642e445570776172644d65737361676553656e740401306d6573736167655f686173689901013c4f7074696f6e3c543a3a486173683e000404b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e3c58636d704d65737361676553656e740401306d6573736167655f686173689901013c4f7074696f6e3c543a3a486173683e000504c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e484f766572776569676874456e71756575656410011873656e646572a101011850617261496400011c73656e745f61741c014052656c6179426c6f636b4e756d626572000114696e64657810013c4f766572776569676874496e6465780001207265717569726564240118576569676874000604d4416e2058434d2065786365656465642074686520696e646976696475616c206d65737361676520776569676874206275646765742e484f7665727765696768745365727669636564080114696e64657810013c4f766572776569676874496e646578000110757365642401185765696768740007044101416e2058434d2066726f6d20746865206f7665727765696768742071756575652077617320657865637574656420776974682074686520676976656e2061637475616c2077656967687420757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909990104184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c00000100009d01100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404001001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c6500190000a1010c48706f6c6b61646f745f70617261636861696e287072696d697469766573084964000004001c010c7533320000a5010c2870616c6c65745f78636d1870616c6c6574144576656e7404045400014424417474656d707465640400a901015078636d3a3a6c61746573743a3a4f7574636f6d6500000ca8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e00345c5b206f7574636f6d65205c5d1053656e740c00ad0101344d756c74694c6f636174696f6e0000ad0101344d756c74694c6f636174696f6e0000d101011c58636d3c28293e00010c5c412058434d206d657373616765207761732073656e742e00885c5b206f726967696e2c2064657374696e6174696f6e2c206d657373616765205c5d48556e6578706563746564526573706f6e73650800ad0101344d756c74694c6f636174696f6e000010011c517565727949640002145901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e73655265616479080010011c517565727949640000f9010120526573706f6e73650003105d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e00485c5b2069642c20726573706f6e7365205c5d204e6f7469666965640c0010011c5175657279496400000801087538000008010875380004105901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d404e6f746966794f766572776569676874140010011c517565727949640000080108753800000801087538000024011857656967687400002401185765696768740005146101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20636f756c6441016e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e0019015c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e6465782c2061637475616c207765696768742c206d617820627564676574656420776569676874205c5d4c4e6f7469667944697370617463684572726f720c0010011c5175657279496400000801087538000008010875380006105501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d484e6f746966794465636f64654661696c65640c0010011c5175657279496400000801087538000008010875380007145101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d40496e76616c6964526573706f6e6465720c00ad0101344d756c74694c6f636174696f6e000010011c5175657279496400001d0201544f7074696f6e3c4d756c74694c6f636174696f6e3e0008145901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e00b05c5b206f726967696e206c6f636174696f6e2c2069642c206578706563746564206c6f636174696f6e205c5d5c496e76616c6964526573706f6e64657256657273696f6e0800ad0101344d756c74694c6f636174696f6e000010011c517565727949640009245101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e736554616b656e040010011c51756572794964000a0cc8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e00205c5b206964205c5d34417373657473547261707065640c002c0110483235360000ad0101344d756c74694c6f636174696f6e00002102015056657273696f6e65644d756c7469417373657473000b0cb8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e00685c5b20686173682c206f726967696e2c20617373657473205c5d5456657273696f6e4368616e67654e6f7469666965640800ad0101344d756c74694c6f636174696f6e00001c012858636d56657273696f6e000c0c2501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00645c5b2064657374696e6174696f6e2c20726573756c74205c5d5c537570706f7274656456657273696f6e4368616e6765640800ad0101344d756c74694c6f636174696f6e00001c012858636d56657273696f6e000d10390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e006c5c5b206c6f636174696f6e2c2058434d2076657273696f6e205c5d504e6f7469667954617267657453656e644661696c0c00ad0101344d756c74694c6f636174696f6e000010011c5175657279496400009d01012058636d4572726f72000e1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e007c5c5b206c6f636174696f6e2c2071756572792049442c206572726f72205c5d644e6f746966795461726765744d6967726174696f6e4661696c08003502015856657273696f6e65644d756c74694c6f636174696f6e000010011c51756572794964000f1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e00605c5b206c6f636174696f6e2c207175657279204944205c5d34417373657473436c61696d65640c002c0110483235360000ad0101344d756c74694c6f636174696f6e00002102015056657273696f6e65644d756c746941737365747300100cc0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e206173736574207472617000685c5b20686173682c206f726967696e2c20617373657473205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a901100c78636d087632187472616974731c4f7574636f6d6500010c20436f6d706c657465040010011857656967687400000028496e636f6d706c657465080010011857656967687400009d0101144572726f72000100144572726f7204009d0101144572726f7200020000ad01100c78636d087631346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72b10101244a756e6374696f6e730000b101100c78636d087631346d756c74696c6f636174696f6e244a756e6374696f6e7300012410486572650000000858310400b50101204a756e6374696f6e0001000858320800b50101204a756e6374696f6e0000b50101204a756e6374696f6e0002000858330c00b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0003000858341000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0004000858351400b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0005000858361800b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0006000858371c00b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0007000858382000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e0000b50101204a756e6374696f6e00080000b501100c78636d087631206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400b901010c7533320000002c4163636f756e744964333208011c6e6574776f726bbd0101244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bbd0101244e6574776f726b4964000114696e64657828010c753634000200304163636f756e744b6579323008011c6e6574776f726bbd0101244e6574776f726b496400010c6b6579110101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400c5010110753132380005002847656e6572616c4b65790400c10101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c6974790801086964c9010118426f6479496400011070617274cd010120426f64795061727400080000b9010000061c00bd01100c78636d087630206a756e6374696f6e244e6574776f726b49640001100c416e79000000144e616d65640400c10101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d6100030000c101101c73705f636f72651c626f756e646564407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e0000c5010000061800c901100c78636d087630206a756e6374696f6e18426f6479496400012810556e6974000000144e616d65640400c10101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400b901010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000cd01100c78636d087630206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74b901010c753332000100204672616374696f6e08010c6e6f6db901010c75333200011464656e6f6db901010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6db901010c75333200011464656e6f6db901010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6db901010c75333200011464656e6f6db901010c75333200040000d1010c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400d50101745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000d501000002d90100d9010c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c00017034576974686472617741737365740400dd01012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400dd01012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400dd01012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f696428011c51756572794964000120726573706f6e7365f9010120526573706f6e73650001286d61785f77656967687428010c753634000300345472616e736665724173736574080118617373657473dd01012c4d756c746941737365747300012c62656e6566696369617279ad0101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473dd01012c4d756c746941737365747300011064657374ad0101344d756c74694c6f636174696f6e00010c78636dd101011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065050201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c09020168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b901010c7533320001406d61785f6d6573736167655f73697a65b901010c7533320001306d61785f6361706163697479b901010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b901010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b901010c75333200011873656e646572b901010c753332000124726563697069656e74b901010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400b1010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f696428011c5175657279496400011064657374ad0101344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f77656967687428010c753634000c00304465706f73697441737365740c01186173736574730d0201404d756c7469417373657446696c7465720001286d61785f617373657473b901010c75333200012c62656e6566696369617279ad0101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365741001186173736574730d0201404d756c7469417373657446696c7465720001286d61785f617373657473b901010c75333200011064657374ad0101344d756c74694c6f636174696f6e00010c78636dd101011c58636d3c28293e000e003445786368616e67654173736574080110676976650d0201404d756c7469417373657446696c74657200011c72656365697665dd01012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c01186173736574730d0201404d756c7469417373657446696c74657200011c72657365727665ad0101344d756c74694c6f636174696f6e00010c78636dd101011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574730d0201404d756c7469417373657446696c74657200011064657374ad0101344d756c74694c6f636174696f6e00010c78636dd101011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f696428011c5175657279496400011064657374ad0101344d756c74694c6f636174696f6e0001186173736574730d0201404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f77656967687428010c75363400120030427579457865637574696f6e08011066656573e50101284d756c746941737365740001307765696768745f6c696d69741902012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400d101014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e6469780400d101014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473dd01012c4d756c74694173736574730001187469636b6574ad0101344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f77656967687428010c753634001a0048556e73756273637269626556657273696f6e001b0000dd01100c78636d087631286d756c746961737365742c4d756c746941737365747300000400e101013c5665633c4d756c746941737365743e0000e101000002e50100e501100c78636d087631286d756c74696173736574284d756c7469417373657400000801086964e901011c4173736574496400010c66756eed01012c46756e676962696c6974790000e901100c78636d087631286d756c746961737365741c4173736574496400010820436f6e63726574650400ad0101344d756c74694c6f636174696f6e000000204162737472616374040030011c5665633c75383e00010000ed01100c78636d087631286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400c5010110753132380000002c4e6f6e46756e6769626c650400f10101344173736574496e7374616e636500010000f101100c78636d087631286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400c50101107531323800010018417272617934040040011c5b75383b20345d000200184172726179380400f501011c5b75383b20385d0003001c417272617931360400390101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040030011c5665633c75383e00060000f501000003080000000800f9010c0c78636d08763220526573706f6e7365000110104e756c6c000000184173736574730400dd01012c4d756c74694173736574730001003c457865637574696f6e526573756c740400fd0101504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e04001c013873757065723a3a56657273696f6e00030000fd0104184f7074696f6e0404540101020108104e6f6e6500000010536f6d650400010200000100000102000004081c9d010005020c0c78636d087630284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d0003000009020c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656430011c5665633c75383e00000d02100c78636d087631286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e6974650400dd01012c4d756c74694173736574730000001057696c6404001102013857696c644d756c74694173736574000100001102100c78636d087631286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f660801086964e901011c4173736574496400010c66756e1502013c57696c6446756e676962696c697479000100001502100c78636d087631286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000019020c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d69746564040028010c753634000100001d0204184f7074696f6e04045401ad010108104e6f6e6500000010536f6d650400ad0100000100002102080c78636d5056657273696f6e65644d756c746941737365747300010808563004002502014c5665633c76303a3a4d756c746941737365743e0000000856310400dd01013c76313a3a4d756c74694173736574730001000025020000022902002902100c78636d0876302c6d756c74695f6173736574284d756c74694173736574000130104e6f6e650000000c416c6c0001002c416c6c46756e6769626c6500020038416c6c4e6f6e46756e6769626c650003004c416c6c416273747261637446756e6769626c65040108696430011c5665633c75383e00040058416c6c41627374726163744e6f6e46756e6769626c65040114636c61737330011c5665633c75383e0005004c416c6c436f6e637265746546756e6769626c6504010869642d0201344d756c74694c6f636174696f6e00060058416c6c436f6e63726574654e6f6e46756e6769626c65040114636c6173732d0201344d756c74694c6f636174696f6e00070040416273747261637446756e6769626c65080108696430011c5665633c75383e000118616d6f756e74c5010110753132380008004c41627374726163744e6f6e46756e6769626c65080114636c61737330011c5665633c75383e000120696e7374616e6365f10101344173736574496e7374616e636500090040436f6e637265746546756e6769626c6508010869642d0201344d756c74694c6f636174696f6e000118616d6f756e74c501011075313238000a004c436f6e63726574654e6f6e46756e6769626c65080114636c6173732d0201344d756c74694c6f636174696f6e000120696e7374616e6365f10101344173736574496e7374616e6365000b00002d02100c78636d087630386d756c74695f6c6f636174696f6e344d756c74694c6f636174696f6e000124104e756c6c0000000858310400310201204a756e6374696f6e0001000858320800310201204a756e6374696f6e0000310201204a756e6374696f6e0002000858330c00310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0003000858341000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0004000858351400310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0005000858361800310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0006000858371c00310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0007000858382000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e0000310201204a756e6374696f6e000800003102100c78636d087630206a756e6374696f6e204a756e6374696f6e00012818506172656e740000002450617261636861696e0400b901010c7533320001002c4163636f756e744964333208011c6e6574776f726bbd0101244e6574776f726b496400010869640401205b75383b2033325d000200384163636f756e74496e646578363408011c6e6574776f726bbd0101244e6574776f726b4964000114696e64657828010c753634000300304163636f756e744b6579323008011c6e6574776f726bbd0101244e6574776f726b496400010c6b6579110101205b75383b2032305d0004003850616c6c6574496e7374616e6365040008010875380005003047656e6572616c496e6465780400c5010110753132380006002847656e6572616c4b65790400c10101805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000700244f6e6c794368696c6400080024506c7572616c6974790801086964c9010118426f6479496400011070617274cd010120426f647950617274000900003502080c78636d5856657273696f6e65644d756c74694c6f636174696f6e00010808563004002d02014476303a3a4d756c74694c6f636174696f6e0000000856310400ad01014476313a3a4d756c74694c6f636174696f6e0001000039020c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d61740400f501011c5b75383b20385d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e0400f501011c5b75383b20385d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e776172640800f501011c5b75383b20385d0000a901011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909093d020c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144576656e7404045400011834496e76616c6964466f726d61740401286d6573736167655f69640401244d657373616765496400000480446f776e77617264206d65737361676520697320696e76616c69642058434d2e48556e737570706f7274656456657273696f6e0401286d6573736167655f69640401244d6573736167654964000104bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e404578656375746564446f776e776172640801286d6573736167655f69640401244d657373616765496400011c6f7574636f6d65a901011c4f7574636f6d65000204c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e3c5765696768744578686175737465640c01286d6573736167655f69640401244d657373616765496400014072656d61696e696e675f77656967687424011857656967687400013c72657175697265645f776569676874240118576569676874000304f054686520776569676874206c696d697420666f722068616e646c696e6720646f776e77617264206d657373616765732077617320726561636865642e484f766572776569676874456e7175657565640c01286d6573736167655f69640401244d65737361676549640001406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800013c72657175697265645f7765696768742401185765696768740004041901446f776e77617264206d657373616765206973206f76657277656967687420616e642077617320706c6163656420696e20746865206f7665727765696768742071756575652e484f76657277656967687453657276696365640801406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800012c7765696768745f75736564240118576569676874000504e0446f776e77617264206d6573736167652066726f6d20746865206f766572776569676874207175657565207761732065786563757465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909410208306672616d655f73797374656d14506861736500010c384170706c7945787472696e73696304001c010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e0002000045020000022c004902000002c8004d0208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6eb901014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d655102016473705f72756e74696d653a3a52756e74696d65537472696e6700005102000005020055020c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b30011c5665633c75383e000014684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e002823203c7765696768743e202d20604f283129602c23203c2f7765696768743e387365745f686561705f7061676573040114706167657310010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646530011c5665633c75383e0002306453657420746865206e65772072756e74696d6520636f64652e002823203c7765696768743e31012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f64656045012d20312063616c6c20746f206063616e5f7365745f636f6465603a20604f28532960202863616c6c73206073705f696f3a3a6d6973633a3a72756e74696d655f76657273696f6e60207768696368206973342020657870656e73697665292e842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e4d0154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652c206275742067656e6572616c6c7920746869732069732076657279b8657870656e736976652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e2c23203c2f7765696768743e5c7365745f636f64655f776974686f75745f636865636b73040110636f646530011c5665633c75383e000324190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e002823203c7765696768743e8c2d20604f2843296020776865726520604360206c656e677468206f662060636f646560842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e550154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652e2057652077696c6c207472656174207468697320617320612066756c6c48626c6f636b2e2023203c2f7765696768743e2c7365745f73746f726167650401146974656d73590201345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973610201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697830010c4b657900011c7375626b6579731c010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b30011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e59020000025d02005d02000004083030006102000002300065020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2401185765696768740001246d61785f626c6f636b2401185765696768740001247065725f636c617373690201845065724469737061746368436c6173733c57656967687473506572436c6173733e000069020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454016d02000c01186e6f726d616c6d0201045400012c6f7065726174696f6e616c6d020104540001246d616e6461746f72796d0201045400006d020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632401185765696768740001346d61785f65787472696e736963710201384f7074696f6e3c5765696768743e0001246d61785f746f74616c710201384f7074696f6e3c5765696768743e0001207265736572766564710201384f7074696f6e3c5765696768743e0000710204184f7074696f6e04045401240108104e6f6e6500000010536f6d65040024000001000075020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178790201545065724469737061746368436c6173733c7533323e000079020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454011c000c01186e6f726d616c1c01045400012c6f7065726174696f6e616c1c0104540001246d616e6461746f72791c01045400007d02082873705f776569676874733c52756e74696d65446257656967687400000801107265616410010c753634000114777269746510010c75363400008102082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d655102013452756e74696d65537472696e67000124696d706c5f6e616d655102013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e1c010c753332000130737065635f76657273696f6e1c010c753332000130696d706c5f76657273696f6e1c010c753332000110617069738502011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e1c010c75333200013473746174655f76657273696f6e080108753800008502040c436f77040454018902000400890200000089020000028d02008d0200000408f5011c0091020c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c65749502101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454012c045300000400450201185665633c543e000099020c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77280124543a3a4d6f6d656e7400004054536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e002823203c7765696768743e31012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e9d020000040c0018a400a1020c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e6465780000489841737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e00dc5061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00f02d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e602d204f6e652072657365727665206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d902d204442205765696768743a203120526561642f577269746520284163636f756e7473292c23203c2f7765696768743e207472616e7366657208010c6e6577a50201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e6465780001505d0141737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6eb86973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0025012d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e642d204f6e65207472616e73666572206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743ae02020202d2052656164733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e742028726563697069656e7429e42020202d205772697465733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e742028726563697069656e74292c23203c2f7765696768743e1066726565040114696e64657810013c543a3a4163636f756e74496e646578000248944672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e005d015061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e000d012d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e0084456d6974732060496e646578467265656460206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e602d204f6e652072657365727665206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d902d204442205765696768743a203120526561642f577269746520284163636f756e7473292c23203c2f7765696768743e38666f7263655f7472616e736665720c010c6e6577a50201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65a40110626f6f6c0003545501466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c7265616479e868656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00a42d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e41012d2060667265657a65603a2069662073657420746f206074727565602c2077696c6c20667265657a652074686520696e64657820736f2069742063616e6e6f74206265207472616e736665727265642e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e782d20557020746f206f6e652072657365727665206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743af42020202d2052656164733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e7420286f726967696e616c206f776e657229f82020202d205772697465733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e7420286f726967696e616c206f776e6572292c23203c2f7765696768743e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004484101467265657a6520616e20696e64657820736f2069742077696c6c20616c7761797320706f696e7420746f207468652073656e646572206163636f756e742e205468697320636f6e73756d657320746865206465706f7369742e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d757374206861766520616c6e6f6e2d66726f7a656e206163636f756e742060696e646578602e00ac2d2060696e646578603a2074686520696e64657820746f2062652066726f7a656e20696e20706c6163652e0088456d6974732060496e64657846726f7a656e60206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e702d20557020746f206f6e6520736c617368206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d902d204442205765696768743a203120526561642f577269746520284163636f756e7473292c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea5020c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801ac011408496404000001244163636f756e74496400000014496e6465780400a90201304163636f756e74496e6465780001000c526177040030011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400110101205b75383b2032305d00040000a902000006ac00ad020c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b102101c73705f636f72651c626f756e646564407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401b502045300000400bd0201185665633c543e0000b502083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c01086964f50101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73b902011c526561736f6e730000b902083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000bd02000002b50200c102101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401c502045300000400c90201185665633c543e0000c502083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e74696669657201f5011c42616c616e63650118000801086964f5010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000c902000002c50200cd020c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e7366657208011064657374a50201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c5010128543a3a42616c616e6365000064d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e002823203c7765696768743e61012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e842d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d11012d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e2c23203c2f7765696768743e2c7365745f62616c616e63650c010c77686fa50201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565c5010128543a3a42616c616e63650001306e65775f7265736572766564c5010128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f75726365a50201504163636f756e7449644c6f6f6b75704f663c543e00011064657374a50201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c5010128543a3a42616c616e63650002184d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e2823203c7765696768743e4d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e2c23203c2f7765696768743e4c7472616e736665725f6b6565705f616c69766508011064657374a50201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c5010128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374a50201504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665a40110626f6f6c00044405015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fc820206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e2023203c7765696768743e39012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e302020233c2f7765696768743e3c666f7263655f756e7265736572766508010c77686fa50201504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed1020c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909d5020c3473705f61726974686d657469632c66697865645f706f696e742446697865645531323800000400180110753132380000d902086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000dd02101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401e102045300000400e90201185665633c543e0000e102104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c696300000400e502013c737232353531393a3a5075626c69630000e5020c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000e902000002e10200ed02084873705f636f6e73656e7375735f736c6f747310536c6f740000040010010c7536340000f1020000020000f502000002f90200f9020000040800fd0200fd0208447370697269746e65745f72756e74696d652c53657373696f6e4b657973000004011061757261e10201c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000001030000021c000503000004080903300009030c1c73705f636f72651863727970746f244b65795479706549640000040040011c5b75383b20345d00000d030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b657973fd02011c543a3a4b65797300011470726f6f6630011c5665633c75383e000038e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e002823203c7765696768743e11012d20436f6d706c65786974793a20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642eec2d20446252656164733a20606f726967696e206163636f756e74602c2060543a3a56616c696461746f7249644f66602c20604e6578744b65797360a02d2044625772697465733a20606f726967696e206163636f756e74602c20604e6578744b65797360802d204462526561647320706572206b65792069643a20604b65794f776e657260842d20446257726974657320706572206b65792069643a20604b65794f776e6572602c23203c2f7765696768743e2870757267655f6b657973000140c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e002823203c7765696768743e61012d20436f6d706c65786974793a20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468a420206f662060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642eec2d20446252656164733a2060543a3a56616c696461746f7249644f66602c20604e6578744b657973602c20606f726967696e206163636f756e7460a02d2044625772697465733a20604e6578744b657973602c20606f726967696e206163636f756e7460842d20446257726974657320706572206b65792069643a20604b65794f776e6572602c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e11030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e15030c4470617261636861696e5f7374616b696e6714747970657324526f756e64496e666f042c426c6f636b4e756d6265720110000c011c63757272656e741c013053657373696f6e496e646578000114666972737410012c426c6f636b4e756d6265720001186c656e67746810012c426c6f636b4e756d626572000019030c4470617261636861696e5f7374616b696e671474797065734444656c65676174696f6e436f756e7465720000080114726f756e641c013053657373696f6e496e64657800011c636f756e7465721c010c75333200001d030c4470617261636861696e5f7374616b696e67147479706573145374616b6508244163636f756e74496401001c42616c616e63650118000801146f776e65720001244163636f756e744964000118616d6f756e7418011c42616c616e6365000021030c4470617261636861696e5f7374616b696e671474797065732443616e6469646174650c244163636f756e74496401001c42616c616e63650118644d617844656c656761746f727350657243616e646964617465000014010869640001244163636f756e7449640001147374616b6518011c42616c616e636500012864656c656761746f727325030101014f7264657265645365743c5374616b653c4163636f756e7449642c2042616c616e63653e2c204d617844656c656761746f727350657243616e6469646174653e000114746f74616c18011c42616c616e63650001187374617475733103013c43616e646964617465537461747573000025030c4470617261636861696e5f7374616b696e670c736574284f726465726564536574080454011d0304530000040029030140426f756e6465645665633c542c20533e00002903101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454011d030453000004002d0301185665633c543e00002d030000021d030031030c4470617261636861696e5f7374616b696e671474797065733c43616e646964617465537461747573000108184163746976650000001c4c656176696e6704001c013053657373696f6e496e6465780001000035030c4470617261636861696e5f7374616b696e6714747970657328546f74616c5374616b65041c42616c616e6365011800080124636f6c6c61746f727318011c42616c616e636500012864656c656761746f727318011c42616c616e6365000039030c4470617261636861696e5f7374616b696e670c736574284f726465726564536574080454011d030453000004003d030140426f756e6465645665633c542c20533e00003d03101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454011d030453000004002d0301185665633c543e000041030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e34496e666c6174696f6e496e666f0000080120636f6c6c61746f724503012c5374616b696e67496e666f00012464656c656761746f724503012c5374616b696e67496e666f000045030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e2c5374616b696e67496e666f00000801206d61785f726174658c012c5065727175696e74696c6c00012c7265776172645f726174654903012852657761726452617465000049030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e28526577617264526174650000080118616e6e75616c8c012c5065727175696e74696c6c0001247065725f626c6f636b8c012c5065727175696e74696c6c00004d03101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601180453000004005103013842547265654d61703c4b2c20563e00005103042042547265654d617008044b011004560118000400550300000055030000025903005903000004081018005d030c4470617261636861696e5f7374616b696e671870616c6c65741043616c6c0404540001543c666f7263655f6e65775f726f756e64000018d0466f7263657320746865207374617274206f6620746865206e657720726f756e6420696e20746865206e65787420626c6f636b2e00a0546865206e657720726f756e642077696c6c20626520656e666f7263656420766961203c54206173a453686f756c64456e6453657373696f6e3c5f3e3e3a3a73686f756c645f656e645f73657373696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e347365745f696e666c6174696f6e100170636f6c6c61746f725f6d61785f726174655f70657263656e746167658c012c5065727175696e74696c6c000198636f6c6c61746f725f616e6e75616c5f7265776172645f726174655f70657263656e746167658c012c5065727175696e74696c6c00017464656c656761746f725f6d61785f726174655f70657263656e746167658c012c5065727175696e74696c6c00019c64656c656761746f725f616e6e75616c5f7265776172645f726174655f70657263656e746167658c012c5065727175696e74696c6c00013cf05365742074686520616e6e75616c20696e666c6174696f6e207261746520746f20646572697665207065722d726f756e6420696e666c6174696f6e2e00110154686520696e666c6174696f6e2064657461696c732061726520636f6e736964657265642076616c69642069662074686520616e6e75616c207265776172642072617465f0697320617070726f78696d6174656c7920746865207065722d626c6f636b207265776172642072617465206d756c7469706c69656420627920746865ac657374696d617465642a20746f74616c206e756d626572206f6620626c6f636b732070657220796561722e00cc54686520657374696d61746564206176657261676520626c6f636b2074696d65206973207477656c7665207365636f6e64732e000d014e4f54453a204974657261746573206f7665722043616e646964617465506f6f6c20616e6420666f7220656163682063616e646964617465206f766572207468656972090164656c656761746f727320746f207570646174652074686569722072657761726473206265666f72652074686520726577617264207261746573206368616e67652ee04e6565647320746f20626520696d70726f766564207768656e207363616c696e6720757020604d6178546f7043616e64696461746573602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0068456d6974732060526f756e64496e666c6174696f6e536574602e6c7365745f6d61785f73656c65637465645f63616e6469646174657304010c6e65771c010c75333200022c090153657420746865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e6469646174657320746861742063616e2062652073656c6563746564a861742074686520626567696e6e696e67206f6620656163682076616c69646174696f6e20726f756e642e00e84368616e67657320617265206e6f74206170706c69656420756e74696c20746865207374617274206f6620746865206e65787420726f756e642e000d01546865206e65772076616c7565206d75737420626520686967686572207468616e20746865206d696e696d756d20616c6c6f7765642061732073657420696e207468655c70616c6c6574277320636f6e66696775726174696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0084456d69747320604d617853656c656374656443616e64696461746573536574602e507365745f626c6f636b735f7065725f726f756e6404010c6e6577100138543a3a426c6f636b4e756d62657200032cd453657420746865206e756d626572206f6620626c6f636b7320656163682076616c69646174696f6e20726f756e64206c617374732e000901496620746865206e65772076616c7565206973206c657373207468616e20746865206c656e677468206f66207468652063757272656e7420726f756e642c20746865050173797374656d2077696c6c20696d6d6564696174656c79206d6f766520746f20746865206e65787420726f756e6420696e20746865206e65787420626c6f636b2e000d01546865206e65772076616c7565206d75737420626520686967686572207468616e20746865206d696e696d756d20616c6c6f7765642061732073657420696e207468655c70616c6c6574277320636f6e66696775726174696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0068456d6974732060426c6f636b73506572526f756e64536574602e5c7365745f6d61785f63616e6469646174655f7374616b6504010c6e657718013042616c616e63654f663c543e000418110153657420746865206d6178696d616c20616d6f756e74206120636f6c6c61746f722063616e207374616b652e204578697374696e67207374616b657320617265206e6f74206368616e6765642e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0084456d69747320604d617843616e6469646174655374616b654368616e676564602e58666f7263655f72656d6f76655f63616e646964617465040120636f6c6c61746f72a502018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650005300101466f726365646c792072656d6f766573206120636f6c6c61746f722063616e6469646174652066726f6d2074686520546f7043616e6469646174657320616e64e4636c6561727320616c6c206173736f6369617465642073746f7261676520666f72207468652063616e64696461746520616e642074686569722c64656c656761746f72732e00fc507265706172657320756e7374616b696e67206f66207468652063616e6469646174657320616e642074686569722064656c656761746f7273207374616b65f077686963682063616e20626520756e6c6f636b6564207669612060756e6c6f636b5f756e7374616b6564602061667465722077616974696e6720617409016c6561737420605374616b654475726174696f6e60206d616e7920626c6f636b732e20416c736f20696e6372656d656e7473207265776172647320666f722074686578636f6c6c61746f7220616e642074686569722064656c656761746f72732e00d4496e6372656d656e74732072657761726473206f662063616e64696461746520616e642074686569722064656c656761746f72732e0064456d697473206043616e64696461746552656d6f766564602e3c6a6f696e5f63616e646964617465730401147374616b6518013042616c616e63654f663c543e000644904a6f696e2074686520736574206f6620636f6c6c61746f722063616e646964617465732e00f8496e20746865206e65787420626c6f636b732c2069662074686520636f6c6c61746f722063616e6469646174652068617320656e6f7567682066756e6473fc7374616b656420746f20626520696e636c7564656420696e20616e79206f662074686520746f7020604d617853656c656374656443616e64696461746573600d01706f736974696f6e732c2069742077696c6c20626520696e636c7564656420696e2074686520736574206f6620706f74656e7469616c20617574686f72732074686174050177696c6c2062652073656c656374656420627920746865207374616b652d77656967687465642072616e646f6d2073656c656374696f6e2066756e6374696f6e2e00fc546865207374616b65642066756e6473206f6620746865206e657720636f6c6c61746f722063616e6469646174652061726520616464656420746f2074686568746f74616c207374616b65206f66207468652073797374656d2e00110154686520746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e2074686520616c6c6f7765642072616e67652061738873657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e00f0546865206469737061746368206f726967696e206d757374206e6f7420626520616c72656164792070617274206f662074686520636f6c6c61746f729463616e64696461746573206e6f72206f66207468652064656c656761746f7273207365742e0084456d69747320604a6f696e6564436f6c6c61746f7243616e64696461746573602e54696e69745f6c656176655f63616e6469646174657300076cc05265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e0005014f6e20737563636573732c20746865206163636f756e7420697320696d6d6564696174656c792072656d6f7665642066726f6d207468652063616e6469646174651101706f6f6c20746f2070726576656e742073656c656374696f6e206173206120636f6c6c61746f7220696e206675747572652076616c69646174696f6e20726f756e64732cd862757420756e7374616b696e67206f66207468652066756e6473206973206578656375746564207769746820612064656c6179206f665c605374616b654475726174696f6e6020626c6f636b732e00ac546865206578697420726571756573742063616e2062652072657665727365642062792063616c6c696e67686063616e63656c5f6c656176655f63616e64696461746573602e00f454686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e204974206973110175706461746564206576656e2074686f756768207468652066756e6473206f66207468652063616e6469646174652077686f207369676e616c656420746f206c65617665fc617265207374696c6c206c6f636b656420666f7220604578697444656c617960202b20605374616b654475726174696f6e60206d6f726520626c6f636b732e000d014e4f544520313a2055706f6e207374617274696e672061206e65772073657373696f6e5f6920696e20606e65775f73657373696f6e602c207468652063757272656e741101746f702063616e64696461746573206172652073656c656374656420746f20626520626c6f636b20617574686f727320666f722073657373696f6e5f692b312e20416e7905016368616e67657320746f2074686520746f702063616e64696461746573206166746572776172647320646f206e6f74206566666563742074686520736574206f6660617574686f727320666f722073657373696f6e5f692b312ed8546875732c207765206861766520746f206d616b652073757265206e6f6e65206f6620746865736520636f6c6c61746f72732063616ebc6c65617665206265666f72652073657373696f6e5f692b3120656e64732062792064656c6179696e67207468656972846578697420666f7220604578697444656c617960206d616e7920626c6f636b732e00f04e4f544520323a20576520646f206e6f7420696e6372656d656e74207265776172647320696e20746869732065787472696e73696320617320746865110163616e64696461746520636f756c64207374696c6c20617574686f7220626c6f636b732c20616e64207468757320626520656c696769626c6520746f2072656365697665ac726577617264732c20756e74696c2074686520656e64206f6620746865206e6578742073657373696f6e2e0078456d6974732060436f6c6c61746f725363686564756c656445786974602e60657865637574655f6c656176655f63616e64696461746573040120636f6c6c61746f72a502018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500084405014578656375746520746865206e6574776f726b2065786974206f6620612063616e6469646174652077686f2072657175657374656420746f206c65617665206174f06c65617374206045786974517565756544656c61796020726f756e64732061676f2e20507265706172657320756e7374616b696e67206f6620746865fc63616e6469646174657320616e642074686569722064656c656761746f7273207374616b652077686963682063616e20626520756e6c6f636b656420766961f460756e6c6f636b5f756e7374616b6564602061667465722077616974696e67206174206c6561737420605374616b654475726174696f6e60206d616e791c626c6f636b732e00c05265717569726573207468652063616e64696461746520746f2070726576696f75736c7920686176652063616c6c65646060696e69745f6c656176655f63616e64696461746573602e00ac546865206578697420726571756573742063616e2062652072657665727365642062792063616c6c696e67686063616e63656c5f6c656176655f63616e64696461746573602e00fc4e4f54453a204974657261746573206f7665722043616e646964617465506f6f6c20666f7220656163682063616e646964617465206f766572207468656972fc64656c656761746f727320746f2073657420726577617264732e204e6565647320746f20626520696d70726f766564207768656e207363616c696e672075704c604d6178546f7043616e64696461746573602e0054456d6974732060436f6c6c61746f724c656674602e5c63616e63656c5f6c656176655f63616e646964617465730009200501526576657274207468652070726576696f75736c79207265717565737465642065786974206f6620746865206e6574776f726b206f66206120636f6c6c61746f720d0163616e6469646174652e204f6e20737563636573732c2061646473206261636b207468652063616e64696461746520746f2074686520546f7043616e6469646174657368616e6420757064617465732074686520636f6c6c61746f72732e00c05265717569726573207468652063616e64696461746520746f2070726576696f75736c7920686176652063616c6c65646060696e69745f6c656176655f63616e64696461746573602e0074456d6974732060436f6c6c61746f7243616e63656c656445786974602e5063616e6469646174655f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000a30a85374616b65206d6f72652066756e647320666f72206120636f6c6c61746f722063616e6469646174652e0001014966206e6f7420696e2074686520736574206f662063616e646964617465732c207374616b696e6720656e6f7567682066756e647320616c6c6f77732074686505016163636f756e7420746f20626520616464656420746f2069742e20546865206c617267657220616d6f756e74206f662066756e64732c2074686520686967686572dc6368616e63657320746f2062652073656c65637465642061732074686520617574686f72206f6620746865206e65787420626c6f636b2e00dc54686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e006c456d6974732060436f6c6c61746f725374616b65644d6f7265602e5063616e6469646174655f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000b3ca85374616b65206c6573732066756e647320666f72206120636f6c6c61746f722063616e6469646174652e000501496620746865206e657720616d6f756e74206f66207374616b65642066756e64206973206e6f74206c6172676520656e6f7567682c20746865206163636f756e74fc636f756c642062652072656d6f7665642066726f6d2074686520736574206f6620636f6c6c61746f722063616e6469646174657320616e64206e6f74206265a4636f6e7369646572656420666f7220617574686f72696e6720746865206e65787420626c6f636b732e00dc54686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e000d0154686520756e7374616b65642066756e647320617265206e6f742072656c656173656420696d6d6564696174656c7920746f20746865206163636f756e742c20627574d0746865792077696c6c20626520617661696c61626c6520616674657220605374616b654475726174696f6e6020626c6f636b732e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e006c456d6974732060436f6c6c61746f725374616b65644c657373602e3c6a6f696e5f64656c656761746f7273080120636f6c6c61746f72a502018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e7418013042616c616e63654f663c543e000c5805014a6f696e2074686520736574206f662064656c656761746f72732062792064656c65676174696e6720746f206120636f6c6c61746f722063616e6469646174652e000501546865206163636f756e7420746861742077616e747320746f2064656c65676174652063616e6e6f742062652070617274206f662074686520636f6c6c61746f725c63616e64696461746573207365742061732077656c6c2e0009015468652063616c6c6572206d757374205f6e6f745f206861766520612064656c65676174696f6e2e20496620746861742069732074686520636173652c2074686579b061726520726571756972656420746f2066697273742072656d6f7665207468652064656c65676174696f6e2e00110154686520616d6f756e74207374616b6564206d757374206265206c6172676572207468616e20746865206d696e696d756d20726571756972656420746f206265636f6d65c4612064656c656761746f722061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e0009014173206f6e6c7920604d617844656c656761746f7273506572436f6c6c61746f72602061726520616c6c6f77656420746f2064656c6567617465206120676976656e0501636f6c6c61746f722c2074686520616d6f756e74207374616b6564206d757374206265206c6172676572207468616e20746865206c6f77657374206f6e6520696e01017468652063757272656e7420736574206f662064656c656761746f7220666f7220746865206f7065726174696f6e20746f206265206d65616e696e6766756c2e00090154686520636f6c6c61746f72277320746f74616c207374616b652061732077656c6c206173207468652070616c6c6574277320746f74616c207374616b652061726558696e63726561736564206163636f7264696e676c792e004c456d697473206044656c65676174696f6e602ebc456d697473206044656c65676174696f6e5265706c6163656460206966207468652063616e64696461746520686173f8604d617844656c656761746f7273506572436f6c6c61746f7260206d616e792064656c65676174696f6e732062757420746869732064656c656761746f72fc7374616b6564206d6f7265207468616e206f6e65206f6620746865206f746865722064656c656761746f7273206f6620746869732063616e6469646174652e406c656176655f64656c656761746f7273000d400d014c656176652074686520736574206f662064656c656761746f727320616e642c20627920696d706c69636174696f6e2c207265766f6b6520746865206f6e676f696e672c64656c65676174696f6e2e001101416c6c207374616b65642066756e647320617265206e6f7420756e6c6f636b656420696d6d6564696174656c792c2062757420746865792061726520616464656420746f0101746865207175657565206f662070656e64696e6720756e7374616b696e672c20616e642077696c6c206566666563746976656c792062652072656c65617365640901616674657220605374616b654475726174696f6e6020626c6f636b732066726f6d20746865206d6f6d656e74207468652064656c656761746f72206c65617665732e000d0154686973206f7065726174696f6e20726564756365732074686520746f74616c207374616b65206f66207468652070616c6c65742061732077656c6c2061732074686509017374616b6573206f6620616c6c20636f6c6c61746f7273207468617420776572652064656c6567617465642c20706f74656e7469616c6c7920616666656374696e6705017468656972206368616e63657320746f20626520696e636c7564656420696e2074686520736574206f662063616e6469646174657320696e20746865206e6578741c726f756e64732e0005014175746f6d61746963616c6c7920696e6372656d656e74732074686520616363756d756c617465642072657761726473206f6620746865206f726967696e206f665c7468652063757272656e742064656c65676174696f6e2e0058456d697473206044656c656761746f724c656674602e5064656c656761746f725f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000e18dc496e63726561736520746865207374616b6520666f722064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e0001014966206e6f7420696e2074686520736574206f662063616e646964617465732c207374616b696e6720656e6f7567682066756e647320616c6c6f77732074686594636f6c6c61746f722063616e64696461746520746f20626520616464656420746f2069742e0070456d697473206044656c656761746f725374616b65644d6f7265602e5064656c656761746f725f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000f40d452656475636520746865207374616b6520666f722064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e000901496620746865206e657720616d6f756e74206f66207374616b65642066756e64206973206e6f74206c6172676520656e6f7567682c2074686520636f6c6c61746f72fc636f756c642062652072656d6f7665642066726f6d2074686520736574206f6620636f6c6c61746f722063616e6469646174657320616e64206e6f74206265a4636f6e7369646572656420666f7220617574686f72696e6720746865206e65787420626c6f636b732e00090154686520756e7374616b65642066756e647320617265206e6f742072656c6561736520696d6d6564696174656c7920746f20746865206163636f756e742c20627574d0746865792077696c6c20626520617661696c61626c6520616674657220605374616b654475726174696f6e6020626c6f636b732e0001015468652072656d61696e696e67207374616b65642066756e6473206d757374207374696c6c206265206c6172676572207468616e20746865206d696e696d756df0726571756972656420627920746869732070616c6c657420746f206d61696e7461696e2074686520737461747573206f662064656c656761746f722e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e0070456d697473206044656c656761746f725374616b65644c657373602e3c756e6c6f636b5f756e7374616b6564040118746172676574a502018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365001028f4556e6c6f636b20616c6c2070726576696f75736c79207374616b65642066756e6473207468617420617265206e6f7720617661696c61626c6520666f720501756e6c6f636b696e6720627920746865206f726967696e206163636f756e7420616674657220605374616b654475726174696f6e6020626c6f636b73206861766520656c61707365642e00fc5765696768743a204f285529207768657265205520697320746865206e756d626572206f66206c6f636b656420756e7374616b696e6720726571756573747380626f756e64656420627920604d6178556e7374616b655265717565737473602eac2d2052656164733a205b4f726967696e204163636f756e745d2c20556e7374616b696e672c204c6f636b73682d205772697465733a20556e7374616b696e672c204c6f636b73e82d204b696c6c733a20556e7374616b696e672026204c6f636b73206966206e6f2062616c616e6365206973206c6f636b656420616e796d6f72652c23203c2f7765696768743e34636c61696d5f7265776172647300113cd4436c61696d20626c6f636b20617574686f72696e67207265776172647320666f72207468652074617267657420616464726573732e00090152657175697265732060526577617264736020746f20626520736574206265666f726568616e642c2077686963682063616e2062792074726967676572656420627970616e79206f662074686520666f6c6c6f77696e67206f7074696f6e73e82a2043616c6c696e6720696e6372656d656e745f7b636f6c6c61746f722c2064656c656761746f727d5f72657761726473202861637469766529782a20416c746572696e6720796f7572207374616b65202861637469766529b02a204c656176696e6720746865206e6574776f726b206173206120636f6c6c61746f72202861637469766529bc2a205265766f6b696e6720612064656c65676174696f6e20617320612064656c656761746f7220286163746976652909012a204265696e6720612064656c656761746f722077686f736520636f6c6c61746f72206c65667420746865206e6574776f726b2c20616c7465726564207468656972a020207374616b65206f7220696e6372656d656e746564207265776172647320287061737369766529000501546865206469737061746368206f726967696e2063616e20626520616e79207369676e6564206f6e652c20652e672e2c20616e796f6e652063616e20636c61696d2c666f7220616e796f6e652e0044456d69747320605265776172646564602e68696e6372656d656e745f636f6c6c61746f725f72657761726473001218b44163746976656c7920696e6372656d656e74207468652072657761726473206f66206120636f6c6c61746f722e0005015468652073616d652065666665637420697320747269676765726564206279206368616e67696e6720746865207374616b65206f72206c656176696e6720746865206e6574776f726b2e009c546865206469737061746368206f726967696e206d757374206265206120636f6c6c61746f722e6c696e6372656d656e745f64656c656761746f725f72657761726473001318b84163746976656c7920696e6372656d656e74207468652072657761726473206f6620612064656c656761746f722e00f85468652073616d652065666665637420697320747269676765726564206279206368616e67696e6720746865207374616b65206f72207265766f6b696e673064656c65676174696f6e732e00a0546865206469737061746368206f726967696e206d75737420626520612064656c656761746f722e7c657865637574655f7363686564756c65645f7265776172645f6368616e67650014280d0145786563757465732074686520616e6e75616c20726564756374696f6e206f66207468652072657761726420726174657320666f7220636f6c6c61746f727320616e642c64656c656761746f72732e00dc4d6f72656f7665722c2073657473207265776172647320666f7220616c6c20636f6c6c61746f727320616e642064656c656761746f72737c6265666f72652061646a757374696e672074686520696e666c6174696f6e2e000d01546865206469737061746368206f726967696e2063616e20626520616e79207369676e6564206f6e652062656361757365207765206261696c2069662063616c6c656428746f6f206561726c792e0068456d6974732060526f756e64496e666c6174696f6e536574602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e61030c4470617261636861696e5f7374616b696e671870616c6c6574144572726f7204045400017c4444656c656761746f724e6f74466f756e64000004b8546865206163636f756e74206973206e6f742070617274206f66207468652064656c656761746f7273207365742e4443616e6469646174654e6f74466f756e64000104dc546865206163636f756e74206973206e6f742070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3c44656c656761746f72457869737473000204c8546865206163636f756e7420697320616c72656164792070617274206f66207468652064656c656761746f7273207365742e3c43616e646964617465457869737473000304ec546865206163636f756e7420697320616c72656164792070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3056616c5374616b655a65726f000404e4546865206163636f756e7420747269656420746f207374616b65206d6f7265206f72206c657373207769746820616d6f756e74207a65726f2e4056616c5374616b6542656c6f774d696e0005080d01546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f20626520616464656420746f2074686520636f6c6c61746f723c63616e64696461746573207365742e4056616c5374616b6541626f76654d61780006041101546865206163636f756e742068617320616c7265616479207374616b656420746865206d6178696d756d20616d6f756e74206f662066756e647320706f737369626c652e4844656c65676174696f6e42656c6f774d696e000708f8546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f2064656c6567617465206120636f6c6c61746f722863616e6469646174652e38416c72656164794c656176696e670008080d0154686520636f6c6c61746f722063616e6469646174652068617320616c72656164792074726967676572207468652070726f6365737320746f206c65617665207468656c736574206f6620636f6c6c61746f722063616e646964617465732e284e6f744c656176696e67000908f454686520636f6c6c61746f722063616e6469646174652077616e74656420746f20657865637574652074686520657869742062757420686173206e6f74f472657175657374656420746f206c65617665206265666f72652062792063616c6c696e672060696e69745f6c656176655f63616e64696461746573602e3843616e6e6f744c65617665596574000a08dc54686520636f6c6c61746f7220747269656420746f206c65617665206265666f72652077616974696e67206174206c6561737420666f72746045786974517565756544656c617960206d616e7920726f756e64732e6443616e6e6f744a6f696e4265666f7265556e6c6f636b696e67000b10f8546865206163636f756e742068617320612066756c6c206c697374206f6620756e7374616b696e6720726571756573747320616e64206e6565647320746ffc756e6c6f636b206174206c65617374206f6e65206f66207468657365206265666f7265206265696e672061626c6520746f206a6f696e2028616761696e292edc4e4f54453a2043616e206f6e6c792068617070656e20696620746865206163636f756e742077617320612063616e646964617465206f72f464656c656761746f72206265666f726520616e642065697468657220676f74206b69636b6564206f722065786974656420766f6c756e746172696c792e44416c726561647944656c65676174696e67000c04e4546865206163636f756e7420697320616c72656164792064656c65676174696e672074686520636f6c6c61746f722063616e6469646174652e404e6f7459657444656c65676174696e67000d080901546865206163636f756e7420686173206e6f742064656c65676174656420616e7920636f6c6c61746f722063616e646964617465207965742c2068656e6365206974806973206e6f7420696e2074686520736574206f662064656c656761746f72732e6c44656c65676174696f6e73506572526f756e644578636565646564000e1811015468652064656c656761746f722068617320657863656564656420746865206e756d626572206f662064656c65676174696f6e732070657220726f756e6420776869636894697320657175616c20746f204d617844656c656761746f7273506572436f6c6c61746f722e000901546869732070726f746563747320616761696e73742061747461636b7320696e20776869636820612064656c656761746f722063616e2072652d64656c6567617465010166726f6d206120636f6c6c61746f722077686f2068617320616c726561647920617574686f726564206120626c6f636b2c20746f20616e6f74686572206f6e6570776869636820686173206e6f7420696e207468697320726f756e642e44546f6f4d616e7944656c656761746f7273000f14010154686520636f6c6c61746f722063616e6469646174652068617320616c7265616479207265616368656420746865206d6178696d756d206e756d626572206f662c64656c656761746f72732e00050154686973206572726f722069732067656e65726174656420696e20636173652061206e65772064656c65676174696f6e207265717565737420646f6573206e6f74f47374616b6520656e6f7567682066756e647320746f207265706c61636520736f6d65206f74686572206578697374696e672064656c65676174696f6e2e60546f6f466577436f6c6c61746f7243616e64696461746573001008110154686520736574206f6620636f6c6c61746f722063616e6469646174657320776f756c642066616c6c2062656c6f7720746865207265717569726564206d696e696d756d5469662074686520636f6c6c61746f72206c6566742e5043616e6e6f745374616b6549664c656176696e67001108f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66010163616e6469646174657320616e642063616e6e6f7420706572666f726d20616e79206f7468657220616374696f6e7320696e20746865206d65616e74696d652e5c43616e6e6f7444656c656761746549664c656176696e67001208f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66ac63616e6469646174657320616e6420746875732063616e6e6f742062652064656c65676174656420746f2e804d6178436f6c6c61746f727350657244656c656761746f72457863656564656400130811015468652064656c656761746f722068617320616c72656164792064656c65676174656420746865206d6178696d756d206e756d626572206f662063616e6469646174657320616c6c6f7765642e60416c726561647944656c656761746564436f6c6c61746f72001408ec5468652064656c656761746f722068617320616c72656164792070726576696f75736c792064656c6567617465642074686520636f6c6c61746f722863616e6469646174652e4844656c65676174696f6e4e6f74466f756e64001504f854686520676976656e2064656c65676174696f6e20646f6573206e6f7420657869737420696e2074686520736574206f662064656c65676174696f6e732e24556e646572666c6f77001608050154686520636f6c6c61746f722064656c6567617465206f72207468652064656c656761746f7220697320747279696e6720746f20756e2d7374616b65206d6f72658066756e64732074686174206172652063757272656e746c79207374616b65642e4443616e6e6f7453657441626f76654d6178001708d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738061626f766520746865206d6178696d756d2076616c756520616c6c6f7765642e4443616e6e6f7453657442656c6f774d696e001808d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738062656c6f7720746865206d696e696d756d2076616c756520616c6c6f7765642e3c496e76616c69645363686564756c65001904dc416e20696e76616c696420696e666c6174696f6e20636f6e66696775726174696f6e20697320747279696e6720746f206265207365742e3c4e6f4d6f7265556e7374616b696e67001a08c4546865207374616b696e6720726577617264206265696e6720756e6c6f636b656420646f6573206e6f742065786973742e7c4d617820756e6c6f636b696e6720726571756573747320726561636865642e20546f6f4561726c79001b0801015468652072657761726420726174652063616e6e6f742062652061646a75737465642079657420617320616e20656e74697265207965617220686173206e6f741c7061737365642e345374616b654e6f74466f756e64001c04d850726f7669646564207374616b65642076616c7565206973207a65726f2e2053686f756c64206e65766572206265207468726f776e2e40556e7374616b696e674973456d707479001d049443616e6e6f7420756e6c6f636b207768656e20556e7374616b656420697320656d7074792e3c526577617264734e6f74466f756e64001e047843616e6e6f7420636c61696d207265776172647320696620656d7074792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909096503101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454016903045300000400710301185665633c543e00006903084470616c6c65745f617574686f727368697038556e636c65456e7472794974656d0c2c426c6f636b4e756d62657201101048617368012c18417574686f72010001083c496e636c7573696f6e486569676874040010012c426c6f636b4e756d62657200000014556e636c6508002c01104861736800006d0301384f7074696f6e3c417574686f723e000100006d0304184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000710300000269030075030c4470616c6c65745f617574686f72736869701870616c6c65741043616c6c040454000104287365745f756e636c65730401286e65775f756e636c6573790301385665633c543a3a4865616465723e0000046050726f76696465206120736574206f6620756e636c65732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e79030000027d03007d03102873705f72756e74696d651c67656e65726963186865616465721848656164657208184e756d626572011010486173680181030014012c706172656e745f686173682c0130486173683a3a4f75747075740001186e756d6265722801184e756d62657200012873746174655f726f6f742c0130486173683a3a4f757470757400013c65787472696e736963735f726f6f742c0130486173683a3a4f7574707574000118646967657374340118446967657374000081030c2873705f72756e74696d65187472616974732c426c616b6554776f3235360000000085030c4470616c6c65745f617574686f72736869701870616c6c6574144572726f7204045400011c48496e76616c6964556e636c65506172656e740000048854686520756e636c6520706172656e74206e6f7420696e2074686520636861696e2e40556e636c6573416c726561647953657400010480556e636c657320616c72656164792073657420696e2074686520626c6f636b2e34546f6f4d616e79556e636c657300020440546f6f206d616e7920756e636c65732e3047656e65736973556e636c650003045454686520756e636c652069732067656e657369732e30546f6f48696768556e636c650004047c54686520756e636c6520697320746f6f206869676820696e20636861696e2e50556e636c65416c7265616479496e636c756465640005047854686520756e636c6520697320616c726561647920696e636c756465642e204f6c64556e636c65000604b454686520756e636c652069736e277420726563656e7420656e6f75676820746f20626520696e636c756465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909098903101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454018d03045300000400590501185665633c543e00008d030000040c1c91030000910310346672616d655f737570706f72741874726169747324707265696d616765731c426f756e646564040454019503010c184c6567616379040110686173682c01104861736800000018496e6c696e65040055050134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173682c01104861736800010c6c656e1c010c75333200020000950308447370697269746e65745f72756e74696d652c52756e74696d6543616c6c0001781853797374656d0400550201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400990201b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c496e64696365730400a10201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e0005002042616c616e6365730400cd0201b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0006001c53657373696f6e04000d0301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0016004050617261636861696e5374616b696e6704005d0301d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e5374616b696e672c2052756e74696d653e00150028417574686f72736869700400750301bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c417574686f72736869702c2052756e74696d653e0014002444656d6f63726163790400990301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e001e001c436f756e63696c0400a50301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e001f0048546563686e6963616c436f6d6d69747465650400b10301dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465652c2052756e74696d653e0020004c546563686e6963616c4d656d626572736869700400b50301e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c4d656d626572736869702c2052756e74696d653e0022002054726561737572790400b90301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e0023001c5574696c6974790400bd0301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e0028001c56657374696e670400e50301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e002900245363686564756c65720400ed0301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e002a001450726f78790400f50301a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002b0020507265696d6167650400fd0301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e002c0038546970734d656d626572736869700400010401cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970734d656d626572736869702c2052756e74696d653e002d0010546970730400050401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970732c2052756e74696d653e002e001443747970650400090401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43747970652c2052756e74696d653e003d002c4174746573746174696f6e04000d0401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4174746573746174696f6e2c2052756e74696d653e003e002844656c65676174696f6e0400210401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656c65676174696f6e2c2052756e74696d653e003f000c44696404003d0401a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469642c2052756e74696d653e004000244469644c6f6f6b75700400910401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469644c6f6f6b75702c2052756e74696d653e00430024576562334e616d65730400a10401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c576562334e616d65732c2052756e74696d653e004400445075626c696343726564656e7469616c730400a50401d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5075626c696343726564656e7469616c732c2052756e74696d653e0045003c50617261636861696e53797374656d0400b50401d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0050002458636d7051756575650400e90401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e0052002c506f6c6b61646f7458636d0400ed0401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e00530020446d7051756575650400510501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446d7051756575652c2052756e74696d653e0055000099030c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c0404540001481c70726f706f736508012070726f706f73616c91030140426f756e64656443616c6c4f663c543e00011476616c7565c501013042616c616e63654f663c543e0000249c50726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e001501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737480686176652066756e647320746f20636f76657220746865206465706f7369742e00d42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e15012d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e0044456d697473206050726f706f736564602e187365636f6e6404012070726f706f73616cb901012450726f70496e646578000118b45369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e64657211016d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e00c82d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e10766f74650801247265665f696e646578b901013c5265666572656e64756d496e646578000110766f74659801644163636f756e74566f74653c42616c616e63654f663c543e3e00021c3101566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3bb86f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00dc2d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e842d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e40656d657267656e63795f63616e63656c0401247265665f696e6465781c013c5265666572656e64756d496e6465780003204d015363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d652c7265666572656e64756d2e00f8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e00d02d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e003c5765696768743a20604f283129602e4065787465726e616c5f70726f706f736504012070726f706f73616c91030140426f756e64656443616c6c4f663c543e0004182d015363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c2c7265666572656e64756d2e00e8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616c91030140426f756e64656443616c6c4f663c543e00052c55015363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c655c616e2065787465726e616c207265666572656e64756d2e00ec546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f283129606065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616c91030140426f756e64656443616c6c4f663c543e00062c45015363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f807363686564756c6520616e2065787465726e616c207265666572656e64756d2e00e8546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f2831296028666173745f747261636b0c013470726f706f73616c5f686173682c011048323536000134766f74696e675f706572696f64100138543a3a426c6f636b4e756d62657200011464656c6179100138543a3a426c6f636b4e756d6265720007404d015363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c65646101696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e65e8627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e00d0546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e00f42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e5d012d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f88094d75737420626520616c776179732067726561746572207468616e207a65726f2e350109466f72206046617374547261636b4f726967696e60206d75737420626520657175616c206f722067726561746572207468616e206046617374547261636b566f74696e67506572696f64602e51012d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265b82020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e0040456d697473206053746172746564602e00385765696768743a20604f28312960347665746f5f65787465726e616c04013470726f706f73616c5f686173682c011048323536000824b85665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e00d8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e002d012d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e003c456d69747320605665746f6564602e00fc5765696768743a20604f2856202b206c6f6728562929602077686572652056206973206e756d626572206f6620606578697374696e67207665746f657273604463616e63656c5f7265666572656e64756d0401247265665f696e646578b901013c5265666572656e64756d496e64657800091c5052656d6f76652061207265666572656e64756d2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e00d42d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e004423205765696768743a20604f283129602e2064656c65676174650c0108746fa50201504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6e9d030128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a50390144656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e742e0055015468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f7220746865c874696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a7420202d2062652064656c65676174696e6720616c72656164793b206f72590120202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f7665642f636f6e736f6c69646174656494202020207468726f7567682060726561705f766f746560206f722060756e766f746560292e0045012d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e55012d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e20746865410120206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e61012d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d757374206e6f74b420206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e0048456d697473206044656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e28756e64656c6567617465000b30cc556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e742e005d01546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f64dc6f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e20776173206973737565642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062655463757272656e746c792064656c65676174696e672e0050456d6974732060556e64656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e58636c6561725f7075626c69635f70726f706f73616c73000c1470436c6561727320616c6c207075626c69632070726f706f73616c732e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e003c5765696768743a20604f283129602e18756e6c6f636b040118746172676574a50201504163636f756e7449644c6f6f6b75704f663c543e000d1ca0556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00b82d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e00bc5765696768743a20604f2852296020776974682052206e756d626572206f6620766f7465206f66207461726765742e2c72656d6f76655f766f7465040114696e6465781c013c5265666572656e64756d496e646578000e6c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e000c49663a882d20746865207265666572656e64756d207761732063616e63656c6c65642c206f727c2d20746865207265666572656e64756d206973206f6e676f696e672c206f72902d20746865207265666572656e64756d2068617320656e64656420737563682074686174fc20202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f72d420202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f728420202d20746865206163636f756e74206d61646520612073706c697420766f74655d012e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72655866756e6473206265696e6720617661696c61626c652e00a849662c20686f77657665722c20746865207265666572656e64756d2068617320656e64656420616e643aec2d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64dc2d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64bc2d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f76657259012e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c766559012a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756de46f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e004901546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465887265676973746572656420666f72207265666572656e64756d2060696e646578602e00f42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e4472656d6f76655f6f746865725f766f7465080118746172676574a50201504163636f756e7449644c6f6f6b75704f663c543e000114696e6465781c013c5265666572656e64756d496e646578000f3c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e004d0149662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f2d016072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c5501656974686572206265636175736520746865207265666572656e64756d207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f737420746865207265666572656e64756d206f7298626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e004d012d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f725420207265666572656e64756d2060696e646578602ef42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e24626c61636b6c69737408013470726f706f73616c5f686173682c01104832353600013c6d617962655f7265665f696e646578a103015c4f7074696f6e3c5265666572656e64756d496e6465783e00103c45015065726d616e656e746c7920706c61636520612070726f706f73616c20696e746f2074686520626c61636b6c6973742e20546869732070726576656e74732069742066726f6d2065766572206265696e673c70726f706f73656420616761696e2e00510149662063616c6c6564206f6e206120717565756564207075626c6963206f722065787465726e616c2070726f706f73616c2c207468656e20746869732077696c6c20726573756c7420696e206974206265696e67510172656d6f7665642e2049662074686520607265665f696e6465786020737570706c69656420697320616e20616374697665207265666572656e64756d2077697468207468652070726f706f73616c20686173682c687468656e2069742077696c6c2062652063616e63656c6c65642e00ec546865206469737061746368206f726967696e206f6620746869732063616c6c206d7573742062652060426c61636b6c6973744f726967696e602e00f82d206070726f706f73616c5f68617368603a205468652070726f706f73616c206861736820746f20626c61636b6c697374207065726d616e656e746c792e45012d20607265665f696e646578603a20416e206f6e676f696e67207265666572656e64756d2077686f73652068617368206973206070726f706f73616c5f68617368602c2077686963682077696c6c2062652863616e63656c6c65642e0041015765696768743a20604f28702960202874686f756768206173207468697320697320616e20686967682d70726976696c6567652064697370617463682c20776520617373756d65206974206861732061502020726561736f6e61626c652076616c7565292e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578b901012450726f70496e64657800111c4852656d6f766520612070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c50726f706f73616c4f726967696e602e00d02d206070726f705f696e646578603a2054686520696e646578206f66207468652070726f706f73616c20746f2063616e63656c2e00e45765696768743a20604f28702960207768657265206070203d205075626c696350726f70733a3a3c543e3a3a6465636f64655f6c656e282960042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e9d030c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000a10304184f7074696f6e040454011c0108104e6f6e6500000010536f6d6504001c0000010000a5030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c08045400044900011c2c7365745f6d656d626572730c012c6e65775f6d656d62657273f10201445665633c543a3a4163636f756e7449643e0001147072696d656d0301504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e741c012c4d656d626572436f756e74000080805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e0054526571756972657320726f6f74206f726967696e2e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e002823203c7765696768743e24232320576569676874502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e64656429142d2044423a510120202d20312073746f72616765206d75746174696f6e2028636f64656320604f284d296020726561642c20604f284e29602077726974652920666f722072656164696e6720616e642077726974696e67207468652c202020206d656d62657273ec20202d20312073746f7261676520726561642028636f64656320604f285029602920666f722072656164696e67207468652070726f706f73616c73450120202d206050602073746f72616765206d75746174696f6e732028636f64656320604f284d29602920666f72207570646174696e672074686520766f74657320666f7220656163682070726f706f73616c5d0120202d20312073746f726167652077726974652028636f64656320604f283129602920666f722064656c6574696e6720746865206f6c6420607072696d656020616e642073657474696e6720746865206e6577206f6e652c23203c2f7765696768743e1c6578656375746508012070726f706f73616c9503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64b901010c75333200012cf0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e002823203c7765696768743e2423232057656967687455012d20604f284d202b2050296020776865726520604d60206d656d626572732d636f756e742028636f64652d626f756e6465642920616e642060506020636f6d706c6578697479206f66206469737061746368696e673020206070726f706f73616c60d42d2044423a203120726561642028636f64656320604f284d296029202b20444220616363657373206f66206070726f706f73616c60242d2031206576656e742c23203c2f7765696768743e1c70726f706f73650c01247468726573686f6c64b901012c4d656d626572436f756e7400012070726f706f73616c9503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64b901010c75333200026cf84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e002823203c7765696768743e24232320576569676874ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d20326029142d2044423ab420202d20312073746f726167652072656164206069735f6d656d626572602028636f64656320604f284d296029f020202d20312073746f726167652072656164206050726f706f73616c4f663a3a636f6e7461696e735f6b6579602028636f64656320604f2831296029a820202d20444220616363657373657320696e666c75656e63656420627920607468726573686f6c64603a0901202020202d204549544845522073746f7261676520616363657373657320646f6e65206279206070726f706f73616c602028607468726573686f6c64203c20326029b8202020202d204f522070726f706f73616c20696e73657274696f6e2028607468726573686f6c64203c3d20326029d82020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c73602028636f64656320604f285032296029e42020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c436f756e74602028636f64656320604f2831296029cc2020202020202d20312073746f72616765207772697465206050726f706f73616c4f66602028636f64656320604f2842296029bc2020202020202d20312073746f726167652077726974652060566f74696e67602028636f64656320604f284d2960292c20202d2031206576656e742c23203c2f7765696768743e10766f74650c012070726f706f73616c2c011c543a3a48617368000114696e646578b901013450726f706f73616c496e64657800011c617070726f7665a40110626f6f6c00033cf041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e2823203c7765696768743e2423232057656967687409012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429142d2044423aac20202d20312073746f72616765207265616420604d656d62657273602028636f64656320604f284d296029b820202d20312073746f72616765206d75746174696f6e2060566f74696e67602028636f64656320604f284d296029242d2031206576656e742c23203c2f7765696768743e40636c6f73655f6f6c645f77656967687410013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578b901013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e64a90301244f6c645765696768740001306c656e6774685f626f756e64b901010c7533320004804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f686173682c011c543a3a486173680005385901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e002823203c7765696768743edc436f6d706c65786974793a204f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c73284442205765696768743a482a2052656164733a2050726f706f73616c739c2a205772697465733a20566f74696e672c2050726f706f73616c732c2050726f706f73616c4f662c23203c2f7765696768743e14636c6f736510013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578b901013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64b901010c7533320006804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea903000006ad0300ad03082873705f77656967687473244f6c645765696768740000040010010c7536340000b1030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c08045400044900011c2c7365745f6d656d626572730c012c6e65775f6d656d62657273f10201445665633c543a3a4163636f756e7449643e0001147072696d656d0301504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e741c012c4d656d626572436f756e74000080805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e0054526571756972657320726f6f74206f726967696e2e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e002823203c7765696768743e24232320576569676874502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e64656429142d2044423a510120202d20312073746f72616765206d75746174696f6e2028636f64656320604f284d296020726561642c20604f284e29602077726974652920666f722072656164696e6720616e642077726974696e67207468652c202020206d656d62657273ec20202d20312073746f7261676520726561642028636f64656320604f285029602920666f722072656164696e67207468652070726f706f73616c73450120202d206050602073746f72616765206d75746174696f6e732028636f64656320604f284d29602920666f72207570646174696e672074686520766f74657320666f7220656163682070726f706f73616c5d0120202d20312073746f726167652077726974652028636f64656320604f283129602920666f722064656c6574696e6720746865206f6c6420607072696d656020616e642073657474696e6720746865206e6577206f6e652c23203c2f7765696768743e1c6578656375746508012070726f706f73616c9503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64b901010c75333200012cf0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e002823203c7765696768743e2423232057656967687455012d20604f284d202b2050296020776865726520604d60206d656d626572732d636f756e742028636f64652d626f756e6465642920616e642060506020636f6d706c6578697479206f66206469737061746368696e673020206070726f706f73616c60d42d2044423a203120726561642028636f64656320604f284d296029202b20444220616363657373206f66206070726f706f73616c60242d2031206576656e742c23203c2f7765696768743e1c70726f706f73650c01247468726573686f6c64b901012c4d656d626572436f756e7400012070726f706f73616c9503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64b901010c75333200026cf84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e002823203c7765696768743e24232320576569676874ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d20326029142d2044423ab420202d20312073746f726167652072656164206069735f6d656d626572602028636f64656320604f284d296029f020202d20312073746f726167652072656164206050726f706f73616c4f663a3a636f6e7461696e735f6b6579602028636f64656320604f2831296029a820202d20444220616363657373657320696e666c75656e63656420627920607468726573686f6c64603a0901202020202d204549544845522073746f7261676520616363657373657320646f6e65206279206070726f706f73616c602028607468726573686f6c64203c20326029b8202020202d204f522070726f706f73616c20696e73657274696f6e2028607468726573686f6c64203c3d20326029d82020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c73602028636f64656320604f285032296029e42020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c436f756e74602028636f64656320604f2831296029cc2020202020202d20312073746f72616765207772697465206050726f706f73616c4f66602028636f64656320604f2842296029bc2020202020202d20312073746f726167652077726974652060566f74696e67602028636f64656320604f284d2960292c20202d2031206576656e742c23203c2f7765696768743e10766f74650c012070726f706f73616c2c011c543a3a48617368000114696e646578b901013450726f706f73616c496e64657800011c617070726f7665a40110626f6f6c00033cf041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e2823203c7765696768743e2423232057656967687409012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429142d2044423aac20202d20312073746f72616765207265616420604d656d62657273602028636f64656320604f284d296029b820202d20312073746f72616765206d75746174696f6e2060566f74696e67602028636f64656320604f284d296029242d2031206576656e742c23203c2f7765696768743e40636c6f73655f6f6c645f77656967687410013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578b901013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e64a90301244f6c645765696768740001306c656e6774685f626f756e64b901010c7533320004804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f686173682c011c543a3a486173680005385901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e002823203c7765696768743edc436f6d706c65786974793a204f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c73284442205765696768743a482a2052656164733a2050726f706f73616c739c2a205772697465733a20566f74696e672c2050726f706f73616c732c2050726f706f73616c4f662c23203c2f7765696768743e14636c6f736510013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578b901013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64b901010c7533320006804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb5030c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fa50201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686fa50201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665a50201504163636f756e7449644c6f6f6b75704f663c543e00010c616464a50201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d62657273f10201445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577a50201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686fa50201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb9030c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001143470726f706f73655f7370656e6408011476616c7565c501013c42616c616e63654f663c542c20493e00012c62656e6566696369617279a50201504163636f756e7449644c6f6f6b75704f663c543e000024290150757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c75653101697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e6365207468655070726f706f73616c20697320617761726465642e002823203c7765696768743e482d20436f6d706c65786974793a204f283129b02d20446252656164733a206050726f706f73616c436f756e74602c20606f726967696e206163636f756e7460e82d2044625772697465733a206050726f706f73616c436f756e74602c206050726f706f73616c73602c20606f726967696e206163636f756e74602c23203c2f7765696768743e3c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964b901013450726f706f73616c496e646578000124f852656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e002823203c7765696768743e482d20436f6d706c65786974793a204f283129cc2d20446252656164733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e7460d02d2044625772697465733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e74602c23203c2f7765696768743e40617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964b901013450726f706f73616c496e6465780002285901417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e6566696369617279a8616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e00ac4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a417070726f76654f726967696e602e002823203c7765696768743e4c2d20436f6d706c65786974793a204f2831292e8c2d20446252656164733a206050726f706f73616c73602c2060417070726f76616c7360582d20446257726974653a2060417070726f76616c73602c23203c2f7765696768743e147370656e64080118616d6f756e74c501013c42616c616e63654f663c542c20493e00012c62656e6566696369617279a50201504163636f756e7449644c6f6f6b75704f663c543e000320b850726f706f736520616e6420617070726f76652061207370656e64206f662074726561737572792066756e64732e004d012d20606f726967696e603a204d75737420626520605370656e644f726967696e60207769746820746865206053756363657373602076616c7565206265696e67206174206c656173742060616d6f756e74602e41012d2060616d6f756e74603a2054686520616d6f756e7420746f206265207472616e736665727265642066726f6d2074686520747265617375727920746f20746865206062656e6566696369617279602ee82d206062656e6566696369617279603a205468652064657374696e6174696f6e206163636f756e7420666f7220746865207472616e736665722e0045014e4f54453a20466f72207265636f72642d6b656570696e6720707572706f7365732c207468652070726f706f736572206973206465656d656420746f206265206571756976616c656e7420746f207468653062656e65666963696172792e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964b901013450726f706f73616c496e64657800043c2d01466f72636520612070726576696f75736c7920617070726f7665642070726f706f73616c20746f2062652072656d6f7665642066726f6d2074686520617070726f76616c2071756575652ec0546865206f726967696e616c206465706f7369742077696c6c206e6f206c6f6e6765722062652072657475726e65642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602ea02d206070726f706f73616c5f6964603a2054686520696e646578206f6620612070726f706f73616c002823203c7765696768743edc2d20436f6d706c65786974793a204f2841292077686572652060416020697320746865206e756d626572206f6620617070726f76616c73882d20446220726561647320616e64207772697465733a2060417070726f76616c73602c23203c2f7765696768743e001c4572726f72733a61012d206050726f706f73616c4e6f74417070726f766564603a20546865206070726f706f73616c5f69646020737570706c69656420776173206e6f7420666f756e6420696e2074686520617070726f76616c2071756575652c5101692e652e2c207468652070726f706f73616c20686173206e6f74206265656e20617070726f7665642e205468697320636f756c6420616c736f206d65616e207468652070726f706f73616c20646f6573206e6f745901657869737420616c746f6765746865722c2074687573207468657265206973206e6f2077617920697420776f756c642068617665206265656e20617070726f76656420696e2074686520666972737420706c6163652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ebd030c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c73c103017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00004c7c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e646578d8010c75313600011063616c6c9503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c73c103017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000238ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e2c64697370617463685f617308012461735f6f726967696ec5030154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c9503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000328c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292e1d012d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b20543a3a576569676874496e666f3a3a64697370617463685f617328292e2c23203c2f7765696768743e2c666f7263655f626174636804011463616c6c73c103017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004387c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e2c776974685f77656967687408011063616c6c9503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874240118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec103000002950300c50308447370697269746e65745f72756e74696d65304f726967696e43616c6c657200011c1873797374656d0400c90301746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c0400cd0301010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400d10301010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020000c4469640400d50301506469643a3a4f726967696e3c52756e74696d653e0040002c506f6c6b61646f7458636d0400d903014870616c6c65745f78636d3a3a4f726967696e0053002843756d756c757358636d0400dd03016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e00540010566f69640400e10301110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f696400060000c9030c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e6500020000cd03084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d6265727308001c012c4d656d626572436f756e7400001c012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d00020000d103084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d6265727308001c012c4d656d626572436f756e7400001c012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d00020000d5030c0c646964186f726967696e304469645261774f726967696e08344469644964656e7469666965720100244163636f756e74496401000008010869640001344469644964656e7469666965720001247375626d69747465720001244163636f756e7449640000d9030c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400ad0101344d756c74694c6f636174696f6e00000020526573706f6e73650400ad0101344d756c74694c6f636174696f6e00010000dd030c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e0400a101011850617261496400010000e103081c73705f636f726510566f696400010000e5030c3870616c6c65745f76657374696e671870616c6c65741043616c6c0404540001141076657374000034b8556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e005d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20322052656164732c203220577269746573f8202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745dfc202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745d2c23203c2f7765696768743e28766573745f6f74686572040118746172676574a50201504163636f756e7449644c6f6f6b75704f663c543e00013cb8556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051012d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20332052656164732c203320577269746573f0202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e74f4202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c23203c2f7765696768743e3c7665737465645f7472616e73666572080118746172676574a50201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65e90301a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00024464437265617465206120766573746564207472616e736665722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d2060746172676574603a20546865206163636f756e7420726563656976696e6720746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20332052656164732c2033205772697465733901202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d3d01202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d2c23203c2f7765696768743e54666f7263655f7665737465645f7472616e736665720c0118736f75726365a50201504163636f756e7449644c6f6f6b75704f663c543e000118746172676574a50201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65e90301a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00034860466f726365206120766573746564207472616e736665722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00e82d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e11012d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20342052656164732c2034205772697465733101202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e743501202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e742c23203c2f7765696768743e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e6465781c010c75333200013c7363686564756c65325f696e6465781c010c7533320004545d014d657267652074776f2076657374696e67207363686564756c657320746f6765746865722c206372656174696e672061206e65772076657374696e67207363686564756c65207468617420756e6c6f636b73206f7665725501746865206869676865737420706f737369626c6520737461727420616e6420656e6420626c6f636b732e20496620626f7468207363686564756c6573206861766520616c7265616479207374617274656420746865590163757272656e7420626c6f636b2077696c6c206265207573656420617320746865207363686564756c652073746172743b207769746820746865206361766561742074686174206966206f6e65207363686564756c655d0169732066696e6973686564206279207468652063757272656e7420626c6f636b2c20746865206f746865722077696c6c206265207472656174656420617320746865206e6577206d6572676564207363686564756c652c2c756e6d6f6469666965642e00f84e4f54453a20496620607363686564756c65315f696e646578203d3d207363686564756c65325f696e6465786020746869732069732061206e6f2d6f702e41014e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b207072696f7220746f206d657267696e672e61014e4f54453a20496620626f7468207363686564756c6573206861766520656e646564206279207468652063757272656e7420626c6f636b2c206e6f206e6577207363686564756c652077696c6c206265206372656174656464616e6420626f74682077696c6c2062652072656d6f7665642e006c4d6572676564207363686564756c6520617474726962757465733a35012d20607374617274696e675f626c6f636b603a20604d4158287363686564756c65312e7374617274696e675f626c6f636b2c207363686564756c6564322e7374617274696e675f626c6f636b2c48202063757272656e745f626c6f636b29602e21012d2060656e64696e675f626c6f636b603a20604d4158287363686564756c65312e656e64696e675f626c6f636b2c207363686564756c65322e656e64696e675f626c6f636b29602e59012d20606c6f636b6564603a20607363686564756c65312e6c6f636b65645f61742863757272656e745f626c6f636b29202b207363686564756c65322e6c6f636b65645f61742863757272656e745f626c6f636b29602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00e82d20607363686564756c65315f696e646578603a20696e646578206f6620746865206669727374207363686564756c6520746f206d657267652eec2d20607363686564756c65325f696e646578603a20696e646578206f6620746865207365636f6e64207363686564756c6520746f206d657267652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee9030c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d6265720000ed030c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963f10301a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c9503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963f10301a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c9503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963f10301a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c9503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000414a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e002823203c7765696768743e5453616d65206173205b607363686564756c65605d2e2c23203c2f7765696768743e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963f10301a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c9503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000514905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e002823203c7765696768743ec453616d65206173205b607363686564756c655f6e616d6564605d2853656c663a3a7363686564756c655f6e616d6564292e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef10304184f7074696f6e04045401c80108104e6f6e6500000010536f6d650400c80000010000f5030c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616ca50201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065f90301504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c9503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00002c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465a50201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d6265720001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465a50201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d626572000114696e646578d8010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572a50201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d40130543a3a50726f787954797065000114696e646578d8010c753136000118686569676874280138543a3a426c6f636b4e756d6265720001246578745f696e646578b901010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616ca50201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616ca50201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465a50201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465a50201504163636f756e7449644c6f6f6b75704f663c543e0001107265616ca50201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065f90301504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c9503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef90304184f7074696f6e04045401d40108104e6f6e6500000010536f6d650400d40000010000fd030c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657330011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d616765040110686173682c011c543a3a48617368000118dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e00fc496620606c656e602069732070726f76696465642c207468656e2069742077696c6c2062652061206d7563682063686561706572206f7065726174696f6e2e0001012d206068617368603a205468652068617368206f662074686520707265696d61676520746f2062652072656d6f7665642066726f6d207468652073746f72652eb82d20606c656e603a20546865206c656e677468206f662074686520707265696d616765206f66206068617368602e40726571756573745f707265696d616765040110686173682c011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d616765040110686173682c011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e01040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fa50201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686fa50201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665a50201504163636f756e7449644c6f6f6b75704f663c543e00010c616464a50201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d62657273f10201445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577a50201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686fa50201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e05040c2c70616c6c65745f746970731870616c6c65741043616c6c080454000449000118387265706f72745f617765736f6d65080118726561736f6e30011c5665633c75383e00010c77686fa50201504163636f756e7449644c6f6f6b75704f663c543e00004c59015265706f727420736f6d657468696e672060726561736f6e60207468617420646573657276657320612074697020616e6420636c61696d20616e79206576656e7475616c207468652066696e6465722773206665652e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051015061796d656e743a20605469705265706f72744465706f73697442617365602077696c6c2062652072657365727665642066726f6d20746865206f726967696e206163636f756e742c2061732077656c6c206173bc60446174614465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e0074456d69747320604e657754697060206966207375636365737366756c2e002823203c7765696768743ec82d20436f6d706c65786974793a20604f2852296020776865726520605260206c656e677468206f662060726561736f6e602e9020202d20656e636f64696e6720616e642068617368696e67206f662027726561736f6e27702d20446252656164733a2060526561736f6e73602c20605469707360742d2044625772697465733a2060526561736f6e73602c206054697073602c23203c2f7765696768743e2c726574726163745f746970040110686173682c011c543a3a4861736800014c5101526574726163742061207072696f72207469702d7265706f72742066726f6d20607265706f72745f617765736f6d65602c20616e642063616e63656c207468652070726f63657373206f662074697070696e672e00dc4966207375636365737366756c2c20746865206f726967696e616c206465706f7369742077696c6c20626520756e72657365727665642e004d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642074686520746970206964656e7469666965642062792060686173686041016d7573742068617665206265656e207265706f7274656420627920746865207369676e696e67206163636f756e74207468726f75676820607265706f72745f617765736f6d65602028616e64206e6f744c7468726f75676820607469705f6e657760292e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e008c456d697473206054697052657472616374656460206966207375636365737366756c2e002823203c7765696768743e502d20436f6d706c65786974793a20604f28312960d820202d20446570656e6473206f6e20746865206c656e677468206f662060543a3a48617368602077686963682069732066697865642e8c2d20446252656164733a206054697073602c20606f726967696e206163636f756e7460bc2d2044625772697465733a2060526561736f6e73602c206054697073602c20606f726967696e206163636f756e74602c23203c2f7765696768743e1c7469705f6e65770c0118726561736f6e30011c5665633c75383e00010c77686fa50201504163636f756e7449644c6f6f6b75704f663c543e0001247469705f76616c7565c501013c42616c616e63654f663c542c20493e000258f04769766520612074697020666f7220736f6d657468696e67206e65773b206e6f2066696e6465722773206665652077696c6c2062652074616b656e2e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e0074456d69747320604e657754697060206966207375636365737366756c2e002823203c7765696768743e51012d20436f6d706c65786974793a20604f2852202b2054296020776865726520605260206c656e677468206f662060726561736f6e602c2060546020697320746865206e756d626572206f6620746970706572732e5d0120202d20604f285429603a206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792d012020202060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f66442020202060543a3a54697070657273602ee020202d20604f285229603a2068617368696e6720616e6420656e636f64696e67206f6620726561736f6e206f66206c656e677468206052607c2d20446252656164733a206054697070657273602c2060526561736f6e7360742d2044625772697465733a2060526561736f6e73602c206054697073602c23203c2f7765696768743e0c746970080110686173682c011c543a3a486173680001247469705f76616c7565c501013c42616c616e63654f663c542c20493e000360b04465636c6172652061207469702076616c756520666f7220616e20616c72656164792d6f70656e207469702e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f66207468652068617368206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e65666963696172793420206163636f756e742049442e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e006101456d6974732060546970436c6f73696e676020696620746865207468726573686f6c64206f66207469707065727320686173206265656e207265616368656420616e642074686520636f756e74646f776e20706572696f643068617320737461727465642e002823203c7765696768743e61012d20436f6d706c65786974793a20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e6774682d0120206054602c20696e736572742074697020616e6420636865636b20636c6f73696e672c20605460206973206368617267656420617320757070657220626f756e6420676976656e2062795d01202060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e005d01202041637475616c6c792077656967687420636f756c64206265206c6f77657220617320697420646570656e6473206f6e20686f77206d616e7920746970732061726520696e20604f70656e5469706020627574206974d02020697320776569676874656420617320696620616c6d6f73742066756c6c20692e65206f66206c656e6774682060542d31602e702d20446252656164733a206054697070657273602c20605469707360482d2044625772697465733a206054697073602c23203c2f7765696768743e24636c6f73655f746970040110686173682c011c543a3a486173680004405c436c6f736520616e64207061796f75742061207469702e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00150154686520746970206964656e74696669656420627920606861736860206d75737420686176652066696e69736865642069747320636f756e74646f776e20706572696f642e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e002823203c7765696768743e61012d20436f6d706c65786974793a20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e677468510120206054602e20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f7374c02020646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602ea82d20446252656164733a206054697073602c206054697070657273602c20607469702066696e64657260d82d2044625772697465733a2060526561736f6e73602c206054697073602c206054697070657273602c20607469702066696e646572602c23203c2f7765696768743e24736c6173685f746970040110686173682c011c543a3a486173680005309452656d6f766520616e6420736c61736820616e20616c72656164792d6f70656e207469702e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e00f44173206120726573756c742c207468652066696e64657220697320736c617368656420616e6420746865206465706f7369747320617265206c6f73742e0084456d6974732060546970536c617368656460206966207375636365737366756c2e002823203c7765696768743efc2020605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e010120205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e09040c1463747970651870616c6c65741043616c6c0404540001080c616464040114637479706530011c5665633c75383e00003009014372656174652061206e65772043547970652066726f6d2074686520676976656e20756e69717565204354797065206861736820616e64206173736f6369617465735069742077697468206974732063726561746f722e00dc412043547970652077697468207468652073616d652068617368206d757374206e6f742062652073746f726564206f6e20636861696e2e0054456d6974732060435479706543726561746564602e002823203c7765696768743e305765696768743a204f283129602d2052656164733a204374797065732c2042616c616e6365642d205772697465733a204374797065732c2042616c616e63652c23203c2f7765696768743e407365745f626c6f636b5f6e756d62657208012863747970655f686173682c01384374797065486173684f663c543e000130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e00010ce853657420746865206372656174696f6e20626c6f636b206e756d62657220666f72206120676976656e2043547970652c20696620666f756e642e0054456d6974732060435479706555706461746564602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e0d040c2c6174746573746174696f6e1870616c6c65741043616c6c0404540001180c6164640c0128636c61696d5f686173682c0138436c61696d486173684f663c543e00012863747970655f686173682c01384374797065486173684f663c543e000134617574686f72697a6174696f6e110401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000054644372656174652061206e6577206174746573746174696f6e2e00f85468652061747465737465722063616e206f7074696f6e616c6c792070726f766964652061207265666572656e636520746f20616e206578697374696e67090164656c65676174696f6e20746861742077696c6c20626520736176656420616c6f6e67207769746820746865206174746573746174696f6e20697473656c6620696e8c74686520666f726d206f6620616e2061747465737465642064656c65676174696f6e2e00ec546865207265666572656e6365642043547970652068617368206d75737420616c72656164792062652070726573656e74206f6e20636861696e2e000901496620616e206f7074696f6e616c2064656c65676174696f6e2069642069732070726f76696465642c20746865206469737061746368206f726967696e206d757374e8626520746865206f776e6572206f66207468652064656c65676174696f6e2e204f74686572776973652c20697420636f756c6420626520616e79546044656c65676174696f6e456e746974794964602e006c456d69747320604174746573746174696f6e43726561746564602e002823203c7765696768743e305765696768743a204f283129b82d2052656164733a205b4f726967696e204163636f756e745d2c2043747970652c204174746573746174696f6e73e42d2052656164732069662064656c65676174696f6e2069642069732070726f76696465643a2044656c65676174696f6e732c20526f6f74732c5c202044656c6567617465644174746573746174696f6e73bc2d205772697465733a204174746573746174696f6e732c202844656c6567617465644174746573746174696f6e73292c23203c2f7765696768743e187265766f6b65080128636c61696d5f686173682c0138436c61696d486173684f663c543e000134617574686f72697a6174696f6e110401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0001447c5265766f6b6520616e206578697374696e67206174746573746174696f6e2e00fc546865207265766f6b6572206d75737420626520656974686572207468652063726561746f72206f6620746865206174746573746174696f6e206265696e6709017265766f6b6564206f7220616e20656e74697479207468617420696e207468652064656c65676174696f6e207472656520697320616e20616e636573746f72206f6609017468652061747465737465722c20692e652e2c2069742077617320656974686572207468652064656c656761746f72206f6620746865206174746573746572206f7250616e20616e636573746f722074686572656f662e006c456d69747320604174746573746174696f6e5265766f6b6564602e002823203c7765696768743e0d015765696768743a204f285029207768657265205020697320746865206e756d626572206f6620737465707320726571756972656420746f2076657269667920746861740901746865206469737061746368204f726967696e20636f6e74726f6c73207468652064656c65676174696f6e20656e7469746c656420746f207265766f6b6520746865c86174746573746174696f6e2e20497420697320626f756e64656420627920606d61785f706172656e745f636865636b73602ee82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2064656c65676174696f6e3a3a526f6f7473d82d205265616473207065722064656c65676174696f6e207374657020503a2064656c65676174696f6e3a3a44656c65676174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e1872656d6f7665080128636c61696d5f686173682c0138436c61696d486173684f663c543e000134617574686f72697a6174696f6e110401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0002445852656d6f766520616e206174746573746174696f6e2e00f8546865206f726967696e206d75737420626520656974686572207468652063726561746f72206f6620746865206174746573746174696f6e206f7220616e0d01656e7469747920776869636820697320616e20616e636573746f72206f662074686520617474657374657220696e207468652064656c65676174696f6e20747265652c0101692e652e2c2069742077617320656974686572207468652064656c656761746f72206f6620746865206174746573746572206f7220616e20616e636573746f722074686572656f662e006c456d69747320604174746573746174696f6e52656d6f766564602e002823203c7765696768743e0d015765696768743a204f285029207768657265205020697320746865206e756d626572206f6620737465707320726571756972656420746f2076657269667920746861740901746865206469737061746368204f726967696e20636f6e74726f6c73207468652064656c65676174696f6e20656e7469746c656420746f207265766f6b6520746865c86174746573746174696f6e2e20497420697320626f756e64656420627920606d61785f706172656e745f636865636b73602ee82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2064656c65676174696f6e3a3a526f6f7473d82d205265616473207065722064656c65676174696f6e207374657020503a2064656c65676174696f6e3a3a44656c65676174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e3c7265636c61696d5f6465706f736974040128636c61696d5f686173682c0138436c61696d486173684f663c543e000324d05265636c61696d20612073746f72616765206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e0064456d69747320604465706f7369745265636c61696d6564602e002823203c7765696768743e305765696768743a204f283129f82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e6572040128636c61696d5f686173682c0138436c61696d486173684f663c543e00041c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00ec546865207375626a656374206f66207468652063616c6c206d757374206265207468652061747465737465722077686f206973737565732074686509016174746573746174696f6e2e205468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f736974040128636c61696d5f686173682c0138436c61696d486173684f663c543e00050cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e110404184f7074696f6e0404540115040108104e6f6e6500000010536f6d6504001504000001000015040c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c50616c6c6574417574686f72697a65043044656c65676174696f6e416301190401042844656c65676174696f6e04001904013044656c65676174696f6e41630000000019040c2864656c65676174696f6e386163636573735f636f6e74726f6c3044656c65676174696f6e4163040454011d040008013c7375626a6563745f6e6f64655f69642c015444656c65676174696f6e4e6f646549644f663c543e0001286d61785f636865636b731c010c75333200001d0408447370697269746e65745f72756e74696d651c52756e74696d650000000021040c2864656c65676174696f6e1870616c6c65741043616c6c04045400011c406372656174655f686965726172636879080130726f6f745f6e6f64655f69642c015444656c65676174696f6e4e6f646549644f663c543e00012863747970655f686173682c01384374797065486173684f663c543e00006401014372656174652061206e65772064656c65676174696f6e20726f6f74206173736f6369617465642077697468206120676976656e20435479706520686173682e00f8546865206e657720726f6f742077696c6c20616c6c6f772061206e65772074727573742068696572617263687920746f2062652063726561746564206279a0616464696e67206368696c6472656e2064656c65676174696f6e7320746f2074686520726f6f742e000d015468657265206d757374206265206e6f2064656c65676174696f6e2077697468207468652073616d652049442073746f726564206f6e20636861696e2c207768696c65fc7468657265206d75737420626520616c7265616479206120435479706520776974682074686520676976656e20686173682073746f72656420696e207468653443547970652070616c6c65742e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e000d015265717569726573207468652073656e646572206f6620746865207472616e73616374696f6e20746f206861766520612072657365727661626c652062616c616e6365886f66206174206c6561737420604465706f73697460206d616e7920746f6b656e732e0050456d6974732060526f6f7443726561746564602e002823203c7765696768743e305765696768743a204f283129a02d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c204354797065733c2d205772697465733a20526f6f74732c23203c2f7765696768743e386164645f64656c65676174696f6e14013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e000124706172656e745f69642c015444656c65676174696f6e4e6f646549644f663c543e00012064656c656761746500014044656c656761746f7249644f663c543e00012c7065726d697373696f6e73fc012c5065726d697373696f6e7300014864656c65676174655f7369676e61747572652504016844656c65676174655369676e6174757265547970654f663c543e000180744372656174652061206e65772064656c65676174696f6e206e6f64652e00f4546865206e65772064656c65676174696f6e206e6f646520726570726573656e74732061206e65772074727573742068696572617263687920746861740d01636f6e73696465727320746865206e6577206e6f64652061732069747320726f6f742e20546865206f776e6572206f662074686973206e6f6465206861732066756c6ce0636f6e74726f6c206f76657220616e79206f66206974732064697265637420616e6420696e6469726563742064657363656e64616e74732e00fc466f7220746865206372656174696f6e20746f20737563636565642c207468652064656c656761746565206d7573742070726f7669646520612076616c696411017369676e6174757265206f766572207468652028626c616b65323536292068617368206f6620746865206372656174696f6e206f7065726174696f6e2064657461696c731101776869636820696e636c7564652028696e206f72646572292064656c65676174696f6e2069642c20726f6f74206e6f64652069642c20706172656e742069642c20616e64707065726d697373696f6e73206f6620746865206e6577206e6f64652e00f45468657265206d757374206265206e6f2064656c65676174696f6e2077697468207468652073616d652069642073746f726564206f6e20636861696e2e0501467572746865726d6f72652c20746865207265666572656e63656420726f6f7420616e6420706172656e74206e6f646573206d75737420616c7265616479206265050170726573656e74206f6e20636861696e20616e6420636f6e7461696e207468652076616c6964207065726d697373696f6e7320616e64207265766f636174696f6e6c7374617475732028692e652e2c206e6f74207265766f6b6564292e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e000d015265717569726573207468652073656e646572206f6620746865207472616e73616374696f6e20746f206861766520612072657365727661626c652062616c616e6365886f66206174206c6561737420604465706f73697460206d616e7920746f6b656e732e0068456d697473206044656c65676174696f6e43726561746564602e002823203c7765696768743e305765696768743a204f283129b42d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2044656c65676174696f6e73542d205772697465733a2044656c65676174696f6e732c23203c2f7765696768743e447265766f6b655f64656c65676174696f6e0c013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001446d61785f706172656e745f636865636b731c010c75333200013c6d61785f7265766f636174696f6e731c010c753332000274f85265766f6b6520612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74206e6f64652920616e6420616c6c20697473246368696c6472656e2e00fc446f6573206e6f7420726566756e64207468652064656c65676174696f6e206261636b20746f20746865206465706f736974206f776e657220617320746865f06e6f6465206973207374696c6c2073746f726564206f6e20636861696e2e20526571756972657320746f206164646974696f6e616c6c792063616c6cb46072656d6f76655f64656c65676174696f6e6020746f20756e7265736572766520746865206465706f7369742e0009015265766f6b696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67090166726f6d2074686520676976656e206e6f6465206265696e67207265766f6b65642e204e657665727468656c6573732c207265766f636174696f6e20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f6465206973207265766f6b65642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e73696465726564207265766f6b65642e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e0078456d6974732043202a206044656c65676174696f6e5265766f6b6564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f6368696c6472656e602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e802d205772697465733a20526f6f74732c2043202a2044656c65676174696f6e732c23203c2f7765696768743e4472656d6f76655f64656c65676174696f6e08013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c731c010c753332000370f852656d6f766520612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74206e6f64652920616e6420616c6c20697473246368696c6472656e2e00f052657475726e73207468652064656c65676174696f6e206465706f73697420746f20746865206465706f736974206f776e657220666f722065616368a472656d6f7665642044656c65676174696f6e4e6f646520627920756e726573657276696e672069742e00090152656d6f76696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67fc66726f6d2074686520676976656e206e6f6465206265696e672072656d6f7665642e204e657665727468656c6573732c2072656d6f76616c20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f64652069732072656d6f7665642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e736964657265642072656d6f7665642e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e0078456d6974732043202a206044656c65676174696f6e52656d6f766564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f6368696c6472656e602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e902d205772697465733a20526f6f74732c2032202a2043202a2044656c65676174696f6e732c23203c2f7765696768743e3c7265636c61696d5f6465706f73697408013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c731c010c753332000460f45265636c61696d20746865206465706f73697420666f7220612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74b86e6f6465292c2072656d6f76696e6720746865206e6f646520616e6420616c6c20697473206368696c6472656e2e00f052657475726e73207468652064656c65676174696f6e206465706f73697420746f20746865206465706f736974206f776e657220666f722065616368a472656d6f7665642044656c65676174696f6e4e6f646520627920756e726573657276696e672069742e00090152656d6f76696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67fc66726f6d2074686520676976656e206e6f6465206265696e672072656d6f7665642e204e657665727468656c6573732c2072656d6f76616c20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f64652069732072656d6f7665642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e736964657265642072656d6f7665642e000d01546865206469737061746368206f726967696e206d757374206265207369676e6564206279207468652064656c65676174696f6e206465706f736974206f776e65722e004c604465706f7369745265636c61696d6564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f72656d6f76616c73602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e902d205772697465733a20526f6f74732c2032202a2043202a2044656c65676174696f6e732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657204013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e00051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e000501546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f66207468652064656c65676174696f6e206e6f64652ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e25040c0c6469642c6469645f64657461696c73304469645369676e617475726500010c1c45643235353139040029040148656432353531393a3a5369676e61747572650000001c53723235353139040031040148737232353531393a3a5369676e617475726500010014456364736104003504014065636473613a3a5369676e61747572650002000029040c1c73705f636f72651c65643235353139245369676e6174757265000004002d0401205b75383b2036345d00002d0400000340000000080031040c1c73705f636f72651c73723235353139245369676e6174757265000004002d0401205b75383b2036345d000035040c1c73705f636f7265146563647361245369676e617475726500000400390401205b75383b2036355d000039040000034100000008003d040c0c6469641870616c6c65741043616c6c04045400013c1863726561746508011c64657461696c7341040168426f783c4469644372656174696f6e44657461696c733c543e3e0001247369676e6174757265250401304469645369676e617475726500007cec53746f72652061206e657720444944206f6e20636861696e2c20616674657220766572696679696e67207468617420746865206372656174696f6e05016f7065726174696f6e20686173206265656e207369676e656420627920746865204b494c54206163636f756e74206173736f63696174656420776974682074686501016964656e746966696572206f662074686520444944206265696e67206372656174656420616e6420746861742061204449442077697468207468652073616d6511016964656e74696669657220686173206e6f742070726576696f75736c792065786973746564206f6e2028616e64207468656e2064656c657465642066726f6d292074686518636861696e2e000d015468657265206d757374206265206e6f2044494420696e666f726d6174696f6e2073746f726564206f6e20636861696e20756e646572207468652073616d65204449442c6964656e7469666965722e00fc546865206e6577206b65797320616464656420776974682074686973206f7065726174696f6e206172652073746f72656420756e646572207468652044494405016964656e74696669657220616c6f6e6720776974682074686520626c6f636b206e756d62657220696e20776869636820746865206f7065726174696f6e207761732465786563757465642e000101546865206469737061746368206f726967696e2063616e20626520616e79204b494c54206163636f756e74207769746820656e6f7567682066756e647320746f0d0165786563757465207468652065787472696e73696320616e6420697420646f6573206e6f74206861766520746f206265207469656420696e20616e792077617920746fb4746865204b494c54206163636f756e74206964656e74696679696e672074686520444944207375626a6563742e004c456d697473206044696443726561746564602e002823203c7765696768743e0d012d20546865207472616e73616374696f6e277320636f6d706c6578697479206973206d61696e6c7920646570656e64656e74206f6e20746865206e756d626572206f66010120206e6577206b65792061677265656d656e74206b65797320616e6420746865206e756d626572206f66206e6577207365727669636520656e64706f696e7473702020696e636c7564656420696e20746865206f7065726174696f6e2e242d2d2d2d2d2d2d2d2df85765696768743a204f284b29202b204f284e29207768657265204b20697320746865206e756d626572206f66206e6577206b65792061677265656d656e7409016b65797320626f756e64656420627920604d61784e65774b657941677265656d656e744b657973602c207768696c65204e20697320746865206e756d626572206f66f46e6577207365727669636520656e64706f696e747320626f756e64656420627920604d61784e756d6265724f665365727669636573506572446964602eb02d2052656164733a205b4f726967696e204163636f756e745d2c204469642c20446964426c61636b6c697374fc2d205772697465733a20446964202877697468204b206e6577206b65792061677265656d656e74206b657973292c2053657276696365456e64706f696e7473cc20202877697468204e206e6577207365727669636520656e64706f696e7473292c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e587365745f61757468656e7469636174696f6e5f6b657904011c6e65775f6b657959040148446964566572696669636174696f6e4b65790001408855706461746520746865204449442061757468656e7469636174696f6e206b65792e00ec546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696620697420697309016e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f207468654c736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e487365745f64656c65676174696f6e5f6b657904011c6e65775f6b657959040148446964566572696669636174696f6e4b657900024094536574206f722075706461746520746865204449442064656c65676174696f6e206b65792e000d01496620616e206f6c64206b657920657869737465642c2069742069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696611016974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f5c74686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e5472656d6f76655f64656c65676174696f6e5f6b657900033c7852656d6f766520746865204449442064656c65676174696f6e206b65792e00d4546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b657973206966b06974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e4c7365745f6174746573746174696f6e5f6b657904011c6e65775f6b657959040148446964566572696669636174696f6e4b657900044098536574206f72207570646174652074686520444944206174746573746174696f6e206b65792e000d01496620616e206f6c64206b657920657869737465642c2069742069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696611016974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f5c74686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e5872656d6f76655f6174746573746174696f6e5f6b657900053c7c52656d6f76652074686520444944206174746573746174696f6e206b65792e00d4546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b657973206966b06974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e546164645f6b65795f61677265656d656e745f6b657904011c6e65775f6b657949040140446964456e6372797074696f6e4b6579000638b841646420612073696e676c65206e6577206b65792061677265656d656e74206b657920746f20746865204449442e00bc546865206e6577206b657920697320616464656420746f2074686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e6072656d6f76655f6b65795f61677265656d656e745f6b65790401186b65795f69642c01284b657949644f663c543e000734050152656d6f7665206120444944206b65792061677265656d656e74206b65792066726f6d20626f74682069747320736574206f66206b65792061677265656d656e74906b65797320616e642061732077656c6c20617320697473207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e506164645f736572766963655f656e64706f696e74040140736572766963655f656e64706f696e746d040138446964456e64706f696e743c543e000830bc4164642061206e6577207365727669636520656e64706f696e7420756e6465722074686520676976656e204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f2831290d012d2052656164733a205b4f726967696e204163636f756e745d2c204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e74c82d205772697465733a204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e5c72656d6f76655f736572766963655f656e64706f696e74040128736572766963655f69647104015053657276696365456e64706f696e7449643c543e000930d452656d6f76652074686520736572766963652077697468207468652070726f76696465642049442066726f6d20746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129f82d2052656164733a205b4f726967696e204163636f756e745d2c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e74c82d205772697465733a204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e1864656c65746504014c656e64706f696e74735f746f5f72656d6f76651c010c753332000a600d0144656c6574652061204449442066726f6d2074686520636861696e20616e6420616c6c20696e666f726d6174696f6e206173736f63696174656420776974682069742c1101616674657220766572696679696e672074686174207468652064656c657465206f7065726174696f6e20686173206265656e207369676e65642062792074686520444944fc7375626a656374207573696e67207468652061757468656e7469636174696f6e206b65792063757272656e746c792073746f726564206f6e20636861696e2e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f7265207468657864656c657465206f7065726174696f6e206973206576616c75617465642e00f441667465722069742069732064656c657465642c2061204449442077697468207468652073616d65206964656e7469666965722063616e6e6f742062655872652d63726561746564206576657220616761696e2e00010141732074686520726573756c74206f66207468652064656c6574696f6e2c20616c6c20747261636573206f662074686520444944206172652072656d6f766564e866726f6d207468652073746f726167652c20776869636820726573756c747320696e2074686520696e76616c69646174696f6e206f6620616c6c9c6174746573746174696f6e73206973737565642062792074686520444944207375626a6563742e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696444656c65746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964cc2d204b696c6c733a2044696420656e747279206173736f63696174656420746f2074686520444944206964656e7469666965722c23203c2f7765696768743e3c7265636c61696d5f6465706f73697408012c6469645f7375626a6563740001484469644964656e7469666965724f663c543e00014c656e64706f696e74735f746f5f72656d6f76651c010c753332000b54f45265636c61696d2061206465706f73697420666f722061204449442e20546869732077696c6c2064656c657465207468652044494420616e6420616c6c0901696e666f726d6174696f6e206173736f63696174656420776974682069742c20616674657220766572696679696e672074686174207468652063616c6c657220697364746865206f776e6572206f6620746865206465706f7369742e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f7265207468657864656c657465206f7065726174696f6e206973206576616c75617465642e00f441667465722069742069732064656c657465642c2061204449442077697468207468652073616d65206964656e7469666965722063616e6e6f742062655872652d63726561746564206576657220616761696e2e00010141732074686520726573756c74206f66207468652064656c6574696f6e2c20616c6c20747261636573206f662074686520444944206172652072656d6f766564e866726f6d207468652073746f726167652c20776869636820726573756c747320696e2074686520696e76616c69646174696f6e206f6620616c6c9c6174746573746174696f6e73206973737565642062792074686520444944207375626a6563742e004c456d697473206044696444656c65746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964cc2d204b696c6c733a2044696420656e747279206173736f63696174656420746f2074686520444944206964656e7469666965722c23203c2f7765696768743e3c7375626d69745f6469645f63616c6c0801206469645f63616c6c8d040188426f783c446964417574686f72697a656443616c6c4f7065726174696f6e3c543e3e0001247369676e6174757265250401304469645369676e6174757265000c8cec50726f7879206120646973706174636861626c652063616c6c206f6620616e6f746865722072756e74696d652065787472696e736963207468617458737570706f727473206120444944206f726967696e2e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f726520746865606f7065726174696f6e20697320646973706174636865642e00fc412063616c6c207375626d6974746564207468726f75676820746869732065787472696e736963206d757374206265207369676e65642077697468207468650901726967687420444944206b65792c20646570656e64696e67206f6e207468652063616c6c2e205468697320696e666f726d6174696f6e2069732070726f766964656409016279207468652060446964417574686f72697a656443616c6c4f7065726174696f6e6020706172616d657465722c20776869636820737065636966696573207468650901444944207375626a65637420616374696e6720617320746865206f726967696e206f66207468652063616c6c2c2074686520444944277320747820636f756e7465720101286e6f6e6365292c2074686520646973706174636861626c6520746f2063616c6c20696e2063617365207369676e617475726520766572696669636174696f6ef073756363656564732c207468652074797065206f6620444944206b657920746f2075736520746f2076657269667920746865206f7065726174696f6efc7369676e61747572652c20616e642074686520626c6f636b206e756d62657220746865206f7065726174696f6e2077617320746172676574696e6720666f72a8696e636c7573696f6e2c207768656e20697420776173206372656174656420616e64207369676e65642e00fc496e206361736520746865207369676e617475726520697320696e636f72726563742c20746865206e6f6e6365206973206e6f742076616c69642c20746865fc7265717569726564206b6579206973206e6f742070726573656e7420666f722074686520737065636966696564204449442c206f722074686520626c6f636bfc73706563696669656420697320746f6f206f6c642074686520766572696669636174696f6e206661696c7320616e64207468652063616c6c206973206e6f74f4646973706174636865642e204f74686572776973652c207468652063616c6c2069732070726f7065726c79206469737061746368656420776974682061b8604469644f726967696e60206f726967696e20696e6469636174696e672074686520444944207375626a6563742e00110141207375636365737366756c206469737061746368206f7065726174696f6e20726573756c747320696e2074686520747820636f756e746572206173736f6369617465640501776974682074686520676976656e2044494420746f20626520696e6372656d656e7465642c20746f206d69746967617465207265706c61792061747461636b732e000101546865206469737061746368206f726967696e2063616e20626520616e79204b494c54206163636f756e74207769746820656e6f7567682066756e647320746f0d0165786563757465207468652065787472696e73696320616e6420697420646f6573206e6f74206861766520746f206265207469656420696e20616e792077617920746fb4746865204b494c54206163636f756e74206964656e74696679696e672074686520444944207375626a6563742e0068456d697473206044696443616c6c44697370617463686564602e002823203c7765696768743eb05765696768743a204f283129202b20776569676874206f662074686520646973706174636865642063616c6c782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e6572000d1c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00b8546865207375626a656374206f66207468652063616c6c206d7573742062652074686520646964206f776e65722ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404010c6469640001484469644964656e7469666965724f663c543e000e0cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e41040c0c6469642c6469645f64657461696c73484469644372656174696f6e44657461696c73040454000018010c6469640001484469644964656e7469666965724f663c543e0001247375626d69747465720001384163636f756e7449644f663c543e0001586e65775f6b65795f61677265656d656e745f6b6579734504016c4469644e65774b657941677265656d656e744b65795365743c543e00014c6e65775f6174746573746174696f6e5f6b6579550401684f7074696f6e3c446964566572696669636174696f6e4b65793e0001486e65775f64656c65676174696f6e5f6b6579550401684f7074696f6e3c446964566572696669636174696f6e4b65793e00014c6e65775f736572766963655f64657461696c736904014c5665633c446964456e64706f696e743c543e3e00004504101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540149040453000004004d04012c42547265655365743c543e000049040c0c6469642c6469645f64657461696c7340446964456e6372797074696f6e4b65790001041858323535313904000401205b75383b2033325d000000004d040420425472656553657404045401490400040051040000005104000002490400550404184f7074696f6e0404540159040108104e6f6e6500000010536f6d6504005904000001000059040c0c6469642c6469645f64657461696c7348446964566572696669636174696f6e4b657900010c1c4564323535313904005d04013c656432353531393a3a5075626c69630000001c537232353531390400e502013c737232353531393a3a5075626c696300010014456364736104006104013465636473613a3a5075626c6963000200005d040c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d000061040c1c73705f636f7265146563647361185075626c696300000400650401205b75383b2033335d0000650400000321000000080069040000026d04006d040c0c64696444736572766963655f656e64706f696e74732c446964456e64706f696e7404045400000c010869647104015053657276696365456e64706f696e7449643c543e000134736572766963655f74797065737504017453657276696365456e64706f696e7454797065456e74726965733c543e00011075726c738104017053657276696365456e64706f696e7455726c456e74726965733c543e00007104101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00007504101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540179040453000004007d0401185665633c543e00007904101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00007d040000027904008104101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454018504045300000400890401185665633c543e00008504101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000089040000028504008d040c0c6469642c6469645f64657461696c7368446964417574686f72697a656443616c6c4f7065726174696f6e040454000014010c6469640001484469644964656e7469666965724f663c543e00012874785f636f756e74657210010c75363400011063616c6c9503014044696443616c6c61626c654f663c543e000130626c6f636b5f6e756d626572100140426c6f636b4e756d6265724f663c543e0001247375626d69747465720001384163636f756e7449644f663c543e000091040c4470616c6c65745f6469645f6c6f6f6b75701870616c6c65741043616c6c04045400011c446173736f63696174655f6163636f756e7408010c7265719504015c4173736f63696174654163636f756e745265717565737400012865787069726174696f6e1001a03c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a426c6f636b4e756d62657200004405014173736f63696174652074686520676976656e206163636f756e7420746f2074686520444944207468617420617574686f72697a656420746869732063616c6c2e000501546865206163636f756e742068617320746f207369676e207468652044494420616e64206120626c6f636b6e756d62657220616674657220776869636820746865e07369676e6174757265206578706972657320696e206f7264657220746f20617574686f72697a6520746865206173736f63696174696f6e2e001101546865207369676e61747572652077696c6c20626520636865636b656420616761696e737420746865207363616c6520656e636f646564207475706c65206f66207468650d016d6574686f64207370656369666963206964206f662074686520646964206964656e74696669657220616e642074686520626c6f636b206e756d626572206166746572bc776869636820746865207369676e61747572652073686f756c6420626520726567617264656420696e76616c69642e001101456d69747320604173736f63696174696f6e45737461626c69736865646020616e642c206f7074696f6e616c6c792c20604173736f63696174696f6e52656d6f76656460d069662074686572652077617320612070726576696f7573206173736f63696174696f6e20666f7220746865206163636f756e742e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e406173736f63696174655f73656e64657200012c01014173736f6369617465207468652073656e646572206f66207468652063616c6c20746f2074686520444944207468617420617574686f72697a656420746869731463616c6c2e001101456d69747320604173736f63696174696f6e45737461626c69736865646020616e642c206f7074696f6e616c6c792c20604173736f63696174696f6e52656d6f76656460d069662074686572652077617320612070726576696f7573206173736f63696174696f6e20666f7220746865206163636f756e742e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e6472656d6f76655f73656e6465725f6173736f63696174696f6e000228fc52656d6f766520746865206173736f63696174696f6e206f66207468652073656e646572206163636f756e742e20546869732063616c6c20646f65736e27740d01726571756972652074686520617574686f72697a6174696f6e206f6620746865204449442c206275742072657175697265732061207369676e6564206f726967696e2e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e6872656d6f76655f6163636f756e745f6173736f63696174696f6e04011c6163636f756e74090101444c696e6b61626c654163636f756e74496400032c110152656d6f766520746865206173736f63696174696f6e206f66207468652070726f7669646564206163636f756e742049442e20546869732063616c6c20646f65736e27740d01726571756972652074686520617574686f72697a6174696f6e206f6620746865206163636f756e742049442c2062757420746865206173736f63696174656420444944c46e6565647320746f206d617463682074686520444944207468617420617574686f72697a656420746869732063616c6c2e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e3c7265636c61696d5f6465706f73697404011c6163636f756e74090101444c696e6b61626c654163636f756e74496400042c090152656d6f766520746865206173736f63696174696f6e206f66207468652070726f7669646564206163636f756e742e20546869732063616c6c2063616e206f6e6c79f862652063616c6c65642066726f6d20746865206465706f736974206f776e65722e20546865207265736572766564206465706f7369742077696c6c2062651866726565642e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129582d2052656164733a20436f6e6e6563746564446964735c2d205772697465733a20436f6e6e6563746564446964732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657204011c6163636f756e74090101444c696e6b61626c654163636f756e74496400051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00d8546865207375626a656374206f66207468652063616c6c206d757374206265206c696e6b656420746f20746865206163636f756e742ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404011c6163636f756e74090101444c696e6b61626c654163636f756e74496400060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e95040c4470616c6c65745f6469645f6c6f6f6b7570646173736f63696174655f6163636f756e745f726571756573745c4173736f63696174654163636f756e74526571756573740001081c446f7473616d61080000012c4163636f756e74496433320000990401384d756c74695369676e617475726500000020457468657265756d08000d01012c4163636f756e744964323000009d040144457468657265756d5369676e6174757265000100009904082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040029040148656432353531393a3a5369676e61747572650000001c53723235353139040031040148737232353531393a3a5369676e617475726500010014456364736104003504014065636473613a3a5369676e6174757265000200009d040c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e7444457468657265756d5369676e6174757265000004003504014065636473613a3a5369676e61747572650000a1040c4470616c6c65745f776562335f6e616d65731870616c6c65741043616c6c04045400011c14636c61696d0401106e616d651d010140576562334e616d65496e7075743c543e00003ce841737369676e2074686520737065636966696564206e616d6520746f20746865206f776e65722061732073706563696669656420696e207468651c6f726967696e2e000d01546865206e616d65206d757374206e6f74206861766520616c7265616479206265656e20636c61696d656420627920736f6d656f6e6520656c736520616e6420746865a06f776e6572206d757374206e6f7420616c7265616479206f776e20616e6f74686572206e616d652e00dc456d6974732060576562334e616d65436c61696d65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f28312909012d2052656164733a204e616d65732c204f776e65722c2042616e6e65642073746f7261676520656e7472696573202b20617661696c61626c652063757272656e6379582020636865636b202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f73697420726573657276652c23203c2f7765696768743e4072656c656173655f62795f6f776e6572000130a452656c65617365207468652070726f7669646564206e616d652066726f6d20697473206f776e65722e00cc546865206f726967696e206d75737420626520746865206f776e6572206f662074686520737065636966696564206e616d652e00e0456d6974732060576562334e616d6552656c65617365646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129ac2d2052656164733a204e616d65732073746f7261676520656e747279202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f7369742072656c656173652c23203c2f7765696768743e3c7265636c61696d5f6465706f7369740401106e616d651d010140576562334e616d65496e7075743c543e000230a452656c65617365207468652070726f7669646564206e616d652066726f6d20697473206f776e65722e000101546865206f726967696e206d75737420626520746865206163636f756e742074686174207061696420666f7220746865206e616d652773206465706f7369742e00e0456d6974732060576562334e616d6552656c65617365646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129ac2d2052656164733a204f776e65722073746f7261676520656e747279202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f7369742072656c656173652c23203c2f7765696768743e0c62616e0401106e616d651d010140576562334e616d65496e7075743c543e0003402c42616e2061206e616d652e00f4412062616e6e6564206e616d652063616e6e6f7420626520636c61696d656420627920616e796f6e652e20546865206e616d652773206465706f7369748869732072657475726e656420746f20746865206f726967696e616c2070617965722e0088546865206f726967696e206d757374206265207468652062616e206f726967696e2e00d8456d6974732060576562334e616d6542616e6e65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129f02d2052656164733a2042616e6e65642c204f776e65722c204e616d65732073746f7261676520656e7472696573202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722c2042616e6e65642073746f7261676520656e7472696573202b2063757272656e6379206465706f73697424202072656c656173652c23203c2f7765696768743e14756e62616e0401106e616d651d010140576562334e616d65496e7075743c543e00043834556e62616e2061206e616d652e00704d616b652061206e616d6520636c61696d61626c6520616761696e2e0088546865206f726967696e206d757374206265207468652062616e206f726967696e2e00e0456d6974732060576562334e616d65556e62616e6e65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129b02d2052656164733a2042616e6e65642073746f7261676520656e747279202b206f726967696e20636865636bb82d205772697465733a2042616e6e65642073746f7261676520656e747279206465706f7369742072656c656173652c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657200051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00e8546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f662074686520776562336e616d652ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f7369740401286e616d655f696e7075741d010140576562334e616d65496e7075743c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea5040c487075626c69635f63726564656e7469616c731870616c6c65741043616c6c04045400011c0c61646404012863726564656e7469616ca9040164426f783c496e70757443726564656e7469616c4f663c543e3e000018a852656769737465722061206e6577207075626c69632063726564656e7469616c206f6e20636861696e2e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c2077697468207468652073616d65206964656e74696669657220616c72656164798465786973747320666f722074686520737065636966696564207375626a6563742e0064456d697473206043726564656e7469616c53746f726564602e187265766f6b6508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e110401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000120705265766f6b65732061207075626c69632063726564656e7469616c2e001101496620612063726564656e7469616c2077617320616c7265616479207265766f6b65642c20746869732066756e6374696f6e20646f6573206e6f74206661696c206275746473696d706c7920726573756c747320696e2061206e6f6f702e000101546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f207265766f6b65207468652063726564656e7469616c2e0068456d697473206043726564656e7469616c5265766f6b6564602e20756e7265766f6b6508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e110401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e00022478556e7265766f6b65732061207075626c69632063726564656e7469616c2e000101496620612063726564656e7469616c20776173206e6f74207265766f6b65642c20746869732066756e6374696f6e20646f6573206e6f74206661696c206275746473696d706c7920726573756c747320696e2061206e6f6f702e00d8546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f20756e7265766f6b65207468652c63726564656e7469616c2e0070456d697473206043726564656e7469616c556e7265766f6b6564602e1872656d6f766508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e110401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000344fc52656d6f7665732074686520696e666f726d6174696f6e207065727461696e696e672061207075626c69632063726564656e7469616c2066726f6d2074686518636861696e2e0009015468652072656d6f76616c206f66207468652063726564656e7469616c20646f6573206e6f742064656c65746520697420656e746972656c792066726f6d207468650501626c6f636b636861696e20686973746f72792c20627574206f6e6c7920697473206c696e6b202a66726f6d2a2074686520626c6f636b636861696e2073746174659c2a746f2a2074686520626c6f636b636861696e20686973746f72792069732072656d6f7665642e00cc436c69656e74732070617273696e67207075626c69632063726564656e7469616c732073686f756c6420696e746572707265740101746865206c61636b206f6620737563682061206c696e6b2061732074686520666163742074686174207468652063726564656e7469616c20686173206265656eb872656d6f7665642062792069747320617474657374657220736f6d652074696d6520696e2074686520706173742e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c20616c72656164792065786973747320666f722074686520737065636966696564207375626a6563742e000101546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f2072656d6f7665207468652063726564656e7469616c2e0068456d697473206043726564656e7469616c52656d6f766564602e3c7265636c61696d5f6465706f73697404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000448fc52656d6f7665732074686520696e666f726d6174696f6e207065727461696e696e672061207075626c69632063726564656e7469616c2066726f6d20746865ac636861696e20616e642072657475726e7320746865206465706f73697420746f206974732070617965722e0009015468652072656d6f76616c206f66207468652063726564656e7469616c20646f6573206e6f742064656c65746520697420656e746972656c792066726f6d207468650501626c6f636b636861696e20686973746f72792c20627574206f6e6c7920697473206c696e6b202a66726f6d2a2074686520626c6f636b636861696e2073746174659c2a746f2a2074686520626c6f636b636861696e20686973746f72792069732072656d6f7665642e00cc436c69656e74732070617273696e67207075626c69632063726564656e7469616c732073686f756c6420696e746572707265740101746865206c61636b206f6620737563682061206c696e6b2061732074686520666163742074686174207468652063726564656e7469616c20686173206265656eb872656d6f7665642062792069747320617474657374657220736f6d652074696d6520696e2074686520706173742e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c20616c72656164792065786973747320666f722074686520737065636966696564207375626a6563742e000d01546865206469737061746368206f726967696e206d75737420626520746865206f776e6572206f6620746865206465706f7369742c2068656e6365206e6f74207468655863726564656e7469616c27732061747465737465722e0068456d697473206043726564656e7469616c52656d6f766564602e506368616e67655f6465706f7369745f6f776e657204013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e00051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00f0546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f66207468652063726564656e7469616c2ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea9040c487075626c69635f63726564656e7469616c732c63726564656e7469616c732843726564656e7469616c1024437479706548617368012c445375626a6563744964656e74696669657201ad0418436c61696d7301b10434416363657373436f6e74726f6c0115040010012863747970655f686173682c012443747970654861736800011c7375626a656374ad0401445375626a6563744964656e746966696572000118636c61696d73b1040118436c61696d73000134617574686f72697a6174696f6e110401544f7074696f6e3c416363657373436f6e74726f6c3e0000ad04101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000b104101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000b5040c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f6461746104011064617461b904015450617261636861696e496e686572656e744461746100002480536574207468652063757272656e742076616c69646174696f6e20646174612e004101546869732073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e887068617365206966207468652063616c6c20776173206e6f7420696e766f6b65642e00d0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e7460002101417320612073696465206566666563742c20746869732066756e6374696f6e207570677261646573207468652063757272656e742076616c69646174696f6e2066756e6374696f6e8469662074686520617070726f7072696174652074696d652068617320636f6d652e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653001345570776172644d65737361676500010044617574686f72697a655f75706772616465040124636f64655f686173682c011c543a3a4861736800020060656e6163745f617574686f72697a65645f75706772616465040110636f646530011c5665633c75383e000300042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb904089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f64617461bd04015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f7374617465c504015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d65737361676573cd04016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573d50401a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e0000bd040c4c706f6c6b61646f745f7072696d6974697665730876325c50657273697374656456616c69646174696f6e44617461080448012c044e011c0010012c706172656e745f68656164c1040120486561644461746100014c72656c61795f706172656e745f6e756d6265721c01044e00016472656c61795f706172656e745f73746f726167655f726f6f742c0104480001306d61785f706f765f73697a651c010c7533320000c1040c48706f6c6b61646f745f70617261636861696e287072696d6974697665732048656164446174610000040030011c5665633c75383e0000c5040c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f646573c904014442547265655365743c5665633c75383e3e0000c9040420425472656553657404045401300004006102000000cd04000002d10400d1040860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d626572011c0008011c73656e745f61741c012c426c6f636b4e756d62657200010c6d736730013c446f776e776172644d6573736167650000d504042042547265654d617008044b01a101045601d904000400e104000000d904000002dd0400dd040860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d626572011c0008011c73656e745f61741c012c426c6f636b4e756d6265720001106461746130015073705f7374643a3a7665633a3a5665633c75383e0000e104000002e50400e50400000408a101d90400e9040c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c04045400012448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d697410012458636d57656967687400003484536572766963657320612073696e676c65206f7665727765696768742058434d2e00c02d20606f726967696e603a204d75737420706173732060457865637574654f7665727765696768744f726967696e602ed42d2060696e646578603a2054686520696e646578206f6620746865206f7665727765696768742058434d20746f20736572766963650d012d20607765696768745f6c696d6974603a2054686520616d6f756e74206f662077656967687420746861742058434d20657865637574696f6e206d61792074616b652e001c4572726f72733a5d012d20604261644f766572776569676874496e646578603a2058434d20756e6465722060696e64657860206973206e6f7420666f756e6420696e2074686520604f766572776569676874602073746f72616765206d61702e45012d206042616458636d603a2058434d20756e6465722060696e646578602063616e6e6f742062652070726f7065726c79206465636f64656420696e746f20612076616c69642058434d20666f726d61742e09012d20605765696768744f7665724c696d6974603a2058434d20657865637574696f6e206d617920757365206772656174657220607765696768745f6c696d6974602e001c4576656e74733a8c2d20604f7665727765696768745365727669636564603a204f6e20737563636573732e5473757370656e645f78636d5f657865637574696f6e00010c490153757370656e647320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652c207265676172646c657373206f66207468652073656e6465722773206f726967696e2e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e50726573756d655f78636d5f657865637574696f6e000214b8526573756d657320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652e003d014e6f7465207468617420746869732066756e6374696f6e20646f65736e2774206368616e67652074686520737461747573206f662074686520696e2f6f757420626f756e64206368616e6e656c732e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e607570646174655f73757370656e645f7468726573686f6c6404010c6e65771c010c75333200031499014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e2074686520717565756520666f7220746865206f74686572207369646520746f20626520746f6c6420746f5873757370656e642074686569722073656e64696e672e00742d20606f726967696e603a204d75737420706173732060526f6f74602ee82d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e73757370656e645f76616c756560547570646174655f64726f705f7468726573686f6c6404010c6e65771c010c75333200041495014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e207468652071756575652061667465722077686963682077652064726f7020616e792066757274686572686d657373616765732066726f6d20746865206368616e6e656c2e00742d20606f726967696e603a204d75737420706173732060526f6f74602eec2d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e64726f705f7468726573686f6c64605c7570646174655f726573756d655f7468726573686f6c6404010c6e65771c010c75333200051491014f76657277726974657320746865206e756d626572206f66207061676573206f66206d6573736167657320776869636820746865207175657565206d757374206265207265647563656420746f206265666f7265206974207369676e616c732074686174ec6d6573736167652073656e64696e67206d6179207265636f6d6d656e636520616674657220697420686173206265656e2073757370656e6465642e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e726573756d655f7468726573686f6c64605c7570646174655f7468726573686f6c645f77656967687404010c6e657710012458636d57656967687400061049014f7665727772697465732074686520616d6f756e74206f662072656d61696e696e672077656967687420756e6465722077686963682077652073746f702070726f63657373696e67206d657373616765732e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7468726573686f6c645f77656967687460707570646174655f7765696768745f72657374726963745f646563617904010c6e657710012458636d57656967687400071445014f7665727772697465732074686520737065656420746f2077686963682074686520617661696c61626c652077656967687420617070726f616368657320746865206d6178696d756d207765696768742ea50141206c6f776572206e756d62657220726573756c747320696e2061206661737465722070726f6772657373696f6e2e20412076616c7565206f662031206d616b65732074686520656e746972652077656967687420617661696c61626c6520696e697469616c6c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e0d012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7765696768745f72657374726963745f6465636179602e847570646174655f78636d705f6d61785f696e646976696475616c5f77656967687404010c6e657710012458636d57656967687400081429014f766572777269746520746865206d6178696d756d20616d6f756e74206f662077656967687420616e7920696e646976696475616c206d657373616765206d617920636f6e73756d652e71014d657373616765732061626f766520746869732077656967687420676f20696e746f20746865206f76657277656967687420717565756520616e64206d6179206f6e6c79206265207365727669636564206578706c696369746c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e21012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e78636d705f6d61785f696e646976696475616c5f776569676874602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eed040c2870616c6c65745f78636d1870616c6c65741043616c6c0404540001281073656e64080110646573743502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011c6d657373616765f1040154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f617373657473100110646573743502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172793502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747321020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c75333200013c110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f617373657473100110646573743502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172793502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747321020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320002404d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d6573736167651d0501c0426f783c56657273696f6e656458636d3c3c5420617320537973436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f77656967687410012458636d57656967687400032cd04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e006d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e2074686559016d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f20657865637574696f6e54617474656d70742077696c6c206265206d6164652e006d014e4f54453a2041207375636365737366756c2072657475726e20746f207468697320646f6573202a6e6f742a20696d706c7920746861742074686520606d73676020776173206578656375746564207375636365737366756c6c79cc746f20636f6d706c6574696f6e3b206f6e6c792074686174202a736f6d652a206f66206974207761732065786563757465642e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6ead010148426f783c4d756c74694c6f636174696f6e3e00012c78636d5f76657273696f6e1c012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00642d20606f726967696e603a204d75737420626520526f6f742ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6ea10301484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00642d20606f726967696e603a204d75737420626520526f6f742e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e3502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00642d20606f726967696e603a204d75737420626520526f6f742e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e3502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00642d20606f726967696e603a204d75737420626520526f6f742e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f617373657473140110646573743502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172793502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747321020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320001307765696768745f6c696d69741902012c5765696768744c696d69740008484d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f617373657473140110646573743502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172793502016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747321020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320001307765696768745f6c696d69741902012c5765696768744c696d6974000944110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ef104080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c0856300400f504015076303a3a58636d3c52756e74696d6543616c6c3e00000008563104000905015076313a3a58636d3c52756e74696d6543616c6c3e0001000856320400d101015076323a3a58636d3c52756e74696d6543616c6c3e00020000f5040c0c78636d0876300c58636d042c52756e74696d6543616c6c00012c34576974686472617741737365740801186173736574732502013c5665633c4d756c746941737365743e00011c65666665637473f904015c5665633c4f726465723c52756e74696d6543616c6c3e3e0000004c5265736572766541737365744465706f7369740801186173736574732502013c5665633c4d756c746941737365743e00011c65666665637473f904015c5665633c4f726465723c52756e74696d6543616c6c3e3e0001003454656c65706f727441737365740801186173736574732502013c5665633c4d756c746941737365743e00011c65666665637473f904015c5665633c4f726465723c52756e74696d6543616c6c3e3e000200345175657279526573706f6e736508012071756572795f696428010c753634000120726573706f6e736505050120526573706f6e7365000300345472616e7366657241737365740801186173736574732502013c5665633c4d756c746941737365743e000110646573742d0201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574732502013c5665633c4d756c746941737365743e000110646573742d0201344d756c74694c6f636174696f6e00011c65666665637473f90401385665633c4f726465723c28293e3e000500205472616e736163740c012c6f726967696e5f74797065050201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737410010c75363400011063616c6c09020168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b901010c7533320001406d61785f6d6573736167655f73697a65b901010c7533320001306d61785f6361706163697479b901010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b901010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b901010c75333200011873656e646572b901010c753332000124726563697069656e74b901010c7533320009002c52656c6179656446726f6d08010c77686f2d0201344d756c74694c6f636174696f6e00011c6d657373616765f504018c616c6c6f633a3a626f7865643a3a426f783c58636d3c52756e74696d6543616c6c3e3e000a0000f904000002fd0400fd04100c78636d087630146f72646572144f72646572042c52756e74696d6543616c6c000120104e756c6c000000304465706f73697441737365740801186173736574732502013c5665633c4d756c746941737365743e000110646573742d0201344d756c74694c6f636174696f6e0001004c4465706f7369745265736572766541737365740c01186173736574732502013c5665633c4d756c746941737365743e000110646573742d0201344d756c74694c6f636174696f6e00011c65666665637473f90401385665633c4f726465723c28293e3e0002003445786368616e67654173736574080110676976652502013c5665633c4d756c746941737365743e00011c726563656976652502013c5665633c4d756c746941737365743e0003005c496e6974696174655265736572766557697468647261770c01186173736574732502013c5665633c4d756c746941737365743e00011c726573657276652d0201344d756c74694c6f636174696f6e00011c65666665637473f90401385665633c4f726465723c28293e3e00040040496e69746961746554656c65706f72740c01186173736574732502013c5665633c4d756c746941737365743e000110646573742d0201344d756c74694c6f636174696f6e00011c65666665637473f90401385665633c4f726465723c28293e3e000500305175657279486f6c64696e670c012071756572795f696428010c753634000110646573742d0201344d756c74694c6f636174696f6e0001186173736574732502013c5665633c4d756c746941737365743e00060030427579457865637574696f6e14011066656573290201284d756c7469417373657400011877656967687410010c7536340001106465627410010c75363400013468616c745f6f6e5f6572726f72a40110626f6f6c00010c78636d010501545665633c58636d3c52756e74696d6543616c6c3e3e000700000105000002f5040005050c0c78636d08763020526573706f6e73650001041841737365747304002502013c5665633c4d756c746941737365743e0000000009050c0c78636d0876310c58636d042c52756e74696d6543616c6c0001343457697468647261774173736574080118617373657473dd01012c4d756c746941737365747300011c656666656374730d05015c5665633c4f726465723c52756e74696d6543616c6c3e3e000000545265736572766541737365744465706f7369746564080118617373657473dd01012c4d756c746941737365747300011c656666656374730d05015c5665633c4f726465723c52756e74696d6543616c6c3e3e000100585265636569766554656c65706f727465644173736574080118617373657473dd01012c4d756c746941737365747300011c656666656374730d05015c5665633c4f726465723c52756e74696d6543616c6c3e3e000200345175657279526573706f6e736508012071756572795f696428010c753634000120726573706f6e736519050120526573706f6e7365000300345472616e736665724173736574080118617373657473dd01012c4d756c746941737365747300012c62656e6566696369617279ad0101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473dd01012c4d756c746941737365747300011064657374ad0101344d756c74694c6f636174696f6e00011c656666656374730d0501385665633c4f726465723c28293e3e000500205472616e736163740c012c6f726967696e5f74797065050201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737410010c75363400011063616c6c09020168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b901010c7533320001406d61785f6d6573736167655f73697a65b901010c7533320001306d61785f6361706163697479b901010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b901010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b901010c75333200011873656e646572b901010c753332000124726563697069656e74b901010c7533320009002c52656c6179656446726f6d08010c77686fb1010154496e746572696f724d756c74694c6f636174696f6e00011c6d6573736167650905018c616c6c6f633a3a626f7865643a3a426f783c58636d3c52756e74696d6543616c6c3e3e000a004053756273637269626556657273696f6e08012071756572795f696428010c75363400014c6d61785f726573706f6e73655f77656967687428010c753634000b0048556e73756273637269626556657273696f6e000c00000d050000021105001105100c78636d087631146f72646572144f72646572042c52756e74696d6543616c6c000120104e6f6f70000000304465706f73697441737365740c01186173736574730d0201404d756c7469417373657446696c7465720001286d61785f6173736574731c010c75333200012c62656e6566696369617279ad0101344d756c74694c6f636174696f6e0001004c4465706f7369745265736572766541737365741001186173736574730d0201404d756c7469417373657446696c7465720001286d61785f6173736574731c010c75333200011064657374ad0101344d756c74694c6f636174696f6e00011c656666656374730d0501385665633c4f726465723c28293e3e0002003445786368616e67654173736574080110676976650d0201404d756c7469417373657446696c74657200011c72656365697665dd01012c4d756c74694173736574730003005c496e6974696174655265736572766557697468647261770c01186173736574730d0201404d756c7469417373657446696c74657200011c72657365727665ad0101344d756c74694c6f636174696f6e00011c656666656374730d0501385665633c4f726465723c28293e3e00040040496e69746961746554656c65706f72740c01186173736574730d0201404d756c7469417373657446696c74657200011064657374ad0101344d756c74694c6f636174696f6e00011c656666656374730d0501385665633c4f726465723c28293e3e000500305175657279486f6c64696e670c012071756572795f696428010c75363400011064657374ad0101344d756c74694c6f636174696f6e0001186173736574730d0201404d756c7469417373657446696c74657200060030427579457865637574696f6e14011066656573e50101284d756c7469417373657400011877656967687410010c7536340001106465627410010c75363400013468616c745f6f6e5f6572726f72a40110626f6f6c000130696e737472756374696f6e73150501545665633c58636d3c52756e74696d6543616c6c3e3e00070000150500000209050019050c0c78636d08763120526573706f6e7365000108184173736574730400dd01012c4d756c74694173736574730000001c56657273696f6e04001c013873757065723a3a56657273696f6e000100001d05080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010c08563004002105015076303a3a58636d3c52756e74696d6543616c6c3e00000008563104003505015076313a3a58636d3c52756e74696d6543616c6c3e00010008563204004505015076323a3a58636d3c52756e74696d6543616c6c3e0002000021050c0c78636d0876300c58636d042c52756e74696d6543616c6c00012c34576974686472617741737365740801186173736574732502013c5665633c4d756c746941737365743e00011c656666656374732505015c5665633c4f726465723c52756e74696d6543616c6c3e3e0000004c5265736572766541737365744465706f7369740801186173736574732502013c5665633c4d756c746941737365743e00011c656666656374732505015c5665633c4f726465723c52756e74696d6543616c6c3e3e0001003454656c65706f727441737365740801186173736574732502013c5665633c4d756c746941737365743e00011c656666656374732505015c5665633c4f726465723c52756e74696d6543616c6c3e3e000200345175657279526573706f6e736508012071756572795f696428010c753634000120726573706f6e736505050120526573706f6e7365000300345472616e7366657241737365740801186173736574732502013c5665633c4d756c746941737365743e000110646573742d0201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574732502013c5665633c4d756c746941737365743e000110646573742d0201344d756c74694c6f636174696f6e00011c65666665637473f90401385665633c4f726465723c28293e3e000500205472616e736163740c012c6f726967696e5f74797065050201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737410010c75363400011063616c6c31050168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b901010c7533320001406d61785f6d6573736167655f73697a65b901010c7533320001306d61785f6361706163697479b901010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b901010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b901010c75333200011873656e646572b901010c753332000124726563697069656e74b901010c7533320009002c52656c6179656446726f6d08010c77686f2d0201344d756c74694c6f636174696f6e00011c6d6573736167652105018c616c6c6f633a3a626f7865643a3a426f783c58636d3c52756e74696d6543616c6c3e3e000a000025050000022905002905100c78636d087630146f72646572144f72646572042c52756e74696d6543616c6c000120104e756c6c000000304465706f73697441737365740801186173736574732502013c5665633c4d756c746941737365743e000110646573742d0201344d756c74694c6f636174696f6e0001004c4465706f7369745265736572766541737365740c01186173736574732502013c5665633c4d756c746941737365743e000110646573742d0201344d756c74694c6f636174696f6e00011c65666665637473f90401385665633c4f726465723c28293e3e0002003445786368616e67654173736574080110676976652502013c5665633c4d756c746941737365743e00011c726563656976652502013c5665633c4d756c746941737365743e0003005c496e6974696174655265736572766557697468647261770c01186173736574732502013c5665633c4d756c746941737365743e00011c726573657276652d0201344d756c74694c6f636174696f6e00011c65666665637473f90401385665633c4f726465723c28293e3e00040040496e69746961746554656c65706f72740c01186173736574732502013c5665633c4d756c746941737365743e000110646573742d0201344d756c74694c6f636174696f6e00011c65666665637473f90401385665633c4f726465723c28293e3e000500305175657279486f6c64696e670c012071756572795f696428010c753634000110646573742d0201344d756c74694c6f636174696f6e0001186173736574732502013c5665633c4d756c746941737365743e00060030427579457865637574696f6e14011066656573290201284d756c7469417373657400011877656967687410010c7536340001106465627410010c75363400013468616c745f6f6e5f6572726f72a40110626f6f6c00010c78636d2d0501545665633c58636d3c52756e74696d6543616c6c3e3e000700002d0500000221050031050c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656430011c5665633c75383e000035050c0c78636d0876310c58636d042c52756e74696d6543616c6c0001343457697468647261774173736574080118617373657473dd01012c4d756c746941737365747300011c656666656374733905015c5665633c4f726465723c52756e74696d6543616c6c3e3e000000545265736572766541737365744465706f7369746564080118617373657473dd01012c4d756c746941737365747300011c656666656374733905015c5665633c4f726465723c52756e74696d6543616c6c3e3e000100585265636569766554656c65706f727465644173736574080118617373657473dd01012c4d756c746941737365747300011c656666656374733905015c5665633c4f726465723c52756e74696d6543616c6c3e3e000200345175657279526573706f6e736508012071756572795f696428010c753634000120726573706f6e736519050120526573706f6e7365000300345472616e736665724173736574080118617373657473dd01012c4d756c746941737365747300012c62656e6566696369617279ad0101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473dd01012c4d756c746941737365747300011064657374ad0101344d756c74694c6f636174696f6e00011c656666656374730d0501385665633c4f726465723c28293e3e000500205472616e736163740c012c6f726967696e5f74797065050201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737410010c75363400011063616c6c31050168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b901010c7533320001406d61785f6d6573736167655f73697a65b901010c7533320001306d61785f6361706163697479b901010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b901010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b901010c75333200011873656e646572b901010c753332000124726563697069656e74b901010c7533320009002c52656c6179656446726f6d08010c77686fb1010154496e746572696f724d756c74694c6f636174696f6e00011c6d6573736167653505018c616c6c6f633a3a626f7865643a3a426f783c58636d3c52756e74696d6543616c6c3e3e000a004053756273637269626556657273696f6e08012071756572795f696428010c75363400014c6d61785f726573706f6e73655f77656967687428010c753634000b0048556e73756273637269626556657273696f6e000c000039050000023d05003d05100c78636d087631146f72646572144f72646572042c52756e74696d6543616c6c000120104e6f6f70000000304465706f73697441737365740c01186173736574730d0201404d756c7469417373657446696c7465720001286d61785f6173736574731c010c75333200012c62656e6566696369617279ad0101344d756c74694c6f636174696f6e0001004c4465706f7369745265736572766541737365741001186173736574730d0201404d756c7469417373657446696c7465720001286d61785f6173736574731c010c75333200011064657374ad0101344d756c74694c6f636174696f6e00011c656666656374730d0501385665633c4f726465723c28293e3e0002003445786368616e67654173736574080110676976650d0201404d756c7469417373657446696c74657200011c72656365697665dd01012c4d756c74694173736574730003005c496e6974696174655265736572766557697468647261770c01186173736574730d0201404d756c7469417373657446696c74657200011c72657365727665ad0101344d756c74694c6f636174696f6e00011c656666656374730d0501385665633c4f726465723c28293e3e00040040496e69746961746554656c65706f72740c01186173736574730d0201404d756c7469417373657446696c74657200011064657374ad0101344d756c74694c6f636174696f6e00011c656666656374730d0501385665633c4f726465723c28293e3e000500305175657279486f6c64696e670c012071756572795f696428010c75363400011064657374ad0101344d756c74694c6f636174696f6e0001186173736574730d0201404d756c7469417373657446696c74657200060030427579457865637574696f6e14011066656573e50101284d756c7469417373657400011877656967687410010c7536340001106465627410010c75363400013468616c745f6f6e5f6572726f72a40110626f6f6c000130696e737472756374696f6e73410501545665633c58636d3c52756e74696d6543616c6c3e3e00070000410500000235050045050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400490501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e000049050000024d05004d050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c00017034576974686472617741737365740400dd01012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400dd01012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400dd01012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f696428011c51756572794964000120726573706f6e7365f9010120526573706f6e73650001286d61785f77656967687428010c753634000300345472616e736665724173736574080118617373657473dd01012c4d756c746941737365747300012c62656e6566696369617279ad0101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473dd01012c4d756c746941737365747300011064657374ad0101344d756c74694c6f636174696f6e00010c78636dd101011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065050201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c31050168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b901010c7533320001406d61785f6d6573736167655f73697a65b901010c7533320001306d61785f6361706163697479b901010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b901010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b901010c75333200011873656e646572b901010c753332000124726563697069656e74b901010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400b1010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f696428011c5175657279496400011064657374ad0101344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f77656967687428010c753634000c00304465706f73697441737365740c01186173736574730d0201404d756c7469417373657446696c7465720001286d61785f617373657473b901010c75333200012c62656e6566696369617279ad0101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365741001186173736574730d0201404d756c7469417373657446696c7465720001286d61785f617373657473b901010c75333200011064657374ad0101344d756c74694c6f636174696f6e00010c78636dd101011c58636d3c28293e000e003445786368616e67654173736574080110676976650d0201404d756c7469417373657446696c74657200011c72656365697665dd01012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c01186173736574730d0201404d756c7469417373657446696c74657200011c72657365727665ad0101344d756c74694c6f636174696f6e00010c78636dd101011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574730d0201404d756c7469417373657446696c74657200011064657374ad0101344d756c74694c6f636174696f6e00010c78636dd101011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f696428011c5175657279496400011064657374ad0101344d756c74694c6f636174696f6e0001186173736574730d0201404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f77656967687428010c75363400120030427579457865637574696f6e08011066656573e50101284d756c746941737365740001307765696768745f6c696d69741902012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204004505014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804004505014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473dd01012c4d756c74694173736574730001187469636b6574ad0101344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f77656967687428010c753634001a0048556e73756273637269626556657273696f6e001b000051050c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c65741043616c6c04045400010448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d697410012458636d576569676874000030905365727669636520612073696e676c65206f766572776569676874206d6573736167652e00c02d20606f726967696e603a204d75737420706173732060457865637574654f7665727765696768744f726967696e602ee82d2060696e646578603a2054686520696e646578206f6620746865206f766572776569676874206d65737361676520746f20736572766963652e1d012d20607765696768745f6c696d6974603a2054686520616d6f756e74206f66207765696768742074686174206d65737361676520657865637574696f6e206d61792074616b652e001c4572726f72733aac2d2060556e6b6e6f776e603a204d657373616765206f662060696e6465786020697320756e6b6e6f776e2e15012d20604f7665724c696d6974603a204d65737361676520657865637574696f6e206d6179207573652067726561746572207468616e20607765696768745f6c696d6974602e001c4576656e74733a8c2d20604f7665727765696768745365727669636564603a204f6e20737563636573732e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e5505101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000059050000028d03005d0500000408610518006105101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540100045300000400f10201185665633c543e000065050c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d62657201102050726f706f73616c0191031c42616c616e6365011801081c4f6e676f696e670400690501c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564a40110626f6f6c00010c656e6410012c426c6f636b4e756d6265720001000069050c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d62657201102050726f706f73616c0191031c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200012070726f706f73616c9103012050726f706f73616c0001247468726573686f6c64940134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c796d05013854616c6c793c42616c616e63653e00006d050c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e6365000071050c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f746573000108184469726563740c0114766f746573750501f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e738105015044656c65676174696f6e733c42616c616e63653e0001147072696f728505017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6e9d030128436f6e76696374696f6e00012c64656c65676174696f6e738105015044656c65676174696f6e733c42616c616e63653e0001147072696f728505017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e000100007505101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540179050453000004007d0501185665633c543e00007905000004081c98007d0500000279050081050c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e6365000085050c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e63650000890500000408910394008d05000004081061050091050c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f7204045400015c2056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7704b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909099505101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454012c045300000400450201185665633c543e00009905084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e6465781c013450726f706f73616c496e6465780001247468726573686f6c641c012c4d656d626572436f756e7400011061796573f10201385665633c4163636f756e7449643e0001106e617973f10201385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d62657200009d050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a105101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454012c045300000400450201185665633c543e0000a5050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a905101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540100045300000400f10201185665633c543e0000ad050c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b105083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e63650000b505101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454011c045300000400010301185665633c543e0000b9050c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c000004001c010c7533320000bd0504184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000c10508346672616d655f737570706f72742050616c6c6574496400000400f501011c5b75383b20385d0000c5050c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900011470496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e04784572726f7220666f72207468652074726561737572792070616c6c65742ec9050c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909cd05101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401e903045300000400d10501185665633c543e0000d105000002e90300d505083870616c6c65745f76657374696e672052656c656173657300010808563000000008563100010000d9050c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742edd05101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401e105045300000400e90501185665633c543e0000e10504184f7074696f6e04045401e5050108104e6f6e6500000010536f6d650400e5050000010000e505084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c0191032c426c6f636b4e756d62657201103450616c6c6574734f726967696e01c503244163636f756e7449640100001401206d617962655f6964cc01304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c9103011043616c6c0001386d617962655f706572696f646963f10301944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696ec503013450616c6c6574734f726967696e0000e905000002e10500ed050c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909f10500000408f5051800f505101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401f905045300000400fd0501185665633c543e0000f905083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501d42c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065d4012450726f78795479706500011464656c617910012c426c6f636b4e756d6265720000fd05000002f90500010600000408050618000506101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540109060453000004000d0601185665633c543e00000906083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e74496401001048617368012c2c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173682c01104861736800011868656967687410012c426c6f636b4e756d62657200000d0600000209060011060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909091506083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f73697419060150284163636f756e7449642c2042616c616e63652900010c6c656e1c010c753332000000245265717565737465640c011c6465706f7369741d0601704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e741c010c75333200010c6c656ea103012c4f7074696f6e3c7533323e000100001906000004080018001d0604184f7074696f6e0404540119060108104e6f6e6500000010536f6d650400190600000100002106000004082c1c002506101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000029060c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909092d060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909093106082c70616c6c65745f746970731c4f70656e54697010244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d62657201101048617368012c001c0118726561736f6e2c01104861736800010c77686f0001244163636f756e74496400011866696e6465720001244163636f756e74496400011c6465706f73697418011c42616c616e6365000118636c6f7365733506014c4f7074696f6e3c426c6f636b4e756d6265723e00011074697073390601645665633c284163636f756e7449642c2042616c616e6365293e00012c66696e646572735f666565a40110626f6f6c0000350604184f7074696f6e04045401100108104e6f6e6500000010536f6d65040010000001000039060000021906003d060c3473705f61726974686d65746963287065725f7468696e67731c50657263656e74000004000801087538000041060c2c70616c6c65745f746970731870616c6c6574144572726f7208045400044900011830526561736f6e546f6f4269670000048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e30416c72656164794b6e6f776e00010488546865207469702077617320616c726561647920666f756e642f737461727465642e28556e6b6e6f776e5469700002046054686520746970206861736820697320756e6b6e6f776e2e244e6f7446696e6465720003041d01546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e245374696c6c4f70656e0004042901546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e245072656d61747572650005043101546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090945060c1463747970652c63747970655f656e747279284374797065456e747279081c43726561746f7201002c426c6f636b4e756d62657201100008011c63726561746f7200011c43726561746f72000128637265617465645f617410012c426c6f636b4e756d626572000049060c1463747970651870616c6c6574144572726f7204045400010c3443547970654e6f74466f756e64000004985468657265206973206e6f20435479706520776974682074686520676976656e20686173682e484354797065416c72656164794578697374730001046454686520435479706520616c7265616479206578697374732e3c556e61626c65546f506179466565730002040d0154686520706179696e67206163636f756e742077617320756e61626c6520746f2070617920746865206665657320666f72206372656174696e6720612063747970652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909094d060c2c6174746573746174696f6e306174746573746174696f6e73484174746573746174696f6e44657461696c73040454000014012863747970655f686173682c01384374797065486173684f663c543e000120617474657374657200013441747465737465724f663c543e000140617574686f72697a6174696f6e5f6964f001704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e00011c7265766f6b6564a40110626f6f6c00011c6465706f736974510601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e000051060c306b696c745f737570706f72741c6465706f7369741c4465706f736974081c4163636f756e7401001c42616c616e63650118000801146f776e657200011c4163636f756e74000118616d6f756e7418011c42616c616e63650000550600000408f42c0059060c2c6174746573746174696f6e1870616c6c6574144572726f720404540001183c416c726561647941747465737465640000080901546865726520697320616c726561647920616e206174746573746174696f6e2077697468207468652073616d6520636c61696d20686173682073746f726564206f6e18636861696e2e38416c72656164795265766f6b6564000104a4546865206174746573746174696f6e2068617320616c7265616479206265656e207265766f6b65642e4c4174746573746174696f6e4e6f74466f756e64000204c04e6f206174746573746174696f6e206f6e20636861696e206d61746368696e672074686520636c61696d20686173682e3443547970654d69736d61746368000308fc546865206174746573746174696f6e20435479706520646f6573206e6f74206d61746368207468652043547970652073706563696669656420696e207468656864656c65676174696f6e2068696572617263687920726f6f742e30556e617574686f72697a6564000404f05468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f206368616e676520746865206174746573746174696f6e2e804d617844656c6567617465644174746573746174696f6e73457863656564656400050cf4546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732068617320616c7265616479206265656e05017265616368656420666f722074686520636f72726573706f6e64696e672064656c65676174696f6e2069642073756368207468617420616e6f74686572206f6e654063616e6e6f742062652061646465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909095d060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368793844656c65676174696f6e4e6f646504045400001401446869657261726368795f726f6f745f69642c015444656c65676174696f6e4e6f646549644f663c543e000118706172656e74990101744f7074696f6e3c44656c65676174696f6e4e6f646549644f663c543e3e0001206368696c6472656e610601d8426f756e64656442547265655365743c44656c65676174696f6e4e6f646549644f663c543e2c20543a3a4d61784368696c6472656e3e00011c64657461696c736906015044656c65676174696f6e44657461696c733c543e00011c6465706f736974510601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e00006106101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454012c0453000004006506012c42547265655365743c543e0000650604204254726565536574040454012c000400450200000069060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368794444656c65676174696f6e44657461696c7304045400000c01146f776e657200014044656c656761746f7249644f663c543e00011c7265766f6b6564a40110626f6f6c00012c7065726d697373696f6e73fc012c5065726d697373696f6e7300006d060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368796844656c65676174696f6e48696572617263687944657461696c73040454000004012863747970655f686173682c01384374797065486173684f663c543e000071060c2864656c65676174696f6e1870616c6c6574144572726f720404540001585c44656c65676174696f6e416c72656164794578697374730000041101546865726520697320616c726561647920612064656c65676174696f6e206e6f64652077697468207468652073616d652049442073746f726564206f6e20636861696e2e60496e76616c696444656c65676174655369676e617475726500010805015468652064656c65676174652773207369676e617475726520666f72207468652064656c65676174696f6e206372656174696f6e206f7065726174696f6e20697320696e76616c69642e4844656c65676174696f6e4e6f74466f756e64000204c04e6f2064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e4044656c65676174654e6f74466f756e64000304b84e6f2064656c656761746520776974682074686520676976656e2049442073746f726564206f6e20636861696e2e58486965726172636879416c7265616479457869737473000404f8546865726520697320616c72656164792061206869657261726368792077697468207468652073616d652049442073746f726564206f6e20636861696e2e444869657261726368794e6f74466f756e64000504bc4e6f2068696572617263687920776974682074686520676976656e2049442073746f726564206f6e20636861696e2e544d617853656172636844657074685265616368656400060409014d6178206e756d626572206f66206e6f64657320636865636b656420776974686f757420766572696679696e672074686520676976656e20636f6e646974696f6e2e684e6f744f776e65724f66506172656e7444656c65676174696f6e000708f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6ef462656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20706172656e74206e6f64652e744e6f744f776e65724f6644656c65676174696f6e486965726172636879000808f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6eec62656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20726f6f74206e6f64652e60506172656e7444656c65676174696f6e4e6f74466f756e64000904dc4e6f20706172656e742064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e5c506172656e7444656c65676174696f6e5265766f6b6564000a04c854686520706172656e742064656c65676174696f6e206861732070726576696f75736c79206265656e207265766f6b65642e58556e617574686f72697a65645265766f636174696f6e000b04fc5468652064656c65676174696f6e207265766f6b6572206973206e6f7420616c6c6f77656420746f207265766f6b65207468652064656c65676174696f6e2e4c556e617574686f72697a656452656d6f76616c000c04ec5468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f2072656d6f7665207468652064656c65676174696f6e2e58556e617574686f72697a656444656c65676174696f6e000d04fc5468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f20637265617465207468652064656c65676174696f6e2e3041636365737344656e696564000e04f0546865206f7065726174696f6e207761736e277420616c6c6f7765642062656361757365206f6620696e73756666696369656e74207269676874732e6045786365656465645265766f636174696f6e426f756e6473000f080d014d6178206e756d626572206f66207265766f636174696f6e7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7238746865206f7065726174696f6e2e54457863656564656452656d6f76616c426f756e647300100811014d6178206e756d626572206f662072656d6f76616c7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7220746865286f7065726174696f6e2e584d61785265766f636174696f6e73546f6f4c61726765001104f8546865206d6178206e756d626572206f66207265766f636174696f6e206578636565647320746865206c696d697420666f72207468652070616c6c65742e4c4d617852656d6f76616c73546f6f4c61726765001204f0546865206d6178206e756d626572206f662072656d6f76616c73206578636565647320746865206c696d697420666f72207468652070616c6c65742e5c4d6178506172656e74436865636b73546f6f4c617267650013040501546865206d6178206e756d626572206f6620706172656e7420636865636b73206578636565647320746865206c696d697420666f72207468652070616c6c65742e34496e7465726e616c4572726f72001404f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e4c4d61784368696c6472656e4578636565646564001508dc546865206d6178206e756d626572206f6620616c6c206368696c6472656e20686173206265656e207265616368656420666f722074686578636f72726573706f6e64696e672064656c65676174696f6e206e6f64652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090975060c0c6469642c6469645f64657461696c732844696444657461696c7304045400001c014861757468656e7469636174696f6e5f6b65792c01284b657949644f663c543e0001486b65795f61677265656d656e745f6b657973790601604469644b657941677265656d656e744b65795365743c543e00013864656c65676174696f6e5f6b6579990101484f7074696f6e3c4b657949644f663c543e3e00013c6174746573746174696f6e5f6b6579990101484f7074696f6e3c4b657949644f663c543e3e00012c7075626c69635f6b6579737d0601484469645075626c69634b65794d61703c543e00013c6c6173745f74785f636f756e74657210010c75363400011c6465706f736974510601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e00007906101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454012c0453000004006506012c42547265655365743c543e00007d06101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b012c04560181060453000004008906013842547265654d61703c4b2c20563e000081060c0c6469642c6469645f64657461696c734c4469645075626c69634b657944657461696c73042c426c6f636b4e756d62657201100008010c6b6579850601304469645075626c69634b6579000130626c6f636b5f6e756d62657210012c426c6f636b4e756d626572000085060c0c6469642c6469645f64657461696c73304469645075626c69634b6579000108545075626c6963566572696669636174696f6e4b6579040059040148446964566572696669636174696f6e4b65790000004c5075626c6963456e6372797074696f6e4b6579040049040140446964456e6372797074696f6e4b6579000100008906042042547265654d617008044b012c04560181060004008d060000008d060000029106009106000004082c8106009506000004080071040099060c0c6469641870616c6c6574144572726f7204045400016c58496e76616c69645369676e6174757265466f726d6174000008050154686520444944206f7065726174696f6e207369676e6174757265206973206e6f7420696e2074686520666f726d61742074686520766572696669636174696f6e306b657920657870656374732e40496e76616c69645369676e6174757265000108f854686520444944206f7065726174696f6e207369676e617475726520697320696e76616c696420666f7220746865207061796c6f616420616e642074686568766572696669636174696f6e206b65792070726f76696465642e44446964416c726561647950726573656e74000204f85468652044494420776974682074686520676976656e206964656e74696669657220697320616c72656164792070726573656e74206f6e20636861696e2e344469644e6f7450726573656e74000304d44e6f2044494420776974682074686520676976656e206964656e7469666965722069732070726573656e74206f6e20636861696e2e64566572696669636174696f6e4b65794e6f7450726573656e7400040809014f6e65206f72206d6f726520766572696669636174696f6e206b657973207265666572656e63656420617265206e6f742073746f72656420696e2074686520736574546f6620766572696669636174696f6e206b6579732e30496e76616c69644e6f6e6365000504090154686520444944206f7065726174696f6e206e6f6e6365206973206e6f7420657175616c20746f207468652063757272656e7420444944206e6f6e6365202b20312e7c556e737570706f72746564446964417574686f72697a6174696f6e43616c6c000604e05468652063616c6c65642065787472696e73696320646f6573206e6f7420737570706f72742044494420617574686f7269736174696f6e2e6c496e76616c6964446964417574686f72697a6174696f6e43616c6c000708dc5468652063616c6c2068616420706172616d6574657273207468617420636f6e666c696374656420776974682065616368206f74686572406f72207765726520696e76616c69642e804d61784b657941677265656d656e744b6579734c696d697445786365656465640008080d0141206e756d626572206f66206e6577206b65792061677265656d656e74206b6579732067726561746572207468616e20746865206d6178696d756d20616c6c6f77656448686173206265656e2070726f76696465642e6c4d61785075626c69634b65797350657244696445786365656465640009080501546865206d6178696d756d206e756d626572206f66207075626c6963206b65797320666f72207468697320444944206b6579206964656e74696669657220686173346265656e20726561636865642e804d6178546f74616c4b657941677265656d656e744b6579734578636565646564000a080501546865206d6178696d756d206e756d626572206f66206b65792061677265656d656e747320686173206265656e207265616368656420666f722074686520444944207375626a6563742e304261644469644f726967696e000b04bc546865204449442063616c6c20776173207375626d6974746564206279207468652077726f6e67206163636f756e74485472616e73616374696f6e45787069726564000c040d0154686520626c6f636b206e756d6265722070726f766964656420696e2061204449442d617574686f72697a6564206f7065726174696f6e20697320696e76616c69642e44446964416c726561647944656c65746564000d04b0546865204449442068617320616c7265616479206265656e2070726576696f75736c792064656c657465642e444e6f744f776e65724f664465706f736974000e04fc4f6e6c7920746865206f776e6572206f6620746865206465706f7369742063616e207265636c61696d206974732072657365727665642062616c616e63652e3c556e61626c65546f50617946656573000f04f0546865206f726967696e20697320756e61626c6520746f207265736572766520746865206465706f73697420616e642070617920746865206665652e844d61784e756d6265724f66536572766963657350657244696445786365656465640010041101546865206d6178696d756d206e756d626572206f66207365727669636520656e64706f696e747320666f7220612044494420686173206265656e2065786365656465642e684d61785365727669636549644c656e6774684578636565646564001104f0546865207365727669636520656e64706f696e7420494420657863656564656420746865206d6178696d756d20616c6c6f776564206c656e6774682e704d617853657276696365547970654c656e6774684578636565646564001208f84f6e65206f6620746865207365727669636520656e64706f696e7420747970657320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e884d61784e756d6265724f665479706573506572536572766963654578636565646564001308ec546865206d6178696d756d206e756d626572206f6620747970657320666f722061207365727669636520656e64706f696e7420686173206265656e2465786365656465642e6c4d61785365727669636555726c4c656e6774684578636565646564001408f44f6e65206f6620746865207365727669636520656e64706f696e742055524c7320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e844d61784e756d6265724f6655726c735065725365727669636545786365656465640015041101546865206d6178696d756d206e756d626572206f662055524c7320666f722061207365727669636520656e64706f696e7420686173206265656e2065786365656465642e5453657276696365416c726561647950726573656e7400160411014120736572766963652077697468207468652070726f766964656420494420697320616c72656164792070726573656e7420666f722074686520676976656e204449442e44536572766963654e6f7450726573656e7400170409014120736572766963652077697468207468652070726f7669646564204944206973206e6f742070726573656e7420756e6465722074686520676976656e204449442e58496e76616c696453657276696365456e636f64696e6700180409014f6e65206f6620746865207365727669636520656e64706f696e742064657461696c7320636f6e7461696e73206e6f6e2d415343494920636861726163746572732e7053746f726564456e64706f696e7473436f756e74546f6f4c617267650019080d01546865206e756d626572206f66207365727669636520656e64706f696e74732073746f72656420756e6465722074686520444944206973206c6172676572207468616e88746865206e756d626572206f6620656e64706f696e747320746f2064656c6574652e34496e7465726e616c4572726f72001a04f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909099d060c4470616c6c65745f6469645f6c6f6f6b757044636f6e6e656374696f6e5f7265636f726440436f6e6e656374696f6e5265636f72640c344469644964656e74696669657201001c4163636f756e7401001c42616c616e636501180008010c6469640001344469644964656e74696669657200011c6465706f736974510601644465706f7369743c4163636f756e742c2042616c616e63653e0000a1060000040800090100a5060c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144572726f720404540001104c4173736f63696174696f6e4e6f74466f756e640000047c546865206173736f63696174696f6e20646f6573206e6f742065786973742e344e6f74417574686f72697a65640001081101546865206f726967696e20776173206e6f7420616c6c6f77656420746f206d616e61676520746865206173736f63696174696f6e206265747765656e20746865204449444c616e6420746865206163636f756e742049442e344f7574646174656450726f6f66000204b454686520737570706c6965642070726f6f66206f66206f776e65727368697020776173206f757464617465642e44496e73756666696369656e7446756e64730003081101546865206163636f756e742068617320696e73756666696369656e742066756e647320616e642063616e277420706179207468652066656573206f72207265736572766530746865206465706f7369742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a9060c4470616c6c65745f776562335f6e616d657324776562335f6e616d6544576562334e616d654f776e6572736869700c144f776e657201001c4465706f7369740151062c426c6f636b4e756d6265720110000c01146f776e65720001144f776e6572000128636c61696d65645f617410012c426c6f636b4e756d62657200011c6465706f7369745106011c4465706f7369740000ad060c4470616c6c65745f776562335f6e616d65731870616c6c6574144572726f7204045400013444496e73756666696369656e7446756e64730000040d01546865207478207375626d697474657220646f6573206e6f74206861766520656e6f7567682066756e647320746f2070617920666f7220746865206465706f7369742e58576562334e616d65416c7265616479436c61696d6564000104dc54686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c7920636c61696d65642e40576562334e616d654e6f74466f756e640002048854686520737065636966696564206e616d6520646f6573206e6f742065786973742e484f776e6572416c7265616479457869737473000304a054686520737065636966696564206f776e657220616c7265616479206f776e732061206e616d652e344f776e65724e6f74466f756e64000404ac54686520737065636966696564206f776e657220646f6573206e6f74206f776e20616e79206e616d65732e38576562334e616d6542616e6e6564000508ec54686520737065636966696564206e616d6520686173206265656e2062616e6e656420616e642063616e6e6f7420626520696e746572616374656414776974682e44576562334e616d654e6f7442616e6e6564000604ac54686520737065636966696564206e616d65206973206e6f742063757272656e746c792062616e6e65642e54576562334e616d65416c726561647942616e6e6564000704d854686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c792062616e6e65642e344e6f74417574686f72697a6564000804cc546865206163746f722063616e6e6f7420706572666f726d65642074686520737065636966696564206f7065726174696f6e2e40576562334e616d65546f6f53686f7274000904a841206e616d65207468617420697320746f6f2073686f7274206973206265696e6720636c61696d65642e3c576562334e616d65546f6f4c6f6e67000a04a441206e616d65207468617420697320746f6f206c6f6e67206973206265696e6720636c61696d65642e60496e76616c6964576562334e616d65436861726163746572000b04f441206e616d65207468617420636f6e7461696e73206e6f7420616c6c6f7765642063686172616374657273206973206265696e6720636c61696d65642e30556e617574686f72697a6564000c04d0546865206f726967696e20776173206e6f7420617574686f72697a656420746f20706572666f726d207468617420616374696f6e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b1060000040825012c00b5060c487075626c69635f63726564656e7469616c732c63726564656e7469616c733c43726564656e7469616c456e7472791824435479706548617368012c20417474657374657201002c426c6f636b4e756d6265720110244163636f756e74496401001c42616c616e636501183c417574686f72697a6174696f6e496401f40018012863747970655f686173682c01244354797065486173680001206174746573746572000120417474657374657200011c7265766f6b6564a40110626f6f6c000130626c6f636b5f6e756d62657210012c426c6f636b4e756d62657200011c6465706f7369745106016c4465706f7369743c4163636f756e7449642c2042616c616e63653e000140617574686f72697a6174696f6e5f6964f0015c4f7074696f6e3c417574686f72697a6174696f6e49643e0000b9060c487075626c69635f63726564656e7469616c731870616c6c6574144572726f720404540001185c43726564656e7469616c416c7265616479497373756564000008f8412063726564656e7469616c2077697468207468652073616d6520726f6f7420686173682068617320616c72656164792069737375656420746f2074686548737065636966696564207375626a6563742e4843726564656e7469616c4e6f74466f756e6400010805014e6f2063726564656e7469616c2077697468207468652073706563696669656420726f6f74206861736820686173206265656e2069737375656420746f2074686548737065636966696564207375626a6563742e3c556e61626c65546f50617946656573000204d44e6f7420656e6f75676820746f6b656e7320746f2070617920666f72207468652066656573206f7220746865206465706f7369742e30496e76616c6964496e707574000304805468652063726564656e7469616c20696e70757420697320696e76616c69642e30556e617574686f72697a6564000404e05468652063616c6c6572206973206e6f7420617574686f72697a656420746f20706572666f726d656420746865206f7065726174696f6e2e34496e7465726e616c4572726f72000508f443617463682d616c6c20666f7220616e79206f74686572206572726f727320746861742073686f756c64206e6f742068617070656e2c207965742069742468617070656e65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909bd0604184f7074696f6e04045401c1060108104e6f6e6500000010536f6d650400c1060000010000c1060c4c706f6c6b61646f745f7072696d69746976657308763248557067726164655265737472696374696f6e0001041c50726573656e7400000000c5060c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f686561642c014472656c61795f636861696e3a3a4861736800016472656c61795f64697370617463685f71756575655f73697a65c9060128287533322c2075333229000140696e67726573735f6368616e6e656c73cd0601885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c73cd0601885665633c285061726149642c20416272696467656448726d704368616e6e656c293e0000c906000004081c1c00cd06000002d10600d10600000408a101d50600d5060c4c706f6c6b61646f745f7072696d6974697665730876324c416272696467656448726d704368616e6e656c00001801306d61785f63617061636974791c010c7533320001386d61785f746f74616c5f73697a651c010c7533320001406d61785f6d6573736167655f73697a651c010c7533320001246d73675f636f756e741c010c753332000128746f74616c5f73697a651c010c7533320001206d71635f68656164990101304f7074696f6e3c486173683e0000d9060c4c706f6c6b61646f745f7072696d697469766573087632644162726964676564486f7374436f6e66696775726174696f6e00002401346d61785f636f64655f73697a651c010c7533320001486d61785f686561645f646174615f73697a651c010c7533320001586d61785f7570776172645f71756575655f636f756e741c010c7533320001546d61785f7570776172645f71756575655f73697a651c010c75333200015c6d61785f7570776172645f6d6573736167655f73697a651c010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e6469646174651c010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e6469646174651c010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e1c012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c61791c012c426c6f636b4e756d6265720000dd06089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e000004002c012452656c6179486173680000e106042042547265654d617008044b01a101045601dd06000400e506000000e506000002e90600e90600000408a101dd0600ed06000002f10600f1060860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401a10100080124726563697069656e74a101010849640001106461746130015073705f7374643a3a7665633a3a5665633c75383e0000f5060c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041501417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e675050726f686962697465644279506f6c6b61646f740001044901506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733877696c6c696e6720746f2072756e6856616c69646174696f6e446174614e6f74417661696c61626c65000304190154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404250154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909f906000002fd0600fd06086463756d756c75735f70616c6c65745f78636d705f717565756554496e626f756e644368616e6e656c44657461696c7300000c011873656e646572a1010118506172614964000114737461746501070130496e626f756e6453746174650001406d6573736167655f6d65746164617461050701a85665633c2852656c6179426c6f636b4e756d6265722c2058636d704d657373616765466f726d6174293e00000107086463756d756c75735f70616c6c65745f78636d705f717565756530496e626f756e645374617465000108084f6b0000002453757370656e6465640001000005070000020907000907000004081c0d07000d070c48706f6c6b61646f745f70617261636861696e287072696d6974697665734458636d704d657373616765466f726d617400010c60436f6e636174656e6174656456657273696f6e656458636d0000005c436f6e636174656e61746564456e636f646564426c6f620001001c5369676e616c7300020000110700000408a1011c0015070000021907001907086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74a101011850617261496400011473746174651d0701344f7574626f756e6453746174650001347369676e616c735f6578697374a40110626f6f6c00012c66697273745f696e646578d8010c7531360001286c6173745f696e646578d8010c75313600001d07086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000210700000408a101d8002507086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e66696744617461000018014473757370656e645f7468726573686f6c641c010c75333200013864726f705f7468726573686f6c641c010c753332000140726573756d655f7468726573686f6c641c010c7533320001407468726573686f6c645f7765696768742401185765696768740001547765696768745f72657374726963745f646563617924011857656967687400016878636d705f6d61785f696e646976696475616c5f776569676874240118576569676874000029070000040ca1011c30002d070c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f72040454000114304661696c6564546f53656e640000046c4661696c656420746f2073656e642058434d206d6573736167652e3042616458636d4f726967696e0001043c4261642058434d206f726967696e2e1842616458636d000204344261642058434d20646174612e484261644f766572776569676874496e64657800030454426164206f76657277656967687420696e6465782e3c5765696768744f7665724c696d6974000404f850726f76696465642077656967687420697320706f737369626c79206e6f7420656e6f75676820746f206578656375746520746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090931070c2870616c6c65745f78636d1870616c6c6574144572726f720404540001342c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108610154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652e2050657268617073a861206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090935070c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144572726f7204045400010004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909093907086063756d756c75735f70616c6c65745f646d705f717565756528436f6e6669674461746100000401386d61785f696e646976696475616c24011857656967687400003d07086063756d756c75735f70616c6c65745f646d705f71756575653450616765496e6465784461746100000c0128626567696e5f757365641c012c50616765436f756e746572000120656e645f757365641c012c50616765436f756e7465720001406f7665727765696768745f636f756e7410013c4f766572776569676874496e646578000041070000024507004507000004081c300049070c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144572726f720404540001081c556e6b6e6f776e0000048c546865206d65737361676520696e64657820676976656e20697320756e6b6e6f776e2e244f7665724c696d6974000104310154686520616d6f756e74206f662077656967687420676976656e20697320706f737369626c79206e6f7420656e6f75676820666f7220657865637574696e6720746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909094d07102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301a5021043616c6c019503245369676e617475726501990414457874726101510700040030000000510700000420550759075d07610765076d077107750700550710306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000590710306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e040454000000005d0710306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000610710306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000650710306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004006907010c45726100006907102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff00006d0710306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400280120543a3a496e6465780000710710306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000007507086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400c501013042616c616e63654f663c543e0000941853797374656d011853797374656d401c4163636f756e7401010402000c510100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e7400001c040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010020180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e00001c040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010405102c8000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e73696344617461010104051c300400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d626572010010200000000000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002c80000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010034040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004404001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e7401001c100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104022c49020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d655570677261646500004d0204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100a40400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100a40400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500004102040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01550201501830426c6f636b5765696768747365026d01e2817a5500070088526a7402004001c2e49817000107d0389ca54b0200d000010700e6bd4f570200f000010000c2e49817000107d0da30c0680200200101070088526a7402004001010700a2941a1d02005000c2e498170000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e67746875023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e7410206009000000000000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e2044625765696768747d024040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e81026103386b696c742d7370697269746e6574386b696c742d7370697269746e657401000000f82a00000000000038df6acb689907609b0400000037e397fc7c91f5e401000000bc9d89904f5b923f0100000037c8bb1350a9a2a802000000f3ff14d5ab5270590200000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000dd718d5cc53262d401000000ea93e3f16f3d69620200000026609555c065660302000000a47b7d544994c99b0100000045bfba51a310b2230100000004000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e2853533538507265666978d808260014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e019102006052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100950204000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e00000000012454696d657374616d70012454696d657374616d70080c4e6f7701001020000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100a4040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0199020004344d696e696d756d506572696f6410207017000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00021c496e6469636573011c496e646963657304204163636f756e747300010402109d020400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e01a1020174041c4465706f736974184000b47cf328350000000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e01ad02052042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200b102040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200c102040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e01cd0201780c484578697374656e7469616c4465706f736974184000a0724e18090000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b731c103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d617852657365727665731c1032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01d10206485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100d50240000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100d90204000000018004604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00071041757261011041757261082c417574686f7269746965730100dd020400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f740100ed022000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000171c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100f1020400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e64657801001c100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e6765640100a4040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b6579730100f5020400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010001030400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b6579730001040500fd020400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405050300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e010d03018400011103164050617261636861696e5374616b696e67014050617261636861696e5374616b696e6740544d617853656c656374656443616e6469646174657301001c100000000004090120546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c6563746564206174206561636820726f756e642e14526f756e640100150350000000000000000000000000140000000000000004e82043757272656e7420726f756e64206e756d62657220616e64206e65787420726f756e64207363686564756c6564207472616e736974696f6e2e384c61737444656c65676174696f6e01010405001903200000000000000000140d012044656c65676174696f6e20696e666f726d6174696f6e20666f7220746865206c61746573742073657373696f6e20696e20776869636820612064656c656761746f722c2064656c6567617465642e000501204974206d6170732066726f6d20616e206163636f756e7420746f20746865206e756d626572206f662064656c65676174696f6e7320696e20746865206c617374982073657373696f6e20696e2077686963682074686579202872652d2964656c6567617465642e3844656c656761746f72537461746500010405001d0304000c802044656c65676174696f6e207374616b696e6720696e666f726d6174696f6e2e00cc204974206d6170732066726f6d20616e206163636f756e7420746f206974732064656c65676174696f6e2064657461696c732e3443616e646964617465506f6f6c00010405002103040010a420546865207374616b696e6720696e666f726d6174696f6e20666f7220612063616e6469646174652e00b0204974206d6170732066726f6d20616e206163636f756e7420746f2069747320696e666f726d6174696f6e2eb8204d6f72656f7665722c20697420636f756e747320746865206e756d626572206f662063616e646964617465732e5c436f756e746572466f7243616e646964617465506f6f6c01001c100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617048546f74616c436f6c6c61746f725374616b650100350380000000000000000000000000000000000000000000000000000000000000000014f420546f74616c2066756e6473206c6f636b656420746f206261636b207468652063757272656e746c792073656c656374656420636f6c6c61746f72732ed0205468652073756d206f6620616c6c20636f6c6c61746f7220616e642074686569722064656c656761746f72207374616b65732e002101204e6f74653a20546865726520617265206d6f72652066756e6473206c6f636b656420627920746869732070616c6c65742c2073696e636520746865206261636b696e6720666f720901206e6f6e20636f6c6c6174696e672063616e64696461746573206973206e6f7420696e636c7564656420696e205b546f74616c436f6c6c61746f725374616b655d2e34546f7043616e6469646174657301003903040028e82054686520636f6c6c61746f722063616e64696461746573207769746820746865206869676865737420616d6f756e74206f66207374616b652e00190120456163682074696d6520746865207374616b65206f66206120636f6c6c61746f7220697320696e637265617365642c20697420697320636865636b65642077686574686572050120746869732070757368657320616e6f746865722063616e646964617465206f7574206f6620746865206c6973742e205768656e20746865207374616b652069732101207265647563656420686f77657665722c206974206973206e6f7420636865636b656420696620616e6f746865722063616e64696461746520686173206d6f7265207374616b652c11012073696e6365207468697320776f756c64207265717569726520697465726174696e67206f7665722074686520656e74697265205b43616e646964617465506f6f6c5d2e001501205468657265206d75737420616c77617973206265206d6f72652063616e64696461746573207468616e205b4d617853656c656374656443616e646964617465735d20736f0d012074686174206120636f6c6c61746f722063616e2064726f70206f7574206f662074686520636f6c6c61746f7220736574206279207265647563696e672074686569721c207374616b652e3c496e666c6174696f6e436f6e66696701004103c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046420496e666c6174696f6e20636f6e66696775726174696f6e2e24556e7374616b696e6701010405004d0304001088205468652066756e64732077616974696e6720746f20626520756e7374616b65642e001d01204974206d6170732066726f6d206163636f756e747320746f20616c6c207468652066756e64732061646472657373656420746f207468656d20696e20746865206675747572652020626c6f636b732e644d6178436f6c6c61746f7243616e6469646174655374616b65010018400000000000000000000000000000000004cc20546865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e6469646174652063616e207374616b652e4c4c617374526577617264526564756374696f6e010010200000000000000000140d0120546865207965617220696e20776869636820746865206c617374206175746f6d6174696320726564756374696f6e206f66207468652072657761726420726174657328206f636375727265642e00250120497420737461727473206174207a65726f2061742067656e6573697320616e6420696e6372656d656e7473206279206f6e6520657665727920424c4f434b535f5045525f5945415234206d616e7920626c6f636b732e38426c6f636b73417574686f726564010104050010200000000000000000080d0120546865206e756d626572206f6620617574686f72656420626c6f636b7320666f7220636f6c6c61746f72732e20497420697320757064617465642076696120746865b020606e6f74655f617574686f726020686f6f6b207768656e20617574686f72696e67206120626c6f636b202e38426c6f636b73526577617264656401010405001020000000000000000024210120546865206e756d626572206f6620626c6f636b7320666f7220776869636820726577617264732068617665206265656e20636c61696d656420627920616e20616464726573732e00190120466f7220636f6c6c61746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f7265642e2049742069732075706461746564207768656ecc20696e6372656d656e74696e6720636f6c6c61746f7220726577617264732c20656974686572207768656e2063616c6c696e67e02060696e635f636f6c6c61746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e00250120466f722064656c656761746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f726564206f662074686520636f6c6c61746f722e497420697305012075706461746564207768656e20696e6372656d656e74696e672064656c656761746f7220726577617264732c20656974686572207768656e2063616c6c696e67e42060696e635f64656c656761746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e1c5265776172647301010405001840000000000000000000000000000000000c01012054686520616363756d756c61746564207265776172647320666f7220636f6c6c61746f722063616e6469646174657320616e642064656c656761746f72732e001101204974206d6170732066726f6d206163636f756e747320746f20746865697220746f74616c20726577617264732073696e636520746865206c617374207061796f75742e34466f7263654e6577526f756e640100a4040000015d0301883c444d696e426c6f636b73506572526f756e6410202c0100000000000004d4204d696e696d756d206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e64732063616e206c6173742e5444656661756c74426c6f636b73506572526f756e641020580200000000000008fc2044656661756c74206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e6473206c6173742c2061732073657420696e207468655c2067656e6573697320636f6e66696775726174696f6e2e345374616b654475726174696f6e1020e0c40000000000000c0501204e756d626572206f6620626c6f636b7320666f7220776869636820756e7374616b65642062616c616e63652077696c6c207374696c6c206265206c6f636b6564f0206265666f72652069742063616e20626520756e6c6f636b6564206279206163746976656c792063616c6c696e67207468652065787472696e7369634c2060756e6c6f636b5f756e7374616b6564602e3845786974517565756544656c61791c1002000000080901204e756d626572206f6620726f756e6473206120636f6c6c61746f722068617320746f207374617920616374697665206166746572207375626d697474696e672061c4207265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e304d696e436f6c6c61746f72731c1010000000080d01204d696e696d756d206e756d626572206f6620636f6c6c61746f72732073656c65637465642066726f6d2074686520736574206f662063616e64696461746573206174602065766572792076616c69646174696f6e20726f756e642e504d696e5265717569726564436f6c6c61746f72731c1004000000081101204d696e696d756d206e756d626572206f6620636f6c6c61746f72732077686963682063616e6e6f74206c6561766520746865206e6574776f726b2069662074686572653c20617265206e6f206f74686572732e584d617844656c65676174696f6e73506572526f756e641c1001000000140101204d6178696d756d206e756d626572206f662064656c65676174696f6e732077686963682063616e206265206d6164652077697468696e207468652073616d651c20726f756e642e000d01204e4f54453a20546f2070726576656e742072652d64656c65676174696f6e2d7265776172642061747461636b732c2077652073686f756c64206b65657020746869732c20746f206265206f6e652e604d617844656c656761746f7273506572436f6c6c61746f721c102300000004e4204d6178696d756d206e756d626572206f662064656c656761746f727320612073696e676c6520636f6c6c61746f722063616e20686176652e404d6178546f7043616e646964617465731c104b00000004a0204d6178696d756d2073697a65206f662074686520746f702063616e64696461746573207365742e404d696e436f6c6c61746f725374616b6518400000e8890423c78a0000000000000000080901204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520656c65637465642061732076616c696461746f723420666f72206120726f756e642e644d696e436f6c6c61746f7243616e6469646174655374616b6518400000e8890423c78a0000000000000000080501204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520616464656420746f2074686520736574206f66302063616e646964617465732e444d696e44656c656761746f725374616b651840000082dfe40d4700000000000000000004f8204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f206265636f6d6520612064656c656761746f722e484d6178556e7374616b6552657175657374731c100a00000028e8204d6178206e756d626572206f6620636f6e63757272656e742061637469766520756e7374616b696e67207265717565737473206265666f72652c20756e6c6f636b696e672e001501204e4f54453a20546f2070726f7465637420616761696e737420697272656d6f766162696c697479206f6620612063616e646964617465206f722064656c656761746f722cf4207765206f6e6c7920616c6c6f7720666f72204d6178556e7374616b655265717565737473202d2031206d616e79206d616e75616c20756e7374616b6501012072657175657374732e20546865206c617374206f6e6520736572766573206173206120706c616365686f6c64657220666f7220746865206361736573206f66f02063616c6c696e672065697468657220606b69636b5f64656c656761746f72602c20666f7263655f72656d6f76655f63616e64696461746560206f7209012060657865637574655f6c656176655f63616e64696461746573602e204f74686572776973652c2061207573657220636f756c64206d6178206f75742074686569720d0120756e7374616b6520726571756573747320616e642070726576656e74207468656d73656c7665732066726f6d206265696e67206b69636b65642066726f6d20746865f020736574206f662063616e646964617465732f64656c656761746f727320756e74696c207468657920756e6c6f636b2074686569722066756e64732e484e6574776f726b5265776172645374617274102048a3c800000000000c110120546865207374617274696e6720626c6f636b206e756d62657220666f7220746865206e6574776f726b20726577617264732e204f6e6365207468652063757272656e74090120626c6f636b206e756d626572206578636565647320746869732073746172742c207468652062656e65666963696172792077696c6c2072656365697665207468658420636f6e666967757265642072657761726420696e206561636820626c6f636b2e444e6574776f726b526577617264526174658c2000008a5d784563010c0d0120546865207261746520696e2070657263656e7420666f7220746865206e6574776f726b207265776172647320776869636820617265206261736564206f6e207468650901206d6178696d756d206e756d626572206f6620636f6c6c61746f727320616e6420746865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e1c207374616b652e0161031528417574686f72736869700128417574686f72736869700c18556e636c6573010065030400041c20556e636c657318417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e30446964536574556e636c65730100a4040004bc205768657468657220756e636c6573207765726520616c72656164792073657420696e207468697320626c6f636b2e017503000440556e636c6547656e65726174696f6e73102000000000000000000ccc20546865206e756d626572206f6620626c6f636b73206261636b2077652073686f756c642061636365707420756e636c65732ee42054686973206d65616e7320746861742077652077696c6c206465616c207769746820756e636c652d706172656e7473207468617420617265942060556e636c6547656e65726174696f6e73202b203160206265666f726520606e6f77602e018503141c41757261457874011c41757261457874042c417574686f7269746965730100dd02040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c790120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c20616c77617973f0206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e00000000182444656d6f6372616379012444656d6f63726163792c3c5075626c696350726f70436f756e7401001c100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f707301008903040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f66000104051c5d0504000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e7401001c100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b656401001c100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f66000104051c650504000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f6601010405007105e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100a40400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c00008905040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c697374000104062c8d0504000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e73010104062ca40400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e0199030190303c456e6163746d656e74506572696f641020201c00000000000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f641020e0c400000000000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f641020e0c400000000000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f641020e0c4000000000000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400080c6a47e8d0300000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f776564a404010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f641020840300000000000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f641020e0c400000000000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f7465731c106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c731c1064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f736974731c1064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c69737465641c106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e0191051e1c436f756e63696c011c436f756e63696c182450726f706f73616c7301009505040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062c9503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e67000104062c9905040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e7401001c100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100f1020400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01a50301a000019d051f48546563686e6963616c436f6d6d69747465650148546563686e6963616c436f6d6d6974746565182450726f706f73616c730100a105040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062c9503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e67000104062c9905040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e7401001c100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100f1020400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01b10301b00001a505204c546563686e6963616c4d656d62657273686970014c546563686e6963616c4d656d62657273686970081c4d656d626572730100a905040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01b50301b40001ad052220547265617375727901205472656173757279103450726f706f73616c436f756e7401001c100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c73000104051cb1050400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c730100b505040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e01b90301b81c3050726f706f73616c426f6e64b9051050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d1840000082dfe40d47000000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756dbd050400044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f641020c0a8000000000000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726eb90510000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c65744964c105206b696c742f7473790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c731c10640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e01c505231c5574696c6974790001bd0301bc044c626174636865645f63616c6c735f6c696d69741c10aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01c905281c56657374696e67011c56657374696e67081c56657374696e670001040200cd05040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100d50504000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01e50301c008444d696e5665737465645472616e73666572184000407a10f35a0000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c65731c101c0000000001d90529245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e64610101040510dd050400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b75700001040504c8040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01ed0301c408344d6178696d756d57656967687424280700a0db215d0200000104290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b1c1032000000041d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e01ed052a1450726f7879011450726f7879081c50726f786965730101040500f1054400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500010644000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01f50301d0184050726f78794465706f7369744261736518400020f7a54b330000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f72184000f4a92b80010000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f786965731c100a00000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e671c100a00000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f7369744261736518400020f7a54b330000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72184000e8535700030000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e0111062b20507265696d6167650120507265696d6167650824537461747573466f72000104062c15060400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f72000104062106250604000001fd0301dc000129062c38546970734d656d626572736869700138546970734d656d62657273686970081c4d656d626572730100a905040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01010401e000012d062d1054697073011054697073081054697073000104052c310604000c650120546970734d6170207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e3d012054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c7265616479802067756172616e7465656420746f20626520612073656375726520686173682e1c526561736f6e73000104062c3004000849012053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e610120696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e01050401e4144c4d6178696d756d526561736f6e4c656e6774681c10004000000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756548446174614465706f73697450657242797465184000743ba40b00000000000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e30546970436f756e74646f776e1020201c0000000000000445012054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e3454697046696e646572734665653d060414043501205468652070657263656e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e505469705265706f72744465706f73697442617365184000f45628fa320000000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e0141062e144374797065011443747970650418437479706573000104022c450604001060204354797065732073746f726564206f6e20636861696e2e001901204974206d6170732066726f6d2061204354797065206861736820746f206974732063726561746f7220616e6420626c6f636b206e756d62657220696e207768696368206974342077617320637265617465642e01090401e8000149063d2c4174746573746174696f6e012c4174746573746174696f6e08304174746573746174696f6e73000104022c4d0604000c78204174746573746174696f6e732073746f726564206f6e20636861696e2e00cc204974206d6170732066726f6d206120636c61696d206861736820746f207468652066756c6c206174746573746174696f6e2e5045787465726e616c4174746573746174696f6e7301010805025506a404000ca02044656c656761746564206174746573746174696f6e732073746f726564206f6e20636861696e2e00e8204974206d6170732066726f6d20612064656c65676174696f6e20494420746f206120766563746f72206f6620636c61696d206861736865732e010d0401ec081c4465706f7369741840001cc9dd006e0000000000000000000004e420546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720616e206174746573746174696f6e2e604d617844656c6567617465644174746573746174696f6e731c10e803000008090120546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732077686963682063616e206265206d61646520627954207468652073616d652064656c65676174696f6e2e0159063e2844656c65676174696f6e012844656c65676174696f6e083c44656c65676174696f6e4e6f646573000104022c5d0604000c882044656c65676174696f6e206e6f6465732073746f726564206f6e20636861696e2e00b0204974206d6170732066726f6d2061206e6f646520494420746f20746865206e6f64652064657461696c732e5444656c65676174696f6e4869657261726368696573000104022c6d0604000ca02044656c65676174696f6e2068696572617263686965732073746f726564206f6e20636861696e2e00dc204974206d61707320666f7220612028726f6f7429206e6f646520494420746f20746865206869657261726368792064657461696c732e01210401f8181c4465706f73697418400080c6a47e8d0300000000000000000004dc20546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720612064656c65676174696f6e2e584d61785369676e6174757265427974654c656e677468d808400000384d61785265766f636174696f6e731c1005000000047c204d6178696d756d206e756d626572206f66207265766f636174696f6e732e2c4d617852656d6f76616c731c100500000004f4204d6178696d756d206e756d626572206f662072656d6f76616c732e2053686f756c642062652073616d65206173204d61785265766f636174696f6e733c4d6178506172656e74436865636b731c1005000000080d01204d6178696d756d206e756d626572206f6620757077617264732074726176657273616c73206f66207468652064656c65676174696f6e20747265652066726f6d2061f0206e6f646520746f2074686520726f6f7420616e64207468757320746865206465707468206f66207468652064656c65676174696f6e20747265652e2c4d61784368696c6472656e1c10e80300000c0d01204d6178696d756d206e756d626572206f6620616c6c206368696c6472656e20666f7220612064656c65676174696f6e206e6f64652e20466f7220612062696e617279fc20747265652c20746869732073686f756c6420626520747769636520746865206d6178696d756d206465707468206f662074686520747265652c20692e652e5c206032205e204d6178506172656e74436865636b73602e0171063f0c446964010c446964100c4469640001040200750604000c5820444944732073746f726564206f6e20636861696e2e00c8204974206d6170732066726f6d206120444944206964656e74696669657220746f20746865204449442064657461696c732e4053657276696365456e64706f696e7473000108050295066d0404000ca0205365727669636520656e64706f696e7473206173736f636961746564207769746820444944732e000901204974206d6170732066726f6d2028444944206964656e7469666965722c20736572766963652049442920746f2074686520736572766963652064657461696c732e44446964456e64706f696e7473436f756e7401010402001c10000000000cac20436f756e746572206f66207365727669636520656e64706f696e747320666f722065616368204449442e00cc204974206d6170732066726f6d2028444944206964656e7469666965722920746f20612033322d62697420636f756e7465722e30446964426c61636b6c6973740001040200ac0400141d012054686520736574206f66204449447320746861742068617665206265656e2064656c6574656420616e642063616e6e6f74207468657265666f726520626520637265617465647020616761696e20666f7220736563757269747920726561736f6e732e002101204974206d6170732066726f6d206120444944206964656e74696669657220746f206120756e6974207475706c652c20666f72207468652073616b65206f6620747261636b696e674420444944206964656e746966696572732e013d04010101301c4465706f736974184000983ea62c22070000000000000000000c0d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974110120746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f7369742063616e2062658c207265636c61696d6564207768656e20746865204449442069732064656c657465642e0c466565184000203d88792d000000000000000000000c09012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f7220656163682044494420617320612066656520746f0d0120696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206665652077696c6c206e6f74206765748820726566756e646564207768656e20746865204449442069732064656c657465642e4c4d61785075626c69634b6579735065724469641c10140000000c1101204d6178696d756d206e756d626572206f6620746f74616c207075626c6963206b6579732077686963682063616e2062652073746f7265642070657220444944206b6579d8206964656e7469666965722e205468697320696e636c7564657320746865206f6e65732063757272656e746c79207573656420666f72f02061757468656e7469636174696f6e2c206b65792061677265656d656e742c206174746573746174696f6e2c20616e642064656c65676174696f6e2e584d61784e65774b657941677265656d656e744b6579731c100a000000081501204d6178696d756d206e756d626572206f66206b65792061677265656d656e74206b65797320746861742063616e20626520616464656420696e2061206372656174696f6e2c206f7065726174696f6e2e604d6178546f74616c4b657941677265656d656e744b6579731c1013000000101101204d6178696d756d206e756d626572206f6620746f74616c206b65792061677265656d656e74206b65797320746861742063616e2062652073746f72656420666f7220613420444944207375626a6563742e00c42053686f756c642062652067726561746572207468616e20604d61784e65774b657941677265656d656e744b657973602e4c4d6178426c6f636b73547856616c696469747910202c0100000000000008ec20546865206d6178696d756d206e756d626572206f6620626c6f636b732061204449442d617574686f72697a6564206f7065726174696f6e2069739420636f6e736964657265642076616c696420616674657220697473206372656174696f6e2e644d61784e756d6265724f6653657276696365735065724469641c101900000004fc20546865206d6178696d756d206e756d626572206f6620736572766963657320746861742063616e2062652073746f72656420756e6465722061204449442e484d61785365727669636549644c656e6774681c1032000000049020546865206d6178696d756d206c656e677468206f66206120736572766963652049442e504d617853657276696365547970654c656e6774681c103200000004c820546865206d6178696d756d206c656e677468206f66206120736572766963652074797065206465736372697074696f6e2e684d61784e756d6265724f665479706573506572536572766963651c100100000004090120546865206d6178696d756d206e756d626572206f662061207479706573206465736372697074696f6e20666f722061207365727669636520656e64706f696e742e4c4d61785365727669636555726c4c656e6774681c10c8000000049420546865206d6178696d756d206c656e677468206f66206120736572766963652055524c2e644d61784e756d6265724f6655726c73506572536572766963651c100100000004d420546865206d6178696d756d206e756d626572206f6620612055524c7320666f722061207365727669636520656e64706f696e742e0199064024496e666c6174696f6e000000084c496e697469616c506572696f644c656e677468102048a3c800000000000c050120546865206c656e677468206f662074686520696e697469616c20706572696f6420696e2077686963682074686520636f6e7374616e74207265776172642069731101206d696e7465642e204f6e6365207468652063757272656e7420626c6f636b206578636565647320746869732c207265776172647320617265206e6f206675727468657220206973737565642e4c496e697469616c506572696f64526577617264184036f539fdaeb30200000000000000000008fc2054686520616d6f756e74206f66206e65776c792069737375656420746f6b656e732070657220626c6f636b20647572696e672074686520696e697469616c2020706572696f642e0042244469644c6f6f6b757001244469644c6f6f6b75700834436f6e6e6563746564446964730001040209019d06040004a8204d617070696e672066726f6d206163636f756e74206964656e7469666965727320746f20444944732e44436f6e6e65637465644163636f756e74730001080202a106ac04000cbc204d617070696e672066726f6d2028444944202b206163636f756e74206964656e74696669657229202d3e2028292e0d012054686520656d707479207475706c65206973207573656420617320612073656e74696e656c2076616c756520746f2073696d706c7920696e64696361746520746865982070726573656e6365206f66206120676976656e207475706c6520696e20746865206d61702e019104010501041c4465706f736974184000c0afd69136000000000000000000000c0d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974110120746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f7369742063616e2062658c207265636c61696d6564207768656e20746865204449442069732064656c657465642e01a5064324576562334e616d65730124576562334e616d65730c144f776e6572000104021901a90604000488204d6170206f66206e616d65202d3e206f776e6572736869702064657461696c732e144e616d65730001040200190104000458204d6170206f66206f776e6572202d3e206e616d652e1842616e6e6564000104021901ac04000c4c204d6170206f66206e616d65202d3e2028292e00e02049662061206e616d65206b65792069732070726573656e742c20746865206e616d652069732063757272656e746c792062616e6e65642e01a1040115010c1c4465706f736974184000d450a85d6b0000000000000000000004bc2054686520616d6f756e74206f66204b494c5420746f206465706f73697420746f20636c61696d2061206e616d652e344d696e4e616d654c656e6774681c1003000000048820546865206d696e20656e636f646564206c656e677468206f662061206e616d652e344d61784e616d654c656e6774681c1020000000048820546865206d617820656e636f646564206c656e677468206f662061206e616d652e01ad0644445075626c696343726564656e7469616c7301445075626c696343726564656e7469616c73082c43726564656e7469616c730001080502b106b50604000cc020546865206d6170206f66207075626c69632063726564656e7469616c7320616c72656164792061747465737465642ef0204974206d6170732066726f6d206120287375626a656374206964202b2063726564656e7469616c20696429202d3e20746865206372656174696f6e6c2064657461696c73206f66207468652063726564656e7469616c2e4843726564656e7469616c5375626a65637473000104022c250104001025012041207265766572736520696e646578206d617070696e672066726f6d2063726564656e7469616c20494420746f20746865207375626a656374207468652063726564656e7469616c3c207761732069737375656420746f2e001901204974206974207573656420746f20706572666f726d20656666696369656e74206c6f6f6b7570206f662063726564656e7469616c7320676976656e2074686569722049442e01a5040121010c1c4465706f7369741840005c8d421343000000000000000000000411012054686520616d6f756e74206f6620746f6b656e7320746f2072657365727665207768656e20617474657374696e672061207075626c69632063726564656e7469616c2e584d6178456e636f646564436c61696d734c656e6774681c10a0860100040d0120546865206d6178696d756d206c656e67746820696e206279746573206f662074686520656e636f64656420636c61696d73206f6620612063726564656e7469616c2e484d61785375626a65637449644c656e6774681c10cc00000008e820546865206d6178696d756d206c656e67746820696e206279746573206f6620746865207261772063726564656e7469616c207375626a65637430206964656e7469666965722e01b906453c50617261636861696e53797374656d013c50617261636861696e53797374656d545450656e64696e6756616c69646174696f6e436f64650100300400187d0120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f206265206170706c6965642e00c10120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f766572777269746520746865205b603a636f6465605d5b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455dad012077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f63657373207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e000501205b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d3a2073705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f4445444e657756616c69646174696f6e436f64650000300400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000bd0404000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f64650100a4040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d62657201001c1000000000041d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e60557067726164655265737472696374696f6e5369676e616c0100bd0604001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f660000c504040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000c50604001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e0000d9060400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d7163486561640100dd0680000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d716348656164730100e106040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301001c10000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01001c10000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d657373616765730100ed0604000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d657373616765730100610204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d6573736167657301006102040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e84416e6e6f756e63656448726d704d6573736167657350657243616e64696461746501001c100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000240400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000240400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e44417574686f72697a65645570677261646500002c040004b820546865206e65787420617574686f72697a656420757067726164652c206966207468657265206973206f6e652e60437573746f6d56616c69646174696f6e486561644461746100003004000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00190120536565205b6050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f64617461605d20666f72206d6f726520696e666f726d6174696f6e2e01b5040191010001f506503450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100a10110640000000000000000512458636d705175657565012458636d7051756575652444496e626f756e6458636d705374617475730100f9060400049420537461747573206f662074686520696e626f756e642058434d50206368616e6e656c732e4c496e626f756e6458636d704d657373616765730101080205110730040004190120496e626f756e64206167677265676174652058434d50206d657373616765732e2049742063616e206f6e6c79206265206f6e6520706572205061726149642f626c6f636b2e484f7574626f756e6458636d70537461747573010015070400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205210730040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402a10130040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e6669670100250774020000000500000001000000821a06000008000700c817a804020004000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e284f76657277656967687400010405102907040010050120546865206d657373616765732074686174206578636565646564206d617820696e646976696475616c206d65737361676520776569676874206275646765742e003901205468657365206d657373616765207374617920696e20746869732073746f72616765206d617020756e74696c207468657920617265206d616e75616c6c79206469737061746368656420766961582060736572766963655f6f766572776569676874602e3c4f766572776569676874436f756e7401001020000000000000000008690120546865206e756d626572206f66206f766572776569676874206d657373616765732065766572207265636f7264656420696e20604f766572776569676874602e20416c736f20646f75626c657320617320746865206e6578748420617661696c61626c652066726565206f76657277656967687420696e6465782e38517565756553757370656e6465640100a404000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e01e90401950100012d07522c506f6c6b61646f7458636d0001ed0401a50100013107532843756d756c757358636d0000013902000135075420446d7051756575650120446d7051756575651034436f6e66696775726174696f6e01003907280700e40b540202000400044c2054686520636f6e66696775726174696f6e2e2450616765496e64657801003d074000000000000000000000000000000000044020546865207061676520696e6465782e145061676573010104021c410704000444205468652071756575652070616765732e284f766572776569676874000104021045070400046420546865206f766572776569676874206d657373616765732e015105013d0200014907554d07042048436865636b4e6f6e5a65726f53656e6465725507ac40436865636b5370656356657273696f6e59071c38436865636b547856657273696f6e5d071c30436865636b47656e6573697361072c38436865636b4d6f7274616c69747965072c28436865636b4e6f6e63656d07ac2c436865636b5765696768747107ac604368617267655472616e73616374696f6e5061796d656e747507ac1d04"} \ No newline at end of file +{"result":"0x6d6574610e8507000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d6572731c0120526566436f756e7400012470726f7669646572731c0120526566436f756e7400012c73756666696369656e74731c0120526566436f756e740001106461746114012c4163636f756e7444617461000010000005060014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0000050500200c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540124000c01186e6f726d616c2401045400012c6f7065726174696f6e616c240104540001246d616e6461746f7279240104540000240c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6528010c75363400012870726f6f665f73697a6528010c75363400002800000610002c083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000030000002080034102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677338013c5665633c4469676573744974656d3e0000380000023c003c102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e00060024436f6e73656e7375730800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000400105365616c0800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000500144f74686572040030011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000400000030400000008004400000248004808306672616d655f73797374656d2c4576656e745265636f7264080445014c0454012c000c011470686173657502011450686173650001146576656e744c010445000118746f70696373790201185665633c543e00004c08447370697269746e65745f72756e74696d653052756e74696d654576656e740001781853797374656d04005001706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c496e6469636573040074017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e0005002042616c616e636573040078017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000600485472616e73616374696f6e5061796d656e7404008001a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0007001c53657373696f6e040084015470616c6c65745f73657373696f6e3a3a4576656e740016004050617261636861696e5374616b696e67040088018470617261636861696e5f7374616b696e673a3a4576656e743c52756e74696d653e0015002444656d6f6372616379040090018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e001e001c436f756e63696c0400a001fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400b001fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020004c546563686e6963616c4d656d626572736869700400b401fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365313e0022002054726561737572790400b8017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0023001c5574696c6974790400bc015470616c6c65745f7574696c6974793a3a4576656e740028001c56657374696e670400c0017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e002900245363686564756c65720400c4018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e002a001450726f78790400d0017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002b0020507265696d6167650400dc017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e002c0038546970734d656d626572736869700400e001fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365323e002d0010546970730400e4016c70616c6c65745f746970733a3a4576656e743c52756e74696d653e002e001443747970650400e8015463747970653a3a4576656e743c52756e74696d653e003d002c4174746573746174696f6e0400ec016c6174746573746174696f6e3a3a4576656e743c52756e74696d653e003e002844656c65676174696f6e0400f8016864656c65676174696f6e3a3a4576656e743c52756e74696d653e003f000c44696404000101014c6469643a3a4576656e743c52756e74696d653e004000244469644c6f6f6b757004000501018470616c6c65745f6469645f6c6f6f6b75703a3a4576656e743c52756e74696d653e00430024576562334e616d657304001501018470616c6c65745f776562335f6e616d65733a3a4576656e743c52756e74696d653e004400445075626c696343726564656e7469616c730400210101887075626c69635f63726564656e7469616c733a3a4576656e743c52756e74696d653e0045003c50617261636861696e53797374656d0400910101bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0050002458636d7051756575650400950101a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e0052002c506f6c6b61646f7458636d0400a101016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e0053002843756d756c757358636d04006d02018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e00540020446d7051756575650400710201a063756d756c75735f70616c6c65745f646d705f71756575653a3a4576656e743c52756e74696d653e00550000500c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5401304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7260013444697370617463684572726f7200013464697370617463685f696e666f5401304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e744964000110686173682c011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e540c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874240118576569676874000114636c6173735801344469737061746368436c617373000120706179735f6665655c0110506179730000580c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f7279000200005c0c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000060082873705f72756e74696d653444697370617463684572726f72000134144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040064012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400680128546f6b656e4572726f720007002841726974686d6574696304006c013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007001485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c000064082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7240018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000068082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f72746564000600006c083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000070082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000740c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909780c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475737c01185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909097c14346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000800c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909840c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e6465781c013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909880c4470617261636861696e5f7374616b696e671870616c6c6574144576656e74040454000154204e6577526f756e640800100138543a3a426c6f636b4e756d62657200001c013053657373696f6e496e6465780000088041206e6577207374616b696e6720726f756e642068617320737461727465642e785c5b626c6f636b206e756d6265722c20726f756e64206e756d6265725c5d50456e7465726564546f7043616e646964617465730400000130543a3a4163636f756e744964000108cc41206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d444c656674546f7043616e646964617465730400000130543a3a4163636f756e744964000208d8416e206163636f756e74207761732072656d6f7665642066726f6d2074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d604a6f696e6564436f6c6c61746f7243616e646964617465730800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000308e041206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620636f6c6c61746f722063616e646964617465732ebc5c5b6163636f756e742c20616d6f756e74207374616b656420627920746865206e65772063616e6469646174655c5d48436f6c6c61746f725374616b65644d6f72650c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00040801014120636f6c6c61746f722063616e6469646174652068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d48436f6c6c61746f725374616b65644c6573730c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00050801014120636f6c6c61746f722063616e64696461746520686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d54436f6c6c61746f725363686564756c6564457869740c001c013053657373696f6e496e6465780000000130543a3a4163636f756e74496400001c013053657373696f6e496e64657800061001014120636f6c6c61746f722063616e646964617465206861732073746172746564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e646964617465732e205c5b726f756e64206e756d6265722c20636f6c6c61746f722773206163636f756e742c20726f756e64206e756d626572207768656ee074686520636f6c6c61746f722077696c6c206265206566666563746976656c792072656d6f7665642066726f6d2074686520736574206f663063616e646964617465735c5d50436f6c6c61746f7243616e63656c6564457869740400000130543a3a4163636f756e74496400070c05014120636f6c6c61746f722063616e646964617465206861732063616e63656c6564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e6469646174657320616e6420776173206164646564206261636b20746f207468652063616e64696461746520706f6f6c2e205c5b636f6c6c61746f722773246163636f756e745c5d3443616e6469646174654c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000808cc416e206163636f756e7420686173206c6566742074686520736574206f6620636f6c6c61746f722063616e646964617465732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d3c436f6c6c61746f7252656d6f7665640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000908e4416e206163636f756e742077617320666f726365646c792072656d6f7665642066726f6d207468652020736574206f6620636f6c6c61746f72c863616e646964617465732e205c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d604d617843616e6469646174655374616b654368616e676564040018013042616c616e63654f663c543e000a08b4546865206d6178696d756d2063616e646964617465207374616b6520686173206265656e206368616e6765642e485c5b6e6577206d617820616d6f756e745c5d4c44656c656761746f725374616b65644d6f72651000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000b0cf0412064656c656761746f722068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d4c44656c656761746f725374616b65644c6573731000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000c0cf0412064656c656761746f7220686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d3444656c656761746f724c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000d08a8416e206163636f756e7420686173206c6566742074686520736574206f662064656c656761746f72732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d2844656c65676174696f6e1000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000e0cc8416e206163636f756e74206861732064656c6567617465642061206e657720636f6c6c61746f722063616e6469646174652e11015c5b6163636f756e742c20616d6f756e74206f662066756e6473207374616b65642c20746f74616c20616d6f756e74206f662064656c656761746f7273272066756e64738c7374616b656420666f722074686520636f6c6c61746f722063616e6469646174655c5d4844656c65676174696f6e5265706c616365641800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000f180d0141206e65772064656c65676174696f6e20686173207265706c6163656420616e206578697374696e67206f6e6520696e2074686520736574206f66206f6e676f696e67010164656c65676174696f6e7320666f72206120636f6c6c61746f722063616e6469646174652e205c5b6e65772064656c656761746f722773206163636f756e742c0901616d6f756e74206f662066756e6473207374616b656420696e20746865206e65772064656c65676174696f6e2c207265706c616365642064656c656761746f7227730d016163636f756e742c20616d6f756e74206f662066756e6473207374616b656420696e20746865207265706c6163652064656c65676174696f6e2c20636f6c6c61746f72050163616e6469646174652773206163636f756e742c206e657720746f74616c20616d6f756e74206f662064656c656761746f7273272066756e6473207374616b656470666f722074686520636f6c6c61746f722063616e6469646174655c5d5444656c656761746f724c656674436f6c6c61746f721000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00100cdc416e206163636f756e74206861732073746f707065642064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e09015c5b6163636f756e742c20636f6c6c61746f722063616e6469646174652773206163636f756e742c206f6c6420616d6f756e74206f662064656c656761746f727327d866756e6473207374616b65642c206e657720616d6f756e74206f662064656c656761746f7273272066756e6473207374616b65645c5d2052657761726465640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e001108c04120636f6c6c61746f72206f7220612064656c656761746f72206861732072656365697665642061207265776172642e745c5b6163636f756e742c20616d6f756e74206f66207265776172645c5d44526f756e64496e666c6174696f6e53657410008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00120c0501496e666c6174696f6e20636f6e66696775726174696f6e20666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e09015c5b6d6178696d756d20636f6c6c61746f722773207374616b696e6720726174652c206d6178696d756d20636f6c6c61746f7227732072657761726420726174652c0d016d6178696d756d2064656c656761746f722773207374616b696e6720726174652c206d6178696d756d2064656c656761746f7227732072657761726420726174655c5d604d617853656c656374656443616e6469646174657353657408001c010c75333200001c010c753332001308f0546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c656374656420696e20667574757265dc76616c69646174696f6e20726f756e647320686173206368616e6765642e205c5b6f6c642076616c75652c206e65772076616c75655c5d44426c6f636b73506572526f756e6453657410001c013053657373696f6e496e6465780000100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d62657200140cf8546865206c656e67746820696e20626c6f636b7320666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e01015c5b726f756e64206e756d6265722c20666972737420626c6f636b20696e207468652063757272656e7420726f756e642c206f6c642076616c75652c206e65771c76616c75655c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098c0c3473705f61726974686d65746963287065725f7468696e67732c5065727175696e74696c6c0000040010010c7536340000900c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001382050726f706f73656408013870726f706f73616c5f696e6465781c012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e6465781c012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e6465781c013c5265666572656e64756d496e6465780001247468726573686f6c64940134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e6465781c013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e6465781c013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e6465781c013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011048323536000114756e74696c100138543a3a426c6f636b4e756d62657200090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f686173682c011048323536000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e6465781c013c5265666572656e64756d496e646578000110766f74659801644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e6465781c012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e6465781c012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909940c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f7269747900020000980c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f74659c0110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e6365000100009c0c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000a00c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800013470726f706f73616c5f686173682c011c543a3a486173680001247468726573686f6c641c012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011c543a3a48617368000114766f746564a40110626f6f6c00010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74a801384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74a801384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f686173682c011c543a3a4861736800010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a40000050000a80418526573756c7408045401ac044501600108084f6b0400ac000000000c4572720400600000010000ac0000040000b00c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800013470726f706f73616c5f686173682c011c543a3a486173680001247468726573686f6c641c012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011c543a3a48617368000114766f746564a40110626f6f6c00010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74a801384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74a801384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f686173682c011c543a3a4861736800010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b40c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b80c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001242050726f706f73656404013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909bc0c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e6465781c010c7533320001146572726f7260013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7260013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74a801384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c00c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c40c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736bc8016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964cc01404f7074696f6e3c5461736b4e616d653e000118726573756c74a801384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736bc8016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964cc01404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736bc8016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964cc01404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736bc8016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964cc01404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652ec800000408101c00cc04184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000d00c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74a801384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065d40130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e646578d8010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f686173682c013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200040450412070726f7879207761732072656d6f7665642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d408447370697269746e65745f72756e74696d652450726f7879547970650001180c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e63650002004050617261636861696e5374616b696e670003002c43616e63656c50726f7879000400484e6f6e4465706f736974436c61696d696e6700050000d80000050400dc0c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f746564040110686173682c011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e24526571756573746564040110686173682c011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c6561726564040110686173682c011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e00c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e40c2c70616c6c65745f746970731870616c6c6574144576656e74080454000449000114184e65775469700401207469705f686173682c011c543a3a486173680000049441206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e28546970436c6f73696e670401207469705f686173682c011c543a3a48617368000104d841207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e24546970436c6f7365640c01207469705f686173682c011c543a3a4861736800010c77686f000130543a3a4163636f756e7449640001187061796f757418013c42616c616e63654f663c542c20493e0002048441207469702073756767657374696f6e20686173206265656e20636c6f7365642e305469705265747261637465640401207469705f686173682c011c543a3a486173680003049041207469702073756767657374696f6e20686173206265656e207265747261637465642e28546970536c61736865640c01207469705f686173682c011c543a3a4861736800011866696e646572000130543a3a4163636f756e74496400011c6465706f73697418013c42616c616e63654f663c542c20493e0004048841207469702073756767657374696f6e20686173206265656e20736c61736865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e80c1463747970651870616c6c6574144576656e74040454000108304354797065437265617465640800000144437479706543726561746f724f663c543e00002c01384374797065486173684f663c543e0000087441206e657720435479706520686173206265656e20637265617465642e885c5b63726561746f72206964656e7469666965722c20435479706520686173685c5d3043547970655570646174656404002c01384374797065486173684f663c543e000108ac496e666f726d6174696f6e2061626f7574206120435479706520686173206265656e20757064617465642e385c5b435479706520686173685c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ec0c2c6174746573746174696f6e1870616c6c6574144576656e74040454000110484174746573746174696f6e43726561746564100000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00002c01384374797065486173684f663c543e0000f001704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e0000088c41206e6577206174746573746174696f6e20686173206265656e20637265617465642e05015c5b61747465737465722049442c20636c61696d20686173682c20435479706520686173682c20286f7074696f6e616c292064656c65676174696f6e2049445c5d484174746573746174696f6e5265766f6b6564080000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00010880416e206174746573746174696f6e20686173206265656e207265766f6b65642e685c5b6163636f756e742069642c20636c61696d20686173685c5d484174746573746174696f6e52656d6f766564080000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00020880416e206174746573746174696f6e20686173206265656e2072656d6f7665642e685c5b6163636f756e742069642c20636c61696d20686173685c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e00002c0138436c61696d486173684f663c543e0003080501546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e2e685c5b6163636f756e742069642c20636c61696d20686173685c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f004184f7074696f6e04045401f40108104e6f6e6500000010536f6d650400f40000010000f40c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c417574686f72697a6174696f6e4964043044656c65676174696f6e4964012c01042844656c65676174696f6e04002c013044656c65676174696f6e496400000000f80c2864656c65676174696f6e1870616c6c6574144576656e7404045400011c40486965726172636879437265617465640c0000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c01384374797065486173684f663c543e0000088441206e65772068696572617263687920686173206265656e20637265617465642ea05c5b63726561746f722049442c20726f6f74206e6f64652049442c20435459504520686173685c5d404869657261726368795265766f6b6564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00010874412068696572617263687920686173206265656e207265766f6b65642e705c5b7265766f6b65722049442c20726f6f74206e6f64652049445c5d4048696572617263687952656d6f766564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000208dc412068696572617263687920686173206265656e2072656d6f7665642066726f6d207468652073746f72616765206f6e20636861696e2e705c5b72656d6f7665722049442c20726f6f74206e6f64652049445c5d4444656c65676174696f6e43726561746564180000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000000014044656c656761746f7249644f663c543e0000fc012c5065726d697373696f6e7300030c8841206e65772064656c65676174696f6e20686173206265656e20637265617465642efc5c5b63726561746f722049442c20726f6f74206e6f64652049442c2064656c65676174696f6e206e6f64652049442c20706172656e74206e6f64652049442c6864656c65676174652049442c207065726d697373696f6e735c5d4444656c65676174696f6e5265766f6b6564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00040878412064656c65676174696f6e20686173206265656e207265766f6b65642e885c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d4444656c65676174696f6e52656d6f76656408000001384163636f756e7449644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00050878412064656c65676174696f6e20686173206265656e2072656d6f7665642e885c5b72656d6f7665722049442c2064656c65676174696f6e206e6f64652049445c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000608f8546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720612064656c65676174696f6eac737562747265652e205c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909fc0c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368792c5065726d697373696f6e730000040110626974731c010c753332000001010c0c6469641870616c6c6574144576656e74040454000110284469644372656174656408000001384163636f756e7449644f663c543e00000001484469644964656e7469666965724f663c543e0000086c41206e65772044494420686173206265656e20637265617465642e985c5b7472616e73616374696f6e207369676e65722c20444944206964656e7469666965725c5d284469645570646174656404000001484469644964656e7469666965724f663c543e0001085c412044494420686173206265656e20757064617465642e485c5b444944206964656e7469666965725c5d2844696444656c6574656404000001484469644964656e7469666965724f663c543e0002085c412044494420686173206265656e2064656c657465642e485c5b444944206964656e7469666965725c5d4444696443616c6c4469737061746368656408000001484469644964656e7469666965724f663c543e0000a801384469737061746368526573756c74000308a041204449442d617574686f72697365642063616c6c20686173206265656e2065786563757465642e7c5c5b4449442063616c6c65722c20646973706174636820726573756c745c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090905010c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144576656e74040454000110584173736f63696174696f6e45737461626c69736865640800090101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000004f841206e6577206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e742049442077617320637265617465642e484173736f63696174696f6e52656d6f7665640800090101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000104ec416e206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e74204944207761732072656d6f7665642e444d6967726174696f6e50726f6772657373000204c454686572652077617320736f6d652070726f677265737320696e20746865206d6967726174696f6e2070726f636573732e484d6967726174696f6e436f6d706c65746564000304dc416c6c204163636f756e744964732068617665206265656e206d6967726174656420746f204c696e6b61626c654163636f756e7449642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090909010c4470616c6c65745f6469645f6c6f6f6b7570406c696e6b61626c655f6163636f756e74444c696e6b61626c654163636f756e7449640001082c4163636f756e744964323004000d01012c4163636f756e74496432300000002c4163636f756e7449643332040000012c4163636f756e7449643332000100000d010c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e742c4163636f756e744964323000000400110101205b75383b2032305d0000110100000314000000080015010c4470616c6c65745f776562335f6e616d65731870616c6c6574144576656e740404540001103c576562334e616d65436c61696d65640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6519010134576562334e616d654f663c543e0000047041206e6577206e616d6520686173206265656e20636c61696d65642e40576562334e616d6552656c65617365640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6519010134576562334e616d654f663c543e0001046441206e616d6520686173206265656e2072656c65617365642e38576562334e616d6542616e6e65640401106e616d6519010134576562334e616d654f663c543e0002045c41206e616d6520686173206265656e2062616e6e65642e40576562334e616d65556e62616e6e65640401106e616d6519010134576562334e616d654f663c543e0003046441206e616d6520686173206265656e20756e62616e6e65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090919010c4470616c6c65745f776562335f6e616d657324776562335f6e616d65344173636969576562334e616d65040454000004001d010180426f756e6465645665633c75382c20543a3a4d61784e616d654c656e6774683e00001d01101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000021010c487075626c69635f63726564656e7469616c731870616c6c6574144576656e740404540001104043726564656e7469616c53746f7265640801287375626a6563745f696425010130543a3a5375626a65637449640488546865207375626a656374206f6620746865206e65772063726564656e7469616c2e013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0474546865206964206f6620746865206e65772063726564656e7469616c2e0004a041206e6577207075626c69632063726564656e7469616c20686173206265656e206973737565642e4443726564656e7469616c52656d6f7665640801287375626a6563745f696425010130543a3a5375626a65637449640498546865207375626a656374206f66207468652072656d6f7665642063726564656e7469616c2e013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0484546865206964206f66207468652072656d6f7665642063726564656e7469616c2e01049841207075626c69632063726564656e7469616c7320686173206265656e2072656d6f7665642e4443726564656e7469616c5265766f6b656404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0484546865206964206f6620746865207265766f6b65642063726564656e7469616c2e02049441207075626c69632063726564656e7469616c20686173206265656e207265766f6b65642e4c43726564656e7469616c556e7265766f6b656404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e048c546865206964206f662074686520756e7265766f6b65642063726564656e7469616c2e03049c41207075626c69632063726564656e7469616c20686173206265656e20756e7265766f6b65642e0490546865206576656e74732067656e65726174656420627920746869732070616c6c65742e25010c3872756e74696d655f636f6d6d6f6e18617373657473204173736574446964000004002901013c41737365744964656e746966696572000029010c3c6b696c745f61737365745f646964730876312041737365744469640000080120636861696e5f69642d01011c436861696e496400012061737365745f69645501011c4173736574496400002d01103c6b696c745f61737365745f6469647314636861696e0876311c436861696e49640001141845697031353504003101013c4569703135355265666572656e63650000001842697031323204003501016447656e657369734865784861736833325265666572656e63650001001c446f7473616d6104003501016447656e657369734865784861736833325265666572656e636500020018536f6c616e6104003d01017047656e657369734261736535384861736833325265666572656e63650003001c47656e6572696304004501013847656e65726963436861696e4964000400003101103c6b696c745f61737365745f6469647314636861696e0876313c4569703135355265666572656e6365000004001801107531323800003501103c6b696c745f61737365745f6469647314636861696e0876316447656e657369734865784861736833325265666572656e636500000400390101205b75383b2031365d000039010000031000000008003d01103c6b696c745f61737365745f6469647314636861696e0876317047656e657369734261736535384861736833325265666572656e63650000040041010170426f756e6465645665633c75382c20436f6e73745533323c33323e3e00004101101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00004501103c6b696c745f61737365745f6469647314636861696e0876313847656e65726963436861696e496400000801246e616d6573706163654901015447656e65726963436861696e4e616d6573706163650001247265666572656e63655101015447656e65726963436861696e5265666572656e636500004901103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e4e616d657370616365000004004d0101d8426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f4e414d4553504143455f4c454e4754485f5533323e3e00004d01101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00005101103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e5265666572656e636500000400410101d8426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f5245464552454e43455f4c454e4754485f5533323e3e00005501103c6b696c745f61737365745f646964731461737365740876311c4173736574496400011418536c6970343404005901013c536c697034345265666572656e636500000014457263323004006501018445766d536d617274436f6e747261637446756e6769626c655265666572656e63650001001845726337323104006901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650002001c4572633131353504006901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650003001c47656e6572696304007901013847656e6572696341737365744964000400005901103c6b696c745f61737365745f646964731461737365740876313c536c697034345265666572656e6365000004005d0101105532353600005d01083c7072696d69746976655f7479706573105532353600000400610101205b7536343b20345d000061010000030400000010006501103c6b696c745f61737365745f646964731461737365740876318445766d536d617274436f6e747261637446756e6769626c655265666572656e636500000400110101205b75383b2032305d00006901103c6b696c745f61737365745f646964731461737365740876319045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e6365000008006501018445766d536d617274436f6e747261637446756e6769626c655265666572656e636500006d0101b44f7074696f6e3c45766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e7469666965723e00006d0104184f7074696f6e0404540171010108104e6f6e6500000010536f6d650400710100000100007101103c6b696c745f61737365745f646964731461737365740876319445766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e74696669657200000400750101dc426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f4944454e5449464945525f4c454e4754485f5533323e3e00007501101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00007901103c6b696c745f61737365745f646964731461737365740876313847656e657269634173736574496400000c01246e616d6573706163657d01015447656e6572696341737365744e616d6573706163650001247265666572656e63658101015447656e6572696341737365745265666572656e63650001086964890101784f7074696f6e3c47656e6572696341737365744964656e7469666965723e00007d01103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365744e616d657370616365000004004d0101d8426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f4e414d4553504143455f4c454e4754485f5533323e3e00008101103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365745265666572656e636500000400850101d8426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f5245464552454e43455f4c454e4754485f5533323e3e00008501101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000890104184f7074696f6e040454018d010108104e6f6e6500000010536f6d6504008d0100000100008d01103c6b696c745f61737365745f646964731461737365740876315847656e6572696341737365744964656e74696669657200000400750101dc426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f4944454e5449464945525f4c454e4754485f5533323e3e000091010c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e7404045400011c6056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d1c015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e4455706772616465417574686f72697a6564040124636f64655f686173682c011c543a3a486173680003047c416e207570677261646520686173206265656e20617574686f72697a65642e60446f776e776172644d657373616765735265636569766564040114636f756e741c010c7533320004040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564240118576569676874000120646d715f686561642c014472656c61795f636861696e3a3a48617368000504e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f68617368cc013c4f7074696f6e3c58636d486173683e000604b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090995010c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e7404045400011c1c537563636573730801306d6573736167655f68617368cc013c4f7074696f6e3c58636d486173683e00011877656967687424011857656967687400000464536f6d652058434d20776173206578656375746564206f6b2e104661696c0c01306d6573736167655f68617368cc013c4f7074696f6e3c58636d486173683e0001146572726f729901012058636d4572726f7200011877656967687424011857656967687400010440536f6d652058434d206661696c65642e2842616456657273696f6e0401306d6573736167655f68617368cc013c4f7074696f6e3c58636d486173683e000204544261642058434d2076657273696f6e20757365642e24426164466f726d61740401306d6573736167655f68617368cc013c4f7074696f6e3c58636d486173683e000304504261642058434d20666f726d617420757365642e3c58636d704d65737361676553656e740401306d6573736167655f68617368cc013c4f7074696f6e3c58636d486173683e000404c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e484f766572776569676874456e71756575656410011873656e6465729d01011850617261496400011c73656e745f61741c014052656c6179426c6f636b4e756d626572000114696e64657810013c4f766572776569676874496e6465780001207265717569726564240118576569676874000504d4416e2058434d2065786365656465642074686520696e646976696475616c206d65737361676520776569676874206275646765742e484f7665727765696768745365727669636564080114696e64657810013c4f766572776569676874496e646578000110757365642401185765696768740006044101416e2058434d2066726f6d20746865206f7665727765696768742071756575652077617320657865637574656420776974682074686520676976656e2061637475616c2077656967687420757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909099901100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002401185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d6974002700009d010c48706f6c6b61646f745f70617261636861696e287072696d697469766573084964000004001c010c7533320000a1010c2870616c6c65745f78636d1870616c6c6574144576656e7404045400015c24417474656d707465640400a501015078636d3a3a6c61746573743a3a4f7574636f6d6500000ca8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e00345c5b206f7574636f6d65205c5d1053656e740c00a90101344d756c74694c6f636174696f6e0000a90101344d756c74694c6f636174696f6e0000cd01011c58636d3c28293e00010c5c412058434d206d657373616765207761732073656e742e00885c5b206f726967696e2c2064657374696e6174696f6e2c206d657373616765205c5d48556e6578706563746564526573706f6e73650800a90101344d756c74694c6f636174696f6e000010011c517565727949640002145901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e73655265616479080010011c517565727949640000f5010120526573706f6e73650003105d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e00485c5b2069642c20726573706f6e7365205c5d204e6f7469666965640c0010011c5175657279496400000801087538000008010875380004105901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d404e6f746966794f766572776569676874140010011c517565727949640000080108753800000801087538000024011857656967687400002401185765696768740005146101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20636f756c6441016e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e0019015c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e6465782c2061637475616c207765696768742c206d617820627564676574656420776569676874205c5d4c4e6f7469667944697370617463684572726f720c0010011c5175657279496400000801087538000008010875380006105501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d484e6f746966794465636f64654661696c65640c0010011c5175657279496400000801087538000008010875380007145101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d40496e76616c6964526573706f6e6465720c00a90101344d756c74694c6f636174696f6e000010011c517565727949640000110201544f7074696f6e3c4d756c74694c6f636174696f6e3e0008145901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e00b05c5b206f726967696e206c6f636174696f6e2c2069642c206578706563746564206c6f636174696f6e205c5d5c496e76616c6964526573706f6e64657256657273696f6e0800a90101344d756c74694c6f636174696f6e000010011c517565727949640009245101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e736554616b656e040010011c51756572794964000a0cc8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e00205c5b206964205c5d34417373657473547261707065640c002c0110483235360000a90101344d756c74694c6f636174696f6e00003102015056657273696f6e65644d756c7469417373657473000b0cb8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e00685c5b20686173682c206f726967696e2c20617373657473205c5d5456657273696f6e4368616e67654e6f7469666965640c00a90101344d756c74694c6f636174696f6e00001c012858636d56657273696f6e0000d901012c4d756c7469417373657473000c142501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e007c5c5b2064657374696e6174696f6e2c20726573756c742c20636f7374205c5d5c537570706f7274656456657273696f6e4368616e6765640800a90101344d756c74694c6f636174696f6e00001c012858636d56657273696f6e000d10390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e006c5c5b206c6f636174696f6e2c2058434d2076657273696f6e205c5d504e6f7469667954617267657453656e644661696c0c00a90101344d756c74694c6f636174696f6e000010011c5175657279496400009901012058636d4572726f72000e1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e007c5c5b206c6f636174696f6e2c2071756572792049442c206572726f72205c5d644e6f746966795461726765744d6967726174696f6e4661696c08006902015856657273696f6e65644d756c74694c6f636174696f6e000010011c51756572794964000f1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e00605c5b206c6f636174696f6e2c207175657279204944205c5d54496e76616c69645175657269657256657273696f6e0800a90101344d756c74694c6f636174696f6e000010011c517565727949640010245501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d38496e76616c6964517565726965721000a90101344d756c74694c6f636174696f6e000010011c517565727949640000a90101344d756c74694c6f636174696f6e0000110201544f7074696f6e3c4d756c74694c6f636174696f6e3e0011145d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e0005015c5b206f726967696e206c6f636174696f6e2c2069642c20657870656374656420717565726965722c206d617962652061637475616c2071756572696572205c5d5056657273696f6e4e6f74696679537461727465640800a90101344d756c74694c6f636174696f6e0000d901012c4d756c74694173736574730012105901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d5856657273696f6e4e6f746966795265717565737465640800a90101344d756c74694c6f636174696f6e0000d901012c4d756c746941737365747300130c41015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e64732075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d6056657273696f6e4e6f74696679556e7265717565737465640800a90101344d756c74694c6f636174696f6e0000d901012c4d756c746941737365747300140c61015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d2046656573506169640800a90101344d756c74694c6f636174696f6e0000d901012c4d756c746941737365747300150c310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e006c5c5b20706179696e67206c6f636174696f6e2c2066656573205c5d34417373657473436c61696d65640c002c0110483235360000a90101344d756c74694c6f636174696f6e00003102015056657273696f6e65644d756c746941737365747300160cc0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e206173736574207472617000685c5b20686173682c206f726967696e2c20617373657473205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a501100c78636d087633187472616974731c4f7574636f6d6500010c20436f6d706c657465040024011857656967687400000028496e636f6d706c65746508002401185765696768740000990101144572726f72000100144572726f720400990101144572726f7200020000a901100c78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72ad0101244a756e6374696f6e730000ad01100c78636d087633246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400b10101204a756e6374696f6e0001000858320800b10101204a756e6374696f6e0000b10101204a756e6374696f6e0002000858330c00b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0003000858341000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0004000858351400b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0005000858361800b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0006000858371c00b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0007000858382000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e00080000b101100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400b501010c7533320000002c4163636f756e744964333208011c6e6574776f726bb90101444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bb90101444f7074696f6e3c4e6574776f726b49643e000114696e64657828010c753634000200304163636f756e744b6579323008011c6e6574776f726bb90101444f7074696f6e3c4e6574776f726b49643e00010c6b6579110101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400c1010110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964c5010118426f6479496400011070617274c9010120426f6479506172740008003c476c6f62616c436f6e73656e7375730400bd0101244e6574776f726b496400090000b5010000061c00b90104184f7074696f6e04045401bd010108104e6f6e6500000010536f6d650400bd010000010000bd01100c78636d087633206a756e6374696f6e244e6574776f726b496400012824427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657210010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f696428010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090000c1010000061800c501100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040040011c5b75383b20345d00010014496e6465780400b501010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000c901100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74b501010c753332000100204672616374696f6e08010c6e6f6db501010c75333200011464656e6f6db501010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6db501010c75333200011464656e6f6db501010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6db501010c75333200011464656e6f6db501010c75333200040000cd010c0c78636d0876330c58636d041043616c6c00000400d10101585665633c496e737472756374696f6e3c43616c6c3e3e0000d101000002d50100d5010c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400d901012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400d901012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400d901012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f696428011c51756572794964000120726573706f6e7365f5010120526573706f6e73650001286d61785f77656967687424011857656967687400011c71756572696572110201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473d901012c4d756c746941737365747300012c62656e6566696369617279a90101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473d901012c4d756c746941737365747300011064657374a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64150201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737424011857656967687400011063616c6c1902014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b501010c7533320001406d61785f6d6573736167655f73697a65b501010c7533320001306d61785f6361706163697479b501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b501010c75333200011873656e646572b501010c753332000124726563697069656e74b501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400ad010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f7204001d0201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473210201404d756c7469417373657446696c74657200012c62656e6566696369617279a90101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473210201404d756c7469417373657446696c74657200011064657374a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e000e003445786368616e676541737365740c011067697665210201404d756c7469417373657446696c74657200011077616e74d901012c4d756c746941737365747300011c6d6178696d616ca40110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473210201404d756c7469417373657446696c74657200011c72657365727665a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473210201404d756c7469417373657446696c74657200011064657374a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f1d0201445175657279526573706f6e7365496e666f000118617373657473210201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573e10101284d756c746941737365740001307765696768745f6c696d69742d02012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400cd01012458636d3c43616c6c3e0015002c536574417070656e6469780400cd01012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473d901012c4d756c74694173736574730001187469636b6574a90101344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f776569676874240118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400d901012c4d756c7469417373657473001c002c45787065637441737365740400d901012c4d756c7469417373657473001d00304578706563744f726967696e0400110201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400f90101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304000d0201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6530011c5665633c75383e000134726573706f6e73655f696e666f1d0201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578b501010c7533320001106e616d6530011c5665633c75383e00012c6d6f64756c655f6e616d6530011c5665633c75383e00012c63726174655f6d616a6f72b501010c75333200013c6d696e5f63726174655f6d696e6f72b501010c753332002200505265706f72745472616e7361637453746174757304001d0201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400b10101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bbd0101244e6574776f726b496400012c64657374696e6174696f6ead010154496e746572696f724d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e002600244c6f636b41737365740801146173736574e10101284d756c74694173736574000120756e6c6f636b6572a90101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574e10101284d756c74694173736574000118746172676574a90101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574e10101284d756c746941737365740001146f776e6572a90101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574e10101284d756c746941737365740001186c6f636b6572a90101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177a40110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400a90101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69742d02012c5765696768744c696d6974000130636865636b5f6f726967696e110201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000d901100c78636d087633286d756c746961737365742c4d756c746941737365747300000400dd01013c5665633c4d756c746941737365743e0000dd01000002e10100e101100c78636d087633286d756c74696173736574284d756c7469417373657400000801086964e501011c4173736574496400010c66756ee901012c46756e676962696c6974790000e501100c78636d087633286d756c746961737365741c4173736574496400010820436f6e63726574650400a90101344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d00010000e901100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400c1010110753132380000002c4e6f6e46756e6769626c650400ed0101344173736574496e7374616e636500010000ed01100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400c10101107531323800010018417272617934040040011c5b75383b20345d000200184172726179380400f101011c5b75383b20385d0003001c417272617931360400390101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000f101000003080000000800f5010c0c78636d08763320526573706f6e7365000118104e756c6c000000184173736574730400d901012c4d756c74694173736574730001003c457865637574696f6e526573756c740400f90101504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e04001c013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f04000102013456656350616c6c6574496e666f000400384469737061746368526573756c7404000d0201384d617962654572726f72436f646500050000f90104184f7074696f6e04045401fd010108104e6f6e6500000010536f6d650400fd010000010000fd01000004081c99010001020c0c78636d0876333456656350616c6c6574496e666f000004000502013c5665633c50616c6c6574496e666f3e0000050200000209020009020c0c78636d0876332850616c6c6574496e666f0000180114696e646578b501010c7533320001106e616d6530011c5665633c75383e00012c6d6f64756c655f6e616d6530011c5665633c75383e0001146d616a6f72b501010c7533320001146d696e6f72b501010c7533320001147061746368b501010c75333200000d020c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f72040030011c5665633c75383e000100385472756e63617465644572726f72040030011c5665633c75383e00020000110204184f7074696f6e04045401a9010108104e6f6e6500000010536f6d650400a901000001000015020c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d0003000019020c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656430011c5665633c75383e00001d020c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6ea90101344d756c74694c6f636174696f6e00012071756572795f696428011c517565727949640001286d61785f77656967687424011857656967687400002102100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e6974650400d901012c4d756c74694173736574730000001057696c6404002502013857696c644d756c74694173736574000100002502100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f660801086964e501011c4173736574496400010c66756e2902013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400b501010c75333200020030416c6c4f66436f756e7465640c01086964e501011c4173736574496400010c66756e2902013c57696c6446756e676962696c697479000114636f756e74b501010c753332000300002902100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c65000100002d020c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400240118576569676874000100003102080c78636d5056657273696f6e65644d756c746941737365747300010808563204003502013c76323a3a4d756c74694173736574730000000856330400d901013c76333a3a4d756c7469417373657473000100003502100c78636d087632286d756c746961737365742c4d756c7469417373657473000004003902013c5665633c4d756c746941737365743e000039020000023d02003d02100c78636d087632286d756c74696173736574284d756c74694173736574000008010869644102011c4173736574496400010c66756e6102012c46756e676962696c69747900004102100c78636d087632286d756c746961737365741c4173736574496400010820436f6e63726574650400450201344d756c74694c6f636174696f6e000000204162737472616374040030011c5665633c75383e000100004502100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72490201244a756e6374696f6e7300004902100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e73000124104865726500000008583104004d0201204a756e6374696f6e00010008583208004d0201204a756e6374696f6e00004d0201204a756e6374696f6e0002000858330c004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00030008583410004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00040008583514004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00050008583618004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e0006000858371c004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00070008583820004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e000800004d02100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400b501010c7533320000002c4163636f756e744964333208011c6e6574776f726b510201244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b510201244e6574776f726b4964000114696e64657828010c753634000200304163636f756e744b6579323008011c6e6574776f726b510201244e6574776f726b496400010c6b6579110101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400c1010110753132380005002847656e6572616c4b65790400550201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c697479080108696459020118426f64794964000110706172745d020120426f6479506172740008000051020c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d65640400550201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d61000300005502101c73705f636f72651c626f756e646564407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e000059020c0c78636d08763218426f6479496400012810556e6974000000144e616d65640400550201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400b501010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e000800205472656173757279000900005d020c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74b501010c753332000100204672616374696f6e08010c6e6f6db501010c75333200011464656e6f6db501010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6db501010c75333200011464656e6f6db501010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6db501010c75333200011464656e6f6db501010c753332000400006102100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400c1010110753132380000002c4e6f6e46756e6769626c650400650201344173736574496e7374616e6365000100006502100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400c10101107531323800010018417272617934040040011c5b75383b20345d000200184172726179380400f101011c5b75383b20385d0003001c417272617931360400390101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040030011c5665633c75383e000600006902080c78636d5856657273696f6e65644d756c74694c6f636174696f6e00010808563204004502014476323a3a4d756c74694c6f636174696f6e0000000856330400a901014476333a3a4d756c74694c6f636174696f6e000100006d020c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d0000a501011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090971020c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144576656e7404045400011834496e76616c6964466f726d61740401286d6573736167655f69640401244d657373616765496400000480446f776e77617264206d65737361676520697320696e76616c69642058434d2e48556e737570706f7274656456657273696f6e0401286d6573736167655f69640401244d6573736167654964000104bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e404578656375746564446f776e776172640801286d6573736167655f69640401244d657373616765496400011c6f7574636f6d65a501011c4f7574636f6d65000204c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e3c5765696768744578686175737465640c01286d6573736167655f69640401244d657373616765496400014072656d61696e696e675f77656967687424011857656967687400013c72657175697265645f776569676874240118576569676874000304f054686520776569676874206c696d697420666f722068616e646c696e6720646f776e77617264206d657373616765732077617320726561636865642e484f766572776569676874456e7175657565640c01286d6573736167655f69640401244d65737361676549640001406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800013c72657175697265645f7765696768742401185765696768740004041901446f776e77617264206d657373616765206973206f76657277656967687420616e642077617320706c6163656420696e20746865206f7665727765696768742071756575652e484f76657277656967687453657276696365640801406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800012c7765696768745f75736564240118576569676874000504e0446f776e77617264206d6573736167652066726f6d20746865206f766572776569676874207175657565207761732065786563757465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909750208306672616d655f73797374656d14506861736500010c384170706c7945787472696e73696304001c010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e0002000079020000022c007d02000002c800810208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6eb501014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d658502016473705f72756e74696d653a3a52756e74696d65537472696e6700008502000005020089020c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b30011c5665633c75383e000014684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e002823203c7765696768743e202d20604f283129602c23203c2f7765696768743e387365745f686561705f7061676573040114706167657310010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646530011c5665633c75383e0002306453657420746865206e65772072756e74696d6520636f64652e002823203c7765696768743e31012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f64656045012d20312063616c6c20746f206063616e5f7365745f636f6465603a20604f28532960202863616c6c73206073705f696f3a3a6d6973633a3a72756e74696d655f76657273696f6e60207768696368206973342020657870656e73697665292e842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e4d0154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652c206275742067656e6572616c6c7920746869732069732076657279b8657870656e736976652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e2c23203c2f7765696768743e5c7365745f636f64655f776974686f75745f636865636b73040110636f646530011c5665633c75383e000324190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e002823203c7765696768743e8c2d20604f2843296020776865726520604360206c656e677468206f662060636f646560842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e550154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652e2057652077696c6c207472656174207468697320617320612066756c6c48626c6f636b2e2023203c2f7765696768743e2c7365745f73746f726167650401146974656d738d0201345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973950201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697830010c4b657900011c7375626b6579731c010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b30011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8d020000029102009102000004083030009502000002300099020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2401185765696768740001246d61785f626c6f636b2401185765696768740001247065725f636c6173739d0201845065724469737061746368436c6173733c57656967687473506572436c6173733e00009d020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401a102000c01186e6f726d616ca10201045400012c6f7065726174696f6e616ca1020104540001246d616e6461746f7279a1020104540000a1020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632401185765696768740001346d61785f65787472696e736963a50201384f7074696f6e3c5765696768743e0001246d61785f746f74616ca50201384f7074696f6e3c5765696768743e0001207265736572766564a50201384f7074696f6e3c5765696768743e0000a50204184f7074696f6e04045401240108104e6f6e6500000010536f6d650400240000010000a9020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178ad0201545065724469737061746368436c6173733c7533323e0000ad020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454011c000c01186e6f726d616c1c01045400012c6f7065726174696f6e616c1c0104540001246d616e6461746f72791c0104540000b102082873705f776569676874733c52756e74696d65446257656967687400000801107265616410010c753634000114777269746510010c7536340000b502082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d658502013452756e74696d65537472696e67000124696d706c5f6e616d658502013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e1c010c753332000130737065635f76657273696f6e1c010c753332000130696d706c5f76657273696f6e1c010c75333200011061706973b902011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e1c010c75333200013473746174655f76657273696f6e08010875380000b902040c436f7704045401bd02000400bd02000000bd02000002c10200c10200000408f1011c00c5020c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c6574c902101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454012c045300000400790201185665633c543e0000cd020c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77280124543a3a4d6f6d656e7400004054536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e002823203c7765696768743e31012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed1020000040c0018a400d5020c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e6465780000489841737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e00dc5061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00f02d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e602d204f6e652072657365727665206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d902d204442205765696768743a203120526561642f577269746520284163636f756e7473292c23203c2f7765696768743e207472616e7366657208010c6e6577d90201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e6465780001505d0141737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6eb86973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0025012d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e642d204f6e65207472616e73666572206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743ae02020202d2052656164733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e742028726563697069656e7429e42020202d205772697465733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e742028726563697069656e74292c23203c2f7765696768743e1066726565040114696e64657810013c543a3a4163636f756e74496e646578000248944672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e005d015061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e000d012d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e0084456d6974732060496e646578467265656460206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e602d204f6e652072657365727665206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d902d204442205765696768743a203120526561642f577269746520284163636f756e7473292c23203c2f7765696768743e38666f7263655f7472616e736665720c010c6e6577d90201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65a40110626f6f6c0003545501466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c7265616479e868656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00a42d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e41012d2060667265657a65603a2069662073657420746f206074727565602c2077696c6c20667265657a652074686520696e64657820736f2069742063616e6e6f74206265207472616e736665727265642e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e782d20557020746f206f6e652072657365727665206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743af42020202d2052656164733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e7420286f726967696e616c206f776e657229f82020202d205772697465733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e7420286f726967696e616c206f776e6572292c23203c2f7765696768743e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004484101467265657a6520616e20696e64657820736f2069742077696c6c20616c7761797320706f696e7420746f207468652073656e646572206163636f756e742e205468697320636f6e73756d657320746865206465706f7369742e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d757374206861766520616c6e6f6e2d66726f7a656e206163636f756e742060696e646578602e00ac2d2060696e646578603a2074686520696e64657820746f2062652066726f7a656e20696e20706c6163652e0088456d6974732060496e64657846726f7a656e60206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e702d20557020746f206f6e6520736c617368206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d902d204442205765696768743a203120526561642f577269746520284163636f756e7473292c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed9020c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801ac011408496404000001244163636f756e74496400000014496e6465780400dd0201304163636f756e74496e6465780001000c526177040030011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400110101205b75383b2032305d00040000dd02000006ac00e1020c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e502101c73705f636f72651c626f756e646564407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401e902045300000400f10201185665633c543e0000e902083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c01086964f10101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73ed02011c526561736f6e730000ed02083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000f102000002e90200f502101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401f902045300000400fd0201185665633c543e0000f902083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e74696669657201f1011c42616c616e63650118000801086964f1010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000fd02000002f9020001030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e7366657208011064657374d90201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c1010128543a3a42616c616e6365000064d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e002823203c7765696768743e61012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e842d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d11012d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e2c23203c2f7765696768743e2c7365745f62616c616e63650c010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565c1010128543a3a42616c616e63650001306e65775f7265736572766564c1010128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f75726365d90201504163636f756e7449644c6f6f6b75704f663c543e00011064657374d90201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c1010128543a3a42616c616e63650002184d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e2823203c7765696768743e4d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e2c23203c2f7765696768743e4c7472616e736665725f6b6565705f616c69766508011064657374d90201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c1010128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374d90201504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665a40110626f6f6c00044405015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fc820206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e2023203c7765696768743e39012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e302020233c2f7765696768743e3c666f7263655f756e7265736572766508010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e05030c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090909030c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800000d03086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e74000000085632000100001103101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540115030453000004001d0301185665633c543e00001503104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c6963000004001903013c737232353531393a3a5075626c6963000019030c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d00001d030000021503002103084873705f636f6e73656e7375735f736c6f747310536c6f740000040010010c75363400002503000002000029030000022d03002d030000040800310300310308447370697269746e65745f72756e74696d652c53657373696f6e4b657973000004011061757261150301c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000035030000021c003903000004083d0330003d030c1c73705f636f72651863727970746f244b65795479706549640000040040011c5b75383b20345d000041030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579733103011c543a3a4b65797300011470726f6f6630011c5665633c75383e000038e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e002823203c7765696768743e11012d20436f6d706c65786974793a20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642eec2d20446252656164733a20606f726967696e206163636f756e74602c2060543a3a56616c696461746f7249644f66602c20604e6578744b65797360a02d2044625772697465733a20606f726967696e206163636f756e74602c20604e6578744b65797360802d204462526561647320706572206b65792069643a20604b65794f776e657260842d20446257726974657320706572206b65792069643a20604b65794f776e6572602c23203c2f7765696768743e2870757267655f6b657973000140c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e002823203c7765696768743e61012d20436f6d706c65786974793a20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468a420206f662060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642eec2d20446252656164733a2060543a3a56616c696461746f7249644f66602c20604e6578744b657973602c20606f726967696e206163636f756e7460a02d2044625772697465733a20604e6578744b657973602c20606f726967696e206163636f756e7460842d20446257726974657320706572206b65792069643a20604b65794f776e6572602c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e45030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e49030c4470617261636861696e5f7374616b696e6714747970657324526f756e64496e666f042c426c6f636b4e756d6265720110000c011c63757272656e741c013053657373696f6e496e646578000114666972737410012c426c6f636b4e756d6265720001186c656e67746810012c426c6f636b4e756d62657200004d030c4470617261636861696e5f7374616b696e671474797065734444656c65676174696f6e436f756e7465720000080114726f756e641c013053657373696f6e496e64657800011c636f756e7465721c010c753332000051030c4470617261636861696e5f7374616b696e67147479706573145374616b6508244163636f756e74496401001c42616c616e63650118000801146f776e65720001244163636f756e744964000118616d6f756e7418011c42616c616e6365000055030c4470617261636861696e5f7374616b696e671474797065732443616e6469646174650c244163636f756e74496401001c42616c616e63650118644d617844656c656761746f727350657243616e646964617465000014010869640001244163636f756e7449640001147374616b6518011c42616c616e636500012864656c656761746f727359030101014f7264657265645365743c5374616b653c4163636f756e7449642c2042616c616e63653e2c204d617844656c656761746f727350657243616e6469646174653e000114746f74616c18011c42616c616e63650001187374617475736503013c43616e646964617465537461747573000059030c4470617261636861696e5f7374616b696e670c736574284f7264657265645365740804540151030453000004005d030140426f756e6465645665633c542c20533e00005d03101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454015103045300000400610301185665633c543e0000610300000251030065030c4470617261636861696e5f7374616b696e671474797065733c43616e646964617465537461747573000108184163746976650000001c4c656176696e6704001c013053657373696f6e496e6465780001000069030c4470617261636861696e5f7374616b696e6714747970657328546f74616c5374616b65041c42616c616e6365011800080124636f6c6c61746f727318011c42616c616e636500012864656c656761746f727318011c42616c616e636500006d030c4470617261636861696e5f7374616b696e670c736574284f72646572656453657408045401510304530000040071030140426f756e6465645665633c542c20533e00007103101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454015103045300000400610301185665633c543e000075030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e34496e666c6174696f6e496e666f0000080120636f6c6c61746f727903012c5374616b696e67496e666f00012464656c656761746f727903012c5374616b696e67496e666f000079030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e2c5374616b696e67496e666f00000801206d61785f726174658c012c5065727175696e74696c6c00012c7265776172645f726174657d0301285265776172645261746500007d030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e28526577617264526174650000080118616e6e75616c8c012c5065727175696e74696c6c0001247065725f626c6f636b8c012c5065727175696e74696c6c00008103101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601180453000004008503013842547265654d61703c4b2c20563e00008503042042547265654d617008044b011004560118000400890300000089030000028d03008d030000040810180091030c4470617261636861696e5f7374616b696e671870616c6c65741043616c6c0404540001543c666f7263655f6e65775f726f756e64000018d0466f7263657320746865207374617274206f6620746865206e657720726f756e6420696e20746865206e65787420626c6f636b2e00a0546865206e657720726f756e642077696c6c20626520656e666f7263656420766961203c54206173a453686f756c64456e6453657373696f6e3c5f3e3e3a3a73686f756c645f656e645f73657373696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e347365745f696e666c6174696f6e100170636f6c6c61746f725f6d61785f726174655f70657263656e746167658c012c5065727175696e74696c6c000198636f6c6c61746f725f616e6e75616c5f7265776172645f726174655f70657263656e746167658c012c5065727175696e74696c6c00017464656c656761746f725f6d61785f726174655f70657263656e746167658c012c5065727175696e74696c6c00019c64656c656761746f725f616e6e75616c5f7265776172645f726174655f70657263656e746167658c012c5065727175696e74696c6c00013cf05365742074686520616e6e75616c20696e666c6174696f6e207261746520746f20646572697665207065722d726f756e6420696e666c6174696f6e2e00110154686520696e666c6174696f6e2064657461696c732061726520636f6e736964657265642076616c69642069662074686520616e6e75616c207265776172642072617465f0697320617070726f78696d6174656c7920746865207065722d626c6f636b207265776172642072617465206d756c7469706c69656420627920746865ac657374696d617465642a20746f74616c206e756d626572206f6620626c6f636b732070657220796561722e00cc54686520657374696d61746564206176657261676520626c6f636b2074696d65206973207477656c7665207365636f6e64732e000d014e4f54453a204974657261746573206f7665722043616e646964617465506f6f6c20616e6420666f7220656163682063616e646964617465206f766572207468656972090164656c656761746f727320746f207570646174652074686569722072657761726473206265666f72652074686520726577617264207261746573206368616e67652ee04e6565647320746f20626520696d70726f766564207768656e207363616c696e6720757020604d6178546f7043616e64696461746573602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0068456d6974732060526f756e64496e666c6174696f6e536574602e6c7365745f6d61785f73656c65637465645f63616e6469646174657304010c6e65771c010c75333200022c090153657420746865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e6469646174657320746861742063616e2062652073656c6563746564a861742074686520626567696e6e696e67206f6620656163682076616c69646174696f6e20726f756e642e00e84368616e67657320617265206e6f74206170706c69656420756e74696c20746865207374617274206f6620746865206e65787420726f756e642e000d01546865206e65772076616c7565206d75737420626520686967686572207468616e20746865206d696e696d756d20616c6c6f7765642061732073657420696e207468655c70616c6c6574277320636f6e66696775726174696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0084456d69747320604d617853656c656374656443616e64696461746573536574602e507365745f626c6f636b735f7065725f726f756e6404010c6e6577100138543a3a426c6f636b4e756d62657200032cd453657420746865206e756d626572206f6620626c6f636b7320656163682076616c69646174696f6e20726f756e64206c617374732e000901496620746865206e65772076616c7565206973206c657373207468616e20746865206c656e677468206f66207468652063757272656e7420726f756e642c20746865050173797374656d2077696c6c20696d6d6564696174656c79206d6f766520746f20746865206e65787420726f756e6420696e20746865206e65787420626c6f636b2e000d01546865206e65772076616c7565206d75737420626520686967686572207468616e20746865206d696e696d756d20616c6c6f7765642061732073657420696e207468655c70616c6c6574277320636f6e66696775726174696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0068456d6974732060426c6f636b73506572526f756e64536574602e5c7365745f6d61785f63616e6469646174655f7374616b6504010c6e657718013042616c616e63654f663c543e000418110153657420746865206d6178696d616c20616d6f756e74206120636f6c6c61746f722063616e207374616b652e204578697374696e67207374616b657320617265206e6f74206368616e6765642e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0084456d69747320604d617843616e6469646174655374616b654368616e676564602e58666f7263655f72656d6f76655f63616e646964617465040120636f6c6c61746f72d902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650005300101466f726365646c792072656d6f766573206120636f6c6c61746f722063616e6469646174652066726f6d2074686520546f7043616e6469646174657320616e64e4636c6561727320616c6c206173736f6369617465642073746f7261676520666f72207468652063616e64696461746520616e642074686569722c64656c656761746f72732e00fc507265706172657320756e7374616b696e67206f66207468652063616e6469646174657320616e642074686569722064656c656761746f7273207374616b65f077686963682063616e20626520756e6c6f636b6564207669612060756e6c6f636b5f756e7374616b6564602061667465722077616974696e6720617409016c6561737420605374616b654475726174696f6e60206d616e7920626c6f636b732e20416c736f20696e6372656d656e7473207265776172647320666f722074686578636f6c6c61746f7220616e642074686569722064656c656761746f72732e00d4496e6372656d656e74732072657761726473206f662063616e64696461746520616e642074686569722064656c656761746f72732e0064456d697473206043616e64696461746552656d6f766564602e3c6a6f696e5f63616e646964617465730401147374616b6518013042616c616e63654f663c543e000644904a6f696e2074686520736574206f6620636f6c6c61746f722063616e646964617465732e00f8496e20746865206e65787420626c6f636b732c2069662074686520636f6c6c61746f722063616e6469646174652068617320656e6f7567682066756e6473fc7374616b656420746f20626520696e636c7564656420696e20616e79206f662074686520746f7020604d617853656c656374656443616e64696461746573600d01706f736974696f6e732c2069742077696c6c20626520696e636c7564656420696e2074686520736574206f6620706f74656e7469616c20617574686f72732074686174050177696c6c2062652073656c656374656420627920746865207374616b652d77656967687465642072616e646f6d2073656c656374696f6e2066756e6374696f6e2e00fc546865207374616b65642066756e6473206f6620746865206e657720636f6c6c61746f722063616e6469646174652061726520616464656420746f2074686568746f74616c207374616b65206f66207468652073797374656d2e00110154686520746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e2074686520616c6c6f7765642072616e67652061738873657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e00f0546865206469737061746368206f726967696e206d757374206e6f7420626520616c72656164792070617274206f662074686520636f6c6c61746f729463616e64696461746573206e6f72206f66207468652064656c656761746f7273207365742e0084456d69747320604a6f696e6564436f6c6c61746f7243616e64696461746573602e54696e69745f6c656176655f63616e6469646174657300076cc05265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e0005014f6e20737563636573732c20746865206163636f756e7420697320696d6d6564696174656c792072656d6f7665642066726f6d207468652063616e6469646174651101706f6f6c20746f2070726576656e742073656c656374696f6e206173206120636f6c6c61746f7220696e206675747572652076616c69646174696f6e20726f756e64732cd862757420756e7374616b696e67206f66207468652066756e6473206973206578656375746564207769746820612064656c6179206f665c605374616b654475726174696f6e6020626c6f636b732e00ac546865206578697420726571756573742063616e2062652072657665727365642062792063616c6c696e67686063616e63656c5f6c656176655f63616e64696461746573602e00f454686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e204974206973110175706461746564206576656e2074686f756768207468652066756e6473206f66207468652063616e6469646174652077686f207369676e616c656420746f206c65617665fc617265207374696c6c206c6f636b656420666f7220604578697444656c617960202b20605374616b654475726174696f6e60206d6f726520626c6f636b732e000d014e4f544520313a2055706f6e207374617274696e672061206e65772073657373696f6e5f6920696e20606e65775f73657373696f6e602c207468652063757272656e741101746f702063616e64696461746573206172652073656c656374656420746f20626520626c6f636b20617574686f727320666f722073657373696f6e5f692b312e20416e7905016368616e67657320746f2074686520746f702063616e64696461746573206166746572776172647320646f206e6f74206566666563742074686520736574206f6660617574686f727320666f722073657373696f6e5f692b312ed8546875732c207765206861766520746f206d616b652073757265206e6f6e65206f6620746865736520636f6c6c61746f72732063616ebc6c65617665206265666f72652073657373696f6e5f692b3120656e64732062792064656c6179696e67207468656972846578697420666f7220604578697444656c617960206d616e7920626c6f636b732e00f04e4f544520323a20576520646f206e6f7420696e6372656d656e74207265776172647320696e20746869732065787472696e73696320617320746865110163616e64696461746520636f756c64207374696c6c20617574686f7220626c6f636b732c20616e64207468757320626520656c696769626c6520746f2072656365697665ac726577617264732c20756e74696c2074686520656e64206f6620746865206e6578742073657373696f6e2e0078456d6974732060436f6c6c61746f725363686564756c656445786974602e60657865637574655f6c656176655f63616e64696461746573040120636f6c6c61746f72d902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500084405014578656375746520746865206e6574776f726b2065786974206f6620612063616e6469646174652077686f2072657175657374656420746f206c65617665206174f06c65617374206045786974517565756544656c61796020726f756e64732061676f2e20507265706172657320756e7374616b696e67206f6620746865fc63616e6469646174657320616e642074686569722064656c656761746f7273207374616b652077686963682063616e20626520756e6c6f636b656420766961f460756e6c6f636b5f756e7374616b6564602061667465722077616974696e67206174206c6561737420605374616b654475726174696f6e60206d616e791c626c6f636b732e00c05265717569726573207468652063616e64696461746520746f2070726576696f75736c7920686176652063616c6c65646060696e69745f6c656176655f63616e64696461746573602e00ac546865206578697420726571756573742063616e2062652072657665727365642062792063616c6c696e67686063616e63656c5f6c656176655f63616e64696461746573602e00fc4e4f54453a204974657261746573206f7665722043616e646964617465506f6f6c20666f7220656163682063616e646964617465206f766572207468656972fc64656c656761746f727320746f2073657420726577617264732e204e6565647320746f20626520696d70726f766564207768656e207363616c696e672075704c604d6178546f7043616e64696461746573602e0054456d6974732060436f6c6c61746f724c656674602e5c63616e63656c5f6c656176655f63616e646964617465730009200501526576657274207468652070726576696f75736c79207265717565737465642065786974206f6620746865206e6574776f726b206f66206120636f6c6c61746f720d0163616e6469646174652e204f6e20737563636573732c2061646473206261636b207468652063616e64696461746520746f2074686520546f7043616e6469646174657368616e6420757064617465732074686520636f6c6c61746f72732e00c05265717569726573207468652063616e64696461746520746f2070726576696f75736c7920686176652063616c6c65646060696e69745f6c656176655f63616e64696461746573602e0074456d6974732060436f6c6c61746f7243616e63656c656445786974602e5063616e6469646174655f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000a30a85374616b65206d6f72652066756e647320666f72206120636f6c6c61746f722063616e6469646174652e0001014966206e6f7420696e2074686520736574206f662063616e646964617465732c207374616b696e6720656e6f7567682066756e647320616c6c6f77732074686505016163636f756e7420746f20626520616464656420746f2069742e20546865206c617267657220616d6f756e74206f662066756e64732c2074686520686967686572dc6368616e63657320746f2062652073656c65637465642061732074686520617574686f72206f6620746865206e65787420626c6f636b2e00dc54686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e006c456d6974732060436f6c6c61746f725374616b65644d6f7265602e5063616e6469646174655f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000b3ca85374616b65206c6573732066756e647320666f72206120636f6c6c61746f722063616e6469646174652e000501496620746865206e657720616d6f756e74206f66207374616b65642066756e64206973206e6f74206c6172676520656e6f7567682c20746865206163636f756e74fc636f756c642062652072656d6f7665642066726f6d2074686520736574206f6620636f6c6c61746f722063616e6469646174657320616e64206e6f74206265a4636f6e7369646572656420666f7220617574686f72696e6720746865206e65787420626c6f636b732e00dc54686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e000d0154686520756e7374616b65642066756e647320617265206e6f742072656c656173656420696d6d6564696174656c7920746f20746865206163636f756e742c20627574d0746865792077696c6c20626520617661696c61626c6520616674657220605374616b654475726174696f6e6020626c6f636b732e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e006c456d6974732060436f6c6c61746f725374616b65644c657373602e3c6a6f696e5f64656c656761746f7273080120636f6c6c61746f72d902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e7418013042616c616e63654f663c543e000c5805014a6f696e2074686520736574206f662064656c656761746f72732062792064656c65676174696e6720746f206120636f6c6c61746f722063616e6469646174652e000501546865206163636f756e7420746861742077616e747320746f2064656c65676174652063616e6e6f742062652070617274206f662074686520636f6c6c61746f725c63616e64696461746573207365742061732077656c6c2e0009015468652063616c6c6572206d757374205f6e6f745f206861766520612064656c65676174696f6e2e20496620746861742069732074686520636173652c2074686579b061726520726571756972656420746f2066697273742072656d6f7665207468652064656c65676174696f6e2e00110154686520616d6f756e74207374616b6564206d757374206265206c6172676572207468616e20746865206d696e696d756d20726571756972656420746f206265636f6d65c4612064656c656761746f722061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e0009014173206f6e6c7920604d617844656c656761746f7273506572436f6c6c61746f72602061726520616c6c6f77656420746f2064656c6567617465206120676976656e0501636f6c6c61746f722c2074686520616d6f756e74207374616b6564206d757374206265206c6172676572207468616e20746865206c6f77657374206f6e6520696e01017468652063757272656e7420736574206f662064656c656761746f7220666f7220746865206f7065726174696f6e20746f206265206d65616e696e6766756c2e00090154686520636f6c6c61746f72277320746f74616c207374616b652061732077656c6c206173207468652070616c6c6574277320746f74616c207374616b652061726558696e63726561736564206163636f7264696e676c792e004c456d697473206044656c65676174696f6e602ebc456d697473206044656c65676174696f6e5265706c6163656460206966207468652063616e64696461746520686173f8604d617844656c656761746f7273506572436f6c6c61746f7260206d616e792064656c65676174696f6e732062757420746869732064656c656761746f72fc7374616b6564206d6f7265207468616e206f6e65206f6620746865206f746865722064656c656761746f7273206f6620746869732063616e6469646174652e406c656176655f64656c656761746f7273000d400d014c656176652074686520736574206f662064656c656761746f727320616e642c20627920696d706c69636174696f6e2c207265766f6b6520746865206f6e676f696e672c64656c65676174696f6e2e001101416c6c207374616b65642066756e647320617265206e6f7420756e6c6f636b656420696d6d6564696174656c792c2062757420746865792061726520616464656420746f0101746865207175657565206f662070656e64696e6720756e7374616b696e672c20616e642077696c6c206566666563746976656c792062652072656c65617365640901616674657220605374616b654475726174696f6e6020626c6f636b732066726f6d20746865206d6f6d656e74207468652064656c656761746f72206c65617665732e000d0154686973206f7065726174696f6e20726564756365732074686520746f74616c207374616b65206f66207468652070616c6c65742061732077656c6c2061732074686509017374616b6573206f6620616c6c20636f6c6c61746f7273207468617420776572652064656c6567617465642c20706f74656e7469616c6c7920616666656374696e6705017468656972206368616e63657320746f20626520696e636c7564656420696e2074686520736574206f662063616e6469646174657320696e20746865206e6578741c726f756e64732e0005014175746f6d61746963616c6c7920696e6372656d656e74732074686520616363756d756c617465642072657761726473206f6620746865206f726967696e206f665c7468652063757272656e742064656c65676174696f6e2e0058456d697473206044656c656761746f724c656674602e5064656c656761746f725f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000e18dc496e63726561736520746865207374616b6520666f722064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e0001014966206e6f7420696e2074686520736574206f662063616e646964617465732c207374616b696e6720656e6f7567682066756e647320616c6c6f77732074686594636f6c6c61746f722063616e64696461746520746f20626520616464656420746f2069742e0070456d697473206044656c656761746f725374616b65644d6f7265602e5064656c656761746f725f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000f40d452656475636520746865207374616b6520666f722064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e000901496620746865206e657720616d6f756e74206f66207374616b65642066756e64206973206e6f74206c6172676520656e6f7567682c2074686520636f6c6c61746f72fc636f756c642062652072656d6f7665642066726f6d2074686520736574206f6620636f6c6c61746f722063616e6469646174657320616e64206e6f74206265a4636f6e7369646572656420666f7220617574686f72696e6720746865206e65787420626c6f636b732e00090154686520756e7374616b65642066756e647320617265206e6f742072656c6561736520696d6d6564696174656c7920746f20746865206163636f756e742c20627574d0746865792077696c6c20626520617661696c61626c6520616674657220605374616b654475726174696f6e6020626c6f636b732e0001015468652072656d61696e696e67207374616b65642066756e6473206d757374207374696c6c206265206c6172676572207468616e20746865206d696e696d756df0726571756972656420627920746869732070616c6c657420746f206d61696e7461696e2074686520737461747573206f662064656c656761746f722e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e0070456d697473206044656c656761746f725374616b65644c657373602e3c756e6c6f636b5f756e7374616b6564040118746172676574d902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365001028f4556e6c6f636b20616c6c2070726576696f75736c79207374616b65642066756e6473207468617420617265206e6f7720617661696c61626c6520666f720501756e6c6f636b696e6720627920746865206f726967696e206163636f756e7420616674657220605374616b654475726174696f6e6020626c6f636b73206861766520656c61707365642e00fc5765696768743a204f285529207768657265205520697320746865206e756d626572206f66206c6f636b656420756e7374616b696e6720726571756573747380626f756e64656420627920604d6178556e7374616b655265717565737473602eac2d2052656164733a205b4f726967696e204163636f756e745d2c20556e7374616b696e672c204c6f636b73682d205772697465733a20556e7374616b696e672c204c6f636b73e82d204b696c6c733a20556e7374616b696e672026204c6f636b73206966206e6f2062616c616e6365206973206c6f636b656420616e796d6f72652c23203c2f7765696768743e34636c61696d5f7265776172647300113cd4436c61696d20626c6f636b20617574686f72696e67207265776172647320666f72207468652074617267657420616464726573732e00090152657175697265732060526577617264736020746f20626520736574206265666f726568616e642c2077686963682063616e2062792074726967676572656420627970616e79206f662074686520666f6c6c6f77696e67206f7074696f6e73e82a2043616c6c696e6720696e6372656d656e745f7b636f6c6c61746f722c2064656c656761746f727d5f72657761726473202861637469766529782a20416c746572696e6720796f7572207374616b65202861637469766529b02a204c656176696e6720746865206e6574776f726b206173206120636f6c6c61746f72202861637469766529bc2a205265766f6b696e6720612064656c65676174696f6e20617320612064656c656761746f7220286163746976652909012a204265696e6720612064656c656761746f722077686f736520636f6c6c61746f72206c65667420746865206e6574776f726b2c20616c7465726564207468656972a020207374616b65206f7220696e6372656d656e746564207265776172647320287061737369766529000501546865206469737061746368206f726967696e2063616e20626520616e79207369676e6564206f6e652c20652e672e2c20616e796f6e652063616e20636c61696d2c666f7220616e796f6e652e0044456d69747320605265776172646564602e68696e6372656d656e745f636f6c6c61746f725f72657761726473001218b44163746976656c7920696e6372656d656e74207468652072657761726473206f66206120636f6c6c61746f722e0005015468652073616d652065666665637420697320747269676765726564206279206368616e67696e6720746865207374616b65206f72206c656176696e6720746865206e6574776f726b2e009c546865206469737061746368206f726967696e206d757374206265206120636f6c6c61746f722e6c696e6372656d656e745f64656c656761746f725f72657761726473001318b84163746976656c7920696e6372656d656e74207468652072657761726473206f6620612064656c656761746f722e00f85468652073616d652065666665637420697320747269676765726564206279206368616e67696e6720746865207374616b65206f72207265766f6b696e673064656c65676174696f6e732e00a0546865206469737061746368206f726967696e206d75737420626520612064656c656761746f722e7c657865637574655f7363686564756c65645f7265776172645f6368616e67650014280d0145786563757465732074686520616e6e75616c20726564756374696f6e206f66207468652072657761726420726174657320666f7220636f6c6c61746f727320616e642c64656c656761746f72732e00dc4d6f72656f7665722c2073657473207265776172647320666f7220616c6c20636f6c6c61746f727320616e642064656c656761746f72737c6265666f72652061646a757374696e672074686520696e666c6174696f6e2e000d01546865206469737061746368206f726967696e2063616e20626520616e79207369676e6564206f6e652062656361757365207765206261696c2069662063616c6c656428746f6f206561726c792e0068456d6974732060526f756e64496e666c6174696f6e536574602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e95030c4470617261636861696e5f7374616b696e671870616c6c6574144572726f7204045400017c4444656c656761746f724e6f74466f756e64000004b8546865206163636f756e74206973206e6f742070617274206f66207468652064656c656761746f7273207365742e4443616e6469646174654e6f74466f756e64000104dc546865206163636f756e74206973206e6f742070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3c44656c656761746f72457869737473000204c8546865206163636f756e7420697320616c72656164792070617274206f66207468652064656c656761746f7273207365742e3c43616e646964617465457869737473000304ec546865206163636f756e7420697320616c72656164792070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3056616c5374616b655a65726f000404e4546865206163636f756e7420747269656420746f207374616b65206d6f7265206f72206c657373207769746820616d6f756e74207a65726f2e4056616c5374616b6542656c6f774d696e0005080d01546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f20626520616464656420746f2074686520636f6c6c61746f723c63616e64696461746573207365742e4056616c5374616b6541626f76654d61780006041101546865206163636f756e742068617320616c7265616479207374616b656420746865206d6178696d756d20616d6f756e74206f662066756e647320706f737369626c652e4844656c65676174696f6e42656c6f774d696e000708f8546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f2064656c6567617465206120636f6c6c61746f722863616e6469646174652e38416c72656164794c656176696e670008080d0154686520636f6c6c61746f722063616e6469646174652068617320616c72656164792074726967676572207468652070726f6365737320746f206c65617665207468656c736574206f6620636f6c6c61746f722063616e646964617465732e284e6f744c656176696e67000908f454686520636f6c6c61746f722063616e6469646174652077616e74656420746f20657865637574652074686520657869742062757420686173206e6f74f472657175657374656420746f206c65617665206265666f72652062792063616c6c696e672060696e69745f6c656176655f63616e64696461746573602e3843616e6e6f744c65617665596574000a08dc54686520636f6c6c61746f7220747269656420746f206c65617665206265666f72652077616974696e67206174206c6561737420666f72746045786974517565756544656c617960206d616e7920726f756e64732e6443616e6e6f744a6f696e4265666f7265556e6c6f636b696e67000b10f8546865206163636f756e742068617320612066756c6c206c697374206f6620756e7374616b696e6720726571756573747320616e64206e6565647320746ffc756e6c6f636b206174206c65617374206f6e65206f66207468657365206265666f7265206265696e672061626c6520746f206a6f696e2028616761696e292edc4e4f54453a2043616e206f6e6c792068617070656e20696620746865206163636f756e742077617320612063616e646964617465206f72f464656c656761746f72206265666f726520616e642065697468657220676f74206b69636b6564206f722065786974656420766f6c756e746172696c792e44416c726561647944656c65676174696e67000c04e4546865206163636f756e7420697320616c72656164792064656c65676174696e672074686520636f6c6c61746f722063616e6469646174652e404e6f7459657444656c65676174696e67000d080901546865206163636f756e7420686173206e6f742064656c65676174656420616e7920636f6c6c61746f722063616e646964617465207965742c2068656e6365206974806973206e6f7420696e2074686520736574206f662064656c656761746f72732e6c44656c65676174696f6e73506572526f756e644578636565646564000e1811015468652064656c656761746f722068617320657863656564656420746865206e756d626572206f662064656c65676174696f6e732070657220726f756e6420776869636894697320657175616c20746f204d617844656c656761746f7273506572436f6c6c61746f722e000901546869732070726f746563747320616761696e73742061747461636b7320696e20776869636820612064656c656761746f722063616e2072652d64656c6567617465010166726f6d206120636f6c6c61746f722077686f2068617320616c726561647920617574686f726564206120626c6f636b2c20746f20616e6f74686572206f6e6570776869636820686173206e6f7420696e207468697320726f756e642e44546f6f4d616e7944656c656761746f7273000f14010154686520636f6c6c61746f722063616e6469646174652068617320616c7265616479207265616368656420746865206d6178696d756d206e756d626572206f662c64656c656761746f72732e00050154686973206572726f722069732067656e65726174656420696e20636173652061206e65772064656c65676174696f6e207265717565737420646f6573206e6f74f47374616b6520656e6f7567682066756e647320746f207265706c61636520736f6d65206f74686572206578697374696e672064656c65676174696f6e2e60546f6f466577436f6c6c61746f7243616e64696461746573001008110154686520736574206f6620636f6c6c61746f722063616e6469646174657320776f756c642066616c6c2062656c6f7720746865207265717569726564206d696e696d756d5469662074686520636f6c6c61746f72206c6566742e5043616e6e6f745374616b6549664c656176696e67001108f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66010163616e6469646174657320616e642063616e6e6f7420706572666f726d20616e79206f7468657220616374696f6e7320696e20746865206d65616e74696d652e5c43616e6e6f7444656c656761746549664c656176696e67001208f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66ac63616e6469646174657320616e6420746875732063616e6e6f742062652064656c65676174656420746f2e804d6178436f6c6c61746f727350657244656c656761746f72457863656564656400130811015468652064656c656761746f722068617320616c72656164792064656c65676174656420746865206d6178696d756d206e756d626572206f662063616e6469646174657320616c6c6f7765642e60416c726561647944656c656761746564436f6c6c61746f72001408ec5468652064656c656761746f722068617320616c72656164792070726576696f75736c792064656c6567617465642074686520636f6c6c61746f722863616e6469646174652e4844656c65676174696f6e4e6f74466f756e64001504f854686520676976656e2064656c65676174696f6e20646f6573206e6f7420657869737420696e2074686520736574206f662064656c65676174696f6e732e24556e646572666c6f77001608050154686520636f6c6c61746f722064656c6567617465206f72207468652064656c656761746f7220697320747279696e6720746f20756e2d7374616b65206d6f72658066756e64732074686174206172652063757272656e746c79207374616b65642e4443616e6e6f7453657441626f76654d6178001708d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738061626f766520746865206d6178696d756d2076616c756520616c6c6f7765642e4443616e6e6f7453657442656c6f774d696e001808d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738062656c6f7720746865206d696e696d756d2076616c756520616c6c6f7765642e3c496e76616c69645363686564756c65001904dc416e20696e76616c696420696e666c6174696f6e20636f6e66696775726174696f6e20697320747279696e6720746f206265207365742e3c4e6f4d6f7265556e7374616b696e67001a08c4546865207374616b696e6720726577617264206265696e6720756e6c6f636b656420646f6573206e6f742065786973742e7c4d617820756e6c6f636b696e6720726571756573747320726561636865642e20546f6f4561726c79001b0801015468652072657761726420726174652063616e6e6f742062652061646a75737465642079657420617320616e20656e74697265207965617220686173206e6f741c7061737365642e345374616b654e6f74466f756e64001c04d850726f7669646564207374616b65642076616c7565206973207a65726f2e2053686f756c64206e65766572206265207468726f776e2e40556e7374616b696e674973456d707479001d049443616e6e6f7420756e6c6f636b207768656e20556e7374616b656420697320656d7074792e3c526577617264734e6f74466f756e64001e047843616e6e6f7420636c61696d207265776172647320696620656d7074792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909099903101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454019d03045300000400590501185665633c543e00009d030000040c1ca1030000a10310346672616d655f737570706f72741874726169747324707265696d616765731c426f756e64656404045401a503010c184c6567616379040110686173682c01104861736800000018496e6c696e65040085010134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173682c01104861736800010c6c656e1c010c75333200020000a50308447370697269746e65745f72756e74696d652c52756e74696d6543616c6c0001741853797374656d0400890201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400cd0201b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c496e64696365730400d50201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e0005002042616c616e6365730400010301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0006001c53657373696f6e0400410301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0016004050617261636861696e5374616b696e670400910301d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e5374616b696e672c2052756e74696d653e0015002444656d6f63726163790400a90301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e001e001c436f756e63696c0400b50301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e001f0048546563686e6963616c436f6d6d69747465650400c50301dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465652c2052756e74696d653e0020004c546563686e6963616c4d656d626572736869700400c90301e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c4d656d626572736869702c2052756e74696d653e0022002054726561737572790400cd0301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e0023001c5574696c6974790400d10301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e0028001c56657374696e670400f90301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e002900245363686564756c65720400010401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e002a001450726f78790400090401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002b0020507265696d6167650400110401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e002c0038546970734d656d626572736869700400150401cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970734d656d626572736869702c2052756e74696d653e002d0010546970730400190401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970732c2052756e74696d653e002e0014437479706504001d0401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43747970652c2052756e74696d653e003d002c4174746573746174696f6e0400210401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4174746573746174696f6e2c2052756e74696d653e003e002844656c65676174696f6e0400350401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656c65676174696f6e2c2052756e74696d653e003f000c4469640400510401a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469642c2052756e74696d653e004000244469644c6f6f6b75700400a50401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469644c6f6f6b75702c2052756e74696d653e00430024576562334e616d65730400b50401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c576562334e616d65732c2052756e74696d653e004400445075626c696343726564656e7469616c730400b90401d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5075626c696343726564656e7469616c732c2052756e74696d653e0045003c50617261636861696e53797374656d0400c90401d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0050002458636d7051756575650400fd0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e0052002c506f6c6b61646f7458636d0400010501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e00530020446d7051756575650400550501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446d7051756575652c2052756e74696d653e00550000a9030c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c0404540001481c70726f706f736508012070726f706f73616ca1030140426f756e64656443616c6c4f663c543e00011476616c7565c101013042616c616e63654f663c543e0000249c50726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e001501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737480686176652066756e647320746f20636f76657220746865206465706f7369742e00d42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e15012d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e0044456d697473206050726f706f736564602e187365636f6e6404012070726f706f73616cb501012450726f70496e646578000118b45369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e64657211016d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e00c82d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e10766f74650801247265665f696e646578b501013c5265666572656e64756d496e646578000110766f74659801644163636f756e74566f74653c42616c616e63654f663c543e3e00021c3101566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3bb86f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00dc2d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e842d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e40656d657267656e63795f63616e63656c0401247265665f696e6465781c013c5265666572656e64756d496e6465780003204d015363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d652c7265666572656e64756d2e00f8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e00d02d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e003c5765696768743a20604f283129602e4065787465726e616c5f70726f706f736504012070726f706f73616ca1030140426f756e64656443616c6c4f663c543e0004182d015363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c2c7265666572656e64756d2e00e8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616ca1030140426f756e64656443616c6c4f663c543e00052c55015363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c655c616e2065787465726e616c207265666572656e64756d2e00ec546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f283129606065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616ca1030140426f756e64656443616c6c4f663c543e00062c45015363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f807363686564756c6520616e2065787465726e616c207265666572656e64756d2e00e8546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f2831296028666173745f747261636b0c013470726f706f73616c5f686173682c011048323536000134766f74696e675f706572696f64100138543a3a426c6f636b4e756d62657200011464656c6179100138543a3a426c6f636b4e756d6265720007404d015363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c65646101696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e65e8627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e00d0546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e00f42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e5d012d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f88094d75737420626520616c776179732067726561746572207468616e207a65726f2e350109466f72206046617374547261636b4f726967696e60206d75737420626520657175616c206f722067726561746572207468616e206046617374547261636b566f74696e67506572696f64602e51012d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265b82020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e0040456d697473206053746172746564602e00385765696768743a20604f28312960347665746f5f65787465726e616c04013470726f706f73616c5f686173682c011048323536000824b85665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e00d8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e002d012d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e003c456d69747320605665746f6564602e00fc5765696768743a20604f2856202b206c6f6728562929602077686572652056206973206e756d626572206f6620606578697374696e67207665746f657273604463616e63656c5f7265666572656e64756d0401247265665f696e646578b501013c5265666572656e64756d496e64657800091c5052656d6f76652061207265666572656e64756d2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e00d42d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e004423205765696768743a20604f283129602e2064656c65676174650c0108746fd90201504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6ead030128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a50390144656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e742e0055015468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f7220746865c874696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a7420202d2062652064656c65676174696e6720616c72656164793b206f72590120202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f7665642f636f6e736f6c69646174656494202020207468726f7567682060726561705f766f746560206f722060756e766f746560292e0045012d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e55012d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e20746865410120206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e61012d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d757374206e6f74b420206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e0048456d697473206044656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e28756e64656c6567617465000b30cc556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e742e005d01546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f64dc6f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e20776173206973737565642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062655463757272656e746c792064656c65676174696e672e0050456d6974732060556e64656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e58636c6561725f7075626c69635f70726f706f73616c73000c1470436c6561727320616c6c207075626c69632070726f706f73616c732e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e003c5765696768743a20604f283129602e18756e6c6f636b040118746172676574d90201504163636f756e7449644c6f6f6b75704f663c543e000d1ca0556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00b82d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e00bc5765696768743a20604f2852296020776974682052206e756d626572206f6620766f7465206f66207461726765742e2c72656d6f76655f766f7465040114696e6465781c013c5265666572656e64756d496e646578000e6c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e000c49663a882d20746865207265666572656e64756d207761732063616e63656c6c65642c206f727c2d20746865207265666572656e64756d206973206f6e676f696e672c206f72902d20746865207265666572656e64756d2068617320656e64656420737563682074686174fc20202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f72d420202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f728420202d20746865206163636f756e74206d61646520612073706c697420766f74655d012e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72655866756e6473206265696e6720617661696c61626c652e00a849662c20686f77657665722c20746865207265666572656e64756d2068617320656e64656420616e643aec2d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64dc2d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64bc2d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f76657259012e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c766559012a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756de46f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e004901546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465887265676973746572656420666f72207265666572656e64756d2060696e646578602e00f42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e4472656d6f76655f6f746865725f766f7465080118746172676574d90201504163636f756e7449644c6f6f6b75704f663c543e000114696e6465781c013c5265666572656e64756d496e646578000f3c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e004d0149662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f2d016072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c5501656974686572206265636175736520746865207265666572656e64756d207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f737420746865207265666572656e64756d206f7298626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e004d012d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f725420207265666572656e64756d2060696e646578602ef42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e24626c61636b6c69737408013470726f706f73616c5f686173682c01104832353600013c6d617962655f7265665f696e646578b103015c4f7074696f6e3c5265666572656e64756d496e6465783e00103c45015065726d616e656e746c7920706c61636520612070726f706f73616c20696e746f2074686520626c61636b6c6973742e20546869732070726576656e74732069742066726f6d2065766572206265696e673c70726f706f73656420616761696e2e00510149662063616c6c6564206f6e206120717565756564207075626c6963206f722065787465726e616c2070726f706f73616c2c207468656e20746869732077696c6c20726573756c7420696e206974206265696e67510172656d6f7665642e2049662074686520607265665f696e6465786020737570706c69656420697320616e20616374697665207265666572656e64756d2077697468207468652070726f706f73616c20686173682c687468656e2069742077696c6c2062652063616e63656c6c65642e00ec546865206469737061746368206f726967696e206f6620746869732063616c6c206d7573742062652060426c61636b6c6973744f726967696e602e00f82d206070726f706f73616c5f68617368603a205468652070726f706f73616c206861736820746f20626c61636b6c697374207065726d616e656e746c792e45012d20607265665f696e646578603a20416e206f6e676f696e67207265666572656e64756d2077686f73652068617368206973206070726f706f73616c5f68617368602c2077686963682077696c6c2062652863616e63656c6c65642e0041015765696768743a20604f28702960202874686f756768206173207468697320697320616e20686967682d70726976696c6567652064697370617463682c20776520617373756d65206974206861732061502020726561736f6e61626c652076616c7565292e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578b501012450726f70496e64657800111c4852656d6f766520612070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c50726f706f73616c4f726967696e602e00d02d206070726f705f696e646578603a2054686520696e646578206f66207468652070726f706f73616c20746f2063616e63656c2e00e45765696768743a20604f28702960207768657265206070203d205075626c696350726f70733a3a3c543e3a3a6465636f64655f6c656e282960042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ead030c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000b10304184f7074696f6e040454011c0108104e6f6e6500000010536f6d6504001c0000010000b5030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c08045400044900011c2c7365745f6d656d626572730c012c6e65775f6d656d62657273250301445665633c543a3a4163636f756e7449643e0001147072696d65b90301504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e741c012c4d656d626572436f756e74000080805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e0054526571756972657320726f6f74206f726967696e2e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e002823203c7765696768743e24232320576569676874502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e64656429142d2044423a510120202d20312073746f72616765206d75746174696f6e2028636f64656320604f284d296020726561642c20604f284e29602077726974652920666f722072656164696e6720616e642077726974696e67207468652c202020206d656d62657273ec20202d20312073746f7261676520726561642028636f64656320604f285029602920666f722072656164696e67207468652070726f706f73616c73450120202d206050602073746f72616765206d75746174696f6e732028636f64656320604f284d29602920666f72207570646174696e672074686520766f74657320666f7220656163682070726f706f73616c5d0120202d20312073746f726167652077726974652028636f64656320604f283129602920666f722064656c6574696e6720746865206f6c6420607072696d656020616e642073657474696e6720746865206e6577206f6e652c23203c2f7765696768743e1c6578656375746508012070726f706f73616ca503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64b501010c75333200012cf0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e002823203c7765696768743e2423232057656967687455012d20604f284d202b2050296020776865726520604d60206d656d626572732d636f756e742028636f64652d626f756e6465642920616e642060506020636f6d706c6578697479206f66206469737061746368696e673020206070726f706f73616c60d42d2044423a203120726561642028636f64656320604f284d296029202b20444220616363657373206f66206070726f706f73616c60242d2031206576656e742c23203c2f7765696768743e1c70726f706f73650c01247468726573686f6c64b501012c4d656d626572436f756e7400012070726f706f73616ca503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64b501010c75333200026cf84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e002823203c7765696768743e24232320576569676874ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d20326029142d2044423ab420202d20312073746f726167652072656164206069735f6d656d626572602028636f64656320604f284d296029f020202d20312073746f726167652072656164206050726f706f73616c4f663a3a636f6e7461696e735f6b6579602028636f64656320604f2831296029a820202d20444220616363657373657320696e666c75656e63656420627920607468726573686f6c64603a0901202020202d204549544845522073746f7261676520616363657373657320646f6e65206279206070726f706f73616c602028607468726573686f6c64203c20326029b8202020202d204f522070726f706f73616c20696e73657274696f6e2028607468726573686f6c64203c3d20326029d82020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c73602028636f64656320604f285032296029e42020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c436f756e74602028636f64656320604f2831296029cc2020202020202d20312073746f72616765207772697465206050726f706f73616c4f66602028636f64656320604f2842296029bc2020202020202d20312073746f726167652077726974652060566f74696e67602028636f64656320604f284d2960292c20202d2031206576656e742c23203c2f7765696768743e10766f74650c012070726f706f73616c2c011c543a3a48617368000114696e646578b501013450726f706f73616c496e64657800011c617070726f7665a40110626f6f6c00033cf041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e2823203c7765696768743e2423232057656967687409012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429142d2044423aac20202d20312073746f72616765207265616420604d656d62657273602028636f64656320604f284d296029b820202d20312073746f72616765206d75746174696f6e2060566f74696e67602028636f64656320604f284d296029242d2031206576656e742c23203c2f7765696768743e40636c6f73655f6f6c645f77656967687410013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578b501013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e64bd0301244f6c645765696768740001306c656e6774685f626f756e64b501010c7533320004804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f686173682c011c543a3a486173680005385901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e002823203c7765696768743edc436f6d706c65786974793a204f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c73284442205765696768743a482a2052656164733a2050726f706f73616c739c2a205772697465733a20566f74696e672c2050726f706f73616c732c2050726f706f73616c4f662c23203c2f7765696768743e14636c6f736510013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578b501013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64b501010c7533320006804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb90304184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000bd03000006c10300c103082873705f77656967687473244f6c645765696768740000040010010c7536340000c5030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c08045400044900011c2c7365745f6d656d626572730c012c6e65775f6d656d62657273250301445665633c543a3a4163636f756e7449643e0001147072696d65b90301504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e741c012c4d656d626572436f756e74000080805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e0054526571756972657320726f6f74206f726967696e2e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e002823203c7765696768743e24232320576569676874502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e64656429142d2044423a510120202d20312073746f72616765206d75746174696f6e2028636f64656320604f284d296020726561642c20604f284e29602077726974652920666f722072656164696e6720616e642077726974696e67207468652c202020206d656d62657273ec20202d20312073746f7261676520726561642028636f64656320604f285029602920666f722072656164696e67207468652070726f706f73616c73450120202d206050602073746f72616765206d75746174696f6e732028636f64656320604f284d29602920666f72207570646174696e672074686520766f74657320666f7220656163682070726f706f73616c5d0120202d20312073746f726167652077726974652028636f64656320604f283129602920666f722064656c6574696e6720746865206f6c6420607072696d656020616e642073657474696e6720746865206e6577206f6e652c23203c2f7765696768743e1c6578656375746508012070726f706f73616ca503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64b501010c75333200012cf0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e002823203c7765696768743e2423232057656967687455012d20604f284d202b2050296020776865726520604d60206d656d626572732d636f756e742028636f64652d626f756e6465642920616e642060506020636f6d706c6578697479206f66206469737061746368696e673020206070726f706f73616c60d42d2044423a203120726561642028636f64656320604f284d296029202b20444220616363657373206f66206070726f706f73616c60242d2031206576656e742c23203c2f7765696768743e1c70726f706f73650c01247468726573686f6c64b501012c4d656d626572436f756e7400012070726f706f73616ca503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64b501010c75333200026cf84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e002823203c7765696768743e24232320576569676874ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d20326029142d2044423ab420202d20312073746f726167652072656164206069735f6d656d626572602028636f64656320604f284d296029f020202d20312073746f726167652072656164206050726f706f73616c4f663a3a636f6e7461696e735f6b6579602028636f64656320604f2831296029a820202d20444220616363657373657320696e666c75656e63656420627920607468726573686f6c64603a0901202020202d204549544845522073746f7261676520616363657373657320646f6e65206279206070726f706f73616c602028607468726573686f6c64203c20326029b8202020202d204f522070726f706f73616c20696e73657274696f6e2028607468726573686f6c64203c3d20326029d82020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c73602028636f64656320604f285032296029e42020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c436f756e74602028636f64656320604f2831296029cc2020202020202d20312073746f72616765207772697465206050726f706f73616c4f66602028636f64656320604f2842296029bc2020202020202d20312073746f726167652077726974652060566f74696e67602028636f64656320604f284d2960292c20202d2031206576656e742c23203c2f7765696768743e10766f74650c012070726f706f73616c2c011c543a3a48617368000114696e646578b501013450726f706f73616c496e64657800011c617070726f7665a40110626f6f6c00033cf041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e2823203c7765696768743e2423232057656967687409012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429142d2044423aac20202d20312073746f72616765207265616420604d656d62657273602028636f64656320604f284d296029b820202d20312073746f72616765206d75746174696f6e2060566f74696e67602028636f64656320604f284d296029242d2031206576656e742c23203c2f7765696768743e40636c6f73655f6f6c645f77656967687410013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578b501013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e64bd0301244f6c645765696768740001306c656e6774685f626f756e64b501010c7533320004804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f686173682c011c543a3a486173680005385901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e002823203c7765696768743edc436f6d706c65786974793a204f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c73284442205765696768743a482a2052656164733a2050726f706f73616c739c2a205772697465733a20566f74696e672c2050726f706f73616c732c2050726f706f73616c4f662c23203c2f7765696768743e14636c6f736510013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578b501013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64b501010c7533320006804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec9030c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665d90201504163636f756e7449644c6f6f6b75704f663c543e00010c616464d90201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d62657273250301445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577d90201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ecd030c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001143470726f706f73655f7370656e6408011476616c7565c101013c42616c616e63654f663c542c20493e00012c62656e6566696369617279d90201504163636f756e7449644c6f6f6b75704f663c543e000024290150757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c75653101697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e6365207468655070726f706f73616c20697320617761726465642e002823203c7765696768743e482d20436f6d706c65786974793a204f283129b02d20446252656164733a206050726f706f73616c436f756e74602c20606f726967696e206163636f756e7460e82d2044625772697465733a206050726f706f73616c436f756e74602c206050726f706f73616c73602c20606f726967696e206163636f756e74602c23203c2f7765696768743e3c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964b501013450726f706f73616c496e646578000124f852656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e002823203c7765696768743e482d20436f6d706c65786974793a204f283129cc2d20446252656164733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e7460d02d2044625772697465733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e74602c23203c2f7765696768743e40617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964b501013450726f706f73616c496e6465780002285901417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e6566696369617279a8616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e00ac4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a417070726f76654f726967696e602e002823203c7765696768743e4c2d20436f6d706c65786974793a204f2831292e8c2d20446252656164733a206050726f706f73616c73602c2060417070726f76616c7360582d20446257726974653a2060417070726f76616c73602c23203c2f7765696768743e147370656e64080118616d6f756e74c101013c42616c616e63654f663c542c20493e00012c62656e6566696369617279d90201504163636f756e7449644c6f6f6b75704f663c543e000320b850726f706f736520616e6420617070726f76652061207370656e64206f662074726561737572792066756e64732e004d012d20606f726967696e603a204d75737420626520605370656e644f726967696e60207769746820746865206053756363657373602076616c7565206265696e67206174206c656173742060616d6f756e74602e41012d2060616d6f756e74603a2054686520616d6f756e7420746f206265207472616e736665727265642066726f6d2074686520747265617375727920746f20746865206062656e6566696369617279602ee82d206062656e6566696369617279603a205468652064657374696e6174696f6e206163636f756e7420666f7220746865207472616e736665722e0045014e4f54453a20466f72207265636f72642d6b656570696e6720707572706f7365732c207468652070726f706f736572206973206465656d656420746f206265206571756976616c656e7420746f207468653062656e65666963696172792e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964b501013450726f706f73616c496e64657800043c2d01466f72636520612070726576696f75736c7920617070726f7665642070726f706f73616c20746f2062652072656d6f7665642066726f6d2074686520617070726f76616c2071756575652ec0546865206f726967696e616c206465706f7369742077696c6c206e6f206c6f6e6765722062652072657475726e65642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602ea02d206070726f706f73616c5f6964603a2054686520696e646578206f6620612070726f706f73616c002823203c7765696768743edc2d20436f6d706c65786974793a204f2841292077686572652060416020697320746865206e756d626572206f6620617070726f76616c73882d20446220726561647320616e64207772697465733a2060417070726f76616c73602c23203c2f7765696768743e001c4572726f72733a61012d206050726f706f73616c4e6f74417070726f766564603a20546865206070726f706f73616c5f69646020737570706c69656420776173206e6f7420666f756e6420696e2074686520617070726f76616c2071756575652c5101692e652e2c207468652070726f706f73616c20686173206e6f74206265656e20617070726f7665642e205468697320636f756c6420616c736f206d65616e207468652070726f706f73616c20646f6573206e6f745901657869737420616c746f6765746865722c2074687573207468657265206973206e6f2077617920697420776f756c642068617665206265656e20617070726f76656420696e2074686520666972737420706c6163652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed1030c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c73d503017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00004c7c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e646578d8010c75313600011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c73d503017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000238ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e2c64697370617463685f617308012461735f6f726967696ed9030154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000328c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292e1d012d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b20543a3a576569676874496e666f3a3a64697370617463685f617328292e2c23203c2f7765696768743e2c666f7263655f626174636804011463616c6c73d503017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004387c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e2c776974685f77656967687408011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874240118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed503000002a50300d90308447370697269746e65745f72756e74696d65304f726967696e43616c6c657200011c1873797374656d0400dd0301746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c0400e10301010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400e50301010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020000c4469640400e90301506469643a3a4f726967696e3c52756e74696d653e0040002c506f6c6b61646f7458636d0400ed03014870616c6c65745f78636d3a3a4f726967696e0053002843756d756c757358636d0400f103016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e00540010566f69640400f50301110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f696400060000dd030c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e6500020000e103084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d6265727308001c012c4d656d626572436f756e7400001c012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d00020000e503084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d6265727308001c012c4d656d626572436f756e7400001c012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d00020000e9030c0c646964186f726967696e304469645261774f726967696e08344469644964656e7469666965720100244163636f756e74496401000008010869640001344469644964656e7469666965720001247375626d69747465720001244163636f756e7449640000ed030c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400a90101344d756c74694c6f636174696f6e00000020526573706f6e73650400a90101344d756c74694c6f636174696f6e00010000f1030c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e04009d01011850617261496400010000f503081c73705f636f726510566f696400010000f9030c3870616c6c65745f76657374696e671870616c6c65741043616c6c0404540001141076657374000034b8556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e005d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20322052656164732c203220577269746573f8202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745dfc202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745d2c23203c2f7765696768743e28766573745f6f74686572040118746172676574d90201504163636f756e7449644c6f6f6b75704f663c543e00013cb8556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051012d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20332052656164732c203320577269746573f0202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e74f4202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c23203c2f7765696768743e3c7665737465645f7472616e73666572080118746172676574d90201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65fd0301a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00024464437265617465206120766573746564207472616e736665722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d2060746172676574603a20546865206163636f756e7420726563656976696e6720746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20332052656164732c2033205772697465733901202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d3d01202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d2c23203c2f7765696768743e54666f7263655f7665737465645f7472616e736665720c0118736f75726365d90201504163636f756e7449644c6f6f6b75704f663c543e000118746172676574d90201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65fd0301a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00034860466f726365206120766573746564207472616e736665722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00e82d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e11012d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20342052656164732c2034205772697465733101202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e743501202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e742c23203c2f7765696768743e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e6465781c010c75333200013c7363686564756c65325f696e6465781c010c7533320004545d014d657267652074776f2076657374696e67207363686564756c657320746f6765746865722c206372656174696e672061206e65772076657374696e67207363686564756c65207468617420756e6c6f636b73206f7665725501746865206869676865737420706f737369626c6520737461727420616e6420656e6420626c6f636b732e20496620626f7468207363686564756c6573206861766520616c7265616479207374617274656420746865590163757272656e7420626c6f636b2077696c6c206265207573656420617320746865207363686564756c652073746172743b207769746820746865206361766561742074686174206966206f6e65207363686564756c655d0169732066696e6973686564206279207468652063757272656e7420626c6f636b2c20746865206f746865722077696c6c206265207472656174656420617320746865206e6577206d6572676564207363686564756c652c2c756e6d6f6469666965642e00f84e4f54453a20496620607363686564756c65315f696e646578203d3d207363686564756c65325f696e6465786020746869732069732061206e6f2d6f702e41014e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b207072696f7220746f206d657267696e672e61014e4f54453a20496620626f7468207363686564756c6573206861766520656e646564206279207468652063757272656e7420626c6f636b2c206e6f206e6577207363686564756c652077696c6c206265206372656174656464616e6420626f74682077696c6c2062652072656d6f7665642e006c4d6572676564207363686564756c6520617474726962757465733a35012d20607374617274696e675f626c6f636b603a20604d4158287363686564756c65312e7374617274696e675f626c6f636b2c207363686564756c6564322e7374617274696e675f626c6f636b2c48202063757272656e745f626c6f636b29602e21012d2060656e64696e675f626c6f636b603a20604d4158287363686564756c65312e656e64696e675f626c6f636b2c207363686564756c65322e656e64696e675f626c6f636b29602e59012d20606c6f636b6564603a20607363686564756c65312e6c6f636b65645f61742863757272656e745f626c6f636b29202b207363686564756c65322e6c6f636b65645f61742863757272656e745f626c6f636b29602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00e82d20607363686564756c65315f696e646578603a20696e646578206f6620746865206669727374207363686564756c6520746f206d657267652eec2d20607363686564756c65325f696e646578603a20696e646578206f6620746865207365636f6e64207363686564756c6520746f206d657267652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632efd030c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d626572000001040c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963050401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963050401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963050401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000414a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e002823203c7765696768743e5453616d65206173205b607363686564756c65605d2e2c23203c2f7765696768743e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963050401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000514905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e002823203c7765696768743ec453616d65206173205b607363686564756c655f6e616d6564605d2853656c663a3a7363686564756c655f6e616d6564292e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e050404184f7074696f6e04045401c80108104e6f6e6500000010536f6d650400c8000001000009040c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616cd90201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f747970650d0401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465d90201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d6265720001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465d90201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d626572000114696e646578d8010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572d90201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d40130543a3a50726f787954797065000114696e646578d8010c753136000118686569676874280138543a3a426c6f636b4e756d6265720001246578745f696e646578b501010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616cd90201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616cd90201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465d90201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465d90201504163636f756e7449644c6f6f6b75704f663c543e0001107265616cd90201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f747970650d0401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e0d0404184f7074696f6e04045401d40108104e6f6e6500000010536f6d650400d4000001000011040c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657330011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d616765040110686173682c011c543a3a48617368000118dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e00fc496620606c656e602069732070726f76696465642c207468656e2069742077696c6c2062652061206d7563682063686561706572206f7065726174696f6e2e0001012d206068617368603a205468652068617368206f662074686520707265696d61676520746f2062652072656d6f7665642066726f6d207468652073746f72652eb82d20606c656e603a20546865206c656e677468206f662074686520707265696d616765206f66206068617368602e40726571756573745f707265696d616765040110686173682c011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d616765040110686173682c011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e15040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665d90201504163636f756e7449644c6f6f6b75704f663c543e00010c616464d90201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d62657273250301445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577d90201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e19040c2c70616c6c65745f746970731870616c6c65741043616c6c080454000449000118387265706f72745f617765736f6d65080118726561736f6e30011c5665633c75383e00010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e00004c59015265706f727420736f6d657468696e672060726561736f6e60207468617420646573657276657320612074697020616e6420636c61696d20616e79206576656e7475616c207468652066696e6465722773206665652e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051015061796d656e743a20605469705265706f72744465706f73697442617365602077696c6c2062652072657365727665642066726f6d20746865206f726967696e206163636f756e742c2061732077656c6c206173bc60446174614465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e0074456d69747320604e657754697060206966207375636365737366756c2e002823203c7765696768743ec82d20436f6d706c65786974793a20604f2852296020776865726520605260206c656e677468206f662060726561736f6e602e9020202d20656e636f64696e6720616e642068617368696e67206f662027726561736f6e27702d20446252656164733a2060526561736f6e73602c20605469707360742d2044625772697465733a2060526561736f6e73602c206054697073602c23203c2f7765696768743e2c726574726163745f746970040110686173682c011c543a3a4861736800014c5101526574726163742061207072696f72207469702d7265706f72742066726f6d20607265706f72745f617765736f6d65602c20616e642063616e63656c207468652070726f63657373206f662074697070696e672e00dc4966207375636365737366756c2c20746865206f726967696e616c206465706f7369742077696c6c20626520756e72657365727665642e004d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642074686520746970206964656e7469666965642062792060686173686041016d7573742068617665206265656e207265706f7274656420627920746865207369676e696e67206163636f756e74207468726f75676820607265706f72745f617765736f6d65602028616e64206e6f744c7468726f75676820607469705f6e657760292e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e008c456d697473206054697052657472616374656460206966207375636365737366756c2e002823203c7765696768743e502d20436f6d706c65786974793a20604f28312960d820202d20446570656e6473206f6e20746865206c656e677468206f662060543a3a48617368602077686963682069732066697865642e8c2d20446252656164733a206054697073602c20606f726967696e206163636f756e7460bc2d2044625772697465733a2060526561736f6e73602c206054697073602c20606f726967696e206163636f756e74602c23203c2f7765696768743e1c7469705f6e65770c0118726561736f6e30011c5665633c75383e00010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e0001247469705f76616c7565c101013c42616c616e63654f663c542c20493e000258f04769766520612074697020666f7220736f6d657468696e67206e65773b206e6f2066696e6465722773206665652077696c6c2062652074616b656e2e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e0074456d69747320604e657754697060206966207375636365737366756c2e002823203c7765696768743e51012d20436f6d706c65786974793a20604f2852202b2054296020776865726520605260206c656e677468206f662060726561736f6e602c2060546020697320746865206e756d626572206f6620746970706572732e5d0120202d20604f285429603a206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792d012020202060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f66442020202060543a3a54697070657273602ee020202d20604f285229603a2068617368696e6720616e6420656e636f64696e67206f6620726561736f6e206f66206c656e677468206052607c2d20446252656164733a206054697070657273602c2060526561736f6e7360742d2044625772697465733a2060526561736f6e73602c206054697073602c23203c2f7765696768743e0c746970080110686173682c011c543a3a486173680001247469705f76616c7565c101013c42616c616e63654f663c542c20493e000360b04465636c6172652061207469702076616c756520666f7220616e20616c72656164792d6f70656e207469702e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f66207468652068617368206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e65666963696172793420206163636f756e742049442e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e006101456d6974732060546970436c6f73696e676020696620746865207468726573686f6c64206f66207469707065727320686173206265656e207265616368656420616e642074686520636f756e74646f776e20706572696f643068617320737461727465642e002823203c7765696768743e61012d20436f6d706c65786974793a20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e6774682d0120206054602c20696e736572742074697020616e6420636865636b20636c6f73696e672c20605460206973206368617267656420617320757070657220626f756e6420676976656e2062795d01202060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e005d01202041637475616c6c792077656967687420636f756c64206265206c6f77657220617320697420646570656e6473206f6e20686f77206d616e7920746970732061726520696e20604f70656e5469706020627574206974d02020697320776569676874656420617320696620616c6d6f73742066756c6c20692e65206f66206c656e6774682060542d31602e702d20446252656164733a206054697070657273602c20605469707360482d2044625772697465733a206054697073602c23203c2f7765696768743e24636c6f73655f746970040110686173682c011c543a3a486173680004405c436c6f736520616e64207061796f75742061207469702e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00150154686520746970206964656e74696669656420627920606861736860206d75737420686176652066696e69736865642069747320636f756e74646f776e20706572696f642e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e002823203c7765696768743e61012d20436f6d706c65786974793a20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e677468510120206054602e20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f7374c02020646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602ea82d20446252656164733a206054697073602c206054697070657273602c20607469702066696e64657260d82d2044625772697465733a2060526561736f6e73602c206054697073602c206054697070657273602c20607469702066696e646572602c23203c2f7765696768743e24736c6173685f746970040110686173682c011c543a3a486173680005309452656d6f766520616e6420736c61736820616e20616c72656164792d6f70656e207469702e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e00f44173206120726573756c742c207468652066696e64657220697320736c617368656420616e6420746865206465706f7369747320617265206c6f73742e0084456d6974732060546970536c617368656460206966207375636365737366756c2e002823203c7765696768743efc2020605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e010120205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e1d040c1463747970651870616c6c65741043616c6c0404540001080c616464040114637479706530011c5665633c75383e00003009014372656174652061206e65772043547970652066726f6d2074686520676976656e20756e69717565204354797065206861736820616e64206173736f6369617465735069742077697468206974732063726561746f722e00dc412043547970652077697468207468652073616d652068617368206d757374206e6f742062652073746f726564206f6e20636861696e2e0054456d6974732060435479706543726561746564602e002823203c7765696768743e305765696768743a204f283129602d2052656164733a204374797065732c2042616c616e6365642d205772697465733a204374797065732c2042616c616e63652c23203c2f7765696768743e407365745f626c6f636b5f6e756d62657208012863747970655f686173682c01384374797065486173684f663c543e000130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e00010ce853657420746865206372656174696f6e20626c6f636b206e756d62657220666f72206120676976656e2043547970652c20696620666f756e642e0054456d6974732060435479706555706461746564602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e21040c2c6174746573746174696f6e1870616c6c65741043616c6c0404540001180c6164640c0128636c61696d5f686173682c0138436c61696d486173684f663c543e00012863747970655f686173682c01384374797065486173684f663c543e000134617574686f72697a6174696f6e250401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000054644372656174652061206e6577206174746573746174696f6e2e00f85468652061747465737465722063616e206f7074696f6e616c6c792070726f766964652061207265666572656e636520746f20616e206578697374696e67090164656c65676174696f6e20746861742077696c6c20626520736176656420616c6f6e67207769746820746865206174746573746174696f6e20697473656c6620696e8c74686520666f726d206f6620616e2061747465737465642064656c65676174696f6e2e00ec546865207265666572656e6365642043547970652068617368206d75737420616c72656164792062652070726573656e74206f6e20636861696e2e000901496620616e206f7074696f6e616c2064656c65676174696f6e2069642069732070726f76696465642c20746865206469737061746368206f726967696e206d757374e8626520746865206f776e6572206f66207468652064656c65676174696f6e2e204f74686572776973652c20697420636f756c6420626520616e79546044656c65676174696f6e456e746974794964602e006c456d69747320604174746573746174696f6e43726561746564602e002823203c7765696768743e305765696768743a204f283129b82d2052656164733a205b4f726967696e204163636f756e745d2c2043747970652c204174746573746174696f6e73e42d2052656164732069662064656c65676174696f6e2069642069732070726f76696465643a2044656c65676174696f6e732c20526f6f74732c5c202044656c6567617465644174746573746174696f6e73bc2d205772697465733a204174746573746174696f6e732c202844656c6567617465644174746573746174696f6e73292c23203c2f7765696768743e187265766f6b65080128636c61696d5f686173682c0138436c61696d486173684f663c543e000134617574686f72697a6174696f6e250401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0001447c5265766f6b6520616e206578697374696e67206174746573746174696f6e2e00fc546865207265766f6b6572206d75737420626520656974686572207468652063726561746f72206f6620746865206174746573746174696f6e206265696e6709017265766f6b6564206f7220616e20656e74697479207468617420696e207468652064656c65676174696f6e207472656520697320616e20616e636573746f72206f6609017468652061747465737465722c20692e652e2c2069742077617320656974686572207468652064656c656761746f72206f6620746865206174746573746572206f7250616e20616e636573746f722074686572656f662e006c456d69747320604174746573746174696f6e5265766f6b6564602e002823203c7765696768743e0d015765696768743a204f285029207768657265205020697320746865206e756d626572206f6620737465707320726571756972656420746f2076657269667920746861740901746865206469737061746368204f726967696e20636f6e74726f6c73207468652064656c65676174696f6e20656e7469746c656420746f207265766f6b6520746865c86174746573746174696f6e2e20497420697320626f756e64656420627920606d61785f706172656e745f636865636b73602ee82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2064656c65676174696f6e3a3a526f6f7473d82d205265616473207065722064656c65676174696f6e207374657020503a2064656c65676174696f6e3a3a44656c65676174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e1872656d6f7665080128636c61696d5f686173682c0138436c61696d486173684f663c543e000134617574686f72697a6174696f6e250401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0002445852656d6f766520616e206174746573746174696f6e2e00f8546865206f726967696e206d75737420626520656974686572207468652063726561746f72206f6620746865206174746573746174696f6e206f7220616e0d01656e7469747920776869636820697320616e20616e636573746f72206f662074686520617474657374657220696e207468652064656c65676174696f6e20747265652c0101692e652e2c2069742077617320656974686572207468652064656c656761746f72206f6620746865206174746573746572206f7220616e20616e636573746f722074686572656f662e006c456d69747320604174746573746174696f6e52656d6f766564602e002823203c7765696768743e0d015765696768743a204f285029207768657265205020697320746865206e756d626572206f6620737465707320726571756972656420746f2076657269667920746861740901746865206469737061746368204f726967696e20636f6e74726f6c73207468652064656c65676174696f6e20656e7469746c656420746f207265766f6b6520746865c86174746573746174696f6e2e20497420697320626f756e64656420627920606d61785f706172656e745f636865636b73602ee82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2064656c65676174696f6e3a3a526f6f7473d82d205265616473207065722064656c65676174696f6e207374657020503a2064656c65676174696f6e3a3a44656c65676174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e3c7265636c61696d5f6465706f736974040128636c61696d5f686173682c0138436c61696d486173684f663c543e000324d05265636c61696d20612073746f72616765206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e0064456d69747320604465706f7369745265636c61696d6564602e002823203c7765696768743e305765696768743a204f283129f82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e6572040128636c61696d5f686173682c0138436c61696d486173684f663c543e00041c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00ec546865207375626a656374206f66207468652063616c6c206d757374206265207468652061747465737465722077686f206973737565732074686509016174746573746174696f6e2e205468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f736974040128636c61696d5f686173682c0138436c61696d486173684f663c543e00050cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e250404184f7074696f6e0404540129040108104e6f6e6500000010536f6d6504002904000001000029040c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c50616c6c6574417574686f72697a65043044656c65676174696f6e4163012d0401042844656c65676174696f6e04002d04013044656c65676174696f6e4163000000002d040c2864656c65676174696f6e386163636573735f636f6e74726f6c3044656c65676174696f6e41630404540131040008013c7375626a6563745f6e6f64655f69642c015444656c65676174696f6e4e6f646549644f663c543e0001286d61785f636865636b731c010c7533320000310408447370697269746e65745f72756e74696d651c52756e74696d650000000035040c2864656c65676174696f6e1870616c6c65741043616c6c04045400011c406372656174655f686965726172636879080130726f6f745f6e6f64655f69642c015444656c65676174696f6e4e6f646549644f663c543e00012863747970655f686173682c01384374797065486173684f663c543e00006401014372656174652061206e65772064656c65676174696f6e20726f6f74206173736f6369617465642077697468206120676976656e20435479706520686173682e00f8546865206e657720726f6f742077696c6c20616c6c6f772061206e65772074727573742068696572617263687920746f2062652063726561746564206279a0616464696e67206368696c6472656e2064656c65676174696f6e7320746f2074686520726f6f742e000d015468657265206d757374206265206e6f2064656c65676174696f6e2077697468207468652073616d652049442073746f726564206f6e20636861696e2c207768696c65fc7468657265206d75737420626520616c7265616479206120435479706520776974682074686520676976656e20686173682073746f72656420696e207468653443547970652070616c6c65742e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e000d015265717569726573207468652073656e646572206f6620746865207472616e73616374696f6e20746f206861766520612072657365727661626c652062616c616e6365886f66206174206c6561737420604465706f73697460206d616e7920746f6b656e732e0050456d6974732060526f6f7443726561746564602e002823203c7765696768743e305765696768743a204f283129a02d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c204354797065733c2d205772697465733a20526f6f74732c23203c2f7765696768743e386164645f64656c65676174696f6e14013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e000124706172656e745f69642c015444656c65676174696f6e4e6f646549644f663c543e00012064656c656761746500014044656c656761746f7249644f663c543e00012c7065726d697373696f6e73fc012c5065726d697373696f6e7300014864656c65676174655f7369676e61747572653904016844656c65676174655369676e6174757265547970654f663c543e000180744372656174652061206e65772064656c65676174696f6e206e6f64652e00f4546865206e65772064656c65676174696f6e206e6f646520726570726573656e74732061206e65772074727573742068696572617263687920746861740d01636f6e73696465727320746865206e6577206e6f64652061732069747320726f6f742e20546865206f776e6572206f662074686973206e6f6465206861732066756c6ce0636f6e74726f6c206f76657220616e79206f66206974732064697265637420616e6420696e6469726563742064657363656e64616e74732e00fc466f7220746865206372656174696f6e20746f20737563636565642c207468652064656c656761746565206d7573742070726f7669646520612076616c696411017369676e6174757265206f766572207468652028626c616b65323536292068617368206f6620746865206372656174696f6e206f7065726174696f6e2064657461696c731101776869636820696e636c7564652028696e206f72646572292064656c65676174696f6e2069642c20726f6f74206e6f64652069642c20706172656e742069642c20616e64707065726d697373696f6e73206f6620746865206e6577206e6f64652e00f45468657265206d757374206265206e6f2064656c65676174696f6e2077697468207468652073616d652069642073746f726564206f6e20636861696e2e0501467572746865726d6f72652c20746865207265666572656e63656420726f6f7420616e6420706172656e74206e6f646573206d75737420616c7265616479206265050170726573656e74206f6e20636861696e20616e6420636f6e7461696e207468652076616c6964207065726d697373696f6e7320616e64207265766f636174696f6e6c7374617475732028692e652e2c206e6f74207265766f6b6564292e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e000d015265717569726573207468652073656e646572206f6620746865207472616e73616374696f6e20746f206861766520612072657365727661626c652062616c616e6365886f66206174206c6561737420604465706f73697460206d616e7920746f6b656e732e0068456d697473206044656c65676174696f6e43726561746564602e002823203c7765696768743e305765696768743a204f283129b42d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2044656c65676174696f6e73542d205772697465733a2044656c65676174696f6e732c23203c2f7765696768743e447265766f6b655f64656c65676174696f6e0c013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001446d61785f706172656e745f636865636b731c010c75333200013c6d61785f7265766f636174696f6e731c010c753332000274f85265766f6b6520612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74206e6f64652920616e6420616c6c20697473246368696c6472656e2e00fc446f6573206e6f7420726566756e64207468652064656c65676174696f6e206261636b20746f20746865206465706f736974206f776e657220617320746865f06e6f6465206973207374696c6c2073746f726564206f6e20636861696e2e20526571756972657320746f206164646974696f6e616c6c792063616c6cb46072656d6f76655f64656c65676174696f6e6020746f20756e7265736572766520746865206465706f7369742e0009015265766f6b696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67090166726f6d2074686520676976656e206e6f6465206265696e67207265766f6b65642e204e657665727468656c6573732c207265766f636174696f6e20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f6465206973207265766f6b65642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e73696465726564207265766f6b65642e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e0078456d6974732043202a206044656c65676174696f6e5265766f6b6564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f6368696c6472656e602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e802d205772697465733a20526f6f74732c2043202a2044656c65676174696f6e732c23203c2f7765696768743e4472656d6f76655f64656c65676174696f6e08013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c731c010c753332000370f852656d6f766520612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74206e6f64652920616e6420616c6c20697473246368696c6472656e2e00f052657475726e73207468652064656c65676174696f6e206465706f73697420746f20746865206465706f736974206f776e657220666f722065616368a472656d6f7665642044656c65676174696f6e4e6f646520627920756e726573657276696e672069742e00090152656d6f76696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67fc66726f6d2074686520676976656e206e6f6465206265696e672072656d6f7665642e204e657665727468656c6573732c2072656d6f76616c20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f64652069732072656d6f7665642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e736964657265642072656d6f7665642e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e0078456d6974732043202a206044656c65676174696f6e52656d6f766564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f6368696c6472656e602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e902d205772697465733a20526f6f74732c2032202a2043202a2044656c65676174696f6e732c23203c2f7765696768743e3c7265636c61696d5f6465706f73697408013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c731c010c753332000460f45265636c61696d20746865206465706f73697420666f7220612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74b86e6f6465292c2072656d6f76696e6720746865206e6f646520616e6420616c6c20697473206368696c6472656e2e00f052657475726e73207468652064656c65676174696f6e206465706f73697420746f20746865206465706f736974206f776e657220666f722065616368a472656d6f7665642044656c65676174696f6e4e6f646520627920756e726573657276696e672069742e00090152656d6f76696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67fc66726f6d2074686520676976656e206e6f6465206265696e672072656d6f7665642e204e657665727468656c6573732c2072656d6f76616c20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f64652069732072656d6f7665642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e736964657265642072656d6f7665642e000d01546865206469737061746368206f726967696e206d757374206265207369676e6564206279207468652064656c65676174696f6e206465706f736974206f776e65722e004c604465706f7369745265636c61696d6564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f72656d6f76616c73602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e902d205772697465733a20526f6f74732c2032202a2043202a2044656c65676174696f6e732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657204013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e00051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e000501546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f66207468652064656c65676174696f6e206e6f64652ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e39040c0c6469642c6469645f64657461696c73304469645369676e617475726500010c1c4564323535313904003d040148656432353531393a3a5369676e61747572650000001c53723235353139040045040148737232353531393a3a5369676e617475726500010014456364736104004904014065636473613a3a5369676e6174757265000200003d040c1c73705f636f72651c65643235353139245369676e617475726500000400410401205b75383b2036345d0000410400000340000000080045040c1c73705f636f72651c73723235353139245369676e617475726500000400410401205b75383b2036345d000049040c1c73705f636f7265146563647361245369676e6174757265000004004d0401205b75383b2036355d00004d0400000341000000080051040c0c6469641870616c6c65741043616c6c04045400013c1863726561746508011c64657461696c7355040168426f783c4469644372656174696f6e44657461696c733c543e3e0001247369676e6174757265390401304469645369676e617475726500007cec53746f72652061206e657720444944206f6e20636861696e2c20616674657220766572696679696e67207468617420746865206372656174696f6e05016f7065726174696f6e20686173206265656e207369676e656420627920746865204b494c54206163636f756e74206173736f63696174656420776974682074686501016964656e746966696572206f662074686520444944206265696e67206372656174656420616e6420746861742061204449442077697468207468652073616d6511016964656e74696669657220686173206e6f742070726576696f75736c792065786973746564206f6e2028616e64207468656e2064656c657465642066726f6d292074686518636861696e2e000d015468657265206d757374206265206e6f2044494420696e666f726d6174696f6e2073746f726564206f6e20636861696e20756e646572207468652073616d65204449442c6964656e7469666965722e00fc546865206e6577206b65797320616464656420776974682074686973206f7065726174696f6e206172652073746f72656420756e646572207468652044494405016964656e74696669657220616c6f6e6720776974682074686520626c6f636b206e756d62657220696e20776869636820746865206f7065726174696f6e207761732465786563757465642e000101546865206469737061746368206f726967696e2063616e20626520616e79204b494c54206163636f756e74207769746820656e6f7567682066756e647320746f0d0165786563757465207468652065787472696e73696320616e6420697420646f6573206e6f74206861766520746f206265207469656420696e20616e792077617920746fb4746865204b494c54206163636f756e74206964656e74696679696e672074686520444944207375626a6563742e004c456d697473206044696443726561746564602e002823203c7765696768743e0d012d20546865207472616e73616374696f6e277320636f6d706c6578697479206973206d61696e6c7920646570656e64656e74206f6e20746865206e756d626572206f66010120206e6577206b65792061677265656d656e74206b65797320616e6420746865206e756d626572206f66206e6577207365727669636520656e64706f696e7473702020696e636c7564656420696e20746865206f7065726174696f6e2e242d2d2d2d2d2d2d2d2df85765696768743a204f284b29202b204f284e29207768657265204b20697320746865206e756d626572206f66206e6577206b65792061677265656d656e7409016b65797320626f756e64656420627920604d61784e65774b657941677265656d656e744b657973602c207768696c65204e20697320746865206e756d626572206f66f46e6577207365727669636520656e64706f696e747320626f756e64656420627920604d61784e756d6265724f665365727669636573506572446964602eb02d2052656164733a205b4f726967696e204163636f756e745d2c204469642c20446964426c61636b6c697374fc2d205772697465733a20446964202877697468204b206e6577206b65792061677265656d656e74206b657973292c2053657276696365456e64706f696e7473cc20202877697468204e206e6577207365727669636520656e64706f696e7473292c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e587365745f61757468656e7469636174696f6e5f6b657904011c6e65775f6b65796d040148446964566572696669636174696f6e4b65790001408855706461746520746865204449442061757468656e7469636174696f6e206b65792e00ec546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696620697420697309016e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f207468654c736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e487365745f64656c65676174696f6e5f6b657904011c6e65775f6b65796d040148446964566572696669636174696f6e4b657900024094536574206f722075706461746520746865204449442064656c65676174696f6e206b65792e000d01496620616e206f6c64206b657920657869737465642c2069742069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696611016974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f5c74686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e5472656d6f76655f64656c65676174696f6e5f6b657900033c7852656d6f766520746865204449442064656c65676174696f6e206b65792e00d4546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b657973206966b06974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e4c7365745f6174746573746174696f6e5f6b657904011c6e65775f6b65796d040148446964566572696669636174696f6e4b657900044098536574206f72207570646174652074686520444944206174746573746174696f6e206b65792e000d01496620616e206f6c64206b657920657869737465642c2069742069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696611016974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f5c74686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e5872656d6f76655f6174746573746174696f6e5f6b657900053c7c52656d6f76652074686520444944206174746573746174696f6e206b65792e00d4546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b657973206966b06974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e546164645f6b65795f61677265656d656e745f6b657904011c6e65775f6b65795d040140446964456e6372797074696f6e4b6579000638b841646420612073696e676c65206e6577206b65792061677265656d656e74206b657920746f20746865204449442e00bc546865206e6577206b657920697320616464656420746f2074686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e6072656d6f76655f6b65795f61677265656d656e745f6b65790401186b65795f69642c01284b657949644f663c543e000734050152656d6f7665206120444944206b65792061677265656d656e74206b65792066726f6d20626f74682069747320736574206f66206b65792061677265656d656e74906b65797320616e642061732077656c6c20617320697473207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e506164645f736572766963655f656e64706f696e74040140736572766963655f656e64706f696e7481040138446964456e64706f696e743c543e000830bc4164642061206e6577207365727669636520656e64706f696e7420756e6465722074686520676976656e204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f2831290d012d2052656164733a205b4f726967696e204163636f756e745d2c204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e74c82d205772697465733a204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e5c72656d6f76655f736572766963655f656e64706f696e74040128736572766963655f69648504015053657276696365456e64706f696e7449643c543e000930d452656d6f76652074686520736572766963652077697468207468652070726f76696465642049442066726f6d20746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129f82d2052656164733a205b4f726967696e204163636f756e745d2c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e74c82d205772697465733a204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e1864656c65746504014c656e64706f696e74735f746f5f72656d6f76651c010c753332000a600d0144656c6574652061204449442066726f6d2074686520636861696e20616e6420616c6c20696e666f726d6174696f6e206173736f63696174656420776974682069742c1101616674657220766572696679696e672074686174207468652064656c657465206f7065726174696f6e20686173206265656e207369676e65642062792074686520444944fc7375626a656374207573696e67207468652061757468656e7469636174696f6e206b65792063757272656e746c792073746f726564206f6e20636861696e2e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f7265207468657864656c657465206f7065726174696f6e206973206576616c75617465642e00f441667465722069742069732064656c657465642c2061204449442077697468207468652073616d65206964656e7469666965722063616e6e6f742062655872652d63726561746564206576657220616761696e2e00010141732074686520726573756c74206f66207468652064656c6574696f6e2c20616c6c20747261636573206f662074686520444944206172652072656d6f766564e866726f6d207468652073746f726167652c20776869636820726573756c747320696e2074686520696e76616c69646174696f6e206f6620616c6c9c6174746573746174696f6e73206973737565642062792074686520444944207375626a6563742e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696444656c65746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964cc2d204b696c6c733a2044696420656e747279206173736f63696174656420746f2074686520444944206964656e7469666965722c23203c2f7765696768743e3c7265636c61696d5f6465706f73697408012c6469645f7375626a6563740001484469644964656e7469666965724f663c543e00014c656e64706f696e74735f746f5f72656d6f76651c010c753332000b54f45265636c61696d2061206465706f73697420666f722061204449442e20546869732077696c6c2064656c657465207468652044494420616e6420616c6c0901696e666f726d6174696f6e206173736f63696174656420776974682069742c20616674657220766572696679696e672074686174207468652063616c6c657220697364746865206f776e6572206f6620746865206465706f7369742e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f7265207468657864656c657465206f7065726174696f6e206973206576616c75617465642e00f441667465722069742069732064656c657465642c2061204449442077697468207468652073616d65206964656e7469666965722063616e6e6f742062655872652d63726561746564206576657220616761696e2e00010141732074686520726573756c74206f66207468652064656c6574696f6e2c20616c6c20747261636573206f662074686520444944206172652072656d6f766564e866726f6d207468652073746f726167652c20776869636820726573756c747320696e2074686520696e76616c69646174696f6e206f6620616c6c9c6174746573746174696f6e73206973737565642062792074686520444944207375626a6563742e004c456d697473206044696444656c65746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964cc2d204b696c6c733a2044696420656e747279206173736f63696174656420746f2074686520444944206964656e7469666965722c23203c2f7765696768743e3c7375626d69745f6469645f63616c6c0801206469645f63616c6ca1040188426f783c446964417574686f72697a656443616c6c4f7065726174696f6e3c543e3e0001247369676e6174757265390401304469645369676e6174757265000c8cec50726f7879206120646973706174636861626c652063616c6c206f6620616e6f746865722072756e74696d652065787472696e736963207468617458737570706f727473206120444944206f726967696e2e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f726520746865606f7065726174696f6e20697320646973706174636865642e00fc412063616c6c207375626d6974746564207468726f75676820746869732065787472696e736963206d757374206265207369676e65642077697468207468650901726967687420444944206b65792c20646570656e64696e67206f6e207468652063616c6c2e205468697320696e666f726d6174696f6e2069732070726f766964656409016279207468652060446964417574686f72697a656443616c6c4f7065726174696f6e6020706172616d657465722c20776869636820737065636966696573207468650901444944207375626a65637420616374696e6720617320746865206f726967696e206f66207468652063616c6c2c2074686520444944277320747820636f756e7465720101286e6f6e6365292c2074686520646973706174636861626c6520746f2063616c6c20696e2063617365207369676e617475726520766572696669636174696f6ef073756363656564732c207468652074797065206f6620444944206b657920746f2075736520746f2076657269667920746865206f7065726174696f6efc7369676e61747572652c20616e642074686520626c6f636b206e756d62657220746865206f7065726174696f6e2077617320746172676574696e6720666f72a8696e636c7573696f6e2c207768656e20697420776173206372656174656420616e64207369676e65642e00fc496e206361736520746865207369676e617475726520697320696e636f72726563742c20746865206e6f6e6365206973206e6f742076616c69642c20746865fc7265717569726564206b6579206973206e6f742070726573656e7420666f722074686520737065636966696564204449442c206f722074686520626c6f636bfc73706563696669656420697320746f6f206f6c642074686520766572696669636174696f6e206661696c7320616e64207468652063616c6c206973206e6f74f4646973706174636865642e204f74686572776973652c207468652063616c6c2069732070726f7065726c79206469737061746368656420776974682061b8604469644f726967696e60206f726967696e20696e6469636174696e672074686520444944207375626a6563742e00110141207375636365737366756c206469737061746368206f7065726174696f6e20726573756c747320696e2074686520747820636f756e746572206173736f6369617465640501776974682074686520676976656e2044494420746f20626520696e6372656d656e7465642c20746f206d69746967617465207265706c61792061747461636b732e000101546865206469737061746368206f726967696e2063616e20626520616e79204b494c54206163636f756e74207769746820656e6f7567682066756e647320746f0d0165786563757465207468652065787472696e73696320616e6420697420646f6573206e6f74206861766520746f206265207469656420696e20616e792077617920746fb4746865204b494c54206163636f756e74206964656e74696679696e672074686520444944207375626a6563742e0068456d697473206044696443616c6c44697370617463686564602e002823203c7765696768743eb05765696768743a204f283129202b20776569676874206f662074686520646973706174636865642063616c6c782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e6572000d1c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00b8546865207375626a656374206f66207468652063616c6c206d7573742062652074686520646964206f776e65722ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404010c6469640001484469644964656e7469666965724f663c543e000e0cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e55040c0c6469642c6469645f64657461696c73484469644372656174696f6e44657461696c73040454000018010c6469640001484469644964656e7469666965724f663c543e0001247375626d69747465720001384163636f756e7449644f663c543e0001586e65775f6b65795f61677265656d656e745f6b6579735904016c4469644e65774b657941677265656d656e744b65795365743c543e00014c6e65775f6174746573746174696f6e5f6b6579690401684f7074696f6e3c446964566572696669636174696f6e4b65793e0001486e65775f64656c65676174696f6e5f6b6579690401684f7074696f6e3c446964566572696669636174696f6e4b65793e00014c6e65775f736572766963655f64657461696c737d04014c5665633c446964456e64706f696e743c543e3e00005904101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454015d040453000004006104012c42547265655365743c543e00005d040c0c6469642c6469645f64657461696c7340446964456e6372797074696f6e4b65790001041858323535313904000401205b75383b2033325d00000000610404204254726565536574040454015d04000400650400000065040000025d0400690404184f7074696f6e040454016d040108104e6f6e6500000010536f6d6504006d0400000100006d040c0c6469642c6469645f64657461696c7348446964566572696669636174696f6e4b657900010c1c4564323535313904007104013c656432353531393a3a5075626c69630000001c5372323535313904001903013c737232353531393a3a5075626c696300010014456364736104007504013465636473613a3a5075626c69630002000071040c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d000075040c1c73705f636f7265146563647361185075626c696300000400790401205b75383b2033335d000079040000032100000008007d0400000281040081040c0c64696444736572766963655f656e64706f696e74732c446964456e64706f696e7404045400000c010869648504015053657276696365456e64706f696e7449643c543e000134736572766963655f74797065738904017453657276696365456e64706f696e7454797065456e74726965733c543e00011075726c739504017053657276696365456e64706f696e7455726c456e74726965733c543e00008504101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00008904101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454018d04045300000400910401185665633c543e00008d04101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000091040000028d04009504101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540199040453000004009d0401185665633c543e00009904101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00009d04000002990400a1040c0c6469642c6469645f64657461696c7368446964417574686f72697a656443616c6c4f7065726174696f6e040454000014010c6469640001484469644964656e7469666965724f663c543e00012874785f636f756e74657210010c75363400011063616c6ca503014044696443616c6c61626c654f663c543e000130626c6f636b5f6e756d626572100140426c6f636b4e756d6265724f663c543e0001247375626d69747465720001384163636f756e7449644f663c543e0000a5040c4470616c6c65745f6469645f6c6f6f6b75701870616c6c65741043616c6c040454000120446173736f63696174655f6163636f756e7408010c726571a904015c4173736f63696174654163636f756e745265717565737400012865787069726174696f6e1001a03c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a426c6f636b4e756d62657200004405014173736f63696174652074686520676976656e206163636f756e7420746f2074686520444944207468617420617574686f72697a656420746869732063616c6c2e000501546865206163636f756e742068617320746f207369676e207468652044494420616e64206120626c6f636b6e756d62657220616674657220776869636820746865e07369676e6174757265206578706972657320696e206f7264657220746f20617574686f72697a6520746865206173736f63696174696f6e2e001101546865207369676e61747572652077696c6c20626520636865636b656420616761696e737420746865207363616c6520656e636f646564207475706c65206f66207468650d016d6574686f64207370656369666963206964206f662074686520646964206964656e74696669657220616e642074686520626c6f636b206e756d626572206166746572bc776869636820746865207369676e61747572652073686f756c6420626520726567617264656420696e76616c69642e001101456d69747320604173736f63696174696f6e45737461626c69736865646020616e642c206f7074696f6e616c6c792c20604173736f63696174696f6e52656d6f76656460d069662074686572652077617320612070726576696f7573206173736f63696174696f6e20666f7220746865206163636f756e742e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e406173736f63696174655f73656e64657200012c01014173736f6369617465207468652073656e646572206f66207468652063616c6c20746f2074686520444944207468617420617574686f72697a656420746869731463616c6c2e001101456d69747320604173736f63696174696f6e45737461626c69736865646020616e642c206f7074696f6e616c6c792c20604173736f63696174696f6e52656d6f76656460d069662074686572652077617320612070726576696f7573206173736f63696174696f6e20666f7220746865206163636f756e742e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e6472656d6f76655f73656e6465725f6173736f63696174696f6e000228fc52656d6f766520746865206173736f63696174696f6e206f66207468652073656e646572206163636f756e742e20546869732063616c6c20646f65736e27740d01726571756972652074686520617574686f72697a6174696f6e206f6620746865204449442c206275742072657175697265732061207369676e6564206f726967696e2e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e6872656d6f76655f6163636f756e745f6173736f63696174696f6e04011c6163636f756e74090101444c696e6b61626c654163636f756e74496400032c110152656d6f766520746865206173736f63696174696f6e206f66207468652070726f7669646564206163636f756e742049442e20546869732063616c6c20646f65736e27740d01726571756972652074686520617574686f72697a6174696f6e206f6620746865206163636f756e742049442c2062757420746865206173736f63696174656420444944c46e6565647320746f206d617463682074686520444944207468617420617574686f72697a656420746869732063616c6c2e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e3c7265636c61696d5f6465706f73697404011c6163636f756e74090101444c696e6b61626c654163636f756e74496400042c090152656d6f766520746865206173736f63696174696f6e206f66207468652070726f7669646564206163636f756e742e20546869732063616c6c2063616e206f6e6c79f862652063616c6c65642066726f6d20746865206465706f736974206f776e65722e20546865207265736572766564206465706f7369742077696c6c2062651866726565642e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129582d2052656164733a20436f6e6e6563746564446964735c2d205772697465733a20436f6e6e6563746564446964732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657204011c6163636f756e74090101444c696e6b61626c654163636f756e74496400051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00d8546865207375626a656374206f66207468652063616c6c206d757374206265206c696e6b656420746f20746865206163636f756e742ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404011c6163636f756e74090101444c696e6b61626c654163636f756e74496400060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e1c6d6967726174650401146c696d69741c010c75333200fe18e8457865637574657320746865206b65792074797065206d6967726174696f6e206f66207468652060436f6e6e6563746564446964736020616e64010160436f6e6e65637465644163636f756e7473602073746f726167657320627920636f6e76657274696e672074686520676976656e20604163636f756e74496460f0696e746f20604c696e6b61626c654163636f756e744964284163636f756e74496429602e204f6e636520616c6c206b6579732068617665206265656efc6d696772617465642c20746865206d6967726174696f6e20697320646f6e6520616e6420746869732063616c6c2077696c6c2062652066696c74657265642e007043616e2062652063616c6c656420627920616e79206f726967696e2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea9040c4470616c6c65745f6469645f6c6f6f6b7570646173736f63696174655f6163636f756e745f726571756573745c4173736f63696174654163636f756e745265717565737400010820506f6c6b61646f74080000012c4163636f756e74496433320000ad0401384d756c74695369676e617475726500000020457468657265756d08000d01012c4163636f756e74496432300000b1040144457468657265756d5369676e617475726500010000ad04082873705f72756e74696d65384d756c74695369676e617475726500010c1c4564323535313904003d040148656432353531393a3a5369676e61747572650000001c53723235353139040045040148737232353531393a3a5369676e617475726500010014456364736104004904014065636473613a3a5369676e617475726500020000b1040c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e7444457468657265756d5369676e6174757265000004004904014065636473613a3a5369676e61747572650000b5040c4470616c6c65745f776562335f6e616d65731870616c6c65741043616c6c04045400011c14636c61696d0401106e616d651d010140576562334e616d65496e7075743c543e00003ce841737369676e2074686520737065636966696564206e616d6520746f20746865206f776e65722061732073706563696669656420696e207468651c6f726967696e2e000d01546865206e616d65206d757374206e6f74206861766520616c7265616479206265656e20636c61696d656420627920736f6d656f6e6520656c736520616e6420746865a06f776e6572206d757374206e6f7420616c7265616479206f776e20616e6f74686572206e616d652e00dc456d6974732060576562334e616d65436c61696d65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f28312909012d2052656164733a204e616d65732c204f776e65722c2042616e6e65642073746f7261676520656e7472696573202b20617661696c61626c652063757272656e6379582020636865636b202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f73697420726573657276652c23203c2f7765696768743e4072656c656173655f62795f6f776e6572000130a452656c65617365207468652070726f7669646564206e616d652066726f6d20697473206f776e65722e00cc546865206f726967696e206d75737420626520746865206f776e6572206f662074686520737065636966696564206e616d652e00e0456d6974732060576562334e616d6552656c65617365646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129ac2d2052656164733a204e616d65732073746f7261676520656e747279202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f7369742072656c656173652c23203c2f7765696768743e3c7265636c61696d5f6465706f7369740401106e616d651d010140576562334e616d65496e7075743c543e000230a452656c65617365207468652070726f7669646564206e616d652066726f6d20697473206f776e65722e000101546865206f726967696e206d75737420626520746865206163636f756e742074686174207061696420666f7220746865206e616d652773206465706f7369742e00e0456d6974732060576562334e616d6552656c65617365646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129ac2d2052656164733a204f776e65722073746f7261676520656e747279202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f7369742072656c656173652c23203c2f7765696768743e0c62616e0401106e616d651d010140576562334e616d65496e7075743c543e0003402c42616e2061206e616d652e00f4412062616e6e6564206e616d652063616e6e6f7420626520636c61696d656420627920616e796f6e652e20546865206e616d652773206465706f7369748869732072657475726e656420746f20746865206f726967696e616c2070617965722e0088546865206f726967696e206d757374206265207468652062616e206f726967696e2e00d8456d6974732060576562334e616d6542616e6e65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129f02d2052656164733a2042616e6e65642c204f776e65722c204e616d65732073746f7261676520656e7472696573202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722c2042616e6e65642073746f7261676520656e7472696573202b2063757272656e6379206465706f73697424202072656c656173652c23203c2f7765696768743e14756e62616e0401106e616d651d010140576562334e616d65496e7075743c543e00043834556e62616e2061206e616d652e00704d616b652061206e616d6520636c61696d61626c6520616761696e2e0088546865206f726967696e206d757374206265207468652062616e206f726967696e2e00e0456d6974732060576562334e616d65556e62616e6e65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129b02d2052656164733a2042616e6e65642073746f7261676520656e747279202b206f726967696e20636865636bb82d205772697465733a2042616e6e65642073746f7261676520656e747279206465706f7369742072656c656173652c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657200051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00e8546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f662074686520776562336e616d652ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f7369740401286e616d655f696e7075741d010140576562334e616d65496e7075743c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb9040c487075626c69635f63726564656e7469616c731870616c6c65741043616c6c04045400011c0c61646404012863726564656e7469616cbd040164426f783c496e70757443726564656e7469616c4f663c543e3e000018a852656769737465722061206e6577207075626c69632063726564656e7469616c206f6e20636861696e2e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c2077697468207468652073616d65206964656e74696669657220616c72656164798465786973747320666f722074686520737065636966696564207375626a6563742e0064456d697473206043726564656e7469616c53746f726564602e187265766f6b6508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e250401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000120705265766f6b65732061207075626c69632063726564656e7469616c2e001101496620612063726564656e7469616c2077617320616c7265616479207265766f6b65642c20746869732066756e6374696f6e20646f6573206e6f74206661696c206275746473696d706c7920726573756c747320696e2061206e6f6f702e000101546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f207265766f6b65207468652063726564656e7469616c2e0068456d697473206043726564656e7469616c5265766f6b6564602e20756e7265766f6b6508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e250401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e00022478556e7265766f6b65732061207075626c69632063726564656e7469616c2e000101496620612063726564656e7469616c20776173206e6f74207265766f6b65642c20746869732066756e6374696f6e20646f6573206e6f74206661696c206275746473696d706c7920726573756c747320696e2061206e6f6f702e00d8546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f20756e7265766f6b65207468652c63726564656e7469616c2e0070456d697473206043726564656e7469616c556e7265766f6b6564602e1872656d6f766508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e250401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000344fc52656d6f7665732074686520696e666f726d6174696f6e207065727461696e696e672061207075626c69632063726564656e7469616c2066726f6d2074686518636861696e2e0009015468652072656d6f76616c206f66207468652063726564656e7469616c20646f6573206e6f742064656c65746520697420656e746972656c792066726f6d207468650501626c6f636b636861696e20686973746f72792c20627574206f6e6c7920697473206c696e6b202a66726f6d2a2074686520626c6f636b636861696e2073746174659c2a746f2a2074686520626c6f636b636861696e20686973746f72792069732072656d6f7665642e00cc436c69656e74732070617273696e67207075626c69632063726564656e7469616c732073686f756c6420696e746572707265740101746865206c61636b206f6620737563682061206c696e6b2061732074686520666163742074686174207468652063726564656e7469616c20686173206265656eb872656d6f7665642062792069747320617474657374657220736f6d652074696d6520696e2074686520706173742e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c20616c72656164792065786973747320666f722074686520737065636966696564207375626a6563742e000101546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f2072656d6f7665207468652063726564656e7469616c2e0068456d697473206043726564656e7469616c52656d6f766564602e3c7265636c61696d5f6465706f73697404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000448fc52656d6f7665732074686520696e666f726d6174696f6e207065727461696e696e672061207075626c69632063726564656e7469616c2066726f6d20746865ac636861696e20616e642072657475726e7320746865206465706f73697420746f206974732070617965722e0009015468652072656d6f76616c206f66207468652063726564656e7469616c20646f6573206e6f742064656c65746520697420656e746972656c792066726f6d207468650501626c6f636b636861696e20686973746f72792c20627574206f6e6c7920697473206c696e6b202a66726f6d2a2074686520626c6f636b636861696e2073746174659c2a746f2a2074686520626c6f636b636861696e20686973746f72792069732072656d6f7665642e00cc436c69656e74732070617273696e67207075626c69632063726564656e7469616c732073686f756c6420696e746572707265740101746865206c61636b206f6620737563682061206c696e6b2061732074686520666163742074686174207468652063726564656e7469616c20686173206265656eb872656d6f7665642062792069747320617474657374657220736f6d652074696d6520696e2074686520706173742e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c20616c72656164792065786973747320666f722074686520737065636966696564207375626a6563742e000d01546865206469737061746368206f726967696e206d75737420626520746865206f776e6572206f6620746865206465706f7369742c2068656e6365206e6f74207468655863726564656e7469616c27732061747465737465722e0068456d697473206043726564656e7469616c52656d6f766564602e506368616e67655f6465706f7369745f6f776e657204013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e00051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00f0546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f66207468652063726564656e7469616c2ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ebd040c487075626c69635f63726564656e7469616c732c63726564656e7469616c732843726564656e7469616c1024437479706548617368012c445375626a6563744964656e74696669657201c10418436c61696d7301c50434416363657373436f6e74726f6c0129040010012863747970655f686173682c012443747970654861736800011c7375626a656374c10401445375626a6563744964656e746966696572000118636c61696d73c5040118436c61696d73000134617574686f72697a6174696f6e250401544f7074696f6e3c416363657373436f6e74726f6c3e0000c104101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000c504101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000c9040c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f6461746104011064617461cd04015450617261636861696e496e686572656e744461746100002480536574207468652063757272656e742076616c69646174696f6e20646174612e004101546869732073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e887068617365206966207468652063616c6c20776173206e6f7420696e766f6b65642e00d0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e7460002101417320612073696465206566666563742c20746869732066756e6374696f6e207570677261646573207468652063757272656e742076616c69646174696f6e2066756e6374696f6e8469662074686520617070726f7072696174652074696d652068617320636f6d652e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653001345570776172644d65737361676500010044617574686f72697a655f75706772616465040124636f64655f686173682c011c543a3a4861736800020060656e6163745f617574686f72697a65645f75706772616465040110636f646530011c5665633c75383e000300042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ecd04089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f64617461d104015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f7374617465d904015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d65737361676573e104016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573e90401a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e0000d1040c4c706f6c6b61646f745f7072696d6974697665730876325c50657273697374656456616c69646174696f6e44617461080448012c044e011c0010012c706172656e745f68656164d5040120486561644461746100014c72656c61795f706172656e745f6e756d6265721c01044e00016472656c61795f706172656e745f73746f726167655f726f6f742c0104480001306d61785f706f765f73697a651c010c7533320000d5040c48706f6c6b61646f745f70617261636861696e287072696d6974697665732048656164446174610000040030011c5665633c75383e0000d9040c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f646573dd04014442547265655365743c5665633c75383e3e0000dd040420425472656553657404045401300004009502000000e104000002e50400e5040860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d626572011c0008011c73656e745f61741c012c426c6f636b4e756d62657200010c6d736730013c446f776e776172644d6573736167650000e904042042547265654d617008044b019d01045601ed04000400f504000000ed04000002f10400f1040860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d626572011c0008011c73656e745f61741c012c426c6f636b4e756d6265720001106461746130015073705f7374643a3a7665633a3a5665633c75383e0000f504000002f90400f904000004089d01ed0400fd040c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c04045400012448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d697424011857656967687400003484536572766963657320612073696e676c65206f7665727765696768742058434d2e00c02d20606f726967696e603a204d75737420706173732060457865637574654f7665727765696768744f726967696e602ed42d2060696e646578603a2054686520696e646578206f6620746865206f7665727765696768742058434d20746f20736572766963650d012d20607765696768745f6c696d6974603a2054686520616d6f756e74206f662077656967687420746861742058434d20657865637574696f6e206d61792074616b652e001c4572726f72733a5d012d20604261644f766572776569676874496e646578603a2058434d20756e6465722060696e64657860206973206e6f7420666f756e6420696e2074686520604f766572776569676874602073746f72616765206d61702e45012d206042616458636d603a2058434d20756e6465722060696e646578602063616e6e6f742062652070726f7065726c79206465636f64656420696e746f20612076616c69642058434d20666f726d61742e09012d20605765696768744f7665724c696d6974603a2058434d20657865637574696f6e206d617920757365206772656174657220607765696768745f6c696d6974602e001c4576656e74733a8c2d20604f7665727765696768745365727669636564603a204f6e20737563636573732e5473757370656e645f78636d5f657865637574696f6e00010c490153757370656e647320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652c207265676172646c657373206f66207468652073656e6465722773206f726967696e2e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e50726573756d655f78636d5f657865637574696f6e000214b8526573756d657320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652e003d014e6f7465207468617420746869732066756e6374696f6e20646f65736e2774206368616e67652074686520737461747573206f662074686520696e2f6f757420626f756e64206368616e6e656c732e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e607570646174655f73757370656e645f7468726573686f6c6404010c6e65771c010c75333200031499014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e2074686520717565756520666f7220746865206f74686572207369646520746f20626520746f6c6420746f5873757370656e642074686569722073656e64696e672e00742d20606f726967696e603a204d75737420706173732060526f6f74602ee82d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e73757370656e645f76616c756560547570646174655f64726f705f7468726573686f6c6404010c6e65771c010c75333200041495014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e207468652071756575652061667465722077686963682077652064726f7020616e792066757274686572686d657373616765732066726f6d20746865206368616e6e656c2e00742d20606f726967696e603a204d75737420706173732060526f6f74602eec2d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e64726f705f7468726573686f6c64605c7570646174655f726573756d655f7468726573686f6c6404010c6e65771c010c75333200051491014f76657277726974657320746865206e756d626572206f66207061676573206f66206d6573736167657320776869636820746865207175657565206d757374206265207265647563656420746f206265666f7265206974207369676e616c732074686174ec6d6573736167652073656e64696e67206d6179207265636f6d6d656e636520616674657220697420686173206265656e2073757370656e6465642e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e726573756d655f7468726573686f6c64605c7570646174655f7468726573686f6c645f77656967687404010c6e657724011857656967687400061049014f7665727772697465732074686520616d6f756e74206f662072656d61696e696e672077656967687420756e6465722077686963682077652073746f702070726f63657373696e67206d657373616765732e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7468726573686f6c645f77656967687460707570646174655f7765696768745f72657374726963745f646563617904010c6e657724011857656967687400071445014f7665727772697465732074686520737065656420746f2077686963682074686520617661696c61626c652077656967687420617070726f616368657320746865206d6178696d756d207765696768742ea50141206c6f776572206e756d62657220726573756c747320696e2061206661737465722070726f6772657373696f6e2e20412076616c7565206f662031206d616b65732074686520656e746972652077656967687420617661696c61626c6520696e697469616c6c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e0d012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7765696768745f72657374726963745f6465636179602e847570646174655f78636d705f6d61785f696e646976696475616c5f77656967687404010c6e657724011857656967687400081429014f766572777269746520746865206d6178696d756d20616d6f756e74206f662077656967687420616e7920696e646976696475616c206d657373616765206d617920636f6e73756d652e71014d657373616765732061626f766520746869732077656967687420676f20696e746f20746865206f76657277656967687420717565756520616e64206d6179206f6e6c79206265207365727669636564206578706c696369746c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e21012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e78636d705f6d61785f696e646976696475616c5f776569676874602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e01050c2870616c6c65745f78636d1870616c6c65741043616c6c0404540001281073656e64080110646573746902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011c6d65737361676505050154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f617373657473100110646573746902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172796902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747331020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c75333200013c110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f617373657473100110646573746902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172796902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747331020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320002404d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d657373616765350501c0426f783c56657273696f6e656458636d3c3c5420617320537973436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f77656967687424011857656967687400032cd04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e006d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e2074686559016d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f20657865637574696f6e54617474656d70742077696c6c206265206d6164652e006d014e4f54453a2041207375636365737366756c2072657475726e20746f207468697320646f6573202a6e6f742a20696d706c7920746861742074686520606d73676020776173206578656375746564207375636365737366756c6c79cc746f20636f6d706c6574696f6e3b206f6e6c792074686174202a736f6d652a206f66206974207761732065786563757465642e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6ea9010148426f783c4d756c74694c6f636174696f6e3e00012c78636d5f76657273696f6e1c012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00642d20606f726967696e603a204d75737420626520526f6f742ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6eb10301484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00642d20606f726967696e603a204d75737420626520526f6f742e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e6902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00642d20606f726967696e603a204d75737420626520526f6f742e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e6902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00642d20606f726967696e603a204d75737420626520526f6f742e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f617373657473140110646573746902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172796902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747331020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320001307765696768745f6c696d69742d02012c5765696768744c696d69740008484d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f617373657473140110646573746902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172796902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747331020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320001307765696768745f6c696d69742d02012c5765696768744c696d6974000944110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e0505080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204000905015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400cd01015076333a3a58636d3c52756e74696d6543616c6c3e0003000009050c0c78636d0876320c58636d042c52756e74696d6543616c6c000004000d0501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e00000d0500000211050011050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404003502012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404003502012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404003502012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f696428011c51756572794964000120726573706f6e736515050120526573706f6e73650001286d61785f77656967687428010c753634000300345472616e7366657241737365740801186173736574733502012c4d756c746941737365747300012c62656e6566696369617279450201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574733502012c4d756c746941737365747300011064657374450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065150201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c19020168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b501010c7533320001406d61785f6d6573736167655f73697a65b501010c7533320001306d61785f6361706163697479b501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b501010c75333200011873656e646572b501010c753332000124726563697069656e74b501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040049020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f696428011c5175657279496400011064657374450201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f77656967687428010c753634000c00304465706f73697441737365740c0118617373657473250501404d756c7469417373657446696c7465720001286d61785f617373657473b501010c75333200012c62656e6566696369617279450201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473250501404d756c7469417373657446696c7465720001286d61785f617373657473b501010c75333200011064657374450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e000e003445786368616e6765417373657408011067697665250501404d756c7469417373657446696c74657200011c726563656976653502012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473250501404d756c7469417373657446696c74657200011c72657365727665450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473250501404d756c7469417373657446696c74657200011064657374450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f696428011c5175657279496400011064657374450201344d756c74694c6f636174696f6e000118617373657473250501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f77656967687428010c75363400120030427579457865637574696f6e080110666565733d0201284d756c746941737365740001307765696768745f6c696d69743105012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204000905014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804000905014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574733502012c4d756c74694173736574730001187469636b6574450201344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f77656967687428010c753634001a0048556e73756273637269626556657273696f6e001b000015050c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304003502012c4d756c74694173736574730001003c457865637574696f6e526573756c740400190501504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e04001c013873757065723a3a56657273696f6e00030000190504184f7074696f6e040454011d050108104e6f6e6500000010536f6d6504001d0500000100001d05000004081c2105002105100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404001001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c65001900002505100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504003502012c4d756c74694173736574730000001057696c6404002905013857696c644d756c74694173736574000100002905100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869644102011c4173736574496400010c66756e2d05013c57696c6446756e676962696c697479000100002d05100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000031050c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d69746564040028010c753634000100003505080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204003905015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304004905015076333a3a58636d3c52756e74696d6543616c6c3e0003000039050c0c78636d0876320c58636d042c52756e74696d6543616c6c000004003d0501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e00003d0500000241050041050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404003502012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404003502012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404003502012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f696428011c51756572794964000120726573706f6e736515050120526573706f6e73650001286d61785f77656967687428010c753634000300345472616e7366657241737365740801186173736574733502012c4d756c746941737365747300012c62656e6566696369617279450201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574733502012c4d756c746941737365747300011064657374450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065150201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c45050168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b501010c7533320001406d61785f6d6573736167655f73697a65b501010c7533320001306d61785f6361706163697479b501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b501010c75333200011873656e646572b501010c753332000124726563697069656e74b501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040049020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f696428011c5175657279496400011064657374450201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f77656967687428010c753634000c00304465706f73697441737365740c0118617373657473250501404d756c7469417373657446696c7465720001286d61785f617373657473b501010c75333200012c62656e6566696369617279450201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473250501404d756c7469417373657446696c7465720001286d61785f617373657473b501010c75333200011064657374450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e000e003445786368616e6765417373657408011067697665250501404d756c7469417373657446696c74657200011c726563656976653502012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473250501404d756c7469417373657446696c74657200011c72657365727665450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473250501404d756c7469417373657446696c74657200011064657374450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f696428011c5175657279496400011064657374450201344d756c74694c6f636174696f6e000118617373657473250501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f77656967687428010c75363400120030427579457865637574696f6e080110666565733d0201284d756c746941737365740001307765696768745f6c696d69743105012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204003905014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804003905014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574733502012c4d756c74694173736574730001187469636b6574450201344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f77656967687428010c753634001a0048556e73756273637269626556657273696f6e001b000045050c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656430011c5665633c75383e000049050c0c78636d0876330c58636d041043616c6c000004004d0501585665633c496e737472756374696f6e3c43616c6c3e3e00004d0500000251050051050c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400d901012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400d901012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400d901012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f696428011c51756572794964000120726573706f6e7365f5010120526573706f6e73650001286d61785f77656967687424011857656967687400011c71756572696572110201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473d901012c4d756c746941737365747300012c62656e6566696369617279a90101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473d901012c4d756c746941737365747300011064657374a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64150201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737424011857656967687400011063616c6c4505014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b501010c7533320001406d61785f6d6573736167655f73697a65b501010c7533320001306d61785f6361706163697479b501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b501010c75333200011873656e646572b501010c753332000124726563697069656e74b501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400ad010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f7204001d0201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473210201404d756c7469417373657446696c74657200012c62656e6566696369617279a90101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473210201404d756c7469417373657446696c74657200011064657374a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e000e003445786368616e676541737365740c011067697665210201404d756c7469417373657446696c74657200011077616e74d901012c4d756c746941737365747300011c6d6178696d616ca40110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473210201404d756c7469417373657446696c74657200011c72657365727665a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473210201404d756c7469417373657446696c74657200011064657374a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f1d0201445175657279526573706f6e7365496e666f000118617373657473210201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573e10101284d756c746941737365740001307765696768745f6c696d69742d02012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204004905012458636d3c43616c6c3e0015002c536574417070656e64697804004905012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473d901012c4d756c74694173736574730001187469636b6574a90101344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f776569676874240118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400d901012c4d756c7469417373657473001c002c45787065637441737365740400d901012c4d756c7469417373657473001d00304578706563744f726967696e0400110201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400f90101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304000d0201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6530011c5665633c75383e000134726573706f6e73655f696e666f1d0201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578b501010c7533320001106e616d6530011c5665633c75383e00012c6d6f64756c655f6e616d6530011c5665633c75383e00012c63726174655f6d616a6f72b501010c75333200013c6d696e5f63726174655f6d696e6f72b501010c753332002200505265706f72745472616e7361637453746174757304001d0201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400b10101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bbd0101244e6574776f726b496400012c64657374696e6174696f6ead010154496e746572696f724d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e002600244c6f636b41737365740801146173736574e10101284d756c74694173736574000120756e6c6f636b6572a90101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574e10101284d756c74694173736574000118746172676574a90101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574e10101284d756c746941737365740001146f776e6572a90101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574e10101284d756c746941737365740001186c6f636b6572a90101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177a40110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400a90101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69742d02012c5765696768744c696d6974000130636865636b5f6f726967696e110201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f000055050c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c65741043616c6c04045400010448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d6974240118576569676874000004905365727669636520612073696e676c65206f766572776569676874206d6573736167652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e59050000029d03005d0500000408610518006105101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540100045300000400250301185665633c543e000065050c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d62657201102050726f706f73616c01a1031c42616c616e6365011801081c4f6e676f696e670400690501c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564a40110626f6f6c00010c656e6410012c426c6f636b4e756d6265720001000069050c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d62657201102050726f706f73616c01a1031c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200012070726f706f73616ca103012050726f706f73616c0001247468726573686f6c64940134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c796d05013854616c6c793c42616c616e63653e00006d050c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e6365000071050c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f746573000108184469726563740c0114766f746573750501f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e738105015044656c65676174696f6e733c42616c616e63653e0001147072696f728505017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6ead030128436f6e76696374696f6e00012c64656c65676174696f6e738105015044656c65676174696f6e733c42616c616e63653e0001147072696f728505017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e000100007505101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540179050453000004007d0501185665633c543e00007905000004081c98007d0500000279050081050c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e6365000085050c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e63650000890500000408a10394008d05000004081061050091050c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f7204045400015c2056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7704b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909099505101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454012c045300000400790201185665633c543e00009905084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e6465781c013450726f706f73616c496e6465780001247468726573686f6c641c012c4d656d626572436f756e7400011061796573250301385665633c4163636f756e7449643e0001106e617973250301385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d62657200009d050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a105101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454012c045300000400790201185665633c543e0000a5050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a905101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540100045300000400250301185665633c543e0000ad050c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b105083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e63650000b505101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454011c045300000400350301185665633c543e0000b9050c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c000004001c010c7533320000bd0504184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000c10508346672616d655f737570706f72742050616c6c6574496400000400f101011c5b75383b20385d0000c5050c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900011470496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e04784572726f7220666f72207468652074726561737572792070616c6c65742ec9050c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909cd05101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401fd03045300000400d10501185665633c543e0000d105000002fd0300d505083870616c6c65745f76657374696e672052656c656173657300010808563000000008563100010000d9050c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742edd05101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401e105045300000400e90501185665633c543e0000e10504184f7074696f6e04045401e5050108104e6f6e6500000010536f6d650400e5050000010000e505084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c01a1032c426c6f636b4e756d62657201103450616c6c6574734f726967696e01d903244163636f756e7449640100001401206d617962655f6964cc01304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6ca103011043616c6c0001386d617962655f706572696f646963050401944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696ed903013450616c6c6574734f726967696e0000e905000002e10500ed050c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909f10500000408f5051800f505101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401f905045300000400fd0501185665633c543e0000f905083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501d42c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065d4012450726f78795479706500011464656c617910012c426c6f636b4e756d6265720000fd05000002f90500010600000408050618000506101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540109060453000004000d0601185665633c543e00000906083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e74496401001048617368012c2c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173682c01104861736800011868656967687410012c426c6f636b4e756d62657200000d0600000209060011060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909091506083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f73697419060150284163636f756e7449642c2042616c616e63652900010c6c656e1c010c753332000000245265717565737465640c011c6465706f7369741d0601704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e741c010c75333200010c6c656eb103012c4f7074696f6e3c7533323e000100001906000004080018001d0604184f7074696f6e0404540119060108104e6f6e6500000010536f6d650400190600000100002106000004082c1c002506101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000029060c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909092d060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909093106082c70616c6c65745f746970731c4f70656e54697010244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d62657201101048617368012c001c0118726561736f6e2c01104861736800010c77686f0001244163636f756e74496400011866696e6465720001244163636f756e74496400011c6465706f73697418011c42616c616e6365000118636c6f7365733506014c4f7074696f6e3c426c6f636b4e756d6265723e00011074697073390601645665633c284163636f756e7449642c2042616c616e6365293e00012c66696e646572735f666565a40110626f6f6c0000350604184f7074696f6e04045401100108104e6f6e6500000010536f6d65040010000001000039060000021906003d060c3473705f61726974686d65746963287065725f7468696e67731c50657263656e74000004000801087538000041060c2c70616c6c65745f746970731870616c6c6574144572726f7208045400044900011830526561736f6e546f6f4269670000048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e30416c72656164794b6e6f776e00010488546865207469702077617320616c726561647920666f756e642f737461727465642e28556e6b6e6f776e5469700002046054686520746970206861736820697320756e6b6e6f776e2e244e6f7446696e6465720003041d01546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e245374696c6c4f70656e0004042901546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e245072656d61747572650005043101546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090945060c1463747970652c63747970655f656e747279284374797065456e747279081c43726561746f7201002c426c6f636b4e756d62657201100008011c63726561746f7200011c43726561746f72000128637265617465645f617410012c426c6f636b4e756d626572000049060c1463747970651870616c6c6574144572726f7204045400010c204e6f74466f756e64000004985468657265206973206e6f20435479706520776974682074686520676976656e20686173682e34416c72656164794578697374730001046454686520435479706520616c7265616479206578697374732e3c556e61626c65546f506179466565730002040d0154686520706179696e67206163636f756e742077617320756e61626c6520746f2070617920746865206665657320666f72206372656174696e6720612063747970652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909094d060c2c6174746573746174696f6e306174746573746174696f6e73484174746573746174696f6e44657461696c73040454000014012863747970655f686173682c01384374797065486173684f663c543e000120617474657374657200013441747465737465724f663c543e000140617574686f72697a6174696f6e5f6964f001704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e00011c7265766f6b6564a40110626f6f6c00011c6465706f736974510601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e000051060c306b696c745f737570706f72741c6465706f7369741c4465706f736974081c4163636f756e7401001c42616c616e63650118000801146f776e657200011c4163636f756e74000118616d6f756e7418011c42616c616e63650000550600000408f42c0059060c2c6174746573746174696f6e1870616c6c6574144572726f720404540001183c416c726561647941747465737465640000080901546865726520697320616c726561647920616e206174746573746174696f6e2077697468207468652073616d6520636c61696d20686173682073746f726564206f6e18636861696e2e38416c72656164795265766f6b6564000104a4546865206174746573746174696f6e2068617320616c7265616479206265656e207265766f6b65642e204e6f74466f756e64000204c04e6f206174746573746174696f6e206f6e20636861696e206d61746368696e672074686520636c61696d20686173682e3443547970654d69736d61746368000308fc546865206174746573746174696f6e20435479706520646f6573206e6f74206d61746368207468652043547970652073706563696669656420696e207468656864656c65676174696f6e2068696572617263687920726f6f742e344e6f74417574686f72697a6564000404f05468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f206368616e676520746865206174746573746174696f6e2e804d617844656c6567617465644174746573746174696f6e73457863656564656400050cf4546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732068617320616c7265616479206265656e05017265616368656420666f722074686520636f72726573706f6e64696e672064656c65676174696f6e2069642073756368207468617420616e6f74686572206f6e654063616e6e6f742062652061646465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909095d060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368793844656c65676174696f6e4e6f646504045400001401446869657261726368795f726f6f745f69642c015444656c65676174696f6e4e6f646549644f663c543e000118706172656e74610601744f7074696f6e3c44656c65676174696f6e4e6f646549644f663c543e3e0001206368696c6472656e650601d8426f756e64656442547265655365743c44656c65676174696f6e4e6f646549644f663c543e2c20543a3a4d61784368696c6472656e3e00011c64657461696c736d06015044656c65676174696f6e44657461696c733c543e00011c6465706f736974510601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e0000610604184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c00000100006506101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454012c0453000004006906012c42547265655365743c543e0000690604204254726565536574040454012c00040079020000006d060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368794444656c65676174696f6e44657461696c7304045400000c01146f776e657200014044656c656761746f7249644f663c543e00011c7265766f6b6564a40110626f6f6c00012c7065726d697373696f6e73fc012c5065726d697373696f6e73000071060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368796844656c65676174696f6e48696572617263687944657461696c73040454000004012863747970655f686173682c01384374797065486173684f663c543e000075060c2864656c65676174696f6e1870616c6c6574144572726f720404540001585c44656c65676174696f6e416c72656164794578697374730000041101546865726520697320616c726561647920612064656c65676174696f6e206e6f64652077697468207468652073616d652049442073746f726564206f6e20636861696e2e60496e76616c696444656c65676174655369676e617475726500010805015468652064656c65676174652773207369676e617475726520666f72207468652064656c65676174696f6e206372656174696f6e206f7065726174696f6e20697320696e76616c69642e4844656c65676174696f6e4e6f74466f756e64000204c04e6f2064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e4044656c65676174654e6f74466f756e64000304b84e6f2064656c656761746520776974682074686520676976656e2049442073746f726564206f6e20636861696e2e58486965726172636879416c7265616479457869737473000404f8546865726520697320616c72656164792061206869657261726368792077697468207468652073616d652049442073746f726564206f6e20636861696e2e444869657261726368794e6f74466f756e64000504bc4e6f2068696572617263687920776974682074686520676976656e2049442073746f726564206f6e20636861696e2e544d617853656172636844657074685265616368656400060409014d6178206e756d626572206f66206e6f64657320636865636b656420776974686f757420766572696679696e672074686520676976656e20636f6e646974696f6e2e684e6f744f776e65724f66506172656e7444656c65676174696f6e000708f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6ef462656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20706172656e74206e6f64652e744e6f744f776e65724f6644656c65676174696f6e486965726172636879000808f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6eec62656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20726f6f74206e6f64652e60506172656e7444656c65676174696f6e4e6f74466f756e64000904dc4e6f20706172656e742064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e5c506172656e7444656c65676174696f6e5265766f6b6564000a04c854686520706172656e742064656c65676174696f6e206861732070726576696f75736c79206265656e207265766f6b65642e58556e617574686f72697a65645265766f636174696f6e000b04fc5468652064656c65676174696f6e207265766f6b6572206973206e6f7420616c6c6f77656420746f207265766f6b65207468652064656c65676174696f6e2e4c556e617574686f72697a656452656d6f76616c000c04ec5468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f2072656d6f7665207468652064656c65676174696f6e2e58556e617574686f72697a656444656c65676174696f6e000d04fc5468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f20637265617465207468652064656c65676174696f6e2e3041636365737344656e696564000e04f0546865206f7065726174696f6e207761736e277420616c6c6f7765642062656361757365206f6620696e73756666696369656e74207269676874732e6045786365656465645265766f636174696f6e426f756e6473000f080d014d6178206e756d626572206f66207265766f636174696f6e7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7238746865206f7065726174696f6e2e54457863656564656452656d6f76616c426f756e647300100811014d6178206e756d626572206f662072656d6f76616c7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7220746865286f7065726174696f6e2e584d61785265766f636174696f6e73546f6f4c61726765001104f8546865206d6178206e756d626572206f66207265766f636174696f6e206578636565647320746865206c696d697420666f72207468652070616c6c65742e4c4d617852656d6f76616c73546f6f4c61726765001204f0546865206d6178206e756d626572206f662072656d6f76616c73206578636565647320746865206c696d697420666f72207468652070616c6c65742e5c4d6178506172656e74436865636b73546f6f4c617267650013040501546865206d6178206e756d626572206f6620706172656e7420636865636b73206578636565647320746865206c696d697420666f72207468652070616c6c65742e20496e7465726e616c001404f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e4c4d61784368696c6472656e4578636565646564001508dc546865206d6178206e756d626572206f6620616c6c206368696c6472656e20686173206265656e207265616368656420666f722074686578636f72726573706f6e64696e672064656c65676174696f6e206e6f64652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090979060c0c6469642c6469645f64657461696c732844696444657461696c7304045400001c014861757468656e7469636174696f6e5f6b65792c01284b657949644f663c543e0001486b65795f61677265656d656e745f6b6579737d0601604469644b657941677265656d656e744b65795365743c543e00013864656c65676174696f6e5f6b6579610601484f7074696f6e3c4b657949644f663c543e3e00013c6174746573746174696f6e5f6b6579610601484f7074696f6e3c4b657949644f663c543e3e00012c7075626c69635f6b657973810601484469645075626c69634b65794d61703c543e00013c6c6173745f74785f636f756e74657210010c75363400011c6465706f736974510601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e00007d06101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454012c0453000004006906012c42547265655365743c543e00008106101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b012c04560185060453000004008d06013842547265654d61703c4b2c20563e000085060c0c6469642c6469645f64657461696c734c4469645075626c69634b657944657461696c73042c426c6f636b4e756d62657201100008010c6b6579890601304469645075626c69634b6579000130626c6f636b5f6e756d62657210012c426c6f636b4e756d626572000089060c0c6469642c6469645f64657461696c73304469645075626c69634b6579000108545075626c6963566572696669636174696f6e4b657904006d040148446964566572696669636174696f6e4b65790000004c5075626c6963456e6372797074696f6e4b657904005d040140446964456e6372797074696f6e4b6579000100008d06042042547265654d617008044b012c0456018506000400910600000091060000029506009506000004082c850600990600000408008504009d060c0c6469641870616c6c6574144572726f7204045400016c58496e76616c69645369676e6174757265466f726d6174000008050154686520444944206f7065726174696f6e207369676e6174757265206973206e6f7420696e2074686520666f726d61742074686520766572696669636174696f6e306b657920657870656374732e40496e76616c69645369676e6174757265000108f854686520444944206f7065726174696f6e207369676e617475726520697320696e76616c696420666f7220746865207061796c6f616420616e642074686568766572696669636174696f6e206b65792070726f76696465642e34416c7265616479457869737473000204f85468652044494420776974682074686520676976656e206964656e74696669657220697320616c72656164792070726573656e74206f6e20636861696e2e204e6f74466f756e64000304d44e6f2044494420776974682074686520676976656e206964656e7469666965722069732070726573656e74206f6e20636861696e2e5c566572696669636174696f6e4b65794e6f74466f756e6400040809014f6e65206f72206d6f726520766572696669636174696f6e206b657973207265666572656e63656420617265206e6f742073746f72656420696e2074686520736574546f6620766572696669636174696f6e206b6579732e30496e76616c69644e6f6e6365000504090154686520444944206f7065726174696f6e206e6f6e6365206973206e6f7420657175616c20746f207468652063757272656e7420444944206e6f6e6365202b20312e7c556e737570706f72746564446964417574686f72697a6174696f6e43616c6c000604e05468652063616c6c65642065787472696e73696320646f6573206e6f7420737570706f72742044494420617574686f7269736174696f6e2e6c496e76616c6964446964417574686f72697a6174696f6e43616c6c000708dc5468652063616c6c2068616420706172616d6574657273207468617420636f6e666c696374656420776974682065616368206f74686572406f72207765726520696e76616c69642e8c4d61784e65774b657941677265656d656e744b6579734c696d697445786365656465640008080d0141206e756d626572206f66206e6577206b65792061677265656d656e74206b6579732067726561746572207468616e20746865206d6178696d756d20616c6c6f77656448686173206265656e2070726f76696465642e544d61785075626c69634b65797345786365656465640009080501546865206d6178696d756d206e756d626572206f66207075626c6963206b65797320666f72207468697320444944206b6579206964656e74696669657220686173346265656e20726561636865642e6c4d61784b657941677265656d656e744b6579734578636565646564000a080501546865206d6178696d756d206e756d626572206f66206b65792061677265656d656e747320686173206265656e207265616368656420666f722074686520444944207375626a6563742e304261644469644f726967696e000b04bc546865204449442063616c6c20776173207375626d6974746564206279207468652077726f6e67206163636f756e74485472616e73616374696f6e45787069726564000c040d0154686520626c6f636b206e756d6265722070726f766964656420696e2061204449442d617574686f72697a6564206f7065726174696f6e20697320696e76616c69642e38416c726561647944656c65746564000d04b0546865204449442068617320616c7265616479206265656e2070726576696f75736c792064656c657465642e444e6f744f776e65724f664465706f736974000e04fc4f6e6c7920746865206f776e6572206f6620746865206465706f7369742063616e207265636c61696d206974732072657365727665642062616c616e63652e3c556e61626c65546f50617946656573000f04f0546865206f726967696e20697320756e61626c6520746f207265736572766520746865206465706f73697420616e642070617920746865206665652e6c4d61784e756d6265724f66536572766963657345786365656465640010041101546865206d6178696d756d206e756d626572206f66207365727669636520656e64706f696e747320666f7220612044494420686173206265656e2065786365656465642e684d61785365727669636549644c656e6774684578636565646564001104f0546865207365727669636520656e64706f696e7420494420657863656564656420746865206d6178696d756d20616c6c6f776564206c656e6774682e704d617853657276696365547970654c656e6774684578636565646564001208f84f6e65206f6620746865207365727669636520656e64706f696e7420747970657320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e884d61784e756d6265724f665479706573506572536572766963654578636565646564001308ec546865206d6178696d756d206e756d626572206f6620747970657320666f722061207365727669636520656e64706f696e7420686173206265656e2465786365656465642e6c4d61785365727669636555726c4c656e6774684578636565646564001408f44f6e65206f6620746865207365727669636520656e64706f696e742055524c7320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e844d61784e756d6265724f6655726c735065725365727669636545786365656465640015041101546865206d6178696d756d206e756d626572206f662055524c7320666f722061207365727669636520656e64706f696e7420686173206265656e2065786365656465642e5053657276696365416c726561647945786973747300160411014120736572766963652077697468207468652070726f766964656420494420697320616c72656164792070726573656e7420666f722074686520676976656e204449442e3c536572766963654e6f74466f756e6400170409014120736572766963652077697468207468652070726f7669646564204944206973206e6f742070726573656e7420756e6465722074686520676976656e204449442e58496e76616c696453657276696365456e636f64696e6700180409014f6e65206f6620746865207365727669636520656e64706f696e742064657461696c7320636f6e7461696e73206e6f6e2d415343494920636861726163746572732e7c4d617853746f726564456e64706f696e7473436f756e7445786365656465640019080d01546865206e756d626572206f66207365727669636520656e64706f696e74732073746f72656420756e6465722074686520444944206973206c6172676572207468616e88746865206e756d626572206f6620656e64706f696e747320746f2064656c6574652e20496e7465726e616c001a04f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a1060c4470616c6c65745f6469645f6c6f6f6b757044636f6e6e656374696f6e5f7265636f726440436f6e6e656374696f6e5265636f72640c344469644964656e74696669657201001c4163636f756e7401001c42616c616e636501180008010c6469640001344469644964656e74696669657200011c6465706f736974510601644465706f7369743c4163636f756e742c2042616c616e63653e0000a5060000040800090100a9060c4470616c6c65745f6469645f6c6f6f6b75703c6d6967726174696f6e5f7374617465384d6967726174696f6e537461746500010c10446f6e65000000285072655570677261646500010024557067726164696e670400ad06013c4d6978656453746f726167654b657900020000ad060c4470616c6c65745f6469645f6c6f6f6b7570286d6967726174696f6e733c4d6978656453746f726167654b6579000108085631040000012c4163636f756e74496433320000000856320400090101444c696e6b61626c654163636f756e74496400010000b1060c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144572726f72040454000114204e6f74466f756e640000047c546865206173736f63696174696f6e20646f6573206e6f742065786973742e344e6f74417574686f72697a65640001081101546865206f726967696e20776173206e6f7420616c6c6f77656420746f206d616e61676520746865206173736f63696174696f6e206265747765656e20746865204449444c616e6420746865206163636f756e742049442e344f7574646174656450726f6f66000204b454686520737570706c6965642070726f6f66206f66206f776e65727368697020776173206f757464617465642e44496e73756666696369656e7446756e64730003081101546865206163636f756e742068617320696e73756666696369656e742066756e647320616e642063616e277420706179207468652066656573206f72207265736572766530746865206465706f7369742e244d6967726174696f6e00040c010154686520436f6e6e65637465644163636f756e747320616e6420436f6e6e6563746564446964732073746f7261676520617265206f7574206f662073796e632e0011014e4f54453a20746869732077696c6c206f6e6c792062652072657475726e6564206966207468652073746f726167652068617320696e636f6e73697374656e636965732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b5060c4470616c6c65745f776562335f6e616d657324776562335f6e616d6544576562334e616d654f776e6572736869700c144f776e657201001c4465706f7369740151062c426c6f636b4e756d6265720110000c01146f776e65720001144f776e6572000128636c61696d65645f617410012c426c6f636b4e756d62657200011c6465706f7369745106011c4465706f7369740000b9060c4470616c6c65745f776562335f6e616d65731870616c6c6574144572726f7204045400013044496e73756666696369656e7446756e64730000040d01546865207478207375626d697474657220646f6573206e6f74206861766520656e6f7567682066756e647320746f2070617920666f7220746865206465706f7369742e34416c7265616479457869737473000104dc54686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c7920636c61696d65642e204e6f74466f756e640002048854686520737065636966696564206e616d6520646f6573206e6f742065786973742e484f776e6572416c7265616479457869737473000304a054686520737065636966696564206f776e657220616c7265616479206f776e732061206e616d652e344f776e65724e6f74466f756e64000404ac54686520737065636966696564206f776e657220646f6573206e6f74206f776e20616e79206e616d65732e1842616e6e6564000508ec54686520737065636966696564206e616d6520686173206265656e2062616e6e656420616e642063616e6e6f7420626520696e746572616374656414776974682e244e6f7442616e6e6564000604ac54686520737065636966696564206e616d65206973206e6f742063757272656e746c792062616e6e65642e34416c726561647942616e6e6564000704d854686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c792062616e6e65642e344e6f74417574686f72697a6564000804cc546865206163746f722063616e6e6f7420706572666f726d65642074686520737065636966696564206f7065726174696f6e2e20546f6f53686f7274000904a841206e616d65207468617420697320746f6f2073686f7274206973206265696e6720636c61696d65642e1c546f6f4c6f6e67000a04a441206e616d65207468617420697320746f6f206c6f6e67206973206265696e6720636c61696d65642e40496e76616c6964436861726163746572000b04f441206e616d65207468617420636f6e7461696e73206e6f7420616c6c6f7765642063686172616374657273206973206265696e6720636c61696d65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909bd060000040825012c00c1060c487075626c69635f63726564656e7469616c732c63726564656e7469616c733c43726564656e7469616c456e7472791824435479706548617368012c20417474657374657201002c426c6f636b4e756d6265720110244163636f756e74496401001c42616c616e636501183c417574686f72697a6174696f6e496401f40018012863747970655f686173682c01244354797065486173680001206174746573746572000120417474657374657200011c7265766f6b6564a40110626f6f6c000130626c6f636b5f6e756d62657210012c426c6f636b4e756d62657200011c6465706f7369745106016c4465706f7369743c4163636f756e7449642c2042616c616e63653e000140617574686f72697a6174696f6e5f6964f0015c4f7074696f6e3c417574686f72697a6174696f6e49643e0000c5060c487075626c69635f63726564656e7469616c731870616c6c6574144572726f720404540001183c416c72656164794174746573746564000008f8412063726564656e7469616c2077697468207468652073616d6520726f6f7420686173682068617320616c72656164792069737375656420746f2074686548737065636966696564207375626a6563742e204e6f74466f756e6400010805014e6f2063726564656e7469616c2077697468207468652073706563696669656420726f6f74206861736820686173206265656e2069737375656420746f2074686548737065636966696564207375626a6563742e3c556e61626c65546f50617946656573000204d44e6f7420656e6f75676820746f6b656e7320746f2070617920666f72207468652066656573206f7220746865206465706f7369742e30496e76616c6964496e707574000304805468652063726564656e7469616c20696e70757420697320696e76616c69642e344e6f74417574686f72697a6564000404e05468652063616c6c6572206973206e6f7420617574686f72697a656420746f20706572666f726d656420746865206f7065726174696f6e2e20496e7465726e616c000508f443617463682d616c6c20666f7220616e79206f74686572206572726f727320746861742073686f756c64206e6f742068617070656e2c207965742069742468617070656e65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909c90604184f7074696f6e04045401cd060108104e6f6e6500000010536f6d650400cd060000010000cd060c4c706f6c6b61646f745f7072696d69746976657308763248557067726164655265737472696374696f6e0001041c50726573656e7400000000d1060c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f686561642c014472656c61795f636861696e3a3a4861736800016472656c61795f64697370617463685f71756575655f73697a65d5060128287533322c2075333229000140696e67726573735f6368616e6e656c73d90601885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c73d90601885665633c285061726149642c20416272696467656448726d704368616e6e656c293e0000d506000004081c1c00d906000002dd0600dd06000004089d01e10600e1060c4c706f6c6b61646f745f7072696d6974697665730876324c416272696467656448726d704368616e6e656c00001801306d61785f63617061636974791c010c7533320001386d61785f746f74616c5f73697a651c010c7533320001406d61785f6d6573736167655f73697a651c010c7533320001246d73675f636f756e741c010c753332000128746f74616c5f73697a651c010c7533320001206d71635f68656164610601304f7074696f6e3c486173683e0000e5060c4c706f6c6b61646f745f7072696d697469766573087632644162726964676564486f7374436f6e66696775726174696f6e00002401346d61785f636f64655f73697a651c010c7533320001486d61785f686561645f646174615f73697a651c010c7533320001586d61785f7570776172645f71756575655f636f756e741c010c7533320001546d61785f7570776172645f71756575655f73697a651c010c75333200015c6d61785f7570776172645f6d6573736167655f73697a651c010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e6469646174651c010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e6469646174651c010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e1c012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c61791c012c426c6f636b4e756d6265720000e906089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e000004002c012452656c6179486173680000ed06042042547265654d617008044b019d01045601e906000400f106000000f106000002f50600f506000004089d01e90600f906000002fd0600fd060860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d65737361676504084964019d0100080124726563697069656e749d01010849640001106461746130015073705f7374643a3a7665633a3a5665633c75383e000001070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041501417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e675050726f686962697465644279506f6c6b61646f740001044901506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733877696c6c696e6720746f2072756e6856616c69646174696f6e446174614e6f74417661696c61626c65000304190154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404250154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090905070000020907000907086463756d756c75735f70616c6c65745f78636d705f717565756554496e626f756e644368616e6e656c44657461696c7300000c011873656e6465729d01011850617261496400011473746174650d070130496e626f756e6453746174650001406d6573736167655f6d65746164617461110701a85665633c2852656c6179426c6f636b4e756d6265722c2058636d704d657373616765466f726d6174293e00000d07086463756d756c75735f70616c6c65745f78636d705f717565756530496e626f756e645374617465000108084f6b0000002453757370656e6465640001000011070000021507001507000004081c19070019070c48706f6c6b61646f745f70617261636861696e287072696d6974697665734458636d704d657373616765466f726d617400010c60436f6e636174656e6174656456657273696f6e656458636d0000005c436f6e636174656e61746564456e636f646564426c6f620001001c5369676e616c73000200001d07000004089d011c0021070000022507002507086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e749d0101185061726149640001147374617465290701344f7574626f756e6453746174650001347369676e616c735f6578697374a40110626f6f6c00012c66697273745f696e646578d8010c7531360001286c6173745f696e646578d8010c75313600002907086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e646564000100002d07000004089d01d8003107086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e66696744617461000018014473757370656e645f7468726573686f6c641c010c75333200013864726f705f7468726573686f6c641c010c753332000140726573756d655f7468726573686f6c641c010c7533320001407468726573686f6c645f7765696768742401185765696768740001547765696768745f72657374726963745f646563617924011857656967687400016878636d705f6d61785f696e646976696475616c5f776569676874240118576569676874000035070000040c9d011c300039070c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f72040454000114304661696c6564546f53656e640000046c4661696c656420746f2073656e642058434d206d6573736167652e3042616458636d4f726967696e0001043c4261642058434d206f726967696e2e1842616458636d000204344261642058434d20646174612e484261644f766572776569676874496e64657800030454426164206f76657277656967687420696e6465782e3c5765696768744f7665724c696d6974000404f850726f76696465642077656967687420697320706f737369626c79206e6f7420656e6f75676820746f206578656375746520746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909093d070c2870616c6c65745f78636d1870616c6c6574144572726f720404540001502c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108610154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652e2050657268617073a861206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e30496e76616c69644173736574000d0480496e76616c696420617373657420666f7220746865206f7065726174696f6e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304390154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c207573657273206f6620746865206c6f636b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090941070c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144572726f7204045400010004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909094507086063756d756c75735f70616c6c65745f646d705f717565756528436f6e6669674461746100000401386d61785f696e646976696475616c24011857656967687400004907086063756d756c75735f70616c6c65745f646d705f71756575653450616765496e6465784461746100000c0128626567696e5f757365641c012c50616765436f756e746572000120656e645f757365641c012c50616765436f756e7465720001406f7665727765696768745f636f756e7410013c4f766572776569676874496e64657800004d070000025107005107000004081c300055070c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144572726f720404540001081c556e6b6e6f776e0000048c546865206d65737361676520696e64657820676976656e20697320756e6b6e6f776e2e244f7665724c696d6974000104310154686520616d6f756e74206f662077656967687420676976656e20697320706f737369626c79206e6f7420656e6f75676820666f7220657865637574696e6720746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909095907102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301d9021043616c6c01a503245369676e617475726501ad04144578747261015d07000400300000005d07000004206107650769076d07710779077d07810700610710306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000650710306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000690710306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e040454000000006d0710306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000710710306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004007507010c45726100007507102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000790710306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400280120543a3a496e64657800007d0710306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000008107086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400c101013042616c616e63654f663c543e0000941853797374656d011853797374656d401c4163636f756e7401010402000c510100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e7400001c040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010020180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e00001c040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010405102c8000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e73696344617461010104051c300400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d626572010010200000000000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002c80000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010034040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004404001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e7401001c100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104022c7d020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000810204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100a40400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100a40400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500007502040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01890201501830426c6f636b5765696768747399026d01624fd75a00070088526a740200400102c0cd1700010700028fa54b0200d000010700e6bd4f570200f00001000002c0cd1700010700a423c0680200200101070088526a7402004001010700a2941a1d0200500002c0cd170000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468a9023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e7410206009000000000000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874b1024040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6eb5026103386b696c742d7370697269746e6574386b696c742d7370697269746e6574010000005c2b00000000000038df6acb689907609b0400000037e397fc7c91f5e401000000bc9d89904f5b923f0100000037c8bb1350a9a2a803000000f3ff14d5ab5270590300000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000dd718d5cc53262d401000000ea93e3f16f3d69620200000026609555c065660302000000a47b7d544994c99b0100000045bfba51a310b2230100000006000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e2853533538507265666978d808260014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01c502006052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100c90204000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e00000000012454696d657374616d70012454696d657374616d70080c4e6f7701001020000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100a4040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f01cd020004344d696e696d756d506572696f6410207017000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00021c496e6469636573011c496e646963657304204163636f756e74730001040210d1020400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e01d5020174041c4465706f736974184000b47cf328350000000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e01e102052042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200e502040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200f502040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e01010301780c484578697374656e7469616c4465706f736974184000a0724e18090000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b731c103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d617852657365727665731c1032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01050306485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100090340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e01000d0304000000018004604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00071041757261011041757261082c417574686f726974696573010011030400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f74010021032000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000171c53657373696f6e011c53657373696f6e1c2856616c696461746f7273010025030400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e64657801001c100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e6765640100a4040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010029030400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010035030400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050031030400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405390300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e014103018400014503164050617261636861696e5374616b696e67014050617261636861696e5374616b696e6740544d617853656c656374656443616e6469646174657301001c100000000004090120546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c6563746564206174206561636820726f756e642e14526f756e640100490350000000000000000000000000140000000000000004e82043757272656e7420726f756e64206e756d62657220616e64206e65787420726f756e64207363686564756c6564207472616e736974696f6e2e384c61737444656c65676174696f6e01010405004d03200000000000000000140d012044656c65676174696f6e20696e666f726d6174696f6e20666f7220746865206c61746573742073657373696f6e20696e20776869636820612064656c656761746f722c2064656c6567617465642e000501204974206d6170732066726f6d20616e206163636f756e7420746f20746865206e756d626572206f662064656c65676174696f6e7320696e20746865206c617374982073657373696f6e20696e2077686963682074686579202872652d2964656c6567617465642e3844656c656761746f7253746174650001040500510304000c802044656c65676174696f6e207374616b696e6720696e666f726d6174696f6e2e00cc204974206d6170732066726f6d20616e206163636f756e7420746f206974732064656c65676174696f6e2064657461696c732e3443616e646964617465506f6f6c00010405005503040010a420546865207374616b696e6720696e666f726d6174696f6e20666f7220612063616e6469646174652e00b0204974206d6170732066726f6d20616e206163636f756e7420746f2069747320696e666f726d6174696f6e2eb8204d6f72656f7665722c20697420636f756e747320746865206e756d626572206f662063616e646964617465732e5c436f756e746572466f7243616e646964617465506f6f6c01001c100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617048546f74616c436f6c6c61746f725374616b650100690380000000000000000000000000000000000000000000000000000000000000000014f420546f74616c2066756e6473206c6f636b656420746f206261636b207468652063757272656e746c792073656c656374656420636f6c6c61746f72732ed0205468652073756d206f6620616c6c20636f6c6c61746f7220616e642074686569722064656c656761746f72207374616b65732e002101204e6f74653a20546865726520617265206d6f72652066756e6473206c6f636b656420627920746869732070616c6c65742c2073696e636520746865206261636b696e6720666f720901206e6f6e20636f6c6c6174696e672063616e64696461746573206973206e6f7420696e636c7564656420696e205b546f74616c436f6c6c61746f725374616b655d2e34546f7043616e6469646174657301006d03040028e82054686520636f6c6c61746f722063616e64696461746573207769746820746865206869676865737420616d6f756e74206f66207374616b652e00190120456163682074696d6520746865207374616b65206f66206120636f6c6c61746f7220697320696e637265617365642c20697420697320636865636b65642077686574686572050120746869732070757368657320616e6f746865722063616e646964617465206f7574206f6620746865206c6973742e205768656e20746865207374616b652069732101207265647563656420686f77657665722c206974206973206e6f7420636865636b656420696620616e6f746865722063616e64696461746520686173206d6f7265207374616b652c11012073696e6365207468697320776f756c64207265717569726520697465726174696e67206f7665722074686520656e74697265205b43616e646964617465506f6f6c5d2e001501205468657265206d75737420616c77617973206265206d6f72652063616e64696461746573207468616e205b4d617853656c656374656443616e646964617465735d20736f0d012074686174206120636f6c6c61746f722063616e2064726f70206f7574206f662074686520636f6c6c61746f7220736574206279207265647563696e672074686569721c207374616b652e3c496e666c6174696f6e436f6e66696701007503c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046420496e666c6174696f6e20636f6e66696775726174696f6e2e24556e7374616b696e670101040500810304001088205468652066756e64732077616974696e6720746f20626520756e7374616b65642e001d01204974206d6170732066726f6d206163636f756e747320746f20616c6c207468652066756e64732061646472657373656420746f207468656d20696e20746865206675747572652020626c6f636b732e644d6178436f6c6c61746f7243616e6469646174655374616b65010018400000000000000000000000000000000004cc20546865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e6469646174652063616e207374616b652e4c4c617374526577617264526564756374696f6e010010200000000000000000140d0120546865207965617220696e20776869636820746865206c617374206175746f6d6174696320726564756374696f6e206f66207468652072657761726420726174657328206f636375727265642e00250120497420737461727473206174207a65726f2061742067656e6573697320616e6420696e6372656d656e7473206279206f6e6520657665727920424c4f434b535f5045525f5945415234206d616e7920626c6f636b732e38426c6f636b73417574686f726564010104050010200000000000000000080d0120546865206e756d626572206f6620617574686f72656420626c6f636b7320666f7220636f6c6c61746f72732e20497420697320757064617465642076696120746865b020606e6f74655f617574686f726020686f6f6b207768656e20617574686f72696e67206120626c6f636b202e38426c6f636b73526577617264656401010405001020000000000000000024210120546865206e756d626572206f6620626c6f636b7320666f7220776869636820726577617264732068617665206265656e20636c61696d656420627920616e20616464726573732e00190120466f7220636f6c6c61746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f7265642e2049742069732075706461746564207768656ecc20696e6372656d656e74696e6720636f6c6c61746f7220726577617264732c20656974686572207768656e2063616c6c696e67e02060696e635f636f6c6c61746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e00250120466f722064656c656761746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f726564206f662074686520636f6c6c61746f722e497420697305012075706461746564207768656e20696e6372656d656e74696e672064656c656761746f7220726577617264732c20656974686572207768656e2063616c6c696e67e42060696e635f64656c656761746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e1c5265776172647301010405001840000000000000000000000000000000000c01012054686520616363756d756c61746564207265776172647320666f7220636f6c6c61746f722063616e6469646174657320616e642064656c656761746f72732e001101204974206d6170732066726f6d206163636f756e747320746f20746865697220746f74616c20726577617264732073696e636520746865206c617374207061796f75742e34466f7263654e6577526f756e640100a404000001910301883c444d696e426c6f636b73506572526f756e6410202c0100000000000004d4204d696e696d756d206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e64732063616e206c6173742e5444656661756c74426c6f636b73506572526f756e641020580200000000000008fc2044656661756c74206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e6473206c6173742c2061732073657420696e207468655c2067656e6573697320636f6e66696775726174696f6e2e345374616b654475726174696f6e1020e0c40000000000000c0501204e756d626572206f6620626c6f636b7320666f7220776869636820756e7374616b65642062616c616e63652077696c6c207374696c6c206265206c6f636b6564f0206265666f72652069742063616e20626520756e6c6f636b6564206279206163746976656c792063616c6c696e67207468652065787472696e7369634c2060756e6c6f636b5f756e7374616b6564602e3845786974517565756544656c61791c1002000000080901204e756d626572206f6620726f756e6473206120636f6c6c61746f722068617320746f207374617920616374697665206166746572207375626d697474696e672061c4207265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e304d696e436f6c6c61746f72731c1010000000080d01204d696e696d756d206e756d626572206f6620636f6c6c61746f72732073656c65637465642066726f6d2074686520736574206f662063616e64696461746573206174602065766572792076616c69646174696f6e20726f756e642e504d696e5265717569726564436f6c6c61746f72731c1004000000081101204d696e696d756d206e756d626572206f6620636f6c6c61746f72732077686963682063616e6e6f74206c6561766520746865206e6574776f726b2069662074686572653c20617265206e6f206f74686572732e584d617844656c65676174696f6e73506572526f756e641c1001000000140101204d6178696d756d206e756d626572206f662064656c65676174696f6e732077686963682063616e206265206d6164652077697468696e207468652073616d651c20726f756e642e000d01204e4f54453a20546f2070726576656e742072652d64656c65676174696f6e2d7265776172642061747461636b732c2077652073686f756c64206b65657020746869732c20746f206265206f6e652e604d617844656c656761746f7273506572436f6c6c61746f721c102300000004e4204d6178696d756d206e756d626572206f662064656c656761746f727320612073696e676c6520636f6c6c61746f722063616e20686176652e404d6178546f7043616e646964617465731c104b00000004a0204d6178696d756d2073697a65206f662074686520746f702063616e64696461746573207365742e404d696e436f6c6c61746f725374616b6518400000e8890423c78a0000000000000000080901204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520656c65637465642061732076616c696461746f723420666f72206120726f756e642e644d696e436f6c6c61746f7243616e6469646174655374616b6518400000e8890423c78a0000000000000000080501204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520616464656420746f2074686520736574206f66302063616e646964617465732e444d696e44656c656761746f725374616b651840000082dfe40d4700000000000000000004f8204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f206265636f6d6520612064656c656761746f722e484d6178556e7374616b6552657175657374731c100a00000028e8204d6178206e756d626572206f6620636f6e63757272656e742061637469766520756e7374616b696e67207265717565737473206265666f72652c20756e6c6f636b696e672e001501204e4f54453a20546f2070726f7465637420616761696e737420697272656d6f766162696c697479206f6620612063616e646964617465206f722064656c656761746f722cf4207765206f6e6c7920616c6c6f7720666f72204d6178556e7374616b655265717565737473202d2031206d616e79206d616e75616c20756e7374616b6501012072657175657374732e20546865206c617374206f6e6520736572766573206173206120706c616365686f6c64657220666f7220746865206361736573206f66f02063616c6c696e672065697468657220606b69636b5f64656c656761746f72602c20666f7263655f72656d6f76655f63616e64696461746560206f7209012060657865637574655f6c656176655f63616e64696461746573602e204f74686572776973652c2061207573657220636f756c64206d6178206f75742074686569720d0120756e7374616b6520726571756573747320616e642070726576656e74207468656d73656c7665732066726f6d206265696e67206b69636b65642066726f6d20746865f020736574206f662063616e646964617465732f64656c656761746f727320756e74696c207468657920756e6c6f636b2074686569722066756e64732e484e6574776f726b5265776172645374617274102048a3c800000000000c110120546865207374617274696e6720626c6f636b206e756d62657220666f7220746865206e6574776f726b20726577617264732e204f6e6365207468652063757272656e74090120626c6f636b206e756d626572206578636565647320746869732073746172742c207468652062656e65666963696172792077696c6c2072656365697665207468658420636f6e666967757265642072657761726420696e206561636820626c6f636b2e444e6574776f726b526577617264526174658c2000008a5d784563010c0d0120546865207261746520696e2070657263656e7420666f7220746865206e6574776f726b207265776172647320776869636820617265206261736564206f6e207468650901206d6178696d756d206e756d626572206f6620636f6c6c61746f727320616e6420746865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e1c207374616b652e0195031528417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000141c41757261457874011c41757261457874042c417574686f72697469657301001103040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c790120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c20616c77617973f0206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e00000000182444656d6f6372616379012444656d6f63726163792c3c5075626c696350726f70436f756e7401001c100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f707301009903040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f66000104051c5d0504000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e7401001c100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b656401001c100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f66000104051c650504000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f6601010405007105e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100a40400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c00008905040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c697374000104062c8d0504000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e73010104062ca40400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e01a9030190303c456e6163746d656e74506572696f641020201c00000000000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f641020e0c400000000000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f641020e0c400000000000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f641020e0c4000000000000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400080c6a47e8d0300000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f776564a404010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f641020840300000000000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f641020e0c400000000000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f7465731c106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c731c1064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f736974731c1064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c69737465641c106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e0191051e1c436f756e63696c011c436f756e63696c182450726f706f73616c7301009505040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062ca503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e67000104062c9905040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e7401001c100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010025030400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01b50301a000019d051f48546563686e6963616c436f6d6d69747465650148546563686e6963616c436f6d6d6974746565182450726f706f73616c730100a105040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062ca503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e67000104062c9905040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e7401001c100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010025030400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01c50301b00001a505204c546563686e6963616c4d656d62657273686970014c546563686e6963616c4d656d62657273686970081c4d656d626572730100a905040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01c90301b40001ad052220547265617375727901205472656173757279103450726f706f73616c436f756e7401001c100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c73000104051cb1050400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c730100b505040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e01cd0301b81c3050726f706f73616c426f6e64b9051050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d1840000082dfe40d47000000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756dbd050400044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f641020c0a8000000000000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726eb90510000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c65744964c105206b696c742f7473790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c731c10640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e01c505231c5574696c6974790001d10301bc044c626174636865645f63616c6c735f6c696d69741c10aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01c905281c56657374696e67011c56657374696e67081c56657374696e670001040200cd05040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100d50504000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01f90301c008444d696e5665737465645472616e73666572184000407a10f35a0000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c65731c101c0000000001d90529245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e64610101040510dd050400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b75700001040504c8040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01010401c408344d6178696d756d57656967687424280700a0db215d0200000104290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b1c1032000000041d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e01ed052a1450726f7879011450726f7879081c50726f786965730101040500f1054400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500010644000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01090401d0184050726f78794465706f7369744261736518400020f7a54b330000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f72184000f4a92b80010000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f786965731c100a00000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e671c100a00000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f7369744261736518400020f7a54b330000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72184000e8535700030000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e0111062b20507265696d6167650120507265696d6167650824537461747573466f72000104062c15060400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f72000104062106250604000001110401dc000129062c38546970734d656d626572736869700138546970734d656d62657273686970081c4d656d626572730100a905040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01150401e000012d062d1054697073011054697073081054697073000104052c310604000c650120546970734d6170207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e3d012054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c7265616479802067756172616e7465656420746f20626520612073656375726520686173682e1c526561736f6e73000104062c3004000849012053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e610120696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e01190401e4144c4d6178696d756d526561736f6e4c656e6774681c10004000000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756548446174614465706f73697450657242797465184000743ba40b00000000000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e30546970436f756e74646f776e1020201c0000000000000445012054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e3454697046696e646572734665653d060414043501205468652070657263656e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e505469705265706f72744465706f73697442617365184000f45628fa320000000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e0141062e144374797065011443747970650418437479706573000104022c450604001060204354797065732073746f726564206f6e20636861696e2e001901204974206d6170732066726f6d2061204354797065206861736820746f206974732063726561746f7220616e6420626c6f636b206e756d62657220696e207768696368206974342077617320637265617465642e011d0401e8000149063d2c4174746573746174696f6e012c4174746573746174696f6e08304174746573746174696f6e73000104022c4d0604000c78204174746573746174696f6e732073746f726564206f6e20636861696e2e00cc204974206d6170732066726f6d206120636c61696d206861736820746f207468652066756c6c206174746573746174696f6e2e5045787465726e616c4174746573746174696f6e7301010805025506a404000ca02044656c656761746564206174746573746174696f6e732073746f726564206f6e20636861696e2e00e8204974206d6170732066726f6d20612064656c65676174696f6e20494420746f206120766563746f72206f6620636c61696d206861736865732e01210401ec081c4465706f7369741840001cc9dd006e0000000000000000000004e420546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720616e206174746573746174696f6e2e604d617844656c6567617465644174746573746174696f6e731c10e803000008090120546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732077686963682063616e206265206d61646520627954207468652073616d652064656c65676174696f6e2e0159063e2844656c65676174696f6e012844656c65676174696f6e083c44656c65676174696f6e4e6f646573000104022c5d0604000c882044656c65676174696f6e206e6f6465732073746f726564206f6e20636861696e2e00b0204974206d6170732066726f6d2061206e6f646520494420746f20746865206e6f64652064657461696c732e5444656c65676174696f6e4869657261726368696573000104022c710604000ca02044656c65676174696f6e2068696572617263686965732073746f726564206f6e20636861696e2e00dc204974206d61707320666f7220612028726f6f7429206e6f646520494420746f20746865206869657261726368792064657461696c732e01350401f8181c4465706f73697418400080c6a47e8d0300000000000000000004dc20546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720612064656c65676174696f6e2e584d61785369676e6174757265427974654c656e677468d808400000384d61785265766f636174696f6e731c1005000000047c204d6178696d756d206e756d626572206f66207265766f636174696f6e732e2c4d617852656d6f76616c731c100500000004f4204d6178696d756d206e756d626572206f662072656d6f76616c732e2053686f756c642062652073616d65206173204d61785265766f636174696f6e733c4d6178506172656e74436865636b731c1005000000080d01204d6178696d756d206e756d626572206f6620757077617264732074726176657273616c73206f66207468652064656c65676174696f6e20747265652066726f6d2061f0206e6f646520746f2074686520726f6f7420616e64207468757320746865206465707468206f66207468652064656c65676174696f6e20747265652e2c4d61784368696c6472656e1c10e80300000c0d01204d6178696d756d206e756d626572206f6620616c6c206368696c6472656e20666f7220612064656c65676174696f6e206e6f64652e20466f7220612062696e617279fc20747265652c20746869732073686f756c6420626520747769636520746865206d6178696d756d206465707468206f662074686520747265652c20692e652e5c206032205e204d6178506172656e74436865636b73602e0175063f0c446964010c446964100c4469640001040200790604000c5820444944732073746f726564206f6e20636861696e2e00c8204974206d6170732066726f6d206120444944206964656e74696669657220746f20746865204449442064657461696c732e4053657276696365456e64706f696e747300010805029906810404000ca0205365727669636520656e64706f696e7473206173736f636961746564207769746820444944732e000901204974206d6170732066726f6d2028444944206964656e7469666965722c20736572766963652049442920746f2074686520736572766963652064657461696c732e44446964456e64706f696e7473436f756e7401010402001c10000000000cac20436f756e746572206f66207365727669636520656e64706f696e747320666f722065616368204449442e00cc204974206d6170732066726f6d2028444944206964656e7469666965722920746f20612033322d62697420636f756e7465722e30446964426c61636b6c6973740001040200ac0400141d012054686520736574206f66204449447320746861742068617665206265656e2064656c6574656420616e642063616e6e6f74207468657265666f726520626520637265617465647020616761696e20666f7220736563757269747920726561736f6e732e002101204974206d6170732066726f6d206120444944206964656e74696669657220746f206120756e6974207475706c652c20666f72207468652073616b65206f6620747261636b696e674420444944206964656e746966696572732e015104010101301c4465706f736974184000983ea62c22070000000000000000000c0d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974110120746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f7369742063616e2062658c207265636c61696d6564207768656e20746865204449442069732064656c657465642e0c466565184000203d88792d000000000000000000000c09012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f7220656163682044494420617320612066656520746f0d0120696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206665652077696c6c206e6f74206765748820726566756e646564207768656e20746865204449442069732064656c657465642e4c4d61785075626c69634b6579735065724469641c10140000000c1101204d6178696d756d206e756d626572206f6620746f74616c207075626c6963206b6579732077686963682063616e2062652073746f7265642070657220444944206b6579d8206964656e7469666965722e205468697320696e636c7564657320746865206f6e65732063757272656e746c79207573656420666f72f02061757468656e7469636174696f6e2c206b65792061677265656d656e742c206174746573746174696f6e2c20616e642064656c65676174696f6e2e584d61784e65774b657941677265656d656e744b6579731c100a000000081501204d6178696d756d206e756d626572206f66206b65792061677265656d656e74206b65797320746861742063616e20626520616464656420696e2061206372656174696f6e2c206f7065726174696f6e2e604d6178546f74616c4b657941677265656d656e744b6579731c1013000000101101204d6178696d756d206e756d626572206f6620746f74616c206b65792061677265656d656e74206b65797320746861742063616e2062652073746f72656420666f7220613420444944207375626a6563742e00c42053686f756c642062652067726561746572207468616e20604d61784e65774b657941677265656d656e744b657973602e4c4d6178426c6f636b73547856616c696469747910202c0100000000000008ec20546865206d6178696d756d206e756d626572206f6620626c6f636b732061204449442d617574686f72697a6564206f7065726174696f6e2069739420636f6e736964657265642076616c696420616674657220697473206372656174696f6e2e644d61784e756d6265724f6653657276696365735065724469641c101900000004fc20546865206d6178696d756d206e756d626572206f6620736572766963657320746861742063616e2062652073746f72656420756e6465722061204449442e484d61785365727669636549644c656e6774681c1032000000049020546865206d6178696d756d206c656e677468206f66206120736572766963652049442e504d617853657276696365547970654c656e6774681c103200000004c820546865206d6178696d756d206c656e677468206f66206120736572766963652074797065206465736372697074696f6e2e684d61784e756d6265724f665479706573506572536572766963651c100100000004090120546865206d6178696d756d206e756d626572206f662061207479706573206465736372697074696f6e20666f722061207365727669636520656e64706f696e742e4c4d61785365727669636555726c4c656e6774681c10c8000000049420546865206d6178696d756d206c656e677468206f66206120736572766963652055524c2e644d61784e756d6265724f6655726c73506572536572766963651c100100000004d420546865206d6178696d756d206e756d626572206f6620612055524c7320666f722061207365727669636520656e64706f696e742e019d064024496e666c6174696f6e000000084c496e697469616c506572696f644c656e677468102048a3c800000000000c050120546865206c656e677468206f662074686520696e697469616c20706572696f6420696e2077686963682074686520636f6e7374616e74207265776172642069731101206d696e7465642e204f6e6365207468652063757272656e7420626c6f636b206578636565647320746869732c207265776172647320617265206e6f206675727468657220206973737565642e4c496e697469616c506572696f64526577617264184036f539fdaeb30200000000000000000008fc2054686520616d6f756e74206f66206e65776c792069737375656420746f6b656e732070657220626c6f636b20647572696e672074686520696e697469616c2020706572696f642e0042244469644c6f6f6b757001244469644c6f6f6b75700c34436f6e6e656374656444696473000104020901a106040004a8204d617070696e672066726f6d206163636f756e74206964656e7469666965727320746f20444944732e44436f6e6e65637465644163636f756e74730001080202a506ac04000cbc204d617070696e672066726f6d2028444944202b206163636f756e74206964656e74696669657229202d3e2028292e0d012054686520656d707479207475706c65206973207573656420617320612073656e74696e656c2076616c756520746f2073696d706c7920696e64696361746520746865982070726573656e6365206f66206120676976656e207475706c6520696e20746865206d61702e4c4d6967726174696f6e537461746553746f72650100a90604010001a504010501041c4465706f736974184000c0afd69136000000000000000000000c0d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974110120746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f7369742063616e2062658c207265636c61696d6564207768656e20746865204449442069732064656c657465642e01b1064324576562334e616d65730124576562334e616d65730c144f776e6572000104021901b50604000488204d6170206f66206e616d65202d3e206f776e6572736869702064657461696c732e144e616d65730001040200190104000458204d6170206f66206f776e6572202d3e206e616d652e1842616e6e6564000104021901ac04000c4c204d6170206f66206e616d65202d3e2028292e00e02049662061206e616d65206b65792069732070726573656e742c20746865206e616d652069732063757272656e746c792062616e6e65642e01b5040115010c1c4465706f736974184000d450a85d6b0000000000000000000004bc2054686520616d6f756e74206f66204b494c5420746f206465706f73697420746f20636c61696d2061206e616d652e344d696e4e616d654c656e6774681c1003000000048820546865206d696e20656e636f646564206c656e677468206f662061206e616d652e344d61784e616d654c656e6774681c1020000000048820546865206d617820656e636f646564206c656e677468206f662061206e616d652e01b90644445075626c696343726564656e7469616c7301445075626c696343726564656e7469616c73082c43726564656e7469616c730001080502bd06c10604000cc020546865206d6170206f66207075626c69632063726564656e7469616c7320616c72656164792061747465737465642ef0204974206d6170732066726f6d206120287375626a656374206964202b2063726564656e7469616c20696429202d3e20746865206372656174696f6e6c2064657461696c73206f66207468652063726564656e7469616c2e4843726564656e7469616c5375626a65637473000104022c250104001025012041207265766572736520696e646578206d617070696e672066726f6d2063726564656e7469616c20494420746f20746865207375626a656374207468652063726564656e7469616c3c207761732069737375656420746f2e001901204974206974207573656420746f20706572666f726d20656666696369656e74206c6f6f6b7570206f662063726564656e7469616c7320676976656e2074686569722049442e01b9040121010c1c4465706f7369741840005c6a51fc45000000000000000000000411012054686520616d6f756e74206f6620746f6b656e7320746f2072657365727665207768656e20617474657374696e672061207075626c69632063726564656e7469616c2e584d6178456e636f646564436c61696d734c656e6774681c10a0860100040d0120546865206d6178696d756d206c656e67746820696e206279746573206f662074686520656e636f64656420636c61696d73206f6620612063726564656e7469616c2e484d61785375626a65637449644c656e6774681c100c01000008e820546865206d6178696d756d206c656e67746820696e206279746573206f6620746865207261772063726564656e7469616c207375626a65637430206964656e7469666965722e01c506453c50617261636861696e53797374656d013c50617261636861696e53797374656d545450656e64696e6756616c69646174696f6e436f64650100300400187d0120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f206265206170706c6965642e00c10120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f766572777269746520746865205b603a636f6465605d5b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455dad012077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f63657373207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e000501205b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d3a2073705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f4445444e657756616c69646174696f6e436f64650000300400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000d10404000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f64650100a4040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d62657201001c1000000000041d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e60557067726164655265737472696374696f6e5369676e616c0100c90604001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f660000d904040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000d10604001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e0000e5060400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d7163486561640100e90680000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d716348656164730100ed06040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301001c10000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01001c10000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d657373616765730100f90604000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d657373616765730100950204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d6573736167657301009502040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e84416e6e6f756e63656448726d704d6573736167657350657243616e64696461746501001c100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000240400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000240400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e44417574686f72697a65645570677261646500002c040004b820546865206e65787420617574686f72697a656420757067726164652c206966207468657265206973206f6e652e60437573746f6d56616c69646174696f6e486561644461746100003004000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00190120536565205b6050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f64617461605d20666f72206d6f726520696e666f726d6174696f6e2e01c90401910100010107503450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e496401009d0110640000000000000000512458636d705175657565012458636d7051756575652844496e626f756e6458636d70537461747573010005070400049420537461747573206f662074686520696e626f756e642058434d50206368616e6e656c732e4c496e626f756e6458636d704d6573736167657301010802051d0730040004190120496e626f756e64206167677265676174652058434d50206d657373616765732e2049742063616e206f6e6c79206265206f6e6520706572205061726149642f626c6f636b2e484f7574626f756e6458636d70537461747573010021070400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d6573736167657301010802052d0730040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d65737361676573010104029d0130040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e6669670100310774020000000500000001000000821a06000008000700c817a804020004000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e284f76657277656967687400010405103507040010050120546865206d657373616765732074686174206578636565646564206d617820696e646976696475616c206d65737361676520776569676874206275646765742e003901205468657365206d657373616765207374617920696e20746869732073746f72616765206d617020756e74696c207468657920617265206d616e75616c6c79206469737061746368656420766961582060736572766963655f6f766572776569676874602e50436f756e746572466f724f76657277656967687401001c100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c4f766572776569676874436f756e7401001020000000000000000008690120546865206e756d626572206f66206f766572776569676874206d657373616765732065766572207265636f7264656420696e20604f766572776569676874602e20416c736f20646f75626c657320617320746865206e6578748420617661696c61626c652066726565206f76657277656967687420696e6465782e38517565756553757370656e6465640100a404000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e01fd0401950100013907522c506f6c6b61646f7458636d0001010501a10100013d07532843756d756c757358636d0000016d02000141075420446d7051756575650120446d7051756575651434436f6e66696775726174696f6e01004507280700e40b540202000400044c2054686520636f6e66696775726174696f6e2e2450616765496e646578010049074000000000000000000000000000000000044020546865207061676520696e6465782e145061676573010104021c4d0704000444205468652071756575652070616765732e284f766572776569676874000104021051070400046420546865206f766572776569676874206d657373616765732e50436f756e746572466f724f76657277656967687401001c100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617001550501710200015507555907042048436865636b4e6f6e5a65726f53656e6465726107ac40436865636b5370656356657273696f6e65071c38436865636b547856657273696f6e69071c30436865636b47656e657369736d072c38436865636b4d6f7274616c69747971072c28436865636b4e6f6e63657907ac2c436865636b5765696768747d07ac604368617267655472616e73616374696f6e5061796d656e748107ac3104"} \ No newline at end of file diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index a6dc80f8a..d630366d8 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.0-11", + "version": "0.32.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/src/interfaces/augment-api-consts.ts b/packages/augment-api/src/interfaces/augment-api-consts.ts index a8d9f67d7..b3fba9062 100644 --- a/packages/augment-api/src/interfaces/augment-api-consts.ts +++ b/packages/augment-api/src/interfaces/augment-api-consts.ts @@ -25,14 +25,6 @@ declare module '@polkadot/api-base/types/consts' { **/ maxDelegatedAttestations: u32 & AugmentedConst; }; - authorship: { - /** - * The number of blocks back we should accept uncles. - * This means that we will deal with uncle-parents that are - * `UncleGenerations + 1` before `now`. - **/ - uncleGenerations: u64 & AugmentedConst; - }; balances: { /** * The minimum amount required to keep an account open. diff --git a/packages/augment-api/src/interfaces/augment-api-errors.ts b/packages/augment-api/src/interfaces/augment-api-errors.ts index 2d8e88203..93a87cc40 100644 --- a/packages/augment-api/src/interfaces/augment-api-errors.ts +++ b/packages/augment-api/src/interfaces/augment-api-errors.ts @@ -21,10 +21,6 @@ declare module '@polkadot/api-base/types/errors' { * The attestation has already been revoked. **/ AlreadyRevoked: AugmentedError; - /** - * No attestation on chain matching the claim hash. - **/ - AttestationNotFound: AugmentedError; /** * The attestation CType does not match the CType specified in the * delegation hierarchy root. @@ -39,37 +35,11 @@ declare module '@polkadot/api-base/types/errors' { /** * The call origin is not authorized to change the attestation. **/ - Unauthorized: AugmentedError; - }; - authorship: { - /** - * The uncle is genesis. - **/ - GenesisUncle: AugmentedError; - /** - * The uncle parent not in the chain. - **/ - InvalidUncleParent: AugmentedError; - /** - * The uncle isn't recent enough to be included. - **/ - OldUncle: AugmentedError; - /** - * The uncle is too high in chain. - **/ - TooHighUncle: AugmentedError; - /** - * Too many uncles. - **/ - TooManyUncles: AugmentedError; - /** - * The uncle is already included. - **/ - UncleAlreadyIncluded: AugmentedError; + NotAuthorized: AugmentedError; /** - * Uncles already set in the block. + * No attestation on chain matching the claim hash. **/ - UnclesAlreadySet: AugmentedError; + NotFound: AugmentedError; }; balances: { /** @@ -151,11 +121,11 @@ declare module '@polkadot/api-base/types/errors' { /** * The CType already exists. **/ - CTypeAlreadyExists: AugmentedError; + AlreadyExists: AugmentedError; /** * There is no CType with the given hash. **/ - CTypeNotFound: AugmentedError; + NotFound: AugmentedError; /** * The paying account was unable to pay the fees for creating a ctype. **/ @@ -201,7 +171,7 @@ declare module '@polkadot/api-base/types/errors' { /** * An error that is not supposed to take place, yet it happened. **/ - InternalError: AugmentedError; + Internal: AugmentedError; /** * The delegate's signature for the delegation creation operation is * invalid. @@ -355,26 +325,22 @@ declare module '@polkadot/api-base/types/errors' { WrongUpperBound: AugmentedError; }; did: { - /** - * The DID call was submitted by the wrong account - **/ - BadDidOrigin: AugmentedError; /** * The DID has already been previously deleted. **/ - DidAlreadyDeleted: AugmentedError; + AlreadyDeleted: AugmentedError; /** * The DID with the given identifier is already present on chain. **/ - DidAlreadyPresent: AugmentedError; + AlreadyExists: AugmentedError; /** - * No DID with the given identifier is present on chain. + * The DID call was submitted by the wrong account **/ - DidNotPresent: AugmentedError; + BadDidOrigin: AugmentedError; /** * An error that is not supposed to take place, yet it happened. **/ - InternalError: AugmentedError; + Internal: AugmentedError; /** * The call had parameters that conflicted with each other * or were invalid. @@ -398,15 +364,20 @@ declare module '@polkadot/api-base/types/errors' { * key expects. **/ InvalidSignatureFormat: AugmentedError; + /** + * The maximum number of key agreements has been reached for the DID + * subject. + **/ + MaxKeyAgreementKeysExceeded: AugmentedError; /** * A number of new key agreement keys greater than the maximum allowed * has been provided. **/ - MaxKeyAgreementKeysLimitExceeded: AugmentedError; + MaxNewKeyAgreementKeysLimitExceeded: AugmentedError; /** * The maximum number of service endpoints for a DID has been exceeded. **/ - MaxNumberOfServicesPerDidExceeded: AugmentedError; + MaxNumberOfServicesExceeded: AugmentedError; /** * The maximum number of types for a service endpoint has been * exceeded. @@ -420,7 +391,7 @@ declare module '@polkadot/api-base/types/errors' { * The maximum number of public keys for this DID key identifier has * been reached. **/ - MaxPublicKeysPerDidExceeded: AugmentedError; + MaxPublicKeysExceeded: AugmentedError; /** * The service endpoint ID exceeded the maximum allowed length. **/ @@ -436,10 +407,14 @@ declare module '@polkadot/api-base/types/errors' { **/ MaxServiceUrlLengthExceeded: AugmentedError; /** - * The maximum number of key agreements has been reached for the DID - * subject. + * The number of service endpoints stored under the DID is larger than + * the number of endpoints to delete. **/ - MaxTotalKeyAgreementKeysExceeded: AugmentedError; + MaxStoredEndpointsCountExceeded: AugmentedError; + /** + * No DID with the given identifier is present on chain. + **/ + NotFound: AugmentedError; /** * Only the owner of the deposit can reclaim its reserved balance. **/ @@ -447,16 +422,11 @@ declare module '@polkadot/api-base/types/errors' { /** * A service with the provided ID is already present for the given DID. **/ - ServiceAlreadyPresent: AugmentedError; + ServiceAlreadyExists: AugmentedError; /** * A service with the provided ID is not present under the given DID. **/ - ServiceNotPresent: AugmentedError; - /** - * The number of service endpoints stored under the DID is larger than - * the number of endpoints to delete. - **/ - StoredEndpointsCountTooLarge: AugmentedError; + ServiceNotFound: AugmentedError; /** * The block number provided in a DID-authorized operation is invalid. **/ @@ -473,23 +443,29 @@ declare module '@polkadot/api-base/types/errors' { * One or more verification keys referenced are not stored in the set * of verification keys. **/ - VerificationKeyNotPresent: AugmentedError; + VerificationKeyNotFound: AugmentedError; }; didLookup: { - /** - * The association does not exist. - **/ - AssociationNotFound: AugmentedError; /** * The account has insufficient funds and can't pay the fees or reserve * the deposit. **/ InsufficientFunds: AugmentedError; + /** + * The ConnectedAccounts and ConnectedDids storage are out of sync. + * + * NOTE: this will only be returned if the storage has inconsistencies. + **/ + Migration: AugmentedError; /** * The origin was not allowed to manage the association between the DID * and the account ID. **/ NotAuthorized: AugmentedError; + /** + * The association does not exist. + **/ + NotFound: AugmentedError; /** * The supplied proof of ownership was outdated. **/ @@ -717,6 +693,10 @@ declare module '@polkadot/api-base/types/errors' { ValidationDataNotAvailable: AugmentedError; }; polkadotXcm: { + /** + * The given account is not an identifiable sovereign account for any location. + **/ + AccountNotSovereign: AugmentedError; /** * The location is invalid since it already has a subscription from us. **/ @@ -742,14 +722,34 @@ declare module '@polkadot/api-base/types/errors' { * The assets to be sent are empty. **/ Empty: AugmentedError; + /** + * The operation required fees to be paid which the initiator could not meet. + **/ + FeesNotMet: AugmentedError; /** * The message execution fails the filter. **/ Filtered: AugmentedError; + /** + * The unlock operation cannot succeed because there are still users of the lock. + **/ + InUse: AugmentedError; + /** + * Invalid asset for the operation. + **/ + InvalidAsset: AugmentedError; /** * Origin is invalid for sending. **/ InvalidOrigin: AugmentedError; + /** + * A remote lock with the corresponding data could not be found. + **/ + LockNotFound: AugmentedError; + /** + * The owner does not own (all) of the asset that they wish to do the operation on. + **/ + LowBalance: AugmentedError; /** * The referenced subscription could not be found. **/ @@ -763,6 +763,10 @@ declare module '@polkadot/api-base/types/errors' { * Too many assets have been attempted for transfer. **/ TooManyAssets: AugmentedError; + /** + * The asset owner has too many locks on the asset. + **/ + TooManyLocks: AugmentedError; /** * The desired destination was unreachable, generally because there is a no way of routing * to it. @@ -838,29 +842,29 @@ declare module '@polkadot/api-base/types/errors' { * A credential with the same root hash has already issued to the * specified subject. **/ - CredentialAlreadyIssued: AugmentedError; - /** - * No credential with the specified root hash has been issued to the - * specified subject. - **/ - CredentialNotFound: AugmentedError; + AlreadyAttested: AugmentedError; /** * Catch-all for any other errors that should not happen, yet it * happened. **/ - InternalError: AugmentedError; + Internal: AugmentedError; /** * The credential input is invalid. **/ InvalidInput: AugmentedError; /** - * Not enough tokens to pay for the fees or the deposit. + * The caller is not authorized to performed the operation. **/ - UnableToPayFees: AugmentedError; + NotAuthorized: AugmentedError; /** - * The caller is not authorized to performed the operation. + * No credential with the specified root hash has been issued to the + * specified subject. **/ - Unauthorized: AugmentedError; + NotFound: AugmentedError; + /** + * Not enough tokens to pay for the fees or the deposit. + **/ + UnableToPayFees: AugmentedError; }; scheduler: { /** @@ -1086,58 +1090,54 @@ declare module '@polkadot/api-base/types/errors' { }; web3Names: { /** - * The tx submitter does not have enough funds to pay for the deposit. - **/ - InsufficientFunds: AugmentedError; - /** - * A name that contains not allowed characters is being claimed. + * The specified name has already been previously banned. **/ - InvalidWeb3NameCharacter: AugmentedError; + AlreadyBanned: AugmentedError; /** - * The actor cannot performed the specified operation. + * The specified name has already been previously claimed. **/ - NotAuthorized: AugmentedError; + AlreadyExists: AugmentedError; /** - * The specified owner already owns a name. + * The specified name has been banned and cannot be interacted + * with. **/ - OwnerAlreadyExists: AugmentedError; + Banned: AugmentedError; /** - * The specified owner does not own any names. + * The tx submitter does not have enough funds to pay for the deposit. **/ - OwnerNotFound: AugmentedError; + InsufficientFunds: AugmentedError; /** - * The origin was not authorized to perform that action + * A name that contains not allowed characters is being claimed. **/ - Unauthorized: AugmentedError; + InvalidCharacter: AugmentedError; /** - * The specified name has already been previously banned. + * The actor cannot performed the specified operation. **/ - Web3NameAlreadyBanned: AugmentedError; + NotAuthorized: AugmentedError; /** - * The specified name has already been previously claimed. + * The specified name is not currently banned. **/ - Web3NameAlreadyClaimed: AugmentedError; + NotBanned: AugmentedError; /** - * The specified name has been banned and cannot be interacted - * with. + * The specified name does not exist. **/ - Web3NameBanned: AugmentedError; + NotFound: AugmentedError; /** - * The specified name is not currently banned. + * The specified owner already owns a name. **/ - Web3NameNotBanned: AugmentedError; + OwnerAlreadyExists: AugmentedError; /** - * The specified name does not exist. + * The specified owner does not own any names. **/ - Web3NameNotFound: AugmentedError; + OwnerNotFound: AugmentedError; /** * A name that is too long is being claimed. **/ - Web3NameTooLong: AugmentedError; + TooLong: AugmentedError; /** * A name that is too short is being claimed. **/ - Web3NameTooShort: AugmentedError; + TooShort: AugmentedError; }; xcmpQueue: { /** diff --git a/packages/augment-api/src/interfaces/augment-api-events.ts b/packages/augment-api/src/interfaces/augment-api-events.ts index 62202db54..e87878e06 100644 --- a/packages/augment-api/src/interfaces/augment-api-events.ts +++ b/packages/augment-api/src/interfaces/augment-api-events.ts @@ -9,7 +9,7 @@ import type { ApiTypes, AugmentedEvent } from '@polkadot/api-base/types'; import type { Bytes, Null, Option, Result, U8aFixed, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; import type { ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, H256, Perquintill } from '@polkadot/types/interfaces/runtime'; -import type { DelegationDelegationHierarchyPermissions, FrameSupportDispatchDispatchInfo, FrameSupportTokensMiscBalanceStatus, PalletDemocracyVoteAccountVote, PalletDemocracyVoteThreshold, PalletDidLookupLinkableAccountLinkableAccountId, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpRuntimeDispatchError, SpWeightsWeightV2Weight, SpiritnetRuntimeProxyType, XcmV1MultiLocation, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation } from '@polkadot/types/lookup'; +import type { DelegationDelegationHierarchyPermissions, FrameSupportDispatchDispatchInfo, FrameSupportTokensMiscBalanceStatus, PalletDemocracyVoteAccountVote, PalletDemocracyVoteThreshold, PalletDidLookupLinkableAccountLinkableAccountId, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpRuntimeDispatchError, SpWeightsWeightV2Weight, SpiritnetRuntimeProxyType, XcmV3MultiLocation, XcmV3MultiassetMultiAssets, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation } from '@polkadot/types/lookup'; export type __AugmentedEvent = AugmentedEvent; @@ -130,7 +130,7 @@ declare module '@polkadot/api-base/types/events' { * Downward message executed with the given outcome. * \[ id, outcome \] **/ - ExecutedDownward: AugmentedEvent; + ExecutedDownward: AugmentedEvent; /** * Downward message is invalid XCM. * \[ id \] @@ -269,12 +269,20 @@ declare module '@polkadot/api-base/types/events' { * An association between a DID and an account ID was removed. **/ AssociationRemoved: AugmentedEvent; + /** + * All AccountIds have been migrated to LinkableAccountId. + **/ + MigrationCompleted: AugmentedEvent; + /** + * There was some progress in the migration process. + **/ + MigrationProgress: AugmentedEvent; }; dmpQueue: { /** * Downward message executed with the given outcome. **/ - ExecutedDownward: AugmentedEvent; + ExecutedDownward: AugmentedEvent; /** * Downward message is invalid XCM. **/ @@ -443,6 +451,10 @@ declare module '@polkadot/api-base/types/events' { * An upgrade has been authorized. **/ UpgradeAuthorized: AugmentedEvent; + /** + * An upward message was sent to the relay chain. + **/ + UpwardMessageSent: AugmentedEvent], { messageHash: Option }>; /** * The validation function was applied as of the contained relay chain block number. **/ @@ -462,19 +474,45 @@ declare module '@polkadot/api-base/types/events' { * * \[ hash, origin, assets \] **/ - AssetsClaimed: AugmentedEvent; + AssetsClaimed: AugmentedEvent; /** * Some assets have been placed in an asset trap. * * \[ hash, origin, assets \] **/ - AssetsTrapped: AugmentedEvent; + AssetsTrapped: AugmentedEvent; /** * Execution of an XCM message was attempted. * * \[ outcome \] **/ - Attempted: AugmentedEvent; + Attempted: AugmentedEvent; + /** + * Fees were paid from a location for an operation (often for using `SendXcm`). + * + * \[ paying location, fees \] + **/ + FeesPaid: AugmentedEvent; + /** + * Expected query response has been received but the querier location of the response does + * not match the expected. The query remains registered for a later, valid, response to + * be received and acted upon. + * + * \[ origin location, id, expected querier, maybe actual querier \] + **/ + InvalidQuerier: AugmentedEvent]>; + /** + * Expected query response has been received but the expected querier location placed in + * storage by this runtime previously cannot be decoded. The query remains registered. + * + * This is unexpected (since a location placed in storage in a previously executing + * runtime should be readable prior to query timeout) and dangerous since the possibly + * valid response will be dropped. Manual governance intervention is probably going to be + * needed. + * + * \[ origin location, id \] + **/ + InvalidQuerierVersion: AugmentedEvent; /** * Expected query response has been received but the origin location of the response does * not match that expected. The query remains registered for a later, valid, response to @@ -482,7 +520,7 @@ declare module '@polkadot/api-base/types/events' { * * \[ origin location, id, expected location \] **/ - InvalidResponder: AugmentedEvent]>; + InvalidResponder: AugmentedEvent]>; /** * Expected query response has been received but the expected origin location placed in * storage by this runtime previously cannot be decoded. The query remains registered. @@ -494,7 +532,7 @@ declare module '@polkadot/api-base/types/events' { * * \[ origin location, id \] **/ - InvalidResponderVersion: AugmentedEvent; + InvalidResponderVersion: AugmentedEvent; /** * Query response has been received and query is removed. The registered notification has * been dispatched and executed successfully. @@ -538,14 +576,14 @@ declare module '@polkadot/api-base/types/events' { * * \[ location, query ID, error \] **/ - NotifyTargetSendFail: AugmentedEvent; + NotifyTargetSendFail: AugmentedEvent; /** * Query response has been received and is ready for taking with `take_response`. There is * no registered notification call. * * \[ id, response \] **/ - ResponseReady: AugmentedEvent; + ResponseReady: AugmentedEvent; /** * Received query response has been read and removed. * @@ -557,14 +595,14 @@ declare module '@polkadot/api-base/types/events' { * * \[ origin, destination, message \] **/ - Sent: AugmentedEvent; + Sent: AugmentedEvent; /** * The supported version of a location has been changed. This might be through an * automatic notification or a manual intervention. * * \[ location, XCM version \] **/ - SupportedVersionChanged: AugmentedEvent; + SupportedVersionChanged: AugmentedEvent; /** * Query response received which does not match a registered query. This may be because a * matching query was never registered, it may be because it is a duplicate response, or @@ -572,13 +610,34 @@ declare module '@polkadot/api-base/types/events' { * * \[ origin location, id \] **/ - UnexpectedResponse: AugmentedEvent; + UnexpectedResponse: AugmentedEvent; /** * An XCM version change notification message has been attempted to be sent. * - * \[ destination, result \] + * The cost of sending it (borne by the chain) is included. + * + * \[ destination, result, cost \] + **/ + VersionChangeNotified: AugmentedEvent; + /** + * We have requested that a remote chain sends us XCM version change notifications. + * + * \[ destination location, cost \] **/ - VersionChangeNotified: AugmentedEvent; + VersionNotifyRequested: AugmentedEvent; + /** + * A remote has requested XCM version change notification from us and we have honored it. + * A version information message is sent to them and its cost is included. + * + * \[ destination location, cost \] + **/ + VersionNotifyStarted: AugmentedEvent; + /** + * We have requested that a remote chain stops sending us XCM version change notifications. + * + * \[ destination location, cost \] + **/ + VersionNotifyUnrequested: AugmentedEvent; }; preimage: { /** @@ -905,15 +964,15 @@ declare module '@polkadot/api-base/types/events' { /** * Bad XCM format used. **/ - BadFormat: AugmentedEvent], { messageHash: Option }>; + BadFormat: AugmentedEvent], { messageHash: Option }>; /** * Bad XCM version used. **/ - BadVersion: AugmentedEvent], { messageHash: Option }>; + BadVersion: AugmentedEvent], { messageHash: Option }>; /** * Some XCM failed. **/ - Fail: AugmentedEvent, error: XcmV2TraitsError, weight: SpWeightsWeightV2Weight], { messageHash: Option, error: XcmV2TraitsError, weight: SpWeightsWeightV2Weight }>; + Fail: AugmentedEvent, error: XcmV3TraitsError, weight: SpWeightsWeightV2Weight], { messageHash: Option, error: XcmV3TraitsError, weight: SpWeightsWeightV2Weight }>; /** * An XCM exceeded the individual message weight budget. **/ @@ -925,15 +984,11 @@ declare module '@polkadot/api-base/types/events' { /** * Some XCM was executed ok. **/ - Success: AugmentedEvent, weight: SpWeightsWeightV2Weight], { messageHash: Option, weight: SpWeightsWeightV2Weight }>; - /** - * An upward message was sent to the relay chain. - **/ - UpwardMessageSent: AugmentedEvent], { messageHash: Option }>; + Success: AugmentedEvent, weight: SpWeightsWeightV2Weight], { messageHash: Option, weight: SpWeightsWeightV2Weight }>; /** * An HRMP message was sent to a sibling parachain. **/ - XcmpMessageSent: AugmentedEvent], { messageHash: Option }>; + XcmpMessageSent: AugmentedEvent], { messageHash: Option }>; }; } // AugmentedEvents } // declare module diff --git a/packages/augment-api/src/interfaces/augment-api-query.ts b/packages/augment-api/src/interfaces/augment-api-query.ts index a41567134..dd5e9f356 100644 --- a/packages/augment-api/src/interfaces/augment-api-query.ts +++ b/packages/augment-api/src/interfaces/augment-api-query.ts @@ -9,7 +9,7 @@ import type { ApiTypes, AugmentedQuery, QueryableStorageEntry } from '@polkadot/ import type { BTreeMap, Bytes, Null, Option, U8aFixed, Vec, bool, u128, u16, u32, u64 } from '@polkadot/types-codec'; import type { AnyNumber, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, Call, H256 } from '@polkadot/types/interfaces/runtime'; -import type { AttestationAttestationsAttestationDetails, CtypeCtypeEntry, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DidDidDetails, DidServiceEndpointsDidEndpoint, FrameSupportDispatchPerDispatchClassWeight, FrameSupportPreimagesBounded, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, KiltAssetDidsV1AssetDid, PalletAuthorshipUncleEntryItem, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReserveData, PalletCollectiveVotes, PalletDemocracyReferendumInfo, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupConnectionRecord, PalletDidLookupLinkableAccountLinkableAccountId, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletSchedulerScheduled, PalletTipsOpenTip, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesWeb3NameWeb3NameOwnership, ParachainStakingCandidate, ParachainStakingDelegationCounter, ParachainStakingInflationInflationInfo, ParachainStakingRoundInfo, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, PublicCredentialsCredentialsCredentialEntry, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, SpiritnetRuntimeSessionKeys } from '@polkadot/types/lookup'; +import type { AttestationAttestationsAttestationDetails, CtypeCtypeEntry, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DidDidDetails, DidServiceEndpointsDidEndpoint, FrameSupportDispatchPerDispatchClassWeight, FrameSupportPreimagesBounded, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, KiltAssetDidsV1AssetDid, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReserveData, PalletCollectiveVotes, PalletDemocracyReferendumInfo, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupConnectionRecord, PalletDidLookupLinkableAccountLinkableAccountId, PalletDidLookupMigrationState, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletSchedulerScheduled, PalletTipsOpenTip, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesWeb3NameWeb3NameOwnership, ParachainStakingCandidate, ParachainStakingDelegationCounter, ParachainStakingInflationInflationInfo, ParachainStakingRoundInfo, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, PublicCredentialsCredentialsCredentialEntry, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, SpiritnetRuntimeSessionKeys } from '@polkadot/types/lookup'; import type { Observable } from '@polkadot/types/types'; export type __AugmentedQuery = AugmentedQuery unknown>; @@ -58,14 +58,6 @@ declare module '@polkadot/api-base/types/storage' { * Author of current block. **/ author: AugmentedQuery Observable>, []>; - /** - * Whether uncles were already set in this block. - **/ - didSetUncles: AugmentedQuery Observable, []>; - /** - * Uncles - **/ - uncles: AugmentedQuery Observable>, []>; }; balances: { /** @@ -260,12 +252,17 @@ declare module '@polkadot/api-base/types/storage' { * Mapping from account identifiers to DIDs. **/ connectedDids: AugmentedQuery Observable>, [PalletDidLookupLinkableAccountLinkableAccountId]>; + migrationStateStore: AugmentedQuery Observable, []>; }; dmpQueue: { /** * The configuration. **/ configuration: AugmentedQuery Observable, []>; + /** + * Counter for the related counted storage map + **/ + counterForOverweight: AugmentedQuery Observable, []>; /** * The overweight messages. **/ @@ -822,6 +819,10 @@ declare module '@polkadot/api-base/types/storage' { owner: AugmentedQuery Observable>, [Bytes]>; }; xcmpQueue: { + /** + * Counter for the related counted storage map + **/ + counterForOverweight: AugmentedQuery Observable, []>; /** * Inbound aggregate XCMP messages. It can only be one per ParaId/block. **/ diff --git a/packages/augment-api/src/interfaces/augment-api-runtime.ts b/packages/augment-api/src/interfaces/augment-api-runtime.ts index 151e0ea9e..083ee0388 100644 --- a/packages/augment-api/src/interfaces/augment-api-runtime.ts +++ b/packages/augment-api/src/interfaces/augment-api-runtime.ts @@ -9,16 +9,15 @@ import '@polkadot/api-base/types/calls'; import type { DidApiAccountId, PublicCredentialError, PublicCredentialFilter, RawDidLinkedInfo, StakingRates } from './extraDefs/index.js'; import type { ApiTypes, AugmentedCall, DecoratedCallBase } from '@polkadot/api-base/types'; -import type { Bytes, Null, Option, Result, Text, Vec, u32 } from '@polkadot/types-codec'; -import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types'; +import type { Bytes, Null, Option, Result, Text, Vec } from '@polkadot/types-codec'; +import type { ITuple } from '@polkadot/types-codec/types'; import type { CheckInherentsResult, InherentData } from '@polkadot/types/interfaces/blockbuilder'; import type { BlockHash } from '@polkadot/types/interfaces/chain'; import type { AuthorityId } from '@polkadot/types/interfaces/consensus'; import type { CollationInfo } from '@polkadot/types/interfaces/cumulus'; import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics'; import type { OpaqueMetadata } from '@polkadot/types/interfaces/metadata'; -import type { FeeDetails, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment'; -import type { AccountId, AccountId32, Balance, Block, Call, Hash, Header, Index, KeyTypeId, SlotDuration } from '@polkadot/types/interfaces/runtime'; +import type { AccountId, AccountId32, Balance, Block, Hash, Header, Index, KeyTypeId, SlotDuration } from '@polkadot/types/interfaces/runtime'; import type { RuntimeVersion } from '@polkadot/types/interfaces/state'; import type { ApplyExtrinsicResult } from '@polkadot/types/interfaces/system'; import type { TransactionSource, TransactionValidity } from '@polkadot/types/interfaces/txqueue'; @@ -160,27 +159,5 @@ declare module '@polkadot/api-base/types/calls' { **/ validateTransaction: AugmentedCall Observable>; }; - /** 0x37c8bb1350a9a2a8/2 */ - transactionPaymentApi: { - /** - * The transaction fee details - **/ - queryFeeDetails: AugmentedCall Observable>; - /** - * The transaction info - **/ - queryInfo: AugmentedCall Observable>; - }; - /** 0xf3ff14d5ab527059/2 */ - transactionPaymentCallApi: { - /** - * The call fee details - **/ - queryCallFeeDetails: AugmentedCall Observable>; - /** - * The call info - **/ - queryCallInfo: AugmentedCall Observable>; - }; } // AugmentedCalls } // declare module diff --git a/packages/augment-api/src/interfaces/augment-api-tx.ts b/packages/augment-api/src/interfaces/augment-api-tx.ts index a4b9a9051..27fc8ab12 100644 --- a/packages/augment-api/src/interfaces/augment-api-tx.ts +++ b/packages/augment-api/src/interfaces/augment-api-tx.ts @@ -9,7 +9,7 @@ import type { ApiTypes, AugmentedSubmittable, SubmittableExtrinsic, SubmittableE import type { Bytes, Compact, Option, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, Call, H256, MultiAddress, Perquintill } from '@polkadot/types/interfaces/runtime'; -import type { CumulusPrimitivesParachainInherentParachainInherentData, DelegationDelegationHierarchyPermissions, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidServiceEndpointsDidEndpoint, FrameSupportPreimagesBounded, PalletDemocracyConviction, PalletDemocracyVoteAccountVote, PalletDidLookupAssociateAccountRequest, PalletDidLookupLinkableAccountLinkableAccountId, PalletVestingVestingInfo, PublicCredentialsCredentialsCredential, RuntimeCommonAuthorizationPalletAuthorize, SpRuntimeHeader, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeSessionKeys, XcmV1MultiLocation, XcmV2WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; +import type { CumulusPrimitivesParachainInherentParachainInherentData, DelegationDelegationHierarchyPermissions, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidServiceEndpointsDidEndpoint, FrameSupportPreimagesBounded, PalletDemocracyConviction, PalletDemocracyVoteAccountVote, PalletDidLookupAssociateAccountRequest, PalletDidLookupLinkableAccountLinkableAccountId, PalletVestingVestingInfo, PublicCredentialsCredentialsCredential, RuntimeCommonAuthorizationPalletAuthorize, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeSessionKeys, XcmV3MultiLocation, XcmV3WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; export type __AugmentedSubmittable = AugmentedSubmittable<() => unknown>; export type __SubmittableExtrinsic = SubmittableExtrinsic; @@ -111,12 +111,6 @@ declare module '@polkadot/api-base/types/submittable' { **/ updateDeposit: AugmentedSubmittable<(claimHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; }; - authorship: { - /** - * Provide a set of uncles. - **/ - setUncles: AugmentedSubmittable<(newUncles: Vec | (SpRuntimeHeader | { parentHash?: any; number?: any; stateRoot?: any; extrinsicsRoot?: any; digest?: any } | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; - }; balances: { /** * Exactly as `transfer`, except the origin must be root and the source account may be @@ -1153,7 +1147,7 @@ declare module '@polkadot/api-base/types/submittable' { * - Writes: ConnectedDids + ConnectedAccounts * # **/ - associateAccount: AugmentedSubmittable<(req: PalletDidLookupAssociateAccountRequest | { Dotsama: any } | { Ethereum: any } | string | Uint8Array, expiration: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletDidLookupAssociateAccountRequest, u64]>; + associateAccount: AugmentedSubmittable<(req: PalletDidLookupAssociateAccountRequest | { Polkadot: any } | { Ethereum: any } | string | Uint8Array, expiration: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletDidLookupAssociateAccountRequest, u64]>; /** * Associate the sender of the call to the DID that authorized this * call. @@ -1178,6 +1172,15 @@ declare module '@polkadot/api-base/types/submittable' { * The sender of the call will be the new deposit owner. **/ changeDepositOwner: AugmentedSubmittable<(account: PalletDidLookupLinkableAccountLinkableAccountId | { AccountId20: any } | { AccountId32: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletDidLookupLinkableAccountLinkableAccountId]>; + /** + * Executes the key type migration of the `ConnectedDids` and + * `ConnectedAccounts` storages by converting the given `AccountId` + * into `LinkableAccountId(AccountId)`. Once all keys have been + * migrated, the migration is done and this call will be filtered. + * + * Can be called by any origin. + **/ + migrate: AugmentedSubmittable<(limit: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** * Remove the association of the provided account. This call can only * be called from the deposit owner. The reserved deposit will be @@ -1229,19 +1232,8 @@ declare module '@polkadot/api-base/types/submittable' { dmpQueue: { /** * Service a single overweight message. - * - * - `origin`: Must pass `ExecuteOverweightOrigin`. - * - `index`: The index of the overweight message to service. - * - `weight_limit`: The amount of weight that message execution may take. - * - * Errors: - * - `Unknown`: Message of `index` is unknown. - * - `OverLimit`: Message execution may use greater than `weight_limit`. - * - * Events: - * - `OverweightServiced`: On success. **/ - serviceOverweight: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array, weightLimit: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64, u64]>; + serviceOverweight: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array, weightLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u64, SpWeightsWeightV2Weight]>; }; indices: { /** @@ -1715,7 +1707,7 @@ declare module '@polkadot/api-base/types/submittable' { * NOTE: A successful return to this does *not* imply that the `msg` was executed successfully * to completion; only that *some* of it was executed. **/ - execute: AugmentedSubmittable<(message: XcmVersionedXcm | { V0: any } | { V1: any } | { V2: any } | string | Uint8Array, maxWeight: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmVersionedXcm, u64]>; + execute: AugmentedSubmittable<(message: XcmVersionedXcm | { V2: any } | { V3: any } | string | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedXcm, SpWeightsWeightV2Weight]>; /** * Set a safe XCM version (the version that XCM should be encoded with if the most recent * version a destination can accept is unknown). @@ -1730,7 +1722,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `origin`: Must be Root. * - `location`: The location to which we should subscribe for XCM version notifications. **/ - forceSubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation]>; + forceSubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation]>; /** * Require that a particular destination should no longer notify us regarding any XCM * version changes. @@ -1739,7 +1731,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `location`: The location to which we are currently subscribed for XCM version * notifications which we no longer desire. **/ - forceUnsubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation]>; + forceUnsubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation]>; /** * Extoll that a particular destination can be communicated with through a particular * version of XCM. @@ -1748,7 +1740,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `location`: The destination that is being described. * - `xcm_version`: The latest version of XCM that `location` supports. **/ - forceXcmVersion: AugmentedSubmittable<(location: XcmV1MultiLocation | { parents?: any; interior?: any } | string | Uint8Array, xcmVersion: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmV1MultiLocation, u32]>; + forceXcmVersion: AugmentedSubmittable<(location: XcmV3MultiLocation | { parents?: any; interior?: any } | string | Uint8Array, xcmVersion: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmV3MultiLocation, u32]>; /** * Transfer some assets from the local chain to the sovereign account of a destination * chain and forward a notification XCM. @@ -1769,7 +1761,7 @@ declare module '@polkadot/api-base/types/submittable' { * fees. * - `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. **/ - limitedReserveTransferAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V0: any } | { V1: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array, weightLimit: XcmV2WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV2WeightLimit]>; + limitedReserveTransferAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array, weightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV3WeightLimit]>; /** * Teleport some assets from the local chain to some destination chain. * @@ -1789,7 +1781,7 @@ declare module '@polkadot/api-base/types/submittable' { * fees. * - `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. **/ - limitedTeleportAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V0: any } | { V1: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array, weightLimit: XcmV2WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV2WeightLimit]>; + limitedTeleportAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array, weightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV3WeightLimit]>; /** * Transfer some assets from the local chain to the sovereign account of a destination * chain and forward a notification XCM. @@ -1808,8 +1800,8 @@ declare module '@polkadot/api-base/types/submittable' { * - `fee_asset_item`: The index into `assets` of the item which should be used to pay * fees. **/ - reserveTransferAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V0: any } | { V1: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32]>; - send: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, message: XcmVersionedXcm | { V0: any } | { V1: any } | { V2: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedXcm]>; + reserveTransferAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32]>; + send: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, message: XcmVersionedXcm | { V2: any } | { V3: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedXcm]>; /** * Teleport some assets from the local chain to some destination chain. * @@ -1827,7 +1819,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `fee_asset_item`: The index into `assets` of the item which should be used to pay * fees. **/ - teleportAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V0: any } | { V1: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32]>; + teleportAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32]>; }; preimage: { /** @@ -1935,8 +1927,6 @@ declare module '@polkadot/api-base/types/submittable' { * Dispatch the given `call` from an account that the sender is authorised for through * `add_proxy`. * - * Removes any corresponding announcement(s). - * * The dispatch origin for this call must be _Signed_. * * Parameters: @@ -3056,7 +3046,7 @@ declare module '@polkadot/api-base/types/submittable' { * Events: * - `OverweightServiced`: On success. **/ - serviceOverweight: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array, weightLimit: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64, u64]>; + serviceOverweight: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array, weightLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u64, SpWeightsWeightV2Weight]>; /** * Suspends all XCM executions for the XCMP queue, regardless of the sender's origin. * @@ -3093,7 +3083,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `origin`: Must pass `Root`. * - `new`: Desired value for `QueueConfigData.threshold_weight` **/ - updateThresholdWeight: AugmentedSubmittable<(updated: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; + updateThresholdWeight: AugmentedSubmittable<(updated: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpWeightsWeightV2Weight]>; /** * Overwrites the speed to which the available weight approaches the maximum weight. * A lower number results in a faster progression. A value of 1 makes the entire weight available initially. @@ -3101,7 +3091,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `origin`: Must pass `Root`. * - `new`: Desired value for `QueueConfigData.weight_restrict_decay`. **/ - updateWeightRestrictDecay: AugmentedSubmittable<(updated: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; + updateWeightRestrictDecay: AugmentedSubmittable<(updated: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpWeightsWeightV2Weight]>; /** * Overwrite the maximum amount of weight any individual message may consume. * Messages above this weight go into the overweight queue and may only be serviced explicitly. @@ -3109,7 +3099,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `origin`: Must pass `Root`. * - `new`: Desired value for `QueueConfigData.xcmp_max_individual_weight`. **/ - updateXcmpMaxIndividualWeight: AugmentedSubmittable<(updated: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; + updateXcmpMaxIndividualWeight: AugmentedSubmittable<(updated: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpWeightsWeightV2Weight]>; }; } // AugmentedSubmittables } // declare module diff --git a/packages/augment-api/src/interfaces/lookup.ts b/packages/augment-api/src/interfaces/lookup.ts index 0eb1c4671..835e39a28 100644 --- a/packages/augment-api/src/interfaces/lookup.ts +++ b/packages/augment-api/src/interfaces/lookup.ts @@ -669,7 +669,9 @@ export default { PalletDidLookupEvent: { _enum: { AssociationEstablished: '(PalletDidLookupLinkableAccountLinkableAccountId,AccountId32)', - AssociationRemoved: '(PalletDidLookupLinkableAccountLinkableAccountId,AccountId32)' + AssociationRemoved: '(PalletDidLookupLinkableAccountLinkableAccountId,AccountId32)', + MigrationProgress: 'Null', + MigrationCompleted: 'Null' } }, /** @@ -807,7 +809,10 @@ export default { }, DownwardMessagesProcessed: { weightUsed: 'SpWeightsWeightV2Weight', - dmqHead: 'H256' + dmqHead: 'H256', + }, + UpwardMessageSent: { + messageHash: 'Option<[u8;32]>' } } }, @@ -817,25 +822,22 @@ export default { CumulusPalletXcmpQueueEvent: { _enum: { Success: { - messageHash: 'Option', + messageHash: 'Option<[u8;32]>', weight: 'SpWeightsWeightV2Weight', }, Fail: { - messageHash: 'Option', - error: 'XcmV2TraitsError', + messageHash: 'Option<[u8;32]>', + error: 'XcmV3TraitsError', weight: 'SpWeightsWeightV2Weight', }, BadVersion: { - messageHash: 'Option', + messageHash: 'Option<[u8;32]>', }, BadFormat: { - messageHash: 'Option', - }, - UpwardMessageSent: { - messageHash: 'Option', + messageHash: 'Option<[u8;32]>', }, XcmpMessageSent: { - messageHash: 'Option', + messageHash: 'Option<[u8;32]>', }, OverweightEnqueued: { sender: 'u32', @@ -850,16 +852,16 @@ export default { } }, /** - * Lookup103: xcm::v2::traits::Error + * Lookup102: xcm::v3::traits::Error **/ - XcmV2TraitsError: { + XcmV3TraitsError: { _enum: { Overflow: 'Null', Unimplemented: 'Null', UntrustedReserveLocation: 'Null', UntrustedTeleportLocation: 'Null', - MultiLocationFull: 'Null', - MultiLocationNotInvertible: 'Null', + LocationFull: 'Null', + LocationNotInvertible: 'Null', BadOrigin: 'Null', InvalidLocation: 'Null', AssetNotFound: 'Null', @@ -876,115 +878,150 @@ export default { NotHoldingFees: 'Null', TooExpensive: 'Null', Trap: 'u64', + ExpectationFalse: 'Null', + PalletNotFound: 'Null', + NameMismatch: 'Null', + VersionIncompatible: 'Null', + HoldingWouldOverflow: 'Null', + ExportError: 'Null', + ReanchorFailed: 'Null', + NoDeal: 'Null', + FeesNotMet: 'Null', + LockError: 'Null', + NoPermission: 'Null', + Unanchored: 'Null', + NotDepositable: 'Null', UnhandledXcmVersion: 'Null', - WeightLimitReached: 'u64', + WeightLimitReached: 'SpWeightsWeightV2Weight', Barrier: 'Null', - WeightNotComputable: 'Null' + WeightNotComputable: 'Null', + ExceedsStackLimit: 'Null' } }, /** - * Lookup105: pallet_xcm::pallet::Event + * Lookup104: pallet_xcm::pallet::Event **/ PalletXcmEvent: { _enum: { - Attempted: 'XcmV2TraitsOutcome', - Sent: '(XcmV1MultiLocation,XcmV1MultiLocation,XcmV2Xcm)', - UnexpectedResponse: '(XcmV1MultiLocation,u64)', - ResponseReady: '(u64,XcmV2Response)', + Attempted: 'XcmV3TraitsOutcome', + Sent: '(XcmV3MultiLocation,XcmV3MultiLocation,XcmV3Xcm)', + UnexpectedResponse: '(XcmV3MultiLocation,u64)', + ResponseReady: '(u64,XcmV3Response)', Notified: '(u64,u8,u8)', NotifyOverweight: '(u64,u8,u8,SpWeightsWeightV2Weight,SpWeightsWeightV2Weight)', NotifyDispatchError: '(u64,u8,u8)', NotifyDecodeFailed: '(u64,u8,u8)', - InvalidResponder: '(XcmV1MultiLocation,u64,Option)', - InvalidResponderVersion: '(XcmV1MultiLocation,u64)', + InvalidResponder: '(XcmV3MultiLocation,u64,Option)', + InvalidResponderVersion: '(XcmV3MultiLocation,u64)', ResponseTaken: 'u64', - AssetsTrapped: '(H256,XcmV1MultiLocation,XcmVersionedMultiAssets)', - VersionChangeNotified: '(XcmV1MultiLocation,u32)', - SupportedVersionChanged: '(XcmV1MultiLocation,u32)', - NotifyTargetSendFail: '(XcmV1MultiLocation,u64,XcmV2TraitsError)', + AssetsTrapped: '(H256,XcmV3MultiLocation,XcmVersionedMultiAssets)', + VersionChangeNotified: '(XcmV3MultiLocation,u32,XcmV3MultiassetMultiAssets)', + SupportedVersionChanged: '(XcmV3MultiLocation,u32)', + NotifyTargetSendFail: '(XcmV3MultiLocation,u64,XcmV3TraitsError)', NotifyTargetMigrationFail: '(XcmVersionedMultiLocation,u64)', - AssetsClaimed: '(H256,XcmV1MultiLocation,XcmVersionedMultiAssets)' + InvalidQuerierVersion: '(XcmV3MultiLocation,u64)', + InvalidQuerier: '(XcmV3MultiLocation,u64,XcmV3MultiLocation,Option)', + VersionNotifyStarted: '(XcmV3MultiLocation,XcmV3MultiassetMultiAssets)', + VersionNotifyRequested: '(XcmV3MultiLocation,XcmV3MultiassetMultiAssets)', + VersionNotifyUnrequested: '(XcmV3MultiLocation,XcmV3MultiassetMultiAssets)', + FeesPaid: '(XcmV3MultiLocation,XcmV3MultiassetMultiAssets)', + AssetsClaimed: '(H256,XcmV3MultiLocation,XcmVersionedMultiAssets)' } }, /** - * Lookup106: xcm::v2::traits::Outcome + * Lookup105: xcm::v3::traits::Outcome **/ - XcmV2TraitsOutcome: { + XcmV3TraitsOutcome: { _enum: { - Complete: 'u64', - Incomplete: '(u64,XcmV2TraitsError)', - Error: 'XcmV2TraitsError' + Complete: 'SpWeightsWeightV2Weight', + Incomplete: '(SpWeightsWeightV2Weight,XcmV3TraitsError)', + Error: 'XcmV3TraitsError' } }, /** - * Lookup107: xcm::v1::multilocation::MultiLocation + * Lookup106: xcm::v3::multilocation::MultiLocation **/ - XcmV1MultiLocation: { + XcmV3MultiLocation: { parents: 'u8', - interior: 'XcmV1MultilocationJunctions' + interior: 'XcmV3Junctions' }, /** - * Lookup108: xcm::v1::multilocation::Junctions + * Lookup107: xcm::v3::junctions::Junctions **/ - XcmV1MultilocationJunctions: { + XcmV3Junctions: { _enum: { Here: 'Null', - X1: 'XcmV1Junction', - X2: '(XcmV1Junction,XcmV1Junction)', - X3: '(XcmV1Junction,XcmV1Junction,XcmV1Junction)', - X4: '(XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction)', - X5: '(XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction)', - X6: '(XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction)', - X7: '(XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction)', - X8: '(XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction,XcmV1Junction)' + X1: 'XcmV3Junction', + X2: '(XcmV3Junction,XcmV3Junction)', + X3: '(XcmV3Junction,XcmV3Junction,XcmV3Junction)', + X4: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)', + X5: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)', + X6: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)', + X7: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)', + X8: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)' } }, /** - * Lookup109: xcm::v1::junction::Junction + * Lookup108: xcm::v3::junction::Junction **/ - XcmV1Junction: { + XcmV3Junction: { _enum: { Parachain: 'Compact', AccountId32: { - network: 'XcmV0JunctionNetworkId', + network: 'Option', id: '[u8;32]', }, AccountIndex64: { - network: 'XcmV0JunctionNetworkId', + network: 'Option', index: 'Compact', }, AccountKey20: { - network: 'XcmV0JunctionNetworkId', + network: 'Option', key: '[u8;20]', }, PalletInstance: 'u8', GeneralIndex: 'Compact', - GeneralKey: 'Bytes', + GeneralKey: { + length: 'u8', + data: '[u8;32]', + }, OnlyChild: 'Null', Plurality: { - id: 'XcmV0JunctionBodyId', - part: 'XcmV0JunctionBodyPart' - } + id: 'XcmV3JunctionBodyId', + part: 'XcmV3JunctionBodyPart', + }, + GlobalConsensus: 'XcmV3JunctionNetworkId' } }, /** - * Lookup111: xcm::v0::junction::NetworkId + * Lookup111: xcm::v3::junction::NetworkId **/ - XcmV0JunctionNetworkId: { + XcmV3JunctionNetworkId: { _enum: { - Any: 'Null', - Named: 'Bytes', + ByGenesis: '[u8;32]', + ByFork: { + blockNumber: 'u64', + blockHash: '[u8;32]', + }, Polkadot: 'Null', - Kusama: 'Null' + Kusama: 'Null', + Westend: 'Null', + Rococo: 'Null', + Wococo: 'Null', + Ethereum: { + chainId: 'Compact', + }, + BitcoinCore: 'Null', + BitcoinCash: 'Null' } }, /** - * Lookup114: xcm::v0::junction::BodyId + * Lookup113: xcm::v3::junction::BodyId **/ - XcmV0JunctionBodyId: { + XcmV3JunctionBodyId: { _enum: { Unit: 'Null', - Named: 'Bytes', + Moniker: '[u8;4]', Index: 'Compact', Executive: 'Null', Technical: 'Null', @@ -996,9 +1033,9 @@ export default { } }, /** - * Lookup115: xcm::v0::junction::BodyPart + * Lookup114: xcm::v3::junction::BodyPart **/ - XcmV0JunctionBodyPart: { + XcmV3JunctionBodyPart: { _enum: { Voice: 'Null', Members: { @@ -1019,34 +1056,35 @@ export default { } }, /** - * Lookup116: xcm::v2::Xcm + * Lookup115: xcm::v3::Xcm **/ - XcmV2Xcm: 'Vec', + XcmV3Xcm: 'Vec', /** - * Lookup118: xcm::v2::Instruction + * Lookup117: xcm::v3::Instruction **/ - XcmV2Instruction: { + XcmV3Instruction: { _enum: { - WithdrawAsset: 'XcmV1MultiassetMultiAssets', - ReserveAssetDeposited: 'XcmV1MultiassetMultiAssets', - ReceiveTeleportedAsset: 'XcmV1MultiassetMultiAssets', + WithdrawAsset: 'XcmV3MultiassetMultiAssets', + ReserveAssetDeposited: 'XcmV3MultiassetMultiAssets', + ReceiveTeleportedAsset: 'XcmV3MultiassetMultiAssets', QueryResponse: { queryId: 'Compact', - response: 'XcmV2Response', - maxWeight: 'Compact', + response: 'XcmV3Response', + maxWeight: 'SpWeightsWeightV2Weight', + querier: 'Option', }, TransferAsset: { - assets: 'XcmV1MultiassetMultiAssets', - beneficiary: 'XcmV1MultiLocation', + assets: 'XcmV3MultiassetMultiAssets', + beneficiary: 'XcmV3MultiLocation', }, TransferReserveAsset: { - assets: 'XcmV1MultiassetMultiAssets', - dest: 'XcmV1MultiLocation', - xcm: 'XcmV2Xcm', + assets: 'XcmV3MultiassetMultiAssets', + dest: 'XcmV3MultiLocation', + xcm: 'XcmV3Xcm', }, Transact: { - originType: 'XcmV0OriginKind', - requireWeightAtMost: 'Compact', + originKind: 'XcmV2OriginKind', + requireWeightAtMost: 'SpWeightsWeightV2Weight', call: 'XcmDoubleEncoded', }, HrmpNewChannelOpenRequest: { @@ -1063,246 +1101,316 @@ export default { recipient: 'Compact', }, ClearOrigin: 'Null', - DescendOrigin: 'XcmV1MultilocationJunctions', - ReportError: { - queryId: 'Compact', - dest: 'XcmV1MultiLocation', - maxResponseWeight: 'Compact', - }, + DescendOrigin: 'XcmV3Junctions', + ReportError: 'XcmV3QueryResponseInfo', DepositAsset: { - assets: 'XcmV1MultiassetMultiAssetFilter', - maxAssets: 'Compact', - beneficiary: 'XcmV1MultiLocation', + assets: 'XcmV3MultiassetMultiAssetFilter', + beneficiary: 'XcmV3MultiLocation', }, DepositReserveAsset: { - assets: 'XcmV1MultiassetMultiAssetFilter', - maxAssets: 'Compact', - dest: 'XcmV1MultiLocation', - xcm: 'XcmV2Xcm', + assets: 'XcmV3MultiassetMultiAssetFilter', + dest: 'XcmV3MultiLocation', + xcm: 'XcmV3Xcm', }, ExchangeAsset: { - give: 'XcmV1MultiassetMultiAssetFilter', - receive: 'XcmV1MultiassetMultiAssets', + give: 'XcmV3MultiassetMultiAssetFilter', + want: 'XcmV3MultiassetMultiAssets', + maximal: 'bool', }, InitiateReserveWithdraw: { - assets: 'XcmV1MultiassetMultiAssetFilter', - reserve: 'XcmV1MultiLocation', - xcm: 'XcmV2Xcm', + assets: 'XcmV3MultiassetMultiAssetFilter', + reserve: 'XcmV3MultiLocation', + xcm: 'XcmV3Xcm', }, InitiateTeleport: { - assets: 'XcmV1MultiassetMultiAssetFilter', - dest: 'XcmV1MultiLocation', - xcm: 'XcmV2Xcm', + assets: 'XcmV3MultiassetMultiAssetFilter', + dest: 'XcmV3MultiLocation', + xcm: 'XcmV3Xcm', }, - QueryHolding: { - queryId: 'Compact', - dest: 'XcmV1MultiLocation', - assets: 'XcmV1MultiassetMultiAssetFilter', - maxResponseWeight: 'Compact', + ReportHolding: { + responseInfo: 'XcmV3QueryResponseInfo', + assets: 'XcmV3MultiassetMultiAssetFilter', }, BuyExecution: { - fees: 'XcmV1MultiAsset', - weightLimit: 'XcmV2WeightLimit', + fees: 'XcmV3MultiAsset', + weightLimit: 'XcmV3WeightLimit', }, RefundSurplus: 'Null', - SetErrorHandler: 'XcmV2Xcm', - SetAppendix: 'XcmV2Xcm', + SetErrorHandler: 'XcmV3Xcm', + SetAppendix: 'XcmV3Xcm', ClearError: 'Null', ClaimAsset: { - assets: 'XcmV1MultiassetMultiAssets', - ticket: 'XcmV1MultiLocation', + assets: 'XcmV3MultiassetMultiAssets', + ticket: 'XcmV3MultiLocation', }, Trap: 'Compact', SubscribeVersion: { queryId: 'Compact', - maxResponseWeight: 'Compact', - }, - UnsubscribeVersion: 'Null' + maxResponseWeight: 'SpWeightsWeightV2Weight', + }, + UnsubscribeVersion: 'Null', + BurnAsset: 'XcmV3MultiassetMultiAssets', + ExpectAsset: 'XcmV3MultiassetMultiAssets', + ExpectOrigin: 'Option', + ExpectError: 'Option<(u32,XcmV3TraitsError)>', + ExpectTransactStatus: 'XcmV3MaybeErrorCode', + QueryPallet: { + moduleName: 'Bytes', + responseInfo: 'XcmV3QueryResponseInfo', + }, + ExpectPallet: { + index: 'Compact', + name: 'Bytes', + moduleName: 'Bytes', + crateMajor: 'Compact', + minCrateMinor: 'Compact', + }, + ReportTransactStatus: 'XcmV3QueryResponseInfo', + ClearTransactStatus: 'Null', + UniversalOrigin: 'XcmV3Junction', + ExportMessage: { + network: 'XcmV3JunctionNetworkId', + destination: 'XcmV3Junctions', + xcm: 'XcmV3Xcm', + }, + LockAsset: { + asset: 'XcmV3MultiAsset', + unlocker: 'XcmV3MultiLocation', + }, + UnlockAsset: { + asset: 'XcmV3MultiAsset', + target: 'XcmV3MultiLocation', + }, + NoteUnlockable: { + asset: 'XcmV3MultiAsset', + owner: 'XcmV3MultiLocation', + }, + RequestUnlock: { + asset: 'XcmV3MultiAsset', + locker: 'XcmV3MultiLocation', + }, + SetFeesMode: { + jitWithdraw: 'bool', + }, + SetTopic: '[u8;32]', + ClearTopic: 'Null', + AliasOrigin: 'XcmV3MultiLocation', + UnpaidExecution: { + weightLimit: 'XcmV3WeightLimit', + checkOrigin: 'Option' + } } }, /** - * Lookup119: xcm::v1::multiasset::MultiAssets + * Lookup118: xcm::v3::multiasset::MultiAssets **/ - XcmV1MultiassetMultiAssets: 'Vec', + XcmV3MultiassetMultiAssets: 'Vec', /** - * Lookup121: xcm::v1::multiasset::MultiAsset + * Lookup120: xcm::v3::multiasset::MultiAsset **/ - XcmV1MultiAsset: { - id: 'XcmV1MultiassetAssetId', - fun: 'XcmV1MultiassetFungibility' + XcmV3MultiAsset: { + id: 'XcmV3MultiassetAssetId', + fun: 'XcmV3MultiassetFungibility' }, /** - * Lookup122: xcm::v1::multiasset::AssetId + * Lookup121: xcm::v3::multiasset::AssetId **/ - XcmV1MultiassetAssetId: { + XcmV3MultiassetAssetId: { _enum: { - Concrete: 'XcmV1MultiLocation', - Abstract: 'Bytes' + Concrete: 'XcmV3MultiLocation', + Abstract: '[u8;32]' } }, /** - * Lookup123: xcm::v1::multiasset::Fungibility + * Lookup122: xcm::v3::multiasset::Fungibility **/ - XcmV1MultiassetFungibility: { + XcmV3MultiassetFungibility: { _enum: { Fungible: 'Compact', - NonFungible: 'XcmV1MultiassetAssetInstance' + NonFungible: 'XcmV3MultiassetAssetInstance' } }, /** - * Lookup124: xcm::v1::multiasset::AssetInstance + * Lookup123: xcm::v3::multiasset::AssetInstance **/ - XcmV1MultiassetAssetInstance: { + XcmV3MultiassetAssetInstance: { _enum: { Undefined: 'Null', Index: 'Compact', Array4: '[u8;4]', Array8: '[u8;8]', Array16: '[u8;16]', - Array32: '[u8;32]', - Blob: 'Bytes' + Array32: '[u8;32]' } }, /** - * Lookup126: xcm::v2::Response + * Lookup125: xcm::v3::Response **/ - XcmV2Response: { + XcmV3Response: { _enum: { Null: 'Null', - Assets: 'XcmV1MultiassetMultiAssets', - ExecutionResult: 'Option<(u32,XcmV2TraitsError)>', - Version: 'u32' + Assets: 'XcmV3MultiassetMultiAssets', + ExecutionResult: 'Option<(u32,XcmV3TraitsError)>', + Version: 'u32', + PalletsInfo: 'XcmV3VecPalletInfo', + DispatchResult: 'XcmV3MaybeErrorCode' } }, /** - * Lookup129: xcm::v0::OriginKind + * Lookup128: xcm::v3::VecPalletInfo + **/ + XcmV3VecPalletInfo: 'Vec', + /** + * Lookup130: xcm::v3::PalletInfo + **/ + XcmV3PalletInfo: { + index: 'Compact', + name: 'Bytes', + moduleName: 'Bytes', + major: 'Compact', + minor: 'Compact', + patch: 'Compact' + }, + /** + * Lookup131: xcm::v3::MaybeErrorCode **/ - XcmV0OriginKind: { + XcmV3MaybeErrorCode: { + _enum: { + Success: 'Null', + Error: 'Bytes', + TruncatedError: 'Bytes' + } + }, + /** + * Lookup133: xcm::v2::OriginKind + **/ + XcmV2OriginKind: { _enum: ['Native', 'SovereignAccount', 'Superuser', 'Xcm'] }, /** - * Lookup130: xcm::double_encoded::DoubleEncoded + * Lookup134: xcm::double_encoded::DoubleEncoded **/ XcmDoubleEncoded: { encoded: 'Bytes' }, /** - * Lookup131: xcm::v1::multiasset::MultiAssetFilter + * Lookup135: xcm::v3::QueryResponseInfo **/ - XcmV1MultiassetMultiAssetFilter: { + XcmV3QueryResponseInfo: { + destination: 'XcmV3MultiLocation', + queryId: 'Compact', + maxWeight: 'SpWeightsWeightV2Weight' + }, + /** + * Lookup136: xcm::v3::multiasset::MultiAssetFilter + **/ + XcmV3MultiassetMultiAssetFilter: { _enum: { - Definite: 'XcmV1MultiassetMultiAssets', - Wild: 'XcmV1MultiassetWildMultiAsset' + Definite: 'XcmV3MultiassetMultiAssets', + Wild: 'XcmV3MultiassetWildMultiAsset' } }, /** - * Lookup132: xcm::v1::multiasset::WildMultiAsset + * Lookup137: xcm::v3::multiasset::WildMultiAsset **/ - XcmV1MultiassetWildMultiAsset: { + XcmV3MultiassetWildMultiAsset: { _enum: { All: 'Null', AllOf: { - id: 'XcmV1MultiassetAssetId', - fun: 'XcmV1MultiassetWildFungibility' + id: 'XcmV3MultiassetAssetId', + fun: 'XcmV3MultiassetWildFungibility', + }, + AllCounted: 'Compact', + AllOfCounted: { + id: 'XcmV3MultiassetAssetId', + fun: 'XcmV3MultiassetWildFungibility', + count: 'Compact' } } }, /** - * Lookup133: xcm::v1::multiasset::WildFungibility + * Lookup138: xcm::v3::multiasset::WildFungibility **/ - XcmV1MultiassetWildFungibility: { + XcmV3MultiassetWildFungibility: { _enum: ['Fungible', 'NonFungible'] }, /** - * Lookup134: xcm::v2::WeightLimit + * Lookup139: xcm::v3::WeightLimit **/ - XcmV2WeightLimit: { + XcmV3WeightLimit: { _enum: { Unlimited: 'Null', - Limited: 'Compact' + Limited: 'SpWeightsWeightV2Weight' } }, /** - * Lookup136: xcm::VersionedMultiAssets + * Lookup140: xcm::VersionedMultiAssets **/ XcmVersionedMultiAssets: { _enum: { - V0: 'Vec', - V1: 'XcmV1MultiassetMultiAssets' + V2: 'XcmV2MultiassetMultiAssets', + V3: 'XcmV3MultiassetMultiAssets' } }, /** - * Lookup138: xcm::v0::multi_asset::MultiAsset + * Lookup141: xcm::v2::multiasset::MultiAssets + **/ + XcmV2MultiassetMultiAssets: 'Vec', + /** + * Lookup143: xcm::v2::multiasset::MultiAsset + **/ + XcmV2MultiAsset: { + id: 'XcmV2MultiassetAssetId', + fun: 'XcmV2MultiassetFungibility' + }, + /** + * Lookup144: xcm::v2::multiasset::AssetId **/ - XcmV0MultiAsset: { + XcmV2MultiassetAssetId: { _enum: { - None: 'Null', - All: 'Null', - AllFungible: 'Null', - AllNonFungible: 'Null', - AllAbstractFungible: { - id: 'Bytes', - }, - AllAbstractNonFungible: { - class: 'Bytes', - }, - AllConcreteFungible: { - id: 'XcmV0MultiLocation', - }, - AllConcreteNonFungible: { - class: 'XcmV0MultiLocation', - }, - AbstractFungible: { - id: 'Bytes', - amount: 'Compact', - }, - AbstractNonFungible: { - class: 'Bytes', - instance: 'XcmV1MultiassetAssetInstance', - }, - ConcreteFungible: { - id: 'XcmV0MultiLocation', - amount: 'Compact', - }, - ConcreteNonFungible: { - class: 'XcmV0MultiLocation', - instance: 'XcmV1MultiassetAssetInstance' - } + Concrete: 'XcmV2MultiLocation', + Abstract: 'Bytes' } }, /** - * Lookup139: xcm::v0::multi_location::MultiLocation + * Lookup145: xcm::v2::multilocation::MultiLocation + **/ + XcmV2MultiLocation: { + parents: 'u8', + interior: 'XcmV2MultilocationJunctions' + }, + /** + * Lookup146: xcm::v2::multilocation::Junctions **/ - XcmV0MultiLocation: { + XcmV2MultilocationJunctions: { _enum: { - Null: 'Null', - X1: 'XcmV0Junction', - X2: '(XcmV0Junction,XcmV0Junction)', - X3: '(XcmV0Junction,XcmV0Junction,XcmV0Junction)', - X4: '(XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction)', - X5: '(XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction)', - X6: '(XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction)', - X7: '(XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction)', - X8: '(XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction,XcmV0Junction)' + Here: 'Null', + X1: 'XcmV2Junction', + X2: '(XcmV2Junction,XcmV2Junction)', + X3: '(XcmV2Junction,XcmV2Junction,XcmV2Junction)', + X4: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)', + X5: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)', + X6: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)', + X7: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)', + X8: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)' } }, /** - * Lookup140: xcm::v0::junction::Junction + * Lookup147: xcm::v2::junction::Junction **/ - XcmV0Junction: { + XcmV2Junction: { _enum: { - Parent: 'Null', Parachain: 'Compact', AccountId32: { - network: 'XcmV0JunctionNetworkId', + network: 'XcmV2NetworkId', id: '[u8;32]', }, AccountIndex64: { - network: 'XcmV0JunctionNetworkId', + network: 'XcmV2NetworkId', index: 'Compact', }, AccountKey20: { - network: 'XcmV0JunctionNetworkId', + network: 'XcmV2NetworkId', key: '[u8;20]', }, PalletInstance: 'u8', @@ -1310,32 +1418,106 @@ export default { GeneralKey: 'Bytes', OnlyChild: 'Null', Plurality: { - id: 'XcmV0JunctionBodyId', - part: 'XcmV0JunctionBodyPart' + id: 'XcmV2BodyId', + part: 'XcmV2BodyPart' } } }, /** - * Lookup141: xcm::VersionedMultiLocation + * Lookup148: xcm::v2::NetworkId + **/ + XcmV2NetworkId: { + _enum: { + Any: 'Null', + Named: 'Bytes', + Polkadot: 'Null', + Kusama: 'Null' + } + }, + /** + * Lookup150: xcm::v2::BodyId + **/ + XcmV2BodyId: { + _enum: { + Unit: 'Null', + Named: 'Bytes', + Index: 'Compact', + Executive: 'Null', + Technical: 'Null', + Legislative: 'Null', + Judicial: 'Null', + Defense: 'Null', + Administration: 'Null', + Treasury: 'Null' + } + }, + /** + * Lookup151: xcm::v2::BodyPart + **/ + XcmV2BodyPart: { + _enum: { + Voice: 'Null', + Members: { + count: 'Compact', + }, + Fraction: { + nom: 'Compact', + denom: 'Compact', + }, + AtLeastProportion: { + nom: 'Compact', + denom: 'Compact', + }, + MoreThanProportion: { + nom: 'Compact', + denom: 'Compact' + } + } + }, + /** + * Lookup152: xcm::v2::multiasset::Fungibility + **/ + XcmV2MultiassetFungibility: { + _enum: { + Fungible: 'Compact', + NonFungible: 'XcmV2MultiassetAssetInstance' + } + }, + /** + * Lookup153: xcm::v2::multiasset::AssetInstance + **/ + XcmV2MultiassetAssetInstance: { + _enum: { + Undefined: 'Null', + Index: 'Compact', + Array4: '[u8;4]', + Array8: '[u8;8]', + Array16: '[u8;16]', + Array32: '[u8;32]', + Blob: 'Bytes' + } + }, + /** + * Lookup154: xcm::VersionedMultiLocation **/ XcmVersionedMultiLocation: { _enum: { - V0: 'XcmV0MultiLocation', - V1: 'XcmV1MultiLocation' + V2: 'XcmV2MultiLocation', + V3: 'XcmV3MultiLocation' } }, /** - * Lookup142: cumulus_pallet_xcm::pallet::Event + * Lookup155: cumulus_pallet_xcm::pallet::Event **/ CumulusPalletXcmEvent: { _enum: { - InvalidFormat: '[u8;8]', - UnsupportedVersion: '[u8;8]', - ExecutedDownward: '([u8;8],XcmV2TraitsOutcome)' + InvalidFormat: '[u8;32]', + UnsupportedVersion: '[u8;32]', + ExecutedDownward: '([u8;32],XcmV3TraitsOutcome)' } }, /** - * Lookup143: cumulus_pallet_dmp_queue::pallet::Event + * Lookup156: cumulus_pallet_dmp_queue::pallet::Event **/ CumulusPalletDmpQueueEvent: { _enum: { @@ -1347,7 +1529,7 @@ export default { }, ExecutedDownward: { messageId: '[u8;32]', - outcome: 'XcmV2TraitsOutcome', + outcome: 'XcmV3TraitsOutcome', }, WeightExhausted: { messageId: '[u8;32]', @@ -1366,7 +1548,7 @@ export default { } }, /** - * Lookup144: frame_system::Phase + * Lookup157: frame_system::Phase **/ FrameSystemPhase: { _enum: { @@ -1376,14 +1558,14 @@ export default { } }, /** - * Lookup147: frame_system::LastRuntimeUpgradeInfo + * Lookup160: frame_system::LastRuntimeUpgradeInfo **/ FrameSystemLastRuntimeUpgradeInfo: { specVersion: 'Compact', specName: 'Text' }, /** - * Lookup149: frame_system::pallet::Call + * Lookup162: frame_system::pallet::Call **/ FrameSystemCall: { _enum: { @@ -1418,7 +1600,7 @@ export default { } }, /** - * Lookup153: frame_system::limits::BlockWeights + * Lookup166: frame_system::limits::BlockWeights **/ FrameSystemLimitsBlockWeights: { baseBlock: 'SpWeightsWeightV2Weight', @@ -1426,7 +1608,7 @@ export default { perClass: 'FrameSupportDispatchPerDispatchClassWeightsPerClass' }, /** - * Lookup154: frame_support::dispatch::PerDispatchClass + * Lookup167: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassWeightsPerClass: { normal: 'FrameSystemLimitsWeightsPerClass', @@ -1434,7 +1616,7 @@ export default { mandatory: 'FrameSystemLimitsWeightsPerClass' }, /** - * Lookup155: frame_system::limits::WeightsPerClass + * Lookup168: frame_system::limits::WeightsPerClass **/ FrameSystemLimitsWeightsPerClass: { baseExtrinsic: 'SpWeightsWeightV2Weight', @@ -1443,13 +1625,13 @@ export default { reserved: 'Option' }, /** - * Lookup157: frame_system::limits::BlockLength + * Lookup170: frame_system::limits::BlockLength **/ FrameSystemLimitsBlockLength: { max: 'FrameSupportDispatchPerDispatchClassU32' }, /** - * Lookup158: frame_support::dispatch::PerDispatchClass + * Lookup171: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassU32: { normal: 'u32', @@ -1457,14 +1639,14 @@ export default { mandatory: 'u32' }, /** - * Lookup159: sp_weights::RuntimeDbWeight + * Lookup172: sp_weights::RuntimeDbWeight **/ SpWeightsRuntimeDbWeight: { read: 'u64', write: 'u64' }, /** - * Lookup160: sp_version::RuntimeVersion + * Lookup173: sp_version::RuntimeVersion **/ SpVersionRuntimeVersion: { specName: 'Text', @@ -1477,13 +1659,13 @@ export default { stateVersion: 'u8' }, /** - * Lookup164: frame_system::pallet::Error + * Lookup177: frame_system::pallet::Error **/ FrameSystemError: { _enum: ['InvalidSpecName', 'SpecVersionNeedsToIncrease', 'FailedToExtractRuntimeVersion', 'NonDefaultComposite', 'NonZeroRefCount', 'CallFiltered'] }, /** - * Lookup166: pallet_timestamp::pallet::Call + * Lookup179: pallet_timestamp::pallet::Call **/ PalletTimestampCall: { _enum: { @@ -1493,7 +1675,7 @@ export default { } }, /** - * Lookup168: pallet_indices::pallet::Call + * Lookup181: pallet_indices::pallet::Call **/ PalletIndicesCall: { _enum: { @@ -1524,13 +1706,13 @@ export default { } }, /** - * Lookup171: pallet_indices::pallet::Error + * Lookup184: pallet_indices::pallet::Error **/ PalletIndicesError: { _enum: ['NotAssigned', 'NotOwner', 'InUse', 'NotTransfer', 'Permanent'] }, /** - * Lookup173: pallet_balances::BalanceLock + * Lookup186: pallet_balances::BalanceLock **/ PalletBalancesBalanceLock: { id: '[u8;8]', @@ -1538,20 +1720,20 @@ export default { reasons: 'PalletBalancesReasons' }, /** - * Lookup174: pallet_balances::Reasons + * Lookup187: pallet_balances::Reasons **/ PalletBalancesReasons: { _enum: ['Fee', 'Misc', 'All'] }, /** - * Lookup177: pallet_balances::ReserveData + * Lookup190: pallet_balances::ReserveData **/ PalletBalancesReserveData: { id: '[u8;8]', amount: 'u128' }, /** - * Lookup179: pallet_balances::pallet::Call + * Lookup192: pallet_balances::pallet::Call **/ PalletBalancesCall: { _enum: { @@ -1584,37 +1766,37 @@ export default { } }, /** - * Lookup180: pallet_balances::pallet::Error + * Lookup193: pallet_balances::pallet::Error **/ PalletBalancesError: { _enum: ['VestingBalance', 'LiquidityRestrictions', 'InsufficientBalance', 'ExistentialDeposit', 'KeepAlive', 'ExistingVestingSchedule', 'DeadAccount', 'TooManyReserves'] }, /** - * Lookup182: pallet_transaction_payment::Releases + * Lookup195: pallet_transaction_payment::Releases **/ PalletTransactionPaymentReleases: { _enum: ['V1Ancient', 'V2'] }, /** - * Lookup184: sp_consensus_aura::sr25519::app_sr25519::Public + * Lookup197: sp_consensus_aura::sr25519::app_sr25519::Public **/ SpConsensusAuraSr25519AppSr25519Public: 'SpCoreSr25519Public', /** - * Lookup185: sp_core::sr25519::Public + * Lookup198: sp_core::sr25519::Public **/ SpCoreSr25519Public: '[u8;32]', /** - * Lookup191: spiritnet_runtime::SessionKeys + * Lookup204: spiritnet_runtime::SessionKeys **/ SpiritnetRuntimeSessionKeys: { aura: 'SpConsensusAuraSr25519AppSr25519Public' }, /** - * Lookup194: sp_core::crypto::KeyTypeId + * Lookup207: sp_core::crypto::KeyTypeId **/ SpCoreCryptoKeyTypeId: '[u8;4]', /** - * Lookup195: pallet_session::pallet::Call + * Lookup208: pallet_session::pallet::Call **/ PalletSessionCall: { _enum: { @@ -1629,13 +1811,13 @@ export default { } }, /** - * Lookup196: pallet_session::pallet::Error + * Lookup209: pallet_session::pallet::Error **/ PalletSessionError: { _enum: ['InvalidProof', 'NoAssociatedValidatorId', 'DuplicatedKey', 'NoKeys', 'NoAccount'] }, /** - * Lookup197: parachain_staking::types::RoundInfo + * Lookup210: parachain_staking::types::RoundInfo **/ ParachainStakingRoundInfo: { current: 'u32', @@ -1643,21 +1825,21 @@ export default { length: 'u64' }, /** - * Lookup198: parachain_staking::types::DelegationCounter + * Lookup211: parachain_staking::types::DelegationCounter **/ ParachainStakingDelegationCounter: { round: 'u32', counter: 'u32' }, /** - * Lookup199: parachain_staking::types::Stake + * Lookup212: parachain_staking::types::Stake **/ ParachainStakingStake: { owner: 'AccountId32', amount: 'u128' }, /** - * Lookup200: parachain_staking::types::Candidate + * Lookup213: parachain_staking::types::Candidate **/ ParachainStakingCandidate: { id: 'AccountId32', @@ -1667,11 +1849,11 @@ export default { status: 'ParachainStakingCandidateStatus' }, /** - * Lookup201: parachain_staking::set::OrderedSet, S> + * Lookup214: parachain_staking::set::OrderedSet, S> **/ ParachainStakingSetOrderedSet: 'Vec', /** - * Lookup204: parachain_staking::types::CandidateStatus + * Lookup217: parachain_staking::types::CandidateStatus **/ ParachainStakingCandidateStatus: { _enum: { @@ -1680,35 +1862,35 @@ export default { } }, /** - * Lookup205: parachain_staking::types::TotalStake + * Lookup218: parachain_staking::types::TotalStake **/ ParachainStakingTotalStake: { collators: 'u128', delegators: 'u128' }, /** - * Lookup208: parachain_staking::inflation::InflationInfo + * Lookup221: parachain_staking::inflation::InflationInfo **/ ParachainStakingInflationInflationInfo: { collator: 'ParachainStakingInflationStakingInfo', delegator: 'ParachainStakingInflationStakingInfo' }, /** - * Lookup209: parachain_staking::inflation::StakingInfo + * Lookup222: parachain_staking::inflation::StakingInfo **/ ParachainStakingInflationStakingInfo: { maxRate: 'Perquintill', rewardRate: 'ParachainStakingInflationRewardRate' }, /** - * Lookup210: parachain_staking::inflation::RewardRate + * Lookup223: parachain_staking::inflation::RewardRate **/ ParachainStakingInflationRewardRate: { annual: 'Perquintill', perBlock: 'Perquintill' }, /** - * Lookup215: parachain_staking::pallet::Call + * Lookup228: parachain_staking::pallet::Call **/ ParachainStakingCall: { _enum: { @@ -1775,52 +1957,13 @@ export default { } }, /** - * Lookup216: parachain_staking::pallet::Error + * Lookup229: parachain_staking::pallet::Error **/ ParachainStakingError: { _enum: ['DelegatorNotFound', 'CandidateNotFound', 'DelegatorExists', 'CandidateExists', 'ValStakeZero', 'ValStakeBelowMin', 'ValStakeAboveMax', 'DelegationBelowMin', 'AlreadyLeaving', 'NotLeaving', 'CannotLeaveYet', 'CannotJoinBeforeUnlocking', 'AlreadyDelegating', 'NotYetDelegating', 'DelegationsPerRoundExceeded', 'TooManyDelegators', 'TooFewCollatorCandidates', 'CannotStakeIfLeaving', 'CannotDelegateIfLeaving', 'MaxCollatorsPerDelegatorExceeded', 'AlreadyDelegatedCollator', 'DelegationNotFound', 'Underflow', 'CannotSetAboveMax', 'CannotSetBelowMin', 'InvalidSchedule', 'NoMoreUnstaking', 'TooEarly', 'StakeNotFound', 'UnstakingIsEmpty', 'RewardsNotFound'] }, /** - * Lookup218: pallet_authorship::UncleEntryItem - **/ - PalletAuthorshipUncleEntryItem: { - _enum: { - InclusionHeight: 'u64', - Uncle: '(H256,Option)' - } - }, - /** - * Lookup221: pallet_authorship::pallet::Call - **/ - PalletAuthorshipCall: { - _enum: { - set_uncles: { - newUncles: 'Vec' - } - } - }, - /** - * Lookup223: sp_runtime::generic::header::Header - **/ - SpRuntimeHeader: { - parentHash: 'H256', - number: 'Compact', - stateRoot: 'H256', - extrinsicsRoot: 'H256', - digest: 'SpRuntimeDigest' - }, - /** - * Lookup224: sp_runtime::traits::BlakeTwo256 - **/ - SpRuntimeBlakeTwo256: 'Null', - /** - * Lookup225: pallet_authorship::pallet::Error - **/ - PalletAuthorshipError: { - _enum: ['InvalidUncleParent', 'UnclesAlreadySet', 'TooManyUncles', 'GenesisUncle', 'TooHighUncle', 'UncleAlreadyIncluded', 'OldUncle'] - }, - /** - * Lookup228: frame_support::traits::preimages::Bounded + * Lookup232: frame_support::traits::preimages::Bounded **/ FrameSupportPreimagesBounded: { _enum: { @@ -1841,7 +1984,7 @@ export default { } }, /** - * Lookup230: pallet_democracy::pallet::Call + * Lookup234: pallet_democracy::pallet::Call **/ PalletDemocracyCall: { _enum: { @@ -1906,13 +2049,13 @@ export default { } }, /** - * Lookup231: pallet_democracy::conviction::Conviction + * Lookup235: pallet_democracy::conviction::Conviction **/ PalletDemocracyConviction: { _enum: ['None', 'Locked1x', 'Locked2x', 'Locked3x', 'Locked4x', 'Locked5x', 'Locked6x'] }, /** - * Lookup233: pallet_collective::pallet::Call + * Lookup237: pallet_collective::pallet::Call **/ PalletCollectiveCall: { _enum: { @@ -1953,7 +2096,7 @@ export default { } }, /** - * Lookup237: pallet_membership::pallet::Call + * Lookup242: pallet_membership::pallet::Call **/ PalletMembershipCall: { _enum: { @@ -1983,7 +2126,7 @@ export default { } }, /** - * Lookup238: pallet_treasury::pallet::Call + * Lookup243: pallet_treasury::pallet::Call **/ PalletTreasuryCall: { _enum: { @@ -2007,7 +2150,7 @@ export default { } }, /** - * Lookup239: pallet_utility::pallet::Call + * Lookup244: pallet_utility::pallet::Call **/ PalletUtilityCall: { _enum: { @@ -2035,7 +2178,7 @@ export default { } }, /** - * Lookup241: spiritnet_runtime::OriginCaller + * Lookup246: spiritnet_runtime::OriginCaller **/ SpiritnetRuntimeOriginCaller: { _enum: { @@ -2127,7 +2270,7 @@ export default { } }, /** - * Lookup242: frame_support::dispatch::RawOrigin + * Lookup247: frame_support::dispatch::RawOrigin **/ FrameSupportDispatchRawOrigin: { _enum: { @@ -2137,7 +2280,7 @@ export default { } }, /** - * Lookup243: pallet_collective::RawOrigin + * Lookup248: pallet_collective::RawOrigin **/ PalletCollectiveRawOrigin: { _enum: { @@ -2147,23 +2290,23 @@ export default { } }, /** - * Lookup245: did::origin::DidRawOrigin + * Lookup250: did::origin::DidRawOrigin **/ DidOriginDidRawOrigin: { id: 'AccountId32', submitter: 'AccountId32' }, /** - * Lookup246: pallet_xcm::pallet::Origin + * Lookup251: pallet_xcm::pallet::Origin **/ PalletXcmOrigin: { _enum: { - Xcm: 'XcmV1MultiLocation', - Response: 'XcmV1MultiLocation' + Xcm: 'XcmV3MultiLocation', + Response: 'XcmV3MultiLocation' } }, /** - * Lookup247: cumulus_pallet_xcm::pallet::Origin + * Lookup252: cumulus_pallet_xcm::pallet::Origin **/ CumulusPalletXcmOrigin: { _enum: { @@ -2172,11 +2315,11 @@ export default { } }, /** - * Lookup248: sp_core::Void + * Lookup253: sp_core::Void **/ SpCoreVoid: 'Null', /** - * Lookup249: pallet_vesting::pallet::Call + * Lookup254: pallet_vesting::pallet::Call **/ PalletVestingCall: { _enum: { @@ -2200,7 +2343,7 @@ export default { } }, /** - * Lookup250: pallet_vesting::vesting_info::VestingInfo + * Lookup255: pallet_vesting::vesting_info::VestingInfo **/ PalletVestingVestingInfo: { locked: 'u128', @@ -2208,7 +2351,7 @@ export default { startingBlock: 'u64' }, /** - * Lookup251: pallet_scheduler::pallet::Call + * Lookup256: pallet_scheduler::pallet::Call **/ PalletSchedulerCall: { _enum: { @@ -2248,7 +2391,7 @@ export default { } }, /** - * Lookup253: pallet_proxy::pallet::Call + * Lookup258: pallet_proxy::pallet::Call **/ PalletProxyCall: { _enum: { @@ -2301,7 +2444,7 @@ export default { } }, /** - * Lookup255: pallet_preimage::pallet::Call + * Lookup260: pallet_preimage::pallet::Call **/ PalletPreimageCall: { _enum: { @@ -2329,7 +2472,7 @@ export default { } }, /** - * Lookup257: pallet_tips::pallet::Call + * Lookup262: pallet_tips::pallet::Call **/ PalletTipsCall: { _enum: { @@ -2370,7 +2513,7 @@ export default { } }, /** - * Lookup258: ctype::pallet::Call + * Lookup263: ctype::pallet::Call **/ CtypeCall: { _enum: { @@ -2384,7 +2527,7 @@ export default { } }, /** - * Lookup259: attestation::pallet::Call + * Lookup264: attestation::pallet::Call **/ AttestationCall: { _enum: { @@ -2413,7 +2556,7 @@ export default { } }, /** - * Lookup261: runtime_common::authorization::PalletAuthorize> + * Lookup266: runtime_common::authorization::PalletAuthorize> **/ RuntimeCommonAuthorizationPalletAuthorize: { _enum: { @@ -2421,18 +2564,18 @@ export default { } }, /** - * Lookup262: delegation::access_control::DelegationAc + * Lookup267: delegation::access_control::DelegationAc **/ DelegationAccessControlDelegationAc: { subjectNodeId: 'H256', maxChecks: 'u32' }, /** - * Lookup263: spiritnet_runtime::Runtime + * Lookup268: spiritnet_runtime::Runtime **/ SpiritnetRuntimeRuntime: 'Null', /** - * Lookup264: delegation::pallet::Call + * Lookup269: delegation::pallet::Call **/ DelegationCall: { _enum: { @@ -2469,7 +2612,7 @@ export default { } }, /** - * Lookup265: did::did_details::DidSignature + * Lookup270: did::did_details::DidSignature **/ DidDidDetailsDidSignature: { _enum: { @@ -2479,19 +2622,19 @@ export default { } }, /** - * Lookup266: sp_core::ed25519::Signature + * Lookup271: sp_core::ed25519::Signature **/ SpCoreEd25519Signature: '[u8;64]', /** - * Lookup268: sp_core::sr25519::Signature + * Lookup273: sp_core::sr25519::Signature **/ SpCoreSr25519Signature: '[u8;64]', /** - * Lookup269: sp_core::ecdsa::Signature + * Lookup274: sp_core::ecdsa::Signature **/ SpCoreEcdsaSignature: '[u8;65]', /** - * Lookup271: did::pallet::Call + * Lookup276: did::pallet::Call **/ DidCall: { _enum: { @@ -2540,7 +2683,7 @@ export default { } }, /** - * Lookup272: did::did_details::DidCreationDetails + * Lookup277: did::did_details::DidCreationDetails **/ DidDidDetailsDidCreationDetails: { did: 'AccountId32', @@ -2551,7 +2694,7 @@ export default { newServiceDetails: 'Vec' }, /** - * Lookup274: did::did_details::DidEncryptionKey + * Lookup279: did::did_details::DidEncryptionKey **/ DidDidDetailsDidEncryptionKey: { _enum: { @@ -2559,7 +2702,7 @@ export default { } }, /** - * Lookup278: did::did_details::DidVerificationKey + * Lookup283: did::did_details::DidVerificationKey **/ DidDidDetailsDidVerificationKey: { _enum: { @@ -2569,15 +2712,15 @@ export default { } }, /** - * Lookup279: sp_core::ed25519::Public + * Lookup284: sp_core::ed25519::Public **/ SpCoreEd25519Public: '[u8;32]', /** - * Lookup280: sp_core::ecdsa::Public + * Lookup285: sp_core::ecdsa::Public **/ SpCoreEcdsaPublic: '[u8;33]', /** - * Lookup283: did::service_endpoints::DidEndpoint + * Lookup288: did::service_endpoints::DidEndpoint **/ DidServiceEndpointsDidEndpoint: { id: 'Bytes', @@ -2585,7 +2728,7 @@ export default { urls: 'Vec' }, /** - * Lookup291: did::did_details::DidAuthorizedCallOperation + * Lookup296: did::did_details::DidAuthorizedCallOperation **/ DidDidDetailsDidAuthorizedCallOperation: { did: 'AccountId32', @@ -2595,7 +2738,7 @@ export default { submitter: 'AccountId32' }, /** - * Lookup292: pallet_did_lookup::pallet::Call + * Lookup297: pallet_did_lookup::pallet::Call **/ PalletDidLookupCall: { _enum: { @@ -2615,21 +2758,271 @@ export default { account: 'PalletDidLookupLinkableAccountLinkableAccountId', }, update_deposit: { - account: 'PalletDidLookupLinkableAccountLinkableAccountId' + account: 'PalletDidLookupLinkableAccountLinkableAccountId', + }, + __Unused7: 'Null', + __Unused8: 'Null', + __Unused9: 'Null', + __Unused10: 'Null', + __Unused11: 'Null', + __Unused12: 'Null', + __Unused13: 'Null', + __Unused14: 'Null', + __Unused15: 'Null', + __Unused16: 'Null', + __Unused17: 'Null', + __Unused18: 'Null', + __Unused19: 'Null', + __Unused20: 'Null', + __Unused21: 'Null', + __Unused22: 'Null', + __Unused23: 'Null', + __Unused24: 'Null', + __Unused25: 'Null', + __Unused26: 'Null', + __Unused27: 'Null', + __Unused28: 'Null', + __Unused29: 'Null', + __Unused30: 'Null', + __Unused31: 'Null', + __Unused32: 'Null', + __Unused33: 'Null', + __Unused34: 'Null', + __Unused35: 'Null', + __Unused36: 'Null', + __Unused37: 'Null', + __Unused38: 'Null', + __Unused39: 'Null', + __Unused40: 'Null', + __Unused41: 'Null', + __Unused42: 'Null', + __Unused43: 'Null', + __Unused44: 'Null', + __Unused45: 'Null', + __Unused46: 'Null', + __Unused47: 'Null', + __Unused48: 'Null', + __Unused49: 'Null', + __Unused50: 'Null', + __Unused51: 'Null', + __Unused52: 'Null', + __Unused53: 'Null', + __Unused54: 'Null', + __Unused55: 'Null', + __Unused56: 'Null', + __Unused57: 'Null', + __Unused58: 'Null', + __Unused59: 'Null', + __Unused60: 'Null', + __Unused61: 'Null', + __Unused62: 'Null', + __Unused63: 'Null', + __Unused64: 'Null', + __Unused65: 'Null', + __Unused66: 'Null', + __Unused67: 'Null', + __Unused68: 'Null', + __Unused69: 'Null', + __Unused70: 'Null', + __Unused71: 'Null', + __Unused72: 'Null', + __Unused73: 'Null', + __Unused74: 'Null', + __Unused75: 'Null', + __Unused76: 'Null', + __Unused77: 'Null', + __Unused78: 'Null', + __Unused79: 'Null', + __Unused80: 'Null', + __Unused81: 'Null', + __Unused82: 'Null', + __Unused83: 'Null', + __Unused84: 'Null', + __Unused85: 'Null', + __Unused86: 'Null', + __Unused87: 'Null', + __Unused88: 'Null', + __Unused89: 'Null', + __Unused90: 'Null', + __Unused91: 'Null', + __Unused92: 'Null', + __Unused93: 'Null', + __Unused94: 'Null', + __Unused95: 'Null', + __Unused96: 'Null', + __Unused97: 'Null', + __Unused98: 'Null', + __Unused99: 'Null', + __Unused100: 'Null', + __Unused101: 'Null', + __Unused102: 'Null', + __Unused103: 'Null', + __Unused104: 'Null', + __Unused105: 'Null', + __Unused106: 'Null', + __Unused107: 'Null', + __Unused108: 'Null', + __Unused109: 'Null', + __Unused110: 'Null', + __Unused111: 'Null', + __Unused112: 'Null', + __Unused113: 'Null', + __Unused114: 'Null', + __Unused115: 'Null', + __Unused116: 'Null', + __Unused117: 'Null', + __Unused118: 'Null', + __Unused119: 'Null', + __Unused120: 'Null', + __Unused121: 'Null', + __Unused122: 'Null', + __Unused123: 'Null', + __Unused124: 'Null', + __Unused125: 'Null', + __Unused126: 'Null', + __Unused127: 'Null', + __Unused128: 'Null', + __Unused129: 'Null', + __Unused130: 'Null', + __Unused131: 'Null', + __Unused132: 'Null', + __Unused133: 'Null', + __Unused134: 'Null', + __Unused135: 'Null', + __Unused136: 'Null', + __Unused137: 'Null', + __Unused138: 'Null', + __Unused139: 'Null', + __Unused140: 'Null', + __Unused141: 'Null', + __Unused142: 'Null', + __Unused143: 'Null', + __Unused144: 'Null', + __Unused145: 'Null', + __Unused146: 'Null', + __Unused147: 'Null', + __Unused148: 'Null', + __Unused149: 'Null', + __Unused150: 'Null', + __Unused151: 'Null', + __Unused152: 'Null', + __Unused153: 'Null', + __Unused154: 'Null', + __Unused155: 'Null', + __Unused156: 'Null', + __Unused157: 'Null', + __Unused158: 'Null', + __Unused159: 'Null', + __Unused160: 'Null', + __Unused161: 'Null', + __Unused162: 'Null', + __Unused163: 'Null', + __Unused164: 'Null', + __Unused165: 'Null', + __Unused166: 'Null', + __Unused167: 'Null', + __Unused168: 'Null', + __Unused169: 'Null', + __Unused170: 'Null', + __Unused171: 'Null', + __Unused172: 'Null', + __Unused173: 'Null', + __Unused174: 'Null', + __Unused175: 'Null', + __Unused176: 'Null', + __Unused177: 'Null', + __Unused178: 'Null', + __Unused179: 'Null', + __Unused180: 'Null', + __Unused181: 'Null', + __Unused182: 'Null', + __Unused183: 'Null', + __Unused184: 'Null', + __Unused185: 'Null', + __Unused186: 'Null', + __Unused187: 'Null', + __Unused188: 'Null', + __Unused189: 'Null', + __Unused190: 'Null', + __Unused191: 'Null', + __Unused192: 'Null', + __Unused193: 'Null', + __Unused194: 'Null', + __Unused195: 'Null', + __Unused196: 'Null', + __Unused197: 'Null', + __Unused198: 'Null', + __Unused199: 'Null', + __Unused200: 'Null', + __Unused201: 'Null', + __Unused202: 'Null', + __Unused203: 'Null', + __Unused204: 'Null', + __Unused205: 'Null', + __Unused206: 'Null', + __Unused207: 'Null', + __Unused208: 'Null', + __Unused209: 'Null', + __Unused210: 'Null', + __Unused211: 'Null', + __Unused212: 'Null', + __Unused213: 'Null', + __Unused214: 'Null', + __Unused215: 'Null', + __Unused216: 'Null', + __Unused217: 'Null', + __Unused218: 'Null', + __Unused219: 'Null', + __Unused220: 'Null', + __Unused221: 'Null', + __Unused222: 'Null', + __Unused223: 'Null', + __Unused224: 'Null', + __Unused225: 'Null', + __Unused226: 'Null', + __Unused227: 'Null', + __Unused228: 'Null', + __Unused229: 'Null', + __Unused230: 'Null', + __Unused231: 'Null', + __Unused232: 'Null', + __Unused233: 'Null', + __Unused234: 'Null', + __Unused235: 'Null', + __Unused236: 'Null', + __Unused237: 'Null', + __Unused238: 'Null', + __Unused239: 'Null', + __Unused240: 'Null', + __Unused241: 'Null', + __Unused242: 'Null', + __Unused243: 'Null', + __Unused244: 'Null', + __Unused245: 'Null', + __Unused246: 'Null', + __Unused247: 'Null', + __Unused248: 'Null', + __Unused249: 'Null', + __Unused250: 'Null', + __Unused251: 'Null', + __Unused252: 'Null', + __Unused253: 'Null', + migrate: { + limit: 'u32' } } }, /** - * Lookup293: pallet_did_lookup::associate_account_request::AssociateAccountRequest + * Lookup298: pallet_did_lookup::associate_account_request::AssociateAccountRequest **/ PalletDidLookupAssociateAccountRequest: { _enum: { - Dotsama: '(AccountId32,SpRuntimeMultiSignature)', + Polkadot: '(AccountId32,SpRuntimeMultiSignature)', Ethereum: '(PalletDidLookupAccountAccountId20,PalletDidLookupAccountEthereumSignature)' } }, /** - * Lookup294: sp_runtime::MultiSignature + * Lookup299: sp_runtime::MultiSignature **/ SpRuntimeMultiSignature: { _enum: { @@ -2639,11 +3032,11 @@ export default { } }, /** - * Lookup295: pallet_did_lookup::account::EthereumSignature + * Lookup300: pallet_did_lookup::account::EthereumSignature **/ PalletDidLookupAccountEthereumSignature: 'SpCoreEcdsaSignature', /** - * Lookup296: pallet_web3_names::pallet::Call + * Lookup301: pallet_web3_names::pallet::Call **/ PalletWeb3NamesCall: { _enum: { @@ -2667,7 +3060,7 @@ export default { } }, /** - * Lookup297: public_credentials::pallet::Call + * Lookup302: public_credentials::pallet::Call **/ PublicCredentialsCall: { _enum: { @@ -2698,7 +3091,7 @@ export default { } }, /** - * Lookup298: public_credentials::credentials::Credential, sp_core::bounded::bounded_vec::BoundedVec, runtime_common::authorization::PalletAuthorize>> + * Lookup303: public_credentials::credentials::Credential, sp_core::bounded::bounded_vec::BoundedVec, runtime_common::authorization::PalletAuthorize>> **/ PublicCredentialsCredentialsCredential: { ctypeHash: 'H256', @@ -2707,7 +3100,7 @@ export default { authorization: 'Option' }, /** - * Lookup301: cumulus_pallet_parachain_system::pallet::Call + * Lookup306: cumulus_pallet_parachain_system::pallet::Call **/ CumulusPalletParachainSystemCall: { _enum: { @@ -2726,7 +3119,7 @@ export default { } }, /** - * Lookup302: cumulus_primitives_parachain_inherent::ParachainInherentData + * Lookup307: cumulus_primitives_parachain_inherent::ParachainInherentData **/ CumulusPrimitivesParachainInherentParachainInherentData: { validationData: 'PolkadotPrimitivesV2PersistedValidationData', @@ -2735,7 +3128,7 @@ export default { horizontalMessages: 'BTreeMap>' }, /** - * Lookup303: polkadot_primitives::v2::PersistedValidationData + * Lookup308: polkadot_primitives::v2::PersistedValidationData **/ PolkadotPrimitivesV2PersistedValidationData: { parentHead: 'Bytes', @@ -2744,33 +3137,33 @@ export default { maxPovSize: 'u32' }, /** - * Lookup305: sp_trie::storage_proof::StorageProof + * Lookup310: sp_trie::storage_proof::StorageProof **/ SpTrieStorageProof: { trieNodes: 'BTreeSet' }, /** - * Lookup308: polkadot_core_primitives::InboundDownwardMessage + * Lookup313: polkadot_core_primitives::InboundDownwardMessage **/ PolkadotCorePrimitivesInboundDownwardMessage: { sentAt: 'u32', msg: 'Bytes' }, /** - * Lookup311: polkadot_core_primitives::InboundHrmpMessage + * Lookup316: polkadot_core_primitives::InboundHrmpMessage **/ PolkadotCorePrimitivesInboundHrmpMessage: { sentAt: 'u32', data: 'Bytes' }, /** - * Lookup314: cumulus_pallet_xcmp_queue::pallet::Call + * Lookup319: cumulus_pallet_xcmp_queue::pallet::Call **/ CumulusPalletXcmpQueueCall: { _enum: { service_overweight: { index: 'u64', - weightLimit: 'u64', + weightLimit: 'SpWeightsWeightV2Weight', }, suspend_xcm_execution: 'Null', resume_xcm_execution: 'Null', @@ -2796,24 +3189,24 @@ export default { _alias: { new_: 'new', }, - new_: 'u64', + new_: 'SpWeightsWeightV2Weight', }, update_weight_restrict_decay: { _alias: { new_: 'new', }, - new_: 'u64', + new_: 'SpWeightsWeightV2Weight', }, update_xcmp_max_individual_weight: { _alias: { new_: 'new', }, - new_: 'u64' + new_: 'SpWeightsWeightV2Weight' } } }, /** - * Lookup315: pallet_xcm::pallet::Call + * Lookup320: pallet_xcm::pallet::Call **/ PalletXcmCall: { _enum: { @@ -2835,10 +3228,10 @@ export default { }, execute: { message: 'XcmVersionedXcm', - maxWeight: 'u64', + maxWeight: 'SpWeightsWeightV2Weight', }, force_xcm_version: { - location: 'XcmV1MultiLocation', + location: 'XcmV3MultiLocation', xcmVersion: 'u32', }, force_default_xcm_version: { @@ -2855,60 +3248,57 @@ export default { beneficiary: 'XcmVersionedMultiLocation', assets: 'XcmVersionedMultiAssets', feeAssetItem: 'u32', - weightLimit: 'XcmV2WeightLimit', + weightLimit: 'XcmV3WeightLimit', }, limited_teleport_assets: { dest: 'XcmVersionedMultiLocation', beneficiary: 'XcmVersionedMultiLocation', assets: 'XcmVersionedMultiAssets', feeAssetItem: 'u32', - weightLimit: 'XcmV2WeightLimit' + weightLimit: 'XcmV3WeightLimit' } } }, /** - * Lookup316: xcm::VersionedXcm + * Lookup321: xcm::VersionedXcm **/ XcmVersionedXcm: { _enum: { - V0: 'XcmV0Xcm', - V1: 'XcmV1Xcm', - V2: 'XcmV2Xcm' + __Unused0: 'Null', + __Unused1: 'Null', + V2: 'XcmV2Xcm', + V3: 'XcmV3Xcm' } }, /** - * Lookup317: xcm::v0::Xcm + * Lookup322: xcm::v2::Xcm **/ - XcmV0Xcm: { + XcmV2Xcm: 'Vec', + /** + * Lookup324: xcm::v2::Instruction + **/ + XcmV2Instruction: { _enum: { - WithdrawAsset: { - assets: 'Vec', - effects: 'Vec', - }, - ReserveAssetDeposit: { - assets: 'Vec', - effects: 'Vec', - }, - TeleportAsset: { - assets: 'Vec', - effects: 'Vec', - }, + WithdrawAsset: 'XcmV2MultiassetMultiAssets', + ReserveAssetDeposited: 'XcmV2MultiassetMultiAssets', + ReceiveTeleportedAsset: 'XcmV2MultiassetMultiAssets', QueryResponse: { queryId: 'Compact', - response: 'XcmV0Response', + response: 'XcmV2Response', + maxWeight: 'Compact', }, TransferAsset: { - assets: 'Vec', - dest: 'XcmV0MultiLocation', + assets: 'XcmV2MultiassetMultiAssets', + beneficiary: 'XcmV2MultiLocation', }, TransferReserveAsset: { - assets: 'Vec', - dest: 'XcmV0MultiLocation', - effects: 'Vec', + assets: 'XcmV2MultiassetMultiAssets', + dest: 'XcmV2MultiLocation', + xcm: 'XcmV2Xcm', }, Transact: { - originType: 'XcmV0OriginKind', - requireWeightAtMost: 'u64', + originType: 'XcmV2OriginKind', + requireWeightAtMost: 'Compact', call: 'XcmDoubleEncoded', }, HrmpNewChannelOpenRequest: { @@ -2924,184 +3314,152 @@ export default { sender: 'Compact', recipient: 'Compact', }, - RelayedFrom: { - who: 'XcmV0MultiLocation', - message: 'XcmV0Xcm' - } - } - }, - /** - * Lookup319: xcm::v0::order::Order - **/ - XcmV0Order: { - _enum: { - Null: 'Null', + ClearOrigin: 'Null', + DescendOrigin: 'XcmV2MultilocationJunctions', + ReportError: { + queryId: 'Compact', + dest: 'XcmV2MultiLocation', + maxResponseWeight: 'Compact', + }, DepositAsset: { - assets: 'Vec', - dest: 'XcmV0MultiLocation', + assets: 'XcmV2MultiassetMultiAssetFilter', + maxAssets: 'Compact', + beneficiary: 'XcmV2MultiLocation', }, DepositReserveAsset: { - assets: 'Vec', - dest: 'XcmV0MultiLocation', - effects: 'Vec', + assets: 'XcmV2MultiassetMultiAssetFilter', + maxAssets: 'Compact', + dest: 'XcmV2MultiLocation', + xcm: 'XcmV2Xcm', }, ExchangeAsset: { - give: 'Vec', - receive: 'Vec', + give: 'XcmV2MultiassetMultiAssetFilter', + receive: 'XcmV2MultiassetMultiAssets', }, InitiateReserveWithdraw: { - assets: 'Vec', - reserve: 'XcmV0MultiLocation', - effects: 'Vec', + assets: 'XcmV2MultiassetMultiAssetFilter', + reserve: 'XcmV2MultiLocation', + xcm: 'XcmV2Xcm', }, InitiateTeleport: { - assets: 'Vec', - dest: 'XcmV0MultiLocation', - effects: 'Vec', + assets: 'XcmV2MultiassetMultiAssetFilter', + dest: 'XcmV2MultiLocation', + xcm: 'XcmV2Xcm', }, QueryHolding: { queryId: 'Compact', - dest: 'XcmV0MultiLocation', - assets: 'Vec', + dest: 'XcmV2MultiLocation', + assets: 'XcmV2MultiassetMultiAssetFilter', + maxResponseWeight: 'Compact', }, BuyExecution: { - fees: 'XcmV0MultiAsset', - weight: 'u64', - debt: 'u64', - haltOnError: 'bool', - xcm: 'Vec' - } + fees: 'XcmV2MultiAsset', + weightLimit: 'XcmV2WeightLimit', + }, + RefundSurplus: 'Null', + SetErrorHandler: 'XcmV2Xcm', + SetAppendix: 'XcmV2Xcm', + ClearError: 'Null', + ClaimAsset: { + assets: 'XcmV2MultiassetMultiAssets', + ticket: 'XcmV2MultiLocation', + }, + Trap: 'Compact', + SubscribeVersion: { + queryId: 'Compact', + maxResponseWeight: 'Compact', + }, + UnsubscribeVersion: 'Null' + } + }, + /** + * Lookup325: xcm::v2::Response + **/ + XcmV2Response: { + _enum: { + Null: 'Null', + Assets: 'XcmV2MultiassetMultiAssets', + ExecutionResult: 'Option<(u32,XcmV2TraitsError)>', + Version: 'u32' } }, /** - * Lookup321: xcm::v0::Response + * Lookup328: xcm::v2::traits::Error **/ - XcmV0Response: { + XcmV2TraitsError: { _enum: { - Assets: 'Vec' + Overflow: 'Null', + Unimplemented: 'Null', + UntrustedReserveLocation: 'Null', + UntrustedTeleportLocation: 'Null', + MultiLocationFull: 'Null', + MultiLocationNotInvertible: 'Null', + BadOrigin: 'Null', + InvalidLocation: 'Null', + AssetNotFound: 'Null', + FailedToTransactAsset: 'Null', + NotWithdrawable: 'Null', + LocationCannotHold: 'Null', + ExceedsMaxMessageSize: 'Null', + DestinationUnsupported: 'Null', + Transport: 'Null', + Unroutable: 'Null', + UnknownClaim: 'Null', + FailedToDecode: 'Null', + MaxWeightInvalid: 'Null', + NotHoldingFees: 'Null', + TooExpensive: 'Null', + Trap: 'u64', + UnhandledXcmVersion: 'Null', + WeightLimitReached: 'u64', + Barrier: 'Null', + WeightNotComputable: 'Null' } }, /** - * Lookup322: xcm::v1::Xcm + * Lookup329: xcm::v2::multiasset::MultiAssetFilter **/ - XcmV1Xcm: { + XcmV2MultiassetMultiAssetFilter: { _enum: { - WithdrawAsset: { - assets: 'XcmV1MultiassetMultiAssets', - effects: 'Vec', - }, - ReserveAssetDeposited: { - assets: 'XcmV1MultiassetMultiAssets', - effects: 'Vec', - }, - ReceiveTeleportedAsset: { - assets: 'XcmV1MultiassetMultiAssets', - effects: 'Vec', - }, - QueryResponse: { - queryId: 'Compact', - response: 'XcmV1Response', - }, - TransferAsset: { - assets: 'XcmV1MultiassetMultiAssets', - beneficiary: 'XcmV1MultiLocation', - }, - TransferReserveAsset: { - assets: 'XcmV1MultiassetMultiAssets', - dest: 'XcmV1MultiLocation', - effects: 'Vec', - }, - Transact: { - originType: 'XcmV0OriginKind', - requireWeightAtMost: 'u64', - call: 'XcmDoubleEncoded', - }, - HrmpNewChannelOpenRequest: { - sender: 'Compact', - maxMessageSize: 'Compact', - maxCapacity: 'Compact', - }, - HrmpChannelAccepted: { - recipient: 'Compact', - }, - HrmpChannelClosing: { - initiator: 'Compact', - sender: 'Compact', - recipient: 'Compact', - }, - RelayedFrom: { - who: 'XcmV1MultilocationJunctions', - message: 'XcmV1Xcm', - }, - SubscribeVersion: { - queryId: 'Compact', - maxResponseWeight: 'Compact', - }, - UnsubscribeVersion: 'Null' + Definite: 'XcmV2MultiassetMultiAssets', + Wild: 'XcmV2MultiassetWildMultiAsset' } }, /** - * Lookup324: xcm::v1::order::Order + * Lookup330: xcm::v2::multiasset::WildMultiAsset **/ - XcmV1Order: { + XcmV2MultiassetWildMultiAsset: { _enum: { - Noop: 'Null', - DepositAsset: { - assets: 'XcmV1MultiassetMultiAssetFilter', - maxAssets: 'u32', - beneficiary: 'XcmV1MultiLocation', - }, - DepositReserveAsset: { - assets: 'XcmV1MultiassetMultiAssetFilter', - maxAssets: 'u32', - dest: 'XcmV1MultiLocation', - effects: 'Vec', - }, - ExchangeAsset: { - give: 'XcmV1MultiassetMultiAssetFilter', - receive: 'XcmV1MultiassetMultiAssets', - }, - InitiateReserveWithdraw: { - assets: 'XcmV1MultiassetMultiAssetFilter', - reserve: 'XcmV1MultiLocation', - effects: 'Vec', - }, - InitiateTeleport: { - assets: 'XcmV1MultiassetMultiAssetFilter', - dest: 'XcmV1MultiLocation', - effects: 'Vec', - }, - QueryHolding: { - queryId: 'Compact', - dest: 'XcmV1MultiLocation', - assets: 'XcmV1MultiassetMultiAssetFilter', - }, - BuyExecution: { - fees: 'XcmV1MultiAsset', - weight: 'u64', - debt: 'u64', - haltOnError: 'bool', - instructions: 'Vec' + All: 'Null', + AllOf: { + id: 'XcmV2MultiassetAssetId', + fun: 'XcmV2MultiassetWildFungibility' } } }, /** - * Lookup326: xcm::v1::Response + * Lookup331: xcm::v2::multiasset::WildFungibility **/ - XcmV1Response: { + XcmV2MultiassetWildFungibility: { + _enum: ['Fungible', 'NonFungible'] + }, + /** + * Lookup332: xcm::v2::WeightLimit + **/ + XcmV2WeightLimit: { _enum: { - Assets: 'XcmV1MultiassetMultiAssets', - Version: 'u32' + Unlimited: 'Null', + Limited: 'Compact' } }, /** - * Lookup340: cumulus_pallet_dmp_queue::pallet::Call + * Lookup341: cumulus_pallet_dmp_queue::pallet::Call **/ CumulusPalletDmpQueueCall: { _enum: { service_overweight: { index: 'u64', - weightLimit: 'u64' + weightLimit: 'SpWeightsWeightV2Weight' } } }, @@ -3319,7 +3677,7 @@ export default { * Lookup402: ctype::pallet::Error **/ CtypeError: { - _enum: ['CTypeNotFound', 'CTypeAlreadyExists', 'UnableToPayFees'] + _enum: ['NotFound', 'AlreadyExists', 'UnableToPayFees'] }, /** * Lookup403: attestation::attestations::AttestationDetails @@ -3342,7 +3700,7 @@ export default { * Lookup406: attestation::pallet::Error **/ AttestationError: { - _enum: ['AlreadyAttested', 'AlreadyRevoked', 'AttestationNotFound', 'CTypeMismatch', 'Unauthorized', 'MaxDelegatedAttestationsExceeded'] + _enum: ['AlreadyAttested', 'AlreadyRevoked', 'NotFound', 'CTypeMismatch', 'NotAuthorized', 'MaxDelegatedAttestationsExceeded'] }, /** * Lookup407: delegation::delegation_hierarchy::DelegationNode @@ -3355,7 +3713,7 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup410: delegation::delegation_hierarchy::DelegationDetails + * Lookup411: delegation::delegation_hierarchy::DelegationDetails **/ DelegationDelegationHierarchyDelegationDetails: { owner: 'AccountId32', @@ -3363,19 +3721,19 @@ export default { permissions: 'DelegationDelegationHierarchyPermissions' }, /** - * Lookup411: delegation::delegation_hierarchy::DelegationHierarchyDetails + * Lookup412: delegation::delegation_hierarchy::DelegationHierarchyDetails **/ DelegationDelegationHierarchyDelegationHierarchyDetails: { ctypeHash: 'H256' }, /** - * Lookup412: delegation::pallet::Error + * Lookup413: delegation::pallet::Error **/ DelegationError: { - _enum: ['DelegationAlreadyExists', 'InvalidDelegateSignature', 'DelegationNotFound', 'DelegateNotFound', 'HierarchyAlreadyExists', 'HierarchyNotFound', 'MaxSearchDepthReached', 'NotOwnerOfParentDelegation', 'NotOwnerOfDelegationHierarchy', 'ParentDelegationNotFound', 'ParentDelegationRevoked', 'UnauthorizedRevocation', 'UnauthorizedRemoval', 'UnauthorizedDelegation', 'AccessDenied', 'ExceededRevocationBounds', 'ExceededRemovalBounds', 'MaxRevocationsTooLarge', 'MaxRemovalsTooLarge', 'MaxParentChecksTooLarge', 'InternalError', 'MaxChildrenExceeded'] + _enum: ['DelegationAlreadyExists', 'InvalidDelegateSignature', 'DelegationNotFound', 'DelegateNotFound', 'HierarchyAlreadyExists', 'HierarchyNotFound', 'MaxSearchDepthReached', 'NotOwnerOfParentDelegation', 'NotOwnerOfDelegationHierarchy', 'ParentDelegationNotFound', 'ParentDelegationRevoked', 'UnauthorizedRevocation', 'UnauthorizedRemoval', 'UnauthorizedDelegation', 'AccessDenied', 'ExceededRevocationBounds', 'ExceededRemovalBounds', 'MaxRevocationsTooLarge', 'MaxRemovalsTooLarge', 'MaxParentChecksTooLarge', 'Internal', 'MaxChildrenExceeded'] }, /** - * Lookup413: did::did_details::DidDetails + * Lookup414: did::did_details::DidDetails **/ DidDidDetails: { authenticationKey: 'H256', @@ -3387,14 +3745,14 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup416: did::did_details::DidPublicKeyDetails + * Lookup417: did::did_details::DidPublicKeyDetails **/ DidDidDetailsDidPublicKeyDetails: { key: 'DidDidDetailsDidPublicKey', blockNumber: 'u64' }, /** - * Lookup417: did::did_details::DidPublicKey + * Lookup418: did::did_details::DidPublicKey **/ DidDidDetailsDidPublicKey: { _enum: { @@ -3403,26 +3761,45 @@ export default { } }, /** - * Lookup422: did::pallet::Error + * Lookup423: did::pallet::Error **/ DidError: { - _enum: ['InvalidSignatureFormat', 'InvalidSignature', 'DidAlreadyPresent', 'DidNotPresent', 'VerificationKeyNotPresent', 'InvalidNonce', 'UnsupportedDidAuthorizationCall', 'InvalidDidAuthorizationCall', 'MaxKeyAgreementKeysLimitExceeded', 'MaxPublicKeysPerDidExceeded', 'MaxTotalKeyAgreementKeysExceeded', 'BadDidOrigin', 'TransactionExpired', 'DidAlreadyDeleted', 'NotOwnerOfDeposit', 'UnableToPayFees', 'MaxNumberOfServicesPerDidExceeded', 'MaxServiceIdLengthExceeded', 'MaxServiceTypeLengthExceeded', 'MaxNumberOfTypesPerServiceExceeded', 'MaxServiceUrlLengthExceeded', 'MaxNumberOfUrlsPerServiceExceeded', 'ServiceAlreadyPresent', 'ServiceNotPresent', 'InvalidServiceEncoding', 'StoredEndpointsCountTooLarge', 'InternalError'] + _enum: ['InvalidSignatureFormat', 'InvalidSignature', 'AlreadyExists', 'NotFound', 'VerificationKeyNotFound', 'InvalidNonce', 'UnsupportedDidAuthorizationCall', 'InvalidDidAuthorizationCall', 'MaxNewKeyAgreementKeysLimitExceeded', 'MaxPublicKeysExceeded', 'MaxKeyAgreementKeysExceeded', 'BadDidOrigin', 'TransactionExpired', 'AlreadyDeleted', 'NotOwnerOfDeposit', 'UnableToPayFees', 'MaxNumberOfServicesExceeded', 'MaxServiceIdLengthExceeded', 'MaxServiceTypeLengthExceeded', 'MaxNumberOfTypesPerServiceExceeded', 'MaxServiceUrlLengthExceeded', 'MaxNumberOfUrlsPerServiceExceeded', 'ServiceAlreadyExists', 'ServiceNotFound', 'InvalidServiceEncoding', 'MaxStoredEndpointsCountExceeded', 'Internal'] }, /** - * Lookup423: pallet_did_lookup::connection_record::ConnectionRecord + * Lookup424: pallet_did_lookup::connection_record::ConnectionRecord **/ PalletDidLookupConnectionRecord: { did: 'AccountId32', deposit: 'KiltSupportDeposit' }, /** - * Lookup425: pallet_did_lookup::pallet::Error + * Lookup426: pallet_did_lookup::migration_state::MigrationState + **/ + PalletDidLookupMigrationState: { + _enum: { + Done: 'Null', + PreUpgrade: 'Null', + Upgrading: 'PalletDidLookupMigrationsMixedStorageKey' + } + }, + /** + * Lookup427: pallet_did_lookup::migrations::MixedStorageKey + **/ + PalletDidLookupMigrationsMixedStorageKey: { + _enum: { + V1: 'AccountId32', + V2: 'PalletDidLookupLinkableAccountLinkableAccountId' + } + }, + /** + * Lookup428: pallet_did_lookup::pallet::Error **/ PalletDidLookupError: { - _enum: ['AssociationNotFound', 'NotAuthorized', 'OutdatedProof', 'InsufficientFunds'] + _enum: ['NotFound', 'NotAuthorized', 'OutdatedProof', 'InsufficientFunds', 'Migration'] }, /** - * Lookup426: pallet_web3_names::web3_name::Web3NameOwnership, BlockNumber> + * Lookup429: pallet_web3_names::web3_name::Web3NameOwnership, BlockNumber> **/ PalletWeb3NamesWeb3NameWeb3NameOwnership: { owner: 'AccountId32', @@ -3430,13 +3807,13 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup427: pallet_web3_names::pallet::Error + * Lookup430: pallet_web3_names::pallet::Error **/ PalletWeb3NamesError: { - _enum: ['InsufficientFunds', 'Web3NameAlreadyClaimed', 'Web3NameNotFound', 'OwnerAlreadyExists', 'OwnerNotFound', 'Web3NameBanned', 'Web3NameNotBanned', 'Web3NameAlreadyBanned', 'NotAuthorized', 'Web3NameTooShort', 'Web3NameTooLong', 'InvalidWeb3NameCharacter', 'Unauthorized'] + _enum: ['InsufficientFunds', 'AlreadyExists', 'NotFound', 'OwnerAlreadyExists', 'OwnerNotFound', 'Banned', 'NotBanned', 'AlreadyBanned', 'NotAuthorized', 'TooShort', 'TooLong', 'InvalidCharacter'] }, /** - * Lookup429: public_credentials::credentials::CredentialEntry> + * Lookup432: public_credentials::credentials::CredentialEntry> **/ PublicCredentialsCredentialsCredentialEntry: { ctypeHash: 'H256', @@ -3447,19 +3824,19 @@ export default { authorizationId: 'Option' }, /** - * Lookup430: public_credentials::pallet::Error + * Lookup433: public_credentials::pallet::Error **/ PublicCredentialsError: { - _enum: ['CredentialAlreadyIssued', 'CredentialNotFound', 'UnableToPayFees', 'InvalidInput', 'Unauthorized', 'InternalError'] + _enum: ['AlreadyAttested', 'NotFound', 'UnableToPayFees', 'InvalidInput', 'NotAuthorized', 'Internal'] }, /** - * Lookup432: polkadot_primitives::v2::UpgradeRestriction + * Lookup435: polkadot_primitives::v2::UpgradeRestriction **/ PolkadotPrimitivesV2UpgradeRestriction: { _enum: ['Present'] }, /** - * Lookup433: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot + * Lookup436: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot **/ CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: { dmqMqcHead: 'H256', @@ -3468,7 +3845,7 @@ export default { egressChannels: 'Vec<(u32,PolkadotPrimitivesV2AbridgedHrmpChannel)>' }, /** - * Lookup437: polkadot_primitives::v2::AbridgedHrmpChannel + * Lookup440: polkadot_primitives::v2::AbridgedHrmpChannel **/ PolkadotPrimitivesV2AbridgedHrmpChannel: { maxCapacity: 'u32', @@ -3479,7 +3856,7 @@ export default { mqcHead: 'Option' }, /** - * Lookup438: polkadot_primitives::v2::AbridgedHostConfiguration + * Lookup441: polkadot_primitives::v2::AbridgedHostConfiguration **/ PolkadotPrimitivesV2AbridgedHostConfiguration: { maxCodeSize: 'u32', @@ -3493,20 +3870,20 @@ export default { validationUpgradeDelay: 'u32' }, /** - * Lookup444: polkadot_core_primitives::OutboundHrmpMessage + * Lookup447: polkadot_core_primitives::OutboundHrmpMessage **/ PolkadotCorePrimitivesOutboundHrmpMessage: { recipient: 'u32', data: 'Bytes' }, /** - * Lookup445: cumulus_pallet_parachain_system::pallet::Error + * Lookup448: cumulus_pallet_parachain_system::pallet::Error **/ CumulusPalletParachainSystemError: { _enum: ['OverlappingUpgrades', 'ProhibitedByPolkadot', 'TooBig', 'ValidationDataNotAvailable', 'HostConfigurationNotAvailable', 'NotScheduled', 'NothingAuthorized', 'Unauthorized'] }, /** - * Lookup447: cumulus_pallet_xcmp_queue::InboundChannelDetails + * Lookup450: cumulus_pallet_xcmp_queue::InboundChannelDetails **/ CumulusPalletXcmpQueueInboundChannelDetails: { sender: 'u32', @@ -3514,19 +3891,19 @@ export default { messageMetadata: 'Vec<(u32,PolkadotParachainPrimitivesXcmpMessageFormat)>' }, /** - * Lookup448: cumulus_pallet_xcmp_queue::InboundState + * Lookup451: cumulus_pallet_xcmp_queue::InboundState **/ CumulusPalletXcmpQueueInboundState: { _enum: ['Ok', 'Suspended'] }, /** - * Lookup451: polkadot_parachain::primitives::XcmpMessageFormat + * Lookup454: polkadot_parachain::primitives::XcmpMessageFormat **/ PolkadotParachainPrimitivesXcmpMessageFormat: { _enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals'] }, /** - * Lookup454: cumulus_pallet_xcmp_queue::OutboundChannelDetails + * Lookup457: cumulus_pallet_xcmp_queue::OutboundChannelDetails **/ CumulusPalletXcmpQueueOutboundChannelDetails: { recipient: 'u32', @@ -3536,13 +3913,13 @@ export default { lastIndex: 'u16' }, /** - * Lookup455: cumulus_pallet_xcmp_queue::OutboundState + * Lookup458: cumulus_pallet_xcmp_queue::OutboundState **/ CumulusPalletXcmpQueueOutboundState: { _enum: ['Ok', 'Suspended'] }, /** - * Lookup457: cumulus_pallet_xcmp_queue::QueueConfigData + * Lookup460: cumulus_pallet_xcmp_queue::QueueConfigData **/ CumulusPalletXcmpQueueQueueConfigData: { suspendThreshold: 'u32', @@ -3553,29 +3930,29 @@ export default { xcmpMaxIndividualWeight: 'SpWeightsWeightV2Weight' }, /** - * Lookup459: cumulus_pallet_xcmp_queue::pallet::Error + * Lookup462: cumulus_pallet_xcmp_queue::pallet::Error **/ CumulusPalletXcmpQueueError: { _enum: ['FailedToSend', 'BadXcmOrigin', 'BadXcm', 'BadOverweightIndex', 'WeightOverLimit'] }, /** - * Lookup460: pallet_xcm::pallet::Error + * Lookup463: pallet_xcm::pallet::Error **/ PalletXcmError: { - _enum: ['Unreachable', 'SendFailure', 'Filtered', 'UnweighableMessage', 'DestinationNotInvertible', 'Empty', 'CannotReanchor', 'TooManyAssets', 'InvalidOrigin', 'BadVersion', 'BadLocation', 'NoSubscription', 'AlreadySubscribed'] + _enum: ['Unreachable', 'SendFailure', 'Filtered', 'UnweighableMessage', 'DestinationNotInvertible', 'Empty', 'CannotReanchor', 'TooManyAssets', 'InvalidOrigin', 'BadVersion', 'BadLocation', 'NoSubscription', 'AlreadySubscribed', 'InvalidAsset', 'LowBalance', 'TooManyLocks', 'AccountNotSovereign', 'FeesNotMet', 'LockNotFound', 'InUse'] }, /** - * Lookup461: cumulus_pallet_xcm::pallet::Error + * Lookup464: cumulus_pallet_xcm::pallet::Error **/ CumulusPalletXcmError: 'Null', /** - * Lookup462: cumulus_pallet_dmp_queue::ConfigData + * Lookup465: cumulus_pallet_dmp_queue::ConfigData **/ CumulusPalletDmpQueueConfigData: { maxIndividual: 'SpWeightsWeightV2Weight' }, /** - * Lookup463: cumulus_pallet_dmp_queue::PageIndexData + * Lookup466: cumulus_pallet_dmp_queue::PageIndexData **/ CumulusPalletDmpQueuePageIndexData: { beginUsed: 'u32', @@ -3583,37 +3960,37 @@ export default { overweightCount: 'u64' }, /** - * Lookup466: cumulus_pallet_dmp_queue::pallet::Error + * Lookup469: cumulus_pallet_dmp_queue::pallet::Error **/ CumulusPalletDmpQueueError: { _enum: ['Unknown', 'OverLimit'] }, /** - * Lookup469: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender + * Lookup472: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender **/ FrameSystemExtensionsCheckNonZeroSender: 'Null', /** - * Lookup470: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup473: frame_system::extensions::check_spec_version::CheckSpecVersion **/ FrameSystemExtensionsCheckSpecVersion: 'Null', /** - * Lookup471: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup474: frame_system::extensions::check_tx_version::CheckTxVersion **/ FrameSystemExtensionsCheckTxVersion: 'Null', /** - * Lookup472: frame_system::extensions::check_genesis::CheckGenesis + * Lookup475: frame_system::extensions::check_genesis::CheckGenesis **/ FrameSystemExtensionsCheckGenesis: 'Null', /** - * Lookup475: frame_system::extensions::check_nonce::CheckNonce + * Lookup478: frame_system::extensions::check_nonce::CheckNonce **/ FrameSystemExtensionsCheckNonce: 'Compact', /** - * Lookup476: frame_system::extensions::check_weight::CheckWeight + * Lookup479: frame_system::extensions::check_weight::CheckWeight **/ FrameSystemExtensionsCheckWeight: 'Null', /** - * Lookup477: pallet_transaction_payment::ChargeTransactionPayment + * Lookup480: pallet_transaction_payment::ChargeTransactionPayment **/ PalletTransactionPaymentChargeTransactionPayment: 'Compact' }; diff --git a/packages/augment-api/src/interfaces/registry.ts b/packages/augment-api/src/interfaces/registry.ts index 305c29337..6bf52aa68 100644 --- a/packages/augment-api/src/interfaces/registry.ts +++ b/packages/augment-api/src/interfaces/registry.ts @@ -5,7 +5,7 @@ // this is required to allow for ambient/previous definitions import '@polkadot/types/types/registry'; -import type { AttestationAttestationsAttestationDetails, AttestationCall, AttestationError, AttestationEvent, CtypeCall, CtypeCtypeEntry, CtypeError, CtypeEvent, CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, DelegationAccessControlDelegationAc, DelegationCall, DelegationDelegationHierarchyDelegationDetails, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DelegationDelegationHierarchyPermissions, DelegationError, DelegationEvent, DidCall, DidDidDetails, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidPublicKey, DidDidDetailsDidPublicKeyDetails, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidError, DidEvent, DidOriginDidRawOrigin, DidServiceEndpointsDidEndpoint, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportPreimagesBounded, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonZeroSender, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, KiltAssetDidsAssetV1AssetId, KiltAssetDidsAssetV1EvmSmartContractFungibleReference, KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference, KiltAssetDidsAssetV1GenericAssetId, KiltAssetDidsChainV1ChainId, KiltAssetDidsChainV1GenericChainId, KiltAssetDidsChainV1GenesisHexHash32Reference, KiltAssetDidsV1AssetDid, KiltSupportDeposit, PalletAuthorshipCall, PalletAuthorshipError, PalletAuthorshipUncleEntryItem, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReserveData, PalletCollectiveCall, PalletCollectiveError, PalletCollectiveEvent, PalletCollectiveRawOrigin, PalletCollectiveVotes, PalletDemocracyCall, PalletDemocracyConviction, PalletDemocracyDelegations, PalletDemocracyError, PalletDemocracyEvent, PalletDemocracyReferendumInfo, PalletDemocracyReferendumStatus, PalletDemocracyTally, PalletDemocracyVoteAccountVote, PalletDemocracyVotePriorLock, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupAccountAccountId20, PalletDidLookupAccountEthereumSignature, PalletDidLookupAssociateAccountRequest, PalletDidLookupCall, PalletDidLookupConnectionRecord, PalletDidLookupError, PalletDidLookupEvent, PalletDidLookupLinkableAccountLinkableAccountId, PalletIndicesCall, PalletIndicesError, PalletIndicesEvent, PalletMembershipCall, PalletMembershipError, PalletMembershipEvent, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyCall, PalletProxyError, PalletProxyEvent, PalletProxyProxyDefinition, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletTimestampCall, PalletTipsCall, PalletTipsError, PalletTipsEvent, PalletTipsOpenTip, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletVestingCall, PalletVestingError, PalletVestingEvent, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesCall, PalletWeb3NamesError, PalletWeb3NamesEvent, PalletWeb3NamesWeb3NameWeb3NameOwnership, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, ParachainStakingCall, ParachainStakingCandidate, ParachainStakingCandidateStatus, ParachainStakingDelegationCounter, ParachainStakingError, ParachainStakingEvent, ParachainStakingInflationInflationInfo, ParachainStakingInflationRewardRate, ParachainStakingInflationStakingInfo, ParachainStakingRoundInfo, ParachainStakingSetOrderedSet, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, PublicCredentialsCall, PublicCredentialsCredentialsCredential, PublicCredentialsCredentialsCredentialEntry, PublicCredentialsError, PublicCredentialsEvent, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, RuntimeCommonAuthorizationPalletAuthorize, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaPublic, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeBlakeTwo256, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeHeader, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeRuntime, SpiritnetRuntimeSessionKeys, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; +import type { AttestationAttestationsAttestationDetails, AttestationCall, AttestationError, AttestationEvent, CtypeCall, CtypeCtypeEntry, CtypeError, CtypeEvent, CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, DelegationAccessControlDelegationAc, DelegationCall, DelegationDelegationHierarchyDelegationDetails, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DelegationDelegationHierarchyPermissions, DelegationError, DelegationEvent, DidCall, DidDidDetails, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidPublicKey, DidDidDetailsDidPublicKeyDetails, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidError, DidEvent, DidOriginDidRawOrigin, DidServiceEndpointsDidEndpoint, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportPreimagesBounded, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonZeroSender, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, KiltAssetDidsAssetV1AssetId, KiltAssetDidsAssetV1EvmSmartContractFungibleReference, KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference, KiltAssetDidsAssetV1GenericAssetId, KiltAssetDidsChainV1ChainId, KiltAssetDidsChainV1GenericChainId, KiltAssetDidsChainV1GenesisHexHash32Reference, KiltAssetDidsV1AssetDid, KiltSupportDeposit, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReserveData, PalletCollectiveCall, PalletCollectiveError, PalletCollectiveEvent, PalletCollectiveRawOrigin, PalletCollectiveVotes, PalletDemocracyCall, PalletDemocracyConviction, PalletDemocracyDelegations, PalletDemocracyError, PalletDemocracyEvent, PalletDemocracyReferendumInfo, PalletDemocracyReferendumStatus, PalletDemocracyTally, PalletDemocracyVoteAccountVote, PalletDemocracyVotePriorLock, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupAccountAccountId20, PalletDidLookupAccountEthereumSignature, PalletDidLookupAssociateAccountRequest, PalletDidLookupCall, PalletDidLookupConnectionRecord, PalletDidLookupError, PalletDidLookupEvent, PalletDidLookupLinkableAccountLinkableAccountId, PalletDidLookupMigrationState, PalletDidLookupMigrationsMixedStorageKey, PalletIndicesCall, PalletIndicesError, PalletIndicesEvent, PalletMembershipCall, PalletMembershipError, PalletMembershipEvent, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyCall, PalletProxyError, PalletProxyEvent, PalletProxyProxyDefinition, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletTimestampCall, PalletTipsCall, PalletTipsError, PalletTipsEvent, PalletTipsOpenTip, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletVestingCall, PalletVestingError, PalletVestingEvent, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesCall, PalletWeb3NamesError, PalletWeb3NamesEvent, PalletWeb3NamesWeb3NameWeb3NameOwnership, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, ParachainStakingCall, ParachainStakingCandidate, ParachainStakingCandidateStatus, ParachainStakingDelegationCounter, ParachainStakingError, ParachainStakingEvent, ParachainStakingInflationInflationInfo, ParachainStakingInflationRewardRate, ParachainStakingInflationStakingInfo, ParachainStakingRoundInfo, ParachainStakingSetOrderedSet, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, PublicCredentialsCall, PublicCredentialsCredentialsCredential, PublicCredentialsCredentialsCredentialEntry, PublicCredentialsError, PublicCredentialsEvent, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, RuntimeCommonAuthorizationPalletAuthorize, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaPublic, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeRuntime, SpiritnetRuntimeSessionKeys, XcmDoubleEncoded, XcmV2BodyId, XcmV2BodyPart, XcmV2Instruction, XcmV2Junction, XcmV2MultiAsset, XcmV2MultiLocation, XcmV2MultiassetAssetId, XcmV2MultiassetAssetInstance, XcmV2MultiassetFungibility, XcmV2MultiassetMultiAssetFilter, XcmV2MultiassetMultiAssets, XcmV2MultiassetWildFungibility, XcmV2MultiassetWildMultiAsset, XcmV2MultilocationJunctions, XcmV2NetworkId, XcmV2OriginKind, XcmV2Response, XcmV2TraitsError, XcmV2WeightLimit, XcmV2Xcm, XcmV3Instruction, XcmV3Junction, XcmV3JunctionBodyId, XcmV3JunctionBodyPart, XcmV3JunctionNetworkId, XcmV3Junctions, XcmV3MaybeErrorCode, XcmV3MultiAsset, XcmV3MultiLocation, XcmV3MultiassetAssetId, XcmV3MultiassetAssetInstance, XcmV3MultiassetFungibility, XcmV3MultiassetMultiAssetFilter, XcmV3MultiassetMultiAssets, XcmV3MultiassetWildFungibility, XcmV3MultiassetWildMultiAsset, XcmV3PalletInfo, XcmV3QueryResponseInfo, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3VecPalletInfo, XcmV3WeightLimit, XcmV3Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; declare module '@polkadot/types/types/registry' { interface InterfaceTypes { @@ -94,9 +94,6 @@ declare module '@polkadot/types/types/registry' { KiltAssetDidsChainV1GenesisHexHash32Reference: KiltAssetDidsChainV1GenesisHexHash32Reference; KiltAssetDidsV1AssetDid: KiltAssetDidsV1AssetDid; KiltSupportDeposit: KiltSupportDeposit; - PalletAuthorshipCall: PalletAuthorshipCall; - PalletAuthorshipError: PalletAuthorshipError; - PalletAuthorshipUncleEntryItem: PalletAuthorshipUncleEntryItem; PalletBalancesAccountData: PalletBalancesAccountData; PalletBalancesBalanceLock: PalletBalancesBalanceLock; PalletBalancesCall: PalletBalancesCall; @@ -129,6 +126,8 @@ declare module '@polkadot/types/types/registry' { PalletDidLookupError: PalletDidLookupError; PalletDidLookupEvent: PalletDidLookupEvent; PalletDidLookupLinkableAccountLinkableAccountId: PalletDidLookupLinkableAccountLinkableAccountId; + PalletDidLookupMigrationState: PalletDidLookupMigrationState; + PalletDidLookupMigrationsMixedStorageKey: PalletDidLookupMigrationsMixedStorageKey; PalletIndicesCall: PalletIndicesCall; PalletIndicesError: PalletIndicesError; PalletIndicesEvent: PalletIndicesEvent; @@ -218,11 +217,9 @@ declare module '@polkadot/types/types/registry' { SpCoreSr25519Public: SpCoreSr25519Public; SpCoreSr25519Signature: SpCoreSr25519Signature; SpCoreVoid: SpCoreVoid; - SpRuntimeBlakeTwo256: SpRuntimeBlakeTwo256; SpRuntimeDigest: SpRuntimeDigest; SpRuntimeDigestDigestItem: SpRuntimeDigestDigestItem; SpRuntimeDispatchError: SpRuntimeDispatchError; - SpRuntimeHeader: SpRuntimeHeader; SpRuntimeModuleError: SpRuntimeModuleError; SpRuntimeMultiSignature: SpRuntimeMultiSignature; SpRuntimeTokenError: SpRuntimeTokenError; @@ -236,36 +233,50 @@ declare module '@polkadot/types/types/registry' { SpiritnetRuntimeRuntime: SpiritnetRuntimeRuntime; SpiritnetRuntimeSessionKeys: SpiritnetRuntimeSessionKeys; XcmDoubleEncoded: XcmDoubleEncoded; - XcmV0Junction: XcmV0Junction; - XcmV0JunctionBodyId: XcmV0JunctionBodyId; - XcmV0JunctionBodyPart: XcmV0JunctionBodyPart; - XcmV0JunctionNetworkId: XcmV0JunctionNetworkId; - XcmV0MultiAsset: XcmV0MultiAsset; - XcmV0MultiLocation: XcmV0MultiLocation; - XcmV0Order: XcmV0Order; - XcmV0OriginKind: XcmV0OriginKind; - XcmV0Response: XcmV0Response; - XcmV0Xcm: XcmV0Xcm; - XcmV1Junction: XcmV1Junction; - XcmV1MultiAsset: XcmV1MultiAsset; - XcmV1MultiLocation: XcmV1MultiLocation; - XcmV1MultiassetAssetId: XcmV1MultiassetAssetId; - XcmV1MultiassetAssetInstance: XcmV1MultiassetAssetInstance; - XcmV1MultiassetFungibility: XcmV1MultiassetFungibility; - XcmV1MultiassetMultiAssetFilter: XcmV1MultiassetMultiAssetFilter; - XcmV1MultiassetMultiAssets: XcmV1MultiassetMultiAssets; - XcmV1MultiassetWildFungibility: XcmV1MultiassetWildFungibility; - XcmV1MultiassetWildMultiAsset: XcmV1MultiassetWildMultiAsset; - XcmV1MultilocationJunctions: XcmV1MultilocationJunctions; - XcmV1Order: XcmV1Order; - XcmV1Response: XcmV1Response; - XcmV1Xcm: XcmV1Xcm; + XcmV2BodyId: XcmV2BodyId; + XcmV2BodyPart: XcmV2BodyPart; XcmV2Instruction: XcmV2Instruction; + XcmV2Junction: XcmV2Junction; + XcmV2MultiAsset: XcmV2MultiAsset; + XcmV2MultiLocation: XcmV2MultiLocation; + XcmV2MultiassetAssetId: XcmV2MultiassetAssetId; + XcmV2MultiassetAssetInstance: XcmV2MultiassetAssetInstance; + XcmV2MultiassetFungibility: XcmV2MultiassetFungibility; + XcmV2MultiassetMultiAssetFilter: XcmV2MultiassetMultiAssetFilter; + XcmV2MultiassetMultiAssets: XcmV2MultiassetMultiAssets; + XcmV2MultiassetWildFungibility: XcmV2MultiassetWildFungibility; + XcmV2MultiassetWildMultiAsset: XcmV2MultiassetWildMultiAsset; + XcmV2MultilocationJunctions: XcmV2MultilocationJunctions; + XcmV2NetworkId: XcmV2NetworkId; + XcmV2OriginKind: XcmV2OriginKind; XcmV2Response: XcmV2Response; XcmV2TraitsError: XcmV2TraitsError; - XcmV2TraitsOutcome: XcmV2TraitsOutcome; XcmV2WeightLimit: XcmV2WeightLimit; XcmV2Xcm: XcmV2Xcm; + XcmV3Instruction: XcmV3Instruction; + XcmV3Junction: XcmV3Junction; + XcmV3JunctionBodyId: XcmV3JunctionBodyId; + XcmV3JunctionBodyPart: XcmV3JunctionBodyPart; + XcmV3JunctionNetworkId: XcmV3JunctionNetworkId; + XcmV3Junctions: XcmV3Junctions; + XcmV3MaybeErrorCode: XcmV3MaybeErrorCode; + XcmV3MultiAsset: XcmV3MultiAsset; + XcmV3MultiLocation: XcmV3MultiLocation; + XcmV3MultiassetAssetId: XcmV3MultiassetAssetId; + XcmV3MultiassetAssetInstance: XcmV3MultiassetAssetInstance; + XcmV3MultiassetFungibility: XcmV3MultiassetFungibility; + XcmV3MultiassetMultiAssetFilter: XcmV3MultiassetMultiAssetFilter; + XcmV3MultiassetMultiAssets: XcmV3MultiassetMultiAssets; + XcmV3MultiassetWildFungibility: XcmV3MultiassetWildFungibility; + XcmV3MultiassetWildMultiAsset: XcmV3MultiassetWildMultiAsset; + XcmV3PalletInfo: XcmV3PalletInfo; + XcmV3QueryResponseInfo: XcmV3QueryResponseInfo; + XcmV3Response: XcmV3Response; + XcmV3TraitsError: XcmV3TraitsError; + XcmV3TraitsOutcome: XcmV3TraitsOutcome; + XcmV3VecPalletInfo: XcmV3VecPalletInfo; + XcmV3WeightLimit: XcmV3WeightLimit; + XcmV3Xcm: XcmV3Xcm; XcmVersionedMultiAssets: XcmVersionedMultiAssets; XcmVersionedMultiLocation: XcmVersionedMultiLocation; XcmVersionedXcm: XcmVersionedXcm; diff --git a/packages/augment-api/src/interfaces/types-lookup.ts b/packages/augment-api/src/interfaces/types-lookup.ts index 183c38981..cf6f588f8 100644 --- a/packages/augment-api/src/interfaces/types-lookup.ts +++ b/packages/augment-api/src/interfaces/types-lookup.ts @@ -753,7 +753,9 @@ declare module '@polkadot/types/lookup' { readonly asAssociationEstablished: ITuple<[PalletDidLookupLinkableAccountLinkableAccountId, AccountId32]>; readonly isAssociationRemoved: boolean; readonly asAssociationRemoved: ITuple<[PalletDidLookupLinkableAccountLinkableAccountId, AccountId32]>; - readonly type: 'AssociationEstablished' | 'AssociationRemoved'; + readonly isMigrationProgress: boolean; + readonly isMigrationCompleted: boolean; + readonly type: 'AssociationEstablished' | 'AssociationRemoved' | 'MigrationProgress' | 'MigrationCompleted'; } /** @name PalletDidLookupLinkableAccountLinkableAccountId (66) */ @@ -896,37 +898,37 @@ declare module '@polkadot/types/lookup' { readonly weightUsed: SpWeightsWeightV2Weight; readonly dmqHead: H256; } & Struct; - readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed'; + readonly isUpwardMessageSent: boolean; + readonly asUpwardMessageSent: { + readonly messageHash: Option; + } & Struct; + readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed' | 'UpwardMessageSent'; } /** @name CumulusPalletXcmpQueueEvent (101) */ interface CumulusPalletXcmpQueueEvent extends Enum { readonly isSuccess: boolean; readonly asSuccess: { - readonly messageHash: Option; + readonly messageHash: Option; readonly weight: SpWeightsWeightV2Weight; } & Struct; readonly isFail: boolean; readonly asFail: { - readonly messageHash: Option; - readonly error: XcmV2TraitsError; + readonly messageHash: Option; + readonly error: XcmV3TraitsError; readonly weight: SpWeightsWeightV2Weight; } & Struct; readonly isBadVersion: boolean; readonly asBadVersion: { - readonly messageHash: Option; + readonly messageHash: Option; } & Struct; readonly isBadFormat: boolean; readonly asBadFormat: { - readonly messageHash: Option; - } & Struct; - readonly isUpwardMessageSent: boolean; - readonly asUpwardMessageSent: { - readonly messageHash: Option; + readonly messageHash: Option; } & Struct; readonly isXcmpMessageSent: boolean; readonly asXcmpMessageSent: { - readonly messageHash: Option; + readonly messageHash: Option; } & Struct; readonly isOverweightEnqueued: boolean; readonly asOverweightEnqueued: { @@ -940,17 +942,17 @@ declare module '@polkadot/types/lookup' { readonly index: u64; readonly used: SpWeightsWeightV2Weight; } & Struct; - readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'UpwardMessageSent' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced'; + readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced'; } - /** @name XcmV2TraitsError (103) */ - interface XcmV2TraitsError extends Enum { + /** @name XcmV3TraitsError (102) */ + interface XcmV3TraitsError extends Enum { readonly isOverflow: boolean; readonly isUnimplemented: boolean; readonly isUntrustedReserveLocation: boolean; readonly isUntrustedTeleportLocation: boolean; - readonly isMultiLocationFull: boolean; - readonly isMultiLocationNotInvertible: boolean; + readonly isLocationFull: boolean; + readonly isLocationNotInvertible: boolean; readonly isBadOrigin: boolean; readonly isInvalidLocation: boolean; readonly isAssetNotFound: boolean; @@ -968,24 +970,38 @@ declare module '@polkadot/types/lookup' { readonly isTooExpensive: boolean; readonly isTrap: boolean; readonly asTrap: u64; + readonly isExpectationFalse: boolean; + readonly isPalletNotFound: boolean; + readonly isNameMismatch: boolean; + readonly isVersionIncompatible: boolean; + readonly isHoldingWouldOverflow: boolean; + readonly isExportError: boolean; + readonly isReanchorFailed: boolean; + readonly isNoDeal: boolean; + readonly isFeesNotMet: boolean; + readonly isLockError: boolean; + readonly isNoPermission: boolean; + readonly isUnanchored: boolean; + readonly isNotDepositable: boolean; readonly isUnhandledXcmVersion: boolean; readonly isWeightLimitReached: boolean; - readonly asWeightLimitReached: u64; + readonly asWeightLimitReached: SpWeightsWeightV2Weight; readonly isBarrier: boolean; readonly isWeightNotComputable: boolean; - readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable'; + readonly isExceedsStackLimit: boolean; + readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'LocationFull' | 'LocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'ExpectationFalse' | 'PalletNotFound' | 'NameMismatch' | 'VersionIncompatible' | 'HoldingWouldOverflow' | 'ExportError' | 'ReanchorFailed' | 'NoDeal' | 'FeesNotMet' | 'LockError' | 'NoPermission' | 'Unanchored' | 'NotDepositable' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable' | 'ExceedsStackLimit'; } - /** @name PalletXcmEvent (105) */ + /** @name PalletXcmEvent (104) */ interface PalletXcmEvent extends Enum { readonly isAttempted: boolean; - readonly asAttempted: XcmV2TraitsOutcome; + readonly asAttempted: XcmV3TraitsOutcome; readonly isSent: boolean; - readonly asSent: ITuple<[XcmV1MultiLocation, XcmV1MultiLocation, XcmV2Xcm]>; + readonly asSent: ITuple<[XcmV3MultiLocation, XcmV3MultiLocation, XcmV3Xcm]>; readonly isUnexpectedResponse: boolean; - readonly asUnexpectedResponse: ITuple<[XcmV1MultiLocation, u64]>; + readonly asUnexpectedResponse: ITuple<[XcmV3MultiLocation, u64]>; readonly isResponseReady: boolean; - readonly asResponseReady: ITuple<[u64, XcmV2Response]>; + readonly asResponseReady: ITuple<[u64, XcmV3Response]>; readonly isNotified: boolean; readonly asNotified: ITuple<[u64, u8, u8]>; readonly isNotifyOverweight: boolean; @@ -995,82 +1011,94 @@ declare module '@polkadot/types/lookup' { readonly isNotifyDecodeFailed: boolean; readonly asNotifyDecodeFailed: ITuple<[u64, u8, u8]>; readonly isInvalidResponder: boolean; - readonly asInvalidResponder: ITuple<[XcmV1MultiLocation, u64, Option]>; + readonly asInvalidResponder: ITuple<[XcmV3MultiLocation, u64, Option]>; readonly isInvalidResponderVersion: boolean; - readonly asInvalidResponderVersion: ITuple<[XcmV1MultiLocation, u64]>; + readonly asInvalidResponderVersion: ITuple<[XcmV3MultiLocation, u64]>; readonly isResponseTaken: boolean; readonly asResponseTaken: u64; readonly isAssetsTrapped: boolean; - readonly asAssetsTrapped: ITuple<[H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>; + readonly asAssetsTrapped: ITuple<[H256, XcmV3MultiLocation, XcmVersionedMultiAssets]>; readonly isVersionChangeNotified: boolean; - readonly asVersionChangeNotified: ITuple<[XcmV1MultiLocation, u32]>; + readonly asVersionChangeNotified: ITuple<[XcmV3MultiLocation, u32, XcmV3MultiassetMultiAssets]>; readonly isSupportedVersionChanged: boolean; - readonly asSupportedVersionChanged: ITuple<[XcmV1MultiLocation, u32]>; + readonly asSupportedVersionChanged: ITuple<[XcmV3MultiLocation, u32]>; readonly isNotifyTargetSendFail: boolean; - readonly asNotifyTargetSendFail: ITuple<[XcmV1MultiLocation, u64, XcmV2TraitsError]>; + readonly asNotifyTargetSendFail: ITuple<[XcmV3MultiLocation, u64, XcmV3TraitsError]>; readonly isNotifyTargetMigrationFail: boolean; readonly asNotifyTargetMigrationFail: ITuple<[XcmVersionedMultiLocation, u64]>; + readonly isInvalidQuerierVersion: boolean; + readonly asInvalidQuerierVersion: ITuple<[XcmV3MultiLocation, u64]>; + readonly isInvalidQuerier: boolean; + readonly asInvalidQuerier: ITuple<[XcmV3MultiLocation, u64, XcmV3MultiLocation, Option]>; + readonly isVersionNotifyStarted: boolean; + readonly asVersionNotifyStarted: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; + readonly isVersionNotifyRequested: boolean; + readonly asVersionNotifyRequested: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; + readonly isVersionNotifyUnrequested: boolean; + readonly asVersionNotifyUnrequested: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; + readonly isFeesPaid: boolean; + readonly asFeesPaid: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; readonly isAssetsClaimed: boolean; - readonly asAssetsClaimed: ITuple<[H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>; - readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail' | 'AssetsClaimed'; + readonly asAssetsClaimed: ITuple<[H256, XcmV3MultiLocation, XcmVersionedMultiAssets]>; + readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail' | 'InvalidQuerierVersion' | 'InvalidQuerier' | 'VersionNotifyStarted' | 'VersionNotifyRequested' | 'VersionNotifyUnrequested' | 'FeesPaid' | 'AssetsClaimed'; } - /** @name XcmV2TraitsOutcome (106) */ - interface XcmV2TraitsOutcome extends Enum { + /** @name XcmV3TraitsOutcome (105) */ + interface XcmV3TraitsOutcome extends Enum { readonly isComplete: boolean; - readonly asComplete: u64; + readonly asComplete: SpWeightsWeightV2Weight; readonly isIncomplete: boolean; - readonly asIncomplete: ITuple<[u64, XcmV2TraitsError]>; + readonly asIncomplete: ITuple<[SpWeightsWeightV2Weight, XcmV3TraitsError]>; readonly isError: boolean; - readonly asError: XcmV2TraitsError; + readonly asError: XcmV3TraitsError; readonly type: 'Complete' | 'Incomplete' | 'Error'; } - /** @name XcmV1MultiLocation (107) */ - interface XcmV1MultiLocation extends Struct { + /** @name XcmV3MultiLocation (106) */ + interface XcmV3MultiLocation extends Struct { readonly parents: u8; - readonly interior: XcmV1MultilocationJunctions; + readonly interior: XcmV3Junctions; } - /** @name XcmV1MultilocationJunctions (108) */ - interface XcmV1MultilocationJunctions extends Enum { + /** @name XcmV3Junctions (107) */ + interface XcmV3Junctions extends Enum { readonly isHere: boolean; readonly isX1: boolean; - readonly asX1: XcmV1Junction; + readonly asX1: XcmV3Junction; readonly isX2: boolean; - readonly asX2: ITuple<[XcmV1Junction, XcmV1Junction]>; + readonly asX2: ITuple<[XcmV3Junction, XcmV3Junction]>; readonly isX3: boolean; - readonly asX3: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX3: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction]>; readonly isX4: boolean; - readonly asX4: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX4: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; readonly isX5: boolean; - readonly asX5: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX5: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; readonly isX6: boolean; - readonly asX6: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX6: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; readonly isX7: boolean; - readonly asX7: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX7: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; readonly isX8: boolean; - readonly asX8: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>; + readonly asX8: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; } - /** @name XcmV1Junction (109) */ - interface XcmV1Junction extends Enum { + /** @name XcmV3Junction (108) */ + interface XcmV3Junction extends Enum { readonly isParachain: boolean; readonly asParachain: Compact; readonly isAccountId32: boolean; readonly asAccountId32: { - readonly network: XcmV0JunctionNetworkId; + readonly network: Option; readonly id: U8aFixed; } & Struct; readonly isAccountIndex64: boolean; readonly asAccountIndex64: { - readonly network: XcmV0JunctionNetworkId; + readonly network: Option; readonly index: Compact; } & Struct; readonly isAccountKey20: boolean; readonly asAccountKey20: { - readonly network: XcmV0JunctionNetworkId; + readonly network: Option; readonly key: U8aFixed; } & Struct; readonly isPalletInstance: boolean; @@ -1078,31 +1106,49 @@ declare module '@polkadot/types/lookup' { readonly isGeneralIndex: boolean; readonly asGeneralIndex: Compact; readonly isGeneralKey: boolean; - readonly asGeneralKey: Bytes; + readonly asGeneralKey: { + readonly length: u8; + readonly data: U8aFixed; + } & Struct; readonly isOnlyChild: boolean; readonly isPlurality: boolean; readonly asPlurality: { - readonly id: XcmV0JunctionBodyId; - readonly part: XcmV0JunctionBodyPart; + readonly id: XcmV3JunctionBodyId; + readonly part: XcmV3JunctionBodyPart; } & Struct; - readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality'; + readonly isGlobalConsensus: boolean; + readonly asGlobalConsensus: XcmV3JunctionNetworkId; + readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality' | 'GlobalConsensus'; } - /** @name XcmV0JunctionNetworkId (111) */ - interface XcmV0JunctionNetworkId extends Enum { - readonly isAny: boolean; - readonly isNamed: boolean; - readonly asNamed: Bytes; + /** @name XcmV3JunctionNetworkId (111) */ + interface XcmV3JunctionNetworkId extends Enum { + readonly isByGenesis: boolean; + readonly asByGenesis: U8aFixed; + readonly isByFork: boolean; + readonly asByFork: { + readonly blockNumber: u64; + readonly blockHash: U8aFixed; + } & Struct; readonly isPolkadot: boolean; readonly isKusama: boolean; - readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama'; + readonly isWestend: boolean; + readonly isRococo: boolean; + readonly isWococo: boolean; + readonly isEthereum: boolean; + readonly asEthereum: { + readonly chainId: Compact; + } & Struct; + readonly isBitcoinCore: boolean; + readonly isBitcoinCash: boolean; + readonly type: 'ByGenesis' | 'ByFork' | 'Polkadot' | 'Kusama' | 'Westend' | 'Rococo' | 'Wococo' | 'Ethereum' | 'BitcoinCore' | 'BitcoinCash'; } - /** @name XcmV0JunctionBodyId (114) */ - interface XcmV0JunctionBodyId extends Enum { + /** @name XcmV3JunctionBodyId (113) */ + interface XcmV3JunctionBodyId extends Enum { readonly isUnit: boolean; - readonly isNamed: boolean; - readonly asNamed: Bytes; + readonly isMoniker: boolean; + readonly asMoniker: U8aFixed; readonly isIndex: boolean; readonly asIndex: Compact; readonly isExecutive: boolean; @@ -1112,11 +1158,11 @@ declare module '@polkadot/types/lookup' { readonly isDefense: boolean; readonly isAdministration: boolean; readonly isTreasury: boolean; - readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; + readonly type: 'Unit' | 'Moniker' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; } - /** @name XcmV0JunctionBodyPart (115) */ - interface XcmV0JunctionBodyPart extends Enum { + /** @name XcmV3JunctionBodyPart (114) */ + interface XcmV3JunctionBodyPart extends Enum { readonly isVoice: boolean; readonly isMembers: boolean; readonly asMembers: { @@ -1140,38 +1186,39 @@ declare module '@polkadot/types/lookup' { readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; } - /** @name XcmV2Xcm (116) */ - interface XcmV2Xcm extends Vec {} + /** @name XcmV3Xcm (115) */ + interface XcmV3Xcm extends Vec {} - /** @name XcmV2Instruction (118) */ - interface XcmV2Instruction extends Enum { + /** @name XcmV3Instruction (117) */ + interface XcmV3Instruction extends Enum { readonly isWithdrawAsset: boolean; - readonly asWithdrawAsset: XcmV1MultiassetMultiAssets; + readonly asWithdrawAsset: XcmV3MultiassetMultiAssets; readonly isReserveAssetDeposited: boolean; - readonly asReserveAssetDeposited: XcmV1MultiassetMultiAssets; + readonly asReserveAssetDeposited: XcmV3MultiassetMultiAssets; readonly isReceiveTeleportedAsset: boolean; - readonly asReceiveTeleportedAsset: XcmV1MultiassetMultiAssets; + readonly asReceiveTeleportedAsset: XcmV3MultiassetMultiAssets; readonly isQueryResponse: boolean; readonly asQueryResponse: { readonly queryId: Compact; - readonly response: XcmV2Response; - readonly maxWeight: Compact; + readonly response: XcmV3Response; + readonly maxWeight: SpWeightsWeightV2Weight; + readonly querier: Option; } & Struct; readonly isTransferAsset: boolean; readonly asTransferAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly beneficiary: XcmV1MultiLocation; + readonly assets: XcmV3MultiassetMultiAssets; + readonly beneficiary: XcmV3MultiLocation; } & Struct; readonly isTransferReserveAsset: boolean; readonly asTransferReserveAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly dest: XcmV1MultiLocation; - readonly xcm: XcmV2Xcm; + readonly assets: XcmV3MultiassetMultiAssets; + readonly dest: XcmV3MultiLocation; + readonly xcm: XcmV3Xcm; } & Struct; readonly isTransact: boolean; readonly asTransact: { - readonly originType: XcmV0OriginKind; - readonly requireWeightAtMost: Compact; + readonly originKind: XcmV2OriginKind; + readonly requireWeightAtMost: SpWeightsWeightV2Weight; readonly call: XcmDoubleEncoded; } & Struct; readonly isHrmpNewChannelOpenRequest: boolean; @@ -1192,106 +1239,167 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isClearOrigin: boolean; readonly isDescendOrigin: boolean; - readonly asDescendOrigin: XcmV1MultilocationJunctions; + readonly asDescendOrigin: XcmV3Junctions; readonly isReportError: boolean; - readonly asReportError: { - readonly queryId: Compact; - readonly dest: XcmV1MultiLocation; - readonly maxResponseWeight: Compact; - } & Struct; + readonly asReportError: XcmV3QueryResponseInfo; readonly isDepositAsset: boolean; readonly asDepositAsset: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxAssets: Compact; - readonly beneficiary: XcmV1MultiLocation; + readonly assets: XcmV3MultiassetMultiAssetFilter; + readonly beneficiary: XcmV3MultiLocation; } & Struct; readonly isDepositReserveAsset: boolean; readonly asDepositReserveAsset: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxAssets: Compact; - readonly dest: XcmV1MultiLocation; - readonly xcm: XcmV2Xcm; + readonly assets: XcmV3MultiassetMultiAssetFilter; + readonly dest: XcmV3MultiLocation; + readonly xcm: XcmV3Xcm; } & Struct; readonly isExchangeAsset: boolean; readonly asExchangeAsset: { - readonly give: XcmV1MultiassetMultiAssetFilter; - readonly receive: XcmV1MultiassetMultiAssets; + readonly give: XcmV3MultiassetMultiAssetFilter; + readonly want: XcmV3MultiassetMultiAssets; + readonly maximal: bool; } & Struct; readonly isInitiateReserveWithdraw: boolean; readonly asInitiateReserveWithdraw: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly reserve: XcmV1MultiLocation; - readonly xcm: XcmV2Xcm; + readonly assets: XcmV3MultiassetMultiAssetFilter; + readonly reserve: XcmV3MultiLocation; + readonly xcm: XcmV3Xcm; } & Struct; readonly isInitiateTeleport: boolean; readonly asInitiateTeleport: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly dest: XcmV1MultiLocation; - readonly xcm: XcmV2Xcm; + readonly assets: XcmV3MultiassetMultiAssetFilter; + readonly dest: XcmV3MultiLocation; + readonly xcm: XcmV3Xcm; } & Struct; - readonly isQueryHolding: boolean; - readonly asQueryHolding: { - readonly queryId: Compact; - readonly dest: XcmV1MultiLocation; - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxResponseWeight: Compact; + readonly isReportHolding: boolean; + readonly asReportHolding: { + readonly responseInfo: XcmV3QueryResponseInfo; + readonly assets: XcmV3MultiassetMultiAssetFilter; } & Struct; readonly isBuyExecution: boolean; readonly asBuyExecution: { - readonly fees: XcmV1MultiAsset; - readonly weightLimit: XcmV2WeightLimit; + readonly fees: XcmV3MultiAsset; + readonly weightLimit: XcmV3WeightLimit; } & Struct; readonly isRefundSurplus: boolean; readonly isSetErrorHandler: boolean; - readonly asSetErrorHandler: XcmV2Xcm; + readonly asSetErrorHandler: XcmV3Xcm; readonly isSetAppendix: boolean; - readonly asSetAppendix: XcmV2Xcm; + readonly asSetAppendix: XcmV3Xcm; readonly isClearError: boolean; readonly isClaimAsset: boolean; readonly asClaimAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly ticket: XcmV1MultiLocation; + readonly assets: XcmV3MultiassetMultiAssets; + readonly ticket: XcmV3MultiLocation; } & Struct; readonly isTrap: boolean; readonly asTrap: Compact; readonly isSubscribeVersion: boolean; readonly asSubscribeVersion: { readonly queryId: Compact; - readonly maxResponseWeight: Compact; + readonly maxResponseWeight: SpWeightsWeightV2Weight; } & Struct; readonly isUnsubscribeVersion: boolean; - readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion'; - } - - /** @name XcmV1MultiassetMultiAssets (119) */ - interface XcmV1MultiassetMultiAssets extends Vec {} - - /** @name XcmV1MultiAsset (121) */ - interface XcmV1MultiAsset extends Struct { - readonly id: XcmV1MultiassetAssetId; - readonly fun: XcmV1MultiassetFungibility; - } - - /** @name XcmV1MultiassetAssetId (122) */ - interface XcmV1MultiassetAssetId extends Enum { + readonly isBurnAsset: boolean; + readonly asBurnAsset: XcmV3MultiassetMultiAssets; + readonly isExpectAsset: boolean; + readonly asExpectAsset: XcmV3MultiassetMultiAssets; + readonly isExpectOrigin: boolean; + readonly asExpectOrigin: Option; + readonly isExpectError: boolean; + readonly asExpectError: Option>; + readonly isExpectTransactStatus: boolean; + readonly asExpectTransactStatus: XcmV3MaybeErrorCode; + readonly isQueryPallet: boolean; + readonly asQueryPallet: { + readonly moduleName: Bytes; + readonly responseInfo: XcmV3QueryResponseInfo; + } & Struct; + readonly isExpectPallet: boolean; + readonly asExpectPallet: { + readonly index: Compact; + readonly name: Bytes; + readonly moduleName: Bytes; + readonly crateMajor: Compact; + readonly minCrateMinor: Compact; + } & Struct; + readonly isReportTransactStatus: boolean; + readonly asReportTransactStatus: XcmV3QueryResponseInfo; + readonly isClearTransactStatus: boolean; + readonly isUniversalOrigin: boolean; + readonly asUniversalOrigin: XcmV3Junction; + readonly isExportMessage: boolean; + readonly asExportMessage: { + readonly network: XcmV3JunctionNetworkId; + readonly destination: XcmV3Junctions; + readonly xcm: XcmV3Xcm; + } & Struct; + readonly isLockAsset: boolean; + readonly asLockAsset: { + readonly asset: XcmV3MultiAsset; + readonly unlocker: XcmV3MultiLocation; + } & Struct; + readonly isUnlockAsset: boolean; + readonly asUnlockAsset: { + readonly asset: XcmV3MultiAsset; + readonly target: XcmV3MultiLocation; + } & Struct; + readonly isNoteUnlockable: boolean; + readonly asNoteUnlockable: { + readonly asset: XcmV3MultiAsset; + readonly owner: XcmV3MultiLocation; + } & Struct; + readonly isRequestUnlock: boolean; + readonly asRequestUnlock: { + readonly asset: XcmV3MultiAsset; + readonly locker: XcmV3MultiLocation; + } & Struct; + readonly isSetFeesMode: boolean; + readonly asSetFeesMode: { + readonly jitWithdraw: bool; + } & Struct; + readonly isSetTopic: boolean; + readonly asSetTopic: U8aFixed; + readonly isClearTopic: boolean; + readonly isAliasOrigin: boolean; + readonly asAliasOrigin: XcmV3MultiLocation; + readonly isUnpaidExecution: boolean; + readonly asUnpaidExecution: { + readonly weightLimit: XcmV3WeightLimit; + readonly checkOrigin: Option; + } & Struct; + readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'ReportHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion' | 'BurnAsset' | 'ExpectAsset' | 'ExpectOrigin' | 'ExpectError' | 'ExpectTransactStatus' | 'QueryPallet' | 'ExpectPallet' | 'ReportTransactStatus' | 'ClearTransactStatus' | 'UniversalOrigin' | 'ExportMessage' | 'LockAsset' | 'UnlockAsset' | 'NoteUnlockable' | 'RequestUnlock' | 'SetFeesMode' | 'SetTopic' | 'ClearTopic' | 'AliasOrigin' | 'UnpaidExecution'; + } + + /** @name XcmV3MultiassetMultiAssets (118) */ + interface XcmV3MultiassetMultiAssets extends Vec {} + + /** @name XcmV3MultiAsset (120) */ + interface XcmV3MultiAsset extends Struct { + readonly id: XcmV3MultiassetAssetId; + readonly fun: XcmV3MultiassetFungibility; + } + + /** @name XcmV3MultiassetAssetId (121) */ + interface XcmV3MultiassetAssetId extends Enum { readonly isConcrete: boolean; - readonly asConcrete: XcmV1MultiLocation; + readonly asConcrete: XcmV3MultiLocation; readonly isAbstract: boolean; - readonly asAbstract: Bytes; + readonly asAbstract: U8aFixed; readonly type: 'Concrete' | 'Abstract'; } - /** @name XcmV1MultiassetFungibility (123) */ - interface XcmV1MultiassetFungibility extends Enum { + /** @name XcmV3MultiassetFungibility (122) */ + interface XcmV3MultiassetFungibility extends Enum { readonly isFungible: boolean; readonly asFungible: Compact; readonly isNonFungible: boolean; - readonly asNonFungible: XcmV1MultiassetAssetInstance; + readonly asNonFungible: XcmV3MultiassetAssetInstance; readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV1MultiassetAssetInstance (124) */ - interface XcmV1MultiassetAssetInstance extends Enum { + /** @name XcmV3MultiassetAssetInstance (123) */ + interface XcmV3MultiassetAssetInstance extends Enum { readonly isUndefined: boolean; readonly isIndex: boolean; readonly asIndex: Compact; @@ -1303,25 +1411,50 @@ declare module '@polkadot/types/lookup' { readonly asArray16: U8aFixed; readonly isArray32: boolean; readonly asArray32: U8aFixed; - readonly isBlob: boolean; - readonly asBlob: Bytes; - readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob'; + readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32'; } - /** @name XcmV2Response (126) */ - interface XcmV2Response extends Enum { + /** @name XcmV3Response (125) */ + interface XcmV3Response extends Enum { readonly isNull: boolean; readonly isAssets: boolean; - readonly asAssets: XcmV1MultiassetMultiAssets; + readonly asAssets: XcmV3MultiassetMultiAssets; readonly isExecutionResult: boolean; - readonly asExecutionResult: Option>; + readonly asExecutionResult: Option>; readonly isVersion: boolean; readonly asVersion: u32; - readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version'; + readonly isPalletsInfo: boolean; + readonly asPalletsInfo: XcmV3VecPalletInfo; + readonly isDispatchResult: boolean; + readonly asDispatchResult: XcmV3MaybeErrorCode; + readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version' | 'PalletsInfo' | 'DispatchResult'; + } + + /** @name XcmV3VecPalletInfo (128) */ + interface XcmV3VecPalletInfo extends Vec {} + + /** @name XcmV3PalletInfo (130) */ + interface XcmV3PalletInfo extends Struct { + readonly index: Compact; + readonly name: Bytes; + readonly moduleName: Bytes; + readonly major: Compact; + readonly minor: Compact; + readonly patch: Compact; + } + + /** @name XcmV3MaybeErrorCode (131) */ + interface XcmV3MaybeErrorCode extends Enum { + readonly isSuccess: boolean; + readonly isError: boolean; + readonly asError: Bytes; + readonly isTruncatedError: boolean; + readonly asTruncatedError: Bytes; + readonly type: 'Success' | 'Error' | 'TruncatedError'; } - /** @name XcmV0OriginKind (129) */ - interface XcmV0OriginKind extends Enum { + /** @name XcmV2OriginKind (133) */ + interface XcmV2OriginKind extends Enum { readonly isNative: boolean; readonly isSovereignAccount: boolean; readonly isSuperuser: boolean; @@ -1329,140 +1462,133 @@ declare module '@polkadot/types/lookup' { readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm'; } - /** @name XcmDoubleEncoded (130) */ + /** @name XcmDoubleEncoded (134) */ interface XcmDoubleEncoded extends Struct { readonly encoded: Bytes; } - /** @name XcmV1MultiassetMultiAssetFilter (131) */ - interface XcmV1MultiassetMultiAssetFilter extends Enum { + /** @name XcmV3QueryResponseInfo (135) */ + interface XcmV3QueryResponseInfo extends Struct { + readonly destination: XcmV3MultiLocation; + readonly queryId: Compact; + readonly maxWeight: SpWeightsWeightV2Weight; + } + + /** @name XcmV3MultiassetMultiAssetFilter (136) */ + interface XcmV3MultiassetMultiAssetFilter extends Enum { readonly isDefinite: boolean; - readonly asDefinite: XcmV1MultiassetMultiAssets; + readonly asDefinite: XcmV3MultiassetMultiAssets; readonly isWild: boolean; - readonly asWild: XcmV1MultiassetWildMultiAsset; + readonly asWild: XcmV3MultiassetWildMultiAsset; readonly type: 'Definite' | 'Wild'; } - /** @name XcmV1MultiassetWildMultiAsset (132) */ - interface XcmV1MultiassetWildMultiAsset extends Enum { + /** @name XcmV3MultiassetWildMultiAsset (137) */ + interface XcmV3MultiassetWildMultiAsset extends Enum { readonly isAll: boolean; readonly isAllOf: boolean; readonly asAllOf: { - readonly id: XcmV1MultiassetAssetId; - readonly fun: XcmV1MultiassetWildFungibility; + readonly id: XcmV3MultiassetAssetId; + readonly fun: XcmV3MultiassetWildFungibility; + } & Struct; + readonly isAllCounted: boolean; + readonly asAllCounted: Compact; + readonly isAllOfCounted: boolean; + readonly asAllOfCounted: { + readonly id: XcmV3MultiassetAssetId; + readonly fun: XcmV3MultiassetWildFungibility; + readonly count: Compact; } & Struct; - readonly type: 'All' | 'AllOf'; + readonly type: 'All' | 'AllOf' | 'AllCounted' | 'AllOfCounted'; } - /** @name XcmV1MultiassetWildFungibility (133) */ - interface XcmV1MultiassetWildFungibility extends Enum { + /** @name XcmV3MultiassetWildFungibility (138) */ + interface XcmV3MultiassetWildFungibility extends Enum { readonly isFungible: boolean; readonly isNonFungible: boolean; readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV2WeightLimit (134) */ - interface XcmV2WeightLimit extends Enum { + /** @name XcmV3WeightLimit (139) */ + interface XcmV3WeightLimit extends Enum { readonly isUnlimited: boolean; readonly isLimited: boolean; - readonly asLimited: Compact; + readonly asLimited: SpWeightsWeightV2Weight; readonly type: 'Unlimited' | 'Limited'; } - /** @name XcmVersionedMultiAssets (136) */ + /** @name XcmVersionedMultiAssets (140) */ interface XcmVersionedMultiAssets extends Enum { - readonly isV0: boolean; - readonly asV0: Vec; - readonly isV1: boolean; - readonly asV1: XcmV1MultiassetMultiAssets; - readonly type: 'V0' | 'V1'; + readonly isV2: boolean; + readonly asV2: XcmV2MultiassetMultiAssets; + readonly isV3: boolean; + readonly asV3: XcmV3MultiassetMultiAssets; + readonly type: 'V2' | 'V3'; } - /** @name XcmV0MultiAsset (138) */ - interface XcmV0MultiAsset extends Enum { - readonly isNone: boolean; - readonly isAll: boolean; - readonly isAllFungible: boolean; - readonly isAllNonFungible: boolean; - readonly isAllAbstractFungible: boolean; - readonly asAllAbstractFungible: { - readonly id: Bytes; - } & Struct; - readonly isAllAbstractNonFungible: boolean; - readonly asAllAbstractNonFungible: { - readonly class: Bytes; - } & Struct; - readonly isAllConcreteFungible: boolean; - readonly asAllConcreteFungible: { - readonly id: XcmV0MultiLocation; - } & Struct; - readonly isAllConcreteNonFungible: boolean; - readonly asAllConcreteNonFungible: { - readonly class: XcmV0MultiLocation; - } & Struct; - readonly isAbstractFungible: boolean; - readonly asAbstractFungible: { - readonly id: Bytes; - readonly amount: Compact; - } & Struct; - readonly isAbstractNonFungible: boolean; - readonly asAbstractNonFungible: { - readonly class: Bytes; - readonly instance: XcmV1MultiassetAssetInstance; - } & Struct; - readonly isConcreteFungible: boolean; - readonly asConcreteFungible: { - readonly id: XcmV0MultiLocation; - readonly amount: Compact; - } & Struct; - readonly isConcreteNonFungible: boolean; - readonly asConcreteNonFungible: { - readonly class: XcmV0MultiLocation; - readonly instance: XcmV1MultiassetAssetInstance; - } & Struct; - readonly type: 'None' | 'All' | 'AllFungible' | 'AllNonFungible' | 'AllAbstractFungible' | 'AllAbstractNonFungible' | 'AllConcreteFungible' | 'AllConcreteNonFungible' | 'AbstractFungible' | 'AbstractNonFungible' | 'ConcreteFungible' | 'ConcreteNonFungible'; + /** @name XcmV2MultiassetMultiAssets (141) */ + interface XcmV2MultiassetMultiAssets extends Vec {} + + /** @name XcmV2MultiAsset (143) */ + interface XcmV2MultiAsset extends Struct { + readonly id: XcmV2MultiassetAssetId; + readonly fun: XcmV2MultiassetFungibility; } - /** @name XcmV0MultiLocation (139) */ - interface XcmV0MultiLocation extends Enum { - readonly isNull: boolean; + /** @name XcmV2MultiassetAssetId (144) */ + interface XcmV2MultiassetAssetId extends Enum { + readonly isConcrete: boolean; + readonly asConcrete: XcmV2MultiLocation; + readonly isAbstract: boolean; + readonly asAbstract: Bytes; + readonly type: 'Concrete' | 'Abstract'; + } + + /** @name XcmV2MultiLocation (145) */ + interface XcmV2MultiLocation extends Struct { + readonly parents: u8; + readonly interior: XcmV2MultilocationJunctions; + } + + /** @name XcmV2MultilocationJunctions (146) */ + interface XcmV2MultilocationJunctions extends Enum { + readonly isHere: boolean; readonly isX1: boolean; - readonly asX1: XcmV0Junction; + readonly asX1: XcmV2Junction; readonly isX2: boolean; - readonly asX2: ITuple<[XcmV0Junction, XcmV0Junction]>; + readonly asX2: ITuple<[XcmV2Junction, XcmV2Junction]>; readonly isX3: boolean; - readonly asX3: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction]>; + readonly asX3: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX4: boolean; - readonly asX4: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; + readonly asX4: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX5: boolean; - readonly asX5: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; + readonly asX5: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX6: boolean; - readonly asX6: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; + readonly asX6: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX7: boolean; - readonly asX7: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; + readonly asX7: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; readonly isX8: boolean; - readonly asX8: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>; - readonly type: 'Null' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; + readonly asX8: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; + readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; } - /** @name XcmV0Junction (140) */ - interface XcmV0Junction extends Enum { - readonly isParent: boolean; + /** @name XcmV2Junction (147) */ + interface XcmV2Junction extends Enum { readonly isParachain: boolean; readonly asParachain: Compact; readonly isAccountId32: boolean; readonly asAccountId32: { - readonly network: XcmV0JunctionNetworkId; + readonly network: XcmV2NetworkId; readonly id: U8aFixed; } & Struct; readonly isAccountIndex64: boolean; readonly asAccountIndex64: { - readonly network: XcmV0JunctionNetworkId; + readonly network: XcmV2NetworkId; readonly index: Compact; } & Struct; readonly isAccountKey20: boolean; readonly asAccountKey20: { - readonly network: XcmV0JunctionNetworkId; + readonly network: XcmV2NetworkId; readonly key: U8aFixed; } & Struct; readonly isPalletInstance: boolean; @@ -1474,33 +1600,112 @@ declare module '@polkadot/types/lookup' { readonly isOnlyChild: boolean; readonly isPlurality: boolean; readonly asPlurality: { - readonly id: XcmV0JunctionBodyId; - readonly part: XcmV0JunctionBodyPart; + readonly id: XcmV2BodyId; + readonly part: XcmV2BodyPart; } & Struct; - readonly type: 'Parent' | 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality'; + readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality'; + } + + /** @name XcmV2NetworkId (148) */ + interface XcmV2NetworkId extends Enum { + readonly isAny: boolean; + readonly isNamed: boolean; + readonly asNamed: Bytes; + readonly isPolkadot: boolean; + readonly isKusama: boolean; + readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama'; + } + + /** @name XcmV2BodyId (150) */ + interface XcmV2BodyId extends Enum { + readonly isUnit: boolean; + readonly isNamed: boolean; + readonly asNamed: Bytes; + readonly isIndex: boolean; + readonly asIndex: Compact; + readonly isExecutive: boolean; + readonly isTechnical: boolean; + readonly isLegislative: boolean; + readonly isJudicial: boolean; + readonly isDefense: boolean; + readonly isAdministration: boolean; + readonly isTreasury: boolean; + readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; } - /** @name XcmVersionedMultiLocation (141) */ + /** @name XcmV2BodyPart (151) */ + interface XcmV2BodyPart extends Enum { + readonly isVoice: boolean; + readonly isMembers: boolean; + readonly asMembers: { + readonly count: Compact; + } & Struct; + readonly isFraction: boolean; + readonly asFraction: { + readonly nom: Compact; + readonly denom: Compact; + } & Struct; + readonly isAtLeastProportion: boolean; + readonly asAtLeastProportion: { + readonly nom: Compact; + readonly denom: Compact; + } & Struct; + readonly isMoreThanProportion: boolean; + readonly asMoreThanProportion: { + readonly nom: Compact; + readonly denom: Compact; + } & Struct; + readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; + } + + /** @name XcmV2MultiassetFungibility (152) */ + interface XcmV2MultiassetFungibility extends Enum { + readonly isFungible: boolean; + readonly asFungible: Compact; + readonly isNonFungible: boolean; + readonly asNonFungible: XcmV2MultiassetAssetInstance; + readonly type: 'Fungible' | 'NonFungible'; + } + + /** @name XcmV2MultiassetAssetInstance (153) */ + interface XcmV2MultiassetAssetInstance extends Enum { + readonly isUndefined: boolean; + readonly isIndex: boolean; + readonly asIndex: Compact; + readonly isArray4: boolean; + readonly asArray4: U8aFixed; + readonly isArray8: boolean; + readonly asArray8: U8aFixed; + readonly isArray16: boolean; + readonly asArray16: U8aFixed; + readonly isArray32: boolean; + readonly asArray32: U8aFixed; + readonly isBlob: boolean; + readonly asBlob: Bytes; + readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob'; + } + + /** @name XcmVersionedMultiLocation (154) */ interface XcmVersionedMultiLocation extends Enum { - readonly isV0: boolean; - readonly asV0: XcmV0MultiLocation; - readonly isV1: boolean; - readonly asV1: XcmV1MultiLocation; - readonly type: 'V0' | 'V1'; + readonly isV2: boolean; + readonly asV2: XcmV2MultiLocation; + readonly isV3: boolean; + readonly asV3: XcmV3MultiLocation; + readonly type: 'V2' | 'V3'; } - /** @name CumulusPalletXcmEvent (142) */ + /** @name CumulusPalletXcmEvent (155) */ interface CumulusPalletXcmEvent extends Enum { readonly isInvalidFormat: boolean; readonly asInvalidFormat: U8aFixed; readonly isUnsupportedVersion: boolean; readonly asUnsupportedVersion: U8aFixed; readonly isExecutedDownward: boolean; - readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>; + readonly asExecutedDownward: ITuple<[U8aFixed, XcmV3TraitsOutcome]>; readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward'; } - /** @name CumulusPalletDmpQueueEvent (143) */ + /** @name CumulusPalletDmpQueueEvent (156) */ interface CumulusPalletDmpQueueEvent extends Enum { readonly isInvalidFormat: boolean; readonly asInvalidFormat: { @@ -1513,7 +1718,7 @@ declare module '@polkadot/types/lookup' { readonly isExecutedDownward: boolean; readonly asExecutedDownward: { readonly messageId: U8aFixed; - readonly outcome: XcmV2TraitsOutcome; + readonly outcome: XcmV3TraitsOutcome; } & Struct; readonly isWeightExhausted: boolean; readonly asWeightExhausted: { @@ -1535,7 +1740,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced'; } - /** @name FrameSystemPhase (144) */ + /** @name FrameSystemPhase (157) */ interface FrameSystemPhase extends Enum { readonly isApplyExtrinsic: boolean; readonly asApplyExtrinsic: u32; @@ -1544,13 +1749,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; } - /** @name FrameSystemLastRuntimeUpgradeInfo (147) */ + /** @name FrameSystemLastRuntimeUpgradeInfo (160) */ interface FrameSystemLastRuntimeUpgradeInfo extends Struct { readonly specVersion: Compact; readonly specName: Text; } - /** @name FrameSystemCall (149) */ + /** @name FrameSystemCall (162) */ interface FrameSystemCall extends Enum { readonly isRemark: boolean; readonly asRemark: { @@ -1588,21 +1793,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent'; } - /** @name FrameSystemLimitsBlockWeights (153) */ + /** @name FrameSystemLimitsBlockWeights (166) */ interface FrameSystemLimitsBlockWeights extends Struct { readonly baseBlock: SpWeightsWeightV2Weight; readonly maxBlock: SpWeightsWeightV2Weight; readonly perClass: FrameSupportDispatchPerDispatchClassWeightsPerClass; } - /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (154) */ + /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (167) */ interface FrameSupportDispatchPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; readonly operational: FrameSystemLimitsWeightsPerClass; readonly mandatory: FrameSystemLimitsWeightsPerClass; } - /** @name FrameSystemLimitsWeightsPerClass (155) */ + /** @name FrameSystemLimitsWeightsPerClass (168) */ interface FrameSystemLimitsWeightsPerClass extends Struct { readonly baseExtrinsic: SpWeightsWeightV2Weight; readonly maxExtrinsic: Option; @@ -1610,25 +1815,25 @@ declare module '@polkadot/types/lookup' { readonly reserved: Option; } - /** @name FrameSystemLimitsBlockLength (157) */ + /** @name FrameSystemLimitsBlockLength (170) */ interface FrameSystemLimitsBlockLength extends Struct { readonly max: FrameSupportDispatchPerDispatchClassU32; } - /** @name FrameSupportDispatchPerDispatchClassU32 (158) */ + /** @name FrameSupportDispatchPerDispatchClassU32 (171) */ interface FrameSupportDispatchPerDispatchClassU32 extends Struct { readonly normal: u32; readonly operational: u32; readonly mandatory: u32; } - /** @name SpWeightsRuntimeDbWeight (159) */ + /** @name SpWeightsRuntimeDbWeight (172) */ interface SpWeightsRuntimeDbWeight extends Struct { readonly read: u64; readonly write: u64; } - /** @name SpVersionRuntimeVersion (160) */ + /** @name SpVersionRuntimeVersion (173) */ interface SpVersionRuntimeVersion extends Struct { readonly specName: Text; readonly implName: Text; @@ -1640,7 +1845,7 @@ declare module '@polkadot/types/lookup' { readonly stateVersion: u8; } - /** @name FrameSystemError (164) */ + /** @name FrameSystemError (177) */ interface FrameSystemError extends Enum { readonly isInvalidSpecName: boolean; readonly isSpecVersionNeedsToIncrease: boolean; @@ -1651,7 +1856,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered'; } - /** @name PalletTimestampCall (166) */ + /** @name PalletTimestampCall (179) */ interface PalletTimestampCall extends Enum { readonly isSet: boolean; readonly asSet: { @@ -1660,7 +1865,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Set'; } - /** @name PalletIndicesCall (168) */ + /** @name PalletIndicesCall (181) */ interface PalletIndicesCall extends Enum { readonly isClaim: boolean; readonly asClaim: { @@ -1688,7 +1893,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Claim' | 'Transfer' | 'Free' | 'ForceTransfer' | 'Freeze'; } - /** @name PalletIndicesError (171) */ + /** @name PalletIndicesError (184) */ interface PalletIndicesError extends Enum { readonly isNotAssigned: boolean; readonly isNotOwner: boolean; @@ -1698,14 +1903,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotAssigned' | 'NotOwner' | 'InUse' | 'NotTransfer' | 'Permanent'; } - /** @name PalletBalancesBalanceLock (173) */ + /** @name PalletBalancesBalanceLock (186) */ interface PalletBalancesBalanceLock extends Struct { readonly id: U8aFixed; readonly amount: u128; readonly reasons: PalletBalancesReasons; } - /** @name PalletBalancesReasons (174) */ + /** @name PalletBalancesReasons (187) */ interface PalletBalancesReasons extends Enum { readonly isFee: boolean; readonly isMisc: boolean; @@ -1713,13 +1918,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Fee' | 'Misc' | 'All'; } - /** @name PalletBalancesReserveData (177) */ + /** @name PalletBalancesReserveData (190) */ interface PalletBalancesReserveData extends Struct { readonly id: U8aFixed; readonly amount: u128; } - /** @name PalletBalancesCall (179) */ + /** @name PalletBalancesCall (192) */ interface PalletBalancesCall extends Enum { readonly isTransfer: boolean; readonly asTransfer: { @@ -1756,7 +1961,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Transfer' | 'SetBalance' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve'; } - /** @name PalletBalancesError (180) */ + /** @name PalletBalancesError (193) */ interface PalletBalancesError extends Enum { readonly isVestingBalance: boolean; readonly isLiquidityRestrictions: boolean; @@ -1769,28 +1974,28 @@ declare module '@polkadot/types/lookup' { readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'KeepAlive' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves'; } - /** @name PalletTransactionPaymentReleases (182) */ + /** @name PalletTransactionPaymentReleases (195) */ interface PalletTransactionPaymentReleases extends Enum { readonly isV1Ancient: boolean; readonly isV2: boolean; readonly type: 'V1Ancient' | 'V2'; } - /** @name SpConsensusAuraSr25519AppSr25519Public (184) */ + /** @name SpConsensusAuraSr25519AppSr25519Public (197) */ interface SpConsensusAuraSr25519AppSr25519Public extends SpCoreSr25519Public {} - /** @name SpCoreSr25519Public (185) */ + /** @name SpCoreSr25519Public (198) */ interface SpCoreSr25519Public extends U8aFixed {} - /** @name SpiritnetRuntimeSessionKeys (191) */ + /** @name SpiritnetRuntimeSessionKeys (204) */ interface SpiritnetRuntimeSessionKeys extends Struct { readonly aura: SpConsensusAuraSr25519AppSr25519Public; } - /** @name SpCoreCryptoKeyTypeId (194) */ + /** @name SpCoreCryptoKeyTypeId (207) */ interface SpCoreCryptoKeyTypeId extends U8aFixed {} - /** @name PalletSessionCall (195) */ + /** @name PalletSessionCall (208) */ interface PalletSessionCall extends Enum { readonly isSetKeys: boolean; readonly asSetKeys: { @@ -1801,7 +2006,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetKeys' | 'PurgeKeys'; } - /** @name PalletSessionError (196) */ + /** @name PalletSessionError (209) */ interface PalletSessionError extends Enum { readonly isInvalidProof: boolean; readonly isNoAssociatedValidatorId: boolean; @@ -1811,26 +2016,26 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidProof' | 'NoAssociatedValidatorId' | 'DuplicatedKey' | 'NoKeys' | 'NoAccount'; } - /** @name ParachainStakingRoundInfo (197) */ + /** @name ParachainStakingRoundInfo (210) */ interface ParachainStakingRoundInfo extends Struct { readonly current: u32; readonly first: u64; readonly length: u64; } - /** @name ParachainStakingDelegationCounter (198) */ + /** @name ParachainStakingDelegationCounter (211) */ interface ParachainStakingDelegationCounter extends Struct { readonly round: u32; readonly counter: u32; } - /** @name ParachainStakingStake (199) */ + /** @name ParachainStakingStake (212) */ interface ParachainStakingStake extends Struct { readonly owner: AccountId32; readonly amount: u128; } - /** @name ParachainStakingCandidate (200) */ + /** @name ParachainStakingCandidate (213) */ interface ParachainStakingCandidate extends Struct { readonly id: AccountId32; readonly stake: u128; @@ -1839,10 +2044,10 @@ declare module '@polkadot/types/lookup' { readonly status: ParachainStakingCandidateStatus; } - /** @name ParachainStakingSetOrderedSet (201) */ + /** @name ParachainStakingSetOrderedSet (214) */ interface ParachainStakingSetOrderedSet extends Vec {} - /** @name ParachainStakingCandidateStatus (204) */ + /** @name ParachainStakingCandidateStatus (217) */ interface ParachainStakingCandidateStatus extends Enum { readonly isActive: boolean; readonly isLeaving: boolean; @@ -1850,31 +2055,31 @@ declare module '@polkadot/types/lookup' { readonly type: 'Active' | 'Leaving'; } - /** @name ParachainStakingTotalStake (205) */ + /** @name ParachainStakingTotalStake (218) */ interface ParachainStakingTotalStake extends Struct { readonly collators: u128; readonly delegators: u128; } - /** @name ParachainStakingInflationInflationInfo (208) */ + /** @name ParachainStakingInflationInflationInfo (221) */ interface ParachainStakingInflationInflationInfo extends Struct { readonly collator: ParachainStakingInflationStakingInfo; readonly delegator: ParachainStakingInflationStakingInfo; } - /** @name ParachainStakingInflationStakingInfo (209) */ + /** @name ParachainStakingInflationStakingInfo (222) */ interface ParachainStakingInflationStakingInfo extends Struct { readonly maxRate: Perquintill; readonly rewardRate: ParachainStakingInflationRewardRate; } - /** @name ParachainStakingInflationRewardRate (210) */ + /** @name ParachainStakingInflationRewardRate (223) */ interface ParachainStakingInflationRewardRate extends Struct { readonly annual: Perquintill; readonly perBlock: Perquintill; } - /** @name ParachainStakingCall (215) */ + /** @name ParachainStakingCall (228) */ interface ParachainStakingCall extends Enum { readonly isForceNewRound: boolean; readonly isSetInflation: boolean; @@ -1943,7 +2148,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ForceNewRound' | 'SetInflation' | 'SetMaxSelectedCandidates' | 'SetBlocksPerRound' | 'SetMaxCandidateStake' | 'ForceRemoveCandidate' | 'JoinCandidates' | 'InitLeaveCandidates' | 'ExecuteLeaveCandidates' | 'CancelLeaveCandidates' | 'CandidateStakeMore' | 'CandidateStakeLess' | 'JoinDelegators' | 'LeaveDelegators' | 'DelegatorStakeMore' | 'DelegatorStakeLess' | 'UnlockUnstaked' | 'ClaimRewards' | 'IncrementCollatorRewards' | 'IncrementDelegatorRewards' | 'ExecuteScheduledRewardChange'; } - /** @name ParachainStakingError (216) */ + /** @name ParachainStakingError (229) */ interface ParachainStakingError extends Enum { readonly isDelegatorNotFound: boolean; readonly isCandidateNotFound: boolean; @@ -1979,49 +2184,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'DelegatorNotFound' | 'CandidateNotFound' | 'DelegatorExists' | 'CandidateExists' | 'ValStakeZero' | 'ValStakeBelowMin' | 'ValStakeAboveMax' | 'DelegationBelowMin' | 'AlreadyLeaving' | 'NotLeaving' | 'CannotLeaveYet' | 'CannotJoinBeforeUnlocking' | 'AlreadyDelegating' | 'NotYetDelegating' | 'DelegationsPerRoundExceeded' | 'TooManyDelegators' | 'TooFewCollatorCandidates' | 'CannotStakeIfLeaving' | 'CannotDelegateIfLeaving' | 'MaxCollatorsPerDelegatorExceeded' | 'AlreadyDelegatedCollator' | 'DelegationNotFound' | 'Underflow' | 'CannotSetAboveMax' | 'CannotSetBelowMin' | 'InvalidSchedule' | 'NoMoreUnstaking' | 'TooEarly' | 'StakeNotFound' | 'UnstakingIsEmpty' | 'RewardsNotFound'; } - /** @name PalletAuthorshipUncleEntryItem (218) */ - interface PalletAuthorshipUncleEntryItem extends Enum { - readonly isInclusionHeight: boolean; - readonly asInclusionHeight: u64; - readonly isUncle: boolean; - readonly asUncle: ITuple<[H256, Option]>; - readonly type: 'InclusionHeight' | 'Uncle'; - } - - /** @name PalletAuthorshipCall (221) */ - interface PalletAuthorshipCall extends Enum { - readonly isSetUncles: boolean; - readonly asSetUncles: { - readonly newUncles: Vec; - } & Struct; - readonly type: 'SetUncles'; - } - - /** @name SpRuntimeHeader (223) */ - interface SpRuntimeHeader extends Struct { - readonly parentHash: H256; - readonly number: Compact; - readonly stateRoot: H256; - readonly extrinsicsRoot: H256; - readonly digest: SpRuntimeDigest; - } - - /** @name SpRuntimeBlakeTwo256 (224) */ - type SpRuntimeBlakeTwo256 = Null; - - /** @name PalletAuthorshipError (225) */ - interface PalletAuthorshipError extends Enum { - readonly isInvalidUncleParent: boolean; - readonly isUnclesAlreadySet: boolean; - readonly isTooManyUncles: boolean; - readonly isGenesisUncle: boolean; - readonly isTooHighUncle: boolean; - readonly isUncleAlreadyIncluded: boolean; - readonly isOldUncle: boolean; - readonly type: 'InvalidUncleParent' | 'UnclesAlreadySet' | 'TooManyUncles' | 'GenesisUncle' | 'TooHighUncle' | 'UncleAlreadyIncluded' | 'OldUncle'; - } - - /** @name FrameSupportPreimagesBounded (228) */ + /** @name FrameSupportPreimagesBounded (232) */ interface FrameSupportPreimagesBounded extends Enum { readonly isLegacy: boolean; readonly asLegacy: { @@ -2037,7 +2200,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Legacy' | 'Inline' | 'Lookup'; } - /** @name PalletDemocracyCall (230) */ + /** @name PalletDemocracyCall (234) */ interface PalletDemocracyCall extends Enum { readonly isPropose: boolean; readonly asPropose: { @@ -2116,7 +2279,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Propose' | 'Second' | 'Vote' | 'EmergencyCancel' | 'ExternalPropose' | 'ExternalProposeMajority' | 'ExternalProposeDefault' | 'FastTrack' | 'VetoExternal' | 'CancelReferendum' | 'Delegate' | 'Undelegate' | 'ClearPublicProposals' | 'Unlock' | 'RemoveVote' | 'RemoveOtherVote' | 'Blacklist' | 'CancelProposal'; } - /** @name PalletDemocracyConviction (231) */ + /** @name PalletDemocracyConviction (235) */ interface PalletDemocracyConviction extends Enum { readonly isNone: boolean; readonly isLocked1x: boolean; @@ -2128,7 +2291,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'None' | 'Locked1x' | 'Locked2x' | 'Locked3x' | 'Locked4x' | 'Locked5x' | 'Locked6x'; } - /** @name PalletCollectiveCall (233) */ + /** @name PalletCollectiveCall (237) */ interface PalletCollectiveCall extends Enum { readonly isSetMembers: boolean; readonly asSetMembers: { @@ -2174,7 +2337,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetMembers' | 'Execute' | 'Propose' | 'Vote' | 'CloseOldWeight' | 'DisapproveProposal' | 'Close'; } - /** @name PalletMembershipCall (237) */ + /** @name PalletMembershipCall (242) */ interface PalletMembershipCall extends Enum { readonly isAddMember: boolean; readonly asAddMember: { @@ -2205,7 +2368,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AddMember' | 'RemoveMember' | 'SwapMember' | 'ResetMembers' | 'ChangeKey' | 'SetPrime' | 'ClearPrime'; } - /** @name PalletTreasuryCall (238) */ + /** @name PalletTreasuryCall (243) */ interface PalletTreasuryCall extends Enum { readonly isProposeSpend: boolean; readonly asProposeSpend: { @@ -2232,7 +2395,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal' | 'Spend' | 'RemoveApproval'; } - /** @name PalletUtilityCall (239) */ + /** @name PalletUtilityCall (244) */ interface PalletUtilityCall extends Enum { readonly isBatch: boolean; readonly asBatch: { @@ -2264,7 +2427,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Batch' | 'AsDerivative' | 'BatchAll' | 'DispatchAs' | 'ForceBatch' | 'WithWeight'; } - /** @name SpiritnetRuntimeOriginCaller (241) */ + /** @name SpiritnetRuntimeOriginCaller (246) */ interface SpiritnetRuntimeOriginCaller extends Enum { readonly isSystem: boolean; readonly asSystem: FrameSupportDispatchRawOrigin; @@ -2282,7 +2445,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'System' | 'Void' | 'Council' | 'TechnicalCommittee' | 'Did' | 'PolkadotXcm' | 'CumulusXcm'; } - /** @name FrameSupportDispatchRawOrigin (242) */ + /** @name FrameSupportDispatchRawOrigin (247) */ interface FrameSupportDispatchRawOrigin extends Enum { readonly isRoot: boolean; readonly isSigned: boolean; @@ -2291,7 +2454,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Root' | 'Signed' | 'None'; } - /** @name PalletCollectiveRawOrigin (243) */ + /** @name PalletCollectiveRawOrigin (248) */ interface PalletCollectiveRawOrigin extends Enum { readonly isMembers: boolean; readonly asMembers: ITuple<[u32, u32]>; @@ -2301,22 +2464,22 @@ declare module '@polkadot/types/lookup' { readonly type: 'Members' | 'Member' | 'Phantom'; } - /** @name DidOriginDidRawOrigin (245) */ + /** @name DidOriginDidRawOrigin (250) */ interface DidOriginDidRawOrigin extends Struct { readonly id: AccountId32; readonly submitter: AccountId32; } - /** @name PalletXcmOrigin (246) */ + /** @name PalletXcmOrigin (251) */ interface PalletXcmOrigin extends Enum { readonly isXcm: boolean; - readonly asXcm: XcmV1MultiLocation; + readonly asXcm: XcmV3MultiLocation; readonly isResponse: boolean; - readonly asResponse: XcmV1MultiLocation; + readonly asResponse: XcmV3MultiLocation; readonly type: 'Xcm' | 'Response'; } - /** @name CumulusPalletXcmOrigin (247) */ + /** @name CumulusPalletXcmOrigin (252) */ interface CumulusPalletXcmOrigin extends Enum { readonly isRelay: boolean; readonly isSiblingParachain: boolean; @@ -2324,10 +2487,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'Relay' | 'SiblingParachain'; } - /** @name SpCoreVoid (248) */ + /** @name SpCoreVoid (253) */ type SpCoreVoid = Null; - /** @name PalletVestingCall (249) */ + /** @name PalletVestingCall (254) */ interface PalletVestingCall extends Enum { readonly isVest: boolean; readonly isVestOther: boolean; @@ -2353,14 +2516,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Vest' | 'VestOther' | 'VestedTransfer' | 'ForceVestedTransfer' | 'MergeSchedules'; } - /** @name PalletVestingVestingInfo (250) */ + /** @name PalletVestingVestingInfo (255) */ interface PalletVestingVestingInfo extends Struct { readonly locked: u128; readonly perBlock: u128; readonly startingBlock: u64; } - /** @name PalletSchedulerCall (251) */ + /** @name PalletSchedulerCall (256) */ interface PalletSchedulerCall extends Enum { readonly isSchedule: boolean; readonly asSchedule: { @@ -2404,7 +2567,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Schedule' | 'Cancel' | 'ScheduleNamed' | 'CancelNamed' | 'ScheduleAfter' | 'ScheduleNamedAfter'; } - /** @name PalletProxyCall (253) */ + /** @name PalletProxyCall (258) */ interface PalletProxyCall extends Enum { readonly isProxy: boolean; readonly asProxy: { @@ -2464,7 +2627,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Proxy' | 'AddProxy' | 'RemoveProxy' | 'RemoveProxies' | 'CreatePure' | 'KillPure' | 'Announce' | 'RemoveAnnouncement' | 'RejectAnnouncement' | 'ProxyAnnounced'; } - /** @name PalletPreimageCall (255) */ + /** @name PalletPreimageCall (260) */ interface PalletPreimageCall extends Enum { readonly isNotePreimage: boolean; readonly asNotePreimage: { @@ -2485,7 +2648,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotePreimage' | 'UnnotePreimage' | 'RequestPreimage' | 'UnrequestPreimage'; } - /** @name PalletTipsCall (257) */ + /** @name PalletTipsCall (262) */ interface PalletTipsCall extends Enum { readonly isReportAwesome: boolean; readonly asReportAwesome: { @@ -2518,7 +2681,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ReportAwesome' | 'RetractTip' | 'TipNew' | 'Tip' | 'CloseTip' | 'SlashTip'; } - /** @name CtypeCall (258) */ + /** @name CtypeCall (263) */ interface CtypeCall extends Enum { readonly isAdd: boolean; readonly asAdd: { @@ -2532,7 +2695,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Add' | 'SetBlockNumber'; } - /** @name AttestationCall (259) */ + /** @name AttestationCall (264) */ interface AttestationCall extends Enum { readonly isAdd: boolean; readonly asAdd: { @@ -2565,23 +2728,23 @@ declare module '@polkadot/types/lookup' { readonly type: 'Add' | 'Revoke' | 'Remove' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name RuntimeCommonAuthorizationPalletAuthorize (261) */ + /** @name RuntimeCommonAuthorizationPalletAuthorize (266) */ interface RuntimeCommonAuthorizationPalletAuthorize extends Enum { readonly isDelegation: boolean; readonly asDelegation: DelegationAccessControlDelegationAc; readonly type: 'Delegation'; } - /** @name DelegationAccessControlDelegationAc (262) */ + /** @name DelegationAccessControlDelegationAc (267) */ interface DelegationAccessControlDelegationAc extends Struct { readonly subjectNodeId: H256; readonly maxChecks: u32; } - /** @name SpiritnetRuntimeRuntime (263) */ + /** @name SpiritnetRuntimeRuntime (268) */ type SpiritnetRuntimeRuntime = Null; - /** @name DelegationCall (264) */ + /** @name DelegationCall (269) */ interface DelegationCall extends Enum { readonly isCreateHierarchy: boolean; readonly asCreateHierarchy: { @@ -2623,7 +2786,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CreateHierarchy' | 'AddDelegation' | 'RevokeDelegation' | 'RemoveDelegation' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name DidDidDetailsDidSignature (265) */ + /** @name DidDidDetailsDidSignature (270) */ interface DidDidDetailsDidSignature extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Signature; @@ -2634,16 +2797,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name SpCoreEd25519Signature (266) */ + /** @name SpCoreEd25519Signature (271) */ interface SpCoreEd25519Signature extends U8aFixed {} - /** @name SpCoreSr25519Signature (268) */ + /** @name SpCoreSr25519Signature (273) */ interface SpCoreSr25519Signature extends U8aFixed {} - /** @name SpCoreEcdsaSignature (269) */ + /** @name SpCoreEcdsaSignature (274) */ interface SpCoreEcdsaSignature extends U8aFixed {} - /** @name DidCall (271) */ + /** @name DidCall (276) */ interface DidCall extends Enum { readonly isCreate: boolean; readonly asCreate: { @@ -2702,7 +2865,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Create' | 'SetAuthenticationKey' | 'SetDelegationKey' | 'RemoveDelegationKey' | 'SetAttestationKey' | 'RemoveAttestationKey' | 'AddKeyAgreementKey' | 'RemoveKeyAgreementKey' | 'AddServiceEndpoint' | 'RemoveServiceEndpoint' | 'Delete' | 'ReclaimDeposit' | 'SubmitDidCall' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name DidDidDetailsDidCreationDetails (272) */ + /** @name DidDidDetailsDidCreationDetails (277) */ interface DidDidDetailsDidCreationDetails extends Struct { readonly did: AccountId32; readonly submitter: AccountId32; @@ -2712,14 +2875,14 @@ declare module '@polkadot/types/lookup' { readonly newServiceDetails: Vec; } - /** @name DidDidDetailsDidEncryptionKey (274) */ + /** @name DidDidDetailsDidEncryptionKey (279) */ interface DidDidDetailsDidEncryptionKey extends Enum { readonly isX25519: boolean; readonly asX25519: U8aFixed; readonly type: 'X25519'; } - /** @name DidDidDetailsDidVerificationKey (278) */ + /** @name DidDidDetailsDidVerificationKey (283) */ interface DidDidDetailsDidVerificationKey extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Public; @@ -2730,20 +2893,20 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name SpCoreEd25519Public (279) */ + /** @name SpCoreEd25519Public (284) */ interface SpCoreEd25519Public extends U8aFixed {} - /** @name SpCoreEcdsaPublic (280) */ + /** @name SpCoreEcdsaPublic (285) */ interface SpCoreEcdsaPublic extends U8aFixed {} - /** @name DidServiceEndpointsDidEndpoint (283) */ + /** @name DidServiceEndpointsDidEndpoint (288) */ interface DidServiceEndpointsDidEndpoint extends Struct { readonly id: Bytes; readonly serviceTypes: Vec; readonly urls: Vec; } - /** @name DidDidDetailsDidAuthorizedCallOperation (291) */ + /** @name DidDidDetailsDidAuthorizedCallOperation (296) */ interface DidDidDetailsDidAuthorizedCallOperation extends Struct { readonly did: AccountId32; readonly txCounter: u64; @@ -2752,7 +2915,7 @@ declare module '@polkadot/types/lookup' { readonly submitter: AccountId32; } - /** @name PalletDidLookupCall (292) */ + /** @name PalletDidLookupCall (297) */ interface PalletDidLookupCall extends Enum { readonly isAssociateAccount: boolean; readonly asAssociateAccount: { @@ -2777,19 +2940,23 @@ declare module '@polkadot/types/lookup' { readonly asUpdateDeposit: { readonly account: PalletDidLookupLinkableAccountLinkableAccountId; } & Struct; - readonly type: 'AssociateAccount' | 'AssociateSender' | 'RemoveSenderAssociation' | 'RemoveAccountAssociation' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; + readonly isMigrate: boolean; + readonly asMigrate: { + readonly limit: u32; + } & Struct; + readonly type: 'AssociateAccount' | 'AssociateSender' | 'RemoveSenderAssociation' | 'RemoveAccountAssociation' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit' | 'Migrate'; } - /** @name PalletDidLookupAssociateAccountRequest (293) */ + /** @name PalletDidLookupAssociateAccountRequest (298) */ interface PalletDidLookupAssociateAccountRequest extends Enum { - readonly isDotsama: boolean; - readonly asDotsama: ITuple<[AccountId32, SpRuntimeMultiSignature]>; + readonly isPolkadot: boolean; + readonly asPolkadot: ITuple<[AccountId32, SpRuntimeMultiSignature]>; readonly isEthereum: boolean; readonly asEthereum: ITuple<[PalletDidLookupAccountAccountId20, PalletDidLookupAccountEthereumSignature]>; - readonly type: 'Dotsama' | 'Ethereum'; + readonly type: 'Polkadot' | 'Ethereum'; } - /** @name SpRuntimeMultiSignature (294) */ + /** @name SpRuntimeMultiSignature (299) */ interface SpRuntimeMultiSignature extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Signature; @@ -2800,10 +2967,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name PalletDidLookupAccountEthereumSignature (295) */ + /** @name PalletDidLookupAccountEthereumSignature (300) */ interface PalletDidLookupAccountEthereumSignature extends SpCoreEcdsaSignature {} - /** @name PalletWeb3NamesCall (296) */ + /** @name PalletWeb3NamesCall (301) */ interface PalletWeb3NamesCall extends Enum { readonly isClaim: boolean; readonly asClaim: { @@ -2830,7 +2997,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Claim' | 'ReleaseByOwner' | 'ReclaimDeposit' | 'Ban' | 'Unban' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name PublicCredentialsCall (297) */ + /** @name PublicCredentialsCall (302) */ interface PublicCredentialsCall extends Enum { readonly isAdd: boolean; readonly asAdd: { @@ -2866,7 +3033,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Add' | 'Revoke' | 'Unrevoke' | 'Remove' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name PublicCredentialsCredentialsCredential (298) */ + /** @name PublicCredentialsCredentialsCredential (303) */ interface PublicCredentialsCredentialsCredential extends Struct { readonly ctypeHash: H256; readonly subject: Bytes; @@ -2874,7 +3041,7 @@ declare module '@polkadot/types/lookup' { readonly authorization: Option; } - /** @name CumulusPalletParachainSystemCall (301) */ + /** @name CumulusPalletParachainSystemCall (306) */ interface CumulusPalletParachainSystemCall extends Enum { readonly isSetValidationData: boolean; readonly asSetValidationData: { @@ -2895,7 +3062,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetValidationData' | 'SudoSendUpwardMessage' | 'AuthorizeUpgrade' | 'EnactAuthorizedUpgrade'; } - /** @name CumulusPrimitivesParachainInherentParachainInherentData (302) */ + /** @name CumulusPrimitivesParachainInherentParachainInherentData (307) */ interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct { readonly validationData: PolkadotPrimitivesV2PersistedValidationData; readonly relayChainState: SpTrieStorageProof; @@ -2903,7 +3070,7 @@ declare module '@polkadot/types/lookup' { readonly horizontalMessages: BTreeMap>; } - /** @name PolkadotPrimitivesV2PersistedValidationData (303) */ + /** @name PolkadotPrimitivesV2PersistedValidationData (308) */ interface PolkadotPrimitivesV2PersistedValidationData extends Struct { readonly parentHead: Bytes; readonly relayParentNumber: u32; @@ -2911,29 +3078,29 @@ declare module '@polkadot/types/lookup' { readonly maxPovSize: u32; } - /** @name SpTrieStorageProof (305) */ + /** @name SpTrieStorageProof (310) */ interface SpTrieStorageProof extends Struct { readonly trieNodes: BTreeSet; } - /** @name PolkadotCorePrimitivesInboundDownwardMessage (308) */ + /** @name PolkadotCorePrimitivesInboundDownwardMessage (313) */ interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct { readonly sentAt: u32; readonly msg: Bytes; } - /** @name PolkadotCorePrimitivesInboundHrmpMessage (311) */ + /** @name PolkadotCorePrimitivesInboundHrmpMessage (316) */ interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct { readonly sentAt: u32; readonly data: Bytes; } - /** @name CumulusPalletXcmpQueueCall (314) */ + /** @name CumulusPalletXcmpQueueCall (319) */ interface CumulusPalletXcmpQueueCall extends Enum { readonly isServiceOverweight: boolean; readonly asServiceOverweight: { readonly index: u64; - readonly weightLimit: u64; + readonly weightLimit: SpWeightsWeightV2Weight; } & Struct; readonly isSuspendXcmExecution: boolean; readonly isResumeXcmExecution: boolean; @@ -2951,20 +3118,20 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isUpdateThresholdWeight: boolean; readonly asUpdateThresholdWeight: { - readonly new_: u64; + readonly new_: SpWeightsWeightV2Weight; } & Struct; readonly isUpdateWeightRestrictDecay: boolean; readonly asUpdateWeightRestrictDecay: { - readonly new_: u64; + readonly new_: SpWeightsWeightV2Weight; } & Struct; readonly isUpdateXcmpMaxIndividualWeight: boolean; readonly asUpdateXcmpMaxIndividualWeight: { - readonly new_: u64; + readonly new_: SpWeightsWeightV2Weight; } & Struct; readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight'; } - /** @name PalletXcmCall (315) */ + /** @name PalletXcmCall (320) */ interface PalletXcmCall extends Enum { readonly isSend: boolean; readonly asSend: { @@ -2988,11 +3155,11 @@ declare module '@polkadot/types/lookup' { readonly isExecute: boolean; readonly asExecute: { readonly message: XcmVersionedXcm; - readonly maxWeight: u64; + readonly maxWeight: SpWeightsWeightV2Weight; } & Struct; readonly isForceXcmVersion: boolean; readonly asForceXcmVersion: { - readonly location: XcmV1MultiLocation; + readonly location: XcmV3MultiLocation; readonly xcmVersion: u32; } & Struct; readonly isForceDefaultXcmVersion: boolean; @@ -3013,7 +3180,7 @@ declare module '@polkadot/types/lookup' { readonly beneficiary: XcmVersionedMultiLocation; readonly assets: XcmVersionedMultiAssets; readonly feeAssetItem: u32; - readonly weightLimit: XcmV2WeightLimit; + readonly weightLimit: XcmV3WeightLimit; } & Struct; readonly isLimitedTeleportAssets: boolean; readonly asLimitedTeleportAssets: { @@ -3021,59 +3188,52 @@ declare module '@polkadot/types/lookup' { readonly beneficiary: XcmVersionedMultiLocation; readonly assets: XcmVersionedMultiAssets; readonly feeAssetItem: u32; - readonly weightLimit: XcmV2WeightLimit; + readonly weightLimit: XcmV3WeightLimit; } & Struct; readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets'; } - /** @name XcmVersionedXcm (316) */ + /** @name XcmVersionedXcm (321) */ interface XcmVersionedXcm extends Enum { - readonly isV0: boolean; - readonly asV0: XcmV0Xcm; - readonly isV1: boolean; - readonly asV1: XcmV1Xcm; readonly isV2: boolean; readonly asV2: XcmV2Xcm; - readonly type: 'V0' | 'V1' | 'V2'; + readonly isV3: boolean; + readonly asV3: XcmV3Xcm; + readonly type: 'V2' | 'V3'; } - /** @name XcmV0Xcm (317) */ - interface XcmV0Xcm extends Enum { + /** @name XcmV2Xcm (322) */ + interface XcmV2Xcm extends Vec {} + + /** @name XcmV2Instruction (324) */ + interface XcmV2Instruction extends Enum { readonly isWithdrawAsset: boolean; - readonly asWithdrawAsset: { - readonly assets: Vec; - readonly effects: Vec; - } & Struct; - readonly isReserveAssetDeposit: boolean; - readonly asReserveAssetDeposit: { - readonly assets: Vec; - readonly effects: Vec; - } & Struct; - readonly isTeleportAsset: boolean; - readonly asTeleportAsset: { - readonly assets: Vec; - readonly effects: Vec; - } & Struct; + readonly asWithdrawAsset: XcmV2MultiassetMultiAssets; + readonly isReserveAssetDeposited: boolean; + readonly asReserveAssetDeposited: XcmV2MultiassetMultiAssets; + readonly isReceiveTeleportedAsset: boolean; + readonly asReceiveTeleportedAsset: XcmV2MultiassetMultiAssets; readonly isQueryResponse: boolean; readonly asQueryResponse: { readonly queryId: Compact; - readonly response: XcmV0Response; + readonly response: XcmV2Response; + readonly maxWeight: Compact; } & Struct; readonly isTransferAsset: boolean; readonly asTransferAsset: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; + readonly assets: XcmV2MultiassetMultiAssets; + readonly beneficiary: XcmV2MultiLocation; } & Struct; readonly isTransferReserveAsset: boolean; readonly asTransferReserveAsset: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; - readonly effects: Vec; + readonly assets: XcmV2MultiassetMultiAssets; + readonly dest: XcmV2MultiLocation; + readonly xcm: XcmV2Xcm; } & Struct; readonly isTransact: boolean; readonly asTransact: { - readonly originType: XcmV0OriginKind; - readonly requireWeightAtMost: u64; + readonly originType: XcmV2OriginKind; + readonly requireWeightAtMost: Compact; readonly call: XcmDoubleEncoded; } & Struct; readonly isHrmpNewChannelOpenRequest: boolean; @@ -3092,203 +3252,165 @@ declare module '@polkadot/types/lookup' { readonly sender: Compact; readonly recipient: Compact; } & Struct; - readonly isRelayedFrom: boolean; - readonly asRelayedFrom: { - readonly who: XcmV0MultiLocation; - readonly message: XcmV0Xcm; + readonly isClearOrigin: boolean; + readonly isDescendOrigin: boolean; + readonly asDescendOrigin: XcmV2MultilocationJunctions; + readonly isReportError: boolean; + readonly asReportError: { + readonly queryId: Compact; + readonly dest: XcmV2MultiLocation; + readonly maxResponseWeight: Compact; } & Struct; - readonly type: 'WithdrawAsset' | 'ReserveAssetDeposit' | 'TeleportAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom'; - } - - /** @name XcmV0Order (319) */ - interface XcmV0Order extends Enum { - readonly isNull: boolean; readonly isDepositAsset: boolean; readonly asDepositAsset: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly maxAssets: Compact; + readonly beneficiary: XcmV2MultiLocation; } & Struct; readonly isDepositReserveAsset: boolean; readonly asDepositReserveAsset: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; - readonly effects: Vec; + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly maxAssets: Compact; + readonly dest: XcmV2MultiLocation; + readonly xcm: XcmV2Xcm; } & Struct; readonly isExchangeAsset: boolean; readonly asExchangeAsset: { - readonly give: Vec; - readonly receive: Vec; + readonly give: XcmV2MultiassetMultiAssetFilter; + readonly receive: XcmV2MultiassetMultiAssets; } & Struct; readonly isInitiateReserveWithdraw: boolean; readonly asInitiateReserveWithdraw: { - readonly assets: Vec; - readonly reserve: XcmV0MultiLocation; - readonly effects: Vec; + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly reserve: XcmV2MultiLocation; + readonly xcm: XcmV2Xcm; } & Struct; readonly isInitiateTeleport: boolean; readonly asInitiateTeleport: { - readonly assets: Vec; - readonly dest: XcmV0MultiLocation; - readonly effects: Vec; + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly dest: XcmV2MultiLocation; + readonly xcm: XcmV2Xcm; } & Struct; readonly isQueryHolding: boolean; readonly asQueryHolding: { readonly queryId: Compact; - readonly dest: XcmV0MultiLocation; - readonly assets: Vec; + readonly dest: XcmV2MultiLocation; + readonly assets: XcmV2MultiassetMultiAssetFilter; + readonly maxResponseWeight: Compact; } & Struct; readonly isBuyExecution: boolean; readonly asBuyExecution: { - readonly fees: XcmV0MultiAsset; - readonly weight: u64; - readonly debt: u64; - readonly haltOnError: bool; - readonly xcm: Vec; - } & Struct; - readonly type: 'Null' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution'; - } - - /** @name XcmV0Response (321) */ - interface XcmV0Response extends Enum { - readonly isAssets: boolean; - readonly asAssets: Vec; - readonly type: 'Assets'; - } - - /** @name XcmV1Xcm (322) */ - interface XcmV1Xcm extends Enum { - readonly isWithdrawAsset: boolean; - readonly asWithdrawAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly effects: Vec; - } & Struct; - readonly isReserveAssetDeposited: boolean; - readonly asReserveAssetDeposited: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly effects: Vec; - } & Struct; - readonly isReceiveTeleportedAsset: boolean; - readonly asReceiveTeleportedAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly effects: Vec; - } & Struct; - readonly isQueryResponse: boolean; - readonly asQueryResponse: { - readonly queryId: Compact; - readonly response: XcmV1Response; - } & Struct; - readonly isTransferAsset: boolean; - readonly asTransferAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly beneficiary: XcmV1MultiLocation; - } & Struct; - readonly isTransferReserveAsset: boolean; - readonly asTransferReserveAsset: { - readonly assets: XcmV1MultiassetMultiAssets; - readonly dest: XcmV1MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isTransact: boolean; - readonly asTransact: { - readonly originType: XcmV0OriginKind; - readonly requireWeightAtMost: u64; - readonly call: XcmDoubleEncoded; - } & Struct; - readonly isHrmpNewChannelOpenRequest: boolean; - readonly asHrmpNewChannelOpenRequest: { - readonly sender: Compact; - readonly maxMessageSize: Compact; - readonly maxCapacity: Compact; - } & Struct; - readonly isHrmpChannelAccepted: boolean; - readonly asHrmpChannelAccepted: { - readonly recipient: Compact; - } & Struct; - readonly isHrmpChannelClosing: boolean; - readonly asHrmpChannelClosing: { - readonly initiator: Compact; - readonly sender: Compact; - readonly recipient: Compact; + readonly fees: XcmV2MultiAsset; + readonly weightLimit: XcmV2WeightLimit; } & Struct; - readonly isRelayedFrom: boolean; - readonly asRelayedFrom: { - readonly who: XcmV1MultilocationJunctions; - readonly message: XcmV1Xcm; + readonly isRefundSurplus: boolean; + readonly isSetErrorHandler: boolean; + readonly asSetErrorHandler: XcmV2Xcm; + readonly isSetAppendix: boolean; + readonly asSetAppendix: XcmV2Xcm; + readonly isClearError: boolean; + readonly isClaimAsset: boolean; + readonly asClaimAsset: { + readonly assets: XcmV2MultiassetMultiAssets; + readonly ticket: XcmV2MultiLocation; } & Struct; + readonly isTrap: boolean; + readonly asTrap: Compact; readonly isSubscribeVersion: boolean; readonly asSubscribeVersion: { readonly queryId: Compact; readonly maxResponseWeight: Compact; } & Struct; readonly isUnsubscribeVersion: boolean; - readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom' | 'SubscribeVersion' | 'UnsubscribeVersion'; - } - - /** @name XcmV1Order (324) */ - interface XcmV1Order extends Enum { - readonly isNoop: boolean; - readonly isDepositAsset: boolean; - readonly asDepositAsset: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxAssets: u32; - readonly beneficiary: XcmV1MultiLocation; - } & Struct; - readonly isDepositReserveAsset: boolean; - readonly asDepositReserveAsset: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly maxAssets: u32; - readonly dest: XcmV1MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isExchangeAsset: boolean; - readonly asExchangeAsset: { - readonly give: XcmV1MultiassetMultiAssetFilter; - readonly receive: XcmV1MultiassetMultiAssets; - } & Struct; - readonly isInitiateReserveWithdraw: boolean; - readonly asInitiateReserveWithdraw: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly reserve: XcmV1MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isInitiateTeleport: boolean; - readonly asInitiateTeleport: { - readonly assets: XcmV1MultiassetMultiAssetFilter; - readonly dest: XcmV1MultiLocation; - readonly effects: Vec; - } & Struct; - readonly isQueryHolding: boolean; - readonly asQueryHolding: { - readonly queryId: Compact; - readonly dest: XcmV1MultiLocation; - readonly assets: XcmV1MultiassetMultiAssetFilter; - } & Struct; - readonly isBuyExecution: boolean; - readonly asBuyExecution: { - readonly fees: XcmV1MultiAsset; - readonly weight: u64; - readonly debt: u64; - readonly haltOnError: bool; - readonly instructions: Vec; - } & Struct; - readonly type: 'Noop' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution'; + readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion'; } - /** @name XcmV1Response (326) */ - interface XcmV1Response extends Enum { + /** @name XcmV2Response (325) */ + interface XcmV2Response extends Enum { + readonly isNull: boolean; readonly isAssets: boolean; - readonly asAssets: XcmV1MultiassetMultiAssets; + readonly asAssets: XcmV2MultiassetMultiAssets; + readonly isExecutionResult: boolean; + readonly asExecutionResult: Option>; readonly isVersion: boolean; readonly asVersion: u32; - readonly type: 'Assets' | 'Version'; + readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version'; } - /** @name CumulusPalletDmpQueueCall (340) */ + /** @name XcmV2TraitsError (328) */ + interface XcmV2TraitsError extends Enum { + readonly isOverflow: boolean; + readonly isUnimplemented: boolean; + readonly isUntrustedReserveLocation: boolean; + readonly isUntrustedTeleportLocation: boolean; + readonly isMultiLocationFull: boolean; + readonly isMultiLocationNotInvertible: boolean; + readonly isBadOrigin: boolean; + readonly isInvalidLocation: boolean; + readonly isAssetNotFound: boolean; + readonly isFailedToTransactAsset: boolean; + readonly isNotWithdrawable: boolean; + readonly isLocationCannotHold: boolean; + readonly isExceedsMaxMessageSize: boolean; + readonly isDestinationUnsupported: boolean; + readonly isTransport: boolean; + readonly isUnroutable: boolean; + readonly isUnknownClaim: boolean; + readonly isFailedToDecode: boolean; + readonly isMaxWeightInvalid: boolean; + readonly isNotHoldingFees: boolean; + readonly isTooExpensive: boolean; + readonly isTrap: boolean; + readonly asTrap: u64; + readonly isUnhandledXcmVersion: boolean; + readonly isWeightLimitReached: boolean; + readonly asWeightLimitReached: u64; + readonly isBarrier: boolean; + readonly isWeightNotComputable: boolean; + readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable'; + } + + /** @name XcmV2MultiassetMultiAssetFilter (329) */ + interface XcmV2MultiassetMultiAssetFilter extends Enum { + readonly isDefinite: boolean; + readonly asDefinite: XcmV2MultiassetMultiAssets; + readonly isWild: boolean; + readonly asWild: XcmV2MultiassetWildMultiAsset; + readonly type: 'Definite' | 'Wild'; + } + + /** @name XcmV2MultiassetWildMultiAsset (330) */ + interface XcmV2MultiassetWildMultiAsset extends Enum { + readonly isAll: boolean; + readonly isAllOf: boolean; + readonly asAllOf: { + readonly id: XcmV2MultiassetAssetId; + readonly fun: XcmV2MultiassetWildFungibility; + } & Struct; + readonly type: 'All' | 'AllOf'; + } + + /** @name XcmV2MultiassetWildFungibility (331) */ + interface XcmV2MultiassetWildFungibility extends Enum { + readonly isFungible: boolean; + readonly isNonFungible: boolean; + readonly type: 'Fungible' | 'NonFungible'; + } + + /** @name XcmV2WeightLimit (332) */ + interface XcmV2WeightLimit extends Enum { + readonly isUnlimited: boolean; + readonly isLimited: boolean; + readonly asLimited: Compact; + readonly type: 'Unlimited' | 'Limited'; + } + + /** @name CumulusPalletDmpQueueCall (341) */ interface CumulusPalletDmpQueueCall extends Enum { readonly isServiceOverweight: boolean; readonly asServiceOverweight: { readonly index: u64; - readonly weightLimit: u64; + readonly weightLimit: SpWeightsWeightV2Weight; } & Struct; readonly type: 'ServiceOverweight'; } @@ -3556,10 +3678,10 @@ declare module '@polkadot/types/lookup' { /** @name CtypeError (402) */ interface CtypeError extends Enum { - readonly isCTypeNotFound: boolean; - readonly isCTypeAlreadyExists: boolean; + readonly isNotFound: boolean; + readonly isAlreadyExists: boolean; readonly isUnableToPayFees: boolean; - readonly type: 'CTypeNotFound' | 'CTypeAlreadyExists' | 'UnableToPayFees'; + readonly type: 'NotFound' | 'AlreadyExists' | 'UnableToPayFees'; } /** @name AttestationAttestationsAttestationDetails (403) */ @@ -3581,11 +3703,11 @@ declare module '@polkadot/types/lookup' { interface AttestationError extends Enum { readonly isAlreadyAttested: boolean; readonly isAlreadyRevoked: boolean; - readonly isAttestationNotFound: boolean; + readonly isNotFound: boolean; readonly isCTypeMismatch: boolean; - readonly isUnauthorized: boolean; + readonly isNotAuthorized: boolean; readonly isMaxDelegatedAttestationsExceeded: boolean; - readonly type: 'AlreadyAttested' | 'AlreadyRevoked' | 'AttestationNotFound' | 'CTypeMismatch' | 'Unauthorized' | 'MaxDelegatedAttestationsExceeded'; + readonly type: 'AlreadyAttested' | 'AlreadyRevoked' | 'NotFound' | 'CTypeMismatch' | 'NotAuthorized' | 'MaxDelegatedAttestationsExceeded'; } /** @name DelegationDelegationHierarchyDelegationNode (407) */ @@ -3597,19 +3719,19 @@ declare module '@polkadot/types/lookup' { readonly deposit: KiltSupportDeposit; } - /** @name DelegationDelegationHierarchyDelegationDetails (410) */ + /** @name DelegationDelegationHierarchyDelegationDetails (411) */ interface DelegationDelegationHierarchyDelegationDetails extends Struct { readonly owner: AccountId32; readonly revoked: bool; readonly permissions: DelegationDelegationHierarchyPermissions; } - /** @name DelegationDelegationHierarchyDelegationHierarchyDetails (411) */ + /** @name DelegationDelegationHierarchyDelegationHierarchyDetails (412) */ interface DelegationDelegationHierarchyDelegationHierarchyDetails extends Struct { readonly ctypeHash: H256; } - /** @name DelegationError (412) */ + /** @name DelegationError (413) */ interface DelegationError extends Enum { readonly isDelegationAlreadyExists: boolean; readonly isInvalidDelegateSignature: boolean; @@ -3631,12 +3753,12 @@ declare module '@polkadot/types/lookup' { readonly isMaxRevocationsTooLarge: boolean; readonly isMaxRemovalsTooLarge: boolean; readonly isMaxParentChecksTooLarge: boolean; - readonly isInternalError: boolean; + readonly isInternal: boolean; readonly isMaxChildrenExceeded: boolean; - readonly type: 'DelegationAlreadyExists' | 'InvalidDelegateSignature' | 'DelegationNotFound' | 'DelegateNotFound' | 'HierarchyAlreadyExists' | 'HierarchyNotFound' | 'MaxSearchDepthReached' | 'NotOwnerOfParentDelegation' | 'NotOwnerOfDelegationHierarchy' | 'ParentDelegationNotFound' | 'ParentDelegationRevoked' | 'UnauthorizedRevocation' | 'UnauthorizedRemoval' | 'UnauthorizedDelegation' | 'AccessDenied' | 'ExceededRevocationBounds' | 'ExceededRemovalBounds' | 'MaxRevocationsTooLarge' | 'MaxRemovalsTooLarge' | 'MaxParentChecksTooLarge' | 'InternalError' | 'MaxChildrenExceeded'; + readonly type: 'DelegationAlreadyExists' | 'InvalidDelegateSignature' | 'DelegationNotFound' | 'DelegateNotFound' | 'HierarchyAlreadyExists' | 'HierarchyNotFound' | 'MaxSearchDepthReached' | 'NotOwnerOfParentDelegation' | 'NotOwnerOfDelegationHierarchy' | 'ParentDelegationNotFound' | 'ParentDelegationRevoked' | 'UnauthorizedRevocation' | 'UnauthorizedRemoval' | 'UnauthorizedDelegation' | 'AccessDenied' | 'ExceededRevocationBounds' | 'ExceededRemovalBounds' | 'MaxRevocationsTooLarge' | 'MaxRemovalsTooLarge' | 'MaxParentChecksTooLarge' | 'Internal' | 'MaxChildrenExceeded'; } - /** @name DidDidDetails (413) */ + /** @name DidDidDetails (414) */ interface DidDidDetails extends Struct { readonly authenticationKey: H256; readonly keyAgreementKeys: BTreeSet; @@ -3647,13 +3769,13 @@ declare module '@polkadot/types/lookup' { readonly deposit: KiltSupportDeposit; } - /** @name DidDidDetailsDidPublicKeyDetails (416) */ + /** @name DidDidDetailsDidPublicKeyDetails (417) */ interface DidDidDetailsDidPublicKeyDetails extends Struct { readonly key: DidDidDetailsDidPublicKey; readonly blockNumber: u64; } - /** @name DidDidDetailsDidPublicKey (417) */ + /** @name DidDidDetailsDidPublicKey (418) */ interface DidDidDetailsDidPublicKey extends Enum { readonly isPublicVerificationKey: boolean; readonly asPublicVerificationKey: DidDidDetailsDidVerificationKey; @@ -3662,79 +3784,97 @@ declare module '@polkadot/types/lookup' { readonly type: 'PublicVerificationKey' | 'PublicEncryptionKey'; } - /** @name DidError (422) */ + /** @name DidError (423) */ interface DidError extends Enum { readonly isInvalidSignatureFormat: boolean; readonly isInvalidSignature: boolean; - readonly isDidAlreadyPresent: boolean; - readonly isDidNotPresent: boolean; - readonly isVerificationKeyNotPresent: boolean; + readonly isAlreadyExists: boolean; + readonly isNotFound: boolean; + readonly isVerificationKeyNotFound: boolean; readonly isInvalidNonce: boolean; readonly isUnsupportedDidAuthorizationCall: boolean; readonly isInvalidDidAuthorizationCall: boolean; - readonly isMaxKeyAgreementKeysLimitExceeded: boolean; - readonly isMaxPublicKeysPerDidExceeded: boolean; - readonly isMaxTotalKeyAgreementKeysExceeded: boolean; + readonly isMaxNewKeyAgreementKeysLimitExceeded: boolean; + readonly isMaxPublicKeysExceeded: boolean; + readonly isMaxKeyAgreementKeysExceeded: boolean; readonly isBadDidOrigin: boolean; readonly isTransactionExpired: boolean; - readonly isDidAlreadyDeleted: boolean; + readonly isAlreadyDeleted: boolean; readonly isNotOwnerOfDeposit: boolean; readonly isUnableToPayFees: boolean; - readonly isMaxNumberOfServicesPerDidExceeded: boolean; + readonly isMaxNumberOfServicesExceeded: boolean; readonly isMaxServiceIdLengthExceeded: boolean; readonly isMaxServiceTypeLengthExceeded: boolean; readonly isMaxNumberOfTypesPerServiceExceeded: boolean; readonly isMaxServiceUrlLengthExceeded: boolean; readonly isMaxNumberOfUrlsPerServiceExceeded: boolean; - readonly isServiceAlreadyPresent: boolean; - readonly isServiceNotPresent: boolean; + readonly isServiceAlreadyExists: boolean; + readonly isServiceNotFound: boolean; readonly isInvalidServiceEncoding: boolean; - readonly isStoredEndpointsCountTooLarge: boolean; - readonly isInternalError: boolean; - readonly type: 'InvalidSignatureFormat' | 'InvalidSignature' | 'DidAlreadyPresent' | 'DidNotPresent' | 'VerificationKeyNotPresent' | 'InvalidNonce' | 'UnsupportedDidAuthorizationCall' | 'InvalidDidAuthorizationCall' | 'MaxKeyAgreementKeysLimitExceeded' | 'MaxPublicKeysPerDidExceeded' | 'MaxTotalKeyAgreementKeysExceeded' | 'BadDidOrigin' | 'TransactionExpired' | 'DidAlreadyDeleted' | 'NotOwnerOfDeposit' | 'UnableToPayFees' | 'MaxNumberOfServicesPerDidExceeded' | 'MaxServiceIdLengthExceeded' | 'MaxServiceTypeLengthExceeded' | 'MaxNumberOfTypesPerServiceExceeded' | 'MaxServiceUrlLengthExceeded' | 'MaxNumberOfUrlsPerServiceExceeded' | 'ServiceAlreadyPresent' | 'ServiceNotPresent' | 'InvalidServiceEncoding' | 'StoredEndpointsCountTooLarge' | 'InternalError'; + readonly isMaxStoredEndpointsCountExceeded: boolean; + readonly isInternal: boolean; + readonly type: 'InvalidSignatureFormat' | 'InvalidSignature' | 'AlreadyExists' | 'NotFound' | 'VerificationKeyNotFound' | 'InvalidNonce' | 'UnsupportedDidAuthorizationCall' | 'InvalidDidAuthorizationCall' | 'MaxNewKeyAgreementKeysLimitExceeded' | 'MaxPublicKeysExceeded' | 'MaxKeyAgreementKeysExceeded' | 'BadDidOrigin' | 'TransactionExpired' | 'AlreadyDeleted' | 'NotOwnerOfDeposit' | 'UnableToPayFees' | 'MaxNumberOfServicesExceeded' | 'MaxServiceIdLengthExceeded' | 'MaxServiceTypeLengthExceeded' | 'MaxNumberOfTypesPerServiceExceeded' | 'MaxServiceUrlLengthExceeded' | 'MaxNumberOfUrlsPerServiceExceeded' | 'ServiceAlreadyExists' | 'ServiceNotFound' | 'InvalidServiceEncoding' | 'MaxStoredEndpointsCountExceeded' | 'Internal'; } - /** @name PalletDidLookupConnectionRecord (423) */ + /** @name PalletDidLookupConnectionRecord (424) */ interface PalletDidLookupConnectionRecord extends Struct { readonly did: AccountId32; readonly deposit: KiltSupportDeposit; } - /** @name PalletDidLookupError (425) */ + /** @name PalletDidLookupMigrationState (426) */ + interface PalletDidLookupMigrationState extends Enum { + readonly isDone: boolean; + readonly isPreUpgrade: boolean; + readonly isUpgrading: boolean; + readonly asUpgrading: PalletDidLookupMigrationsMixedStorageKey; + readonly type: 'Done' | 'PreUpgrade' | 'Upgrading'; + } + + /** @name PalletDidLookupMigrationsMixedStorageKey (427) */ + interface PalletDidLookupMigrationsMixedStorageKey extends Enum { + readonly isV1: boolean; + readonly asV1: AccountId32; + readonly isV2: boolean; + readonly asV2: PalletDidLookupLinkableAccountLinkableAccountId; + readonly type: 'V1' | 'V2'; + } + + /** @name PalletDidLookupError (428) */ interface PalletDidLookupError extends Enum { - readonly isAssociationNotFound: boolean; + readonly isNotFound: boolean; readonly isNotAuthorized: boolean; readonly isOutdatedProof: boolean; readonly isInsufficientFunds: boolean; - readonly type: 'AssociationNotFound' | 'NotAuthorized' | 'OutdatedProof' | 'InsufficientFunds'; + readonly isMigration: boolean; + readonly type: 'NotFound' | 'NotAuthorized' | 'OutdatedProof' | 'InsufficientFunds' | 'Migration'; } - /** @name PalletWeb3NamesWeb3NameWeb3NameOwnership (426) */ + /** @name PalletWeb3NamesWeb3NameWeb3NameOwnership (429) */ interface PalletWeb3NamesWeb3NameWeb3NameOwnership extends Struct { readonly owner: AccountId32; readonly claimedAt: u64; readonly deposit: KiltSupportDeposit; } - /** @name PalletWeb3NamesError (427) */ + /** @name PalletWeb3NamesError (430) */ interface PalletWeb3NamesError extends Enum { readonly isInsufficientFunds: boolean; - readonly isWeb3NameAlreadyClaimed: boolean; - readonly isWeb3NameNotFound: boolean; + readonly isAlreadyExists: boolean; + readonly isNotFound: boolean; readonly isOwnerAlreadyExists: boolean; readonly isOwnerNotFound: boolean; - readonly isWeb3NameBanned: boolean; - readonly isWeb3NameNotBanned: boolean; - readonly isWeb3NameAlreadyBanned: boolean; + readonly isBanned: boolean; + readonly isNotBanned: boolean; + readonly isAlreadyBanned: boolean; readonly isNotAuthorized: boolean; - readonly isWeb3NameTooShort: boolean; - readonly isWeb3NameTooLong: boolean; - readonly isInvalidWeb3NameCharacter: boolean; - readonly isUnauthorized: boolean; - readonly type: 'InsufficientFunds' | 'Web3NameAlreadyClaimed' | 'Web3NameNotFound' | 'OwnerAlreadyExists' | 'OwnerNotFound' | 'Web3NameBanned' | 'Web3NameNotBanned' | 'Web3NameAlreadyBanned' | 'NotAuthorized' | 'Web3NameTooShort' | 'Web3NameTooLong' | 'InvalidWeb3NameCharacter' | 'Unauthorized'; + readonly isTooShort: boolean; + readonly isTooLong: boolean; + readonly isInvalidCharacter: boolean; + readonly type: 'InsufficientFunds' | 'AlreadyExists' | 'NotFound' | 'OwnerAlreadyExists' | 'OwnerNotFound' | 'Banned' | 'NotBanned' | 'AlreadyBanned' | 'NotAuthorized' | 'TooShort' | 'TooLong' | 'InvalidCharacter'; } - /** @name PublicCredentialsCredentialsCredentialEntry (429) */ + /** @name PublicCredentialsCredentialsCredentialEntry (432) */ interface PublicCredentialsCredentialsCredentialEntry extends Struct { readonly ctypeHash: H256; readonly attester: AccountId32; @@ -3744,24 +3884,24 @@ declare module '@polkadot/types/lookup' { readonly authorizationId: Option; } - /** @name PublicCredentialsError (430) */ + /** @name PublicCredentialsError (433) */ interface PublicCredentialsError extends Enum { - readonly isCredentialAlreadyIssued: boolean; - readonly isCredentialNotFound: boolean; + readonly isAlreadyAttested: boolean; + readonly isNotFound: boolean; readonly isUnableToPayFees: boolean; readonly isInvalidInput: boolean; - readonly isUnauthorized: boolean; - readonly isInternalError: boolean; - readonly type: 'CredentialAlreadyIssued' | 'CredentialNotFound' | 'UnableToPayFees' | 'InvalidInput' | 'Unauthorized' | 'InternalError'; + readonly isNotAuthorized: boolean; + readonly isInternal: boolean; + readonly type: 'AlreadyAttested' | 'NotFound' | 'UnableToPayFees' | 'InvalidInput' | 'NotAuthorized' | 'Internal'; } - /** @name PolkadotPrimitivesV2UpgradeRestriction (432) */ + /** @name PolkadotPrimitivesV2UpgradeRestriction (435) */ interface PolkadotPrimitivesV2UpgradeRestriction extends Enum { readonly isPresent: boolean; readonly type: 'Present'; } - /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (433) */ + /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (436) */ interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct { readonly dmqMqcHead: H256; readonly relayDispatchQueueSize: ITuple<[u32, u32]>; @@ -3769,7 +3909,7 @@ declare module '@polkadot/types/lookup' { readonly egressChannels: Vec>; } - /** @name PolkadotPrimitivesV2AbridgedHrmpChannel (437) */ + /** @name PolkadotPrimitivesV2AbridgedHrmpChannel (440) */ interface PolkadotPrimitivesV2AbridgedHrmpChannel extends Struct { readonly maxCapacity: u32; readonly maxTotalSize: u32; @@ -3779,7 +3919,7 @@ declare module '@polkadot/types/lookup' { readonly mqcHead: Option; } - /** @name PolkadotPrimitivesV2AbridgedHostConfiguration (438) */ + /** @name PolkadotPrimitivesV2AbridgedHostConfiguration (441) */ interface PolkadotPrimitivesV2AbridgedHostConfiguration extends Struct { readonly maxCodeSize: u32; readonly maxHeadDataSize: u32; @@ -3792,13 +3932,13 @@ declare module '@polkadot/types/lookup' { readonly validationUpgradeDelay: u32; } - /** @name PolkadotCorePrimitivesOutboundHrmpMessage (444) */ + /** @name PolkadotCorePrimitivesOutboundHrmpMessage (447) */ interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct { readonly recipient: u32; readonly data: Bytes; } - /** @name CumulusPalletParachainSystemError (445) */ + /** @name CumulusPalletParachainSystemError (448) */ interface CumulusPalletParachainSystemError extends Enum { readonly isOverlappingUpgrades: boolean; readonly isProhibitedByPolkadot: boolean; @@ -3811,21 +3951,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'OverlappingUpgrades' | 'ProhibitedByPolkadot' | 'TooBig' | 'ValidationDataNotAvailable' | 'HostConfigurationNotAvailable' | 'NotScheduled' | 'NothingAuthorized' | 'Unauthorized'; } - /** @name CumulusPalletXcmpQueueInboundChannelDetails (447) */ + /** @name CumulusPalletXcmpQueueInboundChannelDetails (450) */ interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct { readonly sender: u32; readonly state: CumulusPalletXcmpQueueInboundState; readonly messageMetadata: Vec>; } - /** @name CumulusPalletXcmpQueueInboundState (448) */ + /** @name CumulusPalletXcmpQueueInboundState (451) */ interface CumulusPalletXcmpQueueInboundState extends Enum { readonly isOk: boolean; readonly isSuspended: boolean; readonly type: 'Ok' | 'Suspended'; } - /** @name PolkadotParachainPrimitivesXcmpMessageFormat (451) */ + /** @name PolkadotParachainPrimitivesXcmpMessageFormat (454) */ interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum { readonly isConcatenatedVersionedXcm: boolean; readonly isConcatenatedEncodedBlob: boolean; @@ -3833,7 +3973,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals'; } - /** @name CumulusPalletXcmpQueueOutboundChannelDetails (454) */ + /** @name CumulusPalletXcmpQueueOutboundChannelDetails (457) */ interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct { readonly recipient: u32; readonly state: CumulusPalletXcmpQueueOutboundState; @@ -3842,14 +3982,14 @@ declare module '@polkadot/types/lookup' { readonly lastIndex: u16; } - /** @name CumulusPalletXcmpQueueOutboundState (455) */ + /** @name CumulusPalletXcmpQueueOutboundState (458) */ interface CumulusPalletXcmpQueueOutboundState extends Enum { readonly isOk: boolean; readonly isSuspended: boolean; readonly type: 'Ok' | 'Suspended'; } - /** @name CumulusPalletXcmpQueueQueueConfigData (457) */ + /** @name CumulusPalletXcmpQueueQueueConfigData (460) */ interface CumulusPalletXcmpQueueQueueConfigData extends Struct { readonly suspendThreshold: u32; readonly dropThreshold: u32; @@ -3859,7 +3999,7 @@ declare module '@polkadot/types/lookup' { readonly xcmpMaxIndividualWeight: SpWeightsWeightV2Weight; } - /** @name CumulusPalletXcmpQueueError (459) */ + /** @name CumulusPalletXcmpQueueError (462) */ interface CumulusPalletXcmpQueueError extends Enum { readonly isFailedToSend: boolean; readonly isBadXcmOrigin: boolean; @@ -3869,7 +4009,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit'; } - /** @name PalletXcmError (460) */ + /** @name PalletXcmError (463) */ interface PalletXcmError extends Enum { readonly isUnreachable: boolean; readonly isSendFailure: boolean; @@ -3884,50 +4024,57 @@ declare module '@polkadot/types/lookup' { readonly isBadLocation: boolean; readonly isNoSubscription: boolean; readonly isAlreadySubscribed: boolean; - readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed'; + readonly isInvalidAsset: boolean; + readonly isLowBalance: boolean; + readonly isTooManyLocks: boolean; + readonly isAccountNotSovereign: boolean; + readonly isFeesNotMet: boolean; + readonly isLockNotFound: boolean; + readonly isInUse: boolean; + readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed' | 'InvalidAsset' | 'LowBalance' | 'TooManyLocks' | 'AccountNotSovereign' | 'FeesNotMet' | 'LockNotFound' | 'InUse'; } - /** @name CumulusPalletXcmError (461) */ + /** @name CumulusPalletXcmError (464) */ type CumulusPalletXcmError = Null; - /** @name CumulusPalletDmpQueueConfigData (462) */ + /** @name CumulusPalletDmpQueueConfigData (465) */ interface CumulusPalletDmpQueueConfigData extends Struct { readonly maxIndividual: SpWeightsWeightV2Weight; } - /** @name CumulusPalletDmpQueuePageIndexData (463) */ + /** @name CumulusPalletDmpQueuePageIndexData (466) */ interface CumulusPalletDmpQueuePageIndexData extends Struct { readonly beginUsed: u32; readonly endUsed: u32; readonly overweightCount: u64; } - /** @name CumulusPalletDmpQueueError (466) */ + /** @name CumulusPalletDmpQueueError (469) */ interface CumulusPalletDmpQueueError extends Enum { readonly isUnknown: boolean; readonly isOverLimit: boolean; readonly type: 'Unknown' | 'OverLimit'; } - /** @name FrameSystemExtensionsCheckNonZeroSender (469) */ + /** @name FrameSystemExtensionsCheckNonZeroSender (472) */ type FrameSystemExtensionsCheckNonZeroSender = Null; - /** @name FrameSystemExtensionsCheckSpecVersion (470) */ + /** @name FrameSystemExtensionsCheckSpecVersion (473) */ type FrameSystemExtensionsCheckSpecVersion = Null; - /** @name FrameSystemExtensionsCheckTxVersion (471) */ + /** @name FrameSystemExtensionsCheckTxVersion (474) */ type FrameSystemExtensionsCheckTxVersion = Null; - /** @name FrameSystemExtensionsCheckGenesis (472) */ + /** @name FrameSystemExtensionsCheckGenesis (475) */ type FrameSystemExtensionsCheckGenesis = Null; - /** @name FrameSystemExtensionsCheckNonce (475) */ + /** @name FrameSystemExtensionsCheckNonce (478) */ interface FrameSystemExtensionsCheckNonce extends Compact {} - /** @name FrameSystemExtensionsCheckWeight (476) */ + /** @name FrameSystemExtensionsCheckWeight (479) */ type FrameSystemExtensionsCheckWeight = Null; - /** @name PalletTransactionPaymentChargeTransactionPayment (477) */ + /** @name PalletTransactionPaymentChargeTransactionPayment (480) */ interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} } // declare module diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index d68ff46bf..1cc7783a2 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.0-11", + "version": "0.32.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 962018643..e1ac9e5dc 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.0-11", + "version": "0.32.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 27578fe8c..e2830daf5 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.0-11", + "version": "0.32.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/src/__integrationtests__/AccountLinking.spec.ts b/packages/core/src/__integrationtests__/AccountLinking.spec.ts index 111ce49b1..3f31ec64c 100644 --- a/packages/core/src/__integrationtests__/AccountLinking.spec.ts +++ b/packages/core/src/__integrationtests__/AccountLinking.spec.ts @@ -182,7 +182,6 @@ describe('When there is an on-chain DID', () => { ) const signedTx = await Did.authorizeTx( did.uri, - // @ts-ignore api.tx.didLookup.associateAccount(...args), didKey.getSignCallback(did), paymentAccount.address @@ -221,7 +220,6 @@ describe('When there is an on-chain DID', () => { ) const signedTx = await Did.authorizeTx( newDid.uri, - // @ts-ignore api.tx.didLookup.associateAccount(...args), newDidKey.getSignCallback(newDid), paymentAccount.address @@ -306,7 +304,6 @@ describe('When there is an on-chain DID', () => { ) const signedTx = await Did.authorizeTx( did.uri, - // @ts-ignore api.tx.didLookup.associateAccount(...args), didKey.getSignCallback(did), paymentAccount.address diff --git a/packages/core/src/balance/Balance.utils.ts b/packages/core/src/balance/Balance.utils.ts index d475751aa..d92ddae99 100644 --- a/packages/core/src/balance/Balance.utils.ts +++ b/packages/core/src/balance/Balance.utils.ts @@ -151,8 +151,10 @@ export function fromFemtoKilt( const formatted = formatKiltBalance(inputBN, { ...options, locale: 'en' }) const [number, ...rest] = formatted.split(' ') const localeNumber = new Intl.NumberFormat(options.locale, { + // flooring the fraction by having the formatter use 1 more than the desired decimals and removing the extra digit minimumFractionDigits: decimals + 1, maximumFractionDigits: decimals + 1, }).format(Number(number)) + // removing the extra digit here return `${localeNumber.slice(0, localeNumber.length - 1)} ${rest.join(' ')}` } diff --git a/packages/did/package.json b/packages/did/package.json index 05db4283e..e7338d0a9 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.0-11", + "version": "0.32.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/src/Did.rpc.ts b/packages/did/src/Did.rpc.ts index 9f5f9b91d..4812a0cac 100644 --- a/packages/did/src/Did.rpc.ts +++ b/packages/did/src/Did.rpc.ts @@ -5,7 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { Enum, Option, U8aFixed, Vec } from '@polkadot/types' +import type { Option, Vec } from '@polkadot/types' import type { Codec } from '@polkadot/types/types' import type { AccountId32, Hash } from '@polkadot/types/interfaces' import type { @@ -14,6 +14,7 @@ import type { DidDidDetailsDidPublicKeyDetails, DidDidDetails, DidServiceEndpointsDidEndpoint, + PalletDidLookupLinkableAccountLinkableAccountId, } from '@kiltprotocol/augment-api' import type { Deposit, @@ -138,17 +139,6 @@ function servicesFromChain( return encoded.map((encodedValue) => serviceFromChain(encodedValue)) } -/** - * Type describing storage type that is yet to be deployed to spiritnet. - */ -interface PalletDidLookupLinkableAccountLinkableAccountId extends Enum { - readonly isAccountId20: boolean - readonly asAccountId20: U8aFixed - readonly isAccountId32: boolean - readonly asAccountId32: AccountId32 - readonly type: 'AccountId20' | 'AccountId32' -} - function isLinkableAccountId( arg: Codec ): arg is PalletDidLookupLinkableAccountLinkableAccountId { diff --git a/packages/did/src/DidLinks/AccountLinks.chain.ts b/packages/did/src/DidLinks/AccountLinks.chain.ts index be3a372c6..ae62cbc60 100644 --- a/packages/did/src/DidLinks/AccountLinks.chain.ts +++ b/packages/did/src/DidLinks/AccountLinks.chain.ts @@ -6,7 +6,7 @@ */ import { decodeAddress, signatureVerify } from '@polkadot/util-crypto' -import type { AnyNumber, TypeDef } from '@polkadot/types/types' +import type { TypeDef } from '@polkadot/types/types' import type { HexString } from '@polkadot/util/types' import type { KeyringPair } from '@polkadot/keyring/types' import type { KeypairType } from '@polkadot/util-crypto/types' @@ -41,21 +41,13 @@ type EncodedMultiAddress = | { AccountId32: Uint8Array } /** - * Detects whether api decoration indicates presence of Ethereum linking enabled pallet. + * Detects whether the spec version indicates presence of Ethereum linking enabled pallet. * * @param api The api object. * @returns True if Ethereum linking is supported. */ function isEthereumEnabled(api: ApiPromise): boolean { - const removeType = api.createType( - api.tx.didLookup.removeAccountAssociation.meta.args[0]?.type?.toString() || - 'bool' - ) - const associateType = api.createType( - api.tx.didLookup.associateAccount.meta.args[0]?.type?.toString() || 'bool' - ) - - return 'isAccountId20' in removeType || 'isEthereum' in associateType + return api.runtimeVersion.specVersion.gten(11000) } /** @@ -93,7 +85,18 @@ export function accountToChain(account: Address): Address { /* ### EXTRINSICS ### */ -type AssociateAccountToChainResult = [string, AnyNumber, EncodedSignature] +type LinkingInfo = [Address, unknown] +type AssociateAccountToChainResult = [ + ( + | { + Polkadot: LinkingInfo + } + | { + Ethereum: LinkingInfo + } + ), + BN +] /* ### HELPERS ### */ @@ -197,21 +200,21 @@ export async function getLinkingArguments( if (isEthereumEnabled(api)) { if (type === 'ethereum') { - const result = [{ Ethereum: [accountAddress, signature] }, validUntil] - // Force type cast to enable the old blockchain types to accept the future format - return result as unknown as AssociateAccountToChainResult + return [{ Ethereum: [accountAddress, signature] }, validUntil] } - const result = [{ Polkadot: [accountAddress, proof] }, validUntil] - // Force type cast to enable the old blockchain types to accept the future format - return result as unknown as AssociateAccountToChainResult + return [{ Polkadot: [accountAddress, proof] }, validUntil] } if (type === 'ethereum') throw new SDKErrors.CodecMismatchError( 'Ethereum linking is not yet supported by this chain' ) - - return [accountAddress, validUntil, proof] + // Force type cast to enable the new blockchain types to accept the historic format + return [ + accountAddress, + validUntil, + proof, + ] as unknown as AssociateAccountToChainResult } /** diff --git a/packages/messaging/package.json b/packages/messaging/package.json index c2914f1ee..4480ef898 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.0-11", + "version": "0.32.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 0b1d1e03b..535fb3e58 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.0-11", + "version": "0.32.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 34398f1bd..d2b72a59e 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.0-11", + "version": "0.32.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 981d4c151..f80235b3e 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.0-11", + "version": "0.32.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 35a21eab2..d28c1af42 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.0-11", + "version": "0.32.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 6f4423db9..86e4c8900 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.0-11", + "version": "0.32.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 909b97bc1..e5ced791a 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.0-11", + "version": "0.32.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From cf3c54d73e15f122eccc45abe0b81ec1210473bc Mon Sep 17 00:00:00 2001 From: Github Action Date: Tue, 21 Mar 2023 18:51:30 +0000 Subject: [PATCH 018/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index c96815748..22f6ecfed 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.0", + "version": "0.32.1-0", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 63ae29571..aa3ef8a22 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.0", + "version": "0.32.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index d630366d8..f21f1e554 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.0", + "version": "0.32.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 1cc7783a2..024086e79 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.0", + "version": "0.32.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index e1ac9e5dc..f9152d3ad 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.0", + "version": "0.32.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index e2830daf5..31589b8fd 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.0", + "version": "0.32.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index e7338d0a9..6d2c6289a 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.0", + "version": "0.32.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 4480ef898..26af02526 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.0", + "version": "0.32.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 535fb3e58..e3b7962a0 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.0", + "version": "0.32.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index d2b72a59e..cf3885d24 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.0", + "version": "0.32.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index f80235b3e..ac39d77b8 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.0", + "version": "0.32.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index d28c1af42..ca7dbc824 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.0", + "version": "0.32.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 86e4c8900..977d057e9 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.0", + "version": "0.32.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index e5ced791a..026c334e4 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.0", + "version": "0.32.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 97c936122106d06ad4ec347c93cf22cf67f54ded Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Tue, 21 Mar 2023 19:52:56 +0100 Subject: [PATCH 019/130] feat: enums and arrays on new ctype metaschema (#740) * feat: enums and arrays on new ctype metaschema * chore: update unit test * chore: adjust types * test: new CType features * fix: workaround to make chrome parse ipfs uri --- packages/core/src/ctype/CType.schemas.ts | 111 +++++++-- packages/core/src/ctype/CType.spec.ts | 235 ++++++++++++++++++- packages/core/src/ctype/Ctype.nested.spec.ts | 2 +- packages/types/src/CType.ts | 43 +++- packages/types/src/Claim.ts | 13 +- 5 files changed, 373 insertions(+), 31 deletions(-) diff --git a/packages/core/src/ctype/CType.schemas.ts b/packages/core/src/ctype/CType.schemas.ts index 75c5e3adf..0ee74c940 100644 --- a/packages/core/src/ctype/CType.schemas.ts +++ b/packages/core/src/ctype/CType.schemas.ts @@ -9,7 +9,7 @@ import { JsonSchema } from '@kiltprotocol/utils' export const CTypeModelV1: JsonSchema.Schema & { $id: string } = { // $id is not contained in schema when fetched from ipfs bc that is impossible with a content-addressed system - $id: 'ipfs://bafybeifzfxz6tfd2xo7ijxbfceaxo3l655yg7sovlsnpxgq2rwfl4kbfgm', + $id: 'ipfs://bafybeiah66wbkhqbqn7idkostj2iqyan2tstc4tpqt65udlhimd7hcxjyq/', $schema: 'http://json-schema.org/draft-07/schema#', title: 'CType Metaschema (V1)', description: @@ -27,28 +27,11 @@ export const CTypeModelV1: JsonSchema.Schema & { $id: string } = { patternProperties: { '^.+$': { oneOf: [ - { - additionalProperties: false, - properties: { - $ref: { - pattern: '^kilt:ctype:0x[0-9a-f]+(#/properties/.+)?$', - format: 'uri', - type: 'string', - }, - }, - required: ['$ref'], - }, - { - additionalProperties: false, - properties: { - format: { enum: ['date', 'time', 'uri'], type: 'string' }, - type: { - enum: ['boolean', 'integer', 'number', 'string'], - type: 'string', - }, - }, - required: ['type'], - }, + { $ref: '#/definitions/string' }, + { $ref: '#/definitions/number' }, + { $ref: '#/definitions/boolean' }, + { $ref: '#/definitions/cTypeReference' }, + { $ref: '#/definitions/array' }, ], type: 'object', }, @@ -66,6 +49,88 @@ export const CTypeModelV1: JsonSchema.Schema & { $id: string } = { 'title', 'type', ], + definitions: { + cTypeReference: { + additionalProperties: false, + properties: { + $ref: { + pattern: '^kilt:ctype:0x[0-9a-f]+(#/properties/.+)?$', + format: 'uri', + type: 'string', + }, + }, + required: ['$ref'], + }, + string: { + additionalProperties: false, + properties: { + type: { + const: 'string', + }, + format: { enum: ['date', 'time', 'uri'] }, + enum: { + type: 'array', + items: { type: 'string' }, + }, + minLength: { + type: 'number', + }, + maxLength: { + type: 'number', + }, + }, + required: ['type'], + }, + boolean: { + additionalProperties: false, + properties: { + type: { + const: 'boolean', + }, + }, + required: ['type'], + }, + number: { + additionalProperties: false, + properties: { + type: { + enum: ['integer', 'number'], + }, + enum: { + type: 'array', + items: { type: 'number' }, + }, + minimum: { + type: 'number', + }, + maximum: { + type: 'number', + }, + }, + required: ['type'], + }, + array: { + additionalProperties: false, + properties: { + type: { const: 'array' }, + items: { + oneOf: [ + { $ref: '#/definitions/string' }, + { $ref: '#/definitions/number' }, + { $ref: '#/definitions/boolean' }, + { $ref: '#/definitions/cTypeReference' }, + ], + }, + minItems: { + type: 'number', + }, + maxItems: { + type: 'number', + }, + }, + required: ['type', 'items'], + }, + }, } export const CTypeModelDraft01: JsonSchema.Schema & { $id: string } = { diff --git a/packages/core/src/ctype/CType.spec.ts b/packages/core/src/ctype/CType.spec.ts index 50815ec0a..9c4eb4e6f 100644 --- a/packages/core/src/ctype/CType.spec.ts +++ b/packages/core/src/ctype/CType.spec.ts @@ -34,7 +34,7 @@ it('consistent CType id generation', () => { }) expect(ctypeV1.$id).toMatchInlineSnapshot( - `"kilt:ctype:0x12c8edb42b455aa6c29fabda8f3768bd1e8577f0618f122072828e41b6f4f728"` + `"kilt:ctype:0xc4145b9c5c7ae10f60c6a707b9dabf704ab65d7802a839854643a579c9bc80a5"` ) const ctypeV0 = CType.fromProperties( @@ -51,6 +51,239 @@ it('consistent CType id generation', () => { ) }) +describe('value constraints', () => { + let cTypeWithConstraints: ICType + beforeAll(() => { + cTypeWithConstraints = CType.fromProperties('ConstraintsCtype', { + labels: { + type: 'array', + items: { + type: 'string', + enum: ['important', 'vital', 'critical', 'essential'], + }, + minItems: 1, + maxItems: 3, + }, + w3n: { + type: 'string', + minLength: 3, + maxLength: 10, + }, + date: { + type: 'string', + format: 'date', + }, + age: { + type: 'integer', + minimum: 0, + maximum: 999, + }, + multiplier: { + type: 'number', + enum: [0.2, 0.6, 1.2, 2.4], + }, + }) + }) + + it('constrains array length', () => { + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + labels: ['critical'], + }, + didAlice + ) + ).not.toThrow() + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + labels: ['important', 'critical'], + }, + didAlice + ) + ).not.toThrow() + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + labels: ['important', 'critical', 'essential'], + }, + didAlice + ) + ).not.toThrow() + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + labels: [], + }, + didAlice + ) + ).toThrow() + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + labels: ['important', 'vital', 'critical', 'essential'], + }, + didAlice + ) + ).toThrow() + }) + + it('constrains array contents via enum', () => { + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + labels: ['important', 'critical', 'essential'], + }, + didAlice + ) + ).not.toThrow() + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + labels: ['niceToHave'], + }, + didAlice + ) + ).toThrow() + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + labels: [12], + }, + didAlice + ) + ).toThrow() + }) + + it('constrains string length', () => { + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + w3n: 'juergen', + }, + didAlice + ) + ).not.toThrow() + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + w3n: 'jo', + }, + didAlice + ) + ).toThrow() + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + w3n: 'Peter der Große, Zar von Russland', + }, + didAlice + ) + ).toThrow() + }) + + it('constrains numeric range', () => { + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + age: 22, + }, + didAlice + ) + ).not.toThrow() + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + age: -12, + }, + didAlice + ) + ).toThrow() + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + age: 1000, + }, + didAlice + ) + ).toThrow() + }) + + it('constrains to numbers in enum', () => { + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + multiplier: 1.2, + }, + didAlice + ) + ).not.toThrow() + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + multiplier: 1, + }, + didAlice + ) + ).toThrow() + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + multiplier: 0.14, + }, + didAlice + ) + ).toThrow() + }) + + it('constrains string to date format', () => { + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + date: '2022-01-22', + }, + didAlice + ) + ).not.toThrow() + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + date: '11:30', + }, + didAlice + ) + ).toThrow() + expect(() => + Claim.fromCTypeAndClaimContents( + cTypeWithConstraints, + { + date: 'fried fish', + }, + didAlice + ) + ).toThrow() + }) +}) + it('e2e', () => { const claimCtype = CType.fromProperties('CtypeModel 2', { name: { type: 'string' }, diff --git a/packages/core/src/ctype/Ctype.nested.spec.ts b/packages/core/src/ctype/Ctype.nested.spec.ts index 5b9dd7b8e..27639e9ef 100644 --- a/packages/core/src/ctype/Ctype.nested.spec.ts +++ b/packages/core/src/ctype/Ctype.nested.spec.ts @@ -142,7 +142,7 @@ describe('Nested CTypes', () => { claimDeepContents ) ).not.toThrow() - ;(claimDeepContents.passport as Record).fullName = {} + ;(claimDeepContents.passport as any).fullName = {} expect(() => CType.verifyClaimAgainstNestedSchemas( deeplyNestedCType, diff --git a/packages/types/src/CType.ts b/packages/types/src/CType.ts index f056abeac..c0737de15 100644 --- a/packages/types/src/CType.ts +++ b/packages/types/src/CType.ts @@ -7,16 +7,55 @@ import type { HexString } from '@polkadot/util/types' -export type InstanceType = 'boolean' | 'integer' | 'number' | 'string' +export type InstanceType = 'boolean' | 'integer' | 'number' | 'string' | 'array' export type CTypeHash = HexString +interface TypePattern { + type: InstanceType +} + +interface StringPattern extends TypePattern { + type: 'string' + format?: 'date' | 'time' | 'uri' + enum?: string[] + minLength?: number + maxLength?: number +} + +interface NumberPattern extends TypePattern { + type: 'integer' | 'number' + enum?: number[] + minimum?: number + maximum?: number +} + +interface BooleanPattern extends TypePattern { + type: 'boolean' +} + +interface RefPattern { + $ref: string +} + +interface ArrayPattern extends TypePattern { + type: 'array' + items: BooleanPattern | NumberPattern | StringPattern | RefPattern + minItems?: number + maxItems?: number +} + export interface ICType { $id: `kilt:ctype:${CTypeHash}` $schema: string title: string properties: { - [key: string]: { type: InstanceType; format?: string } | { $ref: string } + [key: string]: + | BooleanPattern + | NumberPattern + | StringPattern + | ArrayPattern + | RefPattern } type: 'object' additionalProperties?: false diff --git a/packages/types/src/Claim.ts b/packages/types/src/Claim.ts index 42f448fdb..5e8691644 100644 --- a/packages/types/src/Claim.ts +++ b/packages/types/src/Claim.ts @@ -8,10 +8,15 @@ import type { CTypeHash } from './CType' import type { DidUri } from './DidDocument' -export type IClaimContents = Record< - string, - Record | string | number | boolean -> +type ClaimPrimitives = string | number | boolean + +export interface IClaimContents { + [key: string]: + | ClaimPrimitives + | IClaimContents + | Array +} + export interface IClaim { cTypeHash: CTypeHash contents: IClaimContents From e668ba191f38318bdffbf665286c0479e364245c Mon Sep 17 00:00:00 2001 From: Github Action Date: Tue, 21 Mar 2023 18:57:56 +0000 Subject: [PATCH 020/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 22f6ecfed..6670c35b9 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.1-0", + "version": "0.32.1-1", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index aa3ef8a22..e5908d97a 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.1-0", + "version": "0.32.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index f21f1e554..dbc91eb9f 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.1-0", + "version": "0.32.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 024086e79..f7b9f3075 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.1-0", + "version": "0.32.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index f9152d3ad..7db9c2b33 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.1-0", + "version": "0.32.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 31589b8fd..6c30bdbf4 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.1-0", + "version": "0.32.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index 6d2c6289a..5943347bd 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.1-0", + "version": "0.32.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 26af02526..fad9524dc 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.1-0", + "version": "0.32.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index e3b7962a0..3ffe5026c 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.1-0", + "version": "0.32.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index cf3885d24..336359117 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.1-0", + "version": "0.32.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index ac39d77b8..7721f08bf 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.1-0", + "version": "0.32.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index ca7dbc824..6184a2003 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.1-0", + "version": "0.32.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 977d057e9..85e385405 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.1-0", + "version": "0.32.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 026c334e4..3e7f4ba03 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.1-0", + "version": "0.32.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From b8cf0bdf7fe35f0059cbde27d254ae53699cc067 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Thu, 6 Apr 2023 08:52:15 +0200 Subject: [PATCH 021/130] ci: update GitHub workflows (#745) --- .github/actions/cached-image-pull/action.yml | 4 +- .github/workflows/devpackpublish.yml | 7 ++-- .github/workflows/docpublish.yml | 11 ++--- .github/workflows/npmpublish-rc.yml | 12 +++--- .github/workflows/npmpublish.yml | 12 +++--- .github/workflows/semantic-pull-request.yml | 2 +- .github/workflows/test-node-candidate.yml | 34 +++++++--------- .github/workflows/tests-polkadot-deps.yml | 24 ++++------- .github/workflows/tests.yml | 42 +++++++++----------- 9 files changed, 65 insertions(+), 83 deletions(-) diff --git a/.github/actions/cached-image-pull/action.yml b/.github/actions/cached-image-pull/action.yml index e2bb9d822..351bb3e6a 100644 --- a/.github/actions/cached-image-pull/action.yml +++ b/.github/actions/cached-image-pull/action.yml @@ -23,11 +23,11 @@ runs: env: CACHE_PATH: ${{ inputs.cache-directory }}${{ inputs.cache-file }}.tar run: | - echo "::set-output name=path::$CACHE_PATH" + echo "path=$CACHE_PATH" >> $GITHUB_OUTPUT - name: check image cache id: image-cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{ steps.image-file.outputs.path }} key: image-cache-${{ inputs.image }} diff --git a/.github/workflows/devpackpublish.yml b/.github/workflows/devpackpublish.yml index a84bf6c8e..a976dc9cc 100644 --- a/.github/workflows/devpackpublish.yml +++ b/.github/workflows/devpackpublish.yml @@ -16,21 +16,22 @@ jobs: runs-on: ubuntu-latest if: "! startsWith(github.event.head_commit.message, '[CI Skip]') && github.repository == 'kiltprotocol/sdk-js'" steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: # fetch-depth 0 and token needed to push changes on the package.json files back. fetch-depth: 0 token: ${{ secrets.REPO_ACCESS_TOKEN }} - - uses: actions/setup-node@v2 + - uses: actions/setup-node@v3 with: node-version: 14 + cache: 'yarn' - name: Install dependencies run: yarn install --immutable - name: Bump prerelease version of root package run: npm version --no-git-tag-version prerelease - name: Get current package version id: package_version - run: echo "::set-output name=package_version::$(node -pe "require('./package.json').version")" + run: echo "package_version=$(node -pe "require('./package.json').version")" >> $GITHUB_OUTPUT - name: Set all other packages to same version env: PACKAGE_VERSION: ${{ steps.package_version.outputs.package_version }} diff --git a/.github/workflows/docpublish.yml b/.github/workflows/docpublish.yml index 0e2d9f5e6..6d075f62a 100644 --- a/.github/workflows/docpublish.yml +++ b/.github/workflows/docpublish.yml @@ -10,9 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 # If you're using actions/checkout@v2 you must set persist-credentials to false in most cases for the deployment to work correctly. - with: - persist-credentials: false + uses: actions/checkout@v3 - name: Install and Build run: | @@ -20,8 +18,7 @@ jobs: yarn build:docs - name: Deploy - uses: JamesIves/github-pages-deploy-action@releases/v3 + uses: JamesIves/github-pages-deploy-action@v4 with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - BRANCH: gh-pages # The branch the action should deploy to. - FOLDER: docs/api # The folder the action should deploy to. + branch: gh-pages # The branch the action should deploy to. + folder: docs/api # The folder the action should deploy to. diff --git a/.github/workflows/npmpublish-rc.yml b/.github/workflows/npmpublish-rc.yml index ece3e6a33..c53519c74 100644 --- a/.github/workflows/npmpublish-rc.yml +++ b/.github/workflows/npmpublish-rc.yml @@ -6,10 +6,11 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 with: node-version: 14 + cache: 'yarn' - run: yarn install --immutable - run: yarn build - run: yarn test:ci @@ -18,10 +19,11 @@ jobs: needs: build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 with: node-version: 14 + cache: 'yarn' - name: Install dependencies run: yarn install --immutable - name: Build packages @@ -30,7 +32,7 @@ jobs: run: yarn run bundle - name: Get current package version id: package_version - run: echo "::set-output name=package_version::$(node -pe "require('./package.json').version")" + run: echo "package_version=$(node -pe "require('./package.json').version")" >> $GITHUB_OUTPUT - name: Publish to NPM run: yarn run publish --tag rc env: diff --git a/.github/workflows/npmpublish.yml b/.github/workflows/npmpublish.yml index 7957abf81..7f3123b81 100644 --- a/.github/workflows/npmpublish.yml +++ b/.github/workflows/npmpublish.yml @@ -6,10 +6,11 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 with: node-version: 14 + cache: 'yarn' - run: yarn install --immutable - run: yarn build - run: yarn test:ci @@ -18,10 +19,11 @@ jobs: needs: build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 with: node-version: 14 + cache: 'yarn' - name: Install dependencies run: yarn install --immutable - name: Build packages @@ -30,7 +32,7 @@ jobs: run: yarn run bundle - name: Get current package version id: package_version - run: echo "::set-output name=package_version::$(node -pe "require('./package.json').version")" + run: echo "package_version=$(node -pe "require('./package.json').version")" >> $GITHUB_OUTPUT - name: Publish to NPM run: yarn run publish --tag latest env: diff --git a/.github/workflows/semantic-pull-request.yml b/.github/workflows/semantic-pull-request.yml index 06d2d32d3..c4ba39bf9 100644 --- a/.github/workflows/semantic-pull-request.yml +++ b/.github/workflows/semantic-pull-request.yml @@ -11,6 +11,6 @@ jobs: validate: runs-on: ubuntu-latest steps: - - uses: amannn/action-semantic-pull-request@v4 + - uses: amannn/action-semantic-pull-request@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test-node-candidate.yml b/.github/workflows/test-node-candidate.yml index 742e97a92..6276ffd4c 100644 --- a/.github/workflows/test-node-candidate.yml +++ b/.github/workflows/test-node-candidate.yml @@ -18,7 +18,7 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Use Node.js 14 + - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: 14 @@ -30,7 +30,7 @@ jobs: - name: zip build run: zip -r build.zip . - name: upload build - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: build path: build.zip @@ -51,22 +51,20 @@ jobs: needs: cache_imgs steps: - - name: Log out node version - run: node --version - - name: Use Node.js 14 + - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: 14 - name: Log out node version run: node --version - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: build - name: unzip run: unzip build.zip -d . - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 + uses: aws-actions/configure-aws-credentials@v2 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} @@ -99,11 +97,11 @@ jobs: needs: build steps: - - name: Use Node.js 14 + - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: 14 - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: build - name: unzip @@ -111,7 +109,7 @@ jobs: - name: yarn bundle run: yarn bundle - name: upload bundle artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: checked-nonmin-bundle path: packages/sdk-js/dist/sdk-js.umd.js @@ -122,21 +120,21 @@ jobs: needs: [cache_imgs, bundle_cache] steps: - - name: Use Node.js 14 - uses: actions/setup-node@v3 + - uses: actions/setup-node@v3 with: - node-version: 14 - - uses: actions/download-artifact@v2 + node-version: '16.x' + - uses: actions/download-artifact@v3 with: name: build - name: unzip run: unzip build.zip -d . - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: checked-nonmin-bundle path: packages/sdk-js/dist + - run: basename /packages/sdk-js/dist/ - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 + uses: aws-actions/configure-aws-credentials@v2 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} @@ -145,10 +143,6 @@ jobs: - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v1 - - uses: actions/setup-node@v2 - with: - node-version: '16.x' - - run: basename /packages/sdk-js/dist/ - name: pull node image env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} diff --git a/.github/workflows/tests-polkadot-deps.yml b/.github/workflows/tests-polkadot-deps.yml index fe4494ed0..b83dd2869 100644 --- a/.github/workflows/tests-polkadot-deps.yml +++ b/.github/workflows/tests-polkadot-deps.yml @@ -16,24 +16,14 @@ jobs: node-version: [14.x, 16.x] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: ref: master - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - - uses: actions/cache@v2 - id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-${{ matrix.node-version }}-updated-dependencies - restore-keys: | - ${{ runner.os }}-${{ matrix.node-version }}-updated-dependencies - ${{ runner.os }}-${{ matrix.node-version }}-yarn- + cache: 'yarn' - name: delete yarn.lock run: rm -f yarn.lock @@ -57,7 +47,7 @@ jobs: - name: zip build run: zip -r build.zip . - name: upload build - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: build-${{ matrix.node-version }} path: build.zip @@ -77,7 +67,7 @@ jobs: continue-on-error: ${{ matrix.required == 'optional' }} steps: - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: build-${{ matrix.node-version }} - name: unzip @@ -101,14 +91,14 @@ jobs: continue-on-error: ${{ matrix.required == 'optional' }} steps: - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: build-14.x - name: unzip run: unzip build.zip -d . - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 + uses: aws-actions/configure-aws-credentials@v2 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d0edfbeac..3b83fb704 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,7 +13,8 @@ on: - 'Dockerfile' - 'docker-compose.yml' - 'dc.build.node.yml' - - '.github/workflows/*publish.yml' + - '.github/**' + - '!.github/workflows/tests.yml' pull_request: branches: - develop @@ -37,7 +38,7 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Use Node.js 14 + - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: 14 @@ -49,7 +50,7 @@ jobs: - name: zip build run: zip -r build.zip . - name: upload build - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: build path: build.zip @@ -59,11 +60,11 @@ jobs: needs: build steps: - - name: Use Node.js 14 + - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: 14 - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: build - name: unzip @@ -92,7 +93,7 @@ jobs: uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: build - name: unzip @@ -123,22 +124,20 @@ jobs: continue-on-error: ${{ matrix.required == 'optional' }} steps: - - name: Log out node version - run: node --version - - name: Use Node.js 14 + - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: 14 - name: Log out node version run: node --version - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: build - name: unzip run: unzip build.zip -d . - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 + uses: aws-actions/configure-aws-credentials@v2 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} @@ -171,11 +170,11 @@ jobs: needs: build steps: - - name: Use Node.js 14 + - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: 14 - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: build - name: unzip @@ -183,7 +182,7 @@ jobs: - name: yarn bundle run: yarn bundle - name: upload bundle artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: checked-nonmin-bundle path: packages/sdk-js/dist/sdk-js.umd.js @@ -202,21 +201,21 @@ jobs: continue-on-error: ${{ matrix.required == 'optional' }} steps: - - name: Use Node.js 14 - uses: actions/setup-node@v3 + - uses: actions/setup-node@v3 with: - node-version: 14 - - uses: actions/download-artifact@v2 + node-version: '16.x' + - uses: actions/download-artifact@v3 with: name: build - name: unzip run: unzip build.zip -d . - - uses: actions/download-artifact@v2 + - uses: actions/download-artifact@v3 with: name: checked-nonmin-bundle path: packages/sdk-js/dist + - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 + uses: aws-actions/configure-aws-credentials@v2 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} @@ -225,9 +224,6 @@ jobs: - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v1 - - uses: actions/setup-node@v2 - with: - node-version: '16.x' - run: basename /packages/sdk-js/dist/ - name: pull node image env: From 2cdb02a6cd307e5922266003b28caad035e14780 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Thu, 6 Apr 2023 13:38:59 +0200 Subject: [PATCH 022/130] feat!: vc-export produces KiltCredentialV1 & KiltAttestationProofV1 compliant credentials (#718) * feat!: new vc export (#733) * refactor!: make all key ids absolute uris on conformant did doc (#742) * feat: new vc presentation tools (#734) * feat!: new vc suites (#735) * docs: add description of added features to README --- jest.config.js | 2 +- packages/did/package.json | 1 + .../src/DidDocumentExporter/DidContexts.ts | 106 +-- .../DidDocumentExporter.spec.ts | 40 +- .../DidDocumentExporter.ts | 18 +- .../did/src/DidResolver/DidResolver.spec.ts | 2 +- packages/types/src/DidDocumentExporter.ts | 10 +- packages/utils/src/Crypto.ts | 4 +- packages/vc-export/README.md | 144 +-- packages/vc-export/package.json | 13 +- packages/vc-export/src/CAIP/CAIP.spec.ts | 58 ++ packages/vc-export/src/CAIP/caip19.ts | 47 + packages/vc-export/src/CAIP/caip2.ts | 51 + packages/vc-export/src/CAIP/index.ts | 9 + .../vc-export/src/CredentialSchema.spec.ts | 74 ++ packages/vc-export/src/CredentialSchema.ts | 49 + packages/vc-export/src/DidJwt.spec.ts | 180 ++++ packages/vc-export/src/DidJwt.ts | 277 ++++++ .../src/KiltAttestationProofV1.spec.ts | 302 ++++++ .../vc-export/src/KiltAttestationProofV1.ts | 722 +++++++++++++++ packages/vc-export/src/KiltCredentialV1.ts | 334 +++++++ .../vc-export/src/KiltRevocationStatusV1.ts | 104 +++ packages/vc-export/src/Presentation.spec.ts | 398 ++++++++ packages/vc-export/src/Presentation.ts | 286 ++++++ packages/vc-export/src/common.ts | 149 +++ packages/vc-export/src/constants.ts | 51 +- packages/vc-export/src/errors.ts | 16 + .../src/exportToVerifiableCredential.spec.ts | 485 +++------- .../src/exportToVerifiableCredential.ts | 163 ---- packages/vc-export/src/fromICredential.ts | 38 + packages/vc-export/src/index.ts | 13 +- packages/vc-export/src/presentationUtils.ts | 133 --- packages/vc-export/src/types.ts | 220 +++-- .../vc-export/src/vc-js/context/context.ts | 150 ++- .../vc-export/src/vc-js/documentLoader.ts | 135 ++- .../vc-js/examples/ICredentialExample.json | 24 + .../src/vc-js/examples/example-vc.json | 53 -- packages/vc-export/src/vc-js/index.ts | 3 +- .../purposes/KiltAttestationProofV1Purpose.ts | 56 ++ .../vc-export/src/vc-js/purposes/index.ts | 8 + .../src/vc-js/suites/KiltAbstractSuite.ts | 100 -- .../suites/KiltAttestationProofV1.spec.ts | 566 ++++++++++++ .../vc-js/suites/KiltAttestationProofV1.ts | 239 +++++ .../vc-js/suites/KiltAttestedSuite.spec.ts | 182 ---- .../src/vc-js/suites/KiltAttestedSuite.ts | 84 -- .../vc-js/suites/KiltIntegritySuite.spec.ts | 165 ---- .../src/vc-js/suites/KiltIntegritySuite.ts | 65 -- .../vc-js/suites/KiltSignatureSuite.spec.ts | 201 ---- .../src/vc-js/suites/KiltSignatureSuite.ts | 61 -- .../vc-js/suites/Sr25519Signature2020.spec.ts | 159 ++++ .../src/vc-js/suites/Sr25519Signature2020.ts | 275 ++++++ .../vc-js/suites/Sr25519VerificationKey.ts | 350 +++++++ .../suites/Sr25519VerificationKey2020.spec.ts | 64 ++ packages/vc-export/src/vc-js/suites/index.ts | 6 +- packages/vc-export/src/vc-js/suites/types.ts | 28 + packages/vc-export/src/vc-js/suites/utils.ts | 29 + packages/vc-export/src/vc-js/types.ts | 8 + .../vc-export/src/vc-js/types/crypto-ld.d.ts | 1 - .../src/vc-js/types/jsonld-signatures.d.ts | 74 -- packages/vc-export/src/vc-js/types/vc.d.ts | 25 - packages/vc-export/src/verificationUtils.ts | 331 ------- yarn.lock | 874 +++++++++--------- 62 files changed, 6021 insertions(+), 2794 deletions(-) create mode 100644 packages/vc-export/src/CAIP/CAIP.spec.ts create mode 100644 packages/vc-export/src/CAIP/caip19.ts create mode 100644 packages/vc-export/src/CAIP/caip2.ts create mode 100644 packages/vc-export/src/CAIP/index.ts create mode 100644 packages/vc-export/src/CredentialSchema.spec.ts create mode 100644 packages/vc-export/src/CredentialSchema.ts create mode 100644 packages/vc-export/src/DidJwt.spec.ts create mode 100644 packages/vc-export/src/DidJwt.ts create mode 100644 packages/vc-export/src/KiltAttestationProofV1.spec.ts create mode 100644 packages/vc-export/src/KiltAttestationProofV1.ts create mode 100644 packages/vc-export/src/KiltCredentialV1.ts create mode 100644 packages/vc-export/src/KiltRevocationStatusV1.ts create mode 100644 packages/vc-export/src/Presentation.spec.ts create mode 100644 packages/vc-export/src/Presentation.ts create mode 100644 packages/vc-export/src/common.ts create mode 100644 packages/vc-export/src/errors.ts delete mode 100644 packages/vc-export/src/exportToVerifiableCredential.ts create mode 100644 packages/vc-export/src/fromICredential.ts delete mode 100644 packages/vc-export/src/presentationUtils.ts create mode 100644 packages/vc-export/src/vc-js/examples/ICredentialExample.json delete mode 100644 packages/vc-export/src/vc-js/examples/example-vc.json create mode 100644 packages/vc-export/src/vc-js/purposes/KiltAttestationProofV1Purpose.ts create mode 100644 packages/vc-export/src/vc-js/purposes/index.ts delete mode 100644 packages/vc-export/src/vc-js/suites/KiltAbstractSuite.ts create mode 100644 packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts create mode 100644 packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts delete mode 100644 packages/vc-export/src/vc-js/suites/KiltAttestedSuite.spec.ts delete mode 100644 packages/vc-export/src/vc-js/suites/KiltAttestedSuite.ts delete mode 100644 packages/vc-export/src/vc-js/suites/KiltIntegritySuite.spec.ts delete mode 100644 packages/vc-export/src/vc-js/suites/KiltIntegritySuite.ts delete mode 100644 packages/vc-export/src/vc-js/suites/KiltSignatureSuite.spec.ts delete mode 100644 packages/vc-export/src/vc-js/suites/KiltSignatureSuite.ts create mode 100644 packages/vc-export/src/vc-js/suites/Sr25519Signature2020.spec.ts create mode 100644 packages/vc-export/src/vc-js/suites/Sr25519Signature2020.ts create mode 100644 packages/vc-export/src/vc-js/suites/Sr25519VerificationKey.ts create mode 100644 packages/vc-export/src/vc-js/suites/Sr25519VerificationKey2020.spec.ts create mode 100644 packages/vc-export/src/vc-js/suites/types.ts create mode 100644 packages/vc-export/src/vc-js/suites/utils.ts create mode 100644 packages/vc-export/src/vc-js/types.ts delete mode 100644 packages/vc-export/src/vc-js/types/crypto-ld.d.ts delete mode 100644 packages/vc-export/src/vc-js/types/jsonld-signatures.d.ts delete mode 100644 packages/vc-export/src/vc-js/types/vc.d.ts delete mode 100644 packages/vc-export/src/verificationUtils.ts diff --git a/jest.config.js b/jest.config.js index 64f0f026e..63fc4a01e 100644 --- a/jest.config.js +++ b/jest.config.js @@ -6,7 +6,7 @@ module.exports = { // Parachain block time is 12s testTimeout: 15000, setupFilesAfterEnv: ['../jest-setup/setup.js'], - transformIgnorePatterns: ['/node_modules/(?!@polkadot|@babel/runtime/helpers/esm/)'], + transformIgnorePatterns: ['/node_modules/(?!@polkadot|@babel/runtime/helpers/esm/|@digitalbazaar|base.+-universal|crypto-ld)'], coverageThreshold: { global: { branches: 70, diff --git a/packages/did/package.json b/packages/did/package.json index 5943347bd..61ea6837a 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -35,6 +35,7 @@ "typescript": "^4.8.3" }, "dependencies": { + "@digitalbazaar/security-context": "^1.0.0", "@kiltprotocol/augment-api": "workspace:*", "@kiltprotocol/config": "workspace:*", "@kiltprotocol/types": "workspace:*", diff --git a/packages/did/src/DidDocumentExporter/DidContexts.ts b/packages/did/src/DidDocumentExporter/DidContexts.ts index 677fc4960..196e35a2d 100644 --- a/packages/did/src/DidDocumentExporter/DidContexts.ts +++ b/packages/did/src/DidDocumentExporter/DidContexts.ts @@ -5,6 +5,14 @@ * found in the LICENSE file in the root directory of this source tree. */ +// @ts-expect-error not a TS package +import securityContexts from '@digitalbazaar/security-context' + +const securityContextsMap: Map< + string, + Record +> = securityContexts.contexts + /** * IPFS URL identifying a JSON-LD context file describing terms used in DID documents of the KILT method that are not defined in the W3C DID core context. * Should be the second entry in the ordered set of contexts after [[W3C_DID_CONTEXT_URL]] in the JSON-LD representation of a KILT DID document. @@ -22,7 +30,7 @@ export const W3C_DID_CONTEXT_URL = 'https://www.w3.org/ns/did/v1' * See https://w3c-ccg.github.io/security-vocab/. * This document is extended by the context file available under the [[KILT_DID_CONTEXT_URL]]. */ -export const W3C_SECURITY_CONTEXT_URL = 'https://w3id.org/security/v2' +export const W3C_SECURITY_CONTEXT_URL = securityContexts.SECURITY_CONTEXT_V2_URL /** * An object containing static copies of JSON-LD context files relevant to KILT DID documents, of the form -> context. * These context definitions are not supposed to change; therefore, a cached version can (and should) be used to avoid unexpected changes in definitions. @@ -98,99 +106,5 @@ export const DID_CONTEXTS = { }, }, }, - [W3C_SECURITY_CONTEXT_URL]: { - '@context': [ - { - '@version': 1.1, - }, - 'https://w3id.org/security/v1', - { - AesKeyWrappingKey2019: 'sec:AesKeyWrappingKey2019', - DeleteKeyOperation: 'sec:DeleteKeyOperation', - DeriveSecretOperation: 'sec:DeriveSecretOperation', - EcdsaSecp256k1Signature2019: 'sec:EcdsaSecp256k1Signature2019', - EcdsaSecp256r1Signature2019: 'sec:EcdsaSecp256r1Signature2019', - EcdsaSecp256k1VerificationKey2019: - 'sec:EcdsaSecp256k1VerificationKey2019', - EcdsaSecp256r1VerificationKey2019: - 'sec:EcdsaSecp256r1VerificationKey2019', - Ed25519Signature2018: 'sec:Ed25519Signature2018', - Ed25519VerificationKey2018: 'sec:Ed25519VerificationKey2018', - EquihashProof2018: 'sec:EquihashProof2018', - ExportKeyOperation: 'sec:ExportKeyOperation', - GenerateKeyOperation: 'sec:GenerateKeyOperation', - KmsOperation: 'sec:KmsOperation', - RevokeKeyOperation: 'sec:RevokeKeyOperation', - RsaSignature2018: 'sec:RsaSignature2018', - RsaVerificationKey2018: 'sec:RsaVerificationKey2018', - Sha256HmacKey2019: 'sec:Sha256HmacKey2019', - SignOperation: 'sec:SignOperation', - UnwrapKeyOperation: 'sec:UnwrapKeyOperation', - VerifyOperation: 'sec:VerifyOperation', - WrapKeyOperation: 'sec:WrapKeyOperation', - X25519KeyAgreementKey2019: 'sec:X25519KeyAgreementKey2019', - - allowedAction: 'sec:allowedAction', - assertionMethod: { - '@id': 'sec:assertionMethod', - '@type': '@id', - '@container': '@set', - }, - authentication: { - '@id': 'sec:authenticationMethod', - '@type': '@id', - '@container': '@set', - }, - capability: { '@id': 'sec:capability', '@type': '@id' }, - capabilityAction: 'sec:capabilityAction', - capabilityChain: { - '@id': 'sec:capabilityChain', - '@type': '@id', - '@container': '@list', - }, - capabilityDelegation: { - '@id': 'sec:capabilityDelegationMethod', - '@type': '@id', - '@container': '@set', - }, - capabilityInvocation: { - '@id': 'sec:capabilityInvocationMethod', - '@type': '@id', - '@container': '@set', - }, - caveat: { '@id': 'sec:caveat', '@type': '@id', '@container': '@set' }, - challenge: 'sec:challenge', - ciphertext: 'sec:ciphertext', - controller: { '@id': 'sec:controller', '@type': '@id' }, - delegator: { '@id': 'sec:delegator', '@type': '@id' }, - equihashParameterK: { - '@id': 'sec:equihashParameterK', - '@type': 'xsd:integer', - }, - equihashParameterN: { - '@id': 'sec:equihashParameterN', - '@type': 'xsd:integer', - }, - invocationTarget: { '@id': 'sec:invocationTarget', '@type': '@id' }, - invoker: { '@id': 'sec:invoker', '@type': '@id' }, - jws: 'sec:jws', - keyAgreement: { - '@id': 'sec:keyAgreementMethod', - '@type': '@id', - '@container': '@set', - }, - kmsModule: { '@id': 'sec:kmsModule' }, - parentCapability: { '@id': 'sec:parentCapability', '@type': '@id' }, - plaintext: 'sec:plaintext', - proof: { '@id': 'sec:proof', '@type': '@id', '@container': '@graph' }, - proofPurpose: { '@id': 'sec:proofPurpose', '@type': '@vocab' }, - proofValue: 'sec:proofValue', - referenceId: 'sec:referenceId', - unwrappedKey: 'sec:unwrappedKey', - verificationMethod: { '@id': 'sec:verificationMethod', '@type': '@id' }, - verifyData: 'sec:verifyData', - wrappedKey: 'sec:wrappedKey', - }, - ], - }, + ...Object.fromEntries(securityContextsMap), } diff --git a/packages/did/src/DidDocumentExporter/DidDocumentExporter.spec.ts b/packages/did/src/DidDocumentExporter/DidDocumentExporter.spec.ts index 943c28ac6..b7d9c22d1 100644 --- a/packages/did/src/DidDocumentExporter/DidDocumentExporter.spec.ts +++ b/packages/did/src/DidDocumentExporter/DidDocumentExporter.spec.ts @@ -116,10 +116,18 @@ describe('When exporting a DID Document from a full DID', () => { publicKeyBase58: '11111111111111111111111111111111', }, ], - authentication: ['#auth'], - keyAgreement: ['#enc'], - assertionMethod: ['#att'], - capabilityDelegation: ['#del'], + authentication: [ + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#auth', + ], + keyAgreement: [ + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#enc', + ], + assertionMethod: [ + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#att', + ], + capabilityDelegation: [ + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#del', + ], service: [ { id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#id-1', @@ -171,10 +179,18 @@ describe('When exporting a DID Document from a full DID', () => { publicKeyBase58: '11111111111111111111111111111111', }, ], - authentication: ['#auth'], - keyAgreement: ['#enc'], - assertionMethod: ['#att'], - capabilityDelegation: ['#del'], + authentication: [ + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#auth', + ], + keyAgreement: [ + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#enc', + ], + assertionMethod: [ + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#att', + ], + capabilityDelegation: [ + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#del', + ], service: [ { id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#id-1', @@ -217,11 +233,11 @@ describe('When exporting a DID Document from a light DID', () => { expect(didDoc).toMatchInlineSnapshot(` Object { "authentication": Array [ - "#authentication", + "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#authentication", ], "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf", "keyAgreement": Array [ - "#encryption", + "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#encryption", ], "service": Array [ Object { @@ -271,11 +287,11 @@ describe('When exporting a DID Document from a light DID', () => { "ipfs://QmU7QkuTCPz7NmD5bD7Z7mQVz2UsSPaEK58B5sYnjnPRNW", ], "authentication": Array [ - "#authentication", + "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#authentication", ], "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf", "keyAgreement": Array [ - "#encryption", + "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#encryption", ], "service": Array [ Object { diff --git a/packages/did/src/DidDocumentExporter/DidDocumentExporter.ts b/packages/did/src/DidDocumentExporter/DidDocumentExporter.ts index f2103fde4..bfaebeb43 100644 --- a/packages/did/src/DidDocumentExporter/DidDocumentExporter.ts +++ b/packages/did/src/DidDocumentExporter/DidDocumentExporter.ts @@ -12,6 +12,7 @@ import type { ConformingDidDocument, DidResourceUri, JsonLDDidDocument, + UriFragment, } from '@kiltprotocol/types' import { encryptionKeyTypesMap, @@ -30,6 +31,13 @@ function exportToJsonDidDocument(did: DidDocument): ConformingDidDocument { service = [], } = did + function toAbsoluteUri(keyId: UriFragment): DidResourceUri { + if (keyId.startsWith(controller)) { + return keyId as DidResourceUri + } + return `${controller}${keyId}` + } + const verificationMethod: ConformingDidDocument['verificationMethod'] = [ ...authentication, ...assertionMethod, @@ -43,7 +51,7 @@ function exportToJsonDidDocument(did: DidDocument): ConformingDidDocument { })) ) .map(({ id, type, publicKey }) => ({ - id: `${controller}${id}` as DidResourceUri, + id: toAbsoluteUri(id), controller, type, publicKeyBase58: base58Encode(publicKey), @@ -57,15 +65,15 @@ function exportToJsonDidDocument(did: DidDocument): ConformingDidDocument { return { id: controller, verificationMethod, - authentication: [authentication[0].id], + authentication: [toAbsoluteUri(authentication[0].id)], ...(assertionMethod[0] && { - assertionMethod: [assertionMethod[0].id], + assertionMethod: [toAbsoluteUri(assertionMethod[0].id)], }), ...(capabilityDelegation[0] && { - capabilityDelegation: [capabilityDelegation[0].id], + capabilityDelegation: [toAbsoluteUri(capabilityDelegation[0].id)], }), ...(keyAgreement.length > 0 && { - keyAgreement: [keyAgreement[0].id], + keyAgreement: [toAbsoluteUri(keyAgreement[0].id)], }), ...(service.length > 0 && { service: service.map((endpoint) => ({ diff --git a/packages/did/src/DidResolver/DidResolver.spec.ts b/packages/did/src/DidResolver/DidResolver.spec.ts index 6951781f9..236b01c25 100644 --- a/packages/did/src/DidResolver/DidResolver.spec.ts +++ b/packages/did/src/DidResolver/DidResolver.spec.ts @@ -625,7 +625,7 @@ describe('When resolving with the spec compliant resolver', () => { expect(didResolutionMetadata).toStrictEqual({}) expect(didDocument.id).toStrictEqual(didWithAuthenticationKey) - expect(didDocument.authentication).toStrictEqual(['#auth']) + expect(didDocument.authentication).toStrictEqual([`${didDocument.id}#auth`]) expect(didDocument.verificationMethod).toContainEqual({ id: `${didWithAuthenticationKey}${'#auth'}`, controller: didWithAuthenticationKey, diff --git a/packages/types/src/DidDocumentExporter.ts b/packages/types/src/DidDocumentExporter.ts index 95efb1d43..9b675e23e 100644 --- a/packages/types/src/DidDocumentExporter.ts +++ b/packages/types/src/DidDocumentExporter.ts @@ -6,11 +6,9 @@ */ import { - DidEncryptionKey, DidResourceUri, DidServiceEndpoint, DidUri, - DidVerificationKey, EncryptionKeyType, VerificationKeyType, } from './DidDocument.js' @@ -78,10 +76,10 @@ export type ConformingDidServiceEndpoint = Omit & { export type ConformingDidDocument = { id: DidUri verificationMethod: ConformingDidKey[] - authentication: [DidVerificationKey['id']] - assertionMethod?: [DidVerificationKey['id']] - keyAgreement?: [DidEncryptionKey['id']] - capabilityDelegation?: [DidVerificationKey['id']] + authentication: [ConformingDidKey['id']] + assertionMethod?: [ConformingDidKey['id']] + keyAgreement?: [ConformingDidKey['id']] + capabilityDelegation?: [ConformingDidKey['id']] service?: ConformingDidServiceEndpoint[] alsoKnownAs?: [`w3n:${string}`] } diff --git a/packages/utils/src/Crypto.ts b/packages/utils/src/Crypto.ts index 434acb11d..522781d6b 100644 --- a/packages/utils/src/Crypto.ts +++ b/packages/utils/src/Crypto.ts @@ -343,7 +343,7 @@ export function hashStatements( export function makeKeypairFromSeed< KeyType extends KiltKeyringPair['type'] = 'ed25519' >(seed = randomAsU8a(32), type?: KeyType): KiltKeyringPair & { type: KeyType } { - const keyring = new Keyring({ ss58Format, type }) + const keyring = new Keyring({ ss58Format, type: type ?? 'ed25519' }) return keyring.addFromSeed(seed) as KiltKeyringPair & { type: KeyType } } @@ -357,7 +357,7 @@ export function makeKeypairFromSeed< export function makeKeypairFromUri< KeyType extends KiltKeyringPair['type'] = 'ed25519' >(uri: string, type?: KeyType): KiltKeyringPair & { type: KeyType } { - const keyring = new Keyring({ ss58Format, type }) + const keyring = new Keyring({ ss58Format, type: type ?? 'ed25519' }) return keyring.addFromUri(uri) as KiltKeyringPair & { type: KeyType } } diff --git a/packages/vc-export/README.md b/packages/vc-export/README.md index 1826f8124..9a73bbbcd 100644 --- a/packages/vc-export/README.md +++ b/packages/vc-export/README.md @@ -27,117 +27,41 @@ yarn add @kiltprotocol/vc-export ## Contents - exporting - - `fromCredentialAndAttestation()`: translates `Credential` to `VerifiableCredential` -- presentation utils - - `makePresentation()`: creates `VerifiablePresentation` () - - `removeProperties()`: derives a new `VerifiableCredential` from an existing one with a reduced set of disclosed attributes -- verification utils - - functions that verify three proof types: - - claimer's self-signed proof over the credential digest - - credential digest proof that assures the integrity of disclosed attributes, claimer identity, legitimations and delegations - - attestation proof that assures the credential is attested by the identity disclosed as the `issuer` and not revoked - - a function to validate the disclosed claim properties against the schema of a KILT CType, which is a prescriptive schema detailing fields and their data types. -- vc-js suites: tooling to integrate KILT VCs with `vc-js` and `jsonld-signatures^5.0.0` - - `suites`: contains suites to verify the three KILT proof types that secure a KILT VC. - - `KiltIntegritySuite`: provides integrity protection for essential components of the credential while allowing for blinding of claims relating to the `credentialSubject`. - - `KiltSignatureSuite`: verifies the signature over the root hash of a KILT credential. - - `KiltAttestedSuite`: provides lookup functionality to the KILT blockchain to check whether a credential is attested and still valid. - - `context`: contains a json-ld `@context` definitions for KILT VCs. - - `documentLoader`: an implementation of the DocumentLoader required to use `vc-js` / `jsonld-signatures` which allows to serve essential `@context` definitions to the json-ld processor, including the `context` included here. + - `exportICredentialToVc()`: translates an existing `ICredential` object to a `VerifiableCredential` with an embedded proof. + The resulting VC still verifies against the original attestation record and thus is valid as long as the original credential remains valid (i.e., not revoked). +- `KiltCredentialV1` + - functions that create a VC of type `KiltCredentialV1` either from claims and other input, or of an existing `ICredential`. + - a JSON-schema and functions to validate the structure and data model of a `KiltCredentialV1` type VC. +- `KiltAttestationProofV1` + - functions that verify VCs with a proof type `KiltAttestationProofV1`. + - functions that help in creating a new `KiltAttestationProofV1` type proof for a `KiltCredentialV1` type VC. + - functions that produce a `KiltAttestationProofV1` type from an existing `ICredential`. + - functions that update a `KiltAttestationProofV1` after applying selective disclosure. +- `KiltRevocationStatusV1` + - a function to check the revocation status of a VC with a `KiltAttestationProofV1`. + - a function to help create a `credentialStatus` object of type `KiltRevocationStatusV1`. +- `CredentialSchema` + - a function to validate the disclosed `credentialSubject` properties against the schema of a KILT CType, which is a prescriptive schema detailing fields and their data types. +- `Presentation` + - Tools for creating and verifying Verifiable Presentations and signing them in the JSON Web Token (JWT) serialization. +- `DidJWT` + - Tools for signing JWTs using your KILT DID. Used by the `Presentation` tools. +- `vcjs` + - Various tools needed to integrate KILT VCs & DIDs with the popular `@digitalbazaar/vc` library (formerly known as `vc-js`) and related tool chain (`jsonld-signatures`, `crypto-ld` & `jsonld` libraries), including: + - A `jsonld-signatures` suite for creating and verifying `KiltAttestationProofV1` type proofs. + - Addionally, a `ProofPurpose` class to be used in combination with that suite. + - A `jsonld-signatures` suite for creating and verifying sr25519 linked data signatures. + - Includes a `Sr25519VerificationKey2020` key class for use with `crypto-ld`. + - JSON-LD context defintions for all types introduced here. + - `documentLoader` implementations to load these contexts as well as KILT DID documents and their verification methods. ## Examples -### Presenting a KILT `Credential` as a `VerifiableCredential` +See unit test files for usage examples. -Given we are in possession of an attested KILT claim and the associated KILT identity: - -```typescript -import { Attestation, ICredential } from '@kiltprotocol/sdk-js' -import * as vcExport from '@kiltprotocol/vc-export' - -let credential: ICredential - -// fetch the attestion -const api = await kilt.connect('wss://spiritnet.kilt.io/') -const attestation = Attestation.fromChain( - await api.query.attestation.attestations(credential.rootHash), - credential.rootHash -) -// turn the KILT credential into a VerifiableCredential -const VC = vcExport.fromCredentialAndAttestation(credential, attestation) - -// produce a reduced copy of the VC where only selected attributes are disclosed -const nameOnly = await vcExport.presentation.removeProperties(VC, ['name']) -// or directly produce a VerifiablePresentation, which implicitly performs the step above -const presentation = await vcExport.presentation.makePresentation(VC, ['name']) -``` - -A verifier can now check the proofs attached to the VerifiableCredential but can only see the disclosed attributes: - -```typescript -// Here's an example for verifying the attestation proof -const api = await kilt.connect('wss://spiritnet.kilt.io/') -try { - presentation.verifiableCredential.proof.foreach((proof) => { - if (proof.type === vcExport.constants.KILT_ATTESTED_PROOF_TYPE) - vcExport.verification.verifyAttestedProof( - presentation.verifiableCredential, - proof, - api - ) - }) - - console.log( - `Name of the crook: ${presentation.verifiableCredential.credentialSubject.name}` - ) // prints 'Billy The Kid' - console.log( - `Reward: ${presentation.verifiableCredential.credentialSubject.reward}` - ) // undefined -} catch (e) { - console.error('Failed verification', e) -} -``` - -### Verifying a KILT VC with `vc-js` - -Assuming we have a KILT credential expressed as a VC (`credential`), for example as produced by the example above. - -```typescript -import * as kilt from '@kiltprotocol/sdk-js' -import { vcjsSuites, verification } from '@kiltprotocol/vc-export' -import vcjs from 'vc-js' -import jsigs from 'jsonld-signatures' - -// 1. set up suites -const { KiltIntegritySuite, KiltSignatureSuite, KiltAttestedSuite } = - vcjsSuites.suites -const signatureSuite = new KiltSignatureSuite.KiltSignatureSuite() -const integritySuite = new KiltIntegritySuite.KiltDisclosureSuite() -// the KiltAttestedSuite requires a connection object that allows access to the KILT blockchain, which we can obtain via the KILT sdk -const KiltConnection = await kilt.connect('wss://spiritnet.kilt.io/') -const attestedSuite = new KiltAttestedSuite.KiltAttestedSuite({ - KiltConnection, -}) - -// 2. verify credential schema -const schemaVerified = verification.validateSchema(credential).verified -// unfortunately the VC credentialSchema definition is underspecified in their context - we therefore have to remove it before credential verification -delete credential['credentialSchema'] - -// 3. obtain default kilt context loader -const { documentLoader } = vcjsSuites - -// 4. obtain the `assertionMethod` proof purpose from `jsonld-signatures` -const purpose = new jsigs.purposes.AssertionProofPurpose() - -// 5. call vc-js.verifyCredential with suites and context loader -const result = await vcjs.verifyCredential({ - credential, - suite: [signatureSuite, integritySuite, attestedSuite], - purpose, - documentLoader, -}) - -// 6. make sure all `results` indicate successful verification -const verified = result.results.every((i) => i.verified === true) -``` +- [Transforing an `ICredential` to a `KiltCredentialV1` with a `KiltAttestationProofV1`](./src/exportToVerifiableCredential.spec.ts) +- [Producing, verifying, and modifying (->selective disclosure) a `KiltAttestationProofV1`](./src/KiltAttestationProofV1.spec.ts) +- [Producing, DID-signing and verifying a Verifiable Presentation](./src/Presentation.spec.ts) +- [Signing and verifying JWTs using your DID keys](./src/DidJwt.spec.ts) +- [Issuing & verifying a `KiltAttestationProofV1` as well as Verifiable Presentations via `@digitalbazaar/vc` & `jsonld-signatures`](./src/vc-js/suites/KiltAttestationProofV1.spec.ts) +- [Signing Linked Data documents using your DIDs Sr25519 keys](./src/vc-js/suites/Sr25519Signature2020.spec.ts) diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 3e7f4ba03..b13261af1 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -30,8 +30,9 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { + "@digitalbazaar/ed25519-signature-2020": "^5.2.0", + "@digitalbazaar/vc": "^6.0.1", "@kiltprotocol/testing": "workspace:*", - "@types/jsonld": "1.5.1", "rimraf": "^3.0.2", "typescript": "^4.8.3" }, @@ -45,8 +46,12 @@ "@polkadot/types": "^10.0.0", "@polkadot/util": "^11.0.0", "@polkadot/util-crypto": "^11.0.0", - "jsonld": "^2.0.2", - "jsonld-signatures": "^5.0.0", - "vc-js": "^0.6.4" + "crypto-ld": "^6.0.0", + "did-jwt": "^6.11.0" + }, + "peerDependencies": { + "@digitalbazaar/vc": "^2.1.0 || ^6.0.1", + "jsonld": "^5.2.0 || ^8.1.0", + "jsonld-signatures": "^9.3.0 || ^11.0.0" } } diff --git a/packages/vc-export/src/CAIP/CAIP.spec.ts b/packages/vc-export/src/CAIP/CAIP.spec.ts new file mode 100644 index 000000000..1c10ffbdd --- /dev/null +++ b/packages/vc-export/src/CAIP/CAIP.spec.ts @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/** + * @group unit/caip + */ + +import { spiritnetGenesisHash } from '../constants' +import { chainIdFromGenesis, parse as parseCaip2 } from './caip2' +import { parse as parseCaip19 } from './caip19' + +it('parses a CAIP-2 chain id', () => { + const chainId = chainIdFromGenesis(spiritnetGenesisHash) + expect(chainId).toMatchInlineSnapshot( + `"polkadot:411f057b9107718c9624d6aa4a3f23c1"` + ) + expect(parseCaip2(chainId)).toMatchInlineSnapshot(` + Object { + "chainNamespace": "polkadot", + "chainReference": "411f057b9107718c9624d6aa4a3f23c1", + } + `) +}) + +it('throws if CAIP-2 identifier not valid', () => { + expect(() => + parseCaip2('http://example.com') + ).toThrowErrorMatchingInlineSnapshot( + `"not a valid CAIP-2 identifier: http://example.com"` + ) +}) + +it('parses a CAIP-19 asset id', () => { + expect(parseCaip19('polkadot:1234567890abcdef/jabba:dabba/asset10')) + .toMatchInlineSnapshot(` + Object { + "assetId": "jabba:dabba/asset10", + "assetInstance": "asset10", + "assetNamespace": "jabba", + "assetReference": "dabba", + "chainId": "polkadot:1234567890abcdef", + "chainNamespace": "polkadot", + "chainReference": "1234567890abcdef", + } + `) +}) + +it('throws if CAIP-2 identifier not valid', () => { + expect(() => + parseCaip19('polkadot:1234567890abcdef') + ).toThrowErrorMatchingInlineSnapshot( + `"not a valid CAIP-19 identifier: polkadot:1234567890abcdef"` + ) +}) diff --git a/packages/vc-export/src/CAIP/caip19.ts b/packages/vc-export/src/CAIP/caip19.ts new file mode 100644 index 000000000..98fe8db89 --- /dev/null +++ b/packages/vc-export/src/CAIP/caip19.ts @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import type { + Caip19AssetId, + Caip19AssetInstance, + Caip19AssetNamespace, + Caip19AssetReference, + Caip2ChainId, + Caip2ChainNamespace, + Caip2ChainReference, +} from '@kiltprotocol/types' + +// Matches CAIP-19 ids as per https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-19.md. +const CAIP19_REGEX = + /^(?(?[-a-z0-9]{3,8}):(?[-a-zA-Z0-9]{1,32}))\/(?(?[-a-z0-9]{3,8}):(?[-a-zA-Z0-9]{1,64})(\/(?[-a-zA-Z0-9]{1,78}))?)$/ + +type Caip19ParsingResult = { + chainId: Caip2ChainId + chainNamespace: Caip2ChainNamespace + chainReference: Caip2ChainReference + assetId: Caip19AssetId + assetNamespace: Caip19AssetNamespace + assetReference: Caip19AssetReference + assetInstance?: Caip19AssetInstance +} + +/** + * Parses a CAIP-19 identifier and returns the information contained within in a structured form. + + * @param caip19 A CAIP-19 identifier as a string. +* @returns Object containing information extracted from the identifier. + */ +export function parse(caip19: string): Caip19ParsingResult { + const matches = CAIP19_REGEX.exec(caip19)?.groups as + | Caip19ParsingResult + | undefined + if (!matches) { + throw new Error(`not a valid CAIP-19 identifier: ${caip19}`) + } + + return matches +} diff --git a/packages/vc-export/src/CAIP/caip2.ts b/packages/vc-export/src/CAIP/caip2.ts new file mode 100644 index 000000000..50458e292 --- /dev/null +++ b/packages/vc-export/src/CAIP/caip2.ts @@ -0,0 +1,51 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { u8aToHex } from '@polkadot/util' + +import type { + Caip2ChainNamespace, + Caip2ChainReference, +} from '@kiltprotocol/types' + +/** + * Produces the CAIP-2 identifier for a polkadot-based chain from its genesis hash. + * + * @param genesisHash The chain's genesis hash. + * @returns A CAIP-2 identifier of the form `polkadot:{32 hex characters}` as described in CAIP-13. + */ +export function chainIdFromGenesis( + genesisHash: Uint8Array +): `polkadot:${string}` { + return `polkadot:${u8aToHex(genesisHash.subarray(0, 16), undefined, false)}` +} + +// Matches CAIP-2 ids as per https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-2.md. +const CAIP2_REGEX = + /^(?[-a-z0-9]{3,8}):(?[-a-zA-Z0-9]{1,32})$/ + +type Caip2ParsingResult = { + chainNamespace: Caip2ChainNamespace + chainReference: Caip2ChainReference +} + +/** + * Parses a CAIP-2 identifier and returns the information contained within in a structured form. + + * @param caip2 A CAIP-2 identifier as a string. +* @returns Object containing information extracted from the identifier. + */ +export function parse(caip2: string): Caip2ParsingResult { + const matches = CAIP2_REGEX.exec(caip2)?.groups as + | Caip2ParsingResult + | undefined + if (!matches) { + throw new Error(`not a valid CAIP-2 identifier: ${caip2}`) + } + + return matches +} diff --git a/packages/vc-export/src/CAIP/index.ts b/packages/vc-export/src/CAIP/index.ts new file mode 100644 index 000000000..b8d671be2 --- /dev/null +++ b/packages/vc-export/src/CAIP/index.ts @@ -0,0 +1,9 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +export * as Caip19 from './caip19.js' +export * as Caip2 from './caip2.js' diff --git a/packages/vc-export/src/CredentialSchema.spec.ts b/packages/vc-export/src/CredentialSchema.spec.ts new file mode 100644 index 000000000..2beeb01de --- /dev/null +++ b/packages/vc-export/src/CredentialSchema.spec.ts @@ -0,0 +1,74 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/** + * @group unit/vc-export + */ + +import { CType } from '@kiltprotocol/core' +import { randomAsHex, randomAsU8a } from '@polkadot/util-crypto' +import { validateSubject } from './CredentialSchema' +import { + attestation, + credential, + cType, +} from './exportToVerifiableCredential.spec' +import { exportICredentialToVc } from './fromICredential' +import { validateStructure } from './KiltCredentialV1' +import type { KiltCredentialV1 } from './types' + +let VC: KiltCredentialV1 +const timestamp = 1234567 +const blockHash = randomAsU8a(32) +const attester = attestation.owner + +beforeAll(() => { + VC = exportICredentialToVc(credential, { + issuer: attester, + blockHash, + timestamp, + cType, + }) +}) + +it('exports to VC including ctype as schema', () => { + expect(VC).toMatchObject({ + credentialSchema: { + id: cType.$id, + name: cType.title, + type: 'JsonSchemaValidator2018', + schema: cType, + }, + }) + expect(() => validateStructure(VC)).not.toThrow() +}) + +it('it verifies valid claim against schema', () => { + expect(() => validateSubject(VC)).not.toThrow() +}) + +it('it detects schema violations', () => { + const credentialSubject = { ...VC.credentialSubject, name: 5 } + expect(() => validateSubject({ ...VC, credentialSubject })).toThrow() +}) + +it('accepts passing in CType if not part of credential', () => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { schema, ...credentialSchema } = VC.credentialSchema + const vcNoSchema = { + ...VC, + credentialSchema, + } + expect(() => validateSubject(vcNoSchema, cType)).not.toThrow() + expect(() => validateSubject(vcNoSchema)).toThrow() + expect(() => + validateSubject(vcNoSchema, { + ...cType, + $id: CType.hashToId(randomAsHex()), + }) + ).toThrow() +}) diff --git a/packages/vc-export/src/CredentialSchema.ts b/packages/vc-export/src/CredentialSchema.ts new file mode 100644 index 000000000..7d0f81335 --- /dev/null +++ b/packages/vc-export/src/CredentialSchema.ts @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { CType } from '@kiltprotocol/core' +import type { ICType } from '@kiltprotocol/types' + +import { jsonLdExpandCredentialSubject } from './common.js' +import type { KiltCredentialV1 } from './types.js' + +/** + * Validates the claims in the VC's `credentialSubject` against a CType definition on the `credentialSchema` property. + * + * @param credential A verifiable credential where `credentialSchema.schema` is an [[ICType]]. + * @param credential.credentialSubject The credentialSubject to be validated. + * @param credential.credentialSchema The credentialSchema to be applied. + * @param cType Optionally pass the CType definition to be used if it is not embedded in the credentialSchema. + */ +export function validateSubject( + { credentialSubject, credentialSchema }: KiltCredentialV1, + cType?: ICType +): void { + const { schema = cType } = credentialSchema ?? {} + // check that we have access to the right schema + if (!schema) { + throw new Error( + 'Schema validation can only be performed if schema is present in credentialSchema or passed as the cType argument' + ) + } + if (schema.$id !== credentialSchema.id) { + throw new Error('CType[$id] must be equal to the credentialSchema[id]') + } + // normalize credential subject to form expected by CType schema + const expandedClaims: Record = + jsonLdExpandCredentialSubject(credentialSubject) + delete expandedClaims['@id'] + const vocab = `${schema.$id}#` + const claims = Object.entries(expandedClaims).reduce((obj, [key, value]) => { + return { + ...obj, + [key.startsWith(vocab) ? key.substring(vocab.length) : key]: value, + } + }, {}) + // validates against CType (also validates CType schema itself) + CType.verifyClaimAgainstSchema(claims, schema) +} diff --git a/packages/vc-export/src/DidJwt.spec.ts b/packages/vc-export/src/DidJwt.spec.ts new file mode 100644 index 000000000..f79ea2222 --- /dev/null +++ b/packages/vc-export/src/DidJwt.spec.ts @@ -0,0 +1,180 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/** + * @group unit/vc-export + */ + +import { hexToU8a } from '@polkadot/util' +import { ed25519PairFromSeed } from '@polkadot/util-crypto' +import type { Keypair } from '@polkadot/util-crypto/types' + +import { init } from '@kiltprotocol/core' +import { + exportToDidDocument, + getFullDidUriFromKey, + resolveCompliant, +} from '@kiltprotocol/did' +import type { + ConformingDidDocument, + DidVerificationKey, + VerificationKeyType, +} from '@kiltprotocol/types' + +import * as JWT from './DidJwt' +import * as Presentation from './Presentation' +import type { KiltCredentialV1 } from './types' + +jest.mock('@kiltprotocol/did', () => ({ + ...jest.requireActual('@kiltprotocol/did'), + resolveCompliant: jest.fn(), +})) + +const seed = hexToU8a( + '0xc48ea34c57ab63752ac5b797304de15cc036d126b96fb9c8198498d756c0579c' +) + +function mockDidDoc(key: Keypair, type: VerificationKeyType) { + const did = getFullDidUriFromKey({ ...key, type }) + const didKey = { + controller: did, + publicKey: key.publicKey, + type, + } + const didDocument: ConformingDidDocument = exportToDidDocument( + { + uri: did, + authentication: [{ ...didKey, id: `#key1` } as DidVerificationKey], + assertionMethod: [{ ...didKey, id: `#key2` } as DidVerificationKey], + }, + 'application/json' + ) + return { didDocument, did, didKey } +} + +jest.useFakeTimers() +jest.setSystemTime(1679407014000) + +const key = ed25519PairFromSeed(seed) +const { didDocument, did } = mockDidDoc(key, 'ed25519') +jest.mocked(resolveCompliant).mockImplementation(async (d) => { + if (d === did) + return { + didDocument, + didDocumentMetadata: {}, + didResolutionMetadata: {}, + } + return { + didResolutionMetadata: { + error: 'notFound', + }, + didDocumentMetadata: {}, + } +}) + +beforeAll(async () => { + await init({}) +}) + +it('produces and reverses JWT payload representations of a credential and presentation', () => { + const credential = { + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://www.kilt.io/contexts/credentials', + ], + type: ['VerifiableCredential', 'KiltCredentialV1'], + id: 'kilt:credential:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad', + credentialSubject: { + '@context': { + '@vocab': + 'kilt:ctype:0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf#', + }, + id: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + birthday: '1991-01-01', + name: 'Kurt', + premium: true, + }, + issuer: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + issuanceDate: '2021-03-25T10:20:44.000Z', + expirationDate: '2022-03-25T10:20:44.000Z', + nonTransferable: true, + proof: { + type: 'KiltAttestationProofV1', + block: '1234567890', + commitments: ['censored'], + salt: ['censored'], + }, + credentialSchema: { + type: 'JsonSchemaValidator2018', + id: 'kilt:ctype:0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf', + }, + credentialStatus: { + id: 'polkadot:1234567890:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad', + type: 'KiltRevocationStatusV1', + }, + } as KiltCredentialV1 + + let payload = JWT.credentialToPayload(credential) + const fromPayload = JWT.credentialFromPayload(payload) + expect(credential).toStrictEqual(fromPayload) + + const presentation = Presentation.create( + [credential], + credential.credentialSubject.id + ) + payload = JWT.presentationToPayload(presentation) + const fromPayload2 = JWT.presentationFromPayload(payload) + expect(presentation).toStrictEqual(fromPayload2) +}) + +it('verifies a JWT signed by an ed25519 key', async () => { + const credential: Partial = { + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://www.kilt.io/contexts/credentials', + ], + type: ['VerifiableCredential'], + credentialSubject: { + '@context': { + '@vocab': + 'kilt:ctype:0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf#', + }, + id: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + birthday: '1991-01-01', + name: 'Kurt', + premium: true, + }, + issuer: didDocument.id, + issuanceDate: new Date().toISOString(), + nonTransferable: true, + } + + const payload = JWT.credentialToPayload(credential as KiltCredentialV1) + + const signedJWT = await JWT.create( + payload, + { + ...key, + keyUri: `${didDocument.id}${didDocument.assertionMethod![0]}`, + type: 'ed25519', + }, + { expiresIn: 60 } + ) + + const result = await JWT.verify(signedJWT, { + proofPurpose: 'assertionMethod', + }) + + expect(result).toMatchObject({ + payload: JSON.parse(JSON.stringify(payload)), + }) + + const fromPayload = JWT.credentialFromPayload(result.payload) + + expect(fromPayload).toMatchObject(credential) + expect(fromPayload).toHaveProperty('expirationDate') +}) diff --git a/packages/vc-export/src/DidJwt.ts b/packages/vc-export/src/DidJwt.ts new file mode 100644 index 000000000..269655dab --- /dev/null +++ b/packages/vc-export/src/DidJwt.ts @@ -0,0 +1,277 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { + createJWT, + EdDSASigner, + ES256KSigner, + JWTHeader, + JWTOptions, + JWTPayload, + JWTVerifyOptions, + Signer, + verifyJWT, +} from 'did-jwt' +import type { DIDResolutionResult, Resolvable } from 'did-resolver' + +import { resolveCompliant } from '@kiltprotocol/did' +import { SDKErrors } from '@kiltprotocol/utils' +import type { DidResourceUri, DidUri } from '@kiltprotocol/types' + +import type { UnsignedVc, VerifiablePresentation } from './types.js' + +function jwtTimestampFromDate(date: string | number | Date): number { + return Math.floor(new Date(date).getTime() / 1000) +} + +function jwtTimestampToIsoDate(date: number): string { + return new Date(date * 1000).toISOString() +} + +export type supportedKeys = 'ed25519' | 'ecdsa' + +const signers: Record Signer> = { + ES256K: ES256KSigner, + EdDSA: EdDSASigner, +} + +/** + * Creates a JWT from a payload object and signs it using a DID key. + * + * @param payload The VerifiablePresentation (without proof). + * @param signingKey Key object required for signing. + * @param signingKey.secretKey The bytes of the secret key. + * @param signingKey.keyUri The key uri by which the public key can be looked up from a DID document. + * @param signingKey.type The key type. Ed25519 and ecdsa (secp256k1) are supported. + * @param options Additional optional configuration. + * @param options.validFrom Timestamp (in ms since the epoch) indicating the earliest point in time where the presentation becomes valid. Defaults to the current time. + * @param options.expiresIn Duration of validity of the presentation in seconds. If omitted, the presentation's validity is unlimited. + * @param options.challenge Optional challenge provided by a verifier that can be used to prevent replay attacks. + * @param options.audience Identifier of the verifier to prevent unintended re-use of the presentation. + * @returns A signed JWT in compact representation containing a VerifiablePresentation. + */ +export function create( + payload: JWTPayload & { iss: string }, + signingKey: { + secretKey: Uint8Array + keyUri: DidResourceUri + type: supportedKeys + }, + options: Partial = {} +): Promise { + const { type, keyUri, secretKey } = signingKey + const alg = { ecdsa: 'ES256K', ed25519: 'EdDSA' }[type] + if (!alg) + throw new Error(`no signature algorithm available for key type ${type}`) + const jwtHeader = { + alg, + kid: keyUri, + type: 'JWT', + } + const signer = signers[alg](secretKey) + + return createJWT( + payload, + { ...options, issuer: payload.iss, signer }, + jwtHeader + ) +} + +const kiltDidResolver: Resolvable = { + resolve: async (did) => { + const { + didDocument = null, + didDocumentMetadata, + didResolutionMetadata, + } = await resolveCompliant(did as DidUri) + + return { + didDocument, + didDocumentMetadata, + didResolutionMetadata, + } as DIDResolutionResult + }, +} + +/** + * Verifies a JWT rendering of a VerifiablePresentation. + * + * @param token The JWT in compact (string) encoding. + * @param options Optional configuration. + * @param options.audience Expected audience. Verification fails if the aud claim in the JWT is not equal to this value. + * @param options.challenge Expected challenge. Verification fails if the nonce claim in the JWT is not equal to this value. + * @returns The VerifiablePresentation (without proof), the decoded JWT payload containing all claims, and the decoded JWT header. + */ +export async function verify( + token: string, + options: Partial +): ReturnType { + // set default skewTime to 0 + const { skewTime = 0 } = options + const result = await verifyJWT(token, { + resolver: kiltDidResolver, + ...options, + skewTime, + policies: { + // by default, do not require iat to be in the past + iat: false, + ...options.policies, + // override aud policy: only check aud if expected audience is defined + aud: typeof options.audience === 'string', + }, + }) + if (result.verified !== true) { + throw new SDKErrors.SignatureUnverifiableError() + } + return result +} + +function toPayloadCommon( + iss: string, + jti: string | undefined, + issuanceDate: string | undefined, + expirationDate: string | undefined +): JWTPayload & { + iss: string +} { + const result: JWTPayload & { + iss: string + } = { + jti, + iss, + } + + if (typeof issuanceDate === 'string') { + result.nbf = jwtTimestampFromDate(issuanceDate) + } + if (typeof expirationDate === 'string') { + result.exp = jwtTimestampFromDate(expirationDate) + } + + return result +} + +/** + * Produces a serialized JWT payload from a Verifiable Presentation. + * + * @param presentation A [[VerifiablePresentation]] object. + * @returns The payload, ready for serialization. + */ +export function presentationToPayload( + presentation: VerifiablePresentation +): JWTPayload & { + iss: string +} { + const { holder, id, issuanceDate, expirationDate, verifier, ...vp } = + presentation + const payload = toPayloadCommon(holder, id, issuanceDate, expirationDate) + + return { + ...payload, + vp, + aud: verifier, + } +} + +/** + * Produces a serialized JWT payload from a Verifiable Credential. + * + * @param credential A [[VerifiableCredential]] object. + * @returns The payload, ready for serialization. + */ +export function credentialToPayload( + credential: UnsignedVc & { expirationDate?: string } +): JWTPayload & { + iss: string +} { + const { issuer, id, issuanceDate, expirationDate, ...vc } = credential + + const payload = toPayloadCommon(issuer, id, issuanceDate, expirationDate) + + return { + ...payload, + vc, + sub: credential.credentialSubject?.id, + } +} + +function fromPayloadCommon( + payload: JWTPayload +): Partial { + const { jti, nbf, exp } = payload + const decoded: Partial = {} + if (typeof jti === 'string') { + decoded.id = jti + } + if (typeof nbf === 'number') { + decoded.issuanceDate = jwtTimestampToIsoDate(nbf) + } + if (typeof exp === 'number') { + decoded.expirationDate = jwtTimestampToIsoDate(exp) + } + return decoded +} + +/** + * Reconstruct a Verifiable Presentation object from its JWT serialization. + * + * @param payload The encoded payload of a JWT, containing a 'vp' claim. + * @returns A [[VerifiablePresentation]] object. + */ +export function presentationFromPayload( + payload: JWTPayload +): VerifiablePresentation { + const { vp, iss, aud } = payload + if (typeof vp !== 'object' || vp === null) { + throw new Error('JWT must contain a vp claim') + } + + const decoded = { + ...vp, + ...fromPayloadCommon(payload), + } + + if (typeof iss === 'string') { + decoded.holder = iss as DidUri + } + if (typeof aud === 'string') { + decoded.verifier = aud as DidUri + } + + return decoded as VerifiablePresentation +} + +/** + * Reconstruct a Verifiable Credential object from its JWT serialization. + * + * @param payload The encoded payload of a JWT, containing a 'vc' claim. + * @returns A [[VerifiableCredential]] object. + */ +export function credentialFromPayload(payload: JWTPayload): UnsignedVc { + const { vc, iss, sub } = payload + if (typeof vc !== 'object' || vc === null) { + throw new Error('JWT must contain a vc claim') + } + + const decoded: UnsignedVc = { + ...vc, + ...fromPayloadCommon(payload), + } + + if (typeof iss === 'string') { + decoded.issuer = iss as DidUri + } + if (typeof sub === 'string') { + if (typeof decoded.credentialSubject === 'object') { + decoded.credentialSubject.id = sub as DidUri + } else { + decoded.credentialSubject = sub as any + } + } + + return decoded +} diff --git a/packages/vc-export/src/KiltAttestationProofV1.spec.ts b/packages/vc-export/src/KiltAttestationProofV1.spec.ts new file mode 100644 index 000000000..9dc06804d --- /dev/null +++ b/packages/vc-export/src/KiltAttestationProofV1.spec.ts @@ -0,0 +1,302 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/** + * @group unit/vc-export + */ + +import { encodeAddress, randomAsHex, randomAsU8a } from '@polkadot/util-crypto' +import { u8aToHex, u8aToU8a } from '@polkadot/util' + +import { Credential } from '@kiltprotocol/core' +import { parse } from '@kiltprotocol/did' +import type { DidUri } from '@kiltprotocol/types' + +import { + attestation, + blockHash, + credential, + makeAttestationCreatedEvents, + mockedApi, + timestamp, +} from './exportToVerifiableCredential.spec' +import { exportICredentialToVc } from './fromICredential' +import { + finalizeProof, + initializeProof, + applySelectiveDisclosure, + verify, +} from './KiltAttestationProofV1' +import { check as checkStatus } from './KiltRevocationStatusV1' +import { fromICredential } from './KiltCredentialV1' +import { credentialIdFromRootHash } from './common' +import type { KiltCredentialV1 } from './types' + +let VC: KiltCredentialV1 +describe('proofs', () => { + beforeAll(() => { + VC = exportICredentialToVc(credential, { + issuer: attestation.owner, + chainGenesisHash: mockedApi.genesisHash, + blockHash, + timestamp, + }) + }) + + it('it verifies proof', async () => { + // verify + const { proof, ...cred } = VC + await expect(verify(cred, proof, { api: mockedApi })).resolves.not.toThrow() + }) + + it('it verifies status', async () => { + // verify + await expect(checkStatus(VC, { api: mockedApi })).resolves.not.toThrow() + }) + + it('it verifies credential with all properties revealed', async () => { + expect(VC.proof?.salt).toHaveLength(4) + const { proof, ...cred } = VC + await expect(verify(cred, proof, { api: mockedApi })).resolves.not.toThrow() + }) + + it('it verifies credential with selected properties revealed', async () => { + const reducedCredential = Credential.removeClaimProperties(credential, [ + 'name', + 'birthday', + ]) + const { proof, ...reducedVC } = exportICredentialToVc(reducedCredential, { + issuer: attestation.owner, + chainGenesisHash: mockedApi.genesisHash, + blockHash, + timestamp, + }) + + await expect( + verify(reducedVC, proof, { api: mockedApi }) + ).resolves.not.toThrow() + }) + + it('applies selective disclosure to proof', async () => { + const updated = applySelectiveDisclosure(VC, VC.proof, ['name']) + const { contents, owner } = credential.claim + expect(updated.credential).toHaveProperty('credentialSubject', { + '@context': expect.any(Object), + id: owner, + name: contents.name, + }) + expect(Object.entries(updated.proof.salt)).toHaveLength(2) + await expect( + verify(updated.credential, updated.proof, { api: mockedApi }) + ).resolves.not.toThrow() + }) + + it('checks delegation node owners', async () => { + const delegator: DidUri = `did:kilt:${encodeAddress(randomAsU8a(32), 38)}` + const credentialWithDelegators: KiltCredentialV1 = { + ...VC, + federatedTrustModel: VC.federatedTrustModel?.map((i) => { + if (i.type === 'KiltAttesterDelegationV1') { + return { ...i, delegators: [attestation.owner, delegator] } + } + return i + }), + } + const parentId = randomAsHex(32) + + mockedApi.query.delegation = { + delegationNodes: jest.fn(async (nodeId: string | Uint8Array) => { + switch (u8aToHex(u8aToU8a(nodeId))) { + case credential.delegationId: + return mockedApi.createType( + 'Option', + { + parent: parentId, + details: { + owner: parse(attestation.owner).address, + }, + } + ) + case parentId: + return mockedApi.createType( + 'Option', + { + parent: randomAsHex(32), + details: { + owner: parse(delegator).address, + }, + } + ) + default: + return mockedApi.createType( + 'Option' + ) + } + }), + } as any + + await expect( + verify(credentialWithDelegators, credentialWithDelegators.proof!, { + api: mockedApi, + }) + ).resolves.not.toThrow() + }) +}) + +describe('issuance', () => { + const unsigned = fromICredential(credential, { + issuer: attestation.owner, + timestamp: 0, + }) + + it('create a proof via initialize and finalize', async () => { + const [proofStub, txArgs] = initializeProof(unsigned) + expect(proofStub.block).toBeFalsy() + + mockedApi.tx.attestation.add(...txArgs) + + // mocking submission + jest + .mocked(mockedApi.query.system.events) + .mockResolvedValueOnce( + makeAttestationCreatedEvents([ + [ + '4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + txArgs[0], + txArgs[1], + txArgs[2], + ], + ]) as any + ) + + const attestedCredential = finalizeProof(unsigned, proofStub, { + blockHash, + timestamp, + genesisHash: mockedApi.genesisHash, + }) + expect(attestedCredential.proof).toHaveProperty( + 'block', + expect.stringMatching(/[0-9a-zA-Z]+/) + ) + + await expect( + verify(attestedCredential, attestedCredential.proof!, { api: mockedApi }) + ).resolves.toBeUndefined() + }) +}) + +describe('negative tests', () => { + beforeEach(() => { + VC = exportICredentialToVc(credential, { + issuer: attestation.owner, + chainGenesisHash: mockedApi.genesisHash, + blockHash, + timestamp, + }) + }) + + it('errors on proof mismatch', async () => { + // @ts-ignore + delete VC.proof + await expect( + verify(VC, { type: 'SomeOtherProof' } as any, { api: mockedApi }) + ).rejects.toThrow() + }) + + it('it detects tampering with credential digest', async () => { + // @ts-ignore + VC.id = `${VC.id.slice(0, 10)}1${VC.id.slice(11)}` + const { proof, ...cred } = VC + await expect(verify(cred, proof, { api: mockedApi })).rejects.toThrow() + }) + + it.skip('rejects selecting non-existent properties for presentation', async () => { + expect(() => + applySelectiveDisclosure(VC, VC.proof, ['name', 'age', 'profession']) + ).toThrow() + + const updated = applySelectiveDisclosure(VC, VC.proof, ['name']) + + expect(() => + applySelectiveDisclosure(updated.credential, updated.proof, ['premium']) + ).toThrow() + }) + + it('it detects tampering with credential fields', async () => { + VC.federatedTrustModel = [ + { + type: 'KiltAttesterLegitimationV1', + id: credentialIdFromRootHash(randomAsU8a(32)), + }, + ] + const { proof, ...cred } = VC + await expect(verify(cred, proof, { api: mockedApi })).rejects.toThrow() + }) + + it('it detects tampering on claimed properties', async () => { + VC.credentialSubject.name = 'Kort' + const { proof, ...cred } = VC + await expect(verify(cred, proof, { api: mockedApi })).rejects.toThrow() + }) + + it('it fails if attestation not on chain', async () => { + jest + .mocked(mockedApi.query.attestation.attestations) + .mockResolvedValueOnce( + mockedApi.createType( + 'Option' + ) as any + ) + jest + .mocked(mockedApi.query.system.events) + .mockResolvedValueOnce( + mockedApi.createType('Vec', []) as any + ) + const { proof, ...cred } = VC + await expect(verify(cred, proof, { api: mockedApi })).rejects.toThrow() + await expect(checkStatus(cred, { api: mockedApi })).rejects.toThrow() + }) + + it('fails if attestation on chain not identical', async () => { + jest + .mocked(mockedApi.query.attestation.attestations) + .mockResolvedValueOnce( + mockedApi.createType( + 'Option', + {} + ) as any + ) + jest + .mocked(mockedApi.query.system.events) + .mockResolvedValueOnce(makeAttestationCreatedEvents([]) as any) + const { proof, ...cred } = VC + await expect(verify(cred, proof, { api: mockedApi })).rejects.toThrow() + await expect(checkStatus(cred, { api: mockedApi })).rejects.toThrow() + }) + + it('verifies proof but not status if attestation revoked', async () => { + jest.mocked(mockedApi.query.attestation.attestations).mockResolvedValueOnce( + mockedApi.createType( + 'Option', + { + ctypeHash: + '0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf', + attester: '4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + revoked: true, + deposit: { + owner: '4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + amount: 0, + }, + } + ) as any + ) + + const { proof, ...cred } = VC + await expect(verify(cred, proof, { api: mockedApi })).resolves.not.toThrow() + await expect(checkStatus(cred, { api: mockedApi })).rejects.toThrow() + }) +}) diff --git a/packages/vc-export/src/KiltAttestationProofV1.ts b/packages/vc-export/src/KiltAttestationProofV1.ts new file mode 100644 index 000000000..24ce9f6ab --- /dev/null +++ b/packages/vc-export/src/KiltAttestationProofV1.ts @@ -0,0 +1,722 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { + hexToU8a, + stringToU8a, + u8aCmp, + u8aConcatStrict, + u8aEq, + u8aToHex, +} from '@polkadot/util' +import { + base58Decode, + base58Encode, + blake2AsU8a, + encodeAddress, + randomAsU8a, +} from '@polkadot/util-crypto' +import type { ApiPromise } from '@polkadot/api' +import type { QueryableStorageEntry } from '@polkadot/api/types' +import type { Option, u64, Vec } from '@polkadot/types' +import type { + AccountId, + Extrinsic, + Hash, +} from '@polkadot/types/interfaces/types.js' +import type { IEventData } from '@polkadot/types/types' + +import { CType } from '@kiltprotocol/core' +import { + authorizeTx, + getFullDidUri, + validateUri, + fromChain as didFromChain, +} from '@kiltprotocol/did' +import { JsonSchema, SDKErrors } from '@kiltprotocol/utils' +import { ConfigService } from '@kiltprotocol/config' +import type { + FrameSystemEventRecord, + RuntimeCommonAuthorizationAuthorizationId, +} from '@kiltprotocol/augment-api' +import type { + DidUri, + ICredential, + ICType, + IDelegationNode, + KiltAddress, + SignCallback, +} from '@kiltprotocol/types' + +import { Caip19 } from './CAIP/index.js' +import { + ATTESTATION_PROOF_V1_TYPE, + DEFAULT_CREDENTIAL_CONTEXTS, + KILT_ATTESTER_DELEGATION_V1_TYPE, + KILT_ATTESTER_LEGITIMATION_V1_TYPE, + KILT_CREDENTIAL_IRI_PREFIX, + KILT_REVOCATION_STATUS_V1_TYPE, + spiritnetGenesisHash, +} from './constants.js' +import { validateStructure as validateCredentialStructure } from './KiltCredentialV1.js' +import { fromGenesisAndRootHash } from './KiltRevocationStatusV1.js' +import { + jsonLdExpandCredentialSubject, + ExpandedContents, + delegationIdFromAttesterDelegation, + getDelegationNodeIdForCredential, + assertMatchingConnection, + credentialIdFromRootHash, + credentialIdToRootHash, +} from './common.js' +import { CredentialMalformedError, ProofMalformedError } from './errors.js' +import type { + CredentialSubject, + KiltAttestationProofV1, + KiltAttesterLegitimationV1, + KiltCredentialV1, +} from './types.js' + +/** + * Produces an instance of [[KiltAttestationProofV1]] from an [[ICredential]]. + * + * @param credential Input credential. + * @param opts Additional parameters required for creating a proof from an [[ICredential]]. + * @param opts.blockHash Hash of a block at which the proof must be verifiable. + * @returns An embedded proof for a verifiable credential derived from the input. + */ +export function fromICredential( + credential: ICredential, + { blockHash }: { blockHash: Uint8Array } +): KiltAttestationProofV1 { + // `block` field is base58 encoding of block hash + const block = base58Encode(blockHash) + // `commitments` (claimHashes) are base58 encoded in new format + const commitments = credential.claimHashes.map((i) => + base58Encode(hexToU8a(i)) + ) + // salt/nonces must be sorted by statement digest (keys) and base58 encoded + const salt = Object.entries(credential.claimNonceMap) + .map(([hsh, slt]) => [hexToU8a(hsh), stringToU8a(slt)]) + .sort((a, b) => u8aCmp(a[0], b[0])) + .map((i) => base58Encode(i[1])) + return { + type: ATTESTATION_PROOF_V1_TYPE, + block, + commitments, + salt, + } +} + +export const proofSchema: JsonSchema.Schema = { + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + '@context': { + type: 'array', + const: DEFAULT_CREDENTIAL_CONTEXTS, + }, + type: { + type: 'string', + const: ATTESTATION_PROOF_V1_TYPE, + }, + block: { + type: 'string', + }, + commitments: { + type: 'array', + items: { type: 'string' }, + }, + salt: { + type: 'array', + items: { type: 'string' }, + }, + }, + + additionalProperties: false, + required: ['type', 'block', 'commitments', 'salt'], +} + +// draft version '7' should align with $schema property of the schema above +const schemaValidator = new JsonSchema.Validator(proofSchema, '7') + +/** + * Validates a proof object against the KiltAttestationProofV1 data model. + * Throws if object violates the [[proofSchema]]. + * + * @param proof Proof object to be validated. + */ +export function validateStructure(proof: KiltAttestationProofV1): void { + const { errors, valid } = schemaValidator.validate(proof) + if (!valid) + throw new ProofMalformedError( + `Object not matching ${ATTESTATION_PROOF_V1_TYPE} data model`, + { + cause: errors, + } + ) +} + +/** + * Normalizes claims in credentialSubject for the commitment scheme of this proof method. + * This involves sorting the normalized representation of claims by their blake2b digests. + * + * @param expandedContents JSON-LD expansion of credentialSubject, where keys are either '@id' or full URIs. + * @returns An array of normalized `statements` sorted by their digests, and the sorted array of `digests`. + */ +function normalizeClaims( + expandedContents: ExpandedContents +): { statements: string[]; digests: Uint8Array[] } { + const statements = Object.entries(expandedContents).map(([key, value]) => + JSON.stringify({ [key]: value }).normalize('NFC') + ) + const statementsAndDigests = statements.map((statement) => ({ + digest: blake2AsU8a(stringToU8a(statement), 256), + statement, + })) + const sorted = statementsAndDigests.sort((a, b) => { + return u8aCmp(a.digest, b.digest) + }) + return { + statements: sorted.map(({ statement }) => statement), + digests: sorted.map(({ digest }) => digest), + } +} + +const OX = stringToU8a('0x') +function makeCommitments( + statementDigests: Uint8Array[], + salt: Uint8Array[] +): Uint8Array[] { + return statementDigests.map((digest, index) => { + // hex encoded digest, encoded as UTF-8 + const digestAsHex = stringToU8a(u8aToHex(digest, undefined, false)) + // concatenate salt, 0x, and hex-encoded digest to yield input for commitment + const bytes = u8aConcatStrict([salt[index], OX, digestAsHex]) + // compute commitment + return blake2AsU8a(bytes, 256) + }) +} + +/** + * (Re-)computes the root hash / credential hash from a credential and proof. + * + * @param credential A [[KiltCredentialV1]] type credential. + * @param proof A [[KiltAttestationProofV1]] type proof for this credential. + * @returns The root hash. + */ +export function calculateRootHash( + credential: Pick & + Partial, + proof: Pick & + Partial +): Uint8Array { + const { federatedTrustModel = [] } = credential + const { commitments } = proof + const rootHashInputs = [ + // Collect commitments for root hash + ...commitments.map((i) => base58Decode(i)), + // Collect trust model items for root hash + ...federatedTrustModel.map((entry) => { + if (entry.type === KILT_ATTESTER_LEGITIMATION_V1_TYPE) { + // get root hash from credential id + return credentialIdToRootHash(entry.id) + } + if (entry.type === KILT_ATTESTER_DELEGATION_V1_TYPE) { + // get on-chain id from delegation id + return delegationIdFromAttesterDelegation(entry) + } + throw new CredentialMalformedError( + `unknown type ${ + (entry as { type: string }).type + } in federatedTrustModel` + ) + }), + ] + // Concatenate and hash to produce root hash + return blake2AsU8a(u8aConcatStrict(rootHashInputs), 256) +} + +async function verifyAttestedAt( + claimHash: Uint8Array, + blockHash: Uint8Array, + opts: { api?: ApiPromise } = {} +): Promise<{ + verified: boolean + timestamp: number + attester: DidUri + cTypeId: ICType['$id'] + delegationId: IDelegationNode['id'] | null +}> { + const { api = ConfigService.get('api') } = opts + const apiAt = await api.at(blockHash) + // TODO: should we look up attestation storage as well and take attestation info from there? That gives us the definitive attestation state in this block (e.g. makes sure it hasn't been removed after) + const [events, time] = await apiAt.queryMulti< + [Vec, u64] + >([ + [api.query.system.events as QueryableStorageEntry<'promise'>], + [api.query.timestamp.now as QueryableStorageEntry<'promise'>], + ]) + + const timestamp = time.toNumber() + const attestationEvent = events + .reverse() + .find( + ({ phase, event }) => + phase.isApplyExtrinsic && + api.events.attestation.AttestationCreated.is(event) && + u8aEq(event.data[1], claimHash) + ) + if (!attestationEvent) + throw new SDKErrors.CredentialUnverifiableError( + `Matching attestation event for root hash ${u8aToHex( + claimHash + )} not found at block ${u8aToHex(blockHash)}` + ) + const [att, , cTypeHash, authorization] = attestationEvent.event.data as [ + AccountId, + Hash, + Hash, + Option | Option + ] & + IEventData + const attester = getFullDidUri(encodeAddress(att.toU8a(), 38)) + const cTypeId = CType.hashToId(cTypeHash.toHex()) + const delegationId = authorization.isSome + ? ( + (authorization.unwrap() as RuntimeCommonAuthorizationAuthorizationId) + .value ?? authorization.unwrap() + ).toHex() + : null + return { + verified: true, + timestamp, + attester, + cTypeId, + delegationId, + } +} + +async function verifyAuthoritiesInHierarchy( + api: ApiPromise, + nodeId: Uint8Array | string, + delegators: Set +): Promise { + const node = (await api.query.delegation.delegationNodes(nodeId)).unwrapOr( + null + ) + if (node === null) { + throw new SDKErrors.DelegationIdMissingError() + } + delegators.delete(didFromChain(node.details.owner)) + if (delegators.size === 0) { + return + } + if (node.parent.isSome) { + await verifyAuthoritiesInHierarchy(api, node.parent.unwrap(), delegators) + return + } + throw new SDKErrors.CredentialUnverifiableError( + `The following delegators are not in the attestation's delegation hierarchy: ${[ + ...delegators, + ]}` + ) +} + +async function verifyLegitimation( + { verifiableCredential, id }: KiltAttesterLegitimationV1, + api: ApiPromise +): Promise { + if (verifiableCredential) { + try { + // eslint-disable-next-line no-use-before-define + await verify( + verifiableCredential, + verifiableCredential.proof as KiltAttestationProofV1, + { api } + ) + } catch (cause) { + throw new SDKErrors.CredentialUnverifiableError( + `failed to verify legitimation ${id}`, + { + cause, + } + ) + } + } +} + +/** + * Verifies a KILT attestation proof by querying data from the KILT blockchain. + * This includes querying the KILT blockchain with the credential id, which returns an attestation record if attested. + * This record is then compared against attester address and delegation id (the latter of which is taken directly from the credential). + * + * @param credentialInput Verifiable Credential to verify proof against. + * @param proof KiltAttestationProofV1 proof object to be verified. Any proofs embedded in the credentialInput are stripped and ignored. + * @param opts Additional parameters. + * @param opts.api A polkadot-js/api instance connected to the blockchain network on which the credential is anchored. + * @returns Object indicating whether proof could be verified. + */ +export async function verify( + credentialInput: Omit, + proof: KiltAttestationProofV1, + opts: { api?: ApiPromise } = {} +): Promise { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { proof: _, ...credential } = credentialInput as KiltCredentialV1 + // 0. check proof structure + validateStructure(proof) + // 1 - 3. check credential structure + validateCredentialStructure(credential) + const { nonTransferable, credentialStatus, credentialSubject, issuer } = + credential + validateUri(issuer, 'Did') + // 4. check nonTransferable + if (nonTransferable !== true) + throw new CredentialMalformedError('nonTransferable must be true') + // 5. check credentialStatus + if (credentialStatus.type !== KILT_REVOCATION_STATUS_V1_TYPE) + throw new CredentialMalformedError( + `credentialStatus must have type ${KILT_REVOCATION_STATUS_V1_TYPE}` + ) + const { assetInstance, assetNamespace, assetReference } = Caip19.parse( + credentialStatus.id + ) + const expectedAttestationId = credential.id.substring( + KILT_CREDENTIAL_IRI_PREFIX.length + ) + if ( + assetNamespace !== 'kilt' || + assetReference !== 'attestation' || + assetInstance !== expectedAttestationId + ) { + throw new CredentialMalformedError( + `credentialStatus.id must end on 'kilt:attestation/${expectedAttestationId} in order to be verifiable with this proof` + ) + } + // 6. json-ld expand credentialSubject + const expandedContents = jsonLdExpandCredentialSubject(credentialSubject) + // 7. Transform to normalized statments and hash + const { statements, digests } = normalizeClaims(expandedContents) + if (statements.length !== proof.salt.length) + throw new ProofMalformedError( + 'Violated expectation: number of normalized statements === number of salts' + ) + // 8-9. Re-compute commitments + const commitments = makeCommitments( + digests, + proof.salt.map((salt) => base58Decode(salt)) + ) + // 10. Assert commitments are in proof + commitments.forEach((recomputed, index) => { + if (!proof.commitments.includes(base58Encode(recomputed))) + throw new SDKErrors.CredentialUnverifiableError( + `No commitment for statement with digest ${u8aToHex( + digests[index] + )} and salt ${proof.salt[index]}` + ) + }) + // 11. Compute root hash + const rootHash = calculateRootHash(credential, proof) + // 12. Compare against credential id + if (credentialIdFromRootHash(rootHash) !== credential.id) + throw new SDKErrors.CredentialUnverifiableError('root hash not verifiable') + + // 13. check that api is connected to the right network + const { api = ConfigService.get('api') } = opts + assertMatchingConnection(api, credential) + // 14. query info from chain + const { + cTypeId: onChainCType, + attester, + timestamp, + delegationId, + } = await verifyAttestedAt(rootHash, base58Decode(proof.block), { api }) + + const issuerMatches = attester === issuer + const cTypeMatches = onChainCType === credential.credentialSchema.id + const delegationMatches = u8aEq( + delegationId ?? new Uint8Array(), + getDelegationNodeIdForCredential(credential) ?? new Uint8Array() + ) + + if (!(issuerMatches && cTypeMatches && delegationMatches)) { + throw new SDKErrors.CredentialUnverifiableError( + `Credential not matching on-chain data: issuer "${attester}", CType: "${onChainCType}", delegationId: "${delegationId}"` + ) + } + // 16. Check issuance timestamp + const tIssuance = new Date(credential.issuanceDate).getTime() + // Accept exact matches as well as timestamps rounded to 1-second precision + if ( + !( + timestamp === tIssuance || + Math.round(timestamp / 1000) * 1000 === tIssuance + ) + ) { + throw new SDKErrors.CredentialUnverifiableError( + `block time ${new Date( + timestamp + ).toISOString()} does not match issuedAt (${credential.issuanceDate})` + ) + } + // 17. + 18. validate federatedTrustModel items + const { federatedTrustModel = [] } = credential + await Promise.all( + federatedTrustModel.map(async (i) => { + switch (i.type) { + case KILT_ATTESTER_DELEGATION_V1_TYPE: { + // check for expected authorities in delegation hierarchy + if (i.delegators && typeof delegationId === 'string') { + await verifyAuthoritiesInHierarchy( + api, + delegationId, + new Set(i.delegators) + ) + } + break + } + case KILT_ATTESTER_LEGITIMATION_V1_TYPE: { + // verify credentials used as legitimations + await verifyLegitimation(i, api) + break + } + default: { + throw new CredentialMalformedError( + `unknown type ${ + (i as { type: string }).type + } in federatedTrustModel` + ) + } + } + }) + ) +} + +/** + * Helps with producing a derivative proof for selective disclosure of claims in credentialSubject. + * + * @param credentialInput The original verifiable credential. + * @param proofInput The original proof. + * @param disclosedClaims An array of claims that are to be revealed. The `id` of the credentialSubject is always revealed. + * @returns A copy of the `credential` (without proof) where `credentialSubject` contains only selected claims and a copy of `proof` containing only `salt` entries for these. + * @example + * ``` + * const { proof, credential } = applySelectiveDisclosure( + * originalCredential, + * originalProof, + * ['name', 'address'] + * ) + * const derivedCredential = { ...credential, proof } + * ``` + */ +export function applySelectiveDisclosure( + credentialInput: Omit, + proofInput: KiltAttestationProofV1, + disclosedClaims: Array +): { + credential: Omit + proof: KiltAttestationProofV1 +} { + const { + credentialSubject, + /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ + proof: _, + ...remainder + } = credentialInput as KiltCredentialV1 + // 1. Make normalized statements sorted by their hash value + const expandedContents = jsonLdExpandCredentialSubject(credentialSubject) + const { statements: statementsOriginal } = normalizeClaims(expandedContents) + if (statementsOriginal.length !== proofInput.salt.length) + throw new ProofMalformedError( + 'Violated expectation: number of normalized statements === number of salts' + ) + // 2. Filter credentialSubject for claims to be revealed + const reducedSubject = Object.entries(credentialSubject).reduce( + (copy, [key, value]) => { + if (disclosedClaims.includes(key)) { + return { ...copy, [key]: value } + } + return copy + }, + // context and id is always revealed + { '@context': credentialSubject['@context'], id: credentialSubject.id } + ) + // 3. Make normalized statements from reduced credentialSubject + const { statements: reducedSet } = normalizeClaims( + jsonLdExpandCredentialSubject(reducedSubject) + ) + // 4. The order of the original statements (sorted by their hash) allows mapping them to the respective salt. + // If a statement from the original set is also contained within the reduced set, keep the salt at the respective index. + const salt = statementsOriginal.reduce((arr, statement, index) => { + if (reducedSet.includes(statement)) { + return [...arr, proofInput.salt[index]] + } + return arr + }, [] as string[]) + + return { + credential: { ...remainder, credentialSubject: reducedSubject }, + proof: { ...proofInput, salt }, + } +} + +/** + * Initialize a new, prelimiary [[KiltAttestationProofV1]], which is the first step in issuing a new credential. + * + * @example + * // start with initializing proof + * const [proof, args] = initializeProof(credential) + * const tx = api.tx.attestation.add(...args) + * // after DID-authorizing and submitting transaction (taking note of the block hash and timestamp where the transaction was included) + * const verifiableCredential = finalizeProof(credential, proof, {blockHash, timestamp}) + * + * @param credential A KiltCredentialV1 for which a proof shall be created. + * @returns A tuple where the first entry is the (partial) proof object and the second entry are the arguments required to create an extrinsic that anchors the proof on the KILT blockchain. + */ +export function initializeProof( + credential: Omit +): [ + KiltAttestationProofV1, + Parameters +] { + const { credentialSubject, credentialSchema, nonTransferable } = credential + + if (nonTransferable !== true) { + throw new Error('nonTransferable must be set to true') + } + + // 1. json-ld expand credentialSubject + const expandedContents = jsonLdExpandCredentialSubject(credentialSubject) + // 2. Transform to normalized statments and hash + const { digests } = normalizeClaims(expandedContents) + + // 3. Produce entropy & commitments + const entropy = new Array(digests.length) + .fill(undefined) + .map(() => randomAsU8a(36)) + const commitments = makeCommitments(digests, entropy) + + // 4. Create proof object + const salt = entropy.map((e) => base58Encode(e)) + const proof: KiltAttestationProofV1 = { + type: ATTESTATION_PROOF_V1_TYPE, + block: '', + commitments: commitments.sort(u8aCmp).map((i) => base58Encode(i)), + salt, + } + // 5. Prepare call + const rootHash = calculateRootHash(credential, proof) + const delegationId = getDelegationNodeIdForCredential(credential) + + return [ + proof, + [ + rootHash, + CType.idToHash(credentialSchema.id as ICType['$id']), + delegationId && { Delegation: delegationId }, + ], + ] +} + +/** + * Finalizes a [[KiltAttestationProofV1]] after anchoring the prelimiary proof's root hash on the KILT blockchain. + * + * @example + * // start with initializing proof + * const [proof, args] = initializeProof(credential) + * const tx = api.tx.attestation.add(...args) + * // after DID-authorizing and submitting transaction (taking note of the block hash and timestamp where the transaction was included) + * const verifiableCredential = finalizeProof(credential, proof, {blockHash, timestamp}) + * + * @param credential The KiltCredentialV1 for which the proof was initialized. + * @param proof The partial proof object created via `initializeProof`. + * @param includedAt Information on the addition of the attestation record anchoring the proof on the KILT blockchain. + * @param includedAt.blockHash The hash of the block in which the attestation record was added to the KILT blockchain. + * @param includedAt.timestamp The timestamp of that block. + * @param includedAt.genesisHash The genesis hash of the blockchain network. Default to the KILT mainnet (spiritnet). + * @returns The credential where `id`, `credentialStatus`, and `issuanceDate` have been updated based on the on-chain attestation record, containing a finalized proof. + */ +export function finalizeProof( + credential: Omit, + proof: KiltAttestationProofV1, + { + blockHash, + timestamp, + genesisHash = spiritnetGenesisHash, + }: { blockHash: Uint8Array; timestamp: number; genesisHash?: Uint8Array } +): KiltCredentialV1 { + const rootHash = calculateRootHash(credential, proof) + return { + ...credential, + id: credentialIdFromRootHash(rootHash), + credentialStatus: fromGenesisAndRootHash(genesisHash, rootHash), + issuanceDate: new Date(timestamp).toISOString(), + proof: { ...proof, block: base58Encode(blockHash) }, + } +} + +export type AttestationHandler = ( + tx: Extrinsic, + api: ApiPromise +) => Promise<{ + blockHash: Uint8Array + timestamp?: number +}> + +/** + * + * Creates a complete [[KiltAttestationProofV1]] for issuing a new credential. + * + * @param credential A [[KiltCredentialV1]] for which a proof shall be created. + * @param opts Additional parameters. + * @param opts.did The attester's DID URI. + * @param opts.didSigner A signing callback to create the attester's signature over the transaction to store an attestation record on-chain. + * @param opts.submitterAddress The address of the wallet that's going to cover the transaction fees. + * @param opts.txSubmissionHandler Callback function handling extrinsic submission. + * It receives an unsigned extrinsic and is expected to return the `blockHash` and `timestamp` when the extrinsic was included in a block. + * This callback must thus take care of signing and submitting the extrinsic to the KILT blockchain as well as noting the inclusion block. + * If no `timestamp` is returned by the callback, the timestamp is queried from the blockchain based on the block hash. + * @param opts.api A polkadot-js/api instance connected to the blockchain network on which the credential shall be anchored. + * @returns The credential where `id`, `credentialStatus`, and `issuanceDate` have been updated based on the on-chain attestation record, containing a finalized proof. + */ +export async function issue( + credential: KiltCredentialV1, + { + did, + didSigner, + submitterAddress, + txSubmissionHandler, + api = ConfigService.get('api'), + ...otherParams + }: { + didSigner: SignCallback + did: DidUri + submitterAddress: KiltAddress + txSubmissionHandler: AttestationHandler + api?: ApiPromise + } & Parameters[4] +): Promise { + const [proof, callArgs] = initializeProof(credential) + const call = api.tx.attestation.add(...callArgs) + const didSigned = await authorizeTx( + did, + call, + didSigner, + submitterAddress, + otherParams + ) + const { + blockHash, + timestamp = (await api.query.timestamp.now.at(blockHash)).toNumber(), + } = await txSubmissionHandler(didSigned, api) + return finalizeProof(credential, proof, { + blockHash, + timestamp, + genesisHash: api.genesisHash, + }) +} diff --git a/packages/vc-export/src/KiltCredentialV1.ts b/packages/vc-export/src/KiltCredentialV1.ts new file mode 100644 index 000000000..41090c4ca --- /dev/null +++ b/packages/vc-export/src/KiltCredentialV1.ts @@ -0,0 +1,334 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { hexToU8a } from '@polkadot/util' +import { base58Encode } from '@polkadot/util-crypto' + +import { JsonSchema } from '@kiltprotocol/utils' +import { CType } from '@kiltprotocol/core' +import type { + ICType, + ICredential, + DidUri, + IDelegationNode, +} from '@kiltprotocol/types' + +import { CredentialMalformedError } from './errors.js' +import { fromGenesisAndRootHash } from './KiltRevocationStatusV1.js' +import { + DEFAULT_CREDENTIAL_CONTEXTS, + DEFAULT_CREDENTIAL_TYPES, + JSON_SCHEMA_TYPE, + KILT_ATTESTER_DELEGATION_V1_TYPE, + KILT_ATTESTER_LEGITIMATION_V1_TYPE, + KILT_CREDENTIAL_TYPE, + spiritnetGenesisHash, +} from './constants.js' +import type { + JsonSchemaValidator2018, + KiltAttesterDelegationV1, + KiltAttesterLegitimationV1, + KiltCredentialV1, +} from './types.js' +import { credentialIdFromRootHash } from './common.js' + +interface CredentialInput { + subject: DidUri + claims: ICredential['claim']['contents'] + cType: ICType | ICType['$id'] + issuer: DidUri + timestamp: number + chainGenesisHash?: Uint8Array + claimHash?: ICredential['rootHash'] + legitimations?: Array + delegationId?: IDelegationNode['id'] +} +interface CredentialInputWithRootHash extends CredentialInput { + claimHash: ICredential['rootHash'] +} + +export function fromInput( + input: CredentialInputWithRootHash +): Omit +/** + * Produces a KiltCredentialV1 from input data. + * + * @param input Container for input data. + * @param input.subject Did of the credential subject (claimer). + * @param input.claims A record of claims about the subject. + * @param input.cType The CType (or alternatively its id) to which the claims conform. + * @param input.issuer The issuer of the credential. + * @param input.timestamp Timestamp of a block at which the credential can be verified, in milliseconds since January 1, 1970, UTC (UNIX epoch). + * @param input.chainGenesisHash Optional: Genesis hash of the chain against which this credential is verifiable. Defaults to the spiritnet genesis hash. + * @param input.claimHash Optional: digest of the credential contents needed to produce a credential id. + * @param input.legitimations Optional: array of credentials (or credential ids) which function as legitimations to this credential. + * @param input.delegationId Optional: the id of a delegation node which was used in attesting this credential. + * @returns A VerfiableCredential (without proof) conforming to the KiltCredentialV1 data model. The `id` is omitted if no `claimHash` was specified. + */ +export function fromInput({ + claimHash, + subject, + claims, + cType, + issuer, + timestamp, + chainGenesisHash = spiritnetGenesisHash, + legitimations, + delegationId, +}: CredentialInput): Omit< + KiltCredentialV1, + 'proof' | 'id' | 'credentialStatus' +> { + // write root hash to id + const id = credentialIdFromRootHash(hexToU8a(claimHash)) + + const cTypeId = typeof cType === 'object' ? cType.$id : cType + // transform & annotate claim to be json-ld and VC conformant + const credentialSubject = { + '@context': { '@vocab': `${cTypeId}#` }, + id: subject, + } + + Object.entries(claims).forEach(([key, claim]) => { + if (key.startsWith('@') || key === 'id' || key === 'type') { + credentialSubject[`${cTypeId}#${key}`] = claim + } else { + credentialSubject[key] = claim + } + }) + + const credentialSchema: JsonSchemaValidator2018 = { + id: cTypeId, + type: JSON_SCHEMA_TYPE, + } + if (typeof cType === 'object') { + credentialSchema.name = cType.title + credentialSchema.schema = cType + } + + const federatedTrustModel: KiltCredentialV1['federatedTrustModel'] = [] + legitimations?.forEach((legitimation) => { + const type = KILT_ATTESTER_LEGITIMATION_V1_TYPE + const entry: KiltAttesterLegitimationV1 = + typeof legitimation === 'object' + ? { + id: legitimation.id, + type, + verifiableCredential: legitimation, + } + : { + id: legitimation, + type, + } + federatedTrustModel.push(entry) + }) + if (delegationId) { + const delegation: KiltAttesterDelegationV1 = { + id: `kilt:delegation/${base58Encode(hexToU8a(delegationId))}`, + type: KILT_ATTESTER_DELEGATION_V1_TYPE, + } + federatedTrustModel.push(delegation) + } + + const issuanceDate = new Date(timestamp).toISOString() + + return { + '@context': DEFAULT_CREDENTIAL_CONTEXTS, + type: DEFAULT_CREDENTIAL_TYPES, + ...(id && { id }), + nonTransferable: true, + credentialSubject, + credentialSchema, + issuer, + issuanceDate, + ...(claimHash && { + credentialStatus: fromGenesisAndRootHash(chainGenesisHash, claimHash), + }), + ...(federatedTrustModel.length > 0 && { federatedTrustModel }), + } +} + +export const credentialSchema: JsonSchema.Schema = { + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + '@context': { + type: 'array', + const: DEFAULT_CREDENTIAL_CONTEXTS, + }, + type: { + type: 'array', + uniqueItems: true, + minItems: 2, + maxItems: 2, + items: { enum: DEFAULT_CREDENTIAL_TYPES }, + }, + id: { + type: 'string', + format: 'uri', + }, + nonTransferable: { + type: 'boolean', + }, + credentialSubject: { + type: 'object', + properties: { + id: { + type: 'string', + format: 'uri', + }, + }, + required: ['id'], + }, + issuer: { + type: 'string', + format: 'uri', + }, + issuanceDate: { + type: 'string', + format: 'date-time', + }, + credentialStatus: { + type: 'object', + properties: { + id: { + type: 'string', + format: 'uri', + }, + type: { + // public credentials may have a different revocation check, so we don't force the type here + type: 'string', + }, + }, + required: ['id', 'type'], + }, + federatedTrustModel: { + type: 'array', + minLength: 1, + items: { + type: 'object', + properties: { + id: { + type: 'string', + format: 'uri', + }, + type: { + type: 'string', + }, + }, + }, + }, + credentialSchema: { + type: 'object', + properties: { + id: { + type: 'string', + format: 'uri', + }, + type: { + type: 'string', + const: JSON_SCHEMA_TYPE, + }, + schema: { $ref: CType.Schemas.CTypeModel.$id }, + }, + required: ['id', 'type'], + }, + proof: { + type: 'object', + properties: { + type: { + type: 'string', + }, + }, + required: ['type'], + }, + }, + additionalProperties: false, + required: [ + '@context', + 'type', + 'id', + 'credentialSubject', + 'issuer', + 'issuanceDate', + 'credentialStatus', + 'credentialSchema', + ], +} + +// draft version '7' should align with $schema property of the schema above +const schemaValidator = new JsonSchema.Validator(credentialSchema, '7') +// we define an id when adding the CTypeModel because more than one anonymous schema is not allowed +schemaValidator.addSchema(CType.Schemas.CTypeModel, 'kilt.schemas/CTypeModel') + +/** + * Validates an object against the KiltCredentialV1 data model. + * Throws if object violates the [[credentialSchema]]. + * + * @param credential Credential or object to be validated. + */ +export function validateStructure( + credential: Omit +): void { + const { errors, valid } = schemaValidator.validate(credential) + if (!valid) + throw new CredentialMalformedError( + `Object not matching ${KILT_CREDENTIAL_TYPE} data model`, + { + cause: errors, + } + ) +} + +/** + * Transforms an [[ICredential]] object to conform to the KiltCredentialV1 data model. + * + * @param input An [[ICredential]] object. + * @param options Additional required and optional parameters for producing a VC from an [[ICredential]]. + * @param options.issuer The issuer of the attestation to this credential (attester). + * @param options.timestamp Timestamp of the block referenced by blockHash in milliseconds since January 1, 1970, UTC (UNIX epoch). + * @param options.cType Optional: The CType object referenced by the [[ICredential]]. + * @param options.chainGenesisHash Optional: Genesis hash of the chain against which this credential is verifiable. Defaults to the spiritnet genesis hash. + * @returns A KiltCredentialV1 with embedded KiltAttestationProofV1 proof. + */ +export function fromICredential( + input: ICredential, + { + issuer, + timestamp, + cType: ctype, + chainGenesisHash = spiritnetGenesisHash, + }: Pick & + Partial> +): Omit { + const { + legitimations: legitimationsInput, + delegationId, + rootHash: claimHash, + claim, + } = input + const { cTypeHash, owner: subject, contents: claims } = claim + const cType = ctype ?? CType.hashToId(cTypeHash) + + const legitimations = legitimationsInput.map(({ rootHash: legHash }) => + credentialIdFromRootHash(hexToU8a(legHash)) + ) + + const vc = fromInput({ + claimHash, + subject, + claims, + chainGenesisHash, + cType, + issuer, + timestamp, + legitimations, + ...(delegationId && { delegationId }), + }) + + return vc +} diff --git a/packages/vc-export/src/KiltRevocationStatusV1.ts b/packages/vc-export/src/KiltRevocationStatusV1.ts new file mode 100644 index 000000000..0aa4157a8 --- /dev/null +++ b/packages/vc-export/src/KiltRevocationStatusV1.ts @@ -0,0 +1,104 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { u8aEq, u8aToHex, u8aToU8a } from '@polkadot/util' +import { base58Decode, base58Encode } from '@polkadot/util-crypto' +import type { ApiPromise } from '@polkadot/api' +import type { U8aLike } from '@polkadot/util/types' + +import { ConfigService } from '@kiltprotocol/config' +import { Attestation, CType, SDKErrors } from '@kiltprotocol/core' +import type { Caip2ChainId } from '@kiltprotocol/types' + +import { Caip2 } from './CAIP/index.js' +import { KILT_REVOCATION_STATUS_V1_TYPE } from './constants.js' +import { + assertMatchingConnection, + getDelegationNodeIdForCredential, +} from './common.js' +import { CredentialMalformedError } from './errors.js' +import type { KiltCredentialV1, KiltRevocationStatusV1 } from './types.js' + +/** + * Check attestation and revocation status of a credential at the latest block available. + * + * @param credential The KiltCredentialV1 to which the status method is linked to. + * @param opts Additional parameters. + * @param opts.api An optional polkadot-js/api instance connected to the blockchain network on which the credential is anchored. + * If not given this function will try to retrieve a cached connection from the [[ConfigService]]. + */ +export async function check( + credential: Omit, + opts: { api?: ApiPromise } = {} +): Promise { + const { credentialStatus } = credential + if (credentialStatus?.type !== KILT_REVOCATION_STATUS_V1_TYPE) + throw new TypeError( + `The credential must have a credentialStatus of type ${KILT_REVOCATION_STATUS_V1_TYPE}` + ) + const { api = ConfigService.get('api') } = opts + const { assetNamespace, assetReference, assetInstance } = + assertMatchingConnection(api, credential) + if (assetNamespace !== 'kilt' || assetReference !== 'attestation') { + throw new Error( + `Cannot handle revocation status checks for asset type ${assetNamespace}:${assetReference}` + ) + } + if (!assetInstance) { + throw new CredentialMalformedError( + "The attestation record's CAIP-19 identifier must contain an asset index ('token_id') decoding to the credential root hash" + ) + } + const rootHash = base58Decode(assetInstance) + const encoded = await api.query.attestation.attestations(rootHash) + if (encoded.isNone) + throw new SDKErrors.CredentialUnverifiableError( + `Attestation data not found at latest block ${encoded.createdAtHash}` + ) + + const decoded = Attestation.fromChain(encoded, u8aToHex(rootHash)) + const onChainCType = CType.hashToId(decoded.cTypeHash) + const delegationId = getDelegationNodeIdForCredential(credential) + if ( + decoded.owner !== credential.issuer || + onChainCType !== credential.credentialSchema.id || + !u8aEq( + delegationId ?? new Uint8Array(), + decoded.delegationId ?? new Uint8Array() + ) + ) { + throw new SDKErrors.CredentialUnverifiableError( + `Credential not matching on-chain data: issuer "${decoded.owner}", CType: "${onChainCType}", Delegation: "${decoded.delegationId}"` + ) + } + if (decoded.revoked !== false) { + throw new SDKErrors.CredentialUnverifiableError('Attestation revoked') + } +} + +/** + * Creates a [[KiltRevocationStatusV1]] object from a credential hash and blochain identifier, which allow locating the credential's attestation record. + * + * @param chainIdOrGenesisHash The genesis hash (or CAIP-2 identifier) of the substrate chain on which the attestation record lives. + * @param rootHash The credential hash identifying the relevant attestation record on that chain. + * @returns A new [[KiltRevocationStatusV1]] object. + */ +export function fromGenesisAndRootHash( + chainIdOrGenesisHash: Caip2ChainId | U8aLike, + rootHash: U8aLike +): KiltRevocationStatusV1 { + const chainId = + typeof chainIdOrGenesisHash === 'string' && + chainIdOrGenesisHash.startsWith('polkadot') + ? chainIdOrGenesisHash + : Caip2.chainIdFromGenesis(u8aToU8a(chainIdOrGenesisHash)) + + return { + id: `${chainId}/kilt:attestation/${base58Encode(rootHash)}`, + type: KILT_REVOCATION_STATUS_V1_TYPE, + } +} diff --git a/packages/vc-export/src/Presentation.spec.ts b/packages/vc-export/src/Presentation.spec.ts new file mode 100644 index 000000000..2dae8711b --- /dev/null +++ b/packages/vc-export/src/Presentation.spec.ts @@ -0,0 +1,398 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/** + * @group unit/vc-export + */ + +import { hexToU8a } from '@polkadot/util' +import { + secp256k1PairFromSeed, + ed25519PairFromSeed, + randomAsU8a, + encodeAddress, +} from '@polkadot/util-crypto' +import type { ApiPromise } from '@polkadot/api' +import type { Keypair } from '@polkadot/util-crypto/types' +import type { Codec } from '@polkadot/types/types' + +import { init } from '@kiltprotocol/core' +import { Crypto } from '@kiltprotocol/utils' +import { getFullDidUri, getFullDidUriFromKey } from '@kiltprotocol/did' +import { ApiMocks } from '@kiltprotocol/testing' +import type { + DidDocument, + DidVerificationKey, + ResolvedDidKey, + VerificationKeyType, +} from '@kiltprotocol/types' + +import { + create as createPresentation, + signAsJwt, + verifySignedAsJwt, +} from './Presentation' +import type { VerifiableCredential, VerifiablePresentation } from './types' +import { + create as createJWT, + verify as verifyJWT, + credentialToPayload, + credentialFromPayload, +} from './DidJwt' + +const credential = { + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://www.kilt.io/contexts/credentials', + ], + type: ['VerifiableCredential', 'KiltCredential2020'], + id: 'kilt:cred:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad', + credentialSubject: { + '@context': { + '@vocab': + 'kilt:ctype:0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf#', + }, + birthday: '1991-01-01', + name: 'Kurt', + premium: true, + }, + issuer: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + issuanceDate: '2021-03-25T10:20:44.000Z', + nonTransferable: true, + proof: [ + { + type: 'KILTAttestation2020', + proofPurpose: 'assertionMethod', + attester: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + }, + ], +} as any + +let api: ApiPromise +const seed = hexToU8a( + '0xc48ea34c57ab63752ac5b797304de15cc036d126b96fb9c8198498d756c0579c' +) +const keyHash = Crypto.hashStr('key1') + +function mockDidDoc(key: Keypair, type: VerificationKeyType) { + const did = getFullDidUriFromKey({ ...key, type }) + const didKey: ResolvedDidKey = { + id: `${did}#${keyHash}`, + controller: did, + publicKey: key.publicKey, + type, + } + const didDocument: DidDocument = { + uri: did, + authentication: [{ ...didKey, id: `#${keyHash}` } as DidVerificationKey], + assertionMethod: [{ ...didKey, id: `#${keyHash}` } as DidVerificationKey], + } + const onChainDoc = api.createType('Option', { + identifier: key.publicKey, + details: { + authenticationKey: keyHash, + assertionMethod: keyHash, + publicKeys: { + [keyHash]: { + key: { PublicVerificationKey: { [type]: key.publicKey } }, + }, + }, + }, + }) + return { did, didDocument, didKey, onChainDoc } +} + +beforeAll(async () => { + jest.useFakeTimers() + jest.setSystemTime(1679407014000) + api = ApiMocks.createAugmentedApi() + api.call.did = { + query: jest + .fn() + .mockResolvedValue(api.createType('Option')), + } as any + api.query.did = { + didBlacklist: jest.fn().mockResolvedValue(api.createType('Option')), + } as any + await init({ api }) +}) + +it('verifies a presentation signed by an ecdsa key', async () => { + const key = secp256k1PairFromSeed(seed) + const { did, didKey, onChainDoc } = mockDidDoc(key, 'ecdsa') + jest.mocked(api.call.did.query).mockResolvedValue(onChainDoc) + + credential.credentialSubject.id = did + + const presentation = createPresentation([credential], did, { + verifier: 'did:kilt:1234', + }) + + const signedPres = await signAsJwt( + presentation, + { + ...key, + keyUri: didKey.id, + type: 'ecdsa', + }, + { challenge: 'abcdef', expiresIn: 60 } + ) + + const myResult = await verifySignedAsJwt(signedPres, { + verifier: 'did:kilt:1234', + challenge: 'abcdef', + }) + + expect(myResult).toMatchObject({ + presentation, + payload: { iss: did }, + }) +}) + +it('verifies a presentation signed by an ed25519 key', async () => { + const key = ed25519PairFromSeed(seed) + const { did, didKey, onChainDoc } = mockDidDoc(key, 'ed25519') + jest.mocked(api.call.did.query).mockResolvedValue(onChainDoc) + + credential.credentialSubject.id = did + + const presentation = createPresentation([credential], did, { + verifier: 'did:kilt:1234', + }) + + const signedPres = await signAsJwt( + presentation, + { + ...key, + keyUri: didKey.id, + type: 'ed25519', + }, + { challenge: 'abcdef', expiresIn: 60 } + ) + + const myResult = await verifySignedAsJwt(signedPres, { + verifier: 'did:kilt:1234', + challenge: 'abcdef', + }) + + expect(myResult).toMatchObject({ + presentation, + payload: { iss: did }, + }) +}) + +it('verifies a credential signed by an ed25519 key', async () => { + const key = ed25519PairFromSeed(seed) + const { didKey, onChainDoc } = mockDidDoc(key, 'ed25519') + jest.mocked(api.call.did.query).mockResolvedValue(onChainDoc) + + const cred = { + ...credential, + expiresAt: '2026-03-25T10:20:44.000Z', + } + + const jwtCredential = await createJWT(credentialToPayload(cred), { + ...key, + keyUri: didKey.id, + type: 'ed25519', + }) + + const result = await verifyJWT(jwtCredential, { + proofPurpose: 'assertionMethod', + }) + + expect(credentialFromPayload(result.payload)).toMatchObject(cred) +}) + +it('fails if subject !== holder', async () => { + const key = ed25519PairFromSeed(seed) + const { did, didKey, onChainDoc } = mockDidDoc(key, 'ed25519') + jest.mocked(api.call.did.query).mockResolvedValue(onChainDoc) + + credential.credentialSubject.id = did + + const presentation = createPresentation([credential], did) + + // test making presentations + const randomDid = getFullDidUri(encodeAddress(randomAsU8a(), 38)) + credential.credentialSubject.id = randomDid + expect(() => + createPresentation([credential], did) + ).toThrowErrorMatchingInlineSnapshot( + `"The credential with id kilt:cred:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad is non-transferable and cannot be presented by the identity did:kilt:4qqbHjqZ45gLCjsoNS3PXECZpYZqHZuoGyWJZm1Jz8YFhMoo"` + ) + + // test verifying presentations + ;( + presentation.verifiableCredential as VerifiableCredential + ).credentialSubject.id = randomDid + const signedPres = await signAsJwt(presentation, { + ...key, + keyUri: didKey.id, + type: 'ed25519', + }) + + await expect( + verifySignedAsJwt(signedPres, {}) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"The credential with id kilt:cred:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad is non-transferable and cannot be presented by the identity did:kilt:4qqbHjqZ45gLCjsoNS3PXECZpYZqHZuoGyWJZm1Jz8YFhMoo"` + ) +}) + +it('fails if expired or not yet valid', async () => { + const key = ed25519PairFromSeed(seed) + const { did, didKey, onChainDoc } = mockDidDoc(key, 'ed25519') + jest.mocked(api.call.did.query).mockResolvedValue(onChainDoc) + + credential.credentialSubject.id = did + + const presentation = createPresentation([credential], did, { + validFrom: new Date(Date.now() - 70_000), // 70 seconds ago + validUntil: new Date(Date.now() - 10_000), // 10 seconds ago + }) + + let signedPres = await signAsJwt( + presentation, + { + ...key, + keyUri: didKey.id, + type: 'ed25519', + }, + { expiresIn: 30 } + ) + + await expect( + verifySignedAsJwt(signedPres) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"invalid_jwt: JWT has expired: exp: 1679406974 < now: 1679407014"` + ) + + // try setting expiration date with expiresAt + signedPres = await signAsJwt( + presentation, + { + ...key, + keyUri: didKey.id, + type: 'ed25519', + }, + { expiresIn: 30 } + ) + + await expect( + verifySignedAsJwt(signedPres) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"invalid_jwt: JWT has expired: exp: 1679406974 < now: 1679407014"` + ) + + // should work if we set it to 80s + signedPres = await signAsJwt( + presentation, + { + ...key, + keyUri: didKey.id, + type: 'ed25519', + }, + { expiresIn: 80 } + ) + + await expect(verifySignedAsJwt(signedPres)).resolves.toMatchObject({ + presentation: { + ...presentation, + expirationDate: new Date( + new Date(presentation.issuanceDate as string).getTime() + 80_000 + ).toISOString(), + }, + }) + + // set issuanceDate to the future + signedPres = await signAsJwt( + { + ...presentation, + issuanceDate: new Date(Date.now() + 60 * 1000).toISOString(), + }, + { + ...key, + keyUri: didKey.id, + type: 'ed25519', + } + ) + + await expect( + verifySignedAsJwt(signedPres) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"invalid_jwt: JWT not valid before nbf: 1679407074"` + ) +}) + +describe('when there is a presentation', () => { + let signedPresentation: string + let presentation: VerifiablePresentation + let onChainDoc: Codec + + beforeAll(async () => { + const key = ed25519PairFromSeed(seed) + const mocks = mockDidDoc(key, 'ed25519') + const { did, didKey } = mocks + ;({ onChainDoc } = mocks) + + credential.credentialSubject.id = did + + presentation = createPresentation([credential], did, { + verifier: 'did:kilt:1234', + }) + + signedPresentation = await signAsJwt( + presentation, + { + ...key, + keyUri: didKey.id, + type: 'ed25519', + }, + { challenge: 'abcdef', expiresIn: 60 } + ) + }) + + it('fails when DID doesnt exist', async () => { + jest + .mocked(api.call.did.query) + .mockResolvedValue(api.createType('Option')) + + await expect( + verifySignedAsJwt(signedPresentation, { + verifier: 'did:kilt:1234', + challenge: 'abcdef', + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"resolver_error: Unable to resolve DID document for did:kilt:4qqbHjqZ45gLCjsoNS3PXECZpYZqHZuoGyWJZm1Jz8YFhMoo: notFound, "` + ) + }) + + it('fails when audience does not match', async () => { + jest.mocked(api.call.did.query).mockResolvedValue(onChainDoc) + + await expect( + verifySignedAsJwt(signedPresentation, { + verifier: 'did:kilt:4321', + challenge: 'abcdef', + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"invalid_config: JWT audience does not match your DID or callback url"` + ) + }) + + it('fails if challenge does not match', async () => { + jest.mocked(api.call.did.query).mockResolvedValue(onChainDoc) + + await expect( + verifySignedAsJwt(signedPresentation, { + challenge: 'whatup', + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"expected challenge not matching presentation"` + ) + }) +}) diff --git a/packages/vc-export/src/Presentation.ts b/packages/vc-export/src/Presentation.ts new file mode 100644 index 000000000..9a222eddd --- /dev/null +++ b/packages/vc-export/src/Presentation.ts @@ -0,0 +1,286 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import type { JWTOptions, JWTVerified } from 'did-jwt' + +import { JsonSchema } from '@kiltprotocol/utils' +import type { DidResourceUri, DidUri } from '@kiltprotocol/types' + +import { + supportedKeys, + verify, + create as createJWT, + presentationToPayload, + presentationFromPayload, +} from './DidJwt.js' +import { + W3C_CREDENTIAL_CONTEXT_URL, + W3C_CREDENTIAL_TYPE, + W3C_PRESENTATION_TYPE, +} from './constants.js' +import { PresentationMalformedError } from './errors.js' +import type { VerifiableCredential, VerifiablePresentation } from './types.js' + +export const presentationSchema: JsonSchema.Schema = { + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + '@context': { $ref: '#/definitions/contexts' }, + type: { + oneOf: [ + { + type: 'array', + uniqueItems: true, + items: { type: 'string' }, + contains: { const: W3C_PRESENTATION_TYPE }, + }, + { + const: W3C_PRESENTATION_TYPE, + }, + ], + }, + id: { + type: 'string', + format: 'uri', + }, + verifiableCredential: { + oneOf: [ + { $ref: '#/definitions/verifiableCredential' }, + { + type: 'array', + items: { $ref: '#/definitions/verifiableCredential' }, + minLength: 1, + }, + ], + }, + holder: { + type: 'string', + format: 'uri', + }, + proof: { + type: 'object', + properties: { + type: { + type: 'string', + }, + }, + required: ['type'], + }, + }, + required: ['@context', 'type', 'verifiableCredential', 'holder'], + definitions: { + verifiableCredential: { + type: 'object', + // only checking the minimal definition of a VC: a type field and potentially a context. + properties: { + '@context': { $ref: '#/definitions/contexts' }, + type: { + oneOf: [ + { + type: 'array', + uniqueItems: true, + items: { type: 'string' }, + contains: { const: W3C_CREDENTIAL_TYPE }, + }, + { + const: W3C_CREDENTIAL_TYPE, + }, + ], + }, + }, + required: ['type'], + }, + contexts: { + oneOf: [ + { + type: 'array', + uniqueItem: true, + items: [{ const: W3C_CREDENTIAL_CONTEXT_URL }], + additionalItems: { type: 'string', format: 'uri' }, + }, + { const: W3C_CREDENTIAL_CONTEXT_URL }, + ], + }, + }, +} + +// draft version '7' should align with $schema property of the schema above +const schemaValidator = new JsonSchema.Validator(presentationSchema, '7') + +/** + * Validates an object against the VerifiablePresentation data model. + * Throws if object violates the [[presentationSchema]]. + * + * @param presentation VerifiablePresentation or object to be validated. + */ +export function validateStructure(presentation: VerifiablePresentation): void { + const { errors, valid } = schemaValidator.validate(presentation) + if (!valid) { + throw new PresentationMalformedError( + `Object not matching VerifiablePresentation data model`, + { + cause: errors, + } + ) + } +} + +/** + * Checks that an identity can act as a legitimate holder of a set of credentials and thus include them in a presentation they sign. + * Credentials where `nonTransferable === true` and `credentialSubject.id !== holder` are disallowed and will cause this to fail. + * + * @param presentation A Verifiable Presentation. + * @param presentation.holder The presentation holder's identifier. + * @param presentation.verifiableCredential A VC or an array of VCs. + */ +export function assertHolderCanPresentCredentials({ + holder, + verifiableCredential, +}: { + holder: DidUri + verifiableCredential: VerifiableCredential[] | VerifiableCredential +}): void { + const credentials = Array.isArray(verifiableCredential) + ? verifiableCredential + : [verifiableCredential] + credentials.forEach(({ nonTransferable, credentialSubject, id }) => { + if (nonTransferable && credentialSubject.id !== holder) + throw new Error( + `The credential with id ${id} is non-transferable and cannot be presented by the identity ${holder}` + ) + }) +} + +/** + * Creates a Verifiable Presentation from one or more Verifiable Credentials. + * This should be signed before sending to a verifier to provide authentication. + * + * @param VCs One or more Verifiable Credentials. + * @param holder The holder of the credentials in the presentation, which also signs the presentation. + * @param verificationOptions Options to restrict the validity of a presentation to a specific audience or time frame. + * @param verificationOptions.verifier Identifier of the verifier to prevent unintended re-use of the presentation. + * @param verificationOptions.validFrom A Date or date-time string indicating the earliest point in time where the presentation becomes valid. + * Represented as `issuanceDate` on the presentation. + * @param verificationOptions.validUntil A Date or date-time string indicating when the presentation is no longer valid. + * Represented as `expirationDate` on the presentation. + * @returns An (unsigned) Verifiable Presentation containing the original VCs with its proofs. + */ +export function create( + VCs: VerifiableCredential[], + holder: DidUri, + { + validFrom, + validUntil, + verifier, + }: { + verifier?: string + validFrom?: Date | string + validUntil?: Date | string + } = {} +): VerifiablePresentation { + const verifiableCredential = VCs.length === 1 ? VCs[0] : VCs + const presentation: VerifiablePresentation = { + '@context': [W3C_CREDENTIAL_CONTEXT_URL], + type: [W3C_PRESENTATION_TYPE], + verifiableCredential, + holder, + } + if (typeof validFrom !== 'undefined') { + presentation.issuanceDate = new Date(validFrom).toISOString() + } + if (typeof validUntil !== 'undefined') { + presentation.expirationDate = new Date(validUntil).toISOString() + } + if (typeof verifier === 'string') { + presentation.verifier = verifier + } + + validateStructure(presentation) + assertHolderCanPresentCredentials(presentation) + return presentation +} + +/** + * Signs a presentation in its JWT rendering. + * + * @param presentation The VerifiablePresentation (without proof). + * @param signingKey Key object required for signing. + * @param signingKey.secretKey The bytes of the secret key. + * @param signingKey.keyUri The key uri by which the public key can be looked up from a DID document. + * @param signingKey.type The key type. Ed25519 and ecdsa (secp256k1) are supported. + * @param options Additional optional configuration. + * @param options.expiresIn Time in seconds until the presentation expires, based on issuanceDate or alternatively the current system time. + * If set, this replaces the presentation's current expirationDate. + * @param options.challenge Optional challenge provided by a verifier that can be used to prevent replay attacks. + * @returns A signed JWT in compact representation containing a VerifiablePresentation. + */ +export function signAsJwt( + presentation: VerifiablePresentation, + signingKey: { + secretKey: Uint8Array + keyUri: DidResourceUri + type: supportedKeys + }, + options: { + challenge?: string + } & Partial = {} +): Promise { + // produce (unencoded) payload where keys on the presentation object are mapped to JWT claims + const payload = presentationToPayload(presentation) + // JWS replaces any existing proof + delete payload.vp.proof + const { challenge, expiresIn } = options + // if expiresIn is set, remove exp claim to make sure it is replaced + if (typeof expiresIn === 'number') { + delete payload.exp + } + // add challenge claim to JWTs + if (challenge) { + payload.nonce = challenge + } + // encode and add JWS + return createJWT(payload, signingKey, options) +} + +/** + * Verifies a JWT rendering of a [[VerifiablePresentation]]. + * + * @param token The JWT in compact (string) encoding. + * @param options Optional configuration. + * @param options.verifier Expected audience/verifier. Verification fails if the aud claim in the JWT is not equal to this value. + * @param options.challenge Expected challenge. Verification fails if the nonce claim in the JWT is not equal to this value. + * @param options.skewTime Allowed tolerance, in seconds, when verifying time of validity to account for clock skew between two machines. Defaults to 0. + * @returns An object including the `presentation` (without proof) and the decoded JWT `payload` containing all claims. + */ +export async function verifySignedAsJwt( + token: string, + { + verifier, + challenge, + skewTime, + }: { verifier?: string; challenge?: string; skewTime?: number } = {} +): Promise< + JWTVerified & { + presentation: VerifiablePresentation + } +> { + const result = await verify(token, { + proofPurpose: 'authentication', + audience: verifier, + skewTime, + }) + if (challenge && result.payload.nonce !== challenge) { + throw new Error('expected challenge not matching presentation') + } + const presentation = presentationFromPayload(result.payload) + validateStructure(presentation) + assertHolderCanPresentCredentials(presentation) + return { + presentation, + ...result, + } +} diff --git a/packages/vc-export/src/common.ts b/packages/vc-export/src/common.ts new file mode 100644 index 000000000..5d8751a32 --- /dev/null +++ b/packages/vc-export/src/common.ts @@ -0,0 +1,149 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { base58Decode, base58Encode } from '@polkadot/util-crypto' +import type { ApiPromise } from '@polkadot/api' + +import { Caip19, Caip2 } from './CAIP/index.js' + +import { + KILT_ATTESTER_DELEGATION_V1_TYPE, + KILT_CREDENTIAL_IRI_PREFIX, +} from './constants.js' +import { CredentialMalformedError } from './errors.js' +import type { KiltAttesterDelegationV1, KiltCredentialV1 } from './types.js' + +export type ExpandedContents = + { + [Key in keyof T as `${T['@context']['@vocab']}`]: T[Key] + } & { '@id': T['id'] } + +/** + * Transforms credentialSubject to an expanded JSON-LD representation. + * + * @param credentialSubject The object containing claims about the credentialSubject. + * @returns The `credentialSubject` where each key is either `@id` or the result of concatenating the `@vocab` with the original key. + * @private + */ +export function jsonLdExpandCredentialSubject< + T extends KiltCredentialV1['credentialSubject'] +>(credentialSubject: T): ExpandedContents { + const expandedContents = {} + const vocabulary = credentialSubject['@context']['@vocab'] + Object.entries(credentialSubject).forEach(([key, value]) => { + if (key === '@context') return + if (key === 'id' || key === 'type') { + expandedContents[`@${key}`] = value + } else if (key.startsWith(vocabulary) || key.startsWith('@')) { + expandedContents[key] = value + } else { + expandedContents[vocabulary + key] = value + } + }) + return expandedContents as ExpandedContents +} + +const delegationIdPattern = + /^kilt:delegation\/(?[-a-zA-Z0-9]{1,78})$/ + +/** + * Extract the local (i.e., unique within a KILT blockchain network) delegation node identifier from a [[KiltAttesterDelegationV1]] object. + * + * @param delegation A [[KiltAttesterDelegationV1]] object. + * @returns A delegation id. + * @private + */ +export function delegationIdFromAttesterDelegation( + delegation: KiltAttesterDelegationV1 +): Uint8Array { + if (delegation.type !== KILT_ATTESTER_DELEGATION_V1_TYPE) { + throw new TypeError( + `The value of type must be ${KILT_ATTESTER_DELEGATION_V1_TYPE}` + ) + } + const match = delegationIdPattern.exec(delegation.id) + if (!match || !match.groups?.delegationId) + throw new CredentialMalformedError( + `Not a valid id for type ${KILT_ATTESTER_DELEGATION_V1_TYPE}: ${delegation.id}` + ) + return base58Decode(match.groups.delegationId) +} + +/** + * Extract the local (i.e., unique within a KILT blockchain network) delegation node identifier from a credential's federatedTrustModel entries. + * + * @param credential A [[KiltCredentialV1]] type VerifiableCredential. + * @returns A delegation id or `null` if there is no [[KiltAttesterDelegationV1]] type entry in the federatedTrustModel. + * @private + */ +export function getDelegationNodeIdForCredential( + credential: Pick +): Uint8Array | null { + const delegation = credential.federatedTrustModel?.find( + (i): i is KiltAttesterDelegationV1 => + i.type === KILT_ATTESTER_DELEGATION_V1_TYPE + ) + return delegation ? delegationIdFromAttesterDelegation(delegation) : null +} + +/** + * Makes sure that we are connected to the right blockchain network, against which the credential may be verified. + * Throws if that is not the case. + * + * @param api The api instance wrapping a connection to a blockchain network against which the credential is to be verified. + * @param credential The verifiable credential to be verified. + * @param credential.credentialStatus The credential's status update method containing the identifier of the expected network. + * @returns The result of parsing the CAIP-19 identifier pointing to the attestation record by which the credential has been anchored to a blockchain network. + * @private + */ +export function assertMatchingConnection( + api: ApiPromise, + { credentialStatus }: Pick +): ReturnType { + const apiChainId = Caip2.chainIdFromGenesis(api.genesisHash) + const parsed = Caip19.parse(credentialStatus.id) + if (apiChainId !== parsed.chainId) { + throw new Error( + `api must be connected to network ${parsed.chainId} to verify this credential` + ) + } + return parsed +} + +/** + * Extracts the credential root hash from a KILT VC's id. + * + * @param credentialId The IRI that serves as the credential id on KILT VCs. + * @returns The credential root hash as a Uint8Array. + */ +export function credentialIdToRootHash( + credentialId: KiltCredentialV1['id'] +): Uint8Array { + const base58String = credentialId.startsWith(KILT_CREDENTIAL_IRI_PREFIX) + ? credentialId.substring(KILT_CREDENTIAL_IRI_PREFIX.length) + : credentialId + try { + return base58Decode(base58String, false) + } catch (cause) { + throw new CredentialMalformedError( + 'Credential id is not a valid identifier (could not extract base58 encoded string)', + { cause } + ) + } +} + +/** + * Transforms the credential root hash to an IRI that functions as the VC's id. + * + * @param rootHash Credential root hash as a Uint8Array. + * @returns An IRI composed by prefixing the root hash with the [[KILT_CREDENTIAL_IRI_PREFIX]]. + */ +export function credentialIdFromRootHash( + rootHash: Uint8Array +): KiltCredentialV1['id'] { + return `${KILT_CREDENTIAL_IRI_PREFIX}${base58Encode(rootHash, false)}` +} diff --git a/packages/vc-export/src/constants.ts b/packages/vc-export/src/constants.ts index 0cb7ce718..6285c9c8b 100644 --- a/packages/vc-export/src/constants.ts +++ b/packages/vc-export/src/constants.ts @@ -5,29 +5,58 @@ * found in the LICENSE file in the root directory of this source tree. */ +import { hexToU8a } from '@polkadot/util' + /** - * Constant for default context. + * Credential context URL required by VC specifications. */ -export const DEFAULT_VERIFIABLECREDENTIAL_CONTEXT = +export const W3C_CREDENTIAL_CONTEXT_URL = 'https://www.w3.org/2018/credentials/v1' - +/** + * Credential context URL required for Kilt credentials. + */ export const KILT_CREDENTIAL_CONTEXT_URL = 'https://www.kilt.io/contexts/credentials' /** - * Constant for default type. + * Ordered set of credential contexts required on every Kilt VC. + */ +export const DEFAULT_CREDENTIAL_CONTEXTS: [ + typeof W3C_CREDENTIAL_CONTEXT_URL, + typeof KILT_CREDENTIAL_CONTEXT_URL +] = [W3C_CREDENTIAL_CONTEXT_URL, KILT_CREDENTIAL_CONTEXT_URL] +/** + * Credential type required by VC specifications. + */ +export const W3C_CREDENTIAL_TYPE = 'VerifiableCredential' +/** + * Credential type required for Kilt credentials. + */ +export const KILT_CREDENTIAL_TYPE = 'KiltCredentialV1' +/** + * Set of credential types required on every Kilt VC. */ -export const DEFAULT_VERIFIABLECREDENTIAL_TYPE = 'VerifiableCredential' +export const DEFAULT_CREDENTIAL_TYPES: Array< + typeof W3C_CREDENTIAL_TYPE | typeof KILT_CREDENTIAL_TYPE +> = [W3C_CREDENTIAL_TYPE, KILT_CREDENTIAL_TYPE] /** * Constant for default presentation type. */ -export const DEFAULT_VERIFIABLEPRESENTATION_TYPE = 'VerifiablePresentation' +export const W3C_PRESENTATION_TYPE = 'VerifiablePresentation' +/** + * Type for backwards-compatible Kilt proof suite. + */ +export const ATTESTATION_PROOF_V1_TYPE = 'KiltAttestationProofV1' + +export const KILT_REVOCATION_STATUS_V1_TYPE = 'KiltRevocationStatusV1' -export const KILT_VERIFIABLECREDENTIAL_TYPE = 'KiltCredential2020' +export const KILT_ATTESTER_LEGITIMATION_V1_TYPE = 'KiltAttesterLegitimationV1' -export const KILT_SELF_SIGNED_PROOF_TYPE = 'KILTSelfSigned2020' -export const KILT_ATTESTED_PROOF_TYPE = 'KILTAttestation2020' -export const KILT_CREDENTIAL_DIGEST_PROOF_TYPE = 'KILTCredentialDigest2020' +export const KILT_ATTESTER_DELEGATION_V1_TYPE = 'KiltAttesterDelegationV1' export const JSON_SCHEMA_TYPE = 'JsonSchemaValidator2018' -export const KILT_CREDENTIAL_IRI_PREFIX = 'kilt:cred:' +export const KILT_CREDENTIAL_IRI_PREFIX = 'kilt:credential:' + +export const spiritnetGenesisHash = hexToU8a( + '0x411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21' +) diff --git a/packages/vc-export/src/errors.ts b/packages/vc-export/src/errors.ts new file mode 100644 index 000000000..2a799eba8 --- /dev/null +++ b/packages/vc-export/src/errors.ts @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable max-classes-per-file */ + +import { SDKErrors } from '@kiltprotocol/utils' + +export class CredentialMalformedError extends SDKErrors.SDKError {} + +export class PresentationMalformedError extends SDKErrors.SDKError {} + +export class ProofMalformedError extends SDKErrors.SDKError {} diff --git a/packages/vc-export/src/exportToVerifiableCredential.spec.ts b/packages/vc-export/src/exportToVerifiableCredential.spec.ts index ba815b371..193bc661f 100644 --- a/packages/vc-export/src/exportToVerifiableCredential.spec.ts +++ b/packages/vc-export/src/exportToVerifiableCredential.spec.ts @@ -9,38 +9,43 @@ * @group unit/vc-export */ -import { - DidUri, - IAttestation, - ICType, - ICredential, - ICredentialPresentation, -} from '@kiltprotocol/types' -import { Attestation } from '@kiltprotocol/core' -import * as Did from '@kiltprotocol/did' -import { Crypto } from '@kiltprotocol/utils' +import { randomAsU8a } from '@polkadot/util-crypto' +import { hexToU8a, u8aConcat, u8aToU8a } from '@polkadot/util' + +import { Credential } from '@kiltprotocol/core' import { ApiMocks } from '@kiltprotocol/testing' -import type { DocumentLoader } from 'jsonld-signatures' -import { base58Encode } from '@polkadot/util-crypto' -import * as toVC from './exportToVerifiableCredential' -import * as verificationUtils from './verificationUtils' -import * as presentationUtils from './presentationUtils' -import type { IPublicKeyRecord, VerifiableCredential } from './types' +import type { IAttestation, ICType, ICredential } from '@kiltprotocol/types' + +import { validateStructure as validateCredentialStructure } from './KiltCredentialV1' +import { exportICredentialToVc } from './fromICredential' import { - DEFAULT_VERIFIABLECREDENTIAL_CONTEXT, - DEFAULT_VERIFIABLECREDENTIAL_TYPE, - KILT_CREDENTIAL_CONTEXT_URL, - KILT_VERIFIABLECREDENTIAL_TYPE, + DEFAULT_CREDENTIAL_CONTEXTS, + DEFAULT_CREDENTIAL_TYPES, } from './constants' +import { credentialIdFromRootHash } from './common' + +export const mockedApi = ApiMocks.createAugmentedApi() + +const attestationCreatedIndex = u8aToU8a([ + 62, + mockedApi.events.attestation.AttestationCreated.meta.index.toNumber(), +]) +export function makeAttestationCreatedEvents(events: unknown[][]) { + return mockedApi.createType( + 'Vec', + events.map((eventData) => ({ + event: u8aConcat( + attestationCreatedIndex, + new (mockedApi.registry.findMetaEvent(attestationCreatedIndex))( + mockedApi.registry, + eventData + ).toU8a() + ), + })) + ) +} -jest.mock('@kiltprotocol/core', () => ({ - ...jest.requireActual('@kiltprotocol/core'), - Attestation: { fromChain: jest.fn() }, -})) - -const mockedApi: any = ApiMocks.getMockedApi() - -const ctype: ICType = { +export const cType: ICType = { $schema: 'http://kilt-protocol.org/draft-01/ctype#', title: 'membership', properties: { @@ -59,7 +64,7 @@ const ctype: ICType = { $id: 'kilt:ctype:0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf', } -const credential: ICredentialPresentation = { +export const credential: ICredential = { claim: { contents: { birthday: '1991-01-01', @@ -87,86 +92,103 @@ const credential: ICredentialPresentation = { 'adc7dc71-ab0a-45f9-a091-9f3ec1bb96c7', }, legitimations: [], - delegationId: null, - rootHash: - '0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad', - claimerSignature: { - signature: - '0x00c374b5314d7192224bd620047f740c029af118eb5645a4662f76a2e3d70a877290f9a96cb9ee9ccc6c6bce24a0cf132a07edb603d0d0632f84210d528d2a7701', - keyUri: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#key1', - }, + delegationId: + '0xb102f462e4cde1b48e7936085cef1e2ab6ae4f7ca46cd3fab06074c00546a33d', + rootHash: '0x', } +credential.rootHash = Credential.calculateRootHash(credential) -const attestation: IAttestation = { - claimHash: - '0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad', - cTypeHash: - '0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf', - delegationId: null, +export const attestation: IAttestation = { + claimHash: credential.rootHash, + cTypeHash: credential.claim.cTypeHash, + delegationId: credential.delegationId, owner: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', revoked: false, } -const encodedAttestation = ApiMocks.mockChainQueryReturn( - 'attestation', - 'attestations', - [ - '0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad', - '4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', - undefined, - false, - ['4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', 0], - ] -) +export const timestamp = 1234567 +export const blockHash = randomAsU8a(32) +export const genesisHash = randomAsU8a(32) +jest.spyOn(mockedApi, 'at').mockImplementation(() => Promise.resolve(mockedApi)) +jest + .spyOn(mockedApi, 'queryMulti') + .mockImplementation((calls) => + Promise.all( + calls.map((call) => (Array.isArray(call) ? call[0](call[1]) : call())) + ) + ) +jest + .spyOn(mockedApi, 'genesisHash', 'get') + .mockImplementation(() => genesisHash as any) +mockedApi.query.attestation = { + attestations: jest.fn().mockResolvedValue( + mockedApi.createType('Option', { + ctypeHash: attestation.cTypeHash, + attester: '4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + revoked: false, + authorizationId: { Delegation: attestation.delegationId }, + }) + ), +} as any +mockedApi.query.timestamp = { + now: jest.fn().mockResolvedValue(mockedApi.createType('u64', timestamp)), +} as any + +mockedApi.query.system = { + events: jest + .fn() + .mockResolvedValue( + makeAttestationCreatedEvents([ + [ + '4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + attestation.claimHash, + attestation.cTypeHash, + { Delegation: attestation.delegationId }, + ], + ]) + ), +} as any it('exports credential to VC', () => { - expect( - toVC.fromCredentialAndAttestation(credential, attestation) - ).toMatchObject({ - '@context': [ - DEFAULT_VERIFIABLECREDENTIAL_CONTEXT, - KILT_CREDENTIAL_CONTEXT_URL, - ], - type: [DEFAULT_VERIFIABLECREDENTIAL_TYPE, KILT_VERIFIABLECREDENTIAL_TYPE], + const exported = exportICredentialToVc(credential, { + issuer: attestation.owner, + chainGenesisHash: mockedApi.genesisHash, + blockHash, + timestamp, + cType, + }) + expect(exported).toMatchObject({ + '@context': DEFAULT_CREDENTIAL_CONTEXTS, + type: DEFAULT_CREDENTIAL_TYPES, credentialSubject: { - '@id': 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', + id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', birthday: '1991-01-01', name: 'Kurt', premium: true, }, - id: 'kilt:cred:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad', + id: credentialIdFromRootHash(hexToU8a(credential.rootHash)), issuanceDate: expect.any(String), issuer: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', - legitimationIds: [], nonTransferable: true, }) -}) - -it('exports includes ctype as schema', () => { - expect( - toVC.fromCredentialAndAttestation(credential, attestation, ctype) - ).toMatchObject({ - credentialSchema: { - '@id': ctype.$id, - name: ctype.title, - '@type': 'JsonSchemaValidator2018', - schema: ctype, - }, - }) + expect(() => validateCredentialStructure(exported)).not.toThrow() }) it('VC has correct format (full example)', () => { expect( - toVC.fromCredentialAndAttestation(credential, attestation, ctype) + exportICredentialToVc(credential, { + issuer: attestation.owner, + chainGenesisHash: mockedApi.genesisHash, + blockHash, + timestamp, + cType, + }) ).toMatchObject({ - '@context': [ - DEFAULT_VERIFIABLECREDENTIAL_CONTEXT, - KILT_CREDENTIAL_CONTEXT_URL, - ], - type: [DEFAULT_VERIFIABLECREDENTIAL_TYPE, KILT_VERIFIABLECREDENTIAL_TYPE], + '@context': DEFAULT_CREDENTIAL_CONTEXTS, + type: DEFAULT_CREDENTIAL_TYPES, credentialSchema: { - '@id': expect.any(String), - '@type': 'JsonSchemaValidator2018', + id: expect.any(String), + type: 'JsonSchemaValidator2018', name: 'membership', schema: { $id: expect.any(String), @@ -191,297 +213,20 @@ it('VC has correct format (full example)', () => { '@context': { '@vocab': expect.any(String), }, - '@id': expect.any(String), + id: expect.any(String), birthday: '1991-01-01', name: 'Kurt', premium: true, }, - delegationId: undefined, id: expect.any(String), issuanceDate: expect.any(String), issuer: expect.any(String), - legitimationIds: [], nonTransferable: true, - proof: [ - { - signature: expect.any(String), - type: 'KILTSelfSigned2020', - verificationMethod: expect.any(String), - }, - { - attester: expect.any(String), - type: 'KILTAttestation2020', - }, - { - claimHashes: expect.any(Array), - nonces: expect.any(Object), - type: 'KILTCredentialDigest2020', - }, - ], - }) -}) - -describe('proofs', () => { - let VC: VerifiableCredential - let documentLoader: DocumentLoader - beforeAll(() => { - VC = toVC.fromCredentialAndAttestation(credential, attestation) - const keyId = VC.proof[0].verificationMethod - const verificationMethod: IPublicKeyRecord = { - id: keyId, - type: 'Ed25519VerificationKey2018', - publicKeyBase58: base58Encode( - Crypto.decodeAddress(Did.parse(keyId).address) - ), - controller: VC.credentialSubject['@id'] as DidUri, - } - documentLoader = (url) => { - if (url === keyId) { - return Promise.resolve({ - documentUrl: url, - document: verificationMethod, - }) - } - return Promise.reject(Error('not found')) - } - }) - - it('it verifies self-signed proof', async () => { - // verify - expect( - await verificationUtils.verifySelfSignedProof( - VC, - VC.proof[0], - documentLoader - ) - ).toMatchObject({ - verified: true, - }) - }) - - it('it verifies schema', () => { - const VCWithSchema = toVC.fromCredentialAndAttestation( - credential, - attestation, - ctype - ) - const result = verificationUtils.validateSchema(VCWithSchema) - expect(result.errors).toEqual([]) - expect(result).toMatchObject({ - verified: true, - }) - }) - - it('it verifies credential with all properties revealed', async () => { - expect(VC.proof[2].nonces).toMatchObject(credential.claimNonceMap) - expect(Object.entries(VC.proof[2].nonces)).toHaveLength(4) - const result = await verificationUtils.verifyCredentialDigestProof( - VC, - VC.proof[2] - ) - expect(result.errors).toEqual([]) - expect(result).toMatchObject({ - verified: true, - }) - }) - - it('it verifies credential with selected properties revealed', async () => { - const reducedCredential: ICredential = JSON.parse( - JSON.stringify(credential) - ) - delete reducedCredential.claim.contents.name - delete reducedCredential.claim.contents.birthday - const reducedVC = toVC.fromCredentialAndAttestation( - reducedCredential, - attestation - ) - - const result = await verificationUtils.verifyCredentialDigestProof( - reducedVC, - reducedVC.proof[2] - ) - expect(result.errors).toEqual([]) - expect(result).toMatchObject({ - verified: true, - }) - }) - - it('makes presentation', async () => { - const presentation = await presentationUtils.makePresentation(VC, ['name']) - const { contents, owner } = credential.claim - expect(presentation).toHaveProperty( - 'verifiableCredential.credentialSubject', - { - '@context': expect.any(Object), - '@id': owner, - name: contents.name, - } - ) - const VCfromPresentation = - presentation.verifiableCredential as VerifiableCredential - const result = await verificationUtils.verifyCredentialDigestProof( - VCfromPresentation, - VCfromPresentation.proof[2] - ) - expect(result.errors).toEqual([]) - expect(result).toStrictEqual({ verified: true, errors: [] }) - expect(Object.entries(VCfromPresentation.proof[2].nonces)).toHaveLength(2) - }) - - it('verifies attestation proof on chain', async () => { - mockedApi.query.attestation.attestations.mockResolvedValueOnce( - encodedAttestation - ) - jest.mocked(Attestation.fromChain).mockReturnValue(attestation) - - const result = await verificationUtils.verifyAttestedProof( - VC, - VC.proof[1], - mockedApi - ) - expect(result.errors).toEqual([]) - expect(result).toMatchObject({ - verified: true, - status: 'valid', - }) - }) - - describe('negative tests', () => { - beforeEach(() => { - VC = toVC.fromCredentialAndAttestation(credential, attestation, ctype) - }) - - it('errors on proof mismatch', async () => { - expect( - await verificationUtils.verifySelfSignedProof( - VC, - VC.proof[1], - documentLoader - ) - ).toMatchObject({ - verified: false, - }) - expect( - await verificationUtils.verifyCredentialDigestProof(VC, VC.proof[0]) - ).toMatchObject({ - verified: false, - }) - expect( - await verificationUtils.verifyAttestedProof(VC, VC.proof[2], mockedApi) - ).toMatchObject({ - verified: false, - }) - }) - - it('rejects selecting non-existent properties for presentation', async () => { - await expect( - presentationUtils.makePresentation(VC, ['name', 'age', 'profession']) - ).rejects.toThrow() - - const presentation = await presentationUtils.makePresentation(VC, [ - 'name', - ]) - - await expect( - presentationUtils.makePresentation( - presentation.verifiableCredential as VerifiableCredential, - ['premium'] - ) - ).rejects.toThrow() - }) - - it('it detects tampering with credential digest', async () => { - VC.id = `${VC.id.slice(0, 10)}1${VC.id.slice(11)}` - expect( - await verificationUtils.verifySelfSignedProof( - VC, - VC.proof[0], - documentLoader - ) - ).toMatchObject({ - verified: false, - }) - expect( - await verificationUtils.verifyCredentialDigestProof(VC, VC.proof[2]) - ).toMatchObject({ - verified: false, - }) - }) - - it('it detects tampering with credential fields', async () => { - VC.delegationId = '0x123' - expect( - await verificationUtils.verifyCredentialDigestProof(VC, VC.proof[2]) - ).toMatchObject({ - verified: false, - }) - expect( - await verificationUtils.verifyAttestedProof(VC, VC.proof[1], mockedApi) - ).toMatchObject({ - verified: false, - status: 'invalid', - }) - }) - - it('it detects tampering on claimed properties', async () => { - VC.credentialSubject.name = 'Kort' - expect( - await verificationUtils.verifyCredentialDigestProof(VC, VC.proof[2]) - ).toMatchObject({ - verified: false, - }) - }) - - it('it detects schema violations', () => { - VC.credentialSubject.name = 42 - const result = verificationUtils.validateSchema(VC) - expect(result).toMatchObject({ - verified: false, - }) - }) - - it('fails if attestation not on chain', async () => { - const result = await verificationUtils.verifyAttestedProof( - VC, - VC.proof[1], - mockedApi - ) - expect(result).toMatchObject({ - verified: false, - status: 'invalid', - }) - }) - - it('fails if attestation on chain not identical', async () => { - const result = await verificationUtils.verifyAttestedProof( - VC, - VC.proof[1], - mockedApi - ) - expect(result).toMatchObject({ - verified: false, - status: 'invalid', - }) - }) - - it('fails if attestation revoked', async () => { - mockedApi.query.attestation.attestations.mockResolvedValueOnce( - encodedAttestation - ) - jest.spyOn(Attestation, 'fromChain').mockReturnValue({ - ...attestation, - revoked: true, - }) - - const result = await verificationUtils.verifyAttestedProof( - VC, - VC.proof[1], - mockedApi - ) - expect(result).toMatchObject({ - verified: false, - status: 'revoked', - }) - }) + proof: { + type: 'KiltAttestationProofV1', + commitments: expect.any(Array), + salt: expect.any(Array), + block: expect.any(String), + }, }) }) diff --git a/packages/vc-export/src/exportToVerifiableCredential.ts b/packages/vc-export/src/exportToVerifiableCredential.ts deleted file mode 100644 index c30950d42..000000000 --- a/packages/vc-export/src/exportToVerifiableCredential.ts +++ /dev/null @@ -1,163 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import { isHex } from '@polkadot/util' -import type { AnyJson } from '@polkadot/types/types' -import { Claim, Credential } from '@kiltprotocol/core' -import type { - ICType, - IAttestation, - ICredentialPresentation, - ICredential, -} from '@kiltprotocol/types' -import type { HexString } from '@polkadot/util/types' -import { - DEFAULT_VERIFIABLECREDENTIAL_CONTEXT, - DEFAULT_VERIFIABLECREDENTIAL_TYPE, - JSON_SCHEMA_TYPE, - KILT_ATTESTED_PROOF_TYPE, - KILT_CREDENTIAL_DIGEST_PROOF_TYPE, - KILT_SELF_SIGNED_PROOF_TYPE, - KILT_CREDENTIAL_CONTEXT_URL, - KILT_VERIFIABLECREDENTIAL_TYPE, - KILT_CREDENTIAL_IRI_PREFIX, -} from './constants.js' -import type { - AttestedProof, - CredentialDigestProof, - CredentialSchema, - Proof, - SelfSignedProof, - VerifiableCredential, -} from './types.js' - -/** - * Extracts the credential root hash from a KILT VC's id. - * - * @param credentialId The IRI that serves as the credential id on KILT VCs. - * @returns The credential root hash as a hex string. - */ -export function fromCredentialIRI(credentialId: string): HexString { - const hexString = credentialId.startsWith(KILT_CREDENTIAL_IRI_PREFIX) - ? credentialId.substring(KILT_CREDENTIAL_IRI_PREFIX.length) - : credentialId - if (!isHex(hexString)) - throw new Error( - 'Credential id is not a valid identifier (could not extract base16 / hex encoded string)' - ) - return hexString -} - -/** - * Transforms the credential root hash to an IRI that functions as the VC's id. - * - * @param rootHash Credential root hash as a hex string. - * @returns An IRI composed by prefixing the root hash with the [[KILT_CREDENTIAL_IRI_PREFIX]]. - */ -export function toCredentialIRI(rootHash: string): string { - if (rootHash.startsWith(KILT_CREDENTIAL_IRI_PREFIX)) { - return rootHash - } - if (!isHex(rootHash)) - throw new Error('Root hash is not a base16 / hex encoded string)') - return KILT_CREDENTIAL_IRI_PREFIX + rootHash -} - -/** - * Transforms a regular KILT credential to its VC representation. - * - * @param input The credential to transform. - * @param attestation The attestation corresponding to the credential. - * @param ctype (optional) The full specification of the credential's CType. If specified, the CType will be included with the VC on its `credentialSchema` property. - * @returns The VC representation of the KILT credential and optionally its CType. - */ -export function fromCredentialAndAttestation( - input: ICredential | ICredentialPresentation, - attestation: IAttestation, - ctype?: ICType -): VerifiableCredential { - const { claimHashes, legitimations, delegationId, rootHash, claim } = input - - // write root hash to id - const id = toCredentialIRI(rootHash) - - // transform & annotate claim to be json-ld and VC conformant - const { credentialSubject } = Claim.toJsonLD(claim, false) as Record< - string, - Record - > - - const issuer = attestation.owner - - // add current date bc we have no issuance date on credential - // TODO: could we get this from block time or something? - const issuanceDate = new Date().toISOString() - - // if ctype is given, add as credential schema - let credentialSchema: CredentialSchema | undefined - if (ctype) { - credentialSchema = { - '@id': ctype.$id, - '@type': JSON_SCHEMA_TYPE, - name: ctype.title, - schema: ctype, - } - } - - const legitimationIds = legitimations.map((leg) => leg.rootHash) - - const proof: Proof[] = [] - - const VC: VerifiableCredential = { - '@context': [ - DEFAULT_VERIFIABLECREDENTIAL_CONTEXT, - KILT_CREDENTIAL_CONTEXT_URL, - ], - type: [DEFAULT_VERIFIABLECREDENTIAL_TYPE, KILT_VERIFIABLECREDENTIAL_TYPE], - id, - credentialSubject, - legitimationIds, - delegationId: delegationId || undefined, - issuer, - issuanceDate, - nonTransferable: true, - proof, - credentialSchema, - } - - // add self-signed proof - if (Credential.isPresentation(input)) { - const { claimerSignature } = input - const sSProof: SelfSignedProof = { - type: KILT_SELF_SIGNED_PROOF_TYPE, - proofPurpose: 'assertionMethod', - verificationMethod: claimerSignature.keyUri, - signature: claimerSignature.signature, - challenge: claimerSignature.challenge, - } - VC.proof.push(sSProof) - } - - // add attestation proof - const attProof: AttestedProof = { - type: KILT_ATTESTED_PROOF_TYPE, - proofPurpose: 'assertionMethod', - attester: attestation.owner, - } - VC.proof.push(attProof) - - // add hashed properties proof - const cDProof: CredentialDigestProof = { - type: KILT_CREDENTIAL_DIGEST_PROOF_TYPE, - proofPurpose: 'assertionMethod', - nonces: input.claimNonceMap, - claimHashes, - } - VC.proof.push(cDProof) - - return VC -} diff --git a/packages/vc-export/src/fromICredential.ts b/packages/vc-export/src/fromICredential.ts new file mode 100644 index 000000000..191c10c99 --- /dev/null +++ b/packages/vc-export/src/fromICredential.ts @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import type { ICredential } from '@kiltprotocol/types' + +import { fromICredential as vcFromCredential } from './KiltCredentialV1.js' +import { fromICredential as proofFromCredential } from './KiltAttestationProofV1.js' +import type { KiltCredentialV1 } from './types.js' + +type Params = Parameters[1] & + Parameters[1] + +/** + * Transforms an [[ICredential]] object to conform to the KiltCredentialV1 data model. + * + * @param input An [[ICredential]] object. + * @param opts Additional required and optional parameters for producing a VC from an [[ICredential]]. + * @param opts.issuer The issuer of the attestation to this credential (attester). + * @param opts.blockHash Hash of any block at which the credential is verifiable (i.e. Attested and not revoked). + * @param opts.timestamp Timestamp of the block referenced by blockHash in milliseconds since January 1, 1970, UTC (UNIX epoch). + * @param opts.chainGenesisHash Optional: Genesis hash of the chain against which this credential is verifiable. Defaults to the spiritnet genesis hash. + * @param opts.cType Optional: The CType object referenced by the [[ICredential]]. + * @returns A KiltCredentialV1 with embedded KiltAttestationProofV1 proof. + */ +export function exportICredentialToVc( + input: ICredential, + { blockHash, issuer, chainGenesisHash, timestamp, cType }: Params +): KiltCredentialV1 { + const proof = proofFromCredential(input, { blockHash }) + return { + ...vcFromCredential(input, { issuer, chainGenesisHash, timestamp, cType }), + proof, + } +} diff --git a/packages/vc-export/src/index.ts b/packages/vc-export/src/index.ts index 6200bf891..08ba83c3d 100644 --- a/packages/vc-export/src/index.ts +++ b/packages/vc-export/src/index.ts @@ -9,9 +9,14 @@ * @module @kiltprotocol/vc-export */ +export * from './fromICredential.js' +export * as KiltCredentialV1 from './KiltCredentialV1.js' +export * as KiltAttestationProofV1 from './KiltAttestationProofV1.js' +export * as KiltRevocationStatusV1 from './KiltRevocationStatusV1.js' +export * as CredentialSchema from './CredentialSchema.js' +export * as Presentation from './Presentation.js' +export * as DidJWT from './DidJwt.js' +export * as vcjs from './vc-js/index.js' export * from './types.js' export * as constants from './constants.js' -export * as verification from './verificationUtils.js' -export * as presentation from './presentationUtils.js' -export { fromCredentialAndAttestation } from './exportToVerifiableCredential.js' -export * as vcjsSuites from './vc-js/index.js' +export * from './errors.js' diff --git a/packages/vc-export/src/presentationUtils.ts b/packages/vc-export/src/presentationUtils.ts deleted file mode 100644 index 258f8e773..000000000 --- a/packages/vc-export/src/presentationUtils.ts +++ /dev/null @@ -1,133 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import { blake2AsHex } from '@polkadot/util-crypto' -import jsonld from 'jsonld' -import { Crypto } from '@kiltprotocol/utils' -import { - KILT_CREDENTIAL_DIGEST_PROOF_TYPE, - DEFAULT_VERIFIABLECREDENTIAL_CONTEXT, - DEFAULT_VERIFIABLEPRESENTATION_TYPE, -} from './constants.js' -import type { - VerifiableCredential, - VerifiablePresentation, - CredentialDigestProof, -} from './types.js' - -/** - * This proof is added to a credential to prove that revealed properties were attested in the original credential. - * For each property to be revealed, it contains an unsalted hash of the statement plus a nonce which is required to verify against the salted hash in the credential. - * Statements and nonces are mapped to each other through the unsalted hashes. - * - * @param credential [[VerifiableCredential]] object containing only the credentialSubject properties you want to reveal. - * @param proof The [[CredentialDigestProof]] to update. - * @param options Options. - * @param options.hasher The hashing function used to generate digests for nonce map. Should be the one used in creating the original credential. - * @returns Proof object that can be included in a Verifiable Credential / Verifiable Presentation's proof section. - */ -export async function updateCredentialDigestProof( - credential: VerifiableCredential, - proof: CredentialDigestProof, - options: { hasher?: Crypto.Hasher } = {} -): Promise { - const { - hasher = (value, nonce?) => blake2AsHex((nonce || '') + value, 256), - } = options - - // recreate statement digests from partial claim to identify required nonces - const claimNonces = {} - const expanded = await jsonld.compact(credential.credentialSubject, {}) - const statements = Object.entries(expanded).map(([key, value]) => - JSON.stringify({ [key]: value }) - ) - if (statements.length < 1) - throw new Error( - `No statements extracted from ${JSON.stringify( - credential.credentialSubject - )}` - ) - statements.forEach((stmt) => { - const digest = hasher(stmt) - if (Object.keys(proof.nonces).includes(digest)) { - claimNonces[digest] = proof.nonces[digest] - } else { - throw new Error(`Nonce missing for "${stmt}"`) - } - }) - - // return the proof containing nonces which can be mapped via an unsalted hash of the statement - return { ...proof, nonces: claimNonces } -} - -/** - * Returns a copy of a KILT Verifiable Credential where all claims about the credential subject that are not whitelisted have been removed. - * - * @param VC The KILT Verifiable Credential as exported with the SDK utils. - * @param whitelist An array of properties to keep on the credential. - * @returns A Verifiable Credential containing the original proofs, but with non-whitelisted claims removed. - */ -export async function removeProperties( - VC: VerifiableCredential, - whitelist: string[] -): Promise { - // get property names - const propertyNames = Object.keys(VC.credentialSubject) - // check whitelist - const unknownProps = whitelist.filter((prop) => !propertyNames.includes(prop)) - if (unknownProps.length > 0) { - throw new Error( - `Whitelisted properties "${unknownProps}" do not exist on this credential` - ) - } - // copy credential - const copied: VerifiableCredential = JSON.parse(JSON.stringify(VC)) - // remove non-revealed props - propertyNames.forEach((key) => { - if (!(key.startsWith('@') || whitelist.includes(key))) - delete copied.credentialSubject[key] - }) - // find old proof - let proofs = copied.proof instanceof Array ? copied.proof : [copied.proof] - const oldClaimsProof = proofs.filter( - (p): p is CredentialDigestProof => - p.type === KILT_CREDENTIAL_DIGEST_PROOF_TYPE - ) - if (oldClaimsProof.length !== 1) - throw new Error( - `Expected exactly one proof of type "${KILT_CREDENTIAL_DIGEST_PROOF_TYPE}"` - ) - proofs = proofs.filter((p) => p.type !== KILT_CREDENTIAL_DIGEST_PROOF_TYPE) - // compute new (reduced) proof - proofs.push(await updateCredentialDigestProof(copied, oldClaimsProof[0])) - copied.proof = proofs - return copied -} - -/** - * Creates a Verifiable Presentation from a KILT Verifiable Credential and allows removing properties while doing so. - * Does not currently sign the presentation or allow adding a challenge to be signed. - * - * @param VC The KILT Verifiable Credential as exported with the SDK utils. - * @param showProperties An optional array of properties to reveal. If omitted, show all properties. - * @returns A Verifiable Presentation containing the original VC with its proofs, but not extra signatures. - */ -export async function makePresentation( - VC: VerifiableCredential, - showProperties?: string[] -): Promise { - const copied: VerifiableCredential = showProperties - ? await removeProperties(VC, showProperties) - : JSON.parse(JSON.stringify(VC)) - return { - '@context': [DEFAULT_VERIFIABLECREDENTIAL_CONTEXT], - type: [DEFAULT_VERIFIABLEPRESENTATION_TYPE], - verifiableCredential: copied, - holder: copied.credentialSubject['@id'] as string, - proof: [], - } -} diff --git a/packages/vc-export/src/types.ts b/packages/vc-export/src/types.ts index de891b9e7..c6a1b4b46 100644 --- a/packages/vc-export/src/types.ts +++ b/packages/vc-export/src/types.ts @@ -5,82 +5,190 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { AnyJson } from '@polkadot/types/types' -import type { ICType, ConformingDidKey } from '@kiltprotocol/types' +/* eslint-disable no-use-before-define */ + +import type { + ICType, + ConformingDidKey, + DidUri, + Caip2ChainId, + IClaimContents, +} from '@kiltprotocol/types' + import type { - DEFAULT_VERIFIABLECREDENTIAL_CONTEXT, - DEFAULT_VERIFIABLECREDENTIAL_TYPE, - DEFAULT_VERIFIABLEPRESENTATION_TYPE, + ATTESTATION_PROOF_V1_TYPE, + DEFAULT_CREDENTIAL_CONTEXTS, + DEFAULT_CREDENTIAL_TYPES, JSON_SCHEMA_TYPE, - KILT_ATTESTED_PROOF_TYPE, - KILT_CREDENTIAL_DIGEST_PROOF_TYPE, - KILT_SELF_SIGNED_PROOF_TYPE, + KILT_ATTESTER_DELEGATION_V1_TYPE, + KILT_ATTESTER_LEGITIMATION_V1_TYPE, + KILT_CREDENTIAL_IRI_PREFIX, + KILT_REVOCATION_STATUS_V1_TYPE, + W3C_CREDENTIAL_CONTEXT_URL, + W3C_CREDENTIAL_TYPE, + W3C_PRESENTATION_TYPE, } from './constants.js' +export * from './vc-js/types.js' + +export type IPublicKeyRecord = ConformingDidKey + export interface Proof { type: string - created?: string - proofPurpose?: string - [key: string]: any } -export type IPublicKeyRecord = ConformingDidKey +export interface UnsignedVc { + /** + * References to json-ld contexts defining the terms used. + */ + '@context': [typeof W3C_CREDENTIAL_CONTEXT_URL, ...string[]] + /** + * Credential identifier. + */ + id?: string + /** + * The credential types, which declare what data to expect in the credential. + */ + type: typeof W3C_CREDENTIAL_TYPE | string[] + /** + * Claims about the subjects of the credential. + */ + credentialSubject: { id?: string } + /** + * The entity that issued the credential. + */ + issuer: string + /** + * When the credential was issued. + */ + issuanceDate: string + /** + * If true, this credential can only be presented and used by its subject. + */ + nonTransferable?: boolean + /** + * Contains json schema for the validation of credentialSubject claims. + */ + credentialSchema?: { + id?: string + type: string + } + /** + * Contains credentials status method. + */ + credentialStatus?: { + id: string + type: string + } +} -export interface SelfSignedProof extends Proof { - type: typeof KILT_SELF_SIGNED_PROOF_TYPE - verificationMethod: IPublicKeyRecord['id'] | IPublicKeyRecord - signature: string - challenge?: string +export interface VerifiableCredential extends UnsignedVc { + /** + * Cryptographic proof that makes the credential tamper-evident. + */ + proof: Proof | Proof[] } -export interface AttestedProof extends Proof { - type: typeof KILT_ATTESTED_PROOF_TYPE - attester: string + +export interface VerifiablePresentation { + id?: string + '@context': [typeof W3C_CREDENTIAL_CONTEXT_URL, ...string[]] + type: [typeof W3C_PRESENTATION_TYPE, ...string[]] + verifiableCredential: VerifiableCredential | VerifiableCredential[] + holder: DidUri + proof?: Proof | Proof[] + expirationDate?: string + issuanceDate?: string + verifier?: string } -export interface CredentialDigestProof extends Proof { - type: typeof KILT_CREDENTIAL_DIGEST_PROOF_TYPE - // map of unsalted property digests and nonces - nonces: Record - // salted hashes of statements in credentialSubject to allow selective disclosure. - claimHashes: string[] + +export interface KiltAttestationProofV1 extends Proof { + type: typeof ATTESTATION_PROOF_V1_TYPE + block: string + commitments: string[] + salt: string[] } -export interface CredentialSchema { - '@id': string - '@type': typeof JSON_SCHEMA_TYPE - schema: ICType +export interface JsonSchemaValidator2018 { + id: string + type: typeof JSON_SCHEMA_TYPE + schema?: ICType modelVersion?: string name?: string author?: string authored?: string - proof?: Proof + // proof?: Proof } -export interface VerifiableCredential { - '@context': [typeof DEFAULT_VERIFIABLECREDENTIAL_CONTEXT, ...string[]] - // the credential types, which declare what data to expect in the credential - type: [typeof DEFAULT_VERIFIABLECREDENTIAL_TYPE, ...string[]] +export interface KiltRevocationStatusV1 { + id: Caip2ChainId + type: typeof KILT_REVOCATION_STATUS_V1_TYPE +} + +interface IssuerBacking { id: string - // claims about the subjects of the credential - credentialSubject: Record - // the entity that issued the credential - issuer: string - // when the credential was issued - issuanceDate: string - // IDs / digests of claims that empower the issuer to provide judgment - legitimationIds: string[] - // ID / digest that represents a delegation of authority to the issuer - delegationId?: string - // digital proof that makes the credential tamper-evident - proof: Proof | Proof[] - nonTransferable?: boolean - credentialSchema?: CredentialSchema - expirationDate?: string + type: string } -export interface VerifiablePresentation { - '@context': [typeof DEFAULT_VERIFIABLECREDENTIAL_CONTEXT, ...string[]] - type: [typeof DEFAULT_VERIFIABLEPRESENTATION_TYPE, ...string[]] - verifiableCredential: VerifiableCredential | VerifiableCredential[] - holder?: string - proof: Proof | Proof[] +export interface KiltAttesterLegitimationV1 extends IssuerBacking { + id: KiltCredentialV1['id'] + type: typeof KILT_ATTESTER_LEGITIMATION_V1_TYPE + verifiableCredential?: KiltCredentialV1 +} + +export interface KiltAttesterDelegationV1 extends IssuerBacking { + id: `kilt:delegation/${string}` + type: typeof KILT_ATTESTER_DELEGATION_V1_TYPE + delegators?: DidUri[] +} + +export interface CredentialSubject extends IClaimContents { + '@context': { + '@vocab': string + } + id: DidUri +} + +export interface KiltCredentialV1 extends VerifiableCredential { + /** + * References to json-ld contexts defining the terms used. + */ + '@context': typeof DEFAULT_CREDENTIAL_CONTEXTS + /** + * Credential identifier. + */ + id: `${typeof KILT_CREDENTIAL_IRI_PREFIX}${string}` + /** + * The credential types, which declare what data to expect in the credential. + */ + type: typeof DEFAULT_CREDENTIAL_TYPES + /** + * Claims about the subjects of the credential. + */ + credentialSubject: CredentialSubject + /** + * The entity that issued the credential. + */ + issuer: DidUri + /** + * If true, this credential can only be presented and used by its subject. + */ + nonTransferable: true + /** + * Contains json schema for the validation of credentialSubject claims. + */ + credentialSchema: JsonSchemaValidator2018 + /** + * Contains credentials status method. + */ + credentialStatus: KiltRevocationStatusV1 + /** + * Contains information that can help to corroborate trust in the issuer. + */ + federatedTrustModel?: Array< + KiltAttesterDelegationV1 | KiltAttesterLegitimationV1 + > + /** + * Cryptographic proof that makes the credential tamper-evident. + */ + proof: KiltAttestationProofV1 } diff --git a/packages/vc-export/src/vc-js/context/context.ts b/packages/vc-export/src/vc-js/context/context.ts index ff8d656a1..a142113d2 100644 --- a/packages/vc-export/src/vc-js/context/context.ts +++ b/packages/vc-export/src/vc-js/context/context.ts @@ -5,76 +5,146 @@ * found in the LICENSE file in the root directory of this source tree. */ +import { KILT_CREDENTIAL_CONTEXT_URL } from '../../constants.js' + export const context = { '@context': { '@version': 1.1, '@protected': true, + + kilt: `${KILT_CREDENTIAL_CONTEXT_URL}#`, cred: 'https://www.w3.org/2018/credentials#', - kiltCred: 'https://www.kilt.io/contexts/credentials#', sec: 'https://w3id.org/security#', xsd: 'http://www.w3.org/2001/XMLSchema#', - verificationMethod: { - '@id': 'sec:verificationMethod', - '@type': '@id', - }, - publicKeyHex: { - '@id': 'sec:publicKeyHex', - }, - proofPurpose: { - '@id': 'sec:proofPurpose', - '@type': '@vocab', - '@context': { - '@vocab': 'sec', - }, - }, - KiltCredential2020: { - '@id': 'kiltCred:KiltCredential', + KiltCredentialV1: { + '@id': 'kilt:KiltCredentialV1', '@context': { '@version': 1.1, '@protected': true, - delegationId: { - '@id': 'kiltCred:delegationId', - }, - legitimationIds: { - '@id': 'kiltCred:legitimationIds', - '@type': '@id', - '@container': '@set', - }, nonTransferable: { '@id': 'cred:nonTransferable', '@type': 'xsd:boolean', }, }, }, - KILTSelfSigned2020: { - '@id': 'kiltCred:KILTSelfSigned2020', + KiltAttestationProofV1: { + '@id': 'kilt:KiltAttestationProofV1', '@context': { '@version': 1.1, '@protected': true, - signature: 'sec:proofValue', + + id: '@id', + type: '@type', + + block: { '@id': 'kilt:blockHash' }, + commitments: { '@id': 'kilt:commitments', '@container': '@set' }, + salt: { '@id': 'kilt:salt', '@container': '@list' }, }, }, - Ed25519VerificationKey2018: 'sec:Ed25519VerificationKey2018', - KILTAttestation2020: { - '@id': 'kiltCred:KILTAttestation2020', + KiltRevocationStatusV1: { + '@id': 'kilt:KiltRevocationStatusV1', '@context': { '@version': 1.1, '@protected': true, - attester: 'cred:issuer', + + id: '@id', + type: '@type', }, }, - KILTCredentialDigest2020: { - '@id': 'kiltCred:KILTCredentialDigest2020', + federatedTrustModel: { + '@id': 'kilt:federatedTrustModel', + '@type': '@id', + '@container': '@set', + }, + KiltAttesterLegitimationV1: { + '@id': 'kilt:KiltAttesterLegitimationV1', '@context': { '@version': 1.1, '@protected': true, - claimHashes: { - '@id': 'kiltCred:KILTCredentialDigest2020#claimHashes', - '@container': '@set', + + id: '@id', + type: '@type', + + verifiableCredential: { + '@id': 'cred:verifiableCredential', + '@type': '@id', + '@container': '@graph', }, - nonces: { - '@id': 'kiltCred:KILTCredentialDigest2020#nonces', - '@container': '@index', + }, + }, + KiltAttesterDelegationV1: { + '@id': 'kilt:KiltAttesterDelegationV1', + '@context': { + '@version': 1.1, + '@protected': true, + + id: '@id', + type: '@type', + + delegators: { + '@id': 'kilt:delegators', + '@type': '@id', + '@container': '@list', + }, + }, + }, + Sr25519Signature2020: { + '@id': 'kilt:Sr25519Signature2020', + '@context': { + '@protected': true, + id: '@id', + type: '@type', + challenge: 'https://w3id.org/security#challenge', + created: { + '@id': 'http://purl.org/dc/terms/created', + '@type': 'http://www.w3.org/2001/XMLSchema#dateTime', + }, + domain: 'https://w3id.org/security#domain', + expires: { + '@id': 'https://w3id.org/security#expiration', + '@type': 'http://www.w3.org/2001/XMLSchema#dateTime', + }, + nonce: 'https://w3id.org/security#nonce', + proofPurpose: { + '@id': 'https://w3id.org/security#proofPurpose', + '@type': '@vocab', + '@context': { + '@protected': true, + id: '@id', + type: '@type', + assertionMethod: { + '@id': 'https://w3id.org/security#assertionMethod', + '@type': '@id', + '@container': '@set', + }, + authentication: { + '@id': 'https://w3id.org/security#authenticationMethod', + '@type': '@id', + '@container': '@set', + }, + capabilityInvocation: { + '@id': 'https://w3id.org/security#capabilityInvocationMethod', + '@type': '@id', + '@container': '@set', + }, + capabilityDelegation: { + '@id': 'https://w3id.org/security#capabilityDelegationMethod', + '@type': '@id', + '@container': '@set', + }, + keyAgreement: { + '@id': 'https://w3id.org/security#keyAgreementMethod', + '@type': '@id', + '@container': '@set', + }, + }, + }, + jws: { + '@id': 'https://w3id.org/security#jws', + }, + verificationMethod: { + '@id': 'https://w3id.org/security#verificationMethod', + '@type': '@id', }, }, }, diff --git a/packages/vc-export/src/vc-js/documentLoader.ts b/packages/vc-export/src/vc-js/documentLoader.ts index d2f31458e..d14cf68a6 100644 --- a/packages/vc-export/src/vc-js/documentLoader.ts +++ b/packages/vc-export/src/vc-js/documentLoader.ts @@ -5,20 +5,137 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { RemoteDocument, Url } from 'jsonld/jsonld-spec' -import vcjs from 'vc-js' +// @ts-expect-error not a typescript module +import jsonld from 'jsonld' // cjs module + +import { + DID_CONTEXTS, + KILT_DID_CONTEXT_URL, + parse, + resolveCompliant, + W3C_DID_CONTEXT_URL, +} from '@kiltprotocol/did' +import type { + ConformingDidDocument, + ConformingDidKey, + DidUri, +} from '@kiltprotocol/types' + import { validationContexts } from './context/index.js' +import { Sr25519VerificationKey2020 } from './suites/Sr25519VerificationKey.js' + +export type JsonLdObj = Record +export interface RemoteDocument { + contextUrl?: string + documentUrl: string + document: JsonLdObj +} +export type DocumentLoader = (url: string) => Promise /** - * Document loader that provides access to the JSON-LD contexts required for verifying Kilt VCs. - * Essentially wraps the vc-js defaultDocumentLoader, but additionally loads KILTs [[validationContexts]]. + * Combines multiple document loaders into one. + * The resulting loader resolves if any loader returns a result, and rejects otherwise. * - * @param url Document/context URL to resolve. - * @returns An object containing the resolution result. + * @param loaders An array of document loaders to be combined. + * @returns A composite document loader wrapping the input loaders. */ -export async function documentLoader(url: Url): Promise { - const context = validationContexts[url] +export function combineDocumentLoaders( + loaders: DocumentLoader[] +): DocumentLoader { + const wrappedLoaders = loaders.map((i) => async (url: string) => { + const response = await i(url) + if (typeof response.document !== 'object') { + throw new Error('no document in response') + } + return response + }) + return async (url: string) => { + // essentially re-implements Promise.any, which does not exist in node 14 + return new Promise((resolve, reject) => { + Promise.allSettled(wrappedLoaders.map((i) => i(url).then(resolve))).then( + (results) => { + const errors = results + .filter((i) => i.status === 'rejected') + .map((i) => (i as PromiseRejectedResult).reason) + reject( + new Error( + `${url} could not be resolved by any of the available document loaders`, + { cause: errors } + ) + ) + } + ) + }) + } +} + +export const kiltContextsLoader: DocumentLoader = async (url) => { + const context = validationContexts[url] ?? DID_CONTEXTS[url] if (context !== undefined) return { contextUrl: undefined, documentUrl: url, document: context } - return vcjs.defaultDocumentLoader(url) + throw new Error(`not a known Kilt context: ${url}`) } + +export const kiltDidLoader: DocumentLoader = async (url) => { + const { did } = parse(url as DidUri) + const { didDocument, didResolutionMetadata } = await resolveCompliant(did) + if (didResolutionMetadata.error) { + throw new Error( + `${didResolutionMetadata.error}:${didResolutionMetadata.errorMessage}` + ) + } + // Framing can help us resolve to the requested resource (did or did uri). This way we return either a key or the full DID document, depending on what was requested. + const document = (await jsonld.frame( + didDocument ?? {}, + { + // add did contexts to make sure we get a compacted representation + '@context': [W3C_DID_CONTEXT_URL, KILT_DID_CONTEXT_URL], + // the resource's id, which is what gives us the right resource + '@id': url, + }, + { + // transform any relative URIs to absolute ones so that the processor is able to work with them + base: did, + documentLoader: kiltContextsLoader, + expandContext: { + '@context': [W3C_DID_CONTEXT_URL, KILT_DID_CONTEXT_URL], + }, + // forced because 'base' is not defined in the types we're using; these are for v1.5 bc no more recent types exist + } as jsonld.Options.Frame + )) as ConformingDidDocument | ConformingDidKey + // The signature suites expect key-related json-LD contexts; we add them here + switch ((document as { type: string }).type) { + // these 4 are currently used + case Sr25519VerificationKey2020.suite: + document['@context'].push(Sr25519VerificationKey2020.SUITE_CONTEXT) + break + case 'Ed25519VerificationKey2018': + document['@context'].push( + 'https://w3id.org/security/suites/ed25519-2018/v1' + ) + break + case 'EcdsaSecp256k1VerificationKey2019': + document['@context'].push('https://w3id.org/security/v1') + break + case 'X25519KeyAgreementKey2019': + document['@context'].push( + 'https://w3id.org/security/suites/x25519-2019/v1' + ) + break + default: + break + } + return { contextUrl: undefined, documentUrl: url, document } +} + +/** + * Document loader that provides access to the JSON-LD contexts required for verifying Kilt VCs. + * Essentially wraps the vc-js defaultDocumentLoader, but additionally loads KILTs [[validationContexts]] & [[DID_CONTEXTS]]. + * + * @param url Document/context URL to resolve. + * @returns An object containing the resolution result. + */ +export const defaultDocumentLoader: DocumentLoader = combineDocumentLoaders([ + kiltContextsLoader, + kiltDidLoader, +]) diff --git a/packages/vc-export/src/vc-js/examples/ICredentialExample.json b/packages/vc-export/src/vc-js/examples/ICredentialExample.json new file mode 100644 index 000000000..09cbcda5d --- /dev/null +++ b/packages/vc-export/src/vc-js/examples/ICredentialExample.json @@ -0,0 +1,24 @@ +{ + "claim": { + "cTypeHash": "0x3291bb126e33b4862d421bfaa1d2f272e6cdfc4f96658988fbcffea8914bd9ac", + "contents": { + "Email": "ingo@kilt.io" + }, + "owner": "did:kilt:4sJm5Zsvdi32hU88xbL3v6VQ877P4HLaWVYUXgcSyQR8URTu" + }, + "claimHashes": [ + "0x8113c20adf617adb9fe3a2c61cc2614bf02cd58e0e42cb31356e7f5c052e65de", + "0xa19685266e47579ecd72c30b31a928eef0bd71b7d297511c8bef952f2a5822a1" + ], + "claimNonceMap": { + "0x02eaa62e144281c9f73355cdb5e1f4edf27adc4e0510c2e60dca793c794dba6a": "e8f78c9e-70b5-48ea-990f-97782bc62c84", + "0x1767f2220a9b07e22b73c5b36fa90e6f14338b6198e7696daf464914942734ab": "1f454fcc-dc73-46d4-9478-db5e4c8dda3b" + }, + "legitimations": [], + "delegationId": null, + "rootHash": "0x4fb274ed275ae1c3a719428088ffde0bbc10e456eba8aedc9687178a4ce47c20", + "claimerSignature": { + "keyId": "did:kilt:4sJm5Zsvdi32hU88xbL3v6VQ877P4HLaWVYUXgcSyQR8URTu#0xad991c68c9f1c6c4f869fa19a217db30aff0f74963ca7e26206f7102b229df5b", + "signature": "0xfa71e745c21d7b4ec6f8d54ac5b2fea9bacf91ffb8f56b359a3e5af0119957030a28944011690d404c59ea814c5324298db0ef5b3332868bbdcf33b25bb9f388" + } +} \ No newline at end of file diff --git a/packages/vc-export/src/vc-js/examples/example-vc.json b/packages/vc-export/src/vc-js/examples/example-vc.json deleted file mode 100644 index 7f72115d2..000000000 --- a/packages/vc-export/src/vc-js/examples/example-vc.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.kilt.io/contexts/credentials" - ], - "type": [ - "VerifiableCredential", - "KiltCredential2020" - ], - "id": "kilt:cred:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad", - "credentialSubject": { - "@id": "did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs", - "@context": { - "@vocab": "kilt:ctype:0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf#" - }, - "birthday": "1991-01-01", - "name": "Kurt", - "premium": true - }, - "legitimationIds": [], - "issuer": "did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG", - "issuanceDate": "2021-03-25T10:20:44.242Z", - "nonTransferable": true, - "proof": [ - { - "type": "KILTSelfSigned2020", - "proofPurpose": "assertionMethod", - "verificationMethod": "did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#authenticationKey-1", - "signature": "0x00c374b5314d7192224bd620047f740c029af118eb5645a4662f76a2e3d70a877290f9a96cb9ee9ccc6c6bce24a0cf132a07edb603d0d0632f84210d528d2a7701" - }, - { - "type": "KILTAttestation2020", - "proofPurpose": "assertionMethod", - "attester": "did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG" - }, - { - "type": "KILTCredentialDigest2020", - "proofPurpose": "assertionMethod", - "nonces": { - "0xe5a099ea4f8be89227af8a5d74b0371e1c13232978c8b8edce1ecec698eb2665": "eab8a98c-0ef3-4a33-a5c7-c9821b3bec45", - "0x14a06c5955ebc9247c9f54b30e0f1714e6ebd54ae05ad7b16fa9a4643dff1dc2": "fda7a7d4-770c-4cae-9cd9-6deebdb3ed80", - "0xb102f462e4cde1b48e7936085cef1e2ab6ae4f7ca46cd3fab06074c00546a33d": "ed28443a-ec36-4a54-9caa-6bf014df257d", - "0xf42b46c4a7a3bad68650069bd81fdf2085c9ea02df1c27a82282e97e3f71ef8e": "adc7dc71-ab0a-45f9-a091-9f3ec1bb96c7" - }, - "claimHashes": [ - "0x0586412d7b8adf811c288211c9c704b3331bb3adb61fba6448c89453568180f6", - "0x3856178f49d3c379e00793125678eeb8db61cfa4ed32cd7a4b67ac8e27714fc1", - "0x683428497edeba0198f02a45a7015fc2c010fa75994bc1d1372349c25e793a10", - "0x8804cc546c4597b2ab0541dd3a6532e338b0b5b4d2458eb28b4d909a5d4caf4e" - ] - } - ] -} \ No newline at end of file diff --git a/packages/vc-export/src/vc-js/index.ts b/packages/vc-export/src/vc-js/index.ts index 9d73154b6..77bff9c05 100644 --- a/packages/vc-export/src/vc-js/index.ts +++ b/packages/vc-export/src/vc-js/index.ts @@ -6,5 +6,6 @@ */ export * as suites from './suites/index.js' -export { documentLoader } from './documentLoader.js' +export * as purposes from './purposes/index.js' +export * from './documentLoader.js' export { validationContexts } from './context/index.js' diff --git a/packages/vc-export/src/vc-js/purposes/KiltAttestationProofV1Purpose.ts b/packages/vc-export/src/vc-js/purposes/KiltAttestationProofV1Purpose.ts new file mode 100644 index 000000000..8232ce98f --- /dev/null +++ b/packages/vc-export/src/vc-js/purposes/KiltAttestationProofV1Purpose.ts @@ -0,0 +1,56 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable no-empty-pattern */ +/* eslint-disable class-methods-use-this */ + +// @ts-expect-error not a typescript module +import jsigs from 'jsonld-signatures' // cjs module + +import { ATTESTATION_PROOF_V1_TYPE } from '../../constants.js' +import type { Proof } from '../../types.js' +import type { JsonLdObj } from '../documentLoader.js' + +export class KiltAttestationProofV1Purpose extends jsigs.purposes.ProofPurpose { + constructor({ + date, + maxTimestampDelta = Infinity, + }: { date?: Date | string | number; maxTimestampDelta?: number } = {}) { + super({ term: 'none', date, maxTimestampDelta }) + } + + async validate( + proof: Proof, + { + document, + }: /* suite, verificationMethod, + documentLoader, expansionMap */ + { document?: JsonLdObj } + ): Promise { + const created: string = + (proof as any)?.created ?? (document as any)?.issuanceDate + return super.validate({ ...proof, created }, {}) + } + + async update( + proof: Proof, + { + /* document, suite, documentLoader, expansionMap */ + } + ): Promise { + return { ...proof, type: ATTESTATION_PROOF_V1_TYPE } + } + + async match( + proof: Proof, + { + /* document, documentLoader, expansionMap */ + } + ): Promise { + return proof.type === ATTESTATION_PROOF_V1_TYPE + } +} diff --git a/packages/vc-export/src/vc-js/purposes/index.ts b/packages/vc-export/src/vc-js/purposes/index.ts new file mode 100644 index 000000000..573353c26 --- /dev/null +++ b/packages/vc-export/src/vc-js/purposes/index.ts @@ -0,0 +1,8 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +export * from './KiltAttestationProofV1Purpose.js' diff --git a/packages/vc-export/src/vc-js/suites/KiltAbstractSuite.ts b/packages/vc-export/src/vc-js/suites/KiltAbstractSuite.ts deleted file mode 100644 index 4b2e9876a..000000000 --- a/packages/vc-export/src/vc-js/suites/KiltAbstractSuite.ts +++ /dev/null @@ -1,100 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -/* eslint-disable class-methods-use-this */ -// CJS import; does not support named exports -import jsigs from 'jsonld-signatures' -import type { JsonLdObj } from 'jsonld/jsonld-spec' -import jsonld from 'jsonld' -import type { - VerifiableCredential, - Proof, - IPublicKeyRecord, -} from '../../types.js' -import { documentLoader as defaultDocumentLoader } from '../documentLoader.js' -import { - KILT_CREDENTIAL_CONTEXT_URL, - DEFAULT_VERIFIABLECREDENTIAL_CONTEXT, -} from '../../constants.js' - -export abstract class KiltAbstractSuite extends jsigs.suites.LinkedDataProof { - public readonly verificationMethod?: string | IPublicKeyRecord - - constructor({ - type, - verificationMethod, - }: { - type: string - verificationMethod?: string | IPublicKeyRecord - }) { - super({ type }) - this.verificationMethod = verificationMethod - } - - protected async compactProof( - proof: JsonLdObj, - options: { - documentLoader?: jsigs.DocumentLoader - expansionMap?: jsigs.ExpansionMap - [key: string]: unknown - } - ): Promise { - const { documentLoader = defaultDocumentLoader, expansionMap } = options - return jsonld.compact(proof, KILT_CREDENTIAL_CONTEXT_URL, { - documentLoader, - expansionMap, - compactToRelative: false, - }) as Promise - } - - protected async compactDoc( - document: JsonLdObj, - options: { - documentLoader?: jsigs.DocumentLoader - expansionMap?: jsigs.ExpansionMap - [key: string]: unknown - } - ): Promise { - const { documentLoader = defaultDocumentLoader, expansionMap } = options - return jsonld.compact( - document, - [DEFAULT_VERIFIABLECREDENTIAL_CONTEXT, KILT_CREDENTIAL_CONTEXT_URL], - { documentLoader, expansionMap, compactToRelative: false } - ) as Promise - } - - /** - * @inheritdoc - */ - public async matchProof(options: { - proof: JsonLdObj - document?: JsonLdObj - purpose?: jsigs.purposes.ProofPurpose - documentLoader?: jsigs.DocumentLoader - expansionMap?: jsigs.ExpansionMap - }): Promise { - const { proof } = options - const compact = await this.compactProof(proof, options) - const type = compact['@type'] ?? compact.type - return type instanceof Array ? type.includes(this.type) : type === this.type - } - - /** - * @inheritdoc - */ - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async createProof(options: { - document: JsonLdObj - purpose?: jsigs.purposes.ProofPurpose - documentLoader?: jsigs.DocumentLoader - expansionMap?: jsigs.ExpansionMap - }): Promise { - throw new Error( - 'Credential issuance through vc-js is not supported. For credential issuance, use @kiltprotocol/sdk-js and export your KILT credential to a VC representation using @kiltprotocol/vc-export' - ) - } -} diff --git a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts b/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts new file mode 100644 index 000000000..92ad52687 --- /dev/null +++ b/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts @@ -0,0 +1,566 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/** + * @group unit/vc-js + */ + +import { hexToU8a, u8aEq } from '@polkadot/util' +// @ts-expect-error not a typescript module +import * as vcjs from '@digitalbazaar/vc' +import { + Ed25519Signature2020, + suiteContext as Ed25519Signature2020Context, + // @ts-expect-error not a typescript module +} from '@digitalbazaar/ed25519-signature-2020' +// @ts-expect-error not a typescript module +import jsigs from 'jsonld-signatures' // cjs module +// @ts-expect-error not a typescript module +import jsonld from 'jsonld' // cjs module + +import { Credential } from '@kiltprotocol/core' +import * as Did from '@kiltprotocol/did' +import { Crypto } from '@kiltprotocol/utils' +import type { + ConformingDidDocument, + IClaim, + ICredential, + KiltKeyringPair, +} from '@kiltprotocol/types' + +import { exportICredentialToVc } from '../../fromICredential.js' +import { applySelectiveDisclosure } from '../../KiltAttestationProofV1.js' +import { KiltAttestationProofV1Purpose } from '../purposes/KiltAttestationProofV1Purpose.js' +import { + JsonLdObj, + combineDocumentLoaders, + kiltContextsLoader, + kiltDidLoader, +} from '../documentLoader.js' +import { + KILT_CREDENTIAL_CONTEXT_URL, + W3C_CREDENTIAL_CONTEXT_URL, +} from '../../constants.js' +import { Sr25519Signature2020 } from './Sr25519Signature2020.js' +import { KiltAttestationV1Suite } from './KiltAttestationProofV1.js' +import ingosCredential from '../examples/ICredentialExample.json' +import { + makeAttestationCreatedEvents, + mockedApi, +} from '../../exportToVerifiableCredential.spec.js' +import type { + KiltAttestationProofV1, + Proof, + KiltCredentialV1, +} from '../../types.js' +import { makeFakeDid } from './Sr25519Signature2020.spec' + +jest.mock('@kiltprotocol/did', () => ({ + ...jest.requireActual('@kiltprotocol/did'), + resolveCompliant: jest.fn(), +})) + +// is not needed and imports a dependency that does not work in node 18 +jest.mock('@digitalbazaar/http-client', () => ({})) + +const attester = '4pnfkRn5UurBJTW92d9TaVLR2CqJdY4z5HPjrEbpGyBykare' +const timestamp = 1_649_670_060_000 +const blockHash = hexToU8a( + '0x93c4a399abff5a68812479445d121995fde278b7a29d5863259cf7b6b6f1dc7e' +) +const { genesisHash } = mockedApi + +const attestedVc = exportICredentialToVc(ingosCredential as ICredential, { + issuer: `did:kilt:${attester}`, + chainGenesisHash: genesisHash, + blockHash, + timestamp, +}) + +const notAttestedVc = exportICredentialToVc( + Credential.fromClaim(ingosCredential.claim as IClaim), + { + issuer: `did:kilt:${attester}`, + chainGenesisHash: genesisHash, + blockHash, + timestamp, + } +) +const revokedCredential = Credential.fromClaim(ingosCredential.claim as IClaim) +const revokedVc = exportICredentialToVc(revokedCredential, { + issuer: `did:kilt:${attester}`, + chainGenesisHash: genesisHash, + blockHash, + timestamp, +}) + +jest.mocked(mockedApi.query.attestation.attestations).mockImplementation( + // @ts-expect-error + async (claimHash) => { + if (u8aEq(claimHash, ingosCredential.rootHash)) { + return mockedApi.createType( + 'Option', + { + ctypeHash: ingosCredential.claim.cTypeHash, + attester, + revoked: false, + } + ) + } + if (u8aEq(claimHash, revokedCredential.rootHash)) { + return mockedApi.createType( + 'Option', + { + ctypeHash: revokedCredential.claim.cTypeHash, + attester, + revoked: true, + } + ) + } + return mockedApi.createType( + 'Option' + ) + } +) +jest.mocked(mockedApi.query.system.events).mockResolvedValue( + makeAttestationCreatedEvents([ + [attester, ingosCredential.rootHash, ingosCredential.claim.cTypeHash, null], + [ + attester, + revokedCredential.rootHash, + revokedCredential.claim.cTypeHash, + null, + ], + ]) as any +) +jest + .mocked(mockedApi.query.timestamp.now) + .mockResolvedValue(mockedApi.createType('u64', timestamp) as any) + +const documentLoader = combineDocumentLoaders([ + kiltDidLoader, + kiltContextsLoader, + vcjs.defaultDocumentLoader, +]) + +let suite: KiltAttestationV1Suite +let purpose: KiltAttestationProofV1Purpose +let proof: KiltAttestationProofV1 +let keypair: KiltKeyringPair +let didDocument: ConformingDidDocument + +beforeAll(async () => { + suite = new KiltAttestationV1Suite({ api: mockedApi }) + purpose = new KiltAttestationProofV1Purpose() + proof = attestedVc.proof as KiltAttestationProofV1 + ;({ keypair, didDocument } = await makeFakeDid()) +}) + +describe('jsigs', () => { + describe('proof matching', () => { + it('purpose matches compacted proof', async () => { + const compactedProof = (await jsonld.compact( + { ...proof, '@context': attestedVc['@context'] }, + attestedVc['@context'], + { documentLoader, compactToRelative: false } + )) as Proof + expect(await purpose.match(compactedProof, {})).toBe(true) + expect( + await purpose.match(compactedProof, { + document: attestedVc, + documentLoader, + }) + ).toBe(true) + }) + + it('suite matches proof', async () => { + const proofWithContext = { + ...proof, + '@context': attestedVc['@context'], + } + expect(await suite.matchProof({ proof: proofWithContext })).toBe(true) + expect( + await suite.matchProof({ + proof: proofWithContext, + document: attestedVc as unknown as JsonLdObj, + purpose, + documentLoader, + }) + ).toBe(true) + }) + }) + + describe('attested', () => { + it('verifies Kilt Attestation Proof', async () => { + const result = await jsigs.verify(attestedVc, { + suite, + purpose, + documentLoader, + }) + expect(result).toHaveProperty('verified', true) + expect(result).not.toHaveProperty('error') + }) + }) + + it('verifies proof with props removed', async () => { + const derived = applySelectiveDisclosure(attestedVc, proof, []) + expect(derived.credential.credentialSubject).not.toHaveProperty('Email') + expect( + await jsigs.verify( + { ...derived.credential, proof: derived.proof }, + { suite, purpose, documentLoader } + ) + ).toMatchObject({ verified: true }) + }) + + describe('revoked', () => { + it('still verifies Kilt Attestation Proof', async () => { + expect( + await jsigs.verify(revokedVc, { + suite, + purpose, + documentLoader, + }) + ).toMatchObject({ verified: true }) + }) + }) + + describe('not attested', () => { + it('fails to verify Kilt Attestation Proof', async () => { + expect( + await jsigs.verify(notAttestedVc, { + suite, + purpose, + documentLoader, + }) + ).toMatchObject({ verified: false }) + }) + }) + + it('detects tampering on claims', async () => { + // make a copy + const tamperCred: KiltCredentialV1 = JSON.parse(JSON.stringify(attestedVc)) + tamperCred.credentialSubject.Email = 'macgyver@google.com' + expect( + await jsigs.verify(tamperCred, { suite, purpose, documentLoader }) + ).toMatchObject({ verified: false }) + }) + + it('detects tampering on credential', async () => { + const tamperCred: KiltCredentialV1 = JSON.parse(JSON.stringify(attestedVc)) + tamperCred.id = tamperCred.id.replace('1', '2') as any + expect( + await jsigs.verify(tamperCred, { suite, purpose, documentLoader }) + ).toMatchObject({ verified: false }) + }) + + it('detects signer mismatch', async () => { + const tamperCred: KiltCredentialV1 = JSON.parse(JSON.stringify(attestedVc)) + tamperCred.issuer = + 'did:kilt:4oFNEgM6ibgEW1seCGXk3yCM6o7QTnDGrqGtgSRSspVMDg4c' + expect( + await jsigs.verify(tamperCred, { suite, purpose, documentLoader }) + ).toMatchObject({ verified: false }) + }) + + it('detects proof mismatch', async () => { + const tamperCred: KiltCredentialV1 = JSON.parse(JSON.stringify(attestedVc)) + tamperCred.proof!.type = 'Sr25519Signature2020' as any + expect( + await jsigs.verify(tamperCred, { suite, purpose, documentLoader }) + ).toMatchObject({ verified: false }) + }) +}) +describe('vc-js', () => { + const mockSuite = new KiltAttestationV1Suite({ + api: { + genesisHash, + query: { + attestation: { + attestations: async () => + mockedApi.createType( + 'Option' + ), + }, + }, + } as any, + }) + + describe('attested', () => { + it('verifies Kilt Attestation Proof', async () => { + const result = await vcjs.verifyCredential({ + credential: attestedVc, + suite, + purpose, + documentLoader, + checkStatus: suite.checkStatus, + }) + expect(result).toHaveProperty('verified', true) + expect(result).not.toHaveProperty('error') + }) + + it('creates and verifies a signed presentation (sr25519)', async () => { + const signer = { + sign: async ({ data }: { data: Uint8Array }) => keypair.sign(data), + id: didDocument.authentication[0], + } + const signingSuite = new Sr25519Signature2020({ signer }) + + const verifiableCredential = { ...attestedVc } + let presentation = vcjs.createPresentation({ + verifiableCredential, + holder: didDocument.id, + }) + + presentation = await vcjs.signPresentation({ + presentation, + suite: signingSuite, + challenge: '0x1234', + documentLoader, + }) + + const result = await vcjs.verify({ + presentation, + suite: [suite, new Sr25519Signature2020()], + purpose: new KiltAttestationProofV1Purpose(), + challenge: '0x1234', + documentLoader, + checkStatus: suite.checkStatus, + }) + + expect(result.presentationResult).not.toHaveProperty( + 'error', + expect.any(Array) + ) + expect(result).toMatchObject({ + verified: true, + presentationResult: { verified: true }, + credentialResults: [{ verified: true }], + }) + }) + + it('creates and verifies a signed presentation (ed25519)', async () => { + const edKeypair = Crypto.makeKeypairFromUri('//Ingo', 'ed25519') + const lightDid = Did.createLightDidDocument({ + authentication: [edKeypair], + }) + const edSigner = { + sign: async ({ data }: { data: Uint8Array }) => edKeypair.sign(data), + id: lightDid.uri + lightDid.authentication[0].id, + } + const signingSuite = new Ed25519Signature2020({ signer: edSigner }) + + const extendedDocLoader = combineDocumentLoaders([ + documentLoader, + Ed25519Signature2020Context.documentLoader, + ]) + + let presentation = vcjs.createPresentation({ + verifiableCredential: attestedVc, + holder: lightDid.uri, + }) + + presentation = await vcjs.signPresentation({ + presentation, + suite: signingSuite, + challenge: '0x1234', + documentLoader: extendedDocLoader, + }) + + const result = await vcjs.verify({ + presentation, + suite: [suite, new Ed25519Signature2020()], + challenge: '0x1234', + documentLoader: extendedDocLoader, + checkStatus: suite.checkStatus, + purpose: new KiltAttestationProofV1Purpose(), + }) + + expect(result.presentationResult).not.toHaveProperty( + 'error', + expect.any(Array) + ) + expect(result).toMatchObject({ + verified: true, + presentationResult: { verified: true }, + credentialResults: [{ verified: true }], + }) + }) + }) + + describe('revoked', () => { + it('fails to verify credential', async () => { + expect( + await vcjs.verifyCredential({ + credential: revokedVc, + suite, + purpose, + documentLoader, + checkStatus: mockSuite.checkStatus, + }) + ).toMatchObject({ verified: false }) + }) + }) + + describe('not attested', () => { + it('fails to verify Kilt Attestation Proof', async () => { + expect( + await vcjs.verifyCredential({ + credential: notAttestedVc, + suite, + purpose, + documentLoader, + checkStatus: suite.checkStatus, + }) + ).toMatchObject({ verified: false }) + }) + }) +}) + +describe('issuance', () => { + let txArgs: any + let issuanceSuite: KiltAttestationV1Suite + let toBeSigned: Partial + beforeEach(() => { + issuanceSuite = new KiltAttestationV1Suite({ + api: mockedApi, + transactionHandler: async (tx) => { + txArgs = tx.args + return { + blockHash, + timestamp, + } + }, + }) + toBeSigned = { + '@context': attestedVc['@context'], + type: attestedVc.type, + credentialSubject: attestedVc.credentialSubject, + credentialSchema: attestedVc.credentialSchema, + nonTransferable: true, + issuer: attestedVc.issuer, + } + }) + + it('issues a credential via vc-js', async () => { + let newCred = (await vcjs.issue({ + credential: { ...toBeSigned }, + suite: issuanceSuite, + documentLoader, + purpose, + })) as KiltCredentialV1 + expect(newCred.proof).toMatchObject({ + type: 'KiltAttestationProofV1', + commitments: expect.any(Array), + salt: expect.any(Array), + }) + expect(newCred).toMatchObject(toBeSigned) + + newCred = await issuanceSuite.finalizeProof(newCred) + expect(newCred.issuanceDate).toStrictEqual(attestedVc.issuanceDate) + expect(newCred.proof?.block).toStrictEqual(attestedVc.proof.block) + expect(newCred.credentialStatus).toMatchObject({ + id: expect.any(String), + type: 'KiltRevocationStatusV1', + }) + expect(newCred.credentialStatus.id).not.toMatch( + attestedVc.credentialStatus.id + ) + expect(newCred.id).not.toMatch(attestedVc.id) + + jest + .mocked(mockedApi.query.system.events) + .mockResolvedValueOnce( + makeAttestationCreatedEvents([[attester, ...txArgs]]) as any + ) + jest.mocked(mockedApi.query.attestation.attestations).mockResolvedValueOnce( + mockedApi.createType( + 'Option', + { + ctypeHash: txArgs[1], + attester, + revoked: false, + } + ) as any + ) + + const result = await vcjs.verifyCredential({ + credential: newCred, + suite, + documentLoader, + purpose, + checkStatus: suite.checkStatus, + }) + expect(result).toMatchObject({ verified: true }) + }) + + it('adds context if not present', async () => { + const newCred = (await vcjs.issue({ + credential: { + ...toBeSigned, + '@context': [W3C_CREDENTIAL_CONTEXT_URL], + }, + suite: issuanceSuite, + documentLoader, + purpose, + })) as KiltCredentialV1 + expect(newCred['@context']).toContain(KILT_CREDENTIAL_CONTEXT_URL) + + await expect( + jsigs.sign( + { + ...toBeSigned, + '@context': [W3C_CREDENTIAL_CONTEXT_URL], + }, + { + suite: issuanceSuite, + documentLoader, + purpose, + addSuiteContext: false, + } + ) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"The document to be signed must contain this suite's @context, \\"https://www.kilt.io/contexts/credentials\\"."` + ) + }) + + it('complains if transaction handler not given', async () => { + await expect( + vcjs.issue({ + credential: toBeSigned, + suite, + documentLoader, + purpose, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"suite must be configured with a transactionHandler for proof generation"` + ) + }) + + it('fails proof finalization if credential does not have proof', async () => { + await expect( + issuanceSuite.finalizeProof(toBeSigned as KiltCredentialV1) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"The credential must have a proof property containing a proof stub as created by the \`createProof\` method"` + ) + }) + + it('fails if proof stub was created by different suite', async () => { + const newCred = (await vcjs.issue({ + credential: toBeSigned, + suite: issuanceSuite, + documentLoader, + purpose, + })) as KiltCredentialV1 + + await expect( + suite.finalizeProof(newCred) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"no submission found for this proof"` + ) + }) +}) diff --git a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts b/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts new file mode 100644 index 000000000..b11782de9 --- /dev/null +++ b/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts @@ -0,0 +1,239 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable class-methods-use-this */ +/* eslint-disable no-empty-pattern */ + +import { u8aToHex } from '@polkadot/util' +import type { ApiPromise } from '@polkadot/api' + +// @ts-expect-error not a typescript module +import jsigs from 'jsonld-signatures' // cjs module + +import { + AttestationHandler, + calculateRootHash, + finalizeProof, + initializeProof, + verify as verifyProof, +} from '../../KiltAttestationProofV1.js' +import { check as checkStatus } from '../../KiltRevocationStatusV1.js' +import { + ATTESTATION_PROOF_V1_TYPE, + KILT_CREDENTIAL_CONTEXT_URL, +} from '../../constants.js' +import { chainIdFromGenesis } from '../../CAIP/caip2.js' +import { includesContext } from './utils.js' +import type { + KiltAttestationProofV1, + Proof, + KiltCredentialV1, +} from '../../types.js' +import type { JSigsVerificationResult } from './types.js' +import type { JsonLdObj } from '../documentLoader.js' + +const { + suites: { LinkedDataProof }, +} = jsigs + +interface CallArgs { + proof: Proof + document?: JsonLdObj + [key: string]: unknown +} + +export class KiltAttestationV1Suite extends LinkedDataProof { + private api: ApiPromise + private transactionHandler?: AttestationHandler + private pendingSubmissions = new Map>() + + public readonly contextUrl = KILT_CREDENTIAL_CONTEXT_URL + /** + * Placeholder value as @digitalbazaar/vc requires a verificationMethod property on issuance. + */ + public readonly verificationMethod: string + + constructor({ + api, + transactionHandler, + }: { + api: ApiPromise + transactionHandler?: AttestationHandler + }) { + super({ type: ATTESTATION_PROOF_V1_TYPE }) + this.api = api + this.transactionHandler = transactionHandler + this.verificationMethod = chainIdFromGenesis(api.genesisHash) + } + + // eslint-disable-next-line jsdoc/require-returns + /** + * A function to check the revocation status of KiltAttestationV1 proofs, which is tied to the [[KiltRevocationStatusV1]] method. + */ + public get checkStatus(): (args: { + credential: KiltCredentialV1 + }) => Promise<{ verified: boolean; error?: unknown }> { + const { api } = this + return async ({ credential }) => { + return checkStatus(credential, { api }) + .then(() => ({ verified: true })) + .catch((error) => ({ verified: false, error })) + } + } + + /** + * @inheritdoc + */ + public async matchProof(options: CallArgs): Promise { + return super.matchProof(options) + } + + /** + * @inheritdoc + */ + public async verifyProof( + options: CallArgs + ): Promise { + try { + if (!(await this.matchProof(options))) { + throw new Error('Proof mismatch') + } + if (!options.document) { + throw new TypeError('document is required for verification') + } + // TODO: do we have to compact first in order to allow credentials in non-canonical (non-compacted) form? + const proof = options.proof as KiltAttestationProofV1 + const document = options.document as unknown as KiltCredentialV1 + await verifyProof(document, proof, { api: this.api }) + return { + verified: true, + } + } catch (error) { + return { + verified: false, + error: error instanceof Error ? error : new Error(String(error)), + } + } + } + + /** + * Ensures the document to be signed contains the required signature suite + * specific `@context`, by either adding it (if `addSuiteContext` is true), + * or throwing an error if it's missing. + * + * @param options - Options hashmap. + * @param options.document - JSON-LD document to be signed. + * @param options.addSuiteContext - Add suite context? + */ + public ensureSuiteContext({ + document, + addSuiteContext = true, + }: { + document: JsonLdObj + addSuiteContext: boolean + }): void { + const { contextUrl } = this + + if (includesContext({ document, contextUrl })) { + // document already includes the required context + return + } + + if (!addSuiteContext) { + throw new TypeError( + `The document to be signed must contain this suite's @context, ` + + `"${contextUrl}".` + ) + } + + // enforce the suite's context by adding it to the document + const existingContext = document['@context'] ?? [] + + // eslint-disable-next-line no-param-reassign + document['@context'] = Array.isArray(existingContext) + ? [...existingContext, contextUrl] + : [existingContext, contextUrl] + } + + /** + * Initializes a proof for a [[KiltCredentialV1]] type document. + * + * _! This is not a complete proof yet !_. + * + * After adding the proof stub to the credential, the resulting document must be processed + * by the `finalizeProof` method to make necessary adjustments to the document itself. + * + * @param input Object containing the function arguments. + * @param input.document [[KiltCredentialV1]] object to be signed. + * + * @returns Resolves with the created proof object. + */ + public async createProof({ + document, + }: { + document: object + }): Promise { + if (!this.transactionHandler) { + throw new Error( + 'suite must be configured with a transactionHandler for proof generation' + ) + } + const [proof, submissionArgs] = initializeProof( + document as KiltCredentialV1 + ) + const [rootHash] = submissionArgs + this.pendingSubmissions.set( + u8aToHex(rootHash as Uint8Array), + this.transactionHandler( + this.api.tx.attestation.add(...submissionArgs), + this.api + ) + ) + return proof + } + + /** + * Processes a [[KiltCredentialV1]] with a proof stub created by `createProof` to produce a verifiable credential. + * The proof must have been created with the same instance of the [[KiltAttestationProofV1Suite]]. + * + * @param credential A [[KiltCredentialV1]] with a proof stub created by `createProof`. + * + * @returns An updated copy of the credential with necessary adjustments, containing a complete [[KiltAttestationV1]] proof. + */ + public async finalizeProof( + credential: KiltCredentialV1 + ): Promise { + const { proof } = credential + const proofStub: KiltAttestationProofV1 | undefined = ( + Array.isArray(proof) ? proof : [proof] + ).find((p) => p?.type === ATTESTATION_PROOF_V1_TYPE) + if (!proofStub) { + throw new Error( + 'The credential must have a proof property containing a proof stub as created by the `createProof` method' + ) + } + const rootHash = u8aToHex(calculateRootHash(credential, proofStub)) + const submissionPromise = this.pendingSubmissions.get(rootHash) + if (!submissionPromise) { + throw new Error('no submission found for this proof') + } + const { + blockHash, + timestamp = (await this.api.query.timestamp.now.at(blockHash)).toNumber(), + } = await submissionPromise.catch((e) => { + this.pendingSubmissions.delete(rootHash) + throw new Error(`Promise rejected with ${e}`) + }) + const updated = finalizeProof(credential, proofStub, { + blockHash, + timestamp, + genesisHash: this.api.genesisHash, + }) + this.pendingSubmissions.delete(rootHash) + return updated + } +} diff --git a/packages/vc-export/src/vc-js/suites/KiltAttestedSuite.spec.ts b/packages/vc-export/src/vc-js/suites/KiltAttestedSuite.spec.ts deleted file mode 100644 index b5a76b6f8..000000000 --- a/packages/vc-export/src/vc-js/suites/KiltAttestedSuite.spec.ts +++ /dev/null @@ -1,182 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -/** - * @group unit/vc-js - */ - -import { ApiMocks } from '@kiltprotocol/testing' -import jsigs from 'jsonld-signatures' -import { Attestation } from '@kiltprotocol/core' -import type { IAttestation } from '@kiltprotocol/types' -import vcjs from 'vc-js' -import jsonld from 'jsonld' -import { KiltAttestedSuite as AttestationSuite } from './KiltAttestedSuite' -import credential from '../examples/example-vc.json' -import { documentLoader } from '../documentLoader' -import type { AttestedProof } from '../../types' -import { KILT_ATTESTED_PROOF_TYPE } from '../../constants' - -const mockedApi: any = ApiMocks.getMockedApi() - -const attestation: IAttestation = { - claimHash: - '0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad', - cTypeHash: - '0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf', - owner: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', - delegationId: null, - revoked: false, -} - -const encodedAttestation = ApiMocks.mockChainQueryReturn( - 'attestation', - 'attestations', - [ - '0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad', - '4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', - undefined, - false, - ['4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', 0], - ] -) -mockedApi.query.attestation.attestations.mockResolvedValue(encodedAttestation) - -jest.mock('@kiltprotocol/core', () => ({ - ...jest.requireActual('@kiltprotocol/core'), - Attestation: { fromChain: jest.fn() }, -})) -const spy = jest.mocked(Attestation.fromChain).mockReturnValue(attestation) - -let suite: AttestationSuite -let purpose: jsigs.purposes.ProofPurpose -let proof: AttestedProof - -beforeAll(async () => { - suite = new AttestationSuite({ KiltConnection: mockedApi }) - purpose = new jsigs.purposes.AssertionProofPurpose() - credential.proof.some((p) => { - if (p.type === KILT_ATTESTED_PROOF_TYPE) { - proof = p as AttestedProof - return true - } - return false - }) -}) - -describe('jsigs', () => { - describe('proof matching', () => { - it('purpose matches compacted proof', async () => { - const compactedProof = await jsonld.compact( - { ...proof, '@context': credential['@context'] }, - 'https://w3id.org/security/v2', - { documentLoader, compactToRelative: false } - ) - expect(await purpose.match(compactedProof, {})).toBe(true) - expect( - await purpose.match(compactedProof, { - document: credential, - documentLoader, - }) - ).toBe(true) - }) - - it('suite matches proof', async () => { - const proofWithContext = { ...proof, '@context': credential['@context'] } - expect(await suite.matchProof({ proof: proofWithContext })).toBe(true) - expect( - await suite.matchProof({ - proof: proofWithContext, - document: credential, - purpose, - documentLoader, - }) - ).toBe(true) - }) - }) - - describe('attested', () => { - beforeAll(() => { - spy.mockReturnValue(attestation) - }) - - it('verifies Kilt Attestation Proof', async () => { - expect( - await jsigs.verify(credential, { suite, purpose, documentLoader }) - ).toMatchObject({ verified: true }) - }) - }) - - describe('revoked', () => { - beforeAll(() => { - spy.mockReturnValue({ ...attestation, revoked: true }) - }) - - it('fails to verify Kilt Attestation Proof', async () => { - expect( - await jsigs.verify(credential, { suite, purpose, documentLoader }) - ).toMatchObject({ verified: false }) - }) - }) - - describe('not attested', () => { - it('fails to verify Kilt Attestation Proof', async () => { - expect( - await jsigs.verify(credential, { suite, purpose, documentLoader }) - ).toMatchObject({ verified: false }) - }) - }) -}) - -describe('vc-js', () => { - describe('attested', () => { - beforeAll(() => { - spy.mockReturnValue(attestation) - }) - - it('verifies Kilt Attestation Proof', async () => { - expect( - await vcjs.verifyCredential({ - credential, - suite, - purpose, - documentLoader, - }) - ).toMatchObject({ verified: true }) - }) - }) - - describe('revoked', () => { - beforeAll(() => { - spy.mockReturnValue({ ...attestation, revoked: true }) - }) - - it('fails to verify Kilt Attestation Proof', async () => { - expect( - await vcjs.verifyCredential({ - credential, - suite, - purpose, - documentLoader, - }) - ).toMatchObject({ verified: false }) - }) - }) - - describe('not attested', () => { - it('fails to verify Kilt Attestation Proof', async () => { - expect( - await vcjs.verifyCredential({ - credential, - suite, - purpose, - documentLoader, - }) - ).toMatchObject({ verified: false }) - }) - }) -}) diff --git a/packages/vc-export/src/vc-js/suites/KiltAttestedSuite.ts b/packages/vc-export/src/vc-js/suites/KiltAttestedSuite.ts deleted file mode 100644 index fa40640b0..000000000 --- a/packages/vc-export/src/vc-js/suites/KiltAttestedSuite.ts +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -/* eslint-disable max-classes-per-file */ -import { ApiPromise } from '@polkadot/api' -import type { - DocumentLoader, - ExpansionMap, - Proof, - purposes, - VerificationResult, -} from 'jsonld-signatures' -import type { JsonLdObj } from 'jsonld/jsonld-spec' - -import type { AttestedProof } from '../../types.js' -import { - verifyAttestedProof, - AttestationStatus, -} from '../../verificationUtils.js' -import { KILT_ATTESTED_PROOF_TYPE } from '../../constants.js' -import { KiltAbstractSuite } from './KiltAbstractSuite.js' - -class AttestationError extends Error { - public readonly attestationStatus: AttestationStatus - - constructor(message: string, attestationStatus: AttestationStatus) { - super(message) - this.name = 'AttestationError' - this.attestationStatus = attestationStatus - } -} - -export class KiltAttestedSuite extends KiltAbstractSuite { - private readonly provider: ApiPromise - - constructor(options: { KiltConnection: ApiPromise }) { - // vc-js complains when there is no verificationMethod - super({ type: KILT_ATTESTED_PROOF_TYPE, verificationMethod: '' }) - if (!('KiltConnection' in options)) - throw new TypeError('KiltConnection must be a Kilt blockchain connection') - this.provider = options.KiltConnection - } - - /** - * @inheritdoc - */ - public async verifyProof(options: { - proof: Proof - document: JsonLdObj - purpose?: purposes.ProofPurpose - documentLoader?: DocumentLoader - expansionMap?: ExpansionMap - }): Promise { - try { - const { document, proof } = options - if (typeof document !== 'object') - throw new TypeError('Document must be a JsonLd object') - if (typeof proof !== 'object') - throw new TypeError('Proof must be a JsonLd object') - const compactedDoc = await this.compactDoc(document, options) - const compactedProof = await this.compactProof( - proof, - options - ) - const { verified, errors, status } = await verifyAttestedProof( - compactedDoc, - compactedProof, - this.provider - ) - if (errors.length > 0) - return { - verified, - error: new AttestationError(errors[0].message, status), - } - return { verified } - } catch (e: any) { - return { verified: false, error: e } - } - } -} diff --git a/packages/vc-export/src/vc-js/suites/KiltIntegritySuite.spec.ts b/packages/vc-export/src/vc-js/suites/KiltIntegritySuite.spec.ts deleted file mode 100644 index cac0a288c..000000000 --- a/packages/vc-export/src/vc-js/suites/KiltIntegritySuite.spec.ts +++ /dev/null @@ -1,165 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -/** - * @group unit/vc-js - */ - -import jsigs from 'jsonld-signatures' -import vcjs from 'vc-js' -import jsonld from 'jsonld' -import { KiltDisclosureSuite as Suite } from './KiltIntegritySuite' -import credential from '../examples/example-vc.json' -import { documentLoader } from '../documentLoader' -import type { CredentialDigestProof, VerifiableCredential } from '../../types' -import { KILT_CREDENTIAL_DIGEST_PROOF_TYPE } from '../../constants' - -let suite: Suite -let purpose: jsigs.purposes.ProofPurpose -let proof: CredentialDigestProof - -beforeAll(async () => { - suite = new Suite() - purpose = new jsigs.purposes.AssertionProofPurpose() - credential.proof.some((p) => { - if (p.type === KILT_CREDENTIAL_DIGEST_PROOF_TYPE) { - proof = p as CredentialDigestProof - return true - } - return false - }) -}) - -describe('jsigs', () => { - describe('proof matching', () => { - it('purpose matches compacted proof', async () => { - const compactedProof = await jsonld.compact( - { ...proof, '@context': credential['@context'] }, - 'https://w3id.org/security/v2', - { documentLoader, compactToRelative: false } - ) - expect(await purpose.match(compactedProof, {})).toBe(true) - expect( - await purpose.match(compactedProof, { - document: credential, - documentLoader, - }) - ).toBe(true) - }) - - it('suite matches proof', async () => { - const proofWithContext = { ...proof, '@context': credential['@context'] } - expect(await suite.matchProof({ proof: proofWithContext })).toBe(true) - expect( - await suite.matchProof({ - proof: proofWithContext, - document: credential, - purpose, - documentLoader, - }) - ).toBe(true) - }) - }) - - describe('verification', () => { - beforeAll(async () => { - suite = new Suite() - }) - - it('verifies Kilt Credential Digest Proof', async () => { - expect( - await jsigs.verify(credential, { suite, purpose, documentLoader }) - ).toMatchObject({ verified: true }) - }) - - it('verifies Kilt Credential Digest Proof with props removed', async () => { - /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ - const { name, ...credentialSubject } = credential.credentialSubject - expect(credentialSubject).not.toHaveProperty('name') - expect( - await jsigs.verify( - { ...credential, credentialSubject }, - { suite, purpose, documentLoader } - ) - ).toMatchObject({ verified: true }) - }) - }) - - describe('tamper detection', () => { - beforeAll(async () => { - suite = new Suite() - }) - - let tamperCred: VerifiableCredential - beforeEach(() => { - tamperCred = JSON.parse(JSON.stringify(credential)) - }) - - it('detects tampering on props', async () => { - tamperCred.credentialSubject.name = 'MacGyver' - expect( - await jsigs.verify(tamperCred, { suite, purpose, documentLoader }) - ).toMatchObject({ verified: false }) - }) - }) -}) - -describe('vc-js', () => { - describe('verification', () => { - beforeAll(async () => { - suite = new Suite() - }) - - it('verifies Kilt Credential Digest Proof', async () => { - expect( - await vcjs.verifyCredential({ - credential, - suite, - purpose, - documentLoader, - }) - ).toMatchObject({ verified: true }) - }) - - it('verifies Kilt Credential Digest Proof with props removed', async () => { - /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ - const { name, ...credentialSubject } = credential.credentialSubject - expect(credentialSubject).not.toHaveProperty('name') - expect( - await vcjs.verifyCredential({ - credential: { ...credential, credentialSubject }, - suite, - purpose, - documentLoader, - }) - ).toMatchObject({ verified: true }) - }) - }) - - describe('tamper detection', () => { - beforeAll(async () => { - suite = new Suite() - }) - - let tamperCred: VerifiableCredential - beforeEach(() => { - tamperCred = JSON.parse(JSON.stringify(credential)) - }) - - it('detects tampering on props', async () => { - tamperCred.credentialSubject.name = 'MacGyver' - expect( - await vcjs.verifyCredential({ - credential: tamperCred, - suite, - purpose, - documentLoader, - }) - ).toMatchObject({ verified: false }) - }) - }) -}) diff --git a/packages/vc-export/src/vc-js/suites/KiltIntegritySuite.ts b/packages/vc-export/src/vc-js/suites/KiltIntegritySuite.ts deleted file mode 100644 index fa8e9aaa9..000000000 --- a/packages/vc-export/src/vc-js/suites/KiltIntegritySuite.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import type { - DocumentLoader, - ExpansionMap, - purposes, - VerificationResult, -} from 'jsonld-signatures' -import type { JsonLdObj } from 'jsonld/jsonld-spec' -import type { CredentialDigestProof } from '../../types.js' - -import { verifyCredentialDigestProof } from '../../verificationUtils.js' -import { KiltAbstractSuite } from './KiltAbstractSuite.js' -import { KILT_CREDENTIAL_DIGEST_PROOF_TYPE } from '../../constants.js' - -export class KiltDisclosureSuite extends KiltAbstractSuite { - constructor() { - // vc-js complains when there is no verificationMethod - super({ - type: KILT_CREDENTIAL_DIGEST_PROOF_TYPE, - verificationMethod: '', - }) - } - - /** - * @inheritdoc - */ - public async verifyProof(options: { - proof: JsonLdObj - document?: JsonLdObj - purpose?: purposes.ProofPurpose - documentLoader?: DocumentLoader - expansionMap?: ExpansionMap - }): Promise { - try { - const { document, proof } = options - if (typeof document !== 'object') - throw new TypeError('Document must be a JsonLd object') - if (typeof proof !== 'object') - throw new TypeError('Proof must be a JsonLd object') - const compactedDoc = await this.compactDoc(document, options) - const compactedProof = await this.compactProof( - proof, - options - ) - const { verified, errors } = await verifyCredentialDigestProof( - compactedDoc, - compactedProof - ) - if (errors.length > 0) - return { - verified, - error: errors[0], - } - return { verified } - } catch (e: any) { - return { verified: false, error: e } - } - } -} diff --git a/packages/vc-export/src/vc-js/suites/KiltSignatureSuite.spec.ts b/packages/vc-export/src/vc-js/suites/KiltSignatureSuite.spec.ts deleted file mode 100644 index 6522b1f4b..000000000 --- a/packages/vc-export/src/vc-js/suites/KiltSignatureSuite.spec.ts +++ /dev/null @@ -1,201 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -/** - * @group unit/vc-js - */ - -import jsigs from 'jsonld-signatures' -import type { DocumentLoader, purposes } from 'jsonld-signatures' -import vcjs from 'vc-js' -import jsonld from 'jsonld' - -import { base58Encode, randomAsHex } from '@polkadot/util-crypto' - -import { DidResourceUri, DidUri } from '@kiltprotocol/types' -import * as Did from '@kiltprotocol/did' -import { Crypto } from '@kiltprotocol/utils' - -import { KiltSignatureSuite as Suite } from './KiltSignatureSuite' -import credential from '../examples/example-vc.json' -import { documentLoader as kiltDocumentLoader } from '../documentLoader' -import type { - IPublicKeyRecord, - SelfSignedProof, - VerifiableCredential, -} from '../../types' -import { KILT_SELF_SIGNED_PROOF_TYPE } from '../../constants' - -let suite: Suite -let purpose: purposes.ProofPurpose -let proof: SelfSignedProof -let documentLoader: DocumentLoader - -beforeAll(async () => { - suite = new Suite() - purpose = new jsigs.purposes.AssertionProofPurpose() - credential.proof.some((p) => { - if (p.type === KILT_SELF_SIGNED_PROOF_TYPE) { - proof = p as SelfSignedProof - return true - } - return false - }) - documentLoader = async (uri) => { - if (uri.startsWith('did:kilt:')) { - const { address, fragment, did } = Did.parse(uri as DidUri) - const key: IPublicKeyRecord = { - id: uri as DidResourceUri, - publicKeyBase58: base58Encode(Crypto.decodeAddress(address)), - controller: did, - type: 'Ed25519VerificationKey2018', - } - if (fragment) { - return { documentUrl: uri, document: key } - } - return { - documentUrl: uri, - document: { - id: did, - verificationMethod: [key], - }, - } - } - return kiltDocumentLoader(uri) - } -}) - -describe('jsigs', () => { - describe('proof matching', () => { - it('purpose matches compacted proof', async () => { - const compactedProof = await jsonld.compact( - { ...proof, '@context': credential['@context'] }, - 'https://w3id.org/security/v2', - { documentLoader, compactToRelative: false } - ) - expect(await purpose.match(compactedProof, {})).toBe(true) - expect( - await purpose.match(compactedProof, { - document: credential, - documentLoader, - }) - ).toBe(true) - }) - - it('suite matches proof', async () => { - const proofWithContext = { ...proof, '@context': credential['@context'] } - expect(await suite.matchProof({ proof: proofWithContext })).toBe(true) - expect( - await suite.matchProof({ - proof: proofWithContext, - document: credential, - purpose, - documentLoader, - }) - ).toBe(true) - }) - }) - - describe('verification', () => { - beforeAll(async () => { - suite = new Suite() - }) - - it('verifies Kilt Self Signed Proof', async () => { - expect( - await jsigs.verify(credential, { suite, purpose, documentLoader }) - ).toMatchObject({ verified: true }) - }) - }) - - describe('tamper detection', () => { - beforeAll(async () => { - suite = new Suite() - }) - - let tamperCred: VerifiableCredential - beforeEach(() => { - tamperCred = JSON.parse(JSON.stringify(credential)) - }) - - it('detects tampering', async () => { - tamperCred.id = tamperCred.id.replace('1', '2') - expect( - await jsigs.verify(tamperCred, { suite, purpose, documentLoader }) - ).toMatchObject({ verified: false }) - }) - - it('detects signer mismatch', async () => { - const verificationMethod = { - ...(proof.verificationMethod as IPublicKeyRecord), - publicKeyHex: randomAsHex(32), - } - tamperCred.proof = [{ ...proof, verificationMethod }] - expect( - await jsigs.verify(tamperCred, { suite, purpose, documentLoader }) - ).toMatchObject({ verified: false }) - }) - }) -}) - -describe('vc-js', () => { - describe('verification', () => { - beforeAll(async () => { - suite = new Suite() - }) - - it('verifies Kilt Self Signed Proof', async () => { - expect( - await vcjs.verifyCredential({ - credential, - suite, - purpose, - documentLoader, - }) - ).toMatchObject({ verified: true }) - }) - }) - - describe('tamper detection', () => { - beforeAll(async () => { - suite = new Suite() - }) - - let tamperCred: VerifiableCredential - beforeEach(() => { - tamperCred = JSON.parse(JSON.stringify(credential)) - }) - - it('detects tampering', async () => { - tamperCred.id = tamperCred.id.replace('1', '2') - expect( - await vcjs.verifyCredential({ - credential: tamperCred, - suite, - purpose, - documentLoader, - }) - ).toMatchObject({ verified: false }) - }) - - it('detects signer mismatch', async () => { - const verificationMethod = { - ...(proof.verificationMethod as IPublicKeyRecord), - publicKeyHex: randomAsHex(32), - } - tamperCred.proof = [{ ...proof, verificationMethod }] - expect( - await vcjs.verifyCredential({ - credential: tamperCred, - suite, - purpose, - documentLoader, - }) - ).toMatchObject({ verified: false }) - }) - }) -}) diff --git a/packages/vc-export/src/vc-js/suites/KiltSignatureSuite.ts b/packages/vc-export/src/vc-js/suites/KiltSignatureSuite.ts deleted file mode 100644 index 1e1b348ba..000000000 --- a/packages/vc-export/src/vc-js/suites/KiltSignatureSuite.ts +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import type { - DocumentLoader, - ExpansionMap, - purposes, - VerificationResult, -} from 'jsonld-signatures' -import type { JsonLdObj } from 'jsonld/jsonld-spec' -import type { SelfSignedProof } from '../../types.js' -import { verifySelfSignedProof } from '../../verificationUtils.js' -import { KiltAbstractSuite } from './KiltAbstractSuite.js' -import { KILT_SELF_SIGNED_PROOF_TYPE } from '../../constants.js' - -export class KiltSignatureSuite extends KiltAbstractSuite { - constructor() { - super({ type: KILT_SELF_SIGNED_PROOF_TYPE, verificationMethod: '' }) - } - - /** - * @inheritdoc - */ - public async verifyProof(options: { - proof: JsonLdObj - document: JsonLdObj - documentLoader: DocumentLoader - purpose?: purposes.ProofPurpose - expansionMap?: ExpansionMap - }): Promise { - try { - const { document, proof, documentLoader } = options - if (typeof document !== 'object') - throw new TypeError('Document must be a JsonLd object') - if (typeof proof !== 'object') - throw new TypeError('Proof must be a JsonLd object') - const compactedDoc = await this.compactDoc(document, options) - const compactedProof = await this.compactProof( - proof, - options - ) - const { verified, errors } = await verifySelfSignedProof( - compactedDoc, - compactedProof, - documentLoader - ) - if (errors.length > 0) - return { - verified, - error: errors[0], - } - return { verified } - } catch (e: any) { - return { verified: false, error: e } - } - } -} diff --git a/packages/vc-export/src/vc-js/suites/Sr25519Signature2020.spec.ts b/packages/vc-export/src/vc-js/suites/Sr25519Signature2020.spec.ts new file mode 100644 index 000000000..85847f46f --- /dev/null +++ b/packages/vc-export/src/vc-js/suites/Sr25519Signature2020.spec.ts @@ -0,0 +1,159 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/** + * @group unit/vc-js + */ + +// @ts-expect-error not a typescript module +import * as vcjs from '@digitalbazaar/vc' + +import { init } from '@kiltprotocol/core' +import * as Did from '@kiltprotocol/did' +import { Crypto } from '@kiltprotocol/utils' +import type { + ConformingDidDocument, + DidUri, + KiltKeyringPair, +} from '@kiltprotocol/types' + +import { + combineDocumentLoaders, + kiltContextsLoader, + kiltDidLoader, +} from '../documentLoader.js' +import { W3C_CREDENTIAL_CONTEXT_URL } from '../../constants.js' +import { Sr25519Signature2020 } from './Sr25519Signature2020.js' +import { Sr25519VerificationKey2020 } from './Sr25519VerificationKey.js' +import ingosCredential from '../examples/ICredentialExample.json' +import type { VerifiableCredential } from '../../types.js' + +// is not needed and imports a dependency that does not work in node 18 +jest.mock('@digitalbazaar/http-client', () => ({})) + +jest.mock('@kiltprotocol/did', () => ({ + ...jest.requireActual('@kiltprotocol/did'), + resolveCompliant: jest.fn(), +})) + +const documentLoader = combineDocumentLoaders([ + kiltDidLoader, + kiltContextsLoader, + vcjs.defaultDocumentLoader, +]) + +export async function makeFakeDid() { + await init() + const keypair = Crypto.makeKeypairFromUri('//Ingo', 'sr25519') + const didDocument = Did.exportToDidDocument( + { + uri: ingosCredential.claim.owner as DidUri, + authentication: [ + { + ...keypair, + id: '#authentication', + }, + ], + assertionMethod: [{ ...keypair, id: '#assertion' }], + }, + 'application/json' + ) + jest.mocked(Did.resolveCompliant).mockImplementation(async (did) => { + if (did.includes('light')) { + return { + didDocument: Did.exportToDidDocument( + Did.parseDocumentFromLightDid(did, false), + 'application/json' + ), + didDocumentMetadata: {}, + didResolutionMetadata: {}, + } + } + if (did.startsWith(didDocument.id)) { + return { + didDocument, + didDocumentMetadata: {}, + didResolutionMetadata: {}, + } + } + return { + didDocumentMetadata: {}, + didResolutionMetadata: { error: 'notFound' }, + } + }) + return { didDocument, keypair } +} + +let didDocument: ConformingDidDocument +let keypair: KiltKeyringPair + +beforeAll(async () => { + ;({ didDocument, keypair } = await makeFakeDid()) +}) + +it('issues and verifies a signed credential', async () => { + const signer = { + sign: async ({ data }: { data: Uint8Array }) => keypair.sign(data), + id: didDocument.assertionMethod![0], + } + const attestationSigner = new Sr25519Signature2020({ signer }) + + const credential = { + '@context': [W3C_CREDENTIAL_CONTEXT_URL] as any, + type: ['VerifiableCredential'], + credentialSubject: { + '@context': { + '@vocab': `kilt:ctype:${ingosCredential.claim.cTypeHash}#`, + }, + id: ingosCredential.claim.owner, + ...ingosCredential.claim.contents, + }, + issuer: ingosCredential.claim.owner, + } as Partial + + const verifiableCredential = await vcjs.issue({ + credential, + suite: attestationSigner, + documentLoader, + }) + + let result = await vcjs.verifyCredential({ + credential: verifiableCredential, + suite: new Sr25519Signature2020(), + documentLoader, + }) + expect(result).not.toHaveProperty('error') + expect(result).toHaveProperty('verified', true) + + result = await vcjs.verifyCredential({ + credential: verifiableCredential, + suite: new Sr25519Signature2020({ + key: new Sr25519VerificationKey2020({ + ...didDocument.verificationMethod.find(({ id }) => + id.includes('assertion') + )!, + }), + }), + documentLoader, + }) + expect(result).not.toHaveProperty('error') + expect(result).toHaveProperty('verified', true) + + result = await vcjs.verifyCredential({ + credential: verifiableCredential, + suite: new Sr25519Signature2020({ + key: new Sr25519VerificationKey2020({ + ...didDocument.verificationMethod.find(({ id }) => + id.includes('authentication') + )!, + }), + }), + documentLoader, + }) + expect(result).toHaveProperty('error') + expect(result).toHaveProperty('verified', false) +}) diff --git a/packages/vc-export/src/vc-js/suites/Sr25519Signature2020.ts b/packages/vc-export/src/vc-js/suites/Sr25519Signature2020.ts new file mode 100644 index 000000000..08caaef45 --- /dev/null +++ b/packages/vc-export/src/vc-js/suites/Sr25519Signature2020.ts @@ -0,0 +1,275 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { base58Decode, base58Encode } from '@polkadot/util-crypto' + +// @ts-expect-error not a typescript module +import jsigs from 'jsonld-signatures' // cjs module + +import { KILT_CREDENTIAL_CONTEXT_URL } from '../../constants.js' +import { context } from '../context/context.js' +import { Sr25519VerificationKey2020 } from './Sr25519VerificationKey.js' +import { includesContext } from './utils.js' +import type { JSigsSigner, JSigsVerifier } from './types.js' +import type { DocumentLoader, JsonLdObj } from '../documentLoader.js' +import type { Proof } from '../../types.js' + +/* eslint-disable class-methods-use-this */ +/* eslint-disable no-use-before-define */ +/* eslint-disable jsdoc/require-description-complete-sentence */ + +const LinkedDataSignature = jsigs.suites.LinkedDataSignature as { + new (props: any): { + signer?: JSigsSigner + verifier?: JSigsVerifier + key?: Sr25519VerificationKey2020 + LDKeyClass: typeof Sr25519VerificationKey2020 + matchProof( + ...args: Parameters + ): ReturnType + } +} + +const SUITE_CONTEXT_URL = KILT_CREDENTIAL_CONTEXT_URL +// multibase base58-btc header +const MULTIBASE_BASE58BTC_HEADER = 'z' + +interface VerificationMethod { + verificationMethod: Record +} +interface Options extends VerificationMethod { + proof: Proof & Partial + document: JsonLdObj + purpose: any + documentLoader: DocumentLoader + verifyData: Uint8Array +} + +export class Sr25519Signature2020 extends LinkedDataSignature { + public static readonly CONTEXT_URL = SUITE_CONTEXT_URL + public static readonly CONTEXT = context[SUITE_CONTEXT_URL] + + /** + * Cryptographic suite to produce and verify Sr25519Signature2020 linked data signatures. + * This is modelled after the Ed25519Signature2020 suite (https://w3id.org/security/suites/ed25519-2020/v1) but uses the sr25519 signature scheme common in the polkadot ecosystem. + * + * @param options - Options hashmap. + * + * Either a `key` OR at least one of `signer`/`verifier` is required. + * + * @param [options.key] - An optional key object (containing an + * `id` property, and either `signer` or `verifier`, depending on the + * intended operation. Useful for when the application is managing keys + * itself (when using a KMS, you never have access to the private key, + * and so should use the `signer` param instead). + * @param [options.signer] - Signer function that returns an + * object with an async sign() method. This is useful when interfacing + * with a KMS (since you don't get access to the private key and its + * `signer()`, the KMS client gives you only the signer function to use). + * @param [options.verifier] - Verifier function that returns + * an object with an async `verify()` method. Useful when working with a + * KMS-provided verifier function. + * + * Advanced optional parameters and overrides. + * + * @param [options.proof] - A JSON-LD document with options to use + * for the `proof` node (e.g. any other custom fields can be provided here + * using a context different from security-v2). + * @param [options.date] - Signing date to use if not passed. + * @param [options.useNativeCanonize] - Whether to use a native + * canonize algorithm. + */ + constructor({ + key, + signer, + verifier, + proof, + date, + useNativeCanonize, + }: { + key?: Sr25519VerificationKey2020 + signer?: JSigsSigner + verifier?: JSigsVerifier + proof?: Proof + date?: string | Date + useNativeCanonize?: boolean + } = {}) { + super({ + type: 'Sr25519Signature2020', + LDKeyClass: Sr25519VerificationKey2020, + contextUrl: SUITE_CONTEXT_URL, + key, + signer, + verifier, + proof, + date, + useNativeCanonize, + }) + } + + /** + * Adds a signature (proofValue) field to the proof object. Called by + * LinkedDataSignature.createProof(). + * + * @param options - The options to use. + * @param options.verifyData - Data to be signed (extracted + * from document, according to the suite's spec). + * @param options.proof - Proof object (containing the proofPurpose, + * verificationMethod, etc). + * + * @returns Resolves with the proof containing the signature + * value. + */ + async sign({ + verifyData, + proof, + }: Pick): Promise< + { proofValue: string } & Proof + > { + if (!(this.signer && typeof this.signer.sign === 'function')) { + throw new Error('A signer API has not been specified.') + } + + const signatureBytes = await this.signer.sign({ data: verifyData }) + const proofValue = MULTIBASE_BASE58BTC_HEADER + base58Encode(signatureBytes) + + return { ...proof, proofValue } + } + + /** + * Verifies the proof signature against the given data. + * + * @param options - The options to use. + * @param options.verifyData - Canonicalized hashed data. + * @param options.verificationMethod - Key object. + * @param options.proof - The proof to be verified. + * + * @returns Resolves with the verification result. + */ + async verifySignature({ + verifyData, + verificationMethod, + proof, + }: Pick< + Options, + 'proof' | 'verifyData' | 'verificationMethod' + >): Promise { + const { proofValue } = proof as Proof & { proofValue: string } + if (!(Boolean(proofValue) && typeof proofValue === 'string')) { + throw new TypeError( + 'The proof does not include a valid "proofValue" property.' + ) + } + if (proofValue[0] !== MULTIBASE_BASE58BTC_HEADER) { + throw new Error('Only base58btc multibase encoding is supported.') + } + const signatureBytes = base58Decode(proofValue.substring(1)) + + const verifier = + this.verifier ?? + (await this.LDKeyClass.from(verificationMethod as any)).verifier() + + return verifier.verify({ + data: verifyData, + signature: signatureBytes, + }) + } + + async assertVerificationMethod({ + verificationMethod, + }: Pick): Promise { + let contextUrl + if (verificationMethod.type === 'Sr25519VerificationKey2020') { + contextUrl = SUITE_CONTEXT_URL + } else { + throw new Error(`Unsupported key type "${verificationMethod.type}".`) + } + if ( + !includesContext({ + document: verificationMethod, + contextUrl, + }) + ) { + // For DID Documents, since keys do not have their own contexts, + // the suite context is usually provided by the documentLoader logic + throw new TypeError( + `The verification method (key) must contain "${contextUrl}" context.` + ) + } + + // ensure verification method has not been revoked + if (verificationMethod.revoked !== undefined) { + throw new Error('The verification method has been revoked.') + } + } + + async getVerificationMethod({ + proof, + documentLoader, + }: Pick): Promise { + if (typeof this.key === 'object') { + // This happens most often during sign() operations. For verify(), + // the expectation is that the verification method will be fetched + // by the documentLoader (below), not provided as a `key` parameter. + return this.key.export({ publicKey: true }) + } + + const verificationMethodId = + typeof proof.verificationMethod === 'object' + ? proof.verificationMethod.id + : proof.verificationMethod + + if (typeof verificationMethodId !== 'string') { + throw new Error('No valid "verificationMethod" found in proof.') + } + + const { document } = await documentLoader(verificationMethodId) + + const verificationMethod = + typeof document === 'string' ? JSON.parse(document) : document + + await this.assertVerificationMethod({ verificationMethod }) + const verificationKey = ( + await Sr25519VerificationKey2020.from({ + ...verificationMethod, + }) + ).export({ publicKey: true, includeContext: true }) + return verificationKey + } + + async matchProof({ + proof, + document, + purpose, + documentLoader, + }: Pick & + Partial>): Promise { + if (!includesContext({ document, contextUrl: SUITE_CONTEXT_URL })) { + return false + } + + if ( + (await super.matchProof({ proof, document, purpose, documentLoader })) !== + true + ) { + return false + } + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + if (!this.key) { + // no key specified, so assume this suite matches and it can be retrieved + return true + } + + const { verificationMethod } = proof + + // only match if the key specified matches the one in the proof + if (typeof verificationMethod === 'object') { + return verificationMethod.id === this.key.id + } + return verificationMethod === this.key.id + } +} diff --git a/packages/vc-export/src/vc-js/suites/Sr25519VerificationKey.ts b/packages/vc-export/src/vc-js/suites/Sr25519VerificationKey.ts new file mode 100644 index 000000000..87a33a89e --- /dev/null +++ b/packages/vc-export/src/vc-js/suites/Sr25519VerificationKey.ts @@ -0,0 +1,350 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { + base58Decode, + base58Encode, + randomAsU8a, + sr25519PairFromSeed, + sr25519Sign, + sr25519Verify, +} from '@polkadot/util-crypto' +import { u8aEq } from '@polkadot/util' + +// @ts-expect-error not a typescript module +import cryptold from 'crypto-ld' // cjs module +import type { JSigsSigner, JSigsVerifier } from './types.js' + +import { KILT_CREDENTIAL_CONTEXT_URL } from '../../constants.js' + +interface LDKeyPairProps { + id?: string + controller?: string + revoked?: string +} +const { LDKeyPair } = cryptold as { + LDKeyPair: { + new (props: LDKeyPairProps): LDKeyPairProps + } +} + +/* eslint-disable no-use-before-define */ +export type ExportedKey = Pick & + Partial< + Pick< + Sr25519VerificationKey2020, + 'controller' | 'id' | 'privateKeyBase58' | 'publicKeyBase58' | 'revoked' + > + > & { '@context'?: string } + +const SUITE_ID = 'Sr25519VerificationKey2020' + +const Sr25519MulticodecPrefix = new Uint8Array([0xef, 0x01]) + +/* eslint-disable no-use-before-define */ +/* eslint-disable jsdoc/require-param */ +/* eslint-disable jsdoc/check-param-names */ + +export class Sr25519VerificationKey2020 extends LDKeyPair { + // Used by CryptoLD harness for dispatching. + public static readonly suite = SUITE_ID + // Used by CryptoLD harness's fromKeyId() method. + public static readonly SUITE_CONTEXT = KILT_CREDENTIAL_CONTEXT_URL + + public type: string + public publicKeyBase58: string + public privateKeyBase58?: string + + /** + * An implementation of the Sr25519VerificationKey spec, for use with + * Linked Data Proofs. + * + * @param options - Options hashmap. + * @param options.publicKeyBase58 - Base58btc encoded Public Key. + * @param [options.controller] - Controller DID or document url. + * @param [options.id] - The key ID. + * @param [options.privateKeyBase58] - Base58btc Private Key. + * @param [options.revoked] - Timestamp of when the key has been + * revoked, in RFC3339 format. If not present, the key itself is considered + * not revoked. Note that this mechanism is slightly different than DID + * Document key revocation, where a DID controller can revoke a key from + * that DID by removing it from the DID Document. + */ + constructor(options: { + publicKeyBase58: string + controller?: string + id?: string + privateKeyBase58?: string + revoked?: string + }) { + super(options) + this.type = SUITE_ID + this.publicKeyBase58 = options.publicKeyBase58 + if (typeof this.publicKeyBase58 !== 'string') { + throw new TypeError('The "publicKeyBase58" property is required.') + } + this.privateKeyBase58 = options.privateKeyBase58 + } + + /** + * Generates a KeyPair with an optional deterministic seed. + * + * @param [options={}] - See LDKeyPair docstring for full list. + * @param [options.seed] - + * a 32-byte array seed for a deterministic key. + * + * @returns Generates a key pair. + */ + static async generate( + options: { + seed?: Uint8Array | string + controller?: string + id?: string + revoked?: string + } = {} + ): Promise { + const keyObject = sr25519PairFromSeed(options.seed ?? randomAsU8a(32)) + + return new Sr25519VerificationKey2020({ + publicKeyBase58: base58Encode(keyObject.publicKey), + privateKeyBase58: base58Encode(keyObject.secretKey), + ...options, + }) + } + + static async from( + ...options: ConstructorParameters + ): Promise { + return new Sr25519VerificationKey2020(...options) + } + + /** + * Returns a signer object for use with Linked Data Proofs. + * + * @example + * > const signer = keyPair.signer(); + * > signer + * { sign: [AsyncFunction: sign] } + * > signer.sign({data}); + * + * @returns A signer for the json-ld block. + */ + signer(): JSigsSigner { + const signer = Sr25519SignerFactory(this) + return { ...signer, id: this.id } + } + + /** + * Returns a verifier object for use with signature suites. + * + * @example + * > const verifier = keyPair.verifier(); + * > verifier + * { verify: [AsyncFunction: verify] } + * > verifier.verify(key); + * + * @returns Used to verify jsonld-signatures. + */ + verifier(): JSigsVerifier { + const verifier = Sr25519VerifierFactory(this) + return { ...verifier, id: this.id } + } + + /** + * Exports the serialized representation of the KeyPair + * and other information that json-ld Signatures can use to form a proof. + * + * @param [options={}] - Options hashmap. + * @param [options.publicKey] - Export public key material? + * @param [options.privateKey] - Export private key material? + * @param [options.includeContext] - Include JSON-LD context? + * + * @returns A public key object + * information used in verification methods by signatures. + */ + export({ + publicKey = false, + privateKey = false, + includeContext = false, + } = {}): ExportedKey { + if (!(publicKey || privateKey)) { + throw new TypeError( + 'Export requires specifying either "publicKey" or "privateKey".' + ) + } + const exportedKey: ExportedKey = { + id: this.id, + type: this.type, + } + if (includeContext) { + exportedKey['@context'] = Sr25519VerificationKey2020.SUITE_CONTEXT + } + if (typeof this.controller !== 'undefined') { + exportedKey.controller = this.controller + } + if (publicKey) { + exportedKey.publicKeyBase58 = this.publicKeyBase58 + } + if (privateKey) { + exportedKey.privateKeyBase58 = this.privateKeyBase58 + } + if (typeof this.revoked === 'string') { + exportedKey.revoked = this.revoked + } + return exportedKey + } + + /** + * Generates and returns a multiformats encoded sr25519 public key + * fingerprint (for use with cryptonyms, for example). + * + * @see https://github.com/multiformats/multicodec + * + * @param publicKey Metadata object containing the public key material. + * @param publicKey.publicKeyBase58 - The base58 encoded public key material. + * + * @returns The fingerprint. + */ + static fingerprintFromPublicKey({ + publicKeyBase58, + }: { + publicKeyBase58: string + }): string { + // sr25519 cryptonyms are multicodec encoded values, specifically: + // (multicodec sr25519-pub 0xef01 + key bytes) + + const pubkeyBytes = base58Decode(publicKeyBase58) + + const buffer = new Uint8Array(2 + pubkeyBytes.length) + buffer.set(Sr25519MulticodecPrefix) + buffer.set(pubkeyBytes, 2) + // prefix with `z` to indicate multi-base base58btc encoding + return `z${base58Encode(buffer)}` + } + + /** + * Generates and returns a multiformats encoded sr25519 public key + * fingerprint (for use with cryptonyms, for example). + * + * @see https://github.com/multiformats/multicodec + * + * @returns The fingerprint. + */ + fingerprint(): string { + const { publicKeyBase58 } = this + return Sr25519VerificationKey2020.fingerprintFromPublicKey({ + publicKeyBase58, + }) + } + + /** + * Tests whether the fingerprint was generated from a given key pair. + * + * @example + * > srKeyPair.verifyFingerprint({fingerprint: 'z2S2Q6MkaFJewa'}); + * {valid: true}; + * @param publicKey - A Base58 public key. + * @param publicKey.fingerprint The key's fingerprint. + * + * @returns An object indicating valid is true or false. + */ + verifyFingerprint({ fingerprint }: { fingerprint?: string } = {}): object { + // fingerprint should have `z` prefix indicating + // that it's multi-base encoded + if (!(typeof fingerprint === 'string' && fingerprint[0] === 'z')) { + return { + error: new Error('`fingerprint` must be a multibase encoded string.'), + valid: false, + } + } + let fingerprintBuffer + try { + fingerprintBuffer = base58Decode(fingerprint.slice(1)) + } catch (e) { + return { error: e, valid: false } + } + let publicKeyBuffer + try { + publicKeyBuffer = base58Decode(this.publicKeyBase58) + } catch (e) { + return { error: e, valid: false } + } + + // validate the first two multicodec bytes 0xef01 + const valid = + fingerprintBuffer[0] === Sr25519MulticodecPrefix[0] && + fingerprintBuffer[1] === Sr25519MulticodecPrefix[1] && + u8aEq(publicKeyBuffer, fingerprintBuffer.slice(2)) + if (!valid) { + return { + error: new Error('The fingerprint does not match the public key.'), + valid: false, + } + } + return { valid } + } +} + +/** + * Returns an object with an async sign function. + * The sign function is bound to the KeyPair + * and then returned by the KeyPair's signer method. + * + * @param key - A key pair instance. + * @example + * > const mySigner = Sr25519SignerFactory(edKeyPair); + * > await mySigner.sign({data}) + * + * @returns An object with an async function sign + * using the private key passed in. + */ +function Sr25519SignerFactory(key: Sr25519VerificationKey2020): { + sign: (data: { data: Uint8Array }) => Promise +} { + if (typeof key.privateKeyBase58 !== 'string') { + return { + async sign() { + throw new Error('No private key to sign with.') + }, + } + } + const secretKey = base58Decode(key.privateKeyBase58) + const publicKey = base58Decode(key.publicKeyBase58) + return { + async sign({ data }) { + const signature = sr25519Sign(data, { secretKey, publicKey }) + return signature + }, + } +} + +/** + * Returns an object with an async verify function. + * The verify function is bound to the KeyPair + * and then returned by the KeyPair's verifier method. + * + * @param key - An Sr25519VerificationKey2020. + * @example + * > const myVerifier = Sr25519Verifier(edKeyPair); + * > await myVerifier.verify({data, signature}); + * + * @returns An async verifier specific + * to the key passed in. + */ +function Sr25519VerifierFactory(key: Sr25519VerificationKey2020): { + verify: (data: { + data: Uint8Array + signature: Uint8Array + }) => Promise +} { + const publicKey = base58Decode(key.publicKeyBase58) + return { + async verify({ data, signature }) { + return sr25519Verify(data, signature, publicKey) + }, + } +} diff --git a/packages/vc-export/src/vc-js/suites/Sr25519VerificationKey2020.spec.ts b/packages/vc-export/src/vc-js/suites/Sr25519VerificationKey2020.spec.ts new file mode 100644 index 000000000..a4afafa9a --- /dev/null +++ b/packages/vc-export/src/vc-js/suites/Sr25519VerificationKey2020.spec.ts @@ -0,0 +1,64 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/** + * @group unit/vc-js + */ + +import { Keyring } from '@kiltprotocol/utils' +import { hexToU8a } from '@polkadot/util' +import { randomAsU8a, signatureVerify } from '@polkadot/util-crypto' +import { Sr25519VerificationKey2020 } from './Sr25519VerificationKey' + +it('generates a key', async () => { + const seed = hexToU8a( + '0xe062a9b1550a909fd54f72b9cca8d3e0a67659ea458a00ef16c8eaa2bef2300c' + ) + const key = await Sr25519VerificationKey2020.generate({ + seed, + controller: 'Alice', + id: 'Alice/key', + }) + + const fingerprint = key.fingerprint() + expect(fingerprint).toMatchInlineSnapshot( + `"z6QNpeAzjiWieArycF5BRtQcEu17GQmxGKPtmHqfeTXRtPkb"` + ) + expect(key.verifyFingerprint({ fingerprint })).toMatchObject({ + valid: true, + }) + + expect( + key.export({ publicKey: true, privateKey: true, includeContext: true }) + ).toMatchInlineSnapshot(` + Object { + "@context": "https://www.kilt.io/contexts/credentials", + "controller": "Alice", + "id": "Alice/key", + "privateKeyBase58": "5L1QSY55brRkFPwJfNWx2oB8KWiABC2LiokHKXkPPuB8zatA1K4vVTN5MYLiJ2Mbi2f3AG1HRVeq7XmacTEfcxkZ", + "publicKeyBase58": "5dkC1bP8pTq4TXJcSUYzLnn5Vz2dRt18TCYF8YvSZUwy", + "type": "Sr25519VerificationKey2020", + } + `) +}) + +it('creates a valid sr25519 signature', async () => { + const seed = hexToU8a( + '0xe062a9b1550a909fd54f72b9cca8d3e0a67659ea458a00ef16c8eaa2bef2300c' + ) + const key = await Sr25519VerificationKey2020.generate({ seed }) + const data = randomAsU8a() + const signature = await key.signer().sign({ data }) + await expect(key.verifier().verify({ data, signature })).resolves.toBe(true) + expect( + signatureVerify( + data, + signature, + new Keyring({ type: 'sr25519' }).addFromSeed(seed).address + ).isValid + ).toBe(true) +}) diff --git a/packages/vc-export/src/vc-js/suites/index.ts b/packages/vc-export/src/vc-js/suites/index.ts index 20c721a8f..a280d2797 100644 --- a/packages/vc-export/src/vc-js/suites/index.ts +++ b/packages/vc-export/src/vc-js/suites/index.ts @@ -5,6 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -export * as KiltIntegritySuite from './KiltIntegritySuite.js' -export * as KiltSignatureSuite from './KiltSignatureSuite.js' -export * as KiltAttestedSuite from './KiltAttestedSuite.js' +export * from './KiltAttestationProofV1.js' +export * from './Sr25519Signature2020.js' +export * from './Sr25519VerificationKey.js' diff --git a/packages/vc-export/src/vc-js/suites/types.ts b/packages/vc-export/src/vc-js/suites/types.ts new file mode 100644 index 000000000..d14ae644d --- /dev/null +++ b/packages/vc-export/src/vc-js/suites/types.ts @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import type { DidUri } from '@kiltprotocol/types' + +export interface JSigsSigner { + sign: (data: { data: Uint8Array }) => Promise + id?: string +} + +export interface JSigsVerifier { + verify: (data: { + data: Uint8Array + signature: Uint8Array + }) => Promise + id?: string +} + +export interface JSigsVerificationResult { + verified: boolean + error?: Error + purposeResult?: { verified: boolean; error?: Error } + verificationMethod?: { id: string; type: string; controller: DidUri } +} diff --git a/packages/vc-export/src/vc-js/suites/utils.ts b/packages/vc-export/src/vc-js/suites/utils.ts new file mode 100644 index 000000000..0b9d9dc19 --- /dev/null +++ b/packages/vc-export/src/vc-js/suites/utils.ts @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import type { JsonLdObj } from '../documentLoader.js' + +/** + * Tests whether a provided JSON-LD document includes a context url in its + * `@context` property. + * + * @param options - Options hashmap. + * @param options.document - A JSON-LD document. + * @param options.contextUrl - A context url. + * + * @returns Returns true if document includes context. + */ +export function includesContext({ + document, + contextUrl, +}: { + document?: JsonLdObj + contextUrl: string +}): boolean { + const ctx = document?.['@context'] + return ctx === contextUrl || (Array.isArray(ctx) && ctx.includes(contextUrl)) +} diff --git a/packages/vc-export/src/vc-js/types.ts b/packages/vc-export/src/vc-js/types.ts new file mode 100644 index 000000000..083e851da --- /dev/null +++ b/packages/vc-export/src/vc-js/types.ts @@ -0,0 +1,8 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +export * from './suites/types.js' diff --git a/packages/vc-export/src/vc-js/types/crypto-ld.d.ts b/packages/vc-export/src/vc-js/types/crypto-ld.d.ts deleted file mode 100644 index f2e5e247b..000000000 --- a/packages/vc-export/src/vc-js/types/crypto-ld.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module 'crypto-ld' diff --git a/packages/vc-export/src/vc-js/types/jsonld-signatures.d.ts b/packages/vc-export/src/vc-js/types/jsonld-signatures.d.ts deleted file mode 100644 index e814ef81a..000000000 --- a/packages/vc-export/src/vc-js/types/jsonld-signatures.d.ts +++ /dev/null @@ -1,74 +0,0 @@ -declare module 'jsonld-signatures' { - import type { JsonLdObj, RemoteDocument, Url } from 'jsonld/jsonld-spec' - type Proof = JsonLdObj - interface VerificationResult { - verified: boolean - error?: Error - purposeResult?: { verified: boolean; error?: Error } - } - type DocumentLoader = (url: Url) => Promise - type ExpansionMap = (info: any) => any - interface Signer { - sign: ({ data }: { data: Uint8Array }) => Promise - } - function verify( - document: JsonLdObj, - options: { - suite: suites.LinkedDataProof | suites.LinkedDataProof[] - purpose: purposes.ProofPurpose - documentLoader?: DocumentLoader - expansionMap?: ExpansionMap - } - ): Promise<{ verified: boolean; error?: Error; results: unknown[] }> - function sign( - document: JsonLdObj, - options: { - suite: suites.LinkedDataProof | suites.LinkedDataProof[] - purpose: purposes.ProofPurpose - documentLoader?: DocumentLoader - expansionMap?: ExpansionMap - } - ): Promise - export namespace purposes { - export class ProofPurpose { - term: string - date?: Date | string | number - maxTimestampDelta?: number - match( - proof: Proof, - options: { - document?: JsonLdObj - documentLoader?: DocumentLoader - expansionMap?: ExpansionMap - } - ): Promise - } - export class AssertionProofPurpose extends ProofPurpose {} - } - export namespace suites { - abstract class LinkedDataProof { - type: string - constructor(options: { type: string }) - abstract createProof(options: { - document: JsonLdObj - purpose?: purposes.ProofPurpose - documentLoader?: DocumentLoader - expansionMap?: ExpansionMap - }): Promise - abstract verifyProof(options: { - proof: Proof - document?: JsonLdObj - purpose?: purposes.ProofPurpose - documentLoader?: DocumentLoader - expansionMap?: ExpansionMap - }): Promise - matchProof(options: { - proof: Proof - document?: JsonLdObj - purpose?: purposes.ProofPurpose - documentLoader?: DocumentLoader - expansionMap?: ExpansionMap - }): Promise - } - } -} diff --git a/packages/vc-export/src/vc-js/types/vc.d.ts b/packages/vc-export/src/vc-js/types/vc.d.ts deleted file mode 100644 index 21a5da75d..000000000 --- a/packages/vc-export/src/vc-js/types/vc.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -declare module 'vc-js' { - import type { - DocumentLoader, - ExpansionMap, - purposes, - suites, - } from 'jsonld-signatures' - import type { JsonLdObj } from 'jsonld/jsonld-spec' - const defaultDocumentLoader: DocumentLoader - function verifyCredential(options: { - credential: JsonLdObj - suite?: suites.LinkedDataProof | suites.LinkedDataProof[] - purpose?: purposes.ProofPurpose - documentLoader?: DocumentLoader - expansionMap?: ExpansionMap - }): Promise<{ verified: boolean; results: unknown[]; error?: Error }> - function issue(options: { - credential: JsonLdObj - suite?: suites.LinkedDataProof | suites.LinkedDataProof[] - purpose?: purposes.ProofPurpose - documentLoader?: DocumentLoader - expansionMap?: ExpansionMap - compactProof?: boolean - }): Promise -} diff --git a/packages/vc-export/src/verificationUtils.ts b/packages/vc-export/src/verificationUtils.ts deleted file mode 100644 index 84a6fdf96..000000000 --- a/packages/vc-export/src/verificationUtils.ts +++ /dev/null @@ -1,331 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -/* eslint-disable max-classes-per-file */ - -import { u8aConcat, hexToU8a, u8aToHex } from '@polkadot/util' -import { - signatureVerify, - blake2AsHex, - base58Decode, -} from '@polkadot/util-crypto' -import jsonld from 'jsonld' -import { ApiPromise } from '@polkadot/api' -import { Attestation, CType } from '@kiltprotocol/core' -import { Crypto, JsonSchema, SDKErrors } from '@kiltprotocol/utils' -import type { DocumentLoader } from 'jsonld-signatures' -import { verificationKeyTypesMap } from '@kiltprotocol/types' -import { - KILT_SELF_SIGNED_PROOF_TYPE, - KILT_ATTESTED_PROOF_TYPE, - KILT_CREDENTIAL_DIGEST_PROOF_TYPE, -} from './constants.js' -import type { - VerifiableCredential, - SelfSignedProof, - AttestedProof, - CredentialDigestProof, - IPublicKeyRecord, -} from './types.js' -import { fromCredentialIRI } from './exportToVerifiableCredential.js' - -export interface VerificationResult { - verified: boolean - errors: Error[] -} - -export type AttestationStatus = 'valid' | 'invalid' | 'revoked' | 'unknown' - -export interface AttestationVerificationResult extends VerificationResult { - status: AttestationStatus -} - -export class CredentialMalformedError extends SDKErrors.SDKError { - constructor(reason: string) { - super(`Credential malformed: ${reason}`) - } -} - -export class ProofMalformedError extends SDKErrors.SDKError { - constructor(reason: string) { - super(`Proof malformed: ${reason}`) - } -} - -/** - * Verifies a KILT self-signed proof (claimer signature) against a KILT style Verifiable Credential. - * This entails computing the root hash from the hashes contained in the `protected` section of the credentialSubject. - * The resulting hash is then verified against the signature and public key contained in the proof (the latter - * could be a DID URI). It is also expected to by identical to the credential id. - * - * @param credential Verifiable Credential to verify proof against. - * @param proof KILT self-signed proof object. - * @param documentLoader Must be able to KILT DID fragments (i.e. The key reference). - * @returns Object indicating whether proof could be verified. - */ -export async function verifySelfSignedProof( - credential: VerifiableCredential, - proof: SelfSignedProof, - documentLoader: DocumentLoader -): Promise { - const result: VerificationResult = { verified: true, errors: [] } - try { - // check proof - const type = proof['@type'] ?? proof.type - if (type !== KILT_SELF_SIGNED_PROOF_TYPE) - throw new Error('Proof type mismatch') - if (!proof.signature) throw new ProofMalformedError('signature missing') - let { verificationMethod } = proof - // we always fetch the verification method to make sure the key is in fact associated with the DID - if (typeof verificationMethod !== 'string') { - verificationMethod = verificationMethod.id - } - if (typeof verificationMethod !== 'string') { - throw new Error('verificationMethod not understood') - } - if (typeof documentLoader !== 'function') { - throw new Error('did you select an appropriate document loader?') - } - const dereferenced = await documentLoader(verificationMethod) - if (!('document' in dereferenced)) { - throw new Error( - 'verificationMethod could not be dereferenced; did you select an appropriate document loader?' - ) - } - verificationMethod = dereferenced.document as IPublicKeyRecord - - const credentialOwner = - credential.credentialSubject.id ?? credential.credentialSubject['@id'] - if (verificationMethod.controller !== credentialOwner) - throw new Error('Credential subject is not owner of signing key') - const keyType = verificationMethod.type ?? verificationMethod['@type'] - if (!Object.values(verificationKeyTypesMap).includes(keyType)) - throw new ProofMalformedError( - `Signature type unknown; expected one of ${JSON.stringify( - Object.values(verificationKeyTypesMap) - )}, got "${verificationMethod.type}"` - ) - const signerPubKey = verificationMethod.publicKeyBase58 - if (typeof signerPubKey !== 'string') - throw new Error('Signer key is missing publicKeyBase58 property') - - const rootHash = fromCredentialIRI(credential.id) - // validate signature over root hash - // signatureVerify can handle all required signature types out of the box - const verification = signatureVerify( - rootHash, - proof.signature, - base58Decode(signerPubKey) - ) - if ( - !( - verification.isValid && - Object.values(verificationKeyTypesMap).includes(keyType) - ) - ) { - throw new Error('Signature could not be verified') - } - return result - } catch (e) { - result.verified = false - result.errors = [e as Error] - return result - } -} - -/** - * Verifies a KILT attestation proof by querying data from the KILT blockchain. - * This includes querying the KILT blockchain with the credential id, which returns an attestation record if attested. - * This record is then compared against attester address and delegation id (the latter of which is taken directly from the credential). - * - * @param credential Verifiable Credential to verify proof against. - * @param proof KILT self-signed proof object. - * @param api The API connection. - * @returns Object indicating whether proof could be verified. - */ -export async function verifyAttestedProof( - credential: VerifiableCredential, - proof: AttestedProof, - api: ApiPromise -): Promise { - let status: AttestationStatus = 'unknown' - try { - // check proof - const type = proof['@type'] ?? proof.type - if (type !== KILT_ATTESTED_PROOF_TYPE) - throw new Error('Proof type mismatch') - const { attester } = proof - if (typeof attester !== 'string' || !attester) - throw new ProofMalformedError('Attester DID not understood') - if (attester !== credential.issuer) - throw new ProofMalformedError( - 'Attester DID not matching credential issuer' - ) - if (typeof credential.id !== 'string' || !credential.id) - throw new CredentialMalformedError( - 'Claim id (=claim hash) missing / invalid' - ) - const claimHash = fromCredentialIRI(credential.id) - - let delegationId: string | null - - switch (typeof credential.delegationId) { - case 'string': - delegationId = credential.delegationId - break - case 'undefined': - delegationId = null - break - default: - throw new CredentialMalformedError('delegationId not understood') - } - - // query on-chain data by credential id (= claim root hash) - const encoded = await api.query.attestation.attestations(claimHash) - // if not found, credential has not been attested, proof is invalid - if (encoded.isNone) { - status = 'invalid' - throw new Error( - `Attestation for credential with id "${claimHash}" not found` - ) - } - const onChain = Attestation.fromChain(encoded, claimHash) - // if data on proof does not correspond to data on chain, proof is incorrect - if (onChain.owner !== attester || onChain.delegationId !== delegationId) { - status = 'invalid' - throw new Error( - `Proof not matching on-chain data: attester "${attester}", delegation: "${delegationId}"` - ) - } - // if proof data is valid but attestation is flagged as revoked, credential is no longer valid - if (onChain.revoked === true) { - status = 'revoked' - throw new Error('Attestation revoked') - } - } catch (e) { - return { - verified: false, - errors: [e as Error], - status, - } - } - return { verified: true, errors: [], status: 'valid' } -} - -/** - * Verifies a proof that reveals the content of selected properties to a verifier. This enables selective disclosure. - * Values and nonces contained within this proof will be hashed, the result of which is expected to equal hashes on the credential. - * - * @param credential Verifiable Credential to verify proof against. - * @param proof KILT self-signed proof object. - * @param options Allows passing custom hasher. - * @param options.hasher A custom hasher. Defaults to hex(blake2-256('nonce'+'value')). - * @returns Object indicating whether proof could be verified. - */ -export async function verifyCredentialDigestProof( - credential: VerifiableCredential, - proof: CredentialDigestProof, - options: { hasher?: Crypto.Hasher } = {} -): Promise { - const { - hasher = (value, nonce?) => blake2AsHex((nonce || '') + value, 256), - } = options - const result: VerificationResult = { verified: true, errors: [] } - try { - // check proof - const type = proof['@type'] ?? proof.type - if (type !== KILT_CREDENTIAL_DIGEST_PROOF_TYPE) - throw new Error('Proof type mismatch') - if (typeof proof.nonces !== 'object') { - throw new ProofMalformedError('Proof must contain object "nonces"') - } - if (typeof credential.credentialSubject !== 'object') - throw new CredentialMalformedError('Credential subject missing') - - // 1: check credential digest against credential contents & claim property hashes in proof - // collect hashes from hash array, legitimations & delegationId - const hashes = proof.claimHashes.concat( - credential.legitimationIds, - credential.delegationId || [] - ) - // convert hex hashes to byte arrays & concatenate - const concatenated = u8aConcat( - ...hashes.map((hexHash) => hexToU8a(hexHash)) - ) - const rootHash = Crypto.hash(concatenated) - - // throw if root hash does not match expected (=id) - const expectedRootHash = fromCredentialIRI(credential.id) - if (expectedRootHash !== u8aToHex(rootHash)) - throw new Error('Computed root hash does not match expected') - - // 2: check individual properties against claim hashes in proof - // expand credentialSubject keys by compacting with empty context credential to produce statements - const flattened = await jsonld.compact(credential.credentialSubject, {}) - const statements = Object.entries(flattened).map(([key, value]) => - JSON.stringify({ [key]: value }) - ) - const expectedUnsalted = Object.keys(proof.nonces) - - return statements.reduce( - (r, stmt) => { - const unsalted = hasher(stmt) - if (!expectedUnsalted.includes(unsalted)) - return { - verified: false, - errors: [ - ...r.errors, - new ProofMalformedError( - `Proof contains no digest for statement ${stmt}` - ), - ], - } - const nonce = proof.nonces[unsalted] - if (!proof.claimHashes.includes(hasher(unsalted, nonce))) - return { - verified: false, - errors: [ - ...r.errors, - new Error( - `Proof for statement "${stmt}" not valid against claimHashes` - ), - ], - } - return r - }, - { verified: true, errors: [] } - ) - } catch (e) { - result.verified = false - result.errors = [e as Error] - return result - } -} - -/** - * Validates the claims in the VC's `credentialSubject` against a CType definition on the `credentialSchema` property. - * - * @param credential A verifiable credential where `credentialSchema.schema` is an [[ICType]]. - * @returns The [[VerificationResult]]. - */ -export function validateSchema( - credential: VerifiableCredential -): VerificationResult { - const { schema } = credential.credentialSchema || {} - // if present, perform schema validation - if (schema) { - // there's no rule against additional properties, so we can just validate the ones that are there - const validator = new JsonSchema.Validator(schema) - validator.addSchema(CType.Schemas.CTypeModel) - const { errors, valid } = validator.validate(credential.credentialSubject) - return { - verified: valid, - errors: errors.length > 0 ? errors.map((e) => new Error(e.error)) : [], - } - } - return { verified: false, errors: [] } -} diff --git a/yarn.lock b/yarn.lock index 16366e820..3e0bacd59 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1485,6 +1485,60 @@ __metadata: languageName: node linkType: hard +"@digitalbazaar/ed25519-signature-2020@npm:^5.2.0": + version: 5.2.0 + resolution: "@digitalbazaar/ed25519-signature-2020@npm:5.2.0" + dependencies: + "@digitalbazaar/ed25519-verification-key-2020": ^4.1.0 + base58-universal: ^2.0.0 + ed25519-signature-2018-context: ^1.1.0 + ed25519-signature-2020-context: ^1.1.0 + jsonld-signatures: ^11.1.0 + checksum: 25fd8f759cc346045372f05c971f7f423f3835afe5538f9c6f6a5d1e33dd77046d5fff93d24753459e589cd35990d977070024fdeb4418aa56d64b077a4836be + languageName: node + linkType: hard + +"@digitalbazaar/ed25519-verification-key-2020@npm:^4.1.0": + version: 4.1.0 + resolution: "@digitalbazaar/ed25519-verification-key-2020@npm:4.1.0" + dependencies: + "@noble/ed25519": ^1.6.0 + base58-universal: ^2.0.0 + base64url-universal: ^2.0.0 + crypto-ld: ^7.0.0 + checksum: 931f843381a918e4ce31e517b0c5b62bce0cf3ee7a80e18ab1c6e121ca9eafeebc0427b3953cd2c3f00301cbce1003e039e6e740824f670c1d2a5c79f9c11a02 + languageName: node + linkType: hard + +"@digitalbazaar/http-client@npm:^3.2.0": + version: 3.3.0 + resolution: "@digitalbazaar/http-client@npm:3.3.0" + dependencies: + ky: ^0.33.2 + ky-universal: ^0.11.0 + undici: ^5.15.0 + checksum: 95566bdb391ecb29f949a9553d0b3ddf1b574f63581f9028c8dd5e0ade7961a970eeeb0e4be0ef39ab577aff118a2b564fed41924c7130ef9d137807c44d1783 + languageName: node + linkType: hard + +"@digitalbazaar/security-context@npm:^1.0.0": + version: 1.0.0 + resolution: "@digitalbazaar/security-context@npm:1.0.0" + checksum: bc05e428c25677e9005fae6eed9ac3553726eb8544a9804cc9f6ee439d45f424ae011ebc3de80d4f82598ab3d8d9773344e1c40bfe2f7a1844d0fb05d5c371ef + languageName: node + linkType: hard + +"@digitalbazaar/vc@npm:^6.0.1": + version: 6.0.1 + resolution: "@digitalbazaar/vc@npm:6.0.1" + dependencies: + credentials-context: ^2.0.0 + jsonld: ^8.1.0 + jsonld-signatures: ^11.0.0 + checksum: b57794367a6045e489ce0a31cd7a54e520fab12babedc03edb704af521f2cfac5b300bb06847495066ca19e7e89d4383f4e7c8362021c858552aeb1ad5bf0d9d + languageName: node + linkType: hard + "@discoveryjs/json-ext@npm:^0.5.0": version: 0.5.7 resolution: "@discoveryjs/json-ext@npm:0.5.7" @@ -1913,6 +1967,7 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/did@workspace:packages/did" dependencies: + "@digitalbazaar/security-context": ^1.0.0 "@kiltprotocol/augment-api": "workspace:*" "@kiltprotocol/config": "workspace:*" "@kiltprotocol/testing": "workspace:*" @@ -2036,6 +2091,8 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/vc-export@workspace:packages/vc-export" dependencies: + "@digitalbazaar/ed25519-signature-2020": ^5.2.0 + "@digitalbazaar/vc": ^6.0.1 "@kiltprotocol/config": "workspace:*" "@kiltprotocol/core": "workspace:*" "@kiltprotocol/did": "workspace:*" @@ -2046,15 +2103,24 @@ __metadata: "@polkadot/types": ^10.0.0 "@polkadot/util": ^11.0.0 "@polkadot/util-crypto": ^11.0.0 - "@types/jsonld": 1.5.1 - jsonld: ^2.0.2 - jsonld-signatures: ^5.0.0 + crypto-ld: ^6.0.0 + did-jwt: ^6.11.0 rimraf: ^3.0.2 typescript: ^4.8.3 - vc-js: ^0.6.4 + peerDependencies: + "@digitalbazaar/vc": ^2.1.0 || ^6.0.1 + jsonld: ^5.2.0 || ^8.1.0 + jsonld-signatures: ^9.3.0 || ^11.0.0 languageName: unknown linkType: soft +"@noble/ed25519@npm:^1.6.0": + version: 1.7.3 + resolution: "@noble/ed25519@npm:1.7.3" + checksum: 45169927d51de513e47bbeebff3a603433c4ac7579e1b8c5034c380a0afedbe85e6959be3d69584a7a5ed6828d638f8f28879003b9bb2fb5f22d8aa2d88fd5fe + languageName: node + linkType: hard + "@noble/hashes@npm:1.2.0": version: 1.2.0 resolution: "@noble/hashes@npm:1.2.0" @@ -2588,6 +2654,178 @@ __metadata: languageName: node linkType: hard +"@stablelib/aead@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/aead@npm:1.0.1" + checksum: 1a6f68d138f105d17dd65349751515bd252ab0498c77255b8555478d28415600dde493f909eb718245047a993f838dfae546071e1687566ffb7b8c3e10c918d9 + languageName: node + linkType: hard + +"@stablelib/binary@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/binary@npm:1.0.1" + dependencies: + "@stablelib/int": ^1.0.1 + checksum: dca9b98eb1f56a4002b5b9e7351fbc49f3d8616af87007c01e833bd763ac89214eb5f3b7e18673c91ce59d4a0e4856a2eb661ace33d39f17fb1ad267271fccd8 + languageName: node + linkType: hard + +"@stablelib/bytes@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/bytes@npm:1.0.1" + checksum: 456267e08c3384abcb71d3ad3e97a6f99185ad754bac016f501ebea4e4886f37900589143b57e33bdbbf513a92fc89368c15dd4517e0540d0bdc79ecdf9dd087 + languageName: node + linkType: hard + +"@stablelib/chacha20poly1305@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha20poly1305@npm:1.0.1" + dependencies: + "@stablelib/aead": ^1.0.1 + "@stablelib/binary": ^1.0.1 + "@stablelib/chacha": ^1.0.1 + "@stablelib/constant-time": ^1.0.1 + "@stablelib/poly1305": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 81f1a32330838d31e4dc3144d76eba7244b56d9ea38c1f604f2c34d93ed8e67e9a6167d2cfd72254c13cc46dfc1f5ce5157b37939a575295d69d9144abb4e4fb + languageName: node + linkType: hard + +"@stablelib/chacha@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: f061f36c4ca4bf177dd7cac11e7c65ced164f141b6065885141ae5a55f32e16ba0209aefcdcc966aef013f1da616ce901a3a80653b4b6f833cf7e3397ae2d6bd + languageName: node + linkType: hard + +"@stablelib/constant-time@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/constant-time@npm:1.0.1" + checksum: dba4f4bf508de2ff15f7f0cbd875e70391aa3ba3698290fe1ed2feb151c243ba08a90fc6fb390ec2230e30fcc622318c591a7c0e35dcb8150afb50c797eac3d7 + languageName: node + linkType: hard + +"@stablelib/ed25519@npm:^1.0.2": + version: 1.0.3 + resolution: "@stablelib/ed25519@npm:1.0.3" + dependencies: + "@stablelib/random": ^1.0.2 + "@stablelib/sha512": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: e18279de078edac67396ba07dbb862dce0fe89efa8141c21a5b04108a29914bd51636019522323ca5097ec596a90b3028ed64e88ee009b0ac7de7c1ab6499ccb + languageName: node + linkType: hard + +"@stablelib/hash@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hash@npm:1.0.1" + checksum: 3ff1f12d1a4082aaf4b6cdf40c2010aabe5c4209d3b40b97b5bbb0d9abc0ee94abdc545e57de0614afaea807ca0212ac870e247ec8f66cdce91ec39ce82948cf + languageName: node + linkType: hard + +"@stablelib/int@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/int@npm:1.0.1" + checksum: 65bfbf50a382eea70c68e05366bf379cfceff8fbc076f1c267ef2f2411d7aed64fd140c415cb6c29f19a3910d3b8b7805d4b32ad5721a5007a8e744a808c7ae3 + languageName: node + linkType: hard + +"@stablelib/keyagreement@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/keyagreement@npm:1.0.1" + dependencies: + "@stablelib/bytes": ^1.0.1 + checksum: 3c8ec904dd50f72f3162f5447a0fa8f1d9ca6e24cd272d3dbe84971267f3b47f9bd5dc4e4eeedf3fbac2fe01f2d9277053e57c8e60db8c5544bfb35c62d290dd + languageName: node + linkType: hard + +"@stablelib/poly1305@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/poly1305@npm:1.0.1" + dependencies: + "@stablelib/constant-time": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 70b845bb0481c66b7ba3f3865d01e4c67a4dffc9616fc6de1d23efc5e828ec09de25f8e3be4e1f15a23b8e87e3036ee3d949c2fd4785047e6f7028bbec0ead18 + languageName: node + linkType: hard + +"@stablelib/random@npm:^1.0.1, @stablelib/random@npm:^1.0.2": + version: 1.0.2 + resolution: "@stablelib/random@npm:1.0.2" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: f5ace0a588dc4c21f01cb85837892d4c872e994ae77a58a8eb7dd61aa0b26fb1e9b46b0445e71af57d963ef7d9f5965c64258fc0d04df7b2947bc48f2d3560c5 + languageName: node + linkType: hard + +"@stablelib/sha256@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha256@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 38669871e1bda72eb537629ebceac1c72da8890273a9fbe088f81f6d14c1ec04e78be8c5b455380a06c67f8e62b2508e11e9063fcc257dbaa1b5c27ac756ba77 + languageName: node + linkType: hard + +"@stablelib/sha512@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha512@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: b7c82f7608a35948a2147a534c0c9afc80deab3fd5f72a2e27b2454e7c0c6944d39381be3abcb1b7fac5b824ba030ae3e98209d517a579c143d8ed63930b042f + languageName: node + linkType: hard + +"@stablelib/wipe@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/wipe@npm:1.0.1" + checksum: 287802eb146810a46ba72af70b82022caf83a8aeebde23605f5ee0decf64fe2b97a60c856e43b6617b5801287c30cfa863cfb0469e7fcde6f02d143cf0c6cbf4 + languageName: node + linkType: hard + +"@stablelib/x25519@npm:^1.0.2": + version: 1.0.3 + resolution: "@stablelib/x25519@npm:1.0.3" + dependencies: + "@stablelib/keyagreement": ^1.0.1 + "@stablelib/random": ^1.0.2 + "@stablelib/wipe": ^1.0.1 + checksum: f8537066b542b6770c1b5b2ae5ad0688d1b986e4bf818067c152c123a5471531987bbf024224f75f387f481ccc5b628e391e49e92102b8b1a3e2d449d6105402 + languageName: node + linkType: hard + +"@stablelib/xchacha20@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/xchacha20@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/chacha": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: e1aa210d7a10090bf86034922b8bd4713656fc01fb0b9f3a2dffdbea254ed6d47803c9e31c1f35d4c3c0d96398ebac00df3f91a2ffc006070600429e70ce785e + languageName: node + linkType: hard + +"@stablelib/xchacha20poly1305@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/xchacha20poly1305@npm:1.0.1" + dependencies: + "@stablelib/aead": ^1.0.1 + "@stablelib/chacha20poly1305": ^1.0.1 + "@stablelib/constant-time": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + "@stablelib/xchacha20": ^1.0.1 + checksum: 74d1ad0c0772f1a528a7a677df29687a5e6bd5eeb33a7abf2f861537005630bb231fd29015d5d68eac04f4e21f2addae19513ec0a899609779050d4117675d11 + languageName: node + linkType: hard + "@substrate/connect-extension-protocol@npm:^1.0.1": version: 1.0.1 resolution: "@substrate/connect-extension-protocol@npm:1.0.1" @@ -2829,13 +3067,6 @@ __metadata: languageName: node linkType: hard -"@types/jsonld@npm:1.5.1": - version: 1.5.1 - resolution: "@types/jsonld@npm:1.5.1" - checksum: 592ca140dba64db5063855cef12e9abdd6e87a3bf22af2c034aadb2786ed89d703933f887564b1247cff1a5781b733243944283c6a3c767e9ec3433232e6b4d4 - languageName: node - linkType: hard - "@types/minimatch@npm:*": version: 3.0.5 resolution: "@types/minimatch@npm:3.0.5" @@ -3277,6 +3508,15 @@ __metadata: languageName: node linkType: hard +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: ^5.0.0 + checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75 + languageName: node + linkType: hard + "acorn-globals@npm:^6.0.0": version: 6.0.0 resolution: "acorn-globals@npm:6.0.0" @@ -3376,7 +3616,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5": +"ajv@npm:^6.10.0, ajv@npm:^6.12.4, ajv@npm:^6.12.5": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -3581,7 +3821,7 @@ __metadata: languageName: node linkType: hard -"asn1@npm:^0.2.4, asn1@npm:~0.2.3": +"asn1@npm:^0.2.4": version: 0.2.6 resolution: "asn1@npm:0.2.6" dependencies: @@ -3590,13 +3830,6 @@ __metadata: languageName: node linkType: hard -"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": - version: 1.0.0 - resolution: "assert-plus@npm:1.0.0" - checksum: 19b4340cb8f0e6a981c07225eacac0e9d52c2644c080198765d63398f0075f83bbc0c8e95474d54224e297555ad0d631c1dcd058adb1ddc2437b41a6b424ac64 - languageName: node - linkType: hard - "astral-regex@npm:^2.0.0": version: 2.0.0 resolution: "astral-regex@npm:2.0.0" @@ -3632,20 +3865,6 @@ __metadata: languageName: node linkType: hard -"aws-sign2@npm:~0.7.0": - version: 0.7.0 - resolution: "aws-sign2@npm:0.7.0" - checksum: b148b0bb0778098ad8cf7e5fc619768bcb51236707ca1d3e5b49e41b171166d8be9fdc2ea2ae43d7decf02989d0aaa3a9c4caa6f320af95d684de9b548a71525 - languageName: node - linkType: hard - -"aws4@npm:^1.8.0": - version: 1.11.0 - resolution: "aws4@npm:1.11.0" - checksum: 5a00d045fd0385926d20ebebcfba5ec79d4482fe706f63c27b324d489a04c68edb0db99ed991e19eda09cb8c97dc2452059a34d97545cebf591d7a2b5a10999f - languageName: node - linkType: hard - "babel-jest@npm:^27.5.1": version: 27.5.1 resolution: "babel-jest@npm:27.5.1" @@ -3766,12 +3985,10 @@ __metadata: languageName: node linkType: hard -"base-x@npm:^3.0.2": - version: 3.0.9 - resolution: "base-x@npm:3.0.9" - dependencies: - safe-buffer: ^5.0.1 - checksum: 957101d6fd09e1903e846fd8f69fd7e5e3e50254383e61ab667c725866bec54e5ece5ba49ce385128ae48f9ec93a26567d1d5ebb91f4d56ef4a9cc0d5a5481e8 +"base58-universal@npm:^2.0.0": + version: 2.0.0 + resolution: "base58-universal@npm:2.0.0" + checksum: 418e76ea04c3c7e4405df50334bfe4be8bc3a89d46d2a55e6666fa93c9ffcd098e4c75401f5b7fc22728415e6c0a1541d5e1dfa78c01e89ba06a79e46bed8d18 languageName: node linkType: hard @@ -3782,23 +3999,23 @@ __metadata: languageName: node linkType: hard -"base64url-universal@npm:^1.0.1": - version: 1.1.0 - resolution: "base64url-universal@npm:1.1.0" +"base64url-universal@npm:^2.0.0": + version: 2.0.0 + resolution: "base64url-universal@npm:2.0.0" dependencies: - base64url: ^3.0.0 - checksum: ccc38572082df79ba845ddb84cc064b2e16490687fb1d138ef0e64f0e14d1ca2800b1cbe976f3d59ce79dc31a6cb3985aec7b64e295a8001becbf032bac26276 + base64url: ^3.0.1 + checksum: 4058e0c5ddc0f7058ea970596e762d620b1f0eb071459112b2ac1fe0354bc99acb25e851cce828cacaff3b950d6877978c3ac88a70c3ceb35469a2c4c3e17fb9 languageName: node linkType: hard -"base64url@npm:^3.0.0, base64url@npm:^3.0.1": +"base64url@npm:^3.0.1": version: 3.0.1 resolution: "base64url@npm:3.0.1" checksum: a77b2a3a526b3343e25be424de3ae0aa937d78f6af7c813ef9020ef98001c0f4e2323afcd7d8b2d2978996bf8c42445c3e9f60c218c622593e5fdfd54a3d6e18 languageName: node linkType: hard -"bcrypt-pbkdf@npm:^1.0.0, bcrypt-pbkdf@npm:^1.0.2": +"bcrypt-pbkdf@npm:^1.0.2": version: 1.0.2 resolution: "bcrypt-pbkdf@npm:1.0.2" dependencies: @@ -3807,6 +4024,13 @@ __metadata: languageName: node linkType: hard +"bech32@npm:^2.0.0": + version: 2.0.0 + resolution: "bech32@npm:2.0.0" + checksum: fa15acb270b59aa496734a01f9155677b478987b773bf701f465858bf1606c6a970085babd43d71ce61895f1baa594cb41a2cd1394bd2c6698f03cc2d811300e + languageName: node + linkType: hard + "bl@npm:^4.0.3": version: 4.1.0 resolution: "bl@npm:4.1.0" @@ -3961,15 +4185,6 @@ __metadata: languageName: node linkType: hard -"bs58@npm:^4.0.1": - version: 4.0.1 - resolution: "bs58@npm:4.0.1" - dependencies: - base-x: ^3.0.2 - checksum: b3c5365bb9e0c561e1a82f1a2d809a1a692059fae016be233a6127ad2f50a6b986467c3a50669ce4c18929dcccb297c5909314dd347a25a68c21b68eb3e95ac2 - languageName: node - linkType: hard - "bser@npm:2.1.1": version: 2.1.1 resolution: "bser@npm:2.1.1" @@ -4037,6 +4252,15 @@ __metadata: languageName: node linkType: hard +"busboy@npm:^1.6.0": + version: 1.6.0 + resolution: "busboy@npm:1.6.0" + dependencies: + streamsearch: ^1.1.0 + checksum: 32801e2c0164e12106bf236291a00795c3c4e4b709ae02132883fe8478ba2ae23743b11c5735a0aae8afe65ac4b6ca4568b91f0d9fed1fdbc32ede824a73746e + languageName: node + linkType: hard + "byline@npm:^5.0.0": version: 5.0.0 resolution: "byline@npm:5.0.0" @@ -4119,20 +4343,13 @@ __metadata: languageName: node linkType: hard -"canonicalize@npm:^1.0.1": +"canonicalize@npm:^1.0.1, canonicalize@npm:^1.0.8": version: 1.0.8 resolution: "canonicalize@npm:1.0.8" checksum: c31ea64160171bbcd7ac0dc081058fbcff055410a1d532d7b3959e7b02a3001c5d5f4f8bad934ed5246eafc9a928d333cc0c29846c16fb6d0be97b8fb444de3c languageName: node linkType: hard -"caseless@npm:~0.12.0": - version: 0.12.0 - resolution: "caseless@npm:0.12.0" - checksum: b43bd4c440aa1e8ee6baefee8063b4850fd0d7b378f6aabc796c9ec8cb26d27fb30b46885350777d9bd079c5256c0e1329ad0dc7c2817e0bb466810ebb353751 - languageName: node - linkType: hard - "cbor@npm:^8.1.0": version: 8.1.0 resolution: "cbor@npm:8.1.0" @@ -4345,7 +4562,7 @@ __metadata: languageName: node linkType: hard -"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": +"combined-stream@npm:^1.0.8": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" dependencies: @@ -4354,7 +4571,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.20.0, commander@npm:^2.20.3": +"commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e @@ -4497,13 +4714,6 @@ __metadata: languageName: node linkType: hard -"core-util-is@npm:1.0.2": - version: 1.0.2 - resolution: "core-util-is@npm:1.0.2" - checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab - languageName: node - linkType: hard - "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -4611,10 +4821,10 @@ __metadata: languageName: node linkType: hard -"credentials-context@npm:^1.0.0": - version: 1.0.0 - resolution: "credentials-context@npm:1.0.0" - checksum: f7c1df5339e15a6496e4760ad8a3a75cad22dbdd263f23b9c13fd4c8da49c4f5258f2940e92cd5628c1882da54d895c014bbabd7c1f87e9c8b68f02bba0feca2 +"credentials-context@npm:^2.0.0": + version: 2.0.0 + resolution: "credentials-context@npm:2.0.0" + checksum: c5ba6d257ef2fb1c21399238f5b1e0b2f7622b1f496f499edbac2d2e0faba40ebc06e0c5acee4bb2fbe712abfa3cbebdcc152f4bcf5a7481430f2731f2c514db languageName: node linkType: hard @@ -4648,19 +4858,17 @@ __metadata: languageName: node linkType: hard -"crypto-ld@npm:^3.7.0": - version: 3.9.0 - resolution: "crypto-ld@npm:3.9.0" - dependencies: - base64url-universal: ^1.0.1 - bs58: ^4.0.1 - node-forge: ~0.10.0 - semver: ^6.2.0 - sodium-native: ^3.2.0 - dependenciesMeta: - sodium-native: - optional: true - checksum: d1d24e946d0b35bfe7b063d596e19dbaebe2420b7ec4a03b21b81bf7e05ce7e8ec6c85b1b84f87cb684f96789dcccf984af8f12e41c69d0dd5a9299ef66c11f7 +"crypto-ld@npm:^6.0.0": + version: 6.0.0 + resolution: "crypto-ld@npm:6.0.0" + checksum: ad274e675270a15498c0262e92fde0080bec3328c508c614fb584a1c218a68df24853420977108f7ab7ea8121ea64f2312baaa9d1368f27ea48144bb2ca0fc5d + languageName: node + linkType: hard + +"crypto-ld@npm:^7.0.0": + version: 7.0.0 + resolution: "crypto-ld@npm:7.0.0" + checksum: dcea2f482a0c19d714379fada30e7cb940a3c264b19ab92df0b3cc0f3f6f7ce9a5422b4d6827f6ece8942f24157f441c79178137eff1a65bd62164e0a3f819ad languageName: node linkType: hard @@ -4704,15 +4912,6 @@ __metadata: languageName: node linkType: hard -"dashdash@npm:^1.12.0": - version: 1.14.1 - resolution: "dashdash@npm:1.14.1" - dependencies: - assert-plus: ^1.0.0 - checksum: 3634c249570f7f34e3d34f866c93f866c5b417f0dd616275decae08147dcdf8fccfaa5947380ccfb0473998ea3a8057c0b4cd90c875740ee685d0624b2983598 - languageName: node - linkType: hard - "data-uri-to-buffer@npm:^4.0.0": version: 4.0.0 resolution: "data-uri-to-buffer@npm:4.0.0" @@ -4853,6 +5052,33 @@ __metadata: languageName: node linkType: hard +"did-jwt@npm:^6.11.0": + version: 6.11.0 + resolution: "did-jwt@npm:6.11.0" + dependencies: + "@stablelib/ed25519": ^1.0.2 + "@stablelib/random": ^1.0.1 + "@stablelib/sha256": ^1.0.1 + "@stablelib/x25519": ^1.0.2 + "@stablelib/xchacha20poly1305": ^1.0.1 + bech32: ^2.0.0 + canonicalize: ^1.0.8 + did-resolver: ^4.0.0 + elliptic: ^6.5.4 + js-sha3: ^0.8.0 + multiformats: ^9.6.5 + uint8arrays: ^3.0.0 + checksum: b8b63ad7c7c6eb786fb386a5f74046e50f4ab93552a609556035642819fb26c15e03c020d704f5049331a8b07df9f7408cb7f4155f366f7286384e0d83739988 + languageName: node + linkType: hard + +"did-resolver@npm:^4.0.0": + version: 4.0.1 + resolution: "did-resolver@npm:4.0.1" + checksum: 1d039ce4da70b004f7679a65122c698e5b7c492eb9b2771daef6a3742b35be5cf3bb4b60af45aee3048bc1cf3161ac1dc4e2dbfcb956a0a47ea2efb405cce76d + languageName: node + linkType: hard + "diff-sequences@npm:^27.5.1": version: 27.5.1 resolution: "diff-sequences@npm:27.5.1" @@ -4964,13 +5190,17 @@ __metadata: languageName: node linkType: hard -"ecc-jsbn@npm:~0.1.1": - version: 0.1.2 - resolution: "ecc-jsbn@npm:0.1.2" - dependencies: - jsbn: ~0.1.0 - safer-buffer: ^2.1.0 - checksum: 22fef4b6203e5f31d425f5b711eb389e4c6c2723402e389af394f8411b76a488fa414d309d866e2b577ce3e8462d344205545c88a8143cc21752a5172818888a +"ed25519-signature-2018-context@npm:^1.1.0": + version: 1.1.0 + resolution: "ed25519-signature-2018-context@npm:1.1.0" + checksum: 69bd075d209fab15b9f35fe02594812f993deea538a2a9329d65c72ef035c3965004437613251c48b59bfd576b591a47719ac51d118e3f9cdc267a246c0532f5 + languageName: node + linkType: hard + +"ed25519-signature-2020-context@npm:^1.1.0": + version: 1.1.0 + resolution: "ed25519-signature-2020-context@npm:1.1.0" + checksum: d1d66e21364e72aa1ea30104e7445194d8787ccedcce0b6be82129ad4c2b1cf0dae0b19abdad6ce7a69abb4ff6b474e8bf5690a7d8fbfb2ffc02c1a0ef9cd20d languageName: node linkType: hard @@ -4990,7 +5220,7 @@ __metadata: languageName: node linkType: hard -"elliptic@npm:^6.5.3": +"elliptic@npm:^6.5.3, elliptic@npm:^6.5.4": version: 6.5.4 resolution: "elliptic@npm:6.5.4" dependencies: @@ -5495,6 +5725,13 @@ __metadata: languageName: node linkType: hard +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166 + languageName: node + linkType: hard + "eventemitter3@npm:^4.0.7": version: 4.0.7 resolution: "eventemitter3@npm:4.0.7" @@ -5572,27 +5809,6 @@ __metadata: languageName: node linkType: hard -"extend@npm:~3.0.2": - version: 3.0.2 - resolution: "extend@npm:3.0.2" - checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 - languageName: node - linkType: hard - -"extsprintf@npm:1.3.0": - version: 1.3.0 - resolution: "extsprintf@npm:1.3.0" - checksum: cee7a4a1e34cffeeec18559109de92c27517e5641991ec6bab849aa64e3081022903dd53084f2080d0d2530803aa5ee84f1e9de642c365452f9e67be8f958ce2 - languageName: node - linkType: hard - -"extsprintf@npm:^1.2.0": - version: 1.4.1 - resolution: "extsprintf@npm:1.4.1" - checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33 - languageName: node - linkType: hard - "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -5749,13 +5965,6 @@ __metadata: languageName: node linkType: hard -"forever-agent@npm:~0.6.1": - version: 0.6.1 - resolution: "forever-agent@npm:0.6.1" - checksum: 766ae6e220f5fe23676bb4c6a99387cec5b7b62ceb99e10923376e27bfea72f3c3aeec2ba5f45f3f7ba65d6616965aa7c20b15002b6860833bb6e394dea546a8 - languageName: node - linkType: hard - "form-data@npm:^3.0.0": version: 3.0.1 resolution: "form-data@npm:3.0.1" @@ -5767,17 +5976,6 @@ __metadata: languageName: node linkType: hard -"form-data@npm:~2.3.2": - version: 2.3.3 - resolution: "form-data@npm:2.3.3" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.6 - mime-types: ^2.1.12 - checksum: 10c1780fa13dbe1ff3100114c2ce1f9307f8be10b14bf16e103815356ff567b6be39d70fc4a40f8990b9660012dc24b0f5e1dde1b6426166eb23a445ba068ca3 - languageName: node - linkType: hard - "formdata-polyfill@npm:^4.0.10": version: 4.0.10 resolution: "formdata-polyfill@npm:4.0.10" @@ -5909,7 +6107,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"get-stdin@npm:7.0.0, get-stdin@npm:^7.0.0": +"get-stdin@npm:7.0.0": version: 7.0.0 resolution: "get-stdin@npm:7.0.0" checksum: a24ab2cf8ee35bf5d3460c0d8145f2624715d864485789b7101a7cf1b6c1ce0a57319e25304872074121fa60e7104f1af3583a7014e9974c84c61d0702beae24 @@ -5940,15 +6138,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"getpass@npm:^0.1.1": - version: 0.1.7 - resolution: "getpass@npm:0.1.7" - dependencies: - assert-plus: ^1.0.0 - checksum: ab18d55661db264e3eac6012c2d3daeafaab7a501c035ae0ccb193c3c23e9849c6e29b6ac762b9c2adae460266f925d55a3a2a3a3c8b94be2f222df94d70c046 - languageName: node - linkType: hard - "git-raw-commits@npm:^2.0.0": version: 2.0.11 resolution: "git-raw-commits@npm:2.0.11" @@ -6058,23 +6247,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"har-schema@npm:^2.0.0": - version: 2.0.0 - resolution: "har-schema@npm:2.0.0" - checksum: d8946348f333fb09e2bf24cc4c67eabb47c8e1d1aa1c14184c7ffec1140a49ec8aa78aa93677ae452d71d5fc0fdeec20f0c8c1237291fc2bcb3f502a5d204f9b - languageName: node - linkType: hard - -"har-validator@npm:~5.1.3": - version: 5.1.5 - resolution: "har-validator@npm:5.1.5" - dependencies: - ajv: ^6.12.3 - har-schema: ^2.0.0 - checksum: b998a7269ca560d7f219eedc53e2c664cd87d487e428ae854a6af4573fc94f182fe9d2e3b92ab968249baec7ebaf9ead69cf975c931dc2ab282ec182ee988280 - languageName: node - linkType: hard - "hard-rejection@npm:^2.1.0": version: 2.1.0 resolution: "hard-rejection@npm:2.1.0" @@ -6228,17 +6400,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"http-signature@npm:~1.2.0": - version: 1.2.0 - resolution: "http-signature@npm:1.2.0" - dependencies: - assert-plus: ^1.0.0 - jsprim: ^1.2.2 - sshpk: ^1.7.0 - checksum: 3324598712266a9683585bb84a75dec4fd550567d5e0dd4a0fff6ff3f74348793404d3eeac4918fa0902c810eeee1a86419e4a2e92a164132dfe6b26743fb47c - languageName: node - linkType: hard - "https-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "https-proxy-agent@npm:5.0.0" @@ -6648,7 +6809,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"is-typedarray@npm:^1.0.0, is-typedarray@npm:~1.0.0": +"is-typedarray@npm:^1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 @@ -6685,13 +6846,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"isstream@npm:~0.1.2": - version: 0.1.2 - resolution: "isstream@npm:0.1.2" - checksum: 1eb2fe63a729f7bdd8a559ab552c69055f4f48eb5c2f03724430587c6f450783c8f1cd936c1c952d0a927925180fcc892ebd5b174236cf1065d4bd5bdb37e963 - languageName: node - linkType: hard - "istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": version: 3.2.0 resolution: "istanbul-lib-coverage@npm:3.2.0" @@ -7243,6 +7397,13 @@ fsevents@^2.3.2: languageName: node linkType: hard +"js-sha3@npm:^0.8.0": + version: 0.8.0 + resolution: "js-sha3@npm:0.8.0" + checksum: 75df77c1fc266973f06cce8309ce010e9e9f07ec35ab12022ed29b7f0d9c8757f5a73e1b35aa24840dced0dea7059085aa143d817aea9e188e2a80d569d9adce + languageName: node + linkType: hard + "js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -7262,13 +7423,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"jsbn@npm:~0.1.0": - version: 0.1.1 - resolution: "jsbn@npm:0.1.1" - checksum: e5ff29c1b8d965017ef3f9c219dacd6e40ad355c664e277d31246c90545a02e6047018c16c60a00f36d561b3647215c41894f5d869ada6908a2e0ce4200c88f2 - languageName: node - linkType: hard - "jsdoc-type-pratt-parser@npm:~2.2.3": version: 2.2.5 resolution: "jsdoc-type-pratt-parser@npm:2.2.5" @@ -7362,13 +7516,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"json-schema@npm:0.4.0": - version: 0.4.0 - resolution: "json-schema@npm:0.4.0" - checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72 - languageName: node - linkType: hard - "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" @@ -7376,7 +7523,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": +"json-stringify-safe@npm:^5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee @@ -7422,31 +7569,26 @@ fsevents@^2.3.2: languageName: node linkType: hard -"jsonld-signatures@npm:^5.0.0": - version: 5.2.0 - resolution: "jsonld-signatures@npm:5.2.0" +"jsonld-signatures@npm:^11.0.0, jsonld-signatures@npm:^11.1.0": + version: 11.1.0 + resolution: "jsonld-signatures@npm:11.1.0" dependencies: - base64url: ^3.0.1 - crypto-ld: ^3.7.0 - jsonld: ^2.0.2 - node-forge: ^0.10.0 + jsonld: ^8.0.0 security-context: ^4.0.0 - serialize-error: ^5.0.0 - checksum: 642370e1375fc3c4e33f9678294828737465163b29141273de64bb3785d28927367805ebfd8ca3097338924d315c9126055e06a0311d45301f214f7aaaefdb83 + serialize-error: ^8.1.0 + checksum: d3f0c7e5592ddab760a75d316fbb582ff2386e6712d5e1590f5aab0f4cec4a2619b85dfdae7bc117fd0a7573af5b3a180f2d0af2ecdeeefc8aaa4182b5a0ae32 languageName: node linkType: hard -"jsonld@npm:^2.0.2": - version: 2.0.2 - resolution: "jsonld@npm:2.0.2" +"jsonld@npm:^8.0.0, jsonld@npm:^8.1.0": + version: 8.1.1 + resolution: "jsonld@npm:8.1.1" dependencies: + "@digitalbazaar/http-client": ^3.2.0 canonicalize: ^1.0.1 - lru-cache: ^5.1.1 - rdf-canonize: ^1.0.2 - request: ^2.88.0 - semver: ^6.3.0 - xmldom: 0.1.19 - checksum: 2aa30e6d624dfdd0bb2152b02f95ff240059cb6b9c92e3948e9e464a0cbf414fcd0df635298f56ff05e00a76f6de3d1da814d7e45cde213a13a5998e67510333 + lru-cache: ^6.0.0 + rdf-canonize: ^3.0.0 + checksum: 72183be7bd952425e7fde9c70f1a80394f3b104f27902ff75e6541ab62e2f2c7e1f4e13300474689bb0331836eec943c79aaa803c9e91238112963e09dbec98d languageName: node linkType: hard @@ -7457,18 +7599,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"jsprim@npm:^1.2.2": - version: 1.4.2 - resolution: "jsprim@npm:1.4.2" - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - checksum: 2ad1b9fdcccae8b3d580fa6ced25de930eaa1ad154db21bbf8478a4d30bbbec7925b5f5ff29b933fba9412b16a17bd484a8da4fdb3663b5e27af95dd693bab2a - languageName: node - linkType: hard - "kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": version: 6.0.3 resolution: "kind-of@npm:6.0.3" @@ -7483,6 +7613,29 @@ fsevents@^2.3.2: languageName: node linkType: hard +"ky-universal@npm:^0.11.0": + version: 0.11.0 + resolution: "ky-universal@npm:0.11.0" + dependencies: + abort-controller: ^3.0.0 + node-fetch: ^3.2.10 + peerDependencies: + ky: ">=0.31.4" + web-streams-polyfill: ">=3.2.1" + peerDependenciesMeta: + web-streams-polyfill: + optional: true + checksum: 42e4c91551a0d17465d6a117de2d1fa4efdf38c4e29dbd70af0c5b7ac0ee13994bceca9af2a0ac21a943d1cd22557ea664abe79f25e096d30a6baca0a0265a12 + languageName: node + linkType: hard + +"ky@npm:^0.33.2": + version: 0.33.3 + resolution: "ky@npm:0.33.3" + checksum: d1869e1f33c0165355f621b6726fcc1a9de20a31f4a826ca0cfd5753d83b9cba8723402d554a00194e0ee3959e0dda0638f4b99d54a3a7de928b55ff870b0bcc + languageName: node + linkType: hard + "lazystream@npm:^1.0.0": version: 1.0.1 resolution: "lazystream@npm:1.0.1" @@ -7631,15 +7784,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" - dependencies: - yallist: ^3.0.2 - checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb - languageName: node - linkType: hard - "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" @@ -7808,7 +7952,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.19": +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -7995,6 +8139,13 @@ fsevents@^2.3.2: languageName: node linkType: hard +"multiformats@npm:^9.4.2, multiformats@npm:^9.6.5": + version: 9.9.0 + resolution: "multiformats@npm:9.9.0" + checksum: d3e8c1be400c09a014f557ea02251a2710dbc9fca5aa32cc702ff29f636c5471e17979f30bdcb0a9cbb556f162a8591dc2e1219c24fc21394a56115b820bb84e + languageName: node + linkType: hard + "nan@npm:^2.15.0": version: 2.15.0 resolution: "nan@npm:2.15.0" @@ -8065,21 +8216,14 @@ fsevents@^2.3.2: languageName: node linkType: hard -"node-fetch@npm:^3.3.0": - version: 3.3.0 - resolution: "node-fetch@npm:3.3.0" +"node-fetch@npm:^3.2.10, node-fetch@npm:^3.3.0": + version: 3.3.1 + resolution: "node-fetch@npm:3.3.1" dependencies: data-uri-to-buffer: ^4.0.0 fetch-blob: ^3.1.4 formdata-polyfill: ^4.0.10 - checksum: e9936908d2783d3c48a038e187f8062de294d75ef43ec8ab812d7cbd682be2b67605868758d2e9cad6103706dcfe4a9d21d78f6df984e8edf10e7a5ce2e665f8 - languageName: node - linkType: hard - -"node-forge@npm:^0.10.0, node-forge@npm:~0.10.0": - version: 0.10.0 - resolution: "node-forge@npm:0.10.0" - checksum: 5aa6dc9922e424a20ef101d2f517418e2bc9cfc0255dd22e0701c0fad1568445f510ee67f6f3fcdf085812c4ca1b847b8ba45683b34776828e41f5c1794e42e1 + checksum: 62145fd3ba4770a76110bc31fdc0054ab2f5442b5ce96e9c4b39fc9e94a3d305560eec76e1165d9259eab866e02a8eecf9301062bb5dfc9f08a4d08b69d223dd languageName: node linkType: hard @@ -8205,13 +8349,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"oauth-sign@npm:~0.9.0": - version: 0.9.0 - resolution: "oauth-sign@npm:0.9.0" - checksum: 8f5497a127967866a3c67094c21efd295e46013a94e6e828573c62220e9af568cc1d2d04b16865ba583e430510fa168baf821ea78f355146d8ed7e350fc44c64 - languageName: node - linkType: hard - "object-inspect@npm:^1.11.0, object-inspect@npm:^1.9.0": version: 1.12.0 resolution: "object-inspect@npm:1.12.0" @@ -8495,13 +8632,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"performance-now@npm:^2.1.0": - version: 2.1.0 - resolution: "performance-now@npm:2.1.0" - checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 - languageName: node - linkType: hard - "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -8666,7 +8796,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"psl@npm:^1.1.28, psl@npm:^1.1.33": +"psl@npm:^1.1.33": version: 1.8.0 resolution: "psl@npm:1.8.0" checksum: 6150048ed2da3f919478bee8a82f3828303bc0fc730fb015a48f83c9977682c7b28c60ab01425a72d82a2891a1681627aa530a991d50c086b48a3be27744bde7 @@ -8718,13 +8848,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"qs@npm:~6.5.2": - version: 6.5.3 - resolution: "qs@npm:6.5.3" - checksum: 6f20bf08cabd90c458e50855559539a28d00b2f2e7dddcb66082b16a43188418cb3cb77cbd09268bcef6022935650f0534357b8af9eeb29bf0f27ccb17655692 - languageName: node - linkType: hard - "querystring@npm:0.2.0": version: 0.2.0 resolution: "querystring@npm:0.2.0" @@ -8765,13 +8888,12 @@ fsevents@^2.3.2: languageName: node linkType: hard -"rdf-canonize@npm:^1.0.2": - version: 1.2.0 - resolution: "rdf-canonize@npm:1.2.0" +"rdf-canonize@npm:^3.0.0": + version: 3.3.0 + resolution: "rdf-canonize@npm:3.3.0" dependencies: - node-forge: ^0.10.0 - semver: ^6.3.0 - checksum: 4b704f83ba77f09edfa3c77ad804069ba56ded49e3a91871dfaa0456e0b04e9129fab5a99eb758edf44b25bee0e2c91c27bfc6b91d715e8d96b42296efefbe97 + setimmediate: ^1.0.5 + checksum: 4aa4ac59e6ab0bed25cf95fc7f247537507d3f2b2d0742a48dd12a8f2ebc809c0863858f15c73fb8d13f1efe332e4961f7be62fdda9a0abb75d97178410c8cd5 languageName: node linkType: hard @@ -8937,34 +9059,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"request@npm:^2.88.0": - version: 2.88.2 - resolution: "request@npm:2.88.2" - dependencies: - aws-sign2: ~0.7.0 - aws4: ^1.8.0 - caseless: ~0.12.0 - combined-stream: ~1.0.6 - extend: ~3.0.2 - forever-agent: ~0.6.1 - form-data: ~2.3.2 - har-validator: ~5.1.3 - http-signature: ~1.2.0 - is-typedarray: ~1.0.0 - isstream: ~0.1.2 - json-stringify-safe: ~5.0.1 - mime-types: ~2.1.19 - oauth-sign: ~0.9.0 - performance-now: ^2.1.0 - qs: ~6.5.2 - safe-buffer: ^5.1.2 - tough-cookie: ~2.5.0 - tunnel-agent: ^0.6.0 - uuid: ^3.3.2 - checksum: 4e112c087f6eabe7327869da2417e9d28fcd0910419edd2eb17b6acfc4bfa1dad61954525949c228705805882d8a98a86a0ea12d7f739c01ee92af7062996983 - languageName: node - linkType: hard - "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -9158,7 +9252,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 @@ -9235,7 +9329,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.2.0, semver@npm:^6.3.0": +"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": version: 6.3.0 resolution: "semver@npm:6.3.0" bin: @@ -9244,12 +9338,12 @@ fsevents@^2.3.2: languageName: node linkType: hard -"serialize-error@npm:^5.0.0": - version: 5.0.0 - resolution: "serialize-error@npm:5.0.0" +"serialize-error@npm:^8.1.0": + version: 8.1.0 + resolution: "serialize-error@npm:8.1.0" dependencies: - type-fest: ^0.8.0 - checksum: d298700c4e5350ff812f69fb2024f6e9110b48d8d9e50af1f6c7516446de75bb25ceaa29548ab67165f0c9bf265347c5271f7f1766b0732a0c1582315bf305f0 + type-fest: ^0.20.2 + checksum: 2eef236d50edd2d7926e602c14fb500dc3a125ee52e9f08f67033181b8e0be5d1122498bdf7c23c80683cddcad083a27974e9e7111ce23165f4d3bcdd6d65102 languageName: node linkType: hard @@ -9269,6 +9363,13 @@ fsevents@^2.3.2: languageName: node linkType: hard +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd + languageName: node + linkType: hard + "sha.js@npm:^2.4.0, sha.js@npm:^2.4.8": version: 2.4.11 resolution: "sha.js@npm:2.4.11" @@ -9398,16 +9499,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"sodium-native@npm:^3.2.0": - version: 3.3.0 - resolution: "sodium-native@npm:3.3.0" - dependencies: - node-gyp: latest - node-gyp-build: ^4.3.0 - checksum: 4412bc90155261e2006c979788d3b33e3bdba1c41669c7054a876b8731a68886e1450b356791abd2c4e7b217d21f50adfdc1e194d8909dd003223195bd8ddc0a - languageName: node - linkType: hard - "source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" @@ -9523,27 +9614,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"sshpk@npm:^1.7.0": - version: 1.17.0 - resolution: "sshpk@npm:1.17.0" - dependencies: - asn1: ~0.2.3 - assert-plus: ^1.0.0 - bcrypt-pbkdf: ^1.0.0 - dashdash: ^1.12.0 - ecc-jsbn: ~0.1.1 - getpass: ^0.1.1 - jsbn: ~0.1.0 - safer-buffer: ^2.0.2 - tweetnacl: ~0.14.0 - bin: - sshpk-conv: bin/sshpk-conv - sshpk-sign: bin/sshpk-sign - sshpk-verify: bin/sshpk-verify - checksum: ba109f65c8e6c35133b8e6ed5576abeff8aa8d614824b7275ec3ca308f081fef483607c28d97780c1e235818b0f93ed8c8b56d0a5968d5a23fd6af57718c7597 - languageName: node - linkType: hard - "ssri@npm:^8.0.1": version: 8.0.1 resolution: "ssri@npm:8.0.1" @@ -9616,6 +9686,13 @@ fsevents@^2.3.2: languageName: node linkType: hard +"streamsearch@npm:^1.1.0": + version: 1.1.0 + resolution: "streamsearch@npm:1.1.0" + checksum: 1cce16cea8405d7a233d32ca5e00a00169cc0e19fbc02aa839959985f267335d435c07f96e5e0edd0eadc6d39c98d5435fb5bbbdefc62c41834eadc5622ad942 + languageName: node + linkType: hard + "string-length@npm:^4.0.1": version: 4.0.2 resolution: "string-length@npm:4.0.2" @@ -9993,16 +10070,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"tough-cookie@npm:~2.5.0": - version: 2.5.0 - resolution: "tough-cookie@npm:2.5.0" - dependencies: - psl: ^1.1.28 - punycode: ^2.1.1 - checksum: 16a8cd090224dd176eee23837cbe7573ca0fa297d7e468ab5e1c02d49a4e9a97bb05fef11320605eac516f91d54c57838a25864e8680e27b069a5231d8264977 - languageName: node - linkType: hard - "tr46@npm:^2.1.0": version: 2.1.0 resolution: "tr46@npm:2.1.0" @@ -10144,15 +10211,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"tunnel-agent@npm:^0.6.0": - version: 0.6.0 - resolution: "tunnel-agent@npm:0.6.0" - dependencies: - safe-buffer: ^5.0.1 - checksum: 05f6510358f8afc62a057b8b692f05d70c1782b70db86d6a1e0d5e28a32389e52fa6e7707b6c5ecccacc031462e4bc35af85ecfe4bbc341767917b7cf6965711 - languageName: node - linkType: hard - "tweetnacl@npm:1.x.x, tweetnacl@npm:^1.0.3": version: 1.0.3 resolution: "tweetnacl@npm:1.0.3" @@ -10160,7 +10218,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": +"tweetnacl@npm:^0.14.3": version: 0.14.5 resolution: "tweetnacl@npm:0.14.5" checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487 @@ -10220,7 +10278,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"type-fest@npm:^0.8.0, type-fest@npm:^0.8.1": +"type-fest@npm:^0.8.1": version: 0.8.1 resolution: "type-fest@npm:0.8.1" checksum: d61c4b2eba24009033ae4500d7d818a94fd6d1b481a8111612ee141400d5f1db46f199c014766b9fa9b31a6a7374d96fc748c6d688a78a3ce5a33123839becb7 @@ -10305,6 +10363,15 @@ typescript@^4.8.3: languageName: node linkType: hard +"uint8arrays@npm:^3.0.0": + version: 3.1.1 + resolution: "uint8arrays@npm:3.1.1" + dependencies: + multiformats: ^9.4.2 + checksum: b93b6c3f0a526b116799f3a3409bd4b5d5553eb3e73e485998ece7974742254fbc0d2f7988dd21ac86c4b974552f45d9ae9cf9cba9647e529f8eb1fdd2ed84d0 + languageName: node + linkType: hard + "unbox-primitive@npm:^1.0.1": version: 1.0.1 resolution: "unbox-primitive@npm:1.0.1" @@ -10317,6 +10384,15 @@ typescript@^4.8.3: languageName: node linkType: hard +"undici@npm:^5.15.0": + version: 5.21.0 + resolution: "undici@npm:5.21.0" + dependencies: + busboy: ^1.6.0 + checksum: 013d5fd503b631d607942c511c2ab3f3fa78ebcab302acab998b43176b4815503ec15ed9752c5a47918b3bff8a0137768001d3eb57625b2bb6f6d30d8a794d6c + languageName: node + linkType: hard + "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -10437,15 +10513,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"uuid@npm:^3.3.2": - version: 3.4.0 - resolution: "uuid@npm:3.4.0" - bin: - uuid: ./bin/uuid - checksum: 58de2feed61c59060b40f8203c0e4ed7fd6f99d42534a499f1741218a1dd0c129f4aa1de797bcf822c8ea5da7e4137aa3673431a96dae729047f7aca7b27866f - languageName: node - linkType: hard - "uuid@npm:^9.0.0": version: 9.0.0 resolution: "uuid@npm:9.0.0" @@ -10490,35 +10557,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"vc-js@npm:^0.6.4": - version: 0.6.4 - resolution: "vc-js@npm:0.6.4" - dependencies: - commander: ^2.20.3 - credentials-context: ^1.0.0 - debug: ^4.1.1 - fs-extra: ^8.1.0 - get-stdin: ^7.0.0 - jsonld: ^2.0.2 - jsonld-signatures: ^5.0.0 - supports-color: ^7.1.0 - bin: - vc-js: bin/vc-js - checksum: 3242fcae63e4829794f25ecc4787c97c229cd7a287b2d38a7c4cbf3ee87d79528d18921c4e0abbd1f0cc1ab2106988d3ba2c5124bb85ed3c927c12d06b056071 - languageName: node - linkType: hard - -"verror@npm:1.10.0": - version: 1.10.0 - resolution: "verror@npm:1.10.0" - dependencies: - assert-plus: ^1.0.0 - core-util-is: 1.0.2 - extsprintf: ^1.2.0 - checksum: c431df0bedf2088b227a4e051e0ff4ca54df2c114096b0c01e1cbaadb021c30a04d7dd5b41ab277bcd51246ca135bf931d4c4c796ecae7a4fef6d744ecef36ea - languageName: node - linkType: hard - "vscode-oniguruma@npm:^1.6.1": version: 1.6.2 resolution: "vscode-oniguruma@npm:1.6.2" @@ -10903,13 +10941,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"xmldom@npm:0.1.19": - version: 0.1.19 - resolution: "xmldom@npm:0.1.19" - checksum: e7dca2a3e2b33b4c968e8efe3e1609ea6c2b7d73b618ebc23b8dfbde3cad35e03007c72b7887a029d336fb3645a425638db0826d66798cd1a87440c839964285 - languageName: node - linkType: hard - "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3" @@ -10931,13 +10962,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"yallist@npm:^3.0.2": - version: 3.1.1 - resolution: "yallist@npm:3.1.1" - checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d - languageName: node - linkType: hard - "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0" From 81e1cb316768e57d1e59276982a251a76fbcefa7 Mon Sep 17 00:00:00 2001 From: Github Action Date: Thu, 6 Apr 2023 11:44:54 +0000 Subject: [PATCH 023/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 6670c35b9..a9f7cc419 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.1-1", + "version": "0.32.1-2", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index e5908d97a..63e54495e 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.1-1", + "version": "0.32.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index dbc91eb9f..4b8ddd593 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.1-1", + "version": "0.32.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index f7b9f3075..67c4c3c36 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.1-1", + "version": "0.32.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 7db9c2b33..42edf0019 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.1-1", + "version": "0.32.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 6c30bdbf4..df3d322a3 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.1-1", + "version": "0.32.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index 61ea6837a..95ea250cc 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.1-1", + "version": "0.32.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index fad9524dc..114ff92ff 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.1-1", + "version": "0.32.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 3ffe5026c..202a56c9c 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.1-1", + "version": "0.32.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 336359117..5ed521328 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.1-1", + "version": "0.32.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 7721f08bf..e1adf94e9 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.1-1", + "version": "0.32.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 6184a2003..236cbd9ab 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.1-1", + "version": "0.32.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 85e385405..3e33c0216 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.1-1", + "version": "0.32.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index b13261af1..1436c229f 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.1-1", + "version": "0.32.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From f1218928eea13d93356a75fd38b49664a6961f74 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Mon, 17 Apr 2023 15:26:24 +0200 Subject: [PATCH 024/130] fix: augmented type generation (#747) * fix: api-augment type generation * fix: extraDefs subpath export * chore: run type generation * chore: add explanatory comments --- packages/augment-api/extraDefs/package.json | 7 + packages/augment-api/index.cjs | 10 + packages/augment-api/index.mjs | 10 + packages/augment-api/package.json | 28 +- .../src/interfaces/augment-api-query.ts | 4 +- .../src/interfaces/augment-api-rpc.ts | 20 +- .../src/interfaces/augment-api-runtime.ts | 49 +- .../src/interfaces/augment-types.ts | 33 +- .../augment-api/src/interfaces/definitions.ts | 2 +- packages/augment-api/tsconfig.build.json | 10 +- packages/augment-api/tsconfig.esm.json | 7 - tsconfig.json | 1 + yarn.lock | 462 +++++++++--------- 13 files changed, 360 insertions(+), 283 deletions(-) create mode 100644 packages/augment-api/extraDefs/package.json create mode 100644 packages/augment-api/index.cjs create mode 100644 packages/augment-api/index.mjs delete mode 100644 packages/augment-api/tsconfig.esm.json diff --git a/packages/augment-api/extraDefs/package.json b/packages/augment-api/extraDefs/package.json new file mode 100644 index 000000000..cac51f2c4 --- /dev/null +++ b/packages/augment-api/extraDefs/package.json @@ -0,0 +1,7 @@ +{ + "types": "../lib/interfaces/extraDefs/index.d.ts", + "//": [ + "This is a fallback to support the extraDefs subpath export for module systems that do not support the package.json exports field.", + "Inspired by https://github.com/andrewbranch/example-subpath-exports-ts-compat/blob/1ffe3425b0a7ad8ecdf3c373f76f431ee341366b/examples/node_modules/package-json-redirects/." + ] +} \ No newline at end of file diff --git a/packages/augment-api/index.cjs b/packages/augment-api/index.cjs new file mode 100644 index 000000000..4356e3d34 --- /dev/null +++ b/packages/augment-api/index.cjs @@ -0,0 +1,10 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +// This package does not contain executable code. Index files are included only to allow api augmentation using `require('@kiltprotocol/augment-api')`. + +module.exports = {} diff --git a/packages/augment-api/index.mjs b/packages/augment-api/index.mjs new file mode 100644 index 000000000..1a8271966 --- /dev/null +++ b/packages/augment-api/index.mjs @@ -0,0 +1,10 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +// This package does not contain executable code. Index files are included only to allow api augmentation using `import '@kiltprotocol/augment-api'`. + +export {} diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 4b8ddd593..dfb542d78 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -2,29 +2,33 @@ "name": "@kiltprotocol/augment-api", "version": "0.32.1-2", "description": "", - "main": "./lib/cjs/index.js", - "module": "./lib/esm/index.js", - "types": "./lib/cjs/index.d.ts", + "types": "./lib/index.d.ts", + "type": "module", + "main": "./index.cjs", "exports": { ".": { - "types": "./lib/cjs/index.d.ts", - "import": "./lib/esm/index.js", - "require": "./lib/cjs/index.js" + "types": "./lib/index.d.ts", + "import": "./index.mjs", + "require": "./index.cjs" + }, + "./extraDefs": { + "types": "./lib/interfaces/extraDefs/index.d.ts" } }, "files": [ - "lib/**/*" + "lib/**/*", + "index.mjs", + "index.cjs", + "extraDefs/*" ], "scripts": { "clean": "rimraf ./lib", "build": "yarn clean && yarn build:ts", "build:types": "yarn generate:defs && yarn generate:meta && yarn build:fixes", "build:fixes": "node scripts/fixTypes.mjs", - "build:ts": "yarn build:cjs && yarn build:esm", - "build:cjs": "tsc --declaration -p tsconfig.build.json && echo '{\"type\":\"commonjs\"}' > ./lib/cjs/package.json", - "build:esm": "tsc --declaration -p tsconfig.esm.json && echo '{\"type\":\"module\"}' > ./lib/esm/package.json", - "generate:defs": "ts-node --skip-project ../../node_modules/.bin/polkadot-types-from-defs --package @kiltprotocol/augment-api --input ./src/interfaces --endpoint ./metadata/spiritnet.json", - "generate:meta": "ts-node --skip-project ../../node_modules/.bin/polkadot-types-from-chain --package @kiltprotocol/augment-api --endpoint ./metadata/spiritnet.json --output ./src/interfaces --strict", + "build:ts": "tsc -p tsconfig.build.json", + "generate:defs": "ts-node --esm -P tsconfig.build.json ../../node_modules/.bin/polkadot-types-from-defs --package @kiltprotocol/augment-api --input ./src/interfaces --endpoint ./metadata/spiritnet.json", + "generate:meta": "ts-node --esm -P tsconfig.build.json ../../node_modules/.bin/polkadot-types-from-chain --package @kiltprotocol/augment-api --endpoint ./metadata/spiritnet.json --output ./src/interfaces --strict", "update-metadata": "node ./scripts/fetchMetadata.js -o './metadata/spiritnet.json' -e 'wss://spiritnet.kilt.io/'" }, "repository": "github:kiltprotocol/sdk-js", diff --git a/packages/augment-api/src/interfaces/augment-api-query.ts b/packages/augment-api/src/interfaces/augment-api-query.ts index dd5e9f356..0c6ed3456 100644 --- a/packages/augment-api/src/interfaces/augment-api-query.ts +++ b/packages/augment-api/src/interfaces/augment-api-query.ts @@ -9,7 +9,7 @@ import type { ApiTypes, AugmentedQuery, QueryableStorageEntry } from '@polkadot/ import type { BTreeMap, Bytes, Null, Option, U8aFixed, Vec, bool, u128, u16, u32, u64 } from '@polkadot/types-codec'; import type { AnyNumber, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, Call, H256 } from '@polkadot/types/interfaces/runtime'; -import type { AttestationAttestationsAttestationDetails, CtypeCtypeEntry, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DidDidDetails, DidServiceEndpointsDidEndpoint, FrameSupportDispatchPerDispatchClassWeight, FrameSupportPreimagesBounded, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, KiltAssetDidsV1AssetDid, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReserveData, PalletCollectiveVotes, PalletDemocracyReferendumInfo, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupConnectionRecord, PalletDidLookupLinkableAccountLinkableAccountId, PalletDidLookupMigrationState, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletSchedulerScheduled, PalletTipsOpenTip, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesWeb3NameWeb3NameOwnership, ParachainStakingCandidate, ParachainStakingDelegationCounter, ParachainStakingInflationInflationInfo, ParachainStakingRoundInfo, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, PublicCredentialsCredentialsCredentialEntry, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, SpiritnetRuntimeSessionKeys } from '@polkadot/types/lookup'; +import type { AttestationAttestationsAttestationDetails, CtypeCtypeEntry, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DidDidDetails, DidServiceEndpointsDidEndpoint, FrameSupportDispatchPerDispatchClassWeight, FrameSupportPreimagesBounded, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReserveData, PalletCollectiveVotes, PalletDemocracyReferendumInfo, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupConnectionRecord, PalletDidLookupLinkableAccountLinkableAccountId, PalletDidLookupMigrationState, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletSchedulerScheduled, PalletTipsOpenTip, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesWeb3NameWeb3NameOwnership, ParachainStakingCandidate, ParachainStakingDelegationCounter, ParachainStakingInflationInflationInfo, ParachainStakingRoundInfo, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, PublicCredentialsCredentialsCredentialEntry, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, SpiritnetRuntimeSessionKeys } from '@polkadot/types/lookup'; import type { Observable } from '@polkadot/types/types'; export type __AugmentedQuery = AugmentedQuery unknown>; @@ -557,7 +557,7 @@ declare module '@polkadot/api-base/types/storage' { * * It it used to perform efficient lookup of credentials given their ID. **/ - credentialSubjects: AugmentedQuery Observable>, [H256]>; + credentialSubjects: AugmentedQuery Observable>, [H256]>; }; randomnessCollectiveFlip: { /** diff --git a/packages/augment-api/src/interfaces/augment-api-rpc.ts b/packages/augment-api/src/interfaces/augment-api-rpc.ts index b763fa845..bd142eb07 100644 --- a/packages/augment-api/src/interfaces/augment-api-rpc.ts +++ b/packages/augment-api/src/interfaces/augment-api-rpc.ts @@ -21,7 +21,7 @@ import type { CreatedBlock } from '@polkadot/types/interfaces/engine'; import type { EthAccount, EthCallRequest, EthFeeHistory, EthFilter, EthFilterChanges, EthLog, EthReceipt, EthRichBlock, EthSubKind, EthSubParams, EthSyncStatus, EthTransaction, EthTransactionRequest, EthWork } from '@polkadot/types/interfaces/eth'; import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics'; import type { EncodedFinalityProofs, JustificationNotification, ReportedRoundStates } from '@polkadot/types/interfaces/grandpa'; -import type { MmrLeafBatchProof, MmrLeafProof } from '@polkadot/types/interfaces/mmr'; +import type { MmrHash, MmrLeafBatchProof } from '@polkadot/types/interfaces/mmr'; import type { StorageKind } from '@polkadot/types/interfaces/offchain'; import type { FeeDetails, RuntimeDispatchInfoV1 } from '@polkadot/types/interfaces/payment'; import type { RpcMethods } from '@polkadot/types/interfaces/rpc'; @@ -275,7 +275,7 @@ declare module '@polkadot/rpc-core/types/jsonrpc' { /** * Returns the number of transactions sent from given address at given time (block number). **/ - getTransactionCount: AugmentedRpc<(hash: H256 | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable>; + getTransactionCount: AugmentedRpc<(address: H160 | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable>; /** * Returns transaction receipt by transaction hash. **/ @@ -373,13 +373,21 @@ declare module '@polkadot/rpc-core/types/jsonrpc' { }; mmr: { /** - * Generate MMR proof for the given leaf indices. + * Generate MMR proof for the given block numbers. **/ - generateBatchProof: AugmentedRpc<(leafIndices: Vec | (u64 | AnyNumber | Uint8Array)[], at?: BlockHash | string | Uint8Array) => Observable>; + generateProof: AugmentedRpc<(blockNumbers: Vec | (u64 | AnyNumber | Uint8Array)[], bestKnownBlockNumber?: u64 | AnyNumber | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; /** - * Generate MMR proof for given leaf index. + * Get the MMR root hash for the current best block. **/ - generateProof: AugmentedRpc<(leafIndex: u64 | AnyNumber | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; + root: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable>; + /** + * Verify an MMR proof + **/ + verifyProof: AugmentedRpc<(proof: MmrLeafBatchProof | { blockHash?: any; leaves?: any; proof?: any } | string | Uint8Array) => Observable>; + /** + * Verify an MMR proof statelessly given an mmr_root + **/ + verifyProofStateless: AugmentedRpc<(root: MmrHash | string | Uint8Array, proof: MmrLeafBatchProof | { blockHash?: any; leaves?: any; proof?: any } | string | Uint8Array) => Observable>; }; net: { /** diff --git a/packages/augment-api/src/interfaces/augment-api-runtime.ts b/packages/augment-api/src/interfaces/augment-api-runtime.ts index 083ee0388..8dd92c730 100644 --- a/packages/augment-api/src/interfaces/augment-api-runtime.ts +++ b/packages/augment-api/src/interfaces/augment-api-runtime.ts @@ -5,19 +5,18 @@ // this is required to allow for ambient/previous definitions import '@polkadot/api-base/types/calls'; -// FIXME: Error when using the autogenerated "from '@kiltprotocol/augment-api/extraDefs'" -import type { DidApiAccountId, PublicCredentialError, PublicCredentialFilter, RawDidLinkedInfo, StakingRates } from './extraDefs/index.js'; - +import type { DidApiAccountId, PublicCredentialError, PublicCredentialFilter, RawDidLinkedInfo, StakingRates } from '@kiltprotocol/augment-api/extraDefs'; import type { ApiTypes, AugmentedCall, DecoratedCallBase } from '@polkadot/api-base/types'; -import type { Bytes, Null, Option, Result, Text, Vec } from '@polkadot/types-codec'; -import type { ITuple } from '@polkadot/types-codec/types'; +import type { Bytes, Null, Option, Result, Text, Vec, u32 } from '@polkadot/types-codec'; +import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types'; import type { CheckInherentsResult, InherentData } from '@polkadot/types/interfaces/blockbuilder'; import type { BlockHash } from '@polkadot/types/interfaces/chain'; import type { AuthorityId } from '@polkadot/types/interfaces/consensus'; import type { CollationInfo } from '@polkadot/types/interfaces/cumulus'; import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics'; import type { OpaqueMetadata } from '@polkadot/types/interfaces/metadata'; -import type { AccountId, AccountId32, Balance, Block, Hash, Header, Index, KeyTypeId, SlotDuration } from '@polkadot/types/interfaces/runtime'; +import type { FeeDetails, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment'; +import type { AccountId, AccountId32, Balance, Block, Call, Hash, Header, Index, KeyTypeId, SlotDuration, Weight } from '@polkadot/types/interfaces/runtime'; import type { RuntimeVersion } from '@polkadot/types/interfaces/state'; import type { ApplyExtrinsicResult } from '@polkadot/types/interfaces/system'; import type { TransactionSource, TransactionValidity } from '@polkadot/types/interfaces/txqueue'; @@ -159,5 +158,43 @@ declare module '@polkadot/api-base/types/calls' { **/ validateTransaction: AugmentedCall Observable>; }; + /** 0x37c8bb1350a9a2a8/3 */ + transactionPaymentApi: { + /** + * The transaction fee details + **/ + queryFeeDetails: AugmentedCall Observable>; + /** + * The transaction info + **/ + queryInfo: AugmentedCall Observable>; + /** + * Query the output of the current LengthToFee given some input + **/ + queryLengthToFee: AugmentedCall Observable>; + /** + * Query the output of the current WeightToFee given some input + **/ + queryWeightToFee: AugmentedCall Observable>; + }; + /** 0xf3ff14d5ab527059/3 */ + transactionPaymentCallApi: { + /** + * The call fee details + **/ + queryCallFeeDetails: AugmentedCall Observable>; + /** + * The call info + **/ + queryCallInfo: AugmentedCall Observable>; + /** + * Query the output of the current LengthToFee given some input + **/ + queryLengthToFee: AugmentedCall Observable>; + /** + * Query the output of the current WeightToFee given some input + **/ + queryWeightToFee: AugmentedCall Observable>; + }; } // AugmentedCalls } // declare module diff --git a/packages/augment-api/src/interfaces/augment-types.ts b/packages/augment-api/src/interfaces/augment-types.ts index 96d6c7fb6..9c3f3dd8a 100644 --- a/packages/augment-api/src/interfaces/augment-types.ts +++ b/packages/augment-api/src/interfaces/augment-types.ts @@ -5,11 +5,9 @@ // this is required to allow for ambient/previous definitions import '@polkadot/types/types/registry'; -// FIXME: Error when using the autogenerated "from '@kiltprotocol/augment-api/extraDefs'" -import type { DidApiAccountId, PublicCredentialError, PublicCredentialFilter, RawDidLinkedInfo, StakingRates } from './extraDefs/index.js'; - +import type { DidApiAccountId, PublicCredentialError, PublicCredentialFilter, RawDidLinkedInfo, StakingRates } from '@kiltprotocol/augment-api/extraDefs'; import type { Data, StorageKey } from '@polkadot/types'; -import type { BitVec, Bool, Bytes, F32, F64, I128, I16, I256, I32, I64, I8, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, f32, f64, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec'; +import type { BitVec, Bool, Bytes, F32, F64, I128, I16, I256, I32, I64, I8, ISize, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, f32, f64, i128, i16, i256, i32, i64, i8, isize, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec'; import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets'; import type { BlockAttestations, IncludedBlocks, MoreAttestations } from '@polkadot/types/interfaces/attestations'; import type { RawAuraPreDigest } from '@polkadot/types/interfaces/aura'; @@ -17,7 +15,7 @@ import type { ExtrinsicOrHash, ExtrinsicStatus } from '@polkadot/types/interface import type { UncleEntryItem } from '@polkadot/types/interfaces/authorship'; import type { AllowedSlots, BabeAuthorityWeight, BabeBlockWeight, BabeEpochConfiguration, BabeEquivocationProof, BabeGenesisConfiguration, BabeGenesisConfigurationV1, BabeWeight, Epoch, EpochAuthorship, MaybeRandomness, MaybeVrf, NextConfigDescriptor, NextConfigDescriptorV1, OpaqueKeyOwnershipProof, Randomness, RawBabePreDigest, RawBabePreDigestCompat, RawBabePreDigestPrimary, RawBabePreDigestPrimaryTo159, RawBabePreDigestSecondaryPlain, RawBabePreDigestSecondaryTo159, RawBabePreDigestSecondaryVRF, RawBabePreDigestTo159, SlotNumber, VrfData, VrfOutput, VrfProof } from '@polkadot/types/interfaces/babe'; import type { AccountData, BalanceLock, BalanceLockTo212, BalanceStatus, Reasons, ReserveData, ReserveIdentifier, VestingSchedule, WithdrawReasons } from '@polkadot/types/interfaces/balances'; -import type { BeefyAuthoritySet, BeefyCommitment, BeefyId, BeefyNextAuthoritySet, BeefyPayload, BeefyPayloadId, BeefySignedCommitment, MmrRootHash, ValidatorSet, ValidatorSetId } from '@polkadot/types/interfaces/beefy'; +import type { BeefyAuthoritySet, BeefyCommitment, BeefyEquivocationProof, BeefyId, BeefyNextAuthoritySet, BeefyPayload, BeefyPayloadId, BeefySignedCommitment, BeefyVoteMessage, MmrRootHash, ValidatorSet, ValidatorSetId } from '@polkadot/types/interfaces/beefy'; import type { BenchmarkBatch, BenchmarkConfig, BenchmarkList, BenchmarkMetadata, BenchmarkParameter, BenchmarkResult } from '@polkadot/types/interfaces/benchmark'; import type { CheckInherentsResult, InherentData, InherentIdentifier } from '@polkadot/types/interfaces/blockbuilder'; import type { BridgeMessageId, BridgedBlockHash, BridgedBlockNumber, BridgedHeader, CallOrigin, ChainId, DeliveredMessages, DispatchFeePayment, InboundLaneData, InboundRelayer, InitializationData, LaneId, MessageData, MessageKey, MessageNonce, MessagesDeliveryProofOf, MessagesProofOf, OperatingMode, OutboundLaneData, OutboundMessageFee, OutboundPayload, Parameter, RelayerId, UnrewardedRelayer, UnrewardedRelayersState } from '@polkadot/types/interfaces/bridges'; @@ -44,18 +42,19 @@ import type { IdentityFields, IdentityInfo, IdentityInfoAdditional, IdentityInfo import type { AuthIndex, AuthoritySignature, Heartbeat, HeartbeatTo244, OpaqueMultiaddr, OpaqueNetworkState, OpaquePeerId } from '@polkadot/types/interfaces/imOnline'; import type { CallIndex, LotteryConfig } from '@polkadot/types/interfaces/lottery'; import type { ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV13, ErrorMetadataV14, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV13, EventMetadataV14, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, ExtrinsicMetadataV13, ExtrinsicMetadataV14, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV13, FunctionArgumentMetadataV14, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV13, FunctionMetadataV14, FunctionMetadataV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV13, MetadataV14, MetadataV9, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV13, ModuleConstantMetadataV9, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV13, ModuleMetadataV9, OpaqueMetadata, PalletCallMetadataLatest, PalletCallMetadataV14, PalletConstantMetadataLatest, PalletConstantMetadataV14, PalletErrorMetadataLatest, PalletErrorMetadataV14, PalletEventMetadataLatest, PalletEventMetadataV14, PalletMetadataLatest, PalletMetadataV14, PalletStorageMetadataLatest, PalletStorageMetadataV14, PortableType, PortableTypeV14, SignedExtensionMetadataLatest, SignedExtensionMetadataV14, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV13, StorageEntryMetadataV14, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV13, StorageEntryModifierV14, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV13, StorageEntryTypeV14, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV13, StorageHasherV14, StorageHasherV9, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV13, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata'; -import type { MmrBatchProof, MmrEncodableOpaqueLeaf, MmrError, MmrLeafBatchProof, MmrLeafIndex, MmrLeafProof, MmrNodeIndex, MmrProof } from '@polkadot/types/interfaces/mmr'; -import type { NpApiError } from '@polkadot/types/interfaces/nompools'; +import type { MmrBatchProof, MmrEncodableOpaqueLeaf, MmrError, MmrHash, MmrLeafBatchProof, MmrLeafIndex, MmrLeafProof, MmrNodeIndex, MmrProof } from '@polkadot/types/interfaces/mmr'; +import type { NftCollectionId, NftItemId } from '@polkadot/types/interfaces/nfts'; +import type { NpApiError, NpPoolId } from '@polkadot/types/interfaces/nompools'; import type { StorageKind } from '@polkadot/types/interfaces/offchain'; import type { DeferredOffenceOf, Kind, OffenceDetails, Offender, OpaqueTimeSlot, ReportIdOf, Reporter } from '@polkadot/types/interfaces/offences'; -import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateEvent, CandidateHash, CandidateInfo, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, CoreState, DisputeLocation, DisputeResult, DisputeState, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, GroupRotationInfo, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OccupiedCore, OccupiedCoreAssumption, OldV1SessionInfo, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, PvfCheckStatement, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, ReplacementTimes, Retriable, ScheduledCore, Scheduling, ScrapedOnChainVotes, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, SlotRange10, Statement, SubId, SystemInherentData, TransientValidationData, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersData10, WinnersDataTuple, WinnersDataTuple10, WinningData, WinningData10, WinningDataEntry } from '@polkadot/types/interfaces/parachains'; +import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateEvent, CandidateHash, CandidateInfo, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, CoreState, DisputeLocation, DisputeResult, DisputeState, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExecutorParam, ExecutorParams, ExecutorParamsHash, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, GroupRotationInfo, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OccupiedCore, OccupiedCoreAssumption, OldV1SessionInfo, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, PvfCheckStatement, PvfExecTimeoutKind, PvfPrepTimeoutKind, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, ReplacementTimes, Retriable, ScheduledCore, Scheduling, ScrapedOnChainVotes, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, SlotRange10, Statement, SubId, SystemInherentData, TransientValidationData, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersData10, WinnersDataTuple, WinnersDataTuple10, WinningData, WinningData10, WinningDataEntry } from '@polkadot/types/interfaces/parachains'; import type { FeeDetails, InclusionFee, RuntimeDispatchInfo, RuntimeDispatchInfoV1, RuntimeDispatchInfoV2 } from '@polkadot/types/interfaces/payment'; import type { Approvals } from '@polkadot/types/interfaces/poll'; import type { ProxyAnnouncement, ProxyDefinition, ProxyType } from '@polkadot/types/interfaces/proxy'; import type { AccountStatus, AccountValidity } from '@polkadot/types/interfaces/purchase'; import type { ActiveRecovery, RecoveryConfig } from '@polkadot/types/interfaces/recovery'; import type { RpcMethods } from '@polkadot/types/interfaces/rpc'; -import type { AccountId, AccountId20, AccountId32, AccountId33, AccountIdOf, AccountIndex, Address, AssetId, Balance, BalanceOf, Block, BlockNumber, BlockNumberFor, BlockNumberOf, Call, CallHash, CallHashOf, ChangesTrieConfiguration, ChangesTrieSignal, CodecHash, Consensus, ConsensusEngineId, CrateVersion, Digest, DigestItem, EncodedJustification, ExtrinsicsWeight, Fixed128, Fixed64, FixedI128, FixedI64, FixedU128, FixedU64, H1024, H128, H160, H2048, H256, H32, H512, H64, Hash, Header, HeaderPartial, I32F32, Index, IndicesLookupSource, Justification, Justifications, KeyTypeId, KeyValue, LockIdentifier, LookupSource, LookupTarget, ModuleId, Moment, MultiAddress, MultiSigner, OpaqueCall, Origin, OriginCaller, PalletId, PalletVersion, PalletsOrigin, Pays, PerU16, Perbill, Percent, Permill, Perquintill, Phantom, PhantomData, PreRuntime, Releases, RuntimeDbWeight, Seal, SealV0, SignedBlock, SignedBlockWithJustification, SignedBlockWithJustifications, Slot, SlotDuration, StorageData, StorageInfo, StorageProof, TransactionInfo, TransactionLongevity, TransactionPriority, TransactionStorageProof, TransactionTag, U32F32, ValidatorId, ValidatorIdOf, Weight, WeightMultiplier, WeightV1, WeightV2 } from '@polkadot/types/interfaces/runtime'; +import type { AccountId, AccountId20, AccountId32, AccountId33, AccountIdOf, AccountIndex, Address, AssetId, Balance, BalanceOf, Block, BlockNumber, BlockNumberFor, BlockNumberOf, Call, CallHash, CallHashOf, ChangesTrieConfiguration, ChangesTrieSignal, CodecHash, Consensus, ConsensusEngineId, CrateVersion, Digest, DigestItem, EncodedJustification, ExtrinsicsWeight, Fixed128, Fixed64, FixedI128, FixedI64, FixedU128, FixedU64, H1024, H128, H160, H2048, H256, H32, H512, H64, Hash, Header, HeaderPartial, I32F32, Index, IndicesLookupSource, Justification, Justifications, KeyTypeId, KeyValue, LockIdentifier, LookupSource, LookupTarget, ModuleId, Moment, MultiAddress, MultiSigner, OpaqueCall, Origin, OriginCaller, PalletId, PalletVersion, PalletsOrigin, Pays, PerU16, Perbill, Percent, Permill, Perquintill, Phantom, PhantomData, PreRuntime, Releases, RuntimeCall, RuntimeDbWeight, RuntimeEvent, Seal, SealV0, SignedBlock, SignedBlockWithJustification, SignedBlockWithJustifications, Slot, SlotDuration, StorageData, StorageInfo, StorageProof, TransactionInfo, TransactionLongevity, TransactionPriority, TransactionStorageProof, TransactionTag, U32F32, ValidatorId, ValidatorIdOf, Weight, WeightMultiplier, WeightV0, WeightV1, WeightV2 } from '@polkadot/types/interfaces/runtime'; import type { Si0Field, Si0LookupTypeId, Si0Path, Si0Type, Si0TypeDef, Si0TypeDefArray, Si0TypeDefBitSequence, Si0TypeDefCompact, Si0TypeDefComposite, Si0TypeDefPhantom, Si0TypeDefPrimitive, Si0TypeDefSequence, Si0TypeDefTuple, Si0TypeDefVariant, Si0TypeParameter, Si0Variant, Si1Field, Si1LookupTypeId, Si1Path, Si1Type, Si1TypeDef, Si1TypeDefArray, Si1TypeDefBitSequence, Si1TypeDefCompact, Si1TypeDefComposite, Si1TypeDefPrimitive, Si1TypeDefSequence, Si1TypeDefTuple, Si1TypeDefVariant, Si1TypeParameter, Si1Variant, SiField, SiLookupTypeId, SiPath, SiType, SiTypeDef, SiTypeDefArray, SiTypeDefBitSequence, SiTypeDefCompact, SiTypeDefComposite, SiTypeDefPrimitive, SiTypeDefSequence, SiTypeDefTuple, SiTypeDefVariant, SiTypeParameter, SiVariant } from '@polkadot/types/interfaces/scaleInfo'; import type { Period, Priority, SchedulePeriod, SchedulePriority, Scheduled, ScheduledTo254, TaskAddress } from '@polkadot/types/interfaces/scheduler'; import type { BeefyKey, FullIdentification, IdentificationTuple, Keys, MembershipProof, SessionIndex, SessionKeys1, SessionKeys10, SessionKeys10B, SessionKeys2, SessionKeys3, SessionKeys4, SessionKeys5, SessionKeys6, SessionKeys6B, SessionKeys7, SessionKeys7B, SessionKeys8, SessionKeys8B, SessionKeys9, SessionKeys9B, ValidatorCount } from '@polkadot/types/interfaces/session'; @@ -153,12 +152,14 @@ declare module '@polkadot/types/types/registry' { BalanceStatus: BalanceStatus; BeefyAuthoritySet: BeefyAuthoritySet; BeefyCommitment: BeefyCommitment; + BeefyEquivocationProof: BeefyEquivocationProof; BeefyId: BeefyId; BeefyKey: BeefyKey; BeefyNextAuthoritySet: BeefyNextAuthoritySet; BeefyPayload: BeefyPayload; BeefyPayloadId: BeefyPayloadId; BeefySignedCommitment: BeefySignedCommitment; + BeefyVoteMessage: BeefyVoteMessage; BenchmarkBatch: BenchmarkBatch; BenchmarkConfig: BenchmarkConfig; BenchmarkList: BenchmarkList; @@ -442,6 +443,9 @@ declare module '@polkadot/types/types/registry' { EvmLog: EvmLog; EvmVicinity: EvmVicinity; ExecReturnValue: ExecReturnValue; + ExecutorParam: ExecutorParam; + ExecutorParams: ExecutorParams; + ExecutorParamsHash: ExecutorParamsHash; ExitError: ExitError; ExitFatal: ExitFatal; ExitReason: ExitReason; @@ -589,6 +593,8 @@ declare module '@polkadot/types/types/registry' { InteriorMultiLocation: InteriorMultiLocation; InvalidDisputeStatementKind: InvalidDisputeStatementKind; InvalidTransaction: InvalidTransaction; + isize: isize; + ISize: ISize; Json: Json; Junction: Junction; Junctions: Junctions; @@ -647,6 +653,7 @@ declare module '@polkadot/types/types/registry' { MmrBatchProof: MmrBatchProof; MmrEncodableOpaqueLeaf: MmrEncodableOpaqueLeaf; MmrError: MmrError; + MmrHash: MmrHash; MmrLeafBatchProof: MmrLeafBatchProof; MmrLeafIndex: MmrLeafIndex; MmrLeafProof: MmrLeafProof; @@ -696,12 +703,15 @@ declare module '@polkadot/types/types/registry' { NextAuthority: NextAuthority; NextConfigDescriptor: NextConfigDescriptor; NextConfigDescriptorV1: NextConfigDescriptorV1; + NftCollectionId: NftCollectionId; + NftItemId: NftItemId; NodeRole: NodeRole; Nominations: Nominations; NominatorIndex: NominatorIndex; NominatorIndexCompact: NominatorIndexCompact; NotConnectedPeer: NotConnectedPeer; NpApiError: NpApiError; + NpPoolId: NpPoolId; Null: Null; OccupiedCore: OccupiedCore; OccupiedCoreAssumption: OccupiedCoreAssumption; @@ -816,6 +826,8 @@ declare module '@polkadot/types/types/registry' { PublicCredentialError: PublicCredentialError; PublicCredentialFilter: PublicCredentialFilter; PvfCheckStatement: PvfCheckStatement; + PvfExecTimeoutKind: PvfExecTimeoutKind; + PvfPrepTimeoutKind: PvfPrepTimeoutKind; QueryId: QueryId; QueryStatus: QueryStatus; QueueConfigData: QueueConfigData; @@ -882,10 +894,12 @@ declare module '@polkadot/types/types/registry' { RoundSnapshot: RoundSnapshot; RoundState: RoundState; RpcMethods: RpcMethods; + RuntimeCall: RuntimeCall; RuntimeDbWeight: RuntimeDbWeight; RuntimeDispatchInfo: RuntimeDispatchInfo; RuntimeDispatchInfoV1: RuntimeDispatchInfoV1; RuntimeDispatchInfoV2: RuntimeDispatchInfoV2; + RuntimeEvent: RuntimeEvent; RuntimeVersion: RuntimeVersion; RuntimeVersionApi: RuntimeVersionApi; RuntimeVersionPartial: RuntimeVersionPartial; @@ -1161,6 +1175,7 @@ declare module '@polkadot/types/types/registry' { WeightMultiplier: WeightMultiplier; WeightPerClass: WeightPerClass; WeightToFeeCoefficient: WeightToFeeCoefficient; + WeightV0: WeightV0; WeightV1: WeightV1; WeightV2: WeightV2; WildFungibility: WildFungibility; diff --git a/packages/augment-api/src/interfaces/definitions.ts b/packages/augment-api/src/interfaces/definitions.ts index 25530a322..54565e8ce 100644 --- a/packages/augment-api/src/interfaces/definitions.ts +++ b/packages/augment-api/src/interfaces/definitions.ts @@ -1,3 +1,3 @@ /* eslint-disable */ -export { default as extraDefs } from './extraDefs/definitions' +export { default as extraDefs } from './extraDefs/definitions.js' diff --git a/packages/augment-api/tsconfig.build.json b/packages/augment-api/tsconfig.build.json index 46233a664..4ea5cbbd1 100644 --- a/packages/augment-api/tsconfig.build.json +++ b/packages/augment-api/tsconfig.build.json @@ -1,13 +1,15 @@ { "extends": "../../tsconfig.build.json", "compilerOptions": { - "module": "CommonJS", - "outDir": "./lib/cjs", + "module": "ES6", + "outDir": "./lib", + "declaration": true, + "emitDeclarationOnly": true, "skipLibCheck": true, "noUnusedLocals": false, "paths": { - "@kiltprotocol/augment-api/*": [ - "./src/*" + "@kiltprotocol/augment-api/extraDefs": [ + "./src/interfaces/extraDefs/index.ts" ], "@polkadot/api/augment": [ "./src/interfaces/augment-api.ts" diff --git a/packages/augment-api/tsconfig.esm.json b/packages/augment-api/tsconfig.esm.json deleted file mode 100644 index e1f3b73b6..000000000 --- a/packages/augment-api/tsconfig.esm.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.build.json", - "compilerOptions": { - "module": "ES6", - "outDir": "./lib/esm" - } -} diff --git a/tsconfig.json b/tsconfig.json index 61386ace1..cf928ba32 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,6 +18,7 @@ "@kiltprotocol/docs": ["docs/src"], "@kiltprotocol/testing": ["testing/src"], "@kiltprotocol/augment-api": ["augment-api/src"], + "@kiltprotocol/augment-api/extraDefs": ["augment-api/src/interfaces/extraDefs"], "@kiltprotocol/type-definitions": ["type-definitions/src"], } }, diff --git a/yarn.lock b/yarn.lock index 3e0bacd59..c4df4658b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2121,10 +2121,10 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.2.0": - version: 1.2.0 - resolution: "@noble/hashes@npm:1.2.0" - checksum: 8ca080ce557b8f40fb2f78d3aedffd95825a415ac8e13d7ffe3643f8626a8c2d99a3e5975b555027ac24316d8b3c02a35b8358567c0c23af681e6573602aa434 +"@noble/hashes@npm:1.3.0": + version: 1.3.0 + resolution: "@noble/hashes@npm:1.3.0" + checksum: d7ddb6d7c60f1ce1f87facbbef5b724cdea536fc9e7f59ae96e0fc9de96c8f1a2ae2bdedbce10f7dcc621338dfef8533daa73c873f2b5c87fa1a4e05a95c2e2e languageName: node linkType: hard @@ -2194,142 +2194,142 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-augment@npm:10.1.2": - version: 10.1.2 - resolution: "@polkadot/api-augment@npm:10.1.2" +"@polkadot/api-augment@npm:10.3.2": + version: 10.3.2 + resolution: "@polkadot/api-augment@npm:10.3.2" dependencies: - "@polkadot/api-base": 10.1.2 - "@polkadot/rpc-augment": 10.1.2 - "@polkadot/types": 10.1.2 - "@polkadot/types-augment": 10.1.2 - "@polkadot/types-codec": 10.1.2 - "@polkadot/util": ^11.0.2 + "@polkadot/api-base": 10.3.2 + "@polkadot/rpc-augment": 10.3.2 + "@polkadot/types": 10.3.2 + "@polkadot/types-augment": 10.3.2 + "@polkadot/types-codec": 10.3.2 + "@polkadot/util": ^11.1.3 tslib: ^2.5.0 - checksum: 74d6f0dd0dabdc80b7cb60161c92eaff281b371cf12cccd77c6d6895347877d3f0e21e541f7f79dbada4e19ca7de6e72d945f849d5d103dd02fe918530a81783 + checksum: 9b7455f84c1eb8485c85548b122c962558508205b4b26b33ea2f9ea6143bd3cfc7ebf0921a54970b955d39cc90e17af710d14d913438e3bde916a1f0396ee12b languageName: node linkType: hard -"@polkadot/api-base@npm:10.1.2": - version: 10.1.2 - resolution: "@polkadot/api-base@npm:10.1.2" +"@polkadot/api-base@npm:10.3.2": + version: 10.3.2 + resolution: "@polkadot/api-base@npm:10.3.2" dependencies: - "@polkadot/rpc-core": 10.1.2 - "@polkadot/types": 10.1.2 - "@polkadot/util": ^11.0.2 + "@polkadot/rpc-core": 10.3.2 + "@polkadot/types": 10.3.2 + "@polkadot/util": ^11.1.3 rxjs: ^7.8.0 tslib: ^2.5.0 - checksum: fcb3f8cb61ea5438b28e06d4d34c2d6a331afa4ab4637929410bcf50d0ab0423df249bcd60846a3f7f0e0cdaa5bb3a033525514f0c3e19db4b0bb37da8b64d8a + checksum: 44eb437fd4240c6ad0b8ac0a972583c68f12e72a44b4a7c6a0887bdc8f33ecb99513e396f6aa436ab4aa09e0c30fff16cf4c2a4583527d8cfc2dbcaa9a8c9301 languageName: node linkType: hard -"@polkadot/api-derive@npm:10.1.2": - version: 10.1.2 - resolution: "@polkadot/api-derive@npm:10.1.2" +"@polkadot/api-derive@npm:10.3.2": + version: 10.3.2 + resolution: "@polkadot/api-derive@npm:10.3.2" dependencies: - "@polkadot/api": 10.1.2 - "@polkadot/api-augment": 10.1.2 - "@polkadot/api-base": 10.1.2 - "@polkadot/rpc-core": 10.1.2 - "@polkadot/types": 10.1.2 - "@polkadot/types-codec": 10.1.2 - "@polkadot/util": ^11.0.2 - "@polkadot/util-crypto": ^11.0.2 + "@polkadot/api": 10.3.2 + "@polkadot/api-augment": 10.3.2 + "@polkadot/api-base": 10.3.2 + "@polkadot/rpc-core": 10.3.2 + "@polkadot/types": 10.3.2 + "@polkadot/types-codec": 10.3.2 + "@polkadot/util": ^11.1.3 + "@polkadot/util-crypto": ^11.1.3 rxjs: ^7.8.0 tslib: ^2.5.0 - checksum: 0727d34b4dab54e3e845db4779ad53cfb1e02540306505c232bf395fb78c67de043622d0761e27349b53d9b13cc3f69a7a93f5e948ca36bbda1f1a451758426c - languageName: node - linkType: hard - -"@polkadot/api@npm:10.1.2, @polkadot/api@npm:^10.0.0": - version: 10.1.2 - resolution: "@polkadot/api@npm:10.1.2" - dependencies: - "@polkadot/api-augment": 10.1.2 - "@polkadot/api-base": 10.1.2 - "@polkadot/api-derive": 10.1.2 - "@polkadot/keyring": ^11.0.2 - "@polkadot/rpc-augment": 10.1.2 - "@polkadot/rpc-core": 10.1.2 - "@polkadot/rpc-provider": 10.1.2 - "@polkadot/types": 10.1.2 - "@polkadot/types-augment": 10.1.2 - "@polkadot/types-codec": 10.1.2 - "@polkadot/types-create": 10.1.2 - "@polkadot/types-known": 10.1.2 - "@polkadot/util": ^11.0.2 - "@polkadot/util-crypto": ^11.0.2 + checksum: 3d1a38c520291ef295748794f08758973458c3c450ddad7599179d25763483921c002a38823cb740d8e4ee5bcb09ad48ad35f812a14993c46e14bb8b17134c97 + languageName: node + linkType: hard + +"@polkadot/api@npm:10.3.2, @polkadot/api@npm:^10.0.0": + version: 10.3.2 + resolution: "@polkadot/api@npm:10.3.2" + dependencies: + "@polkadot/api-augment": 10.3.2 + "@polkadot/api-base": 10.3.2 + "@polkadot/api-derive": 10.3.2 + "@polkadot/keyring": ^11.1.3 + "@polkadot/rpc-augment": 10.3.2 + "@polkadot/rpc-core": 10.3.2 + "@polkadot/rpc-provider": 10.3.2 + "@polkadot/types": 10.3.2 + "@polkadot/types-augment": 10.3.2 + "@polkadot/types-codec": 10.3.2 + "@polkadot/types-create": 10.3.2 + "@polkadot/types-known": 10.3.2 + "@polkadot/util": ^11.1.3 + "@polkadot/util-crypto": ^11.1.3 eventemitter3: ^5.0.0 rxjs: ^7.8.0 tslib: ^2.5.0 - checksum: b62c18797a5475a76ef08f752500a1156bfd6f425d6fd702857fa25fd58b85b6d8c5e008fec48ea856aea88da17d9266bc7271a4fd4b745b28f435bdbab0b1f8 + checksum: 391e02b905f8dd21b785503c43df5eaa69e135a9b1ffb9c5737c1adff209acb7591fc5e11b6acfad48fee48900b9f33e05c3223e93d4a6b06e1ec432ebeeb5e1 languageName: node linkType: hard -"@polkadot/keyring@npm:^11.0.0, @polkadot/keyring@npm:^11.0.2": - version: 11.0.2 - resolution: "@polkadot/keyring@npm:11.0.2" +"@polkadot/keyring@npm:^11.0.0, @polkadot/keyring@npm:^11.1.3": + version: 11.1.3 + resolution: "@polkadot/keyring@npm:11.1.3" dependencies: - "@polkadot/util": 11.0.2 - "@polkadot/util-crypto": 11.0.2 + "@polkadot/util": 11.1.3 + "@polkadot/util-crypto": 11.1.3 tslib: ^2.5.0 peerDependencies: - "@polkadot/util": 11.0.2 - "@polkadot/util-crypto": 11.0.2 - checksum: 24c60f1f14319b170b474d2175693acd06cacf164ab0748248f56681ea6749bbb0bd3a3d86d287d93cc0d7bdd88b4ad0c223950830d2a10cf0ae1cb0f4ae6a77 + "@polkadot/util": 11.1.3 + "@polkadot/util-crypto": 11.1.3 + checksum: 8bc7af976cf7b4bcbac16032f82d0f827679092037ccee17b1e403f06e423ba0fe999903095868af974f370f1f147442d14ed2696c45570b204deb065c64b52a languageName: node linkType: hard -"@polkadot/networks@npm:11.0.2, @polkadot/networks@npm:^11.0.2": - version: 11.0.2 - resolution: "@polkadot/networks@npm:11.0.2" +"@polkadot/networks@npm:11.1.3, @polkadot/networks@npm:^11.1.3": + version: 11.1.3 + resolution: "@polkadot/networks@npm:11.1.3" dependencies: - "@polkadot/util": 11.0.2 + "@polkadot/util": 11.1.3 "@substrate/ss58-registry": ^1.39.0 tslib: ^2.5.0 - checksum: cd2d5bc6934749a854ee185e5d8961c683d2a4d6aa39e640f8ab225e578713c644d70431c641fd8ce378c4194ac4776352f34bec773ae5a6309083af6d00dbcd + checksum: cbd408d700c5033081bac0ef2d6b3ca222b92d4d7812d920ed12871602d2deba5ff4aa80a25764fb702c968eb217d251d5bdcd59cf31c8a2bf2787a908e572a4 languageName: node linkType: hard -"@polkadot/rpc-augment@npm:10.1.2": - version: 10.1.2 - resolution: "@polkadot/rpc-augment@npm:10.1.2" +"@polkadot/rpc-augment@npm:10.3.2": + version: 10.3.2 + resolution: "@polkadot/rpc-augment@npm:10.3.2" dependencies: - "@polkadot/rpc-core": 10.1.2 - "@polkadot/types": 10.1.2 - "@polkadot/types-codec": 10.1.2 - "@polkadot/util": ^11.0.2 + "@polkadot/rpc-core": 10.3.2 + "@polkadot/types": 10.3.2 + "@polkadot/types-codec": 10.3.2 + "@polkadot/util": ^11.1.3 tslib: ^2.5.0 - checksum: 16139da5ced163197e13b6b9bf2c3ee0d7e6ee83753d07918d22653329f1dda49ae4fd23a989a9f19f77d02f18e64892eb3a34f6413f907dd4d2fd6d59af4d80 + checksum: 0367bcc791ef8041a89804b971cac59d9cbd6b73964ee64fdf8e5acd74a2703ef1f69a20bd5199102683cdd4936a0a40e8a06c941d49e1808a463de311d0f816 languageName: node linkType: hard -"@polkadot/rpc-core@npm:10.1.2": - version: 10.1.2 - resolution: "@polkadot/rpc-core@npm:10.1.2" +"@polkadot/rpc-core@npm:10.3.2": + version: 10.3.2 + resolution: "@polkadot/rpc-core@npm:10.3.2" dependencies: - "@polkadot/rpc-augment": 10.1.2 - "@polkadot/rpc-provider": 10.1.2 - "@polkadot/types": 10.1.2 - "@polkadot/util": ^11.0.2 + "@polkadot/rpc-augment": 10.3.2 + "@polkadot/rpc-provider": 10.3.2 + "@polkadot/types": 10.3.2 + "@polkadot/util": ^11.1.3 rxjs: ^7.8.0 tslib: ^2.5.0 - checksum: 2c5c5510506489542689d8db8f00310097623d3ef1764f1faf0e5688770c4d0f0057b43870771e0036a723bb311487238def4a1c689c4a10e3eb07ef925fab59 + checksum: aaf6e0bb9bc31ddcf2f92bc38bb761cfb1d0fbf4c73dac0863d9df561bec90fd254d9c93ff99570394f7ecfd5e4792cd197865409097987ca57985ab8dea3024 languageName: node linkType: hard -"@polkadot/rpc-provider@npm:10.1.2": - version: 10.1.2 - resolution: "@polkadot/rpc-provider@npm:10.1.2" +"@polkadot/rpc-provider@npm:10.3.2": + version: 10.3.2 + resolution: "@polkadot/rpc-provider@npm:10.3.2" dependencies: - "@polkadot/keyring": ^11.0.2 - "@polkadot/types": 10.1.2 - "@polkadot/types-support": 10.1.2 - "@polkadot/util": ^11.0.2 - "@polkadot/util-crypto": ^11.0.2 - "@polkadot/x-fetch": ^11.0.2 - "@polkadot/x-global": ^11.0.2 - "@polkadot/x-ws": ^11.0.2 - "@substrate/connect": 0.7.20 + "@polkadot/keyring": ^11.1.3 + "@polkadot/types": 10.3.2 + "@polkadot/types-support": 10.3.2 + "@polkadot/util": ^11.1.3 + "@polkadot/util-crypto": ^11.1.3 + "@polkadot/x-fetch": ^11.1.3 + "@polkadot/x-global": ^11.1.3 + "@polkadot/x-ws": ^11.1.3 + "@substrate/connect": 0.7.23 eventemitter3: ^5.0.0 mock-socket: ^9.2.1 nock: ^13.3.0 @@ -2337,26 +2337,26 @@ __metadata: dependenciesMeta: "@substrate/connect": optional: true - checksum: 049d8149952f0934e6dfda71a948b44bf81168f8988bb1b165ff1d7f0130e9005bf034048fe5648617de5fffa20e255263761b2ad3b591894968cae8dfb112f8 + checksum: 781db842aa01a8b559f95db5f940df43680198fa60c9e0f4ab5544a66f7ed351f7a849fb913e1bcd82a2cfb2fdd6b99e34ddeae0a2cec68821bd90a71faad8c1 languageName: node linkType: hard "@polkadot/typegen@npm:^10.0.0": - version: 10.1.2 - resolution: "@polkadot/typegen@npm:10.1.2" - dependencies: - "@polkadot/api": 10.1.2 - "@polkadot/api-augment": 10.1.2 - "@polkadot/rpc-augment": 10.1.2 - "@polkadot/rpc-provider": 10.1.2 - "@polkadot/types": 10.1.2 - "@polkadot/types-augment": 10.1.2 - "@polkadot/types-codec": 10.1.2 - "@polkadot/types-create": 10.1.2 - "@polkadot/types-support": 10.1.2 - "@polkadot/util": ^11.0.2 - "@polkadot/util-crypto": ^11.0.2 - "@polkadot/x-ws": ^11.0.2 + version: 10.3.2 + resolution: "@polkadot/typegen@npm:10.3.2" + dependencies: + "@polkadot/api": 10.3.2 + "@polkadot/api-augment": 10.3.2 + "@polkadot/rpc-augment": 10.3.2 + "@polkadot/rpc-provider": 10.3.2 + "@polkadot/types": 10.3.2 + "@polkadot/types-augment": 10.3.2 + "@polkadot/types-codec": 10.3.2 + "@polkadot/types-create": 10.3.2 + "@polkadot/types-support": 10.3.2 + "@polkadot/util": ^11.1.3 + "@polkadot/util-crypto": ^11.1.3 + "@polkadot/x-ws": ^11.1.3 handlebars: ^4.7.7 tslib: ^2.5.0 yargs: ^17.7.1 @@ -2366,117 +2366,116 @@ __metadata: polkadot-types-from-defs: scripts/polkadot-types-from-defs.mjs polkadot-types-internal-interfaces: scripts/polkadot-types-internal-interfaces.mjs polkadot-types-internal-metadata: scripts/polkadot-types-internal-metadata.mjs - checksum: 6fd595991d920cfc318ff55981d3fc25af47658ef86b9455c3c1628ecfee94c1ede0493175d537bfb7a5dd7090976788c9fcd85ed294771b0dd4bc6fe29661c3 + checksum: 7f4eb29935d8e20579c16deabdbcb1a40ef531d1d33031dd21421d3700fb0bfa47c9f08fd167e2f3c1201e160651497752c4c4e3227aa2aab9e65bd9e4e50fad languageName: node linkType: hard -"@polkadot/types-augment@npm:10.1.2": - version: 10.1.2 - resolution: "@polkadot/types-augment@npm:10.1.2" +"@polkadot/types-augment@npm:10.3.2": + version: 10.3.2 + resolution: "@polkadot/types-augment@npm:10.3.2" dependencies: - "@polkadot/types": 10.1.2 - "@polkadot/types-codec": 10.1.2 - "@polkadot/util": ^11.0.2 + "@polkadot/types": 10.3.2 + "@polkadot/types-codec": 10.3.2 + "@polkadot/util": ^11.1.3 tslib: ^2.5.0 - checksum: 83ec36d6735f93c7081d724f1161d69505bd95bb07ef596ec676d945e476358c768710196f1b814f2442517d0d0af1ed716cf3e697dd1cd92f908c1ffbcfaae2 + checksum: d3e7c2ea538e57a707da4566ba4d9b5110a8b55aebb98154e37d42b8428cd59a3facafe6f759f85968a3f739a2f38f4b81984330ddc0aa0f219b21028ac3ef7f languageName: node linkType: hard -"@polkadot/types-codec@npm:10.1.2, @polkadot/types-codec@npm:^10.0.0": - version: 10.1.2 - resolution: "@polkadot/types-codec@npm:10.1.2" +"@polkadot/types-codec@npm:10.3.2, @polkadot/types-codec@npm:^10.0.0": + version: 10.3.2 + resolution: "@polkadot/types-codec@npm:10.3.2" dependencies: - "@polkadot/util": ^11.0.2 - "@polkadot/x-bigint": ^11.0.2 + "@polkadot/util": ^11.1.3 + "@polkadot/x-bigint": ^11.1.3 tslib: ^2.5.0 - checksum: 5078111eab71db1149cd444902ebd4fa03e570ab372c83e9d976a6249c35794cb912056b298c4ba87f86e8ce4d66e2b2ed4b070b66ff00b8a9b18080aa20ddfb + checksum: fa7f2b7236d18ce3adfffdf5e18a359ee78f12a370f7de1938d2a26a1d8f0e8cb2a3431d866ea3a6b01c155dad68770c49269e0542b98ea26d2481b9b9dca0af languageName: node linkType: hard -"@polkadot/types-create@npm:10.1.2": - version: 10.1.2 - resolution: "@polkadot/types-create@npm:10.1.2" +"@polkadot/types-create@npm:10.3.2": + version: 10.3.2 + resolution: "@polkadot/types-create@npm:10.3.2" dependencies: - "@polkadot/types-codec": 10.1.2 - "@polkadot/util": ^11.0.2 + "@polkadot/types-codec": 10.3.2 + "@polkadot/util": ^11.1.3 tslib: ^2.5.0 - checksum: d280ab7db0e88282468fe5371559f754065839f19c942f275d6aa3ebc5adac32359ee13a1b65e79e945ccb8d18fd7906b4567b452c782bbae7ec7e00bb370a30 + checksum: 680eb8f817901f79091943064e9f6b6a0819939c53ce6a85328622201017db6eaf6236bc03389c2b4ceb7988abb158f64b72e081a47b77f957a7a2b1826569d1 languageName: node linkType: hard -"@polkadot/types-known@npm:10.1.2": - version: 10.1.2 - resolution: "@polkadot/types-known@npm:10.1.2" +"@polkadot/types-known@npm:10.3.2": + version: 10.3.2 + resolution: "@polkadot/types-known@npm:10.3.2" dependencies: - "@polkadot/networks": ^11.0.2 - "@polkadot/types": 10.1.2 - "@polkadot/types-codec": 10.1.2 - "@polkadot/types-create": 10.1.2 - "@polkadot/util": ^11.0.2 + "@polkadot/networks": ^11.1.3 + "@polkadot/types": 10.3.2 + "@polkadot/types-codec": 10.3.2 + "@polkadot/types-create": 10.3.2 + "@polkadot/util": ^11.1.3 tslib: ^2.5.0 - checksum: f1078e954e940ea3c68f3823d8efa56070cef44b57b9ecf1a82c5b06f6de43555cf874721a7c8f46635e03127a835c32254c772680f4d84337dea336b6ac0d38 + checksum: f4d5f265e9a5efbe4bd373c186872ff2e49be3b04efc7f9049eb219b68dcbdfaf48fdd49eedc669b4f0b47f8534d4ecd923dc2cbf3303ba5f43b7b7479e1b7f6 languageName: node linkType: hard -"@polkadot/types-support@npm:10.1.2": - version: 10.1.2 - resolution: "@polkadot/types-support@npm:10.1.2" +"@polkadot/types-support@npm:10.3.2": + version: 10.3.2 + resolution: "@polkadot/types-support@npm:10.3.2" dependencies: - "@polkadot/util": ^11.0.2 + "@polkadot/util": ^11.1.3 tslib: ^2.5.0 - checksum: 517a19c84df0ea114508677f499cffe79038e7fbd209888dc2c4e9cfbf093299e4ac69cd77098b2913a13b4dab5be08630024730bb6633364f7ab17b84a1b847 + checksum: 6c5c6ba7c585efd04543a1565f7f55b0137f74915afe6c58e4666da7405fac9e33edef0fca418a9d948e8cc820b1197a3c5973495ee90045d233fa5d0c390cfd languageName: node linkType: hard -"@polkadot/types@npm:10.1.2, @polkadot/types@npm:^10.0.0": - version: 10.1.2 - resolution: "@polkadot/types@npm:10.1.2" +"@polkadot/types@npm:10.3.2, @polkadot/types@npm:^10.0.0": + version: 10.3.2 + resolution: "@polkadot/types@npm:10.3.2" dependencies: - "@polkadot/keyring": ^11.0.2 - "@polkadot/types-augment": 10.1.2 - "@polkadot/types-codec": 10.1.2 - "@polkadot/types-create": 10.1.2 - "@polkadot/util": ^11.0.2 - "@polkadot/util-crypto": ^11.0.2 + "@polkadot/keyring": ^11.1.3 + "@polkadot/types-augment": 10.3.2 + "@polkadot/types-codec": 10.3.2 + "@polkadot/types-create": 10.3.2 + "@polkadot/util": ^11.1.3 + "@polkadot/util-crypto": ^11.1.3 rxjs: ^7.8.0 tslib: ^2.5.0 - checksum: 875fd0320f51193d6809e40b4ef4c819eb118c711a2a67356dad822a3d4c501c4823dd53070e4ee7d0ec5855b3d678bdd832bd4173d2b4afa847392c0c087bd8 + checksum: 16d40abf8e442a836981eab92d7d13dfd6020ec4821d9ec60d2c8d37defb586ada59039e7800477565be8d7ced6f73cfdb40d7bfa2a331e83d95f9467255c72b languageName: node linkType: hard -"@polkadot/util-crypto@npm:11.0.2, @polkadot/util-crypto@npm:^11.0.0, @polkadot/util-crypto@npm:^11.0.2": - version: 11.0.2 - resolution: "@polkadot/util-crypto@npm:11.0.2" +"@polkadot/util-crypto@npm:11.1.3, @polkadot/util-crypto@npm:^11.0.0, @polkadot/util-crypto@npm:^11.1.3": + version: 11.1.3 + resolution: "@polkadot/util-crypto@npm:11.1.3" dependencies: - "@noble/hashes": 1.2.0 + "@noble/hashes": 1.3.0 "@noble/secp256k1": 1.7.1 - "@polkadot/networks": 11.0.2 - "@polkadot/util": 11.0.2 + "@polkadot/networks": 11.1.3 + "@polkadot/util": 11.1.3 "@polkadot/wasm-crypto": ^7.0.3 - "@polkadot/x-bigint": 11.0.2 - "@polkadot/x-randomvalues": 11.0.2 + "@polkadot/x-bigint": 11.1.3 + "@polkadot/x-randomvalues": 11.1.3 "@scure/base": 1.1.1 - ed2curve: ^0.3.0 tslib: ^2.5.0 tweetnacl: ^1.0.3 peerDependencies: - "@polkadot/util": 11.0.2 - checksum: 80f972254ea5c15d99ea8724d28f26f2ac094355782d1cec52f48054efffc914e4368e478f7bec6494fb9834c4af870914c69c485f8baf045d06c429d8450ec2 + "@polkadot/util": 11.1.3 + checksum: 77ca5c50d1e4835d20f77a2e98c261114628762952c0ef887312f64480b86a714da8598cc5a419bb983b027276db4df8d1fe6a3c106a23bce9263520ac4aa7ae languageName: node linkType: hard -"@polkadot/util@npm:11.0.2, @polkadot/util@npm:^11.0.0, @polkadot/util@npm:^11.0.2": - version: 11.0.2 - resolution: "@polkadot/util@npm:11.0.2" +"@polkadot/util@npm:11.1.3, @polkadot/util@npm:^11.0.0, @polkadot/util@npm:^11.1.3": + version: 11.1.3 + resolution: "@polkadot/util@npm:11.1.3" dependencies: - "@polkadot/x-bigint": 11.0.2 - "@polkadot/x-global": 11.0.2 - "@polkadot/x-textdecoder": 11.0.2 - "@polkadot/x-textencoder": 11.0.2 + "@polkadot/x-bigint": 11.1.3 + "@polkadot/x-global": 11.1.3 + "@polkadot/x-textdecoder": 11.1.3 + "@polkadot/x-textencoder": 11.1.3 "@types/bn.js": ^5.1.1 bn.js: ^5.2.1 tslib: ^2.5.0 - checksum: 1003ae76c912d635134f0618988110f08c56be81195d46f6148d822dce8513b0f026f1981bfba7e93d9bd4412379591f8ee90862de3a4d4d97c407d04929c5dd + checksum: 69c5083c65ea4c4f186e08a3ddbae50111309bdec7908487516eceb93e218d470156d26d2dfbb17713423ff32c4995f994cc10317c22d6fa7202d5d722549908 languageName: node linkType: hard @@ -2558,74 +2557,74 @@ __metadata: languageName: node linkType: hard -"@polkadot/x-bigint@npm:11.0.2, @polkadot/x-bigint@npm:^11.0.2": - version: 11.0.2 - resolution: "@polkadot/x-bigint@npm:11.0.2" +"@polkadot/x-bigint@npm:11.1.3, @polkadot/x-bigint@npm:^11.1.3": + version: 11.1.3 + resolution: "@polkadot/x-bigint@npm:11.1.3" dependencies: - "@polkadot/x-global": 11.0.2 + "@polkadot/x-global": 11.1.3 tslib: ^2.5.0 - checksum: ad9d9c15d9b19b9d7393ce09bbf5b70b90d054efcfbc32160871db2aee8703e2d81518a306086fdc4ee52d2645eee33d99e832692b6676fb5b2d2f7fe5d82a61 + checksum: e7d72b8bb1fafb0db8cfc66e5a8fff4559d0c6f6d60f29ed554ea6c278c0438cf0f1d1a87556e364d86675c821658b791df75b3072dcdea40c6cb0049d462833 languageName: node linkType: hard -"@polkadot/x-fetch@npm:^11.0.2": - version: 11.0.2 - resolution: "@polkadot/x-fetch@npm:11.0.2" +"@polkadot/x-fetch@npm:^11.1.3": + version: 11.1.3 + resolution: "@polkadot/x-fetch@npm:11.1.3" dependencies: - "@polkadot/x-global": 11.0.2 - node-fetch: ^3.3.0 + "@polkadot/x-global": 11.1.3 + node-fetch: ^3.3.1 tslib: ^2.5.0 - checksum: 6dad22e61a27eea2432d276378d60fe9a86f688f3f6c8c9cba04f45bf279c0618a139167260d5aa387a9e3f9689bfd6ba119956d785e7b1183d671bf24c9c4fe + checksum: b0a5d28c6197b063fbb956d0a4aa7eabe89fc3be2ceeeaff8b85a657d957245180847127de2c332d1db3be7a3f0d59b0f0efdc71cb7bf50e526561e7b261f7c9 languageName: node linkType: hard -"@polkadot/x-global@npm:11.0.2, @polkadot/x-global@npm:^11.0.2": - version: 11.0.2 - resolution: "@polkadot/x-global@npm:11.0.2" +"@polkadot/x-global@npm:11.1.3, @polkadot/x-global@npm:^11.1.3": + version: 11.1.3 + resolution: "@polkadot/x-global@npm:11.1.3" dependencies: tslib: ^2.5.0 - checksum: d8c48fff95d4febffff0f426eaccab1f0e28e9ff2f3251f1d496dcde2eebac37c791d9def781123c17806f1814b7e5ed659d1c878608dfa7753ff9141ca12257 + checksum: 997b843e519168e9b845f5e67129aef2673761f9398fe51015f717eb65cb9aa393836cc9d8ed70668b84a0e1a0a73f8cd6810beb638fed9c8a8b5c7ebeee8ab3 languageName: node linkType: hard -"@polkadot/x-randomvalues@npm:11.0.2": - version: 11.0.2 - resolution: "@polkadot/x-randomvalues@npm:11.0.2" +"@polkadot/x-randomvalues@npm:11.1.3": + version: 11.1.3 + resolution: "@polkadot/x-randomvalues@npm:11.1.3" dependencies: - "@polkadot/x-global": 11.0.2 + "@polkadot/x-global": 11.1.3 tslib: ^2.5.0 - checksum: 07fcf64da977a52e70b03ac94d5b2e2fa22653e50739d064f94140acad6a9631619e42ae6d4f68519d428c4377f77986b069be4f32862002153580d84635d6c9 + checksum: 2f0921ba0188827b42659083375d4bcf5b481433102238b436e43e006b07ae7fc2d96e41205b21ba5dca3f48c7ec5d1b8aa1da674cf0b7de2d459a125b48252c languageName: node linkType: hard -"@polkadot/x-textdecoder@npm:11.0.2": - version: 11.0.2 - resolution: "@polkadot/x-textdecoder@npm:11.0.2" +"@polkadot/x-textdecoder@npm:11.1.3": + version: 11.1.3 + resolution: "@polkadot/x-textdecoder@npm:11.1.3" dependencies: - "@polkadot/x-global": 11.0.2 + "@polkadot/x-global": 11.1.3 tslib: ^2.5.0 - checksum: 26df03b20b7f89dacaa99c7f5e511ac7234ec6cbd2249596374535836b21f0b014306260233f4581b3ba7040f59704c9afc912206c254b43914ef0edca888bf1 + checksum: 6c049b2d8728771199072123392452441a7107a658261c42e2ee7389d76fed5467195e072069265153a12b039deaaf17fd72189688244e0c8c288b114b50e07f languageName: node linkType: hard -"@polkadot/x-textencoder@npm:11.0.2": - version: 11.0.2 - resolution: "@polkadot/x-textencoder@npm:11.0.2" +"@polkadot/x-textencoder@npm:11.1.3": + version: 11.1.3 + resolution: "@polkadot/x-textencoder@npm:11.1.3" dependencies: - "@polkadot/x-global": 11.0.2 + "@polkadot/x-global": 11.1.3 tslib: ^2.5.0 - checksum: 928035abcac8e5a904004ced651aabf04944bef05eec4770663962f429c5e6f9ce6fee46813a2724b4c91436ee076024672e14fb2a105a4ea322137d0ec2b14e + checksum: 5263e8e48876da03afcaf0ed0859a64e201914fda4ae0f10c282b43283e0614c58381e5f20f86d09755a96b3960482ee39ce7a452ce32f2a2dcd2d04a6937402 languageName: node linkType: hard -"@polkadot/x-ws@npm:^11.0.2": - version: 11.0.2 - resolution: "@polkadot/x-ws@npm:11.0.2" +"@polkadot/x-ws@npm:^11.1.3": + version: 11.1.3 + resolution: "@polkadot/x-ws@npm:11.1.3" dependencies: - "@polkadot/x-global": 11.0.2 + "@polkadot/x-global": 11.1.3 tslib: ^2.5.0 ws: ^8.13.0 - checksum: b6069ed1815a42fed4798943a1687b656b471d802ab3f8516b8505814be48edf9c533b9f43db3202ea2a11fd813c6db211a883ec3e03d83e77aed1db48bf8dae + checksum: 17a5f7b732ad1da519e998a5ef4f183530dd66bcc41090e2666ddd9ca3f2c3f4ed3169da50e03fe4b3700b58019a4bbf5bcc0ba61fa6c041f8425d42d284060f languageName: node linkType: hard @@ -2833,14 +2832,14 @@ __metadata: languageName: node linkType: hard -"@substrate/connect@npm:0.7.20": - version: 0.7.20 - resolution: "@substrate/connect@npm:0.7.20" +"@substrate/connect@npm:0.7.23": + version: 0.7.23 + resolution: "@substrate/connect@npm:0.7.23" dependencies: "@substrate/connect-extension-protocol": ^1.0.1 eventemitter3: ^4.0.7 - smoldot: 0.7.11 - checksum: 397419d77fa7811e602d4964450660f5e95dd501dd94e7b6bced7cd8a41ebacb889faed6708b0a621b81ab552c5aa9aa5786b25cf0d65de725a8bf8f5e3a9bc8 + smoldot: 1.0.1 + checksum: 74ee49494455149f20427fdc0d2cdc8af4bc572e5a581f21109e47bacfc7cebaf77694dd8d5d4ef2d8ef4756b198fe4edd08d9bc8b6e3b647b085cbcac5b9fa2 languageName: node linkType: hard @@ -5204,15 +5203,6 @@ __metadata: languageName: node linkType: hard -"ed2curve@npm:^0.3.0": - version: 0.3.0 - resolution: "ed2curve@npm:0.3.0" - dependencies: - tweetnacl: 1.x.x - checksum: 6dfbe2310aa5a47372c9dd2fd920be140c8d52aea5793d716a3e3865d2ceaeaf639a7653e5492dfe3b4910eaf65c09a1d5132580afe2fdca18a75ebb428a52f2 - languageName: node - linkType: hard - "electron-to-chromium@npm:^1.4.251": version: 1.4.255 resolution: "electron-to-chromium@npm:1.4.255" @@ -8216,7 +8206,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"node-fetch@npm:^3.2.10, node-fetch@npm:^3.3.0": +"node-fetch@npm:^3.2.10, node-fetch@npm:^3.3.1": version: 3.3.1 resolution: "node-fetch@npm:3.3.1" dependencies: @@ -9468,13 +9458,13 @@ fsevents@^2.3.2: languageName: node linkType: hard -"smoldot@npm:0.7.11": - version: 0.7.11 - resolution: "smoldot@npm:0.7.11" +"smoldot@npm:1.0.1": + version: 1.0.1 + resolution: "smoldot@npm:1.0.1" dependencies: pako: ^2.0.4 ws: ^8.8.1 - checksum: 99861d92d28eeb3c150b518ecc25de1f403ca9a3134b8d240071e825a6b8d2da7e2c13e52c2a692a425e643b74a314ed0598bfb66a9482583a265b5bb464df7f + checksum: 161066f2f2aabb98c31ef84aa21a1e7c9301d391cc99c429eb589a31e4d4f848d9c51fe521ce2d7f977a9cf81d8e48d101e437e751479063e92e0d6e8ff30f47 languageName: node linkType: hard @@ -10211,13 +10201,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"tweetnacl@npm:1.x.x, tweetnacl@npm:^1.0.3": - version: 1.0.3 - resolution: "tweetnacl@npm:1.0.3" - checksum: e4a57cac188f0c53f24c7a33279e223618a2bfb5fea426231991652a13247bea06b081fd745d71291fcae0f4428d29beba1b984b1f1ce6f66b06a6d1ab90645c - languageName: node - linkType: hard - "tweetnacl@npm:^0.14.3": version: 0.14.5 resolution: "tweetnacl@npm:0.14.5" @@ -10225,6 +10208,13 @@ fsevents@^2.3.2: languageName: node linkType: hard +"tweetnacl@npm:^1.0.3": + version: 1.0.3 + resolution: "tweetnacl@npm:1.0.3" + checksum: e4a57cac188f0c53f24c7a33279e223618a2bfb5fea426231991652a13247bea06b081fd745d71291fcae0f4428d29beba1b984b1f1ce6f66b06a6d1ab90645c + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" From b5971f4948df87549e5d6f98ea225060743af668 Mon Sep 17 00:00:00 2001 From: Github Action Date: Mon, 17 Apr 2023 13:31:21 +0000 Subject: [PATCH 025/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index a9f7cc419..db6e62093 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.1-2", + "version": "0.32.1-3", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 63e54495e..d86e2d482 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.1-2", + "version": "0.32.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index dfb542d78..d9b1df926 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.1-2", + "version": "0.32.1-3", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 67c4c3c36..a9acbdae0 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.1-2", + "version": "0.32.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 42edf0019..56394897c 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.1-2", + "version": "0.32.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index df3d322a3..bd04213de 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.1-2", + "version": "0.32.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index 95ea250cc..9da4b1e04 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.1-2", + "version": "0.32.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 114ff92ff..8eee2ac34 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.1-2", + "version": "0.32.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 202a56c9c..c597f302c 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.1-2", + "version": "0.32.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 5ed521328..81057551e 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.1-2", + "version": "0.32.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index e1adf94e9..d4a9986c8 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.1-2", + "version": "0.32.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 236cbd9ab..d49aa1786 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.1-2", + "version": "0.32.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 3e33c0216..8bb9d40dd 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.1-2", + "version": "0.32.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 1436c229f..02a545413 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.1-2", + "version": "0.32.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From bd7e26e3fe7543b33a065983e38ee1948d057268 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Wed, 17 May 2023 15:10:09 +0200 Subject: [PATCH 026/130] chore: remove outdated @returns annotation --- packages/vc-export/src/KiltAttestationProofV1.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/vc-export/src/KiltAttestationProofV1.ts b/packages/vc-export/src/KiltAttestationProofV1.ts index 24ce9f6ab..4d88d322e 100644 --- a/packages/vc-export/src/KiltAttestationProofV1.ts +++ b/packages/vc-export/src/KiltAttestationProofV1.ts @@ -359,7 +359,6 @@ async function verifyLegitimation( * @param proof KiltAttestationProofV1 proof object to be verified. Any proofs embedded in the credentialInput are stripped and ignored. * @param opts Additional parameters. * @param opts.api A polkadot-js/api instance connected to the blockchain network on which the credential is anchored. - * @returns Object indicating whether proof could be verified. */ export async function verify( credentialInput: Omit, From fc0cbc99f8b4fc0e931fe1e4e3dca5db8a49e1c9 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Wed, 17 May 2023 15:13:17 +0200 Subject: [PATCH 027/130] chore: style --- packages/augment-api/extraDefs/package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/augment-api/extraDefs/package.json b/packages/augment-api/extraDefs/package.json index cac51f2c4..fdcd276d0 100644 --- a/packages/augment-api/extraDefs/package.json +++ b/packages/augment-api/extraDefs/package.json @@ -1,7 +1,7 @@ { - "types": "../lib/interfaces/extraDefs/index.d.ts", - "//": [ - "This is a fallback to support the extraDefs subpath export for module systems that do not support the package.json exports field.", - "Inspired by https://github.com/andrewbranch/example-subpath-exports-ts-compat/blob/1ffe3425b0a7ad8ecdf3c373f76f431ee341366b/examples/node_modules/package-json-redirects/." - ] -} \ No newline at end of file + "types": "../lib/interfaces/extraDefs/index.d.ts", + "//": [ + "This is a fallback to support the extraDefs subpath export for module systems that do not support the package.json exports field.", + "Inspired by https://github.com/andrewbranch/example-subpath-exports-ts-compat/blob/1ffe3425b0a7ad8ecdf3c373f76f431ee341366b/examples/node_modules/package-json-redirects/." + ] +} From 7e2860e726334c0888fa20d72d337a114b094f9f Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Wed, 17 May 2023 16:21:34 +0200 Subject: [PATCH 028/130] chore: bump prerelease version --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index db6e62093..dca145f27 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.1-3", + "version": "0.32.1-4", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index d86e2d482..63df7ae38 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.1-3", + "version": "0.32.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index d9b1df926..3a22a618e 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.1-3", + "version": "0.32.1-4", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index a9acbdae0..626169a5e 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.1-3", + "version": "0.32.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 56394897c..53e871458 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.1-3", + "version": "0.32.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index bd04213de..4596e71dc 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.1-3", + "version": "0.32.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index 9da4b1e04..a2fa1e01c 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.1-3", + "version": "0.32.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 8eee2ac34..d2af2047b 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.1-3", + "version": "0.32.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index c597f302c..069fc47b9 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.1-3", + "version": "0.32.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 81057551e..477435001 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.1-3", + "version": "0.32.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index d4a9986c8..548e6bda3 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.1-3", + "version": "0.32.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index d49aa1786..b4115c07b 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.1-3", + "version": "0.32.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 8bb9d40dd..0f0fc6fb7 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.1-3", + "version": "0.32.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 02a545413..b17a1809d 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.1-3", + "version": "0.32.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From bca5c922936d3f4c41ad7826e5b9203d3d04ff88 Mon Sep 17 00:00:00 2001 From: Github Action Date: Wed, 17 May 2023 14:27:13 +0000 Subject: [PATCH 029/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index dca145f27..9a57e69ce 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.1-4", + "version": "0.32.1-5", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 63df7ae38..1494a912a 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.1-4", + "version": "0.32.1-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 3a22a618e..260ed9016 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.1-4", + "version": "0.32.1-5", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 626169a5e..db2f32c20 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.1-4", + "version": "0.32.1-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 53e871458..aa820a0d2 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.1-4", + "version": "0.32.1-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 4596e71dc..b35d86ddc 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.1-4", + "version": "0.32.1-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index a2fa1e01c..071f00461 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.1-4", + "version": "0.32.1-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index d2af2047b..98e3b495a 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.1-4", + "version": "0.32.1-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 069fc47b9..7ab26f1bf 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.1-4", + "version": "0.32.1-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 477435001..1b16c4b21 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.1-4", + "version": "0.32.1-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 548e6bda3..6022ac196 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.1-4", + "version": "0.32.1-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index b4115c07b..b961c2a51 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.1-4", + "version": "0.32.1-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 0f0fc6fb7..17fd76759 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.1-4", + "version": "0.32.1-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index b17a1809d..58417be29 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.1-4", + "version": "0.32.1-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 808ce190ec9277aa4e2ea0610e1b15bc47df6f16 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 15:38:07 +0200 Subject: [PATCH 030/130] chore(deps): update dependency did-jwt to v7 (#748) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/vc-export/package.json | 2 +- yarn.lock | 126 +++++++------------------------- 2 files changed, 28 insertions(+), 100 deletions(-) diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 58417be29..36380e8a5 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -47,7 +47,7 @@ "@polkadot/util": "^11.0.0", "@polkadot/util-crypto": "^11.0.0", "crypto-ld": "^6.0.0", - "did-jwt": "^6.11.0" + "did-jwt": "^7.0.0" }, "peerDependencies": { "@digitalbazaar/vc": "^2.1.0 || ^6.0.1", diff --git a/yarn.lock b/yarn.lock index c4df4658b..d98a2a050 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2104,7 +2104,7 @@ __metadata: "@polkadot/util": ^11.0.0 "@polkadot/util-crypto": ^11.0.0 crypto-ld: ^6.0.0 - did-jwt: ^6.11.0 + did-jwt: ^7.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 peerDependencies: @@ -2114,6 +2114,15 @@ __metadata: languageName: unknown linkType: soft +"@noble/curves@npm:^1.0.0": + version: 1.0.0 + resolution: "@noble/curves@npm:1.0.0" + dependencies: + "@noble/hashes": 1.3.0 + checksum: 6bcef44d626c640dc8961819d68dd67dffb907e3b973b7c27efe0ecdd9a5c6ce62c7b9e3dfc930c66605dced7f1ec0514d191c09a2ce98d6d52b66e3315ffa79 + languageName: node + linkType: hard + "@noble/ed25519@npm:^1.6.0": version: 1.7.3 resolution: "@noble/ed25519@npm:1.7.3" @@ -2121,7 +2130,7 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.3.0": +"@noble/hashes@npm:1.3.0, @noble/hashes@npm:^1.3.0": version: 1.3.0 resolution: "@noble/hashes@npm:1.3.0" checksum: d7ddb6d7c60f1ce1f87facbbef5b724cdea536fc9e7f59ae96e0fc9de96c8f1a2ae2bdedbce10f7dcc621338dfef8533daa73c873f2b5c87fa1a4e05a95c2e2e @@ -2669,13 +2678,6 @@ __metadata: languageName: node linkType: hard -"@stablelib/bytes@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/bytes@npm:1.0.1" - checksum: 456267e08c3384abcb71d3ad3e97a6f99185ad754bac016f501ebea4e4886f37900589143b57e33bdbbf513a92fc89368c15dd4517e0540d0bdc79ecdf9dd087 - languageName: node - linkType: hard - "@stablelib/chacha20poly1305@npm:^1.0.1": version: 1.0.1 resolution: "@stablelib/chacha20poly1305@npm:1.0.1" @@ -2707,24 +2709,6 @@ __metadata: languageName: node linkType: hard -"@stablelib/ed25519@npm:^1.0.2": - version: 1.0.3 - resolution: "@stablelib/ed25519@npm:1.0.3" - dependencies: - "@stablelib/random": ^1.0.2 - "@stablelib/sha512": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: e18279de078edac67396ba07dbb862dce0fe89efa8141c21a5b04108a29914bd51636019522323ca5097ec596a90b3028ed64e88ee009b0ac7de7c1ab6499ccb - languageName: node - linkType: hard - -"@stablelib/hash@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/hash@npm:1.0.1" - checksum: 3ff1f12d1a4082aaf4b6cdf40c2010aabe5c4209d3b40b97b5bbb0d9abc0ee94abdc545e57de0614afaea807ca0212ac870e247ec8f66cdce91ec39ce82948cf - languageName: node - linkType: hard - "@stablelib/int@npm:^1.0.1": version: 1.0.1 resolution: "@stablelib/int@npm:1.0.1" @@ -2732,15 +2716,6 @@ __metadata: languageName: node linkType: hard -"@stablelib/keyagreement@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/keyagreement@npm:1.0.1" - dependencies: - "@stablelib/bytes": ^1.0.1 - checksum: 3c8ec904dd50f72f3162f5447a0fa8f1d9ca6e24cd272d3dbe84971267f3b47f9bd5dc4e4eeedf3fbac2fe01f2d9277053e57c8e60db8c5544bfb35c62d290dd - languageName: node - linkType: hard - "@stablelib/poly1305@npm:^1.0.1": version: 1.0.1 resolution: "@stablelib/poly1305@npm:1.0.1" @@ -2751,38 +2726,6 @@ __metadata: languageName: node linkType: hard -"@stablelib/random@npm:^1.0.1, @stablelib/random@npm:^1.0.2": - version: 1.0.2 - resolution: "@stablelib/random@npm:1.0.2" - dependencies: - "@stablelib/binary": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: f5ace0a588dc4c21f01cb85837892d4c872e994ae77a58a8eb7dd61aa0b26fb1e9b46b0445e71af57d963ef7d9f5965c64258fc0d04df7b2947bc48f2d3560c5 - languageName: node - linkType: hard - -"@stablelib/sha256@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/sha256@npm:1.0.1" - dependencies: - "@stablelib/binary": ^1.0.1 - "@stablelib/hash": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: 38669871e1bda72eb537629ebceac1c72da8890273a9fbe088f81f6d14c1ec04e78be8c5b455380a06c67f8e62b2508e11e9063fcc257dbaa1b5c27ac756ba77 - languageName: node - linkType: hard - -"@stablelib/sha512@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/sha512@npm:1.0.1" - dependencies: - "@stablelib/binary": ^1.0.1 - "@stablelib/hash": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: b7c82f7608a35948a2147a534c0c9afc80deab3fd5f72a2e27b2454e7c0c6944d39381be3abcb1b7fac5b824ba030ae3e98209d517a579c143d8ed63930b042f - languageName: node - linkType: hard - "@stablelib/wipe@npm:^1.0.1": version: 1.0.1 resolution: "@stablelib/wipe@npm:1.0.1" @@ -2790,17 +2733,6 @@ __metadata: languageName: node linkType: hard -"@stablelib/x25519@npm:^1.0.2": - version: 1.0.3 - resolution: "@stablelib/x25519@npm:1.0.3" - dependencies: - "@stablelib/keyagreement": ^1.0.1 - "@stablelib/random": ^1.0.2 - "@stablelib/wipe": ^1.0.1 - checksum: f8537066b542b6770c1b5b2ae5ad0688d1b986e4bf818067c152c123a5471531987bbf024224f75f387f481ccc5b628e391e49e92102b8b1a3e2d449d6105402 - languageName: node - linkType: hard - "@stablelib/xchacha20@npm:^1.0.1": version: 1.0.1 resolution: "@stablelib/xchacha20@npm:1.0.1" @@ -4342,13 +4274,20 @@ __metadata: languageName: node linkType: hard -"canonicalize@npm:^1.0.1, canonicalize@npm:^1.0.8": +"canonicalize@npm:^1.0.1": version: 1.0.8 resolution: "canonicalize@npm:1.0.8" checksum: c31ea64160171bbcd7ac0dc081058fbcff055410a1d532d7b3959e7b02a3001c5d5f4f8bad934ed5246eafc9a928d333cc0c29846c16fb6d0be97b8fb444de3c languageName: node linkType: hard +"canonicalize@npm:^2.0.0": + version: 2.0.0 + resolution: "canonicalize@npm:2.0.0" + checksum: 541dee6e53c06e81b11241eba76197b6837b3e2a5951a175f57d75eb4c59599ec68566ee88aa2fb3dac6e6ca57d674ca3c0d9c75a855176ce78f0555b26caf39 + languageName: node + linkType: hard + "cbor@npm:^8.1.0": version: 8.1.0 resolution: "cbor@npm:8.1.0" @@ -5051,23 +4990,19 @@ __metadata: languageName: node linkType: hard -"did-jwt@npm:^6.11.0": - version: 6.11.0 - resolution: "did-jwt@npm:6.11.0" +"did-jwt@npm:^7.0.0": + version: 7.1.0 + resolution: "did-jwt@npm:7.1.0" dependencies: - "@stablelib/ed25519": ^1.0.2 - "@stablelib/random": ^1.0.1 - "@stablelib/sha256": ^1.0.1 - "@stablelib/x25519": ^1.0.2 + "@noble/curves": ^1.0.0 + "@noble/hashes": ^1.3.0 "@stablelib/xchacha20poly1305": ^1.0.1 bech32: ^2.0.0 - canonicalize: ^1.0.8 + canonicalize: ^2.0.0 did-resolver: ^4.0.0 - elliptic: ^6.5.4 - js-sha3: ^0.8.0 multiformats: ^9.6.5 uint8arrays: ^3.0.0 - checksum: b8b63ad7c7c6eb786fb386a5f74046e50f4ab93552a609556035642819fb26c15e03c020d704f5049331a8b07df9f7408cb7f4155f366f7286384e0d83739988 + checksum: 1a23f201f9eb1abe68193067a28c37ead56fbce5e8147cbfdcc0d41dc374bf60c20d9e8529294ca35f8106d0ae26d9a7ace77f974125c3ac63ac990399b465fa languageName: node linkType: hard @@ -5210,7 +5145,7 @@ __metadata: languageName: node linkType: hard -"elliptic@npm:^6.5.3, elliptic@npm:^6.5.4": +"elliptic@npm:^6.5.3": version: 6.5.4 resolution: "elliptic@npm:6.5.4" dependencies: @@ -7387,13 +7322,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"js-sha3@npm:^0.8.0": - version: 0.8.0 - resolution: "js-sha3@npm:0.8.0" - checksum: 75df77c1fc266973f06cce8309ce010e9e9f07ec35ab12022ed29b7f0d9c8757f5a73e1b35aa24840dced0dea7059085aa143d817aea9e188e2a80d569d9adce - languageName: node - linkType: hard - "js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" From 62a040dd6199693ef4985fe0394b860907acf3f5 Mon Sep 17 00:00:00 2001 From: Github Action Date: Mon, 22 May 2023 13:43:00 +0000 Subject: [PATCH 031/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 9a57e69ce..870066cf9 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.1-5", + "version": "0.32.1-6", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 1494a912a..096e58184 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.1-5", + "version": "0.32.1-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 260ed9016..81154220b 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.1-5", + "version": "0.32.1-6", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index db2f32c20..e13efd91c 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.1-5", + "version": "0.32.1-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index aa820a0d2..3c2d23a9d 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.1-5", + "version": "0.32.1-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index b35d86ddc..467cbcca5 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.1-5", + "version": "0.32.1-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index 071f00461..57bbb606d 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.1-5", + "version": "0.32.1-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 98e3b495a..a068519df 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.1-5", + "version": "0.32.1-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 7ab26f1bf..280c79503 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.1-5", + "version": "0.32.1-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 1b16c4b21..0b2a5fb2e 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.1-5", + "version": "0.32.1-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 6022ac196..d0acda5c6 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.1-5", + "version": "0.32.1-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index b961c2a51..1480418b7 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.1-5", + "version": "0.32.1-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 17fd76759..f7974c6c2 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.1-5", + "version": "0.32.1-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 36380e8a5..10aba294e 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.1-5", + "version": "0.32.1-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From d630a42f1050fade7155d3e548d71fde36ca48b1 Mon Sep 17 00:00:00 2001 From: Tom Adler Date: Tue, 23 May 2023 13:38:41 +0200 Subject: [PATCH 032/130] feat: cbor-web replaces cbor (#754) --- packages/core/package.json | 2 +- packages/core/src/cbor-web.d.ts | 1 + .../PublicCredential.chain.ts | 2 +- packages/did/package.json | 2 +- .../did/src/DidDetails/LightDidDetails.ts | 2 +- packages/did/src/cbor-web.d.ts | 1 + packages/sdk-js/package.json | 6 - packages/sdk-js/webpack.config.js | 15 - tests/cbor-web.d.ts | 1 + tests/tsconfig.json | 2 +- yarn.lock | 515 +----------------- 11 files changed, 20 insertions(+), 529 deletions(-) create mode 100644 packages/core/src/cbor-web.d.ts create mode 100644 packages/did/src/cbor-web.d.ts create mode 100644 tests/cbor-web.d.ts diff --git a/packages/core/package.json b/packages/core/package.json index 467cbcca5..4d5be0a4a 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -50,6 +50,6 @@ "@polkadot/types": "^10.0.0", "@polkadot/util": "^11.0.0", "@polkadot/util-crypto": "^11.0.0", - "cbor": "^8.1.0" + "cbor-web": "^8.0.0" } } diff --git a/packages/core/src/cbor-web.d.ts b/packages/core/src/cbor-web.d.ts new file mode 100644 index 000000000..4def7650e --- /dev/null +++ b/packages/core/src/cbor-web.d.ts @@ -0,0 +1 @@ +declare module 'cbor-web' diff --git a/packages/core/src/publicCredential/PublicCredential.chain.ts b/packages/core/src/publicCredential/PublicCredential.chain.ts index 2c3b1604e..6ef1bb3e0 100644 --- a/packages/core/src/publicCredential/PublicCredential.chain.ts +++ b/packages/core/src/publicCredential/PublicCredential.chain.ts @@ -22,7 +22,7 @@ import type { PublicCredentialsCredentialsCredentialEntry, } from '@kiltprotocol/augment-api' -import { encode as cborEncode, decode as cborDecode } from 'cbor' +import { encode as cborEncode, decode as cborDecode } from 'cbor-web' import { HexString } from '@polkadot/util/types' import { ConfigService } from '@kiltprotocol/config' diff --git a/packages/did/package.json b/packages/did/package.json index 57bbb606d..e66be7d09 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -46,6 +46,6 @@ "@polkadot/types-codec": "^10.0.0", "@polkadot/util": "^11.0.0", "@polkadot/util-crypto": "^11.0.0", - "cbor": "^8.1.0" + "cbor-web": "^8.0.0" } } diff --git a/packages/did/src/DidDetails/LightDidDetails.ts b/packages/did/src/DidDetails/LightDidDetails.ts index 62331329b..6adcbc177 100644 --- a/packages/did/src/DidDetails/LightDidDetails.ts +++ b/packages/did/src/DidDetails/LightDidDetails.ts @@ -5,7 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { decode as cborDecode, encode as cborEncode } from 'cbor' +import { decode as cborDecode, encode as cborEncode } from 'cbor-web' import { base58Decode, base58Encode, diff --git a/packages/did/src/cbor-web.d.ts b/packages/did/src/cbor-web.d.ts new file mode 100644 index 000000000..4def7650e --- /dev/null +++ b/packages/did/src/cbor-web.d.ts @@ -0,0 +1 @@ +declare module 'cbor-web' diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 280c79503..905a3247b 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -32,15 +32,9 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { - "buffer": "^6.0.3", - "crypto-browserify": "^3.12.0", - "process": "^0.11.10", "rimraf": "^3.0.2", - "stream-browserify": "^3.0.0", "terser-webpack-plugin": "^5.1.1", "typescript": "^4.8.3", - "url": "^0.11.0", - "util": "^0.12.4", "webpack": "^5.70.0", "webpack-cli": "^4.9.2" }, diff --git a/packages/sdk-js/webpack.config.js b/packages/sdk-js/webpack.config.js index f62477877..6fc6cd1bb 100644 --- a/packages/sdk-js/webpack.config.js +++ b/packages/sdk-js/webpack.config.js @@ -8,7 +8,6 @@ /* eslint-disable @typescript-eslint/no-var-requires */ const path = require('path') const TerserPlugin = require('terser-webpack-plugin') -const webpack = require('webpack') module.exports = { mode: 'production', @@ -27,14 +26,6 @@ module.exports = { resolve: { extensions: ['.ts', '.js', '.d.ts', '.mjs', '.json'], symlinks: false, - // Explicit fallbacks to include these in bundle - fallback: { - buffer: require.resolve('buffer'), - crypto: require.resolve('crypto-browserify'), - stream: require.resolve('stream-browserify'), - url: require.resolve('url'), - util: require.resolve('util'), - }, }, stats: { errorDetails: true, @@ -44,10 +35,4 @@ module.exports = { // only minimize the *.min* bundle output minimizer: [new TerserPlugin({ include: /\.min\.umd\.js$/ })], }, - plugins: [ - new webpack.ProvidePlugin({ - process: 'process/browser', - Buffer: ['buffer', 'Buffer'], - }), - ], } diff --git a/tests/cbor-web.d.ts b/tests/cbor-web.d.ts new file mode 100644 index 000000000..4def7650e --- /dev/null +++ b/tests/cbor-web.d.ts @@ -0,0 +1 @@ +declare module 'cbor-web' diff --git a/tests/tsconfig.json b/tests/tsconfig.json index ba717355b..073b69d65 100644 --- a/tests/tsconfig.json +++ b/tests/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "../tsconfig.json", - "include": ["bundle-test.ts", "types.d.ts"], + "include": ["bundle-test.ts", "types.d.ts", "cbor-web.d.ts"], "compilerOptions": { "module": "None", "resolveJsonModule": false, diff --git a/yarn.lock b/yarn.lock index d98a2a050..f8edce457 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1956,7 +1956,7 @@ __metadata: "@polkadot/util": ^11.0.0 "@polkadot/util-crypto": ^11.0.0 "@types/uuid": ^8.0.0 - cbor: ^8.1.0 + cbor-web: ^8.0.0 rimraf: ^3.0.2 testcontainers: ^9.0.0 typescript: ^4.8.3 @@ -1979,7 +1979,7 @@ __metadata: "@polkadot/types-codec": ^10.0.0 "@polkadot/util": ^11.0.0 "@polkadot/util-crypto": ^11.0.0 - cbor: ^8.1.0 + cbor-web: ^8.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 languageName: unknown @@ -2011,15 +2011,9 @@ __metadata: "@kiltprotocol/messaging": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - buffer: ^6.0.3 - crypto-browserify: ^3.12.0 - process: ^0.11.10 rimraf: ^3.0.2 - stream-browserify: ^3.0.0 terser-webpack-plugin: ^5.1.1 typescript: ^4.8.3 - url: ^0.11.0 - util: ^0.12.4 webpack: ^5.70.0 webpack-cli: ^4.9.2 languageName: unknown @@ -3740,18 +3734,6 @@ __metadata: languageName: node linkType: hard -"asn1.js@npm:^5.2.0": - version: 5.4.1 - resolution: "asn1.js@npm:5.4.1" - dependencies: - bn.js: ^4.0.0 - inherits: ^2.0.1 - minimalistic-assert: ^1.0.0 - safer-buffer: ^2.1.0 - checksum: 3786a101ac6f304bd4e9a7df79549a7561950a13d4bcaec0c7790d44c80d147c1a94ba3d4e663673406064642a40b23fcd6c82a9952468e386c1a1376d747f9a - languageName: node - linkType: hard - "asn1@npm:^0.2.4": version: 0.2.6 resolution: "asn1@npm:0.2.6" @@ -3789,13 +3771,6 @@ __metadata: languageName: node linkType: hard -"available-typed-arrays@npm:^1.0.5": - version: 1.0.5 - resolution: "available-typed-arrays@npm:1.0.5" - checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a - languageName: node - linkType: hard - "babel-jest@npm:^27.5.1": version: 27.5.1 resolution: "babel-jest@npm:27.5.1" @@ -3973,14 +3948,7 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": - version: 4.12.0 - resolution: "bn.js@npm:4.12.0" - checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 - languageName: node - linkType: hard - -"bn.js@npm:^5.0.0, bn.js@npm:^5.1.1, bn.js@npm:^5.2.1": +"bn.js@npm:^5.2.1": version: 5.2.1 resolution: "bn.js@npm:5.2.1" checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 @@ -4015,13 +3983,6 @@ __metadata: languageName: node linkType: hard -"brorand@npm:^1.0.1, brorand@npm:^1.1.0": - version: 1.1.0 - resolution: "brorand@npm:1.1.0" - checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be - languageName: node - linkType: hard - "browser-process-hrtime@npm:^1.0.0": version: 1.0.0 resolution: "browser-process-hrtime@npm:1.0.0" @@ -4029,70 +3990,6 @@ __metadata: languageName: node linkType: hard -"browserify-aes@npm:^1.0.0, browserify-aes@npm:^1.0.4": - version: 1.2.0 - resolution: "browserify-aes@npm:1.2.0" - dependencies: - buffer-xor: ^1.0.3 - cipher-base: ^1.0.0 - create-hash: ^1.1.0 - evp_bytestokey: ^1.0.3 - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - checksum: 4a17c3eb55a2aa61c934c286f34921933086bf6d67f02d4adb09fcc6f2fc93977b47d9d884c25619144fccd47b3b3a399e1ad8b3ff5a346be47270114bcf7104 - languageName: node - linkType: hard - -"browserify-cipher@npm:^1.0.0": - version: 1.0.1 - resolution: "browserify-cipher@npm:1.0.1" - dependencies: - browserify-aes: ^1.0.4 - browserify-des: ^1.0.0 - evp_bytestokey: ^1.0.0 - checksum: 2d8500acf1ee535e6bebe808f7a20e4c3a9e2ed1a6885fff1facbfd201ac013ef030422bec65ca9ece8ffe82b03ca580421463f9c45af6c8415fd629f4118c13 - languageName: node - linkType: hard - -"browserify-des@npm:^1.0.0": - version: 1.0.2 - resolution: "browserify-des@npm:1.0.2" - dependencies: - cipher-base: ^1.0.1 - des.js: ^1.0.0 - inherits: ^2.0.1 - safe-buffer: ^5.1.2 - checksum: b15a3e358a1d78a3b62ddc06c845d02afde6fc826dab23f1b9c016e643e7b1fda41de628d2110b712f6a44fb10cbc1800bc6872a03ddd363fb50768e010395b7 - languageName: node - linkType: hard - -"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.0.1": - version: 4.1.0 - resolution: "browserify-rsa@npm:4.1.0" - dependencies: - bn.js: ^5.0.0 - randombytes: ^2.0.1 - checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 - languageName: node - linkType: hard - -"browserify-sign@npm:^4.0.0": - version: 4.2.1 - resolution: "browserify-sign@npm:4.2.1" - dependencies: - bn.js: ^5.1.1 - browserify-rsa: ^4.0.1 - create-hash: ^1.2.0 - create-hmac: ^1.1.7 - elliptic: ^6.5.3 - inherits: ^2.0.4 - parse-asn1: ^5.1.5 - readable-stream: ^3.6.0 - safe-buffer: ^5.2.0 - checksum: 0221f190e3f5b2d40183fa51621be7e838d9caa329fe1ba773406b7637855f37b30f5d83e52ff8f244ed12ffe6278dd9983638609ed88c841ce547e603855707 - languageName: node - linkType: hard - "browserslist@npm:^4.14.5, browserslist@npm:^4.21.3, browserslist@npm:^4.21.4": version: 4.21.4 resolution: "browserslist@npm:4.21.4" @@ -4139,13 +4036,6 @@ __metadata: languageName: node linkType: hard -"buffer-xor@npm:^1.0.3": - version: 1.0.3 - resolution: "buffer-xor@npm:1.0.3" - checksum: 10c520df29d62fa6e785e2800e586a20fc4f6dfad84bcdbd12e1e8a83856de1cb75c7ebd7abe6d036bbfab738a6cf18a3ae9c8e5a2e2eb3167ca7399ce65373a - languageName: node - linkType: hard - "buffer@npm:^5.5.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" @@ -4156,16 +4046,6 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^6.0.3": - version: 6.0.3 - resolution: "buffer@npm:6.0.3" - dependencies: - base64-js: ^1.3.1 - ieee754: ^1.2.1 - checksum: 5ad23293d9a731e4318e420025800b42bf0d264004c0286c8cc010af7a270c7a0f6522e84f54b9ad65cbd6db20b8badbfd8d2ebf4f80fa03dab093b89e68c3f9 - languageName: node - linkType: hard - "bufferutil@npm:^4.0.1": version: 4.0.6 resolution: "bufferutil@npm:4.0.6" @@ -4288,12 +4168,10 @@ __metadata: languageName: node linkType: hard -"cbor@npm:^8.1.0": +"cbor-web@npm:^8.0.0": version: 8.1.0 - resolution: "cbor@npm:8.1.0" - dependencies: - nofilter: ^3.1.0 - checksum: a90338435dc7b45cc01461af979e3bb6ddd4f2a08584c437586039cd5f2235014c06e49d664295debbfb3514d87b2f06728092ab6aa6175e2e85e9cd7dc0c1fd + resolution: "cbor-web@npm:8.1.0" + checksum: 7898694ae4959a306f6e7dd2d042be8dab060a312d78dc8a2131d8ca641d5bcbcfe7e0691f1b6f0f95e5402b14ebf0ad797be14546712ab4682720b459c4836c languageName: node linkType: hard @@ -4370,16 +4248,6 @@ __metadata: languageName: node linkType: hard -"cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": - version: 1.0.4 - resolution: "cipher-base@npm:1.0.4" - dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - checksum: 47d3568dbc17431a339bad1fe7dff83ac0891be8206911ace3d3b818fc695f376df809bea406e759cdea07fff4b454fa25f1013e648851bec790c1d75763032e - languageName: node - linkType: hard - "cjs-module-lexer@npm:^1.0.0": version: 1.2.2 resolution: "cjs-module-lexer@npm:1.2.2" @@ -4715,43 +4583,6 @@ __metadata: languageName: node linkType: hard -"create-ecdh@npm:^4.0.0": - version: 4.0.4 - resolution: "create-ecdh@npm:4.0.4" - dependencies: - bn.js: ^4.1.0 - elliptic: ^6.5.3 - checksum: 0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b - languageName: node - linkType: hard - -"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": - version: 1.2.0 - resolution: "create-hash@npm:1.2.0" - dependencies: - cipher-base: ^1.0.1 - inherits: ^2.0.1 - md5.js: ^1.3.4 - ripemd160: ^2.0.1 - sha.js: ^2.4.0 - checksum: 02a6ae3bb9cd4afee3fabd846c1d8426a0e6b495560a977ba46120c473cb283be6aa1cace76b5f927cf4e499c6146fb798253e48e83d522feba807d6b722eaa9 - languageName: node - linkType: hard - -"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": - version: 1.1.7 - resolution: "create-hmac@npm:1.1.7" - dependencies: - cipher-base: ^1.0.3 - create-hash: ^1.1.0 - inherits: ^2.0.1 - ripemd160: ^2.0.0 - safe-buffer: ^5.0.1 - sha.js: ^2.4.8 - checksum: ba12bb2257b585a0396108c72830e85f882ab659c3320c83584b1037f8ab72415095167ced80dc4ce8e446a8ecc4b2acf36d87befe0707d73b26cf9dc77440ed - languageName: node - linkType: hard - "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -4777,25 +4608,6 @@ __metadata: languageName: node linkType: hard -"crypto-browserify@npm:^3.12.0": - version: 3.12.0 - resolution: "crypto-browserify@npm:3.12.0" - dependencies: - browserify-cipher: ^1.0.0 - browserify-sign: ^4.0.0 - create-ecdh: ^4.0.0 - create-hash: ^1.1.0 - create-hmac: ^1.1.0 - diffie-hellman: ^5.0.0 - inherits: ^2.0.1 - pbkdf2: ^3.0.3 - public-encrypt: ^4.0.0 - randombytes: ^2.0.0 - randomfill: ^1.0.3 - checksum: c1609af82605474262f3eaa07daa0b2140026bd264ab316d4bf1170272570dbe02f0c49e29407fe0d3634f96c507c27a19a6765fb856fed854a625f9d15618e2 - languageName: node - linkType: hard - "crypto-ld@npm:^6.0.0": version: 6.0.0 resolution: "crypto-ld@npm:6.0.0" @@ -4973,16 +4785,6 @@ __metadata: languageName: node linkType: hard -"des.js@npm:^1.0.0": - version: 1.0.1 - resolution: "des.js@npm:1.0.1" - dependencies: - inherits: ^2.0.1 - minimalistic-assert: ^1.0.0 - checksum: 1ec2eedd7ed6bd61dd5e0519fd4c96124e93bb22de8a9d211b02d63e5dd152824853d919bb2090f965cc0e3eb9c515950a9836b332020d810f9c71feb0fd7df4 - languageName: node - linkType: hard - "detect-newline@npm:^3.0.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" @@ -5027,17 +4829,6 @@ __metadata: languageName: node linkType: hard -"diffie-hellman@npm:^5.0.0": - version: 5.0.3 - resolution: "diffie-hellman@npm:5.0.3" - dependencies: - bn.js: ^4.1.0 - miller-rabin: ^4.0.0 - randombytes: ^2.0.0 - checksum: 0e620f322170c41076e70181dd1c24e23b08b47dbb92a22a644f3b89b6d3834b0f8ee19e37916164e5eb1ee26d2aa836d6129f92723995267250a0b541811065 - languageName: node - linkType: hard - "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -5145,21 +4936,6 @@ __metadata: languageName: node linkType: hard -"elliptic@npm:^6.5.3": - version: 6.5.4 - resolution: "elliptic@npm:6.5.4" - dependencies: - bn.js: ^4.11.9 - brorand: ^1.1.0 - hash.js: ^1.0.0 - hmac-drbg: ^1.0.1 - inherits: ^2.0.4 - minimalistic-assert: ^1.0.1 - minimalistic-crypto-utils: ^1.0.1 - checksum: d56d21fd04e97869f7ffcc92e18903b9f67f2d4637a23c860492fbbff5a3155fd9ca0184ce0c865dd6eb2487d234ce9551335c021c376cd2d3b7cb749c7d10f4 - languageName: node - linkType: hard - "emittery@npm:^0.8.1": version: 0.8.1 resolution: "emittery@npm:0.8.1" @@ -5252,7 +5028,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.18.5, es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1": +"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1": version: 1.19.1 resolution: "es-abstract@npm:1.19.1" dependencies: @@ -5678,17 +5454,6 @@ __metadata: languageName: node linkType: hard -"evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": - version: 1.0.3 - resolution: "evp_bytestokey@npm:1.0.3" - dependencies: - md5.js: ^1.3.4 - node-gyp: latest - safe-buffer: ^5.1.1 - checksum: ad4e1577f1a6b721c7800dcc7c733fe01f6c310732bb5bf2240245c2a5b45a38518b91d8be2c610611623160b9d1c0e91f1ce96d639f8b53e8894625cf20fa45 - languageName: node - linkType: hard - "execa@npm:^5.0.0": version: 5.1.1 resolution: "execa@npm:5.1.1" @@ -5883,13 +5648,6 @@ __metadata: languageName: node linkType: hard -"foreach@npm:^2.0.5": - version: 2.0.5 - resolution: "foreach@npm:2.0.5" - checksum: dab4fbfef0b40b69ee5eab81bcb9626b8fa8b3469c8cfa26480f3e5e1ee08c40eae07048c9a967c65aeda26e774511ccc70b3f10a604c01753c6ef24361f0fc8 - languageName: node - linkType: hard - "form-data@npm:^3.0.0": version: 3.0.1 resolution: "form-data@npm:3.0.1" @@ -6232,38 +5990,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"hash-base@npm:^3.0.0": - version: 3.1.0 - resolution: "hash-base@npm:3.1.0" - dependencies: - inherits: ^2.0.4 - readable-stream: ^3.6.0 - safe-buffer: ^5.2.0 - checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc - languageName: node - linkType: hard - -"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": - version: 1.1.7 - resolution: "hash.js@npm:1.1.7" - dependencies: - inherits: ^2.0.3 - minimalistic-assert: ^1.0.1 - checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f - languageName: node - linkType: hard - -"hmac-drbg@npm:^1.0.1": - version: 1.0.1 - resolution: "hmac-drbg@npm:1.0.1" - dependencies: - hash.js: ^1.0.3 - minimalistic-assert: ^1.0.0 - minimalistic-crypto-utils: ^1.0.1 - checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0 - languageName: node - linkType: hard - "hosted-git-info@npm:^2.1.4": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -6390,7 +6116,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": +"ieee754@npm:^1.1.13": version: 1.2.1 resolution: "ieee754@npm:1.2.1" checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e @@ -6464,7 +6190,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -6503,16 +6229,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"is-arguments@npm:^1.0.4": - version: 1.1.1 - resolution: "is-arguments@npm:1.1.1" - dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 - languageName: node - linkType: hard - "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -6585,15 +6301,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"is-generator-function@npm:^1.0.7": - version: 1.0.10 - resolution: "is-generator-function@npm:1.0.10" - dependencies: - has-tostringtag: ^1.0.0 - checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b - languageName: node - linkType: hard - "is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": version: 4.0.3 resolution: "is-glob@npm:4.0.3" @@ -6721,19 +6428,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.7": - version: 1.1.8 - resolution: "is-typed-array@npm:1.1.8" - dependencies: - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 - es-abstract: ^1.18.5 - foreach: ^2.0.5 - has-tostringtag: ^1.0.0 - checksum: aa0f9f0716e19e2fb8aef69e69e4205479d25ace778e2339fc910948115cde4b0d9aff9d5d1e8b80f09a5664998278e05e54ad3dc9cb12cefcf86db71084ed00 - languageName: node - linkType: hard - "is-typedarray@npm:^1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" @@ -7797,17 +7491,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"md5.js@npm:^1.3.4": - version: 1.3.5 - resolution: "md5.js@npm:1.3.5" - dependencies: - hash-base: ^3.0.0 - inherits: ^2.0.1 - safe-buffer: ^5.1.2 - checksum: 098494d885684bcc4f92294b18ba61b7bd353c23147fbc4688c75b45cb8590f5a95fd4584d742415dcc52487f7a1ef6ea611cfa1543b0dc4492fe026357f3f0c - languageName: node - linkType: hard - "meow@npm:^8.0.0": version: 8.1.2 resolution: "meow@npm:8.1.2" @@ -7851,18 +7534,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"miller-rabin@npm:^4.0.0": - version: 4.0.1 - resolution: "miller-rabin@npm:4.0.1" - dependencies: - bn.js: ^4.0.0 - brorand: ^1.0.1 - bin: - miller-rabin: bin/miller-rabin - checksum: 00cd1ab838ac49b03f236cc32a14d29d7d28637a53096bf5c6246a032a37749c9bd9ce7360cbf55b41b89b7d649824949ff12bc8eee29ac77c6b38eada619ece - languageName: node - linkType: hard - "mime-db@npm:1.52.0": version: 1.52.0 resolution: "mime-db@npm:1.52.0" @@ -7893,20 +7564,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": - version: 1.0.1 - resolution: "minimalistic-assert@npm:1.0.1" - checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 - languageName: node - linkType: hard - -"minimalistic-crypto-utils@npm:^1.0.1": - version: 1.0.1 - resolution: "minimalistic-crypto-utils@npm:1.0.1" - checksum: 6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed - languageName: node - linkType: hard - "minimatch@npm:^3.0.4": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -8190,13 +7847,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"nofilter@npm:^3.1.0": - version: 3.1.0 - resolution: "nofilter@npm:3.1.0" - checksum: 58aa85a5b4b35cbb6e42de8a8591c5e338061edc9f3e7286f2c335e9e9b9b8fa7c335ae45daa8a1f3433164dc0b9a3d187fa96f9516e04a17a1f9ce722becc4f - languageName: node - linkType: hard - "nopt@npm:^5.0.0": version: 5.0.0 resolution: "nopt@npm:5.0.0" @@ -8463,19 +8113,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.5": - version: 5.1.6 - resolution: "parse-asn1@npm:5.1.6" - dependencies: - asn1.js: ^5.2.0 - browserify-aes: ^1.0.0 - evp_bytestokey: ^1.0.0 - pbkdf2: ^3.0.3 - safe-buffer: ^5.1.1 - checksum: 9243311d1f88089bc9f2158972aa38d1abd5452f7b7cabf84954ed766048fe574d434d82c6f5a39b988683e96fb84cd933071dda38927e03469dc8c8d14463c7 - languageName: node - linkType: hard - "parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" @@ -8537,19 +8174,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"pbkdf2@npm:^3.0.3": - version: 3.1.2 - resolution: "pbkdf2@npm:3.1.2" - dependencies: - create-hash: ^1.1.2 - create-hmac: ^1.1.4 - ripemd160: ^2.0.1 - safe-buffer: ^5.0.1 - sha.js: ^2.4.8 - checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92 - languageName: node - linkType: hard - "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -8657,13 +8281,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"process@npm:^0.11.10": - version: 0.11.10 - resolution: "process@npm:0.11.10" - checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 - languageName: node - linkType: hard - "progress@npm:^2.0.0": version: 2.0.3 resolution: "progress@npm:2.0.3" @@ -8721,20 +8338,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"public-encrypt@npm:^4.0.0": - version: 4.0.3 - resolution: "public-encrypt@npm:4.0.3" - dependencies: - bn.js: ^4.1.0 - browserify-rsa: ^4.0.0 - create-hash: ^1.1.0 - parse-asn1: ^5.0.0 - randombytes: ^2.0.1 - safe-buffer: ^5.1.2 - checksum: 215d446e43cef021a20b67c1df455e5eea134af0b1f9b8a35f9e850abf32991b0c307327bc5b9bc07162c288d5cdb3d4a783ea6c6640979ed7b5017e3e0c9935 - languageName: node - linkType: hard - "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" @@ -8745,13 +8348,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"punycode@npm:1.3.2": - version: 1.3.2 - resolution: "punycode@npm:1.3.2" - checksum: b8807fd594b1db33335692d1f03e8beeddde6fda7fbb4a2e32925d88d20a3aa4cd8dcc0c109ccaccbd2ba761c208dfaaada83007087ea8bfb0129c9ef1b99ed6 - languageName: node - linkType: hard - "punycode@npm:^2.1.0, punycode@npm:^2.1.1": version: 2.1.1 resolution: "punycode@npm:2.1.1" @@ -8766,13 +8362,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"querystring@npm:0.2.0": - version: 0.2.0 - resolution: "querystring@npm:0.2.0" - checksum: 8258d6734f19be27e93f601758858c299bdebe71147909e367101ba459b95446fbe5b975bf9beb76390156a592b6f4ac3a68b6087cea165c259705b8b4e56a69 - languageName: node - linkType: hard - "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -8787,7 +8376,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0": +"randombytes@npm:^2.1.0": version: 2.1.0 resolution: "randombytes@npm:2.1.0" dependencies: @@ -8796,16 +8385,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"randomfill@npm:^1.0.3": - version: 1.0.4 - resolution: "randomfill@npm:1.0.4" - dependencies: - randombytes: ^2.0.5 - safe-buffer: ^5.1.0 - checksum: 33734bb578a868d29ee1b8555e21a36711db084065d94e019a6d03caa67debef8d6a1bfd06a2b597e32901ddc761ab483a85393f0d9a75838f1912461d4dbfc7 - languageName: node - linkType: hard - "rdf-canonize@npm:^3.0.0": version: 3.3.0 resolution: "rdf-canonize@npm:3.3.0" @@ -9095,16 +8674,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": - version: 2.0.2 - resolution: "ripemd160@npm:2.0.2" - dependencies: - hash-base: ^3.0.0 - inherits: ^2.0.1 - checksum: 006accc40578ee2beae382757c4ce2908a826b27e2b079efdcd2959ee544ddf210b7b5d7d5e80467807604244e7388427330f5c6d4cd61e6edaddc5773ccc393 - languageName: node - linkType: hard - "root-workspace-0b6124@workspace:.": version: 0.0.0-use.local resolution: "root-workspace-0b6124@workspace:." @@ -9156,7 +8725,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 @@ -9170,7 +8739,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 @@ -9288,18 +8857,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8": - version: 2.4.11 - resolution: "sha.js@npm:2.4.11" - dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - bin: - sha.js: ./bin.js - checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07 - languageName: node - linkType: hard - "shallow-clone@npm:^3.0.0": version: 3.0.1 resolution: "shallow-clone@npm:3.0.1" @@ -9594,16 +9151,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"stream-browserify@npm:^3.0.0": - version: 3.0.0 - resolution: "stream-browserify@npm:3.0.0" - dependencies: - inherits: ~2.0.4 - readable-stream: ^3.5.0 - checksum: 4c47ef64d6f03815a9ca3874e2319805e8e8a85f3550776c47ce523b6f4c6cd57f40e46ec6a9ab8ad260fde61863c2718f250d3bedb3fe9052444eb9abfd9921 - languageName: node - linkType: hard - "streamsearch@npm:^1.1.0": version: 1.1.0 resolution: "streamsearch@npm:1.1.0" @@ -10390,16 +9937,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"url@npm:^0.11.0": - version: 0.11.0 - resolution: "url@npm:0.11.0" - dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - checksum: 50d100d3dd2d98b9fe3ada48cadb0b08aa6be6d3ac64112b867b56b19be4bfcba03c2a9a0d7922bfd7ac17d4834e88537749fe182430dfd9b68e520175900d90 - languageName: node - linkType: hard - "utf-8-validate@npm:^5.0.2": version: 5.0.9 resolution: "utf-8-validate@npm:5.0.9" @@ -10417,20 +9954,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"util@npm:^0.12.4": - version: 0.12.4 - resolution: "util@npm:0.12.4" - dependencies: - inherits: ^2.0.3 - is-arguments: ^1.0.4 - is-generator-function: ^1.0.7 - is-typed-array: ^1.1.3 - safe-buffer: ^5.1.2 - which-typed-array: ^1.1.2 - checksum: 8eac7a6e6b341c0f1b3eb73bbe5dfcae31a7e9699c8fc3266789f3e95f7637946a7700dcf1904dbd3749a58a36760ebf7acf4bb5b717f7468532a8a79f44eff0 - languageName: node - linkType: hard - "uuid@npm:^9.0.0": version: 9.0.0 resolution: "uuid@npm:9.0.0" @@ -10719,20 +10242,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"which-typed-array@npm:^1.1.2": - version: 1.1.7 - resolution: "which-typed-array@npm:1.1.7" - dependencies: - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 - es-abstract: ^1.18.5 - foreach: ^2.0.5 - has-tostringtag: ^1.0.0 - is-typed-array: ^1.1.7 - checksum: 147837cf5866e36b6b2e427731709e02f79f1578477cbde68ed773a5307520a6cb6836c73c79c30690a473266ee59010b83b6d9b25d8d677a40ff77fb37a8a84 - languageName: node - linkType: hard - "which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" From c661d614784027e7081a5a648af900595031bf87 Mon Sep 17 00:00:00 2001 From: Github Action Date: Tue, 23 May 2023 11:43:24 +0000 Subject: [PATCH 033/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 870066cf9..5100527b0 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.1-6", + "version": "0.32.1-7", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 096e58184..7bf6e6fc9 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.1-6", + "version": "0.32.1-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 81154220b..086443f8c 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.1-6", + "version": "0.32.1-7", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index e13efd91c..cf58bc0da 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.1-6", + "version": "0.32.1-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 3c2d23a9d..96792509e 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.1-6", + "version": "0.32.1-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 4d5be0a4a..bfb6d5b6f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.1-6", + "version": "0.32.1-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index e66be7d09..54fbbf9e5 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.1-6", + "version": "0.32.1-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index a068519df..825d72279 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.1-6", + "version": "0.32.1-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 905a3247b..db9ce6bc9 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.1-6", + "version": "0.32.1-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 0b2a5fb2e..755235823 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.1-6", + "version": "0.32.1-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index d0acda5c6..7e0654644 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.1-6", + "version": "0.32.1-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 1480418b7..17e41c9ba 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.1-6", + "version": "0.32.1-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index f7974c6c2..460bf6f02 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.1-6", + "version": "0.32.1-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 10aba294e..8237a7f74 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.1-6", + "version": "0.32.1-7", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From c8e574a4fe3b96ab381b0886ae1350fc95792388 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Tue, 23 May 2023 18:31:20 +0200 Subject: [PATCH 034/130] fix: make config package cjs-only (#755) * fix: make sure config is singleton --- packages/config/package.json | 16 +++++++++------- packages/config/tsconfig.build.json | 4 ++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/config/package.json b/packages/config/package.json index 96792509e..23f8d8dc4 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -2,13 +2,15 @@ "name": "@kiltprotocol/config", "version": "0.32.1-7", "description": "", - "main": "./lib/cjs/index.js", - "module": "./lib/esm/index.js", - "types": "./lib/cjs/index.d.ts", + "type": "commonjs", + "main": "./lib/index.js", + "module": "./lib/index.mjs", + "types": "./lib/index.d.ts", "exports": { ".": { - "import": "./lib/esm/index.js", - "require": "./lib/cjs/index.js" + "import": "./lib/index.mjs", + "require": "./lib/index.js", + "types": "./lib/index.d.ts" } }, "files": [ @@ -18,8 +20,8 @@ "clean": "rimraf ./lib", "build": "yarn clean && yarn build:ts", "build:ts": "yarn build:cjs && yarn build:esm", - "build:cjs": "tsc --declaration -p tsconfig.build.json && echo '{\"type\":\"commonjs\"}' > ./lib/cjs/package.json", - "build:esm": "tsc --declaration -p tsconfig.esm.json && echo '{\"type\":\"module\"}' > ./lib/esm/package.json" + "build:cjs": "tsc --declaration -p tsconfig.build.json", + "build:esm": "tsc --declaration -p tsconfig.esm.json && yarn exec cp -f ./lib/esm/index.js ./lib/index.mjs && rimraf ./lib/esm" }, "repository": "github:kiltprotocol/sdk-js", "engines": { diff --git a/packages/config/tsconfig.build.json b/packages/config/tsconfig.build.json index 8af083c78..0eb1133ec 100644 --- a/packages/config/tsconfig.build.json +++ b/packages/config/tsconfig.build.json @@ -3,11 +3,11 @@ "compilerOptions": { "module": "CommonJS", - "outDir": "./lib/cjs" + "outDir": "./lib" }, "include": [ - "src/**/*.ts", "src/**/*.js" + "src/**/*.ts" ], "exclude": [ From 514a6473a733714c2ec96930d38a11d30c1f5ea1 Mon Sep 17 00:00:00 2001 From: Github Action Date: Tue, 23 May 2023 16:35:14 +0000 Subject: [PATCH 035/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 5100527b0..d0f69e6b8 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.1-7", + "version": "0.32.1-8", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 7bf6e6fc9..576e9a4f1 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.1-7", + "version": "0.32.1-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 086443f8c..13d5404d6 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.1-7", + "version": "0.32.1-8", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index cf58bc0da..b267408e3 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.1-7", + "version": "0.32.1-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 23f8d8dc4..ef24a6efc 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.1-7", + "version": "0.32.1-8", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index bfb6d5b6f..c83ac3bd7 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.1-7", + "version": "0.32.1-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index 54fbbf9e5..dc0afd914 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.1-7", + "version": "0.32.1-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 825d72279..d6678783f 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.1-7", + "version": "0.32.1-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index db9ce6bc9..118a1a103 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.1-7", + "version": "0.32.1-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 755235823..147ba62c1 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.1-7", + "version": "0.32.1-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 7e0654644..de5959db2 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.1-7", + "version": "0.32.1-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 17e41c9ba..add361165 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.1-7", + "version": "0.32.1-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 460bf6f02..9f7c24430 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.1-7", + "version": "0.32.1-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 8237a7f74..e90a4eb56 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.1-7", + "version": "0.32.1-8", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 16ce2bee9e559b9c4aa63562479720e12ca78384 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Tue, 23 May 2023 20:17:15 +0200 Subject: [PATCH 036/130] fix: update metadata script extension --- packages/augment-api/package.json | 2 +- .../augment-api/scripts/{fetchMetadata.js => fetchMetadata.cjs} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename packages/augment-api/scripts/{fetchMetadata.js => fetchMetadata.cjs} (100%) diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 13d5404d6..eb741fc5e 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -29,7 +29,7 @@ "build:ts": "tsc -p tsconfig.build.json", "generate:defs": "ts-node --esm -P tsconfig.build.json ../../node_modules/.bin/polkadot-types-from-defs --package @kiltprotocol/augment-api --input ./src/interfaces --endpoint ./metadata/spiritnet.json", "generate:meta": "ts-node --esm -P tsconfig.build.json ../../node_modules/.bin/polkadot-types-from-chain --package @kiltprotocol/augment-api --endpoint ./metadata/spiritnet.json --output ./src/interfaces --strict", - "update-metadata": "node ./scripts/fetchMetadata.js -o './metadata/spiritnet.json' -e 'wss://spiritnet.kilt.io/'" + "update-metadata": "node ./scripts/fetchMetadata.cjs -o './metadata/spiritnet.json' -e 'wss://spiritnet.kilt.io/'" }, "repository": "github:kiltprotocol/sdk-js", "engines": { diff --git a/packages/augment-api/scripts/fetchMetadata.js b/packages/augment-api/scripts/fetchMetadata.cjs similarity index 100% rename from packages/augment-api/scripts/fetchMetadata.js rename to packages/augment-api/scripts/fetchMetadata.cjs From b01adeb558bfd20d11d3a6a48c3239a95187a4e1 Mon Sep 17 00:00:00 2001 From: Github Action Date: Tue, 23 May 2023 18:23:23 +0000 Subject: [PATCH 037/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index d0f69e6b8..10a704024 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.22.15", "typescript": "^4.8.3" }, - "version": "0.32.1-8", + "version": "0.32.1-9", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 576e9a4f1..f58002a16 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.1-8", + "version": "0.32.1-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index eb741fc5e..12591da0b 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.1-8", + "version": "0.32.1-9", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index b267408e3..99a95ea25 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.1-8", + "version": "0.32.1-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index ef24a6efc..a273ebe33 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.1-8", + "version": "0.32.1-9", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index c83ac3bd7..509725004 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.1-8", + "version": "0.32.1-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index dc0afd914..138069c53 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.1-8", + "version": "0.32.1-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index d6678783f..3feeb428c 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.1-8", + "version": "0.32.1-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 118a1a103..b115b0a1d 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.1-8", + "version": "0.32.1-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 147ba62c1..e93d69644 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.1-8", + "version": "0.32.1-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index de5959db2..1a1885171 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.1-8", + "version": "0.32.1-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index add361165..97c26e33a 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.1-8", + "version": "0.32.1-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 9f7c24430..586a4ef1c 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.1-8", + "version": "0.32.1-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index e90a4eb56..e0d12de5f 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.1-8", + "version": "0.32.1-9", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From f623265cda6b8aba7930f69565b01ec65fd2ccbe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 1 Jun 2023 13:40:18 +0200 Subject: [PATCH 038/130] chore(deps): update polkadot dependencies to v12 (#749) * chore: use v12 versions of polkadot/common libs * chore: remove unused dependency websocket * chore!: end support for node 14 * ci: use nvmrc for node version definition * ci: test node v20 as well --------- Co-authored-by: Raphael Flechtner --- .github/workflows/devpackpublish.yml | 2 +- .github/workflows/npmpublish-rc.yml | 4 +- .github/workflows/npmpublish.yml | 4 +- .github/workflows/test-node-candidate.yml | 28 +- .github/workflows/tests-polkadot-deps.yml | 6 +- .github/workflows/tests.yml | 41 +- .nvmrc | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 8 +- packages/chain-helpers/package.json | 8 +- packages/config/package.json | 4 +- packages/core/package.json | 12 +- packages/did/package.json | 14 +- packages/messaging/package.json | 4 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 12 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 12 +- packages/utils/package.json | 10 +- packages/utils/src/Crypto.ts | 17 +- packages/vc-export/package.json | 10 +- yarn.lock | 823 +++++++++------------- 22 files changed, 447 insertions(+), 580 deletions(-) diff --git a/.github/workflows/devpackpublish.yml b/.github/workflows/devpackpublish.yml index a976dc9cc..775829df7 100644 --- a/.github/workflows/devpackpublish.yml +++ b/.github/workflows/devpackpublish.yml @@ -23,7 +23,7 @@ jobs: token: ${{ secrets.REPO_ACCESS_TOKEN }} - uses: actions/setup-node@v3 with: - node-version: 14 + node-version-file: '.nvmrc' cache: 'yarn' - name: Install dependencies run: yarn install --immutable diff --git a/.github/workflows/npmpublish-rc.yml b/.github/workflows/npmpublish-rc.yml index c53519c74..32757d77c 100644 --- a/.github/workflows/npmpublish-rc.yml +++ b/.github/workflows/npmpublish-rc.yml @@ -9,7 +9,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: 14 + node-version-file: '.nvmrc' cache: 'yarn' - run: yarn install --immutable - run: yarn build @@ -22,7 +22,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: 14 + node-version-file: '.nvmrc' cache: 'yarn' - name: Install dependencies run: yarn install --immutable diff --git a/.github/workflows/npmpublish.yml b/.github/workflows/npmpublish.yml index 7f3123b81..69f679d51 100644 --- a/.github/workflows/npmpublish.yml +++ b/.github/workflows/npmpublish.yml @@ -9,7 +9,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: 14 + node-version-file: '.nvmrc' cache: 'yarn' - run: yarn install --immutable - run: yarn build @@ -22,7 +22,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: 14 + node-version-file: '.nvmrc' cache: 'yarn' - name: Install dependencies run: yarn install --immutable diff --git a/.github/workflows/test-node-candidate.yml b/.github/workflows/test-node-candidate.yml index 6276ffd4c..8e933834f 100644 --- a/.github/workflows/test-node-candidate.yml +++ b/.github/workflows/test-node-candidate.yml @@ -21,7 +21,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: 14 + node-version-file: '.nvmrc' cache: 'yarn' - name: yarn install run: yarn install --immutable @@ -51,17 +51,17 @@ jobs: needs: cache_imgs steps: - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 14 - - name: Log out node version - run: node --version - uses: actions/download-artifact@v3 with: name: build - name: unzip run: unzip build.zip -d . + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + - name: Log out node version + run: node --version - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v2 @@ -97,15 +97,15 @@ jobs: needs: build steps: - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 14 - uses: actions/download-artifact@v3 with: name: build - name: unzip run: unzip build.zip -d . + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' - name: yarn bundle run: yarn bundle - name: upload bundle artifact @@ -120,9 +120,6 @@ jobs: needs: [cache_imgs, bundle_cache] steps: - - uses: actions/setup-node@v3 - with: - node-version: '16.x' - uses: actions/download-artifact@v3 with: name: build @@ -132,6 +129,9 @@ jobs: with: name: checked-nonmin-bundle path: packages/sdk-js/dist + - uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' - run: basename /packages/sdk-js/dist/ - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v2 diff --git a/.github/workflows/tests-polkadot-deps.yml b/.github/workflows/tests-polkadot-deps.yml index b83dd2869..ced20feba 100644 --- a/.github/workflows/tests-polkadot-deps.yml +++ b/.github/workflows/tests-polkadot-deps.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: - node-version: [14.x, 16.x] + node-version: [16.x, 18.x, 20.x] steps: - uses: actions/checkout@v3 @@ -58,10 +58,10 @@ jobs: strategy: matrix: - node-version: [14.x] + node-version: [16.x, 18.x] required: ['required'] include: - - node-version: 16.x + - node-version: 20.x required: 'optional' continue-on-error: ${{ matrix.required == 'optional' }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3b83fb704..626adea2b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -41,7 +41,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: 14 + node-version-file: '.nvmrc' cache: 'yarn' - name: yarn install run: yarn install --immutable @@ -60,15 +60,15 @@ jobs: needs: build steps: - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 14 - uses: actions/download-artifact@v3 with: name: build - name: unzip run: unzip build.zip -d . + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' - name: lint run: yarn lint - name: check dependency duplication @@ -80,10 +80,10 @@ jobs: strategy: matrix: - node-version: [14, 16] + node-version: [16, 18] required: ['required'] include: - - node-version: 18 + - node-version: 20 required: 'optional' continue-on-error: ${{ matrix.required == 'optional' }} @@ -124,17 +124,17 @@ jobs: continue-on-error: ${{ matrix.required == 'optional' }} steps: - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 14 - - name: Log out node version - run: node --version - uses: actions/download-artifact@v3 with: name: build - name: unzip run: unzip build.zip -d . + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + - name: Log out node version + run: node --version - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v2 @@ -170,15 +170,15 @@ jobs: needs: build steps: - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 14 - uses: actions/download-artifact@v3 with: name: build - name: unzip run: unzip build.zip -d . + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' - name: yarn bundle run: yarn bundle - name: upload bundle artifact @@ -201,9 +201,6 @@ jobs: continue-on-error: ${{ matrix.required == 'optional' }} steps: - - uses: actions/setup-node@v3 - with: - node-version: '16.x' - uses: actions/download-artifact@v3 with: name: build @@ -214,6 +211,10 @@ jobs: name: checked-nonmin-bundle path: packages/sdk-js/dist + - uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v2 with: diff --git a/.nvmrc b/.nvmrc index b009dfb9d..27cb0ee2c 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -lts/* +lts/Gallium diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index f58002a16..53dc9fe51 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=14.0" + "node": ">=16.0" }, "author": "", "license": "BSD-4-Clause", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 12591da0b..2d77a2baa 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -33,21 +33,19 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=14.0" + "node": ">=16.0" }, "author": "", "license": "BSD-4-Clause", "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { - "@polkadot/api": "^10.0.0", - "@polkadot/typegen": "^10.0.0", - "@types/websocket": "^1.0.5", + "@polkadot/api": "^10.4.0", + "@polkadot/typegen": "^10.4.0", "glob": "^7.1.1", "rimraf": "^3.0.2", "ts-node": "^10.4.0", "typescript": "^4.8.3", - "websocket": "^1.0.34", "yargs": "^16.2.0" }, "dependencies": { diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 99a95ea25..0df3513f9 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=14.0" + "node": ">=16.0" }, "author": "", "license": "BSD-4-Clause", @@ -31,7 +31,7 @@ "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { "@kiltprotocol/testing": "workspace:*", - "@polkadot/keyring": "^11.0.0", + "@polkadot/keyring": "^12.0.0", "rimraf": "^3.0.2", "typescript": "^4.8.3" }, @@ -39,7 +39,7 @@ "@kiltprotocol/config": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^10.0.0", - "@polkadot/types": "^10.0.0" + "@polkadot/api": "^10.4.0", + "@polkadot/types": "^10.4.0" } } diff --git a/packages/config/package.json b/packages/config/package.json index a273ebe33..668fc5a9e 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -25,7 +25,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=14.0" + "node": ">=16.0" }, "author": "", "license": "BSD-4-Clause", @@ -38,7 +38,7 @@ "dependencies": { "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^10.0.0", + "@polkadot/api": "^10.4.0", "typescript-logging": "^1.0.0" } } diff --git a/packages/core/package.json b/packages/core/package.json index 509725004..612799363 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=14.0" + "node": ">=16.0" }, "author": "", "license": "BSD-4-Clause", @@ -45,11 +45,11 @@ "@kiltprotocol/type-definitions": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^10.0.0", - "@polkadot/keyring": "^11.0.0", - "@polkadot/types": "^10.0.0", - "@polkadot/util": "^11.0.0", - "@polkadot/util-crypto": "^11.0.0", + "@polkadot/api": "^10.4.0", + "@polkadot/keyring": "^12.0.0", + "@polkadot/types": "^10.4.0", + "@polkadot/util": "^12.0.0", + "@polkadot/util-crypto": "^12.0.0", "cbor-web": "^8.0.0" } } diff --git a/packages/did/package.json b/packages/did/package.json index 138069c53..baf42cfac 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=14.0" + "node": ">=16.0" }, "author": "", "license": "BSD-4-Clause", @@ -40,12 +40,12 @@ "@kiltprotocol/config": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^10.0.0", - "@polkadot/keyring": "^11.0.0", - "@polkadot/types": "^10.0.0", - "@polkadot/types-codec": "^10.0.0", - "@polkadot/util": "^11.0.0", - "@polkadot/util-crypto": "^11.0.0", + "@polkadot/api": "^10.4.0", + "@polkadot/keyring": "^12.0.0", + "@polkadot/types": "^10.4.0", + "@polkadot/types-codec": "^10.4.0", + "@polkadot/util": "^12.0.0", + "@polkadot/util-crypto": "^12.0.0", "cbor-web": "^8.0.0" } } diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 3feeb428c..0ef37eae3 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=14.0" + "node": ">=16.0" }, "author": "", "license": "BSD-4-Clause", @@ -39,6 +39,6 @@ "@kiltprotocol/did": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/util": "^11.0.0" + "@polkadot/util": "^12.0.0" } } diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index b115b0a1d..3959cd3fe 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -25,7 +25,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=14.0" + "node": ">=16.0" }, "author": "", "license": "BSD-4-Clause", diff --git a/packages/testing/package.json b/packages/testing/package.json index e93d69644..16a64783e 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -24,7 +24,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=14.0" + "node": ">=16.0" }, "author": "", "license": "BSD-4-Clause", @@ -38,11 +38,11 @@ "@kiltprotocol/type-definitions": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^10.0.0", - "@polkadot/keyring": "^11.0.0", - "@polkadot/types": "^10.0.0", - "@polkadot/util": "^11.0.0", - "@polkadot/util-crypto": "^11.0.0", + "@polkadot/api": "^10.4.0", + "@polkadot/keyring": "^12.0.0", + "@polkadot/types": "^10.4.0", + "@polkadot/util": "^12.0.0", + "@polkadot/util-crypto": "^12.0.0", "tweetnacl": "^1.0.3", "uuid": "^9.0.0" }, diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 1a1885171..4905cc1af 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=14.0" + "node": ">=16.0" }, "author": "", "license": "BSD-4-Clause", diff --git a/packages/types/package.json b/packages/types/package.json index 97c26e33a..014fcc521 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -23,18 +23,18 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=14.0" + "node": ">=16.0" }, "author": "", "license": "BSD-4-Clause", "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "dependencies": { - "@polkadot/api": "^10.0.0", - "@polkadot/keyring": "^11.0.0", - "@polkadot/types": "^10.0.0", - "@polkadot/util": "^11.0.0", - "@polkadot/util-crypto": "^11.0.0" + "@polkadot/api": "^10.4.0", + "@polkadot/keyring": "^12.0.0", + "@polkadot/types": "^10.4.0", + "@polkadot/util": "^12.0.0", + "@polkadot/util-crypto": "^12.0.0" }, "devDependencies": { "rimraf": "^3.0.2", diff --git a/packages/utils/package.json b/packages/utils/package.json index 586a4ef1c..f074d5128 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=14.0" + "node": ">=16.0" }, "author": "", "license": "BSD-4-Clause", @@ -35,10 +35,10 @@ }, "dependencies": { "@kiltprotocol/types": "workspace:*", - "@polkadot/api": "^10.0.0", - "@polkadot/keyring": "^11.0.0", - "@polkadot/util": "^11.0.0", - "@polkadot/util-crypto": "^11.0.0", + "@polkadot/api": "^10.4.0", + "@polkadot/keyring": "^12.0.0", + "@polkadot/util": "^12.0.0", + "@polkadot/util-crypto": "^12.0.0", "tweetnacl": "^1.0.3", "uuid": "^9.0.0" } diff --git a/packages/utils/src/Crypto.ts b/packages/utils/src/Crypto.ts index 522781d6b..111f04997 100644 --- a/packages/utils/src/Crypto.ts +++ b/packages/utils/src/Crypto.ts @@ -30,7 +30,6 @@ import { import { blake2AsHex, blake2AsU8a, - naclBoxPairFromSecret, randomAsU8a, signatureVerify, } from '@polkadot/util-crypto' @@ -42,14 +41,20 @@ import jsonabc from './jsonabc.js' import * as SDKErrors from './SDKErrors.js' import { ss58Format } from './ss58Format.js' -export { - naclBoxPairFromSecret, - mnemonicGenerate, - mnemonicToMiniSecret, -} from '@polkadot/util-crypto' +export { mnemonicGenerate, mnemonicToMiniSecret } from '@polkadot/util-crypto' export { encodeAddress, decodeAddress, u8aToHex, u8aConcat } +/** + * Creates a new public/secret box keypair from a secret. + * + * @param secret The secret. + * @returns An object containing a box `publicKey` & `secretKey` generated from the supplied secret. + */ +export function naclBoxPairFromSecret(secret: Uint8Array): nacl.BoxKeyPair { + return nacl.box.keyPair.fromSecretKey(secret) +} + /** * Types accepted by hashing and crypto functions. */ diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index e0d12de5f..ffbc0bbb3 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=14.0" + "node": ">=16.0" }, "author": "", "license": "BSD-4-Clause", @@ -42,10 +42,10 @@ "@kiltprotocol/did": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^10.0.0", - "@polkadot/types": "^10.0.0", - "@polkadot/util": "^11.0.0", - "@polkadot/util-crypto": "^11.0.0", + "@polkadot/api": "^10.4.0", + "@polkadot/types": "^10.4.0", + "@polkadot/util": "^12.0.0", + "@polkadot/util-crypto": "^12.0.0", "crypto-ld": "^6.0.0", "did-jwt": "^7.0.0" }, diff --git a/yarn.lock b/yarn.lock index f8edce457..78ab88b4f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1896,14 +1896,12 @@ __metadata: resolution: "@kiltprotocol/augment-api@workspace:packages/augment-api" dependencies: "@kiltprotocol/type-definitions": "workspace:*" - "@polkadot/api": ^10.0.0 - "@polkadot/typegen": ^10.0.0 - "@types/websocket": ^1.0.5 + "@polkadot/api": ^10.4.0 + "@polkadot/typegen": ^10.4.0 glob: ^7.1.1 rimraf: ^3.0.2 ts-node: ^10.4.0 typescript: ^4.8.3 - websocket: ^1.0.34 yargs: ^16.2.0 languageName: unknown linkType: soft @@ -1916,9 +1914,9 @@ __metadata: "@kiltprotocol/testing": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^10.0.0 - "@polkadot/keyring": ^11.0.0 - "@polkadot/types": ^10.0.0 + "@polkadot/api": ^10.4.0 + "@polkadot/keyring": ^12.0.0 + "@polkadot/types": ^10.4.0 rimraf: ^3.0.2 typescript: ^4.8.3 languageName: unknown @@ -1930,7 +1928,7 @@ __metadata: dependencies: "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^10.0.0 + "@polkadot/api": ^10.4.0 rimraf: ^3.0.2 typescript: ^4.8.3 typescript-logging: ^1.0.0 @@ -1950,11 +1948,11 @@ __metadata: "@kiltprotocol/type-definitions": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^10.0.0 - "@polkadot/keyring": ^11.0.0 - "@polkadot/types": ^10.0.0 - "@polkadot/util": ^11.0.0 - "@polkadot/util-crypto": ^11.0.0 + "@polkadot/api": ^10.4.0 + "@polkadot/keyring": ^12.0.0 + "@polkadot/types": ^10.4.0 + "@polkadot/util": ^12.0.0 + "@polkadot/util-crypto": ^12.0.0 "@types/uuid": ^8.0.0 cbor-web: ^8.0.0 rimraf: ^3.0.2 @@ -1973,12 +1971,12 @@ __metadata: "@kiltprotocol/testing": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^10.0.0 - "@polkadot/keyring": ^11.0.0 - "@polkadot/types": ^10.0.0 - "@polkadot/types-codec": ^10.0.0 - "@polkadot/util": ^11.0.0 - "@polkadot/util-crypto": ^11.0.0 + "@polkadot/api": ^10.4.0 + "@polkadot/keyring": ^12.0.0 + "@polkadot/types": ^10.4.0 + "@polkadot/types-codec": ^10.4.0 + "@polkadot/util": ^12.0.0 + "@polkadot/util-crypto": ^12.0.0 cbor-web: ^8.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 @@ -1994,7 +1992,7 @@ __metadata: "@kiltprotocol/testing": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/util": ^11.0.0 + "@polkadot/util": ^12.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 languageName: unknown @@ -2030,11 +2028,11 @@ __metadata: "@kiltprotocol/type-definitions": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^10.0.0 - "@polkadot/keyring": ^11.0.0 - "@polkadot/types": ^10.0.0 - "@polkadot/util": ^11.0.0 - "@polkadot/util-crypto": ^11.0.0 + "@polkadot/api": ^10.4.0 + "@polkadot/keyring": ^12.0.0 + "@polkadot/types": ^10.4.0 + "@polkadot/util": ^12.0.0 + "@polkadot/util-crypto": ^12.0.0 rimraf: ^3.0.2 tweetnacl: ^1.0.3 typescript: ^4.8.3 @@ -2055,11 +2053,11 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/types@workspace:packages/types" dependencies: - "@polkadot/api": ^10.0.0 - "@polkadot/keyring": ^11.0.0 - "@polkadot/types": ^10.0.0 - "@polkadot/util": ^11.0.0 - "@polkadot/util-crypto": ^11.0.0 + "@polkadot/api": ^10.4.0 + "@polkadot/keyring": ^12.0.0 + "@polkadot/types": ^10.4.0 + "@polkadot/util": ^12.0.0 + "@polkadot/util-crypto": ^12.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 languageName: unknown @@ -2070,10 +2068,10 @@ __metadata: resolution: "@kiltprotocol/utils@workspace:packages/utils" dependencies: "@kiltprotocol/types": "workspace:*" - "@polkadot/api": ^10.0.0 - "@polkadot/keyring": ^11.0.0 - "@polkadot/util": ^11.0.0 - "@polkadot/util-crypto": ^11.0.0 + "@polkadot/api": ^10.4.0 + "@polkadot/keyring": ^12.0.0 + "@polkadot/util": ^12.0.0 + "@polkadot/util-crypto": ^12.0.0 rimraf: ^3.0.2 tweetnacl: ^1.0.3 typescript: ^4.8.3 @@ -2093,10 +2091,10 @@ __metadata: "@kiltprotocol/testing": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^10.0.0 - "@polkadot/types": ^10.0.0 - "@polkadot/util": ^11.0.0 - "@polkadot/util-crypto": ^11.0.0 + "@polkadot/api": ^10.4.0 + "@polkadot/types": ^10.4.0 + "@polkadot/util": ^12.0.0 + "@polkadot/util-crypto": ^12.0.0 crypto-ld: ^6.0.0 did-jwt: ^7.0.0 rimraf: ^3.0.2 @@ -2108,7 +2106,7 @@ __metadata: languageName: unknown linkType: soft -"@noble/curves@npm:^1.0.0": +"@noble/curves@npm:1.0.0, @noble/curves@npm:^1.0.0": version: 1.0.0 resolution: "@noble/curves@npm:1.0.0" dependencies: @@ -2131,13 +2129,6 @@ __metadata: languageName: node linkType: hard -"@noble/secp256k1@npm:1.7.1": - version: 1.7.1 - resolution: "@noble/secp256k1@npm:1.7.1" - checksum: d2301f1f7690368d8409a3152450458f27e54df47e3f917292de3de82c298770890c2de7c967d237eff9c95b70af485389a9695f73eb05a43e2bd562d18b18cb - languageName: node - linkType: hard - "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -2197,437 +2188,442 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-augment@npm:10.3.2": - version: 10.3.2 - resolution: "@polkadot/api-augment@npm:10.3.2" +"@polkadot/api-augment@npm:10.7.3": + version: 10.7.3 + resolution: "@polkadot/api-augment@npm:10.7.3" dependencies: - "@polkadot/api-base": 10.3.2 - "@polkadot/rpc-augment": 10.3.2 - "@polkadot/types": 10.3.2 - "@polkadot/types-augment": 10.3.2 - "@polkadot/types-codec": 10.3.2 - "@polkadot/util": ^11.1.3 - tslib: ^2.5.0 - checksum: 9b7455f84c1eb8485c85548b122c962558508205b4b26b33ea2f9ea6143bd3cfc7ebf0921a54970b955d39cc90e17af710d14d913438e3bde916a1f0396ee12b + "@polkadot/api-base": 10.7.3 + "@polkadot/rpc-augment": 10.7.3 + "@polkadot/types": 10.7.3 + "@polkadot/types-augment": 10.7.3 + "@polkadot/types-codec": 10.7.3 + "@polkadot/util": ^12.2.1 + tslib: ^2.5.2 + checksum: f723f033a00b5635d94ceec20f8ba299c0bfa92132142392b686c58c50e44e6082e4946681035c727feb25ea8210ccd953aa5b8420af51d27a42a0ed134c4117 languageName: node linkType: hard -"@polkadot/api-base@npm:10.3.2": - version: 10.3.2 - resolution: "@polkadot/api-base@npm:10.3.2" +"@polkadot/api-base@npm:10.7.3": + version: 10.7.3 + resolution: "@polkadot/api-base@npm:10.7.3" dependencies: - "@polkadot/rpc-core": 10.3.2 - "@polkadot/types": 10.3.2 - "@polkadot/util": ^11.1.3 - rxjs: ^7.8.0 - tslib: ^2.5.0 - checksum: 44eb437fd4240c6ad0b8ac0a972583c68f12e72a44b4a7c6a0887bdc8f33ecb99513e396f6aa436ab4aa09e0c30fff16cf4c2a4583527d8cfc2dbcaa9a8c9301 + "@polkadot/rpc-core": 10.7.3 + "@polkadot/types": 10.7.3 + "@polkadot/util": ^12.2.1 + rxjs: ^7.8.1 + tslib: ^2.5.2 + checksum: f618fcb5d2b3aa20e9e3c13e081e464efc433ee12bda77c16b45899bcb496615e4e8d0ab651ed17f078d10d31f3bfee83225131f55a714a961f45d91208a3cda languageName: node linkType: hard -"@polkadot/api-derive@npm:10.3.2": - version: 10.3.2 - resolution: "@polkadot/api-derive@npm:10.3.2" +"@polkadot/api-derive@npm:10.7.3": + version: 10.7.3 + resolution: "@polkadot/api-derive@npm:10.7.3" dependencies: - "@polkadot/api": 10.3.2 - "@polkadot/api-augment": 10.3.2 - "@polkadot/api-base": 10.3.2 - "@polkadot/rpc-core": 10.3.2 - "@polkadot/types": 10.3.2 - "@polkadot/types-codec": 10.3.2 - "@polkadot/util": ^11.1.3 - "@polkadot/util-crypto": ^11.1.3 - rxjs: ^7.8.0 - tslib: ^2.5.0 - checksum: 3d1a38c520291ef295748794f08758973458c3c450ddad7599179d25763483921c002a38823cb740d8e4ee5bcb09ad48ad35f812a14993c46e14bb8b17134c97 - languageName: node - linkType: hard - -"@polkadot/api@npm:10.3.2, @polkadot/api@npm:^10.0.0": - version: 10.3.2 - resolution: "@polkadot/api@npm:10.3.2" - dependencies: - "@polkadot/api-augment": 10.3.2 - "@polkadot/api-base": 10.3.2 - "@polkadot/api-derive": 10.3.2 - "@polkadot/keyring": ^11.1.3 - "@polkadot/rpc-augment": 10.3.2 - "@polkadot/rpc-core": 10.3.2 - "@polkadot/rpc-provider": 10.3.2 - "@polkadot/types": 10.3.2 - "@polkadot/types-augment": 10.3.2 - "@polkadot/types-codec": 10.3.2 - "@polkadot/types-create": 10.3.2 - "@polkadot/types-known": 10.3.2 - "@polkadot/util": ^11.1.3 - "@polkadot/util-crypto": ^11.1.3 - eventemitter3: ^5.0.0 - rxjs: ^7.8.0 - tslib: ^2.5.0 - checksum: 391e02b905f8dd21b785503c43df5eaa69e135a9b1ffb9c5737c1adff209acb7591fc5e11b6acfad48fee48900b9f33e05c3223e93d4a6b06e1ec432ebeeb5e1 + "@polkadot/api": 10.7.3 + "@polkadot/api-augment": 10.7.3 + "@polkadot/api-base": 10.7.3 + "@polkadot/rpc-core": 10.7.3 + "@polkadot/types": 10.7.3 + "@polkadot/types-codec": 10.7.3 + "@polkadot/util": ^12.2.1 + "@polkadot/util-crypto": ^12.2.1 + rxjs: ^7.8.1 + tslib: ^2.5.2 + checksum: 61f0f6d85a4deb744747d7f2a0ae5e4a69ef29e823ae6819f1afb3e8ff2a7f93a40afec085531cda98039310fdfab24529408dcd04c3706e778c6a977ec84d74 languageName: node linkType: hard -"@polkadot/keyring@npm:^11.0.0, @polkadot/keyring@npm:^11.1.3": - version: 11.1.3 - resolution: "@polkadot/keyring@npm:11.1.3" +"@polkadot/api@npm:10.7.3, @polkadot/api@npm:^10.4.0": + version: 10.7.3 + resolution: "@polkadot/api@npm:10.7.3" dependencies: - "@polkadot/util": 11.1.3 - "@polkadot/util-crypto": 11.1.3 + "@polkadot/api-augment": 10.7.3 + "@polkadot/api-base": 10.7.3 + "@polkadot/api-derive": 10.7.3 + "@polkadot/keyring": ^12.2.1 + "@polkadot/rpc-augment": 10.7.3 + "@polkadot/rpc-core": 10.7.3 + "@polkadot/rpc-provider": 10.7.3 + "@polkadot/types": 10.7.3 + "@polkadot/types-augment": 10.7.3 + "@polkadot/types-codec": 10.7.3 + "@polkadot/types-create": 10.7.3 + "@polkadot/types-known": 10.7.3 + "@polkadot/util": ^12.2.1 + "@polkadot/util-crypto": ^12.2.1 + eventemitter3: ^5.0.1 + rxjs: ^7.8.1 + tslib: ^2.5.2 + checksum: f1080ceec0ea5ac91cf32972e15e3c91be348b603fbc6ce8ec58a145fd65efa183090e792c4e4def406704afa55992b86ee4ad9a41a238ae69d7e3dd7db4f08e + languageName: node + linkType: hard + +"@polkadot/keyring@npm:^12.0.0, @polkadot/keyring@npm:^12.2.1": + version: 12.2.1 + resolution: "@polkadot/keyring@npm:12.2.1" + dependencies: + "@polkadot/util": 12.2.1 + "@polkadot/util-crypto": 12.2.1 tslib: ^2.5.0 peerDependencies: - "@polkadot/util": 11.1.3 - "@polkadot/util-crypto": 11.1.3 - checksum: 8bc7af976cf7b4bcbac16032f82d0f827679092037ccee17b1e403f06e423ba0fe999903095868af974f370f1f147442d14ed2696c45570b204deb065c64b52a + "@polkadot/util": 12.2.1 + "@polkadot/util-crypto": 12.2.1 + checksum: 8f637cdec89ee66964f0017c26330dac734779b0eb60611ee01d292d99fb6de7b31c7c1054e1214c27c7f2edb65d5b17fcdb36348e556282efa33445630a77a7 languageName: node linkType: hard -"@polkadot/networks@npm:11.1.3, @polkadot/networks@npm:^11.1.3": - version: 11.1.3 - resolution: "@polkadot/networks@npm:11.1.3" +"@polkadot/networks@npm:12.2.1, @polkadot/networks@npm:^12.2.1": + version: 12.2.1 + resolution: "@polkadot/networks@npm:12.2.1" dependencies: - "@polkadot/util": 11.1.3 - "@substrate/ss58-registry": ^1.39.0 + "@polkadot/util": 12.2.1 + "@substrate/ss58-registry": ^1.40.0 tslib: ^2.5.0 - checksum: cbd408d700c5033081bac0ef2d6b3ca222b92d4d7812d920ed12871602d2deba5ff4aa80a25764fb702c968eb217d251d5bdcd59cf31c8a2bf2787a908e572a4 + checksum: e3005a5c5045633784ffcf0dda91eb4aeab92dba30a255315743b2d49145c5b5c30edd1e997ecdb0c096d2423e1665fe44ad2c79be054b371a89bafdf2247950 languageName: node linkType: hard -"@polkadot/rpc-augment@npm:10.3.2": - version: 10.3.2 - resolution: "@polkadot/rpc-augment@npm:10.3.2" +"@polkadot/rpc-augment@npm:10.7.3": + version: 10.7.3 + resolution: "@polkadot/rpc-augment@npm:10.7.3" dependencies: - "@polkadot/rpc-core": 10.3.2 - "@polkadot/types": 10.3.2 - "@polkadot/types-codec": 10.3.2 - "@polkadot/util": ^11.1.3 - tslib: ^2.5.0 - checksum: 0367bcc791ef8041a89804b971cac59d9cbd6b73964ee64fdf8e5acd74a2703ef1f69a20bd5199102683cdd4936a0a40e8a06c941d49e1808a463de311d0f816 + "@polkadot/rpc-core": 10.7.3 + "@polkadot/types": 10.7.3 + "@polkadot/types-codec": 10.7.3 + "@polkadot/util": ^12.2.1 + tslib: ^2.5.2 + checksum: cfd96ab3823197cb1f0dba5da767683114b300fd5b2bfe6c2b10245ba8fe0616f42795a4fa524c9de990d23e65b82207b7c7ecf7cb99208802c675deb676f35d languageName: node linkType: hard -"@polkadot/rpc-core@npm:10.3.2": - version: 10.3.2 - resolution: "@polkadot/rpc-core@npm:10.3.2" +"@polkadot/rpc-core@npm:10.7.3": + version: 10.7.3 + resolution: "@polkadot/rpc-core@npm:10.7.3" dependencies: - "@polkadot/rpc-augment": 10.3.2 - "@polkadot/rpc-provider": 10.3.2 - "@polkadot/types": 10.3.2 - "@polkadot/util": ^11.1.3 - rxjs: ^7.8.0 - tslib: ^2.5.0 - checksum: aaf6e0bb9bc31ddcf2f92bc38bb761cfb1d0fbf4c73dac0863d9df561bec90fd254d9c93ff99570394f7ecfd5e4792cd197865409097987ca57985ab8dea3024 + "@polkadot/rpc-augment": 10.7.3 + "@polkadot/rpc-provider": 10.7.3 + "@polkadot/types": 10.7.3 + "@polkadot/util": ^12.2.1 + rxjs: ^7.8.1 + tslib: ^2.5.2 + checksum: 1dfc37686070372a132a6651b44d5dc031de51370f68db5ddcd256c346e5e8d718a89ba67e53d490a50aa8f00daf8098a7db714bed13d3dfba0c7868c8544aa9 languageName: node linkType: hard -"@polkadot/rpc-provider@npm:10.3.2": - version: 10.3.2 - resolution: "@polkadot/rpc-provider@npm:10.3.2" +"@polkadot/rpc-provider@npm:10.7.3": + version: 10.7.3 + resolution: "@polkadot/rpc-provider@npm:10.7.3" dependencies: - "@polkadot/keyring": ^11.1.3 - "@polkadot/types": 10.3.2 - "@polkadot/types-support": 10.3.2 - "@polkadot/util": ^11.1.3 - "@polkadot/util-crypto": ^11.1.3 - "@polkadot/x-fetch": ^11.1.3 - "@polkadot/x-global": ^11.1.3 - "@polkadot/x-ws": ^11.1.3 - "@substrate/connect": 0.7.23 - eventemitter3: ^5.0.0 + "@polkadot/keyring": ^12.2.1 + "@polkadot/types": 10.7.3 + "@polkadot/types-support": 10.7.3 + "@polkadot/util": ^12.2.1 + "@polkadot/util-crypto": ^12.2.1 + "@polkadot/x-fetch": ^12.2.1 + "@polkadot/x-global": ^12.2.1 + "@polkadot/x-ws": ^12.2.1 + "@substrate/connect": 0.7.26 + eventemitter3: ^5.0.1 mock-socket: ^9.2.1 - nock: ^13.3.0 - tslib: ^2.5.0 + nock: ^13.3.1 + tslib: ^2.5.2 dependenciesMeta: "@substrate/connect": optional: true - checksum: 781db842aa01a8b559f95db5f940df43680198fa60c9e0f4ab5544a66f7ed351f7a849fb913e1bcd82a2cfb2fdd6b99e34ddeae0a2cec68821bd90a71faad8c1 - languageName: node - linkType: hard - -"@polkadot/typegen@npm:^10.0.0": - version: 10.3.2 - resolution: "@polkadot/typegen@npm:10.3.2" - dependencies: - "@polkadot/api": 10.3.2 - "@polkadot/api-augment": 10.3.2 - "@polkadot/rpc-augment": 10.3.2 - "@polkadot/rpc-provider": 10.3.2 - "@polkadot/types": 10.3.2 - "@polkadot/types-augment": 10.3.2 - "@polkadot/types-codec": 10.3.2 - "@polkadot/types-create": 10.3.2 - "@polkadot/types-support": 10.3.2 - "@polkadot/util": ^11.1.3 - "@polkadot/util-crypto": ^11.1.3 - "@polkadot/x-ws": ^11.1.3 + checksum: e4c2987bab30a3f5693f6a3381e45dc13c638d438a38bf9b098cb7cf879f279ca8a0f5f070faf59472d00fda3d72470a6abaddf855fb60b221f77dc775a13505 + languageName: node + linkType: hard + +"@polkadot/typegen@npm:^10.4.0": + version: 10.7.3 + resolution: "@polkadot/typegen@npm:10.7.3" + dependencies: + "@polkadot/api": 10.7.3 + "@polkadot/api-augment": 10.7.3 + "@polkadot/rpc-augment": 10.7.3 + "@polkadot/rpc-provider": 10.7.3 + "@polkadot/types": 10.7.3 + "@polkadot/types-augment": 10.7.3 + "@polkadot/types-codec": 10.7.3 + "@polkadot/types-create": 10.7.3 + "@polkadot/types-support": 10.7.3 + "@polkadot/util": ^12.2.1 + "@polkadot/util-crypto": ^12.2.1 + "@polkadot/x-ws": ^12.2.1 handlebars: ^4.7.7 - tslib: ^2.5.0 - yargs: ^17.7.1 + tslib: ^2.5.2 + yargs: ^17.7.2 bin: polkadot-types-chain-info: scripts/polkadot-types-chain-info.mjs polkadot-types-from-chain: scripts/polkadot-types-from-chain.mjs polkadot-types-from-defs: scripts/polkadot-types-from-defs.mjs polkadot-types-internal-interfaces: scripts/polkadot-types-internal-interfaces.mjs polkadot-types-internal-metadata: scripts/polkadot-types-internal-metadata.mjs - checksum: 7f4eb29935d8e20579c16deabdbcb1a40ef531d1d33031dd21421d3700fb0bfa47c9f08fd167e2f3c1201e160651497752c4c4e3227aa2aab9e65bd9e4e50fad + checksum: 12179641d4e68d1918e9accf1f7fb2bf08eed617722456cf6c3c246711e389db4909a91783f9a9440d2887594b7e637cb0ee712e5ad715430c33adbcd57d6ae6 languageName: node linkType: hard -"@polkadot/types-augment@npm:10.3.2": - version: 10.3.2 - resolution: "@polkadot/types-augment@npm:10.3.2" +"@polkadot/types-augment@npm:10.7.3": + version: 10.7.3 + resolution: "@polkadot/types-augment@npm:10.7.3" dependencies: - "@polkadot/types": 10.3.2 - "@polkadot/types-codec": 10.3.2 - "@polkadot/util": ^11.1.3 - tslib: ^2.5.0 - checksum: d3e7c2ea538e57a707da4566ba4d9b5110a8b55aebb98154e37d42b8428cd59a3facafe6f759f85968a3f739a2f38f4b81984330ddc0aa0f219b21028ac3ef7f + "@polkadot/types": 10.7.3 + "@polkadot/types-codec": 10.7.3 + "@polkadot/util": ^12.2.1 + tslib: ^2.5.2 + checksum: 183323bc82d169a2de094039d498044fd6cfb66ad222f149d68d9ff45491c73954dc790fccb154f2820dfab8df685681d0f6116a6daaa2d4d947e0bce9dee821 languageName: node linkType: hard -"@polkadot/types-codec@npm:10.3.2, @polkadot/types-codec@npm:^10.0.0": - version: 10.3.2 - resolution: "@polkadot/types-codec@npm:10.3.2" +"@polkadot/types-codec@npm:10.7.3, @polkadot/types-codec@npm:^10.4.0": + version: 10.7.3 + resolution: "@polkadot/types-codec@npm:10.7.3" dependencies: - "@polkadot/util": ^11.1.3 - "@polkadot/x-bigint": ^11.1.3 - tslib: ^2.5.0 - checksum: fa7f2b7236d18ce3adfffdf5e18a359ee78f12a370f7de1938d2a26a1d8f0e8cb2a3431d866ea3a6b01c155dad68770c49269e0542b98ea26d2481b9b9dca0af + "@polkadot/util": ^12.2.1 + "@polkadot/x-bigint": ^12.2.1 + tslib: ^2.5.2 + checksum: 4656e5a8104ea49276803f67f5687deb115e9880732dee00f470d54964a9de2a1c651c76363032db909cf559f3c32488e6cdd2f7a5eeb473896a68c0d45bc4f4 languageName: node linkType: hard -"@polkadot/types-create@npm:10.3.2": - version: 10.3.2 - resolution: "@polkadot/types-create@npm:10.3.2" +"@polkadot/types-create@npm:10.7.3": + version: 10.7.3 + resolution: "@polkadot/types-create@npm:10.7.3" dependencies: - "@polkadot/types-codec": 10.3.2 - "@polkadot/util": ^11.1.3 - tslib: ^2.5.0 - checksum: 680eb8f817901f79091943064e9f6b6a0819939c53ce6a85328622201017db6eaf6236bc03389c2b4ceb7988abb158f64b72e081a47b77f957a7a2b1826569d1 + "@polkadot/types-codec": 10.7.3 + "@polkadot/util": ^12.2.1 + tslib: ^2.5.2 + checksum: 231c70e410fadfd264c03d03a5e4f9921b616796f7b8bffcbc18076bf1c818539f65cf307a4ad715b8e33c54a4838ecef268052460f9c3672dfe9ddcb76e8f10 languageName: node linkType: hard -"@polkadot/types-known@npm:10.3.2": - version: 10.3.2 - resolution: "@polkadot/types-known@npm:10.3.2" +"@polkadot/types-known@npm:10.7.3": + version: 10.7.3 + resolution: "@polkadot/types-known@npm:10.7.3" dependencies: - "@polkadot/networks": ^11.1.3 - "@polkadot/types": 10.3.2 - "@polkadot/types-codec": 10.3.2 - "@polkadot/types-create": 10.3.2 - "@polkadot/util": ^11.1.3 - tslib: ^2.5.0 - checksum: f4d5f265e9a5efbe4bd373c186872ff2e49be3b04efc7f9049eb219b68dcbdfaf48fdd49eedc669b4f0b47f8534d4ecd923dc2cbf3303ba5f43b7b7479e1b7f6 + "@polkadot/networks": ^12.2.1 + "@polkadot/types": 10.7.3 + "@polkadot/types-codec": 10.7.3 + "@polkadot/types-create": 10.7.3 + "@polkadot/util": ^12.2.1 + tslib: ^2.5.2 + checksum: 86e05b5d6407f76db27e2d2756225eb7ffc45ce3dc2fc2bdf16c33e88488ccabc282b45583a4d797ca20e6e412f81f82697960fe3249d1faa4001c5925ef0a9a languageName: node linkType: hard -"@polkadot/types-support@npm:10.3.2": - version: 10.3.2 - resolution: "@polkadot/types-support@npm:10.3.2" +"@polkadot/types-support@npm:10.7.3": + version: 10.7.3 + resolution: "@polkadot/types-support@npm:10.7.3" dependencies: - "@polkadot/util": ^11.1.3 - tslib: ^2.5.0 - checksum: 6c5c6ba7c585efd04543a1565f7f55b0137f74915afe6c58e4666da7405fac9e33edef0fca418a9d948e8cc820b1197a3c5973495ee90045d233fa5d0c390cfd + "@polkadot/util": ^12.2.1 + tslib: ^2.5.2 + checksum: 2ad88346a5c38479cdda318950be3f1f559060df23786c4f93048d4935586bfe7e96faea36b3f40168eb7380d78c4c96a7a08ff450b60bfe1146f4bcd26af531 languageName: node linkType: hard -"@polkadot/types@npm:10.3.2, @polkadot/types@npm:^10.0.0": - version: 10.3.2 - resolution: "@polkadot/types@npm:10.3.2" +"@polkadot/types@npm:10.7.3, @polkadot/types@npm:^10.4.0": + version: 10.7.3 + resolution: "@polkadot/types@npm:10.7.3" dependencies: - "@polkadot/keyring": ^11.1.3 - "@polkadot/types-augment": 10.3.2 - "@polkadot/types-codec": 10.3.2 - "@polkadot/types-create": 10.3.2 - "@polkadot/util": ^11.1.3 - "@polkadot/util-crypto": ^11.1.3 - rxjs: ^7.8.0 - tslib: ^2.5.0 - checksum: 16d40abf8e442a836981eab92d7d13dfd6020ec4821d9ec60d2c8d37defb586ada59039e7800477565be8d7ced6f73cfdb40d7bfa2a331e83d95f9467255c72b + "@polkadot/keyring": ^12.2.1 + "@polkadot/types-augment": 10.7.3 + "@polkadot/types-codec": 10.7.3 + "@polkadot/types-create": 10.7.3 + "@polkadot/util": ^12.2.1 + "@polkadot/util-crypto": ^12.2.1 + rxjs: ^7.8.1 + tslib: ^2.5.2 + checksum: 6ab5393ce7998de88c2206f01ebed7bb28f2ff08bf1eea6ff3d8dc04f1c8ba6f0a68cef10bc39fb8a76cc444f8bb9e5bfe61b63225e3bd9693785c8222f294cc languageName: node linkType: hard -"@polkadot/util-crypto@npm:11.1.3, @polkadot/util-crypto@npm:^11.0.0, @polkadot/util-crypto@npm:^11.1.3": - version: 11.1.3 - resolution: "@polkadot/util-crypto@npm:11.1.3" +"@polkadot/util-crypto@npm:12.2.1, @polkadot/util-crypto@npm:^12.0.0, @polkadot/util-crypto@npm:^12.2.1": + version: 12.2.1 + resolution: "@polkadot/util-crypto@npm:12.2.1" dependencies: + "@noble/curves": 1.0.0 "@noble/hashes": 1.3.0 - "@noble/secp256k1": 1.7.1 - "@polkadot/networks": 11.1.3 - "@polkadot/util": 11.1.3 - "@polkadot/wasm-crypto": ^7.0.3 - "@polkadot/x-bigint": 11.1.3 - "@polkadot/x-randomvalues": 11.1.3 + "@polkadot/networks": 12.2.1 + "@polkadot/util": 12.2.1 + "@polkadot/wasm-crypto": ^7.2.1 + "@polkadot/wasm-util": ^7.2.1 + "@polkadot/x-bigint": 12.2.1 + "@polkadot/x-randomvalues": 12.2.1 "@scure/base": 1.1.1 tslib: ^2.5.0 - tweetnacl: ^1.0.3 peerDependencies: - "@polkadot/util": 11.1.3 - checksum: 77ca5c50d1e4835d20f77a2e98c261114628762952c0ef887312f64480b86a714da8598cc5a419bb983b027276db4df8d1fe6a3c106a23bce9263520ac4aa7ae + "@polkadot/util": 12.2.1 + checksum: d999d791b8b4d5834dec6de6a1e957482211d11753a27b112eaeb0a59a4502fcd85ad8fbcc46e55609d6d797de6cec78af0f90983b33898b63506ff2f9167f90 languageName: node linkType: hard -"@polkadot/util@npm:11.1.3, @polkadot/util@npm:^11.0.0, @polkadot/util@npm:^11.1.3": - version: 11.1.3 - resolution: "@polkadot/util@npm:11.1.3" +"@polkadot/util@npm:12.2.1, @polkadot/util@npm:^12.0.0, @polkadot/util@npm:^12.2.1": + version: 12.2.1 + resolution: "@polkadot/util@npm:12.2.1" dependencies: - "@polkadot/x-bigint": 11.1.3 - "@polkadot/x-global": 11.1.3 - "@polkadot/x-textdecoder": 11.1.3 - "@polkadot/x-textencoder": 11.1.3 + "@polkadot/x-bigint": 12.2.1 + "@polkadot/x-global": 12.2.1 + "@polkadot/x-textdecoder": 12.2.1 + "@polkadot/x-textencoder": 12.2.1 "@types/bn.js": ^5.1.1 bn.js: ^5.2.1 tslib: ^2.5.0 - checksum: 69c5083c65ea4c4f186e08a3ddbae50111309bdec7908487516eceb93e218d470156d26d2dfbb17713423ff32c4995f994cc10317c22d6fa7202d5d722549908 + checksum: 850f0c82ee9a76f2b3da78cd5d37568a045ee0b5da25f491f275290843b460eb383dc3c9058918522bf09f0c0e1acca67445ee49615c557e94f14c392048be40 languageName: node linkType: hard -"@polkadot/wasm-bridge@npm:7.0.3": - version: 7.0.3 - resolution: "@polkadot/wasm-bridge@npm:7.0.3" +"@polkadot/wasm-bridge@npm:7.2.1": + version: 7.2.1 + resolution: "@polkadot/wasm-bridge@npm:7.2.1" dependencies: + "@polkadot/wasm-util": 7.2.1 tslib: ^2.5.0 peerDependencies: "@polkadot/util": "*" "@polkadot/x-randomvalues": "*" - checksum: 9603e0bfca80e0fbe1192783653c095990d34e4eb0b187f8fedd97abaeee4a3147e4f5e66e910b63f024030b0e7e21aedf118c0c58407a4464837ca7f2355809 + checksum: 6f4d255665f6c1552df9abcf8e99ee36b220c446c74e4da7ac21f3c578c3736695db41e816ef83226d98231c535df8daea6d2266c3090bdd8e7609fa87447de9 languageName: node linkType: hard -"@polkadot/wasm-crypto-asmjs@npm:7.0.3": - version: 7.0.3 - resolution: "@polkadot/wasm-crypto-asmjs@npm:7.0.3" +"@polkadot/wasm-crypto-asmjs@npm:7.2.1": + version: 7.2.1 + resolution: "@polkadot/wasm-crypto-asmjs@npm:7.2.1" dependencies: tslib: ^2.5.0 peerDependencies: "@polkadot/util": "*" - checksum: 6f819ba35612c475b3b14f286efa432086bdb9599ddb034c1abf448f0ad6e376ae81bac0ad4984564f6d5f82691ed5c4b74735ebc75dfdecf8f96f2e4bfcd5a3 + checksum: 9d7f2ac6f73cc2ed390941a35426763c73e6f20374eb11ed60b880a6f716c2773cb1fe1cddb9416ab669c75b25b7d99be25c8c91886bb676d6faf9b4658f8fd7 languageName: node linkType: hard -"@polkadot/wasm-crypto-init@npm:7.0.3": - version: 7.0.3 - resolution: "@polkadot/wasm-crypto-init@npm:7.0.3" +"@polkadot/wasm-crypto-init@npm:7.2.1": + version: 7.2.1 + resolution: "@polkadot/wasm-crypto-init@npm:7.2.1" dependencies: - "@polkadot/wasm-bridge": 7.0.3 - "@polkadot/wasm-crypto-asmjs": 7.0.3 - "@polkadot/wasm-crypto-wasm": 7.0.3 + "@polkadot/wasm-bridge": 7.2.1 + "@polkadot/wasm-crypto-asmjs": 7.2.1 + "@polkadot/wasm-crypto-wasm": 7.2.1 + "@polkadot/wasm-util": 7.2.1 tslib: ^2.5.0 peerDependencies: "@polkadot/util": "*" "@polkadot/x-randomvalues": "*" - checksum: ee5957c0b2297e58d913e59a5eecde10c8272a2bfc6e072e669ee8ada0105444f8d9cae535948849406fd696941620094daea12cc2950e18a0439d7fba2e19d8 + checksum: 97105a9e846e97d9d678526e5dd1b491cd71e705c759a8ace9e0e9a54aa045b2b512bdcdd524ea6684963b6cb0fc0a44043d2198bc680c893e1feaaf4d860e76 languageName: node linkType: hard -"@polkadot/wasm-crypto-wasm@npm:7.0.3": - version: 7.0.3 - resolution: "@polkadot/wasm-crypto-wasm@npm:7.0.3" +"@polkadot/wasm-crypto-wasm@npm:7.2.1": + version: 7.2.1 + resolution: "@polkadot/wasm-crypto-wasm@npm:7.2.1" dependencies: - "@polkadot/wasm-util": 7.0.3 + "@polkadot/wasm-util": 7.2.1 tslib: ^2.5.0 peerDependencies: "@polkadot/util": "*" - checksum: ef9e6e88e066762e3803b8b0f4276035b835b2eaab86c53f004f977073442b6e51d7baf4c7bc308913c091975056c1b64ef1c00085e31f9988e12155b24111fb + checksum: f000fab2fc682a4d4d2029b483701a64091b9be0d75df82f3337a48d65ffdac8d76c828f46810cb5aae6b9ec77bdf3963ae8b8668106ea9e5c0c19f57637655d languageName: node linkType: hard -"@polkadot/wasm-crypto@npm:^7.0.3": - version: 7.0.3 - resolution: "@polkadot/wasm-crypto@npm:7.0.3" +"@polkadot/wasm-crypto@npm:^7.2.1": + version: 7.2.1 + resolution: "@polkadot/wasm-crypto@npm:7.2.1" dependencies: - "@polkadot/wasm-bridge": 7.0.3 - "@polkadot/wasm-crypto-asmjs": 7.0.3 - "@polkadot/wasm-crypto-init": 7.0.3 - "@polkadot/wasm-crypto-wasm": 7.0.3 - "@polkadot/wasm-util": 7.0.3 + "@polkadot/wasm-bridge": 7.2.1 + "@polkadot/wasm-crypto-asmjs": 7.2.1 + "@polkadot/wasm-crypto-init": 7.2.1 + "@polkadot/wasm-crypto-wasm": 7.2.1 + "@polkadot/wasm-util": 7.2.1 tslib: ^2.5.0 peerDependencies: "@polkadot/util": "*" "@polkadot/x-randomvalues": "*" - checksum: e63fefca98685ea5ef488304e5aa7c30b1c483d7f633cda1efebfc95f8255faaf62fbaba439d81e57fadc11e53d3033a5b71272742cbdc0207f4ba617dba8123 + checksum: f42f2bc34cf76d1438893f72a233080196c9a95dd3c53444f582150c7f56b75c80b8b8b9b4a3d9015438a6f7438c6e40def46b1fe7ce3a367bcd280f2bf29c98 languageName: node linkType: hard -"@polkadot/wasm-util@npm:7.0.3": - version: 7.0.3 - resolution: "@polkadot/wasm-util@npm:7.0.3" +"@polkadot/wasm-util@npm:7.2.1, @polkadot/wasm-util@npm:^7.2.1": + version: 7.2.1 + resolution: "@polkadot/wasm-util@npm:7.2.1" dependencies: tslib: ^2.5.0 peerDependencies: "@polkadot/util": "*" - checksum: b20414290bbc9f67523c5180345f20ea8ef6244c90768936e0a25cce642448b086374869b99e6f2f7c071c0dea318ac9fb9761b8efefdeb24b75828c5d8bec3d + checksum: 8df30296664807c27b01d37a3e9f124fdc22aef61e633b1a538a7c533f485a2aa756c43e67aac8d0c8383273432783b78e5528c5bc1ffcf508e7faaa5009e618 languageName: node linkType: hard -"@polkadot/x-bigint@npm:11.1.3, @polkadot/x-bigint@npm:^11.1.3": - version: 11.1.3 - resolution: "@polkadot/x-bigint@npm:11.1.3" +"@polkadot/x-bigint@npm:12.2.1, @polkadot/x-bigint@npm:^12.2.1": + version: 12.2.1 + resolution: "@polkadot/x-bigint@npm:12.2.1" dependencies: - "@polkadot/x-global": 11.1.3 + "@polkadot/x-global": 12.2.1 tslib: ^2.5.0 - checksum: e7d72b8bb1fafb0db8cfc66e5a8fff4559d0c6f6d60f29ed554ea6c278c0438cf0f1d1a87556e364d86675c821658b791df75b3072dcdea40c6cb0049d462833 + checksum: 2e1603f576654876e38e84bbea16d6206cfad58b58de0ab70bd9a5e86a20e903cae3e271f4b247f3d9fbecbe8475f40866c0bbacb7700c01be732f9b85ec6d81 languageName: node linkType: hard -"@polkadot/x-fetch@npm:^11.1.3": - version: 11.1.3 - resolution: "@polkadot/x-fetch@npm:11.1.3" +"@polkadot/x-fetch@npm:^12.2.1": + version: 12.2.1 + resolution: "@polkadot/x-fetch@npm:12.2.1" dependencies: - "@polkadot/x-global": 11.1.3 + "@polkadot/x-global": 12.2.1 node-fetch: ^3.3.1 tslib: ^2.5.0 - checksum: b0a5d28c6197b063fbb956d0a4aa7eabe89fc3be2ceeeaff8b85a657d957245180847127de2c332d1db3be7a3f0d59b0f0efdc71cb7bf50e526561e7b261f7c9 + checksum: 55650b38ff9a119dbcc22e9c040376859e1716b9e9d955501feeee9e16f5814467a5bfeb5f34c0d3a62d39a36d51aa65defaa7e0401c36c440adacbf2302fd10 languageName: node linkType: hard -"@polkadot/x-global@npm:11.1.3, @polkadot/x-global@npm:^11.1.3": - version: 11.1.3 - resolution: "@polkadot/x-global@npm:11.1.3" +"@polkadot/x-global@npm:12.2.1, @polkadot/x-global@npm:^12.2.1": + version: 12.2.1 + resolution: "@polkadot/x-global@npm:12.2.1" dependencies: tslib: ^2.5.0 - checksum: 997b843e519168e9b845f5e67129aef2673761f9398fe51015f717eb65cb9aa393836cc9d8ed70668b84a0e1a0a73f8cd6810beb638fed9c8a8b5c7ebeee8ab3 + checksum: 49b784d20014b86616ff6ad02bd8680b685d1a004ad91476cc4c3cd08ecdc4d50d98bc141a6dfc80411301147aac68a36a09ae338002772afa3a6a8fdcb8e672 languageName: node linkType: hard -"@polkadot/x-randomvalues@npm:11.1.3": - version: 11.1.3 - resolution: "@polkadot/x-randomvalues@npm:11.1.3" +"@polkadot/x-randomvalues@npm:12.2.1": + version: 12.2.1 + resolution: "@polkadot/x-randomvalues@npm:12.2.1" dependencies: - "@polkadot/x-global": 11.1.3 + "@polkadot/x-global": 12.2.1 tslib: ^2.5.0 - checksum: 2f0921ba0188827b42659083375d4bcf5b481433102238b436e43e006b07ae7fc2d96e41205b21ba5dca3f48c7ec5d1b8aa1da674cf0b7de2d459a125b48252c + peerDependencies: + "@polkadot/util": 12.2.1 + "@polkadot/wasm-util": "*" + checksum: c4d2dd9ed672221e58fc08a18a5876b4c680c6355297582851a41164d8fcfdedec88fabe16e23e62612e50963fef7e3cf4c250233487422d2c647b66547cfa5a languageName: node linkType: hard -"@polkadot/x-textdecoder@npm:11.1.3": - version: 11.1.3 - resolution: "@polkadot/x-textdecoder@npm:11.1.3" +"@polkadot/x-textdecoder@npm:12.2.1": + version: 12.2.1 + resolution: "@polkadot/x-textdecoder@npm:12.2.1" dependencies: - "@polkadot/x-global": 11.1.3 + "@polkadot/x-global": 12.2.1 tslib: ^2.5.0 - checksum: 6c049b2d8728771199072123392452441a7107a658261c42e2ee7389d76fed5467195e072069265153a12b039deaaf17fd72189688244e0c8c288b114b50e07f + checksum: 0e20a59e9bc7738c7ad8f5be082bd1e26269e9f5128868df86f13e7eee93e488eff642868009501b242fceed397ad577e42e6ab07caef3c813f930a60ad422a2 languageName: node linkType: hard -"@polkadot/x-textencoder@npm:11.1.3": - version: 11.1.3 - resolution: "@polkadot/x-textencoder@npm:11.1.3" +"@polkadot/x-textencoder@npm:12.2.1": + version: 12.2.1 + resolution: "@polkadot/x-textencoder@npm:12.2.1" dependencies: - "@polkadot/x-global": 11.1.3 + "@polkadot/x-global": 12.2.1 tslib: ^2.5.0 - checksum: 5263e8e48876da03afcaf0ed0859a64e201914fda4ae0f10c282b43283e0614c58381e5f20f86d09755a96b3960482ee39ce7a452ce32f2a2dcd2d04a6937402 + checksum: 61d14f5c998baf2e896487a89b0eb4dd884bc88a05aa7a716cfd872029883c26cd3b790c920061d7b190e9a13a2a4b2a9c5b19de516ef4d0c369e119f9da445d languageName: node linkType: hard -"@polkadot/x-ws@npm:^11.1.3": - version: 11.1.3 - resolution: "@polkadot/x-ws@npm:11.1.3" +"@polkadot/x-ws@npm:^12.2.1": + version: 12.2.1 + resolution: "@polkadot/x-ws@npm:12.2.1" dependencies: - "@polkadot/x-global": 11.1.3 + "@polkadot/x-global": 12.2.1 tslib: ^2.5.0 ws: ^8.13.0 - checksum: 17a5f7b732ad1da519e998a5ef4f183530dd66bcc41090e2666ddd9ca3f2c3f4ed3169da50e03fe4b3700b58019a4bbf5bcc0ba61fa6c041f8425d42d284060f + checksum: 9fb10693ee7317a3c34b0c66f7c9c5f24bb595818473686d9bf6ece0b8bb7ee11047585482ecdaa52770e52a53f2e306d1f6e769f68b3d9b65793aed72b34058 languageName: node linkType: hard @@ -2758,21 +2754,21 @@ __metadata: languageName: node linkType: hard -"@substrate/connect@npm:0.7.23": - version: 0.7.23 - resolution: "@substrate/connect@npm:0.7.23" +"@substrate/connect@npm:0.7.26": + version: 0.7.26 + resolution: "@substrate/connect@npm:0.7.26" dependencies: "@substrate/connect-extension-protocol": ^1.0.1 eventemitter3: ^4.0.7 - smoldot: 1.0.1 - checksum: 74ee49494455149f20427fdc0d2cdc8af4bc572e5a581f21109e47bacfc7cebaf77694dd8d5d4ef2d8ef4756b198fe4edd08d9bc8b6e3b647b085cbcac5b9fa2 + smoldot: 1.0.4 + checksum: 3179d241f073318d5973deb61c9c8d9b89ae28909a594b6b9fbcdfffd030a70ba58e8428eaa9d72484810bad10c93de1ad9c440b878d0fcfaaf4559d2e6f4502 languageName: node linkType: hard -"@substrate/ss58-registry@npm:^1.39.0": - version: 1.39.0 - resolution: "@substrate/ss58-registry@npm:1.39.0" - checksum: 1a16d1f637ea8c9a0cd2cabedb8731b81cafa1e979912a2183c2c670d680dc759136ad5f4183bef48359bd9f0a005f676e7ab78a4f076c19a2cf32974049a1f8 +"@substrate/ss58-registry@npm:^1.40.0": + version: 1.40.0 + resolution: "@substrate/ss58-registry@npm:1.40.0" + checksum: 474cb16b350e95fa7ca1020b70c6885c5c3d739472f506d175f24e9fd5a6d337d3c7e7a7fa44962199ed03fffb5d3b44b8af79a9811cb55ec34b3b75bb8e7f97 languageName: node linkType: hard @@ -3067,15 +3063,6 @@ __metadata: languageName: node linkType: hard -"@types/websocket@npm:^1.0.5": - version: 1.0.5 - resolution: "@types/websocket@npm:1.0.5" - dependencies: - "@types/node": "*" - checksum: 41c7a620f877a0165ff36e713455d888b7f5df9c51e71b5d0f47994f98cf22ccd339b8c6cfdc6bb417e950d40f405693974d393bd916971490553cc5e9e67a9d - languageName: node - linkType: hard - "@types/yargs-parser@npm:*": version: 21.0.0 resolution: "@types/yargs-parser@npm:21.0.0" @@ -4046,16 +4033,6 @@ __metadata: languageName: node linkType: hard -"bufferutil@npm:^4.0.1": - version: 4.0.6 - resolution: "bufferutil@npm:4.0.6" - dependencies: - node-gyp: latest - node-gyp-build: ^4.3.0 - checksum: dd107560947445280af7820c3d0534127b911577d85d537e1d7e0aa30fd634853cef8a994d6e8aed3d81388ab1a20257de776164afe6a6af8e78f5f17968ebd6 - languageName: node - linkType: hard - "buildcheck@npm:0.0.3": version: 0.0.3 resolution: "buildcheck@npm:0.0.3" @@ -4645,16 +4622,6 @@ __metadata: languageName: node linkType: hard -"d@npm:1, d@npm:^1.0.1": - version: 1.0.1 - resolution: "d@npm:1.0.1" - dependencies: - es5-ext: ^0.10.50 - type: ^1.0.1 - checksum: 49ca0639c7b822db670de93d4fbce44b4aa072cd848c76292c9978a8cd0fff1028763020ff4b0f147bd77bfe29b4c7f82e0f71ade76b2a06100543cdfd948d19 - languageName: node - linkType: hard - "dargs@npm:^7.0.0": version: 7.0.0 resolution: "dargs@npm:7.0.0" @@ -4692,7 +4659,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^2.2.0, debug@npm:^2.6.9": +"debug@npm:^2.6.9": version: 2.6.9 resolution: "debug@npm:2.6.9" dependencies: @@ -5074,38 +5041,6 @@ __metadata: languageName: node linkType: hard -"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.50": - version: 0.10.59 - resolution: "es5-ext@npm:0.10.59" - dependencies: - es6-iterator: ^2.0.3 - es6-symbol: ^3.1.3 - next-tick: ^1.1.0 - checksum: 3b931910d90eec2c5266f714fdef2e71b58ba3e9139d054ac0cb1c90db5b4a41989dd490885e037665450f1a4fb778b2ee8daccb6e1a5d9a07f853fd92018da6 - languageName: node - linkType: hard - -"es6-iterator@npm:^2.0.3": - version: 2.0.3 - resolution: "es6-iterator@npm:2.0.3" - dependencies: - d: 1 - es5-ext: ^0.10.35 - es6-symbol: ^3.1.1 - checksum: 6e48b1c2d962c21dee604b3d9f0bc3889f11ed5a8b33689155a2065d20e3107e2a69cc63a71bd125aeee3a589182f8bbcb5c8a05b6a8f38fa4205671b6d09697 - languageName: node - linkType: hard - -"es6-symbol@npm:^3.1.1, es6-symbol@npm:^3.1.3": - version: 3.1.3 - resolution: "es6-symbol@npm:3.1.3" - dependencies: - d: ^1.0.1 - ext: ^1.1.2 - checksum: cd49722c2a70f011eb02143ef1c8c70658d2660dead6641e160b94619f408b9cf66425515787ffe338affdf0285ad54f4eae30ea5bd510e33f8659ec53bcaa70 - languageName: node - linkType: hard - "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -5440,10 +5375,10 @@ __metadata: languageName: node linkType: hard -"eventemitter3@npm:^5.0.0": - version: 5.0.0 - resolution: "eventemitter3@npm:5.0.0" - checksum: b974bafbab860e0a5bbb21add4c4e82f9d5691c583c03f2e4c5d44a2d6c4556d79223621bdcfc6c8e14366a4af9df6b5ea9d6caf65fbffc80b66f3e1dceacbc9 +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 543d6c858ab699303c3c32e0f0f47fc64d360bf73c3daf0ac0b5079710e340d6fe9f15487f94e66c629f5f82cd1a8678d692f3dbb6f6fcd1190e1b97fcad36f8 languageName: node linkType: hard @@ -5490,15 +5425,6 @@ __metadata: languageName: node linkType: hard -"ext@npm:^1.1.2": - version: 1.6.0 - resolution: "ext@npm:1.6.0" - dependencies: - type: ^2.5.0 - checksum: ca3ef4619e838f441a92238a98b77ac873da2175ace746c64303ffe2c3208e79a3acf3bf7004e40b720f3c2a83bf0143e6dd4a7cdfae6e73f54a3bfc7a14b5c2 - languageName: node - linkType: hard - "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -7751,22 +7677,15 @@ fsevents@^2.3.2: languageName: node linkType: hard -"next-tick@npm:^1.1.0": - version: 1.1.0 - resolution: "next-tick@npm:1.1.0" - checksum: 83b5cf36027a53ee6d8b7f9c0782f2ba87f4858d977342bfc3c20c21629290a2111f8374d13a81221179603ffc4364f38374b5655d17b6a8f8a8c77bdea4fe8b - languageName: node - linkType: hard - -"nock@npm:^13.3.0": - version: 13.3.0 - resolution: "nock@npm:13.3.0" +"nock@npm:^13.3.1": + version: 13.3.1 + resolution: "nock@npm:13.3.1" dependencies: debug: ^4.1.0 json-stringify-safe: ^5.0.1 lodash: ^4.17.21 propagate: ^2.0.0 - checksum: 118d04e95a17f493898a82b5dfecc03762776e1980d9c3b2077479747e60b77109c5f7c0df969d1a8f6039260abe5961733553a5841f0f627bb35238576a0009 + checksum: 0f2a73e8432f6b5650656c53eef99f9e5bbde3df538dc2f07057edc4438cfc61a394c9d06dd82e60f6e86d42433f20f3c04364a1f088beee7bf03a24e3f0fdd0 languageName: node linkType: hard @@ -7802,17 +7721,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"node-gyp-build@npm:^4.3.0": - version: 4.3.0 - resolution: "node-gyp-build@npm:4.3.0" - bin: - node-gyp-build: bin.js - node-gyp-build-optional: optional.js - node-gyp-build-test: build-test.js - checksum: 1ecab16d9f275174d516e223f60f65ebe07540347d5c04a6a7d6921060b7f2e3af4f19463d9d1dcedc452e275c2ae71354a99405e55ebd5b655bb2f38025c728 - languageName: node - linkType: hard - "node-gyp@npm:latest": version: 9.0.0 resolution: "node-gyp@npm:9.0.0" @@ -8716,12 +8624,12 @@ fsevents@^2.3.2: languageName: node linkType: hard -"rxjs@npm:^7.8.0": - version: 7.8.0 - resolution: "rxjs@npm:7.8.0" +"rxjs@npm:^7.8.1": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" dependencies: tslib: ^2.1.0 - checksum: 61b4d4fd323c1043d8d6ceb91f24183b28bcf5def4f01ca111511d5c6b66755bc5578587fe714ef5d67cf4c9f2e26f4490d4e1d8cabf9bd5967687835e9866a2 + checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119 languageName: node linkType: hard @@ -8943,13 +8851,13 @@ fsevents@^2.3.2: languageName: node linkType: hard -"smoldot@npm:1.0.1": - version: 1.0.1 - resolution: "smoldot@npm:1.0.1" +"smoldot@npm:1.0.4": + version: 1.0.4 + resolution: "smoldot@npm:1.0.4" dependencies: pako: ^2.0.4 ws: ^8.8.1 - checksum: 161066f2f2aabb98c31ef84aa21a1e7c9301d391cc99c429eb589a31e4d4f848d9c51fe521ce2d7f977a9cf81d8e48d101e437e751479063e92e0d6e8ff30f47 + checksum: 81ecc38b98f7ac4dd093753e85956262608dca3c8a288c20a25fe1762a6afcdbe6f3622ea30a346df3f4145e0900ef0595e56e96e9e0de83c59f0649d1ab4786 languageName: node linkType: hard @@ -9658,10 +9566,10 @@ fsevents@^2.3.2: languageName: node linkType: hard -"tslib@npm:^2.1.0, tslib@npm:^2.5.0": - version: 2.5.0 - resolution: "tslib@npm:2.5.0" - checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 +"tslib@npm:^2.1.0, tslib@npm:^2.5.0, tslib@npm:^2.5.2": + version: 2.5.2 + resolution: "tslib@npm:2.5.2" + checksum: 4d3c1e238b94127ed0e88aa0380db3c2ddae581dc0f4bae5a982345e9f50ee5eda90835b8bfba99b02df10a5734470be197158c36f9129ac49fdc14a6a9da222 languageName: node linkType: hard @@ -9750,20 +9658,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"type@npm:^1.0.1": - version: 1.2.0 - resolution: "type@npm:1.2.0" - checksum: dae8c64f82c648b985caf321e9dd6e8b7f4f2e2d4f846fc6fd2c8e9dc7769382d8a52369ddbaccd59aeeceb0df7f52fb339c465be5f2e543e81e810e413451ee - languageName: node - linkType: hard - -"type@npm:^2.5.0": - version: 2.6.0 - resolution: "type@npm:2.6.0" - checksum: 80da01fcc0f6ed5a253dc326530e134000a8f66ea44b6d9687cde2f894f0d0b2486595b0cd040a64f7f79dc3120784236f8c9ef667a8aef03984e049b447cfb4 - languageName: node - linkType: hard - "typedarray-to-buffer@npm:^3.1.5": version: 3.1.5 resolution: "typedarray-to-buffer@npm:3.1.5" @@ -9937,16 +9831,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"utf-8-validate@npm:^5.0.2": - version: 5.0.9 - resolution: "utf-8-validate@npm:5.0.9" - dependencies: - node-gyp: latest - node-gyp-build: ^4.3.0 - checksum: 90117f1b65e0a1256c83dfad529983617263b622f2379745311d0438c7ea31db0d134ebd0dca84c3f5847a3560a3d249644e478a9109c616f63c7ea19cac53dc - languageName: node - linkType: hard - "util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -10164,20 +10048,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"websocket@npm:^1.0.34": - version: 1.0.34 - resolution: "websocket@npm:1.0.34" - dependencies: - bufferutil: ^4.0.1 - debug: ^2.2.0 - es5-ext: ^0.10.50 - typedarray-to-buffer: ^3.1.5 - utf-8-validate: ^5.0.2 - yaeti: ^0.0.6 - checksum: 8a0ce6d79cc1334bb6ea0d607f0092f3d32700b4dd19e4d5540f2a85f3b50e1f8110da0e4716737056584dde70bbebcb40bbd94bbb437d7468c71abfbfa077d8 - languageName: node - linkType: hard - "whatwg-encoding@npm:^1.0.5": version: 1.0.5 resolution: "whatwg-encoding@npm:1.0.5" @@ -10382,13 +10252,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"yaeti@npm:^0.0.6": - version: 0.0.6 - resolution: "yaeti@npm:0.0.6" - checksum: 6db12c152f7c363b80071086a3ebf5032e03332604eeda988872be50d6c8469e1f13316175544fa320f72edad696c2d83843ad0ff370659045c1a68bcecfcfea - languageName: node - linkType: hard - "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0" @@ -10461,9 +10324,9 @@ typescript@^4.8.3: languageName: node linkType: hard -"yargs@npm:^17.7.1": - version: 17.7.1 - resolution: "yargs@npm:17.7.1" +"yargs@npm:^17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" dependencies: cliui: ^8.0.1 escalade: ^3.1.1 @@ -10472,7 +10335,7 @@ typescript@^4.8.3: string-width: ^4.2.3 y18n: ^5.0.5 yargs-parser: ^21.1.1 - checksum: 3d8a43c336a4942bc68080768664aca85c7bd406f018bad362fd255c41c8f4e650277f42fd65d543fce99e084124ddafee7bbfc1a5c6a8fda4cec78609dcf8d4 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a languageName: node linkType: hard From 379726a09d755eff6a0ff6457f5f2f033bddbc13 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Thu, 1 Jun 2023 14:06:39 +0200 Subject: [PATCH 039/130] fix(deps): bump typedoc to resolve dependency conflict --- package.json | 2 +- tsconfig.docs.json | 1 - yarn.lock | 81 +++++++++++++++++++++++++--------------------- 3 files changed, 45 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index 10a704024..10fa100e9 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "testcontainers": "^9.0.0", "ts-jest": "^27.1.2", "ts-jest-resolver": "^2.0.0", - "typedoc": "^0.22.15", + "typedoc": "^0.23.0", "typescript": "^4.8.3" }, "version": "0.32.1-9", diff --git a/tsconfig.docs.json b/tsconfig.docs.json index 07250952d..3846cc96f 100644 --- a/tsconfig.docs.json +++ b/tsconfig.docs.json @@ -31,7 +31,6 @@ "excludePrivate": true, "hideGenerator": true, "name": "API Documentation", - "listInvalidSymbolLinks": true, "readme": "README.md" } } diff --git a/yarn.lock b/yarn.lock index 78ab88b4f..6e76cb4f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3575,6 +3575,13 @@ __metadata: languageName: node linkType: hard +"ansi-sequence-parser@npm:^1.1.0": + version: 1.1.0 + resolution: "ansi-sequence-parser@npm:1.1.0" + checksum: 75f4d3a4c555655a698aec05b5763cbddcd16ccccdbfd178fb0aa471ab74fdf98e031b875ef26e64be6a95cf970c89238744b26de6e34af97f316d5186b1df53 + languageName: node + linkType: hard + "ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" @@ -7088,10 +7095,10 @@ fsevents@^2.3.2: languageName: node linkType: hard -"jsonc-parser@npm:^3.0.0": - version: 3.0.0 - resolution: "jsonc-parser@npm:3.0.0" - checksum: 1df2326f1f9688de30c70ff19c5b2a83ba3b89a1036160da79821d1361090775e9db502dc57a67c11b56e1186fc1ed70b887f25c5febf9a3ec4f91435836c99d +"jsonc-parser@npm:^3.2.0": + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 languageName: node linkType: hard @@ -7408,12 +7415,12 @@ fsevents@^2.3.2: languageName: node linkType: hard -"marked@npm:^4.0.12": - version: 4.0.12 - resolution: "marked@npm:4.0.12" +"marked@npm:^4.2.12": + version: 4.3.0 + resolution: "marked@npm:4.3.0" bin: marked: bin/marked.js - checksum: 7575117f85a8986652f3ac8b8a7b95056c4c5fce01a1fc76dc4c7960412cb4c9bd9da8133487159b6b3ff84f52b543dfe9a36f826a5f358892b5ec4b6824f192 + checksum: 0db6817893952c3ec710eb9ceafb8468bf5ae38cb0f92b7b083baa13d70b19774674be04db5b817681fa7c5c6a088f61300815e4dd75a59696f4716ad69f6260 languageName: node linkType: hard @@ -7499,12 +7506,12 @@ fsevents@^2.3.2: languageName: node linkType: hard -"minimatch@npm:^5.0.1": - version: 5.0.1 - resolution: "minimatch@npm:5.0.1" +"minimatch@npm:^7.1.3": + version: 7.4.6 + resolution: "minimatch@npm:7.4.6" dependencies: brace-expansion: ^2.0.1 - checksum: b34b98463da4754bc526b244d680c69d4d6089451ebe512edaf6dd9eeed0279399cfa3edb19233513b8f830bf4bfcad911dddcdf125e75074100d52f724774f0 + checksum: 1a6c8d22618df9d2a88aabeef1de5622eb7b558e9f8010be791cb6b0fa6e102d39b11c28d75b855a1e377b12edc7db8ff12a99c20353441caa6a05e78deb5da9 languageName: node linkType: hard @@ -8610,7 +8617,7 @@ fsevents@^2.3.2: testcontainers: ^9.0.0 ts-jest: ^27.1.2 ts-jest-resolver: ^2.0.0 - typedoc: ^0.22.15 + typedoc: ^0.23.0 typescript: ^4.8.3 languageName: unknown linkType: soft @@ -8790,14 +8797,15 @@ fsevents@^2.3.2: languageName: node linkType: hard -"shiki@npm:^0.10.1": - version: 0.10.1 - resolution: "shiki@npm:0.10.1" +"shiki@npm:^0.14.1": + version: 0.14.2 + resolution: "shiki@npm:0.14.2" dependencies: - jsonc-parser: ^3.0.0 - vscode-oniguruma: ^1.6.1 - vscode-textmate: 5.2.0 - checksum: fb746f3cb3de7e545e3b10a6cb658d3938f840e4ccc9a3c90ceb7e69a8f89dbb432171faac1e9f02a03f103684dad88ee5e54b5c4964fa6b579fca6e8e26424d + ansi-sequence-parser: ^1.1.0 + jsonc-parser: ^3.2.0 + vscode-oniguruma: ^1.7.0 + vscode-textmate: ^8.0.0 + checksum: f2a14302b1803617e3ff1b751a5c87b4af4ad15214dc00e9215402e42940a84a0b956cf55d628f25dbf1296b18e277b8529571cd9359b971ac599a0ab11303e7 languageName: node linkType: hard @@ -9667,20 +9675,19 @@ fsevents@^2.3.2: languageName: node linkType: hard -"typedoc@npm:^0.22.15": - version: 0.22.15 - resolution: "typedoc@npm:0.22.15" +"typedoc@npm:^0.23.0": + version: 0.23.28 + resolution: "typedoc@npm:0.23.28" dependencies: - glob: ^7.2.0 lunr: ^2.3.9 - marked: ^4.0.12 - minimatch: ^5.0.1 - shiki: ^0.10.1 + marked: ^4.2.12 + minimatch: ^7.1.3 + shiki: ^0.14.1 peerDependencies: - typescript: 4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x bin: typedoc: bin/typedoc - checksum: 3f5f1cb9288bf811f42df59750c7062a026a23257b38dfe227515a30007a28e3d8139187949fcd19300fd6b2ef76bcdc4cf54549100bff3e000e61bb19958fb2 + checksum: 40eb4e207aac1b734e09400cf03f543642cc7b11000895198dd5a0d3166315759ccf4ac30a2915153597c5c186101c72bac2f1fc12b428184a9274d3a0e44c5e languageName: node linkType: hard @@ -9882,17 +9889,17 @@ typescript@^4.8.3: languageName: node linkType: hard -"vscode-oniguruma@npm:^1.6.1": - version: 1.6.2 - resolution: "vscode-oniguruma@npm:1.6.2" - checksum: 6b754acdafd5b68242ea5938bb00a32effc16c77f471d4f0f337d879d0e8e592622998e2441f42d9a7ff799c1593f31c11f26ca8d9bf9917e3ca881d3c1f3e19 +"vscode-oniguruma@npm:^1.7.0": + version: 1.7.0 + resolution: "vscode-oniguruma@npm:1.7.0" + checksum: 53519d91d90593e6fb080260892e87d447e9b200c4964d766772b5053f5699066539d92100f77f1302c91e8fc5d9c772fbe40fe4c90f3d411a96d5a9b1e63f42 languageName: node linkType: hard -"vscode-textmate@npm:5.2.0": - version: 5.2.0 - resolution: "vscode-textmate@npm:5.2.0" - checksum: 5449b42d451080f6f3649b66948f4b5ee4643c4e88cfe3558a3b31c84c78060cfdd288c4958c1690eaa5cd65d09992fa6b7c3bef9d4aa72b3651054a04624d20 +"vscode-textmate@npm:^8.0.0": + version: 8.0.0 + resolution: "vscode-textmate@npm:8.0.0" + checksum: 127780dfea89559d70b8326df6ec344cfd701312dd7f3f591a718693812b7852c30b6715e3cfc8b3200a4e2515b4c96f0843c0eacc0a3020969b5de262c2a4bb languageName: node linkType: hard From 4a103ebe1924796701f2e7212c42d4fc9484095b Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Thu, 1 Jun 2023 14:58:44 +0200 Subject: [PATCH 040/130] fix: set version script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 10fa100e9..bbab80556 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "publish": "yarn workspaces foreach -pt --no-private npm publish", "lint": "eslint packages --format=codeframe", "lint:fix": "yarn lint --fix", - "set:version": "yarn workspaces foreach -p exec npm version --no-git-tag-version", + "set:version": "npm version --no-git-tag-version --no-workspaces-update --workspaces --include-workspace-root", "style": "prettier -l packages", "style:fix": "yarn style --write", "test": "jest --coverage --group=unit", From fdb58a6612379d943ad47464f9a421163ca56cc2 Mon Sep 17 00:00:00 2001 From: Github Action Date: Thu, 1 Jun 2023 13:04:37 +0000 Subject: [PATCH 041/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index bbab80556..9978f2ee4 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.32.1-9", + "version": "0.32.1-10", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 53dc9fe51..52fc79a87 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.1-9", + "version": "0.32.1-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 2d77a2baa..d4b020569 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.1-9", + "version": "0.32.1-10", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 0df3513f9..d6efdfbbf 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.1-9", + "version": "0.32.1-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 668fc5a9e..dca957439 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.1-9", + "version": "0.32.1-10", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 612799363..850847fe9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.1-9", + "version": "0.32.1-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index baf42cfac..cd8a27343 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.1-9", + "version": "0.32.1-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 0ef37eae3..9b44c3e1d 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.1-9", + "version": "0.32.1-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 3959cd3fe..6437a7a67 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.1-9", + "version": "0.32.1-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 16a64783e..bed08347c 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.1-9", + "version": "0.32.1-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 4905cc1af..1d1f85677 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.1-9", + "version": "0.32.1-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 014fcc521..20f7095d9 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.1-9", + "version": "0.32.1-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index f074d5128..279dfc868 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.1-9", + "version": "0.32.1-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index ffbc0bbb3..dd7d1e5c5 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.1-9", + "version": "0.32.1-10", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 5befa74dc7d4bd6482f2298b61e0ac3727113182 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Thu, 1 Jun 2023 18:02:55 +0200 Subject: [PATCH 042/130] refactor: remove kilt dependencies from config package (#763) --- packages/config/package.json | 1 - packages/config/src/ConfigService.spec.ts | 10 ++++------ packages/config/src/ConfigService.ts | 7 ++++--- packages/utils/src/SDKErrors.ts | 9 --------- yarn.lock | 1 - 5 files changed, 8 insertions(+), 20 deletions(-) diff --git a/packages/config/package.json b/packages/config/package.json index dca957439..a85a5da04 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -37,7 +37,6 @@ }, "dependencies": { "@kiltprotocol/types": "workspace:*", - "@kiltprotocol/utils": "workspace:*", "@polkadot/api": "^10.4.0", "typescript-logging": "^1.0.0" } diff --git a/packages/config/src/ConfigService.spec.ts b/packages/config/src/ConfigService.spec.ts index ad30eeaad..f5069556b 100644 --- a/packages/config/src/ConfigService.spec.ts +++ b/packages/config/src/ConfigService.spec.ts @@ -13,8 +13,6 @@ import { ApiPromise, WsProvider } from '@polkadot/api' import { LogLevel, Logger } from 'typescript-logging' -import { SDKErrors } from '@kiltprotocol/utils' - import * as ConfigService from './ConfigService' describe('Log Configuration', () => { @@ -47,8 +45,8 @@ describe('Log Configuration', () => { describe('Configuration Service', () => { it('has configuration Object with default values', () => { expect(ConfigService.get('logLevel')).toEqual(LogLevel.Error) - expect(() => ConfigService.get('api')).toThrowError( - SDKErrors.BlockchainApiMissingError + expect(() => ConfigService.get('api')).toThrowErrorMatchingInlineSnapshot( + `"The blockchain API is not set. Did you forget to call \`Kilt.connect(…)\` or \`Kilt.init(…)\`?"` ) }) describe('set function for api instance, logLevel and any custom configuration prop', () => { @@ -70,8 +68,8 @@ describe('Configuration Service', () => { describe('get function for api instance, logLevel and any other injected configuration prop', () => { it('throws if api not set', () => { ConfigService.unset('api') - expect(() => ConfigService.get('api')).toThrowError( - SDKErrors.BlockchainApiMissingError + expect(() => ConfigService.get('api')).toThrowErrorMatchingInlineSnapshot( + `"The blockchain API is not set. Did you forget to call \`Kilt.connect(…)\` or \`Kilt.init(…)\`?"` ) }) it('returns logLevel property', () => { diff --git a/packages/config/src/ConfigService.ts b/packages/config/src/ConfigService.ts index c2244d431..d9e68b4a8 100644 --- a/packages/config/src/ConfigService.ts +++ b/packages/config/src/ConfigService.ts @@ -22,8 +22,7 @@ import { getLogControl, LogGroupControlSettings, } from 'typescript-logging' -import { SDKErrors } from '@kiltprotocol/utils' -import { SubscriptionPromise } from '@kiltprotocol/types' +import type { SubscriptionPromise } from '@kiltprotocol/types' const DEFAULT_DEBUG_LEVEL = typeof process !== 'undefined' && @@ -72,7 +71,9 @@ export function get(configOpt: K): configOpts[K] { if (typeof configuration[configOpt] === 'undefined') { switch (configOpt) { case 'api': - throw new SDKErrors.BlockchainApiMissingError() + throw new Error( + 'The blockchain API is not set. Did you forget to call `Kilt.connect(…)` or `Kilt.init(…)`?' + ) default: throw new Error(`GENERIC NOT CONFIGURED ERROR FOR KEY: "${configOpt}"`) } diff --git a/packages/utils/src/SDKErrors.ts b/packages/utils/src/SDKErrors.ts index 2ffe303e9..32dcb7814 100644 --- a/packages/utils/src/SDKErrors.ts +++ b/packages/utils/src/SDKErrors.ts @@ -171,15 +171,6 @@ export class IdentityMismatchError extends SDKError { } } -export class BlockchainApiMissingError extends SDKError { - constructor(options?: ErrorOptions) { - super( - 'The blockchain API is not set. Did you forget to call `Kilt.connect(…)` or `Kilt.init(…)`?', - options - ) - } -} - export class SubscriptionsNotSupportedError extends SDKError { constructor(options?: ErrorOptions) { super( diff --git a/yarn.lock b/yarn.lock index 6e76cb4f9..7b6fccb28 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1927,7 +1927,6 @@ __metadata: resolution: "@kiltprotocol/config@workspace:packages/config" dependencies: "@kiltprotocol/types": "workspace:*" - "@kiltprotocol/utils": "workspace:*" "@polkadot/api": ^10.4.0 rimraf: ^3.0.2 typescript: ^4.8.3 From 59af3e4d92431bb4decf1768ad15bccc0d258ea8 Mon Sep 17 00:00:00 2001 From: Github Action Date: Thu, 1 Jun 2023 16:09:26 +0000 Subject: [PATCH 043/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 9978f2ee4..c1cf04b88 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.32.1-10", + "version": "0.32.1-11", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 52fc79a87..c4e48c1bf 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.1-10", + "version": "0.32.1-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index d4b020569..4136c47da 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.1-10", + "version": "0.32.1-11", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index d6efdfbbf..ed8953791 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.1-10", + "version": "0.32.1-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index a85a5da04..6071c887c 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.1-10", + "version": "0.32.1-11", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 850847fe9..28029c5d0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.1-10", + "version": "0.32.1-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index cd8a27343..86d407547 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.1-10", + "version": "0.32.1-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 9b44c3e1d..de3cb78ed 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.1-10", + "version": "0.32.1-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 6437a7a67..98a02a80d 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.1-10", + "version": "0.32.1-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index bed08347c..5bc040fdd 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.1-10", + "version": "0.32.1-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 1d1f85677..7d91564ca 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.1-10", + "version": "0.32.1-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 20f7095d9..9e8788eef 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.1-10", + "version": "0.32.1-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 279dfc868..6c9d21626 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.1-10", + "version": "0.32.1-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index dd7d1e5c5..9205073ac 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.1-10", + "version": "0.32.1-11", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 36332102483a197fc034bae65b01727e9ee04bfd Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Thu, 1 Jun 2023 18:15:52 +0200 Subject: [PATCH 044/130] test: skip expensive delegation node tests --- packages/core/src/delegation/DelegationNode.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/delegation/DelegationNode.spec.ts b/packages/core/src/delegation/DelegationNode.spec.ts index e20ef60f9..f9bbaff8c 100644 --- a/packages/core/src/delegation/DelegationNode.spec.ts +++ b/packages/core/src/delegation/DelegationNode.spec.ts @@ -315,7 +315,7 @@ describe('DelegationNode', () => { expect(await nodes[hashList[0]].subtreeNodeCount()).toStrictEqual(100) }) - it('counts all subnodes in deeply nested structure (1000)', async () => { + it.skip('counts all subnodes in deeply nested structure (1000)', async () => { const lastIndex = 1000 nodes = hashList.slice(0, lastIndex + 1).reduce( (previous, current, index) => ({ @@ -335,7 +335,7 @@ describe('DelegationNode', () => { expect(await nodes[hashList[0]].subtreeNodeCount()).toStrictEqual(1000) }) - it('counts all subnodes in deeply nested structure (10000)', async () => { + it.skip('counts all subnodes in deeply nested structure (10000)', async () => { const lastIndex = 10000 nodes = hashList.slice(0, lastIndex + 1).reduce( (previous, current, index) => ({ From 6f0a2afa0240c6c01db5f50431f6df97d07b60b5 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Thu, 8 Jun 2023 12:14:24 +0200 Subject: [PATCH 045/130] chore: merge release branch back into develop --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/augment-api/src/interfaces/augment-types.ts | 10 +++++++++- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 15 files changed, 23 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index c1cf04b88..69f1489f3 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.32.1-11", + "version": "0.33.0", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index c4e48c1bf..d45398aaa 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.32.1-11", + "version": "0.33.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 4136c47da..5d780a331 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.32.1-11", + "version": "0.33.0", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/augment-api/src/interfaces/augment-types.ts b/packages/augment-api/src/interfaces/augment-types.ts index 9c3f3dd8a..85bb41fe3 100644 --- a/packages/augment-api/src/interfaces/augment-types.ts +++ b/packages/augment-api/src/interfaces/augment-types.ts @@ -35,13 +35,14 @@ import type { CreatedBlock, ImportedAux } from '@polkadot/types/interfaces/engin import type { BlockV0, BlockV1, BlockV2, EIP1559Transaction, EIP2930Transaction, EthAccessList, EthAccessListItem, EthAccount, EthAddress, EthBlock, EthBloom, EthCallRequest, EthFeeHistory, EthFilter, EthFilterAddress, EthFilterChanges, EthFilterTopic, EthFilterTopicEntry, EthFilterTopicInner, EthHeader, EthLog, EthReceipt, EthReceiptV0, EthReceiptV3, EthRichBlock, EthRichHeader, EthStorageProof, EthSubKind, EthSubParams, EthSubResult, EthSyncInfo, EthSyncStatus, EthTransaction, EthTransactionAction, EthTransactionCondition, EthTransactionRequest, EthTransactionSignature, EthTransactionStatus, EthWork, EthereumAccountId, EthereumAddress, EthereumLookupSource, EthereumSignature, LegacyTransaction, TransactionV0, TransactionV1, TransactionV2 } from '@polkadot/types/interfaces/eth'; import type { EvmAccount, EvmCallInfo, EvmCreateInfo, EvmLog, EvmVicinity, ExitError, ExitFatal, ExitReason, ExitRevert, ExitSucceed } from '@polkadot/types/interfaces/evm'; import type { AnySignature, EcdsaSignature, Ed25519Signature, Era, Extrinsic, ExtrinsicEra, ExtrinsicPayload, ExtrinsicPayloadUnknown, ExtrinsicPayloadV4, ExtrinsicSignature, ExtrinsicSignatureV4, ExtrinsicUnknown, ExtrinsicV4, ImmortalEra, MortalEra, MultiSignature, Signature, SignerPayload, Sr25519Signature } from '@polkadot/types/interfaces/extrinsics'; +import type { FungiblesAccessError } from '@polkadot/types/interfaces/fungibles'; import type { AssetOptions, Owner, PermissionLatest, PermissionVersions, PermissionsV1 } from '@polkadot/types/interfaces/genericAsset'; import type { ActiveGilt, ActiveGiltsTotal, ActiveIndex, GiltBid } from '@polkadot/types/interfaces/gilt'; import type { AuthorityIndex, AuthorityList, AuthoritySet, AuthoritySetChange, AuthoritySetChanges, AuthorityWeight, DelayKind, DelayKindBest, EncodedFinalityProofs, ForkTreePendingChange, ForkTreePendingChangeNode, GrandpaCommit, GrandpaEquivocation, GrandpaEquivocationProof, GrandpaEquivocationValue, GrandpaJustification, GrandpaPrecommit, GrandpaPrevote, GrandpaSignedPrecommit, JustificationNotification, KeyOwnerProof, NextAuthority, PendingChange, PendingPause, PendingResume, Precommits, Prevotes, ReportedRoundStates, RoundState, SetId, StoredPendingChange, StoredState } from '@polkadot/types/interfaces/grandpa'; import type { IdentityFields, IdentityInfo, IdentityInfoAdditional, IdentityInfoTo198, IdentityJudgement, RegistrarIndex, RegistrarInfo, Registration, RegistrationJudgement, RegistrationTo198 } from '@polkadot/types/interfaces/identity'; import type { AuthIndex, AuthoritySignature, Heartbeat, HeartbeatTo244, OpaqueMultiaddr, OpaqueNetworkState, OpaquePeerId } from '@polkadot/types/interfaces/imOnline'; import type { CallIndex, LotteryConfig } from '@polkadot/types/interfaces/lottery'; -import type { ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV13, ErrorMetadataV14, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV13, EventMetadataV14, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, ExtrinsicMetadataV13, ExtrinsicMetadataV14, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV13, FunctionArgumentMetadataV14, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV13, FunctionMetadataV14, FunctionMetadataV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV13, MetadataV14, MetadataV9, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV13, ModuleConstantMetadataV9, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV13, ModuleMetadataV9, OpaqueMetadata, PalletCallMetadataLatest, PalletCallMetadataV14, PalletConstantMetadataLatest, PalletConstantMetadataV14, PalletErrorMetadataLatest, PalletErrorMetadataV14, PalletEventMetadataLatest, PalletEventMetadataV14, PalletMetadataLatest, PalletMetadataV14, PalletStorageMetadataLatest, PalletStorageMetadataV14, PortableType, PortableTypeV14, SignedExtensionMetadataLatest, SignedExtensionMetadataV14, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV13, StorageEntryMetadataV14, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV13, StorageEntryModifierV14, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV13, StorageEntryTypeV14, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV13, StorageHasherV14, StorageHasherV9, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV13, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata'; +import type { ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV13, ErrorMetadataV14, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV13, EventMetadataV14, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, ExtrinsicMetadataV13, ExtrinsicMetadataV14, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV13, FunctionArgumentMetadataV14, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV13, FunctionMetadataV14, FunctionMetadataV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV13, MetadataV14, MetadataV15, MetadataV9, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV13, ModuleConstantMetadataV9, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV13, ModuleMetadataV9, OpaqueMetadata, PalletCallMetadataLatest, PalletCallMetadataV14, PalletConstantMetadataLatest, PalletConstantMetadataV14, PalletErrorMetadataLatest, PalletErrorMetadataV14, PalletEventMetadataLatest, PalletEventMetadataV14, PalletMetadataLatest, PalletMetadataV14, PalletMetadataV15, PalletStorageMetadataLatest, PalletStorageMetadataV14, PortableType, PortableTypeV14, RuntimeApiMetadataLatest, RuntimeApiMetadataV15, RuntimeApiMethodMetadataV15, RuntimeApiMethodParamMetadataV15, SignedExtensionMetadataLatest, SignedExtensionMetadataV14, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV13, StorageEntryMetadataV14, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV13, StorageEntryModifierV14, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV13, StorageEntryTypeV14, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV13, StorageHasherV14, StorageHasherV9, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV13, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata'; import type { MmrBatchProof, MmrEncodableOpaqueLeaf, MmrError, MmrHash, MmrLeafBatchProof, MmrLeafIndex, MmrLeafProof, MmrNodeIndex, MmrProof } from '@polkadot/types/interfaces/mmr'; import type { NftCollectionId, NftItemId } from '@polkadot/types/interfaces/nfts'; import type { NpApiError, NpPoolId } from '@polkadot/types/interfaces/nompools'; @@ -506,6 +507,7 @@ declare module '@polkadot/types/types/registry' { FungibilityV0: FungibilityV0; FungibilityV1: FungibilityV1; FungibilityV2: FungibilityV2; + FungiblesAccessError: FungiblesAccessError; Gas: Gas; GiltBid: GiltBid; GlobalValidationData: GlobalValidationData; @@ -648,6 +650,7 @@ declare module '@polkadot/types/types/registry' { MetadataV12: MetadataV12; MetadataV13: MetadataV13; MetadataV14: MetadataV14; + MetadataV15: MetadataV15; MetadataV9: MetadataV9; MigrationStatusResult: MigrationStatusResult; MmrBatchProof: MmrBatchProof; @@ -759,6 +762,7 @@ declare module '@polkadot/types/types/registry' { PalletId: PalletId; PalletMetadataLatest: PalletMetadataLatest; PalletMetadataV14: PalletMetadataV14; + PalletMetadataV15: PalletMetadataV15; PalletsOrigin: PalletsOrigin; PalletStorageMetadataLatest: PalletStorageMetadataLatest; PalletStorageMetadataV14: PalletStorageMetadataV14; @@ -894,6 +898,10 @@ declare module '@polkadot/types/types/registry' { RoundSnapshot: RoundSnapshot; RoundState: RoundState; RpcMethods: RpcMethods; + RuntimeApiMetadataLatest: RuntimeApiMetadataLatest; + RuntimeApiMetadataV15: RuntimeApiMetadataV15; + RuntimeApiMethodMetadataV15: RuntimeApiMethodMetadataV15; + RuntimeApiMethodParamMetadataV15: RuntimeApiMethodParamMetadataV15; RuntimeCall: RuntimeCall; RuntimeDbWeight: RuntimeDbWeight; RuntimeDispatchInfo: RuntimeDispatchInfo; diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index ed8953791..8c7d4a5ca 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.32.1-11", + "version": "0.33.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 6071c887c..802d6ae5e 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.32.1-11", + "version": "0.33.0", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 28029c5d0..f5138906c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.32.1-11", + "version": "0.33.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index 86d407547..dde555d54 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.32.1-11", + "version": "0.33.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index de3cb78ed..ea74c3e65 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.32.1-11", + "version": "0.33.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 98a02a80d..59a4ca4b1 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.32.1-11", + "version": "0.33.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 5bc040fdd..d36e7e687 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.32.1-11", + "version": "0.33.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 7d91564ca..d39869564 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.32.1-11", + "version": "0.33.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 9e8788eef..e7a609abd 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.32.1-11", + "version": "0.33.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 6c9d21626..39111a069 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.32.1-11", + "version": "0.33.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 9205073ac..65447160e 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.32.1-11", + "version": "0.33.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From cd41a13345827a9faf80469bf64f9bbf02dea0ac Mon Sep 17 00:00:00 2001 From: Github Action Date: Thu, 8 Jun 2023 11:31:57 +0000 Subject: [PATCH 046/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 69f1489f3..fc95e74e0 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.33.0", + "version": "0.33.1-0", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index d45398aaa..c6f00629f 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.33.0", + "version": "0.33.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 5d780a331..fc6ab6559 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.33.0", + "version": "0.33.1-0", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 8c7d4a5ca..bc1027fe6 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.33.0", + "version": "0.33.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 802d6ae5e..fa3b70f24 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.33.0", + "version": "0.33.1-0", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index f5138906c..d67786e3b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.33.0", + "version": "0.33.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index dde555d54..c0b835688 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.33.0", + "version": "0.33.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index ea74c3e65..3321da4a1 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.33.0", + "version": "0.33.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 59a4ca4b1..8ab62abd5 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.33.0", + "version": "0.33.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index d36e7e687..dfbded56c 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.33.0", + "version": "0.33.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index d39869564..0f4618305 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.33.0", + "version": "0.33.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index e7a609abd..ff3e9c28e 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.33.0", + "version": "0.33.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 39111a069..322351547 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.33.0", + "version": "0.33.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 65447160e..0a8ed2a9a 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.33.0", + "version": "0.33.1-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 0772ccbd67ffacc27bd035d496a3873338b09dce Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Thu, 8 Jun 2023 15:44:11 +0200 Subject: [PATCH 047/130] chore: update metadata (#765) * chore: upgrade latest-develop metadata * test: fix integration test --- packages/augment-api/metadata/spiritnet.json | 2 +- .../src/interfaces/augment-api-consts.ts | 40 +- .../src/interfaces/augment-api-errors.ts | 72 +- .../src/interfaces/augment-api-events.ts | 36 +- .../src/interfaces/augment-api-query.ts | 28 +- .../src/interfaces/augment-api-tx.ts | 546 +++++------ packages/augment-api/src/interfaces/lookup.ts | 906 ++++++++---------- .../augment-api/src/interfaces/registry.ts | 12 +- .../src/interfaces/types-lookup.ts | 665 +++++++------ .../core/src/__integrationtests__/Did.spec.ts | 7 +- 10 files changed, 1177 insertions(+), 1137 deletions(-) diff --git a/packages/augment-api/metadata/spiritnet.json b/packages/augment-api/metadata/spiritnet.json index d99ec5b39..cfe20b4e9 100644 --- a/packages/augment-api/metadata/spiritnet.json +++ b/packages/augment-api/metadata/spiritnet.json @@ -1 +1 @@ -{"result":"0x6d6574610e8507000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d6572731c0120526566436f756e7400012470726f7669646572731c0120526566436f756e7400012c73756666696369656e74731c0120526566436f756e740001106461746114012c4163636f756e7444617461000010000005060014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0000050500200c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540124000c01186e6f726d616c2401045400012c6f7065726174696f6e616c240104540001246d616e6461746f7279240104540000240c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6528010c75363400012870726f6f665f73697a6528010c75363400002800000610002c083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000030000002080034102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677338013c5665633c4469676573744974656d3e0000380000023c003c102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e00060024436f6e73656e7375730800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000400105365616c0800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000500144f74686572040030011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000400000030400000008004400000248004808306672616d655f73797374656d2c4576656e745265636f7264080445014c0454012c000c011470686173657502011450686173650001146576656e744c010445000118746f70696373790201185665633c543e00004c08447370697269746e65745f72756e74696d653052756e74696d654576656e740001781853797374656d04005001706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c496e6469636573040074017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e0005002042616c616e636573040078017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000600485472616e73616374696f6e5061796d656e7404008001a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0007001c53657373696f6e040084015470616c6c65745f73657373696f6e3a3a4576656e740016004050617261636861696e5374616b696e67040088018470617261636861696e5f7374616b696e673a3a4576656e743c52756e74696d653e0015002444656d6f6372616379040090018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e001e001c436f756e63696c0400a001fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400b001fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020004c546563686e6963616c4d656d626572736869700400b401fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365313e0022002054726561737572790400b8017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0023001c5574696c6974790400bc015470616c6c65745f7574696c6974793a3a4576656e740028001c56657374696e670400c0017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e002900245363686564756c65720400c4018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e002a001450726f78790400d0017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002b0020507265696d6167650400dc017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e002c0038546970734d656d626572736869700400e001fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365323e002d0010546970730400e4016c70616c6c65745f746970733a3a4576656e743c52756e74696d653e002e001443747970650400e8015463747970653a3a4576656e743c52756e74696d653e003d002c4174746573746174696f6e0400ec016c6174746573746174696f6e3a3a4576656e743c52756e74696d653e003e002844656c65676174696f6e0400f8016864656c65676174696f6e3a3a4576656e743c52756e74696d653e003f000c44696404000101014c6469643a3a4576656e743c52756e74696d653e004000244469644c6f6f6b757004000501018470616c6c65745f6469645f6c6f6f6b75703a3a4576656e743c52756e74696d653e00430024576562334e616d657304001501018470616c6c65745f776562335f6e616d65733a3a4576656e743c52756e74696d653e004400445075626c696343726564656e7469616c730400210101887075626c69635f63726564656e7469616c733a3a4576656e743c52756e74696d653e0045003c50617261636861696e53797374656d0400910101bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0050002458636d7051756575650400950101a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e0052002c506f6c6b61646f7458636d0400a101016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e0053002843756d756c757358636d04006d02018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e00540020446d7051756575650400710201a063756d756c75735f70616c6c65745f646d705f71756575653a3a4576656e743c52756e74696d653e00550000500c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5401304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7260013444697370617463684572726f7200013464697370617463685f696e666f5401304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e744964000110686173682c011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e540c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874240118576569676874000114636c6173735801344469737061746368436c617373000120706179735f6665655c0110506179730000580c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f7279000200005c0c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000060082873705f72756e74696d653444697370617463684572726f72000134144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040064012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400680128546f6b656e4572726f720007002841726974686d6574696304006c013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007001485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c000064082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7240018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000068082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f72746564000600006c083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000070082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000740c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909780c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475737c01185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909097c14346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000800c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909840c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e6465781c013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909880c4470617261636861696e5f7374616b696e671870616c6c6574144576656e74040454000154204e6577526f756e640800100138543a3a426c6f636b4e756d62657200001c013053657373696f6e496e6465780000088041206e6577207374616b696e6720726f756e642068617320737461727465642e785c5b626c6f636b206e756d6265722c20726f756e64206e756d6265725c5d50456e7465726564546f7043616e646964617465730400000130543a3a4163636f756e744964000108cc41206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d444c656674546f7043616e646964617465730400000130543a3a4163636f756e744964000208d8416e206163636f756e74207761732072656d6f7665642066726f6d2074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d604a6f696e6564436f6c6c61746f7243616e646964617465730800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000308e041206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620636f6c6c61746f722063616e646964617465732ebc5c5b6163636f756e742c20616d6f756e74207374616b656420627920746865206e65772063616e6469646174655c5d48436f6c6c61746f725374616b65644d6f72650c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00040801014120636f6c6c61746f722063616e6469646174652068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d48436f6c6c61746f725374616b65644c6573730c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00050801014120636f6c6c61746f722063616e64696461746520686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d54436f6c6c61746f725363686564756c6564457869740c001c013053657373696f6e496e6465780000000130543a3a4163636f756e74496400001c013053657373696f6e496e64657800061001014120636f6c6c61746f722063616e646964617465206861732073746172746564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e646964617465732e205c5b726f756e64206e756d6265722c20636f6c6c61746f722773206163636f756e742c20726f756e64206e756d626572207768656ee074686520636f6c6c61746f722077696c6c206265206566666563746976656c792072656d6f7665642066726f6d2074686520736574206f663063616e646964617465735c5d50436f6c6c61746f7243616e63656c6564457869740400000130543a3a4163636f756e74496400070c05014120636f6c6c61746f722063616e646964617465206861732063616e63656c6564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e6469646174657320616e6420776173206164646564206261636b20746f207468652063616e64696461746520706f6f6c2e205c5b636f6c6c61746f722773246163636f756e745c5d3443616e6469646174654c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000808cc416e206163636f756e7420686173206c6566742074686520736574206f6620636f6c6c61746f722063616e646964617465732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d3c436f6c6c61746f7252656d6f7665640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000908e4416e206163636f756e742077617320666f726365646c792072656d6f7665642066726f6d207468652020736574206f6620636f6c6c61746f72c863616e646964617465732e205c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d604d617843616e6469646174655374616b654368616e676564040018013042616c616e63654f663c543e000a08b4546865206d6178696d756d2063616e646964617465207374616b6520686173206265656e206368616e6765642e485c5b6e6577206d617820616d6f756e745c5d4c44656c656761746f725374616b65644d6f72651000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000b0cf0412064656c656761746f722068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d4c44656c656761746f725374616b65644c6573731000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000c0cf0412064656c656761746f7220686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d3444656c656761746f724c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000d08a8416e206163636f756e7420686173206c6566742074686520736574206f662064656c656761746f72732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d2844656c65676174696f6e1000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000e0cc8416e206163636f756e74206861732064656c6567617465642061206e657720636f6c6c61746f722063616e6469646174652e11015c5b6163636f756e742c20616d6f756e74206f662066756e6473207374616b65642c20746f74616c20616d6f756e74206f662064656c656761746f7273272066756e64738c7374616b656420666f722074686520636f6c6c61746f722063616e6469646174655c5d4844656c65676174696f6e5265706c616365641800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000f180d0141206e65772064656c65676174696f6e20686173207265706c6163656420616e206578697374696e67206f6e6520696e2074686520736574206f66206f6e676f696e67010164656c65676174696f6e7320666f72206120636f6c6c61746f722063616e6469646174652e205c5b6e65772064656c656761746f722773206163636f756e742c0901616d6f756e74206f662066756e6473207374616b656420696e20746865206e65772064656c65676174696f6e2c207265706c616365642064656c656761746f7227730d016163636f756e742c20616d6f756e74206f662066756e6473207374616b656420696e20746865207265706c6163652064656c65676174696f6e2c20636f6c6c61746f72050163616e6469646174652773206163636f756e742c206e657720746f74616c20616d6f756e74206f662064656c656761746f7273272066756e6473207374616b656470666f722074686520636f6c6c61746f722063616e6469646174655c5d5444656c656761746f724c656674436f6c6c61746f721000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00100cdc416e206163636f756e74206861732073746f707065642064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e09015c5b6163636f756e742c20636f6c6c61746f722063616e6469646174652773206163636f756e742c206f6c6420616d6f756e74206f662064656c656761746f727327d866756e6473207374616b65642c206e657720616d6f756e74206f662064656c656761746f7273272066756e6473207374616b65645c5d2052657761726465640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e001108c04120636f6c6c61746f72206f7220612064656c656761746f72206861732072656365697665642061207265776172642e745c5b6163636f756e742c20616d6f756e74206f66207265776172645c5d44526f756e64496e666c6174696f6e53657410008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00120c0501496e666c6174696f6e20636f6e66696775726174696f6e20666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e09015c5b6d6178696d756d20636f6c6c61746f722773207374616b696e6720726174652c206d6178696d756d20636f6c6c61746f7227732072657761726420726174652c0d016d6178696d756d2064656c656761746f722773207374616b696e6720726174652c206d6178696d756d2064656c656761746f7227732072657761726420726174655c5d604d617853656c656374656443616e6469646174657353657408001c010c75333200001c010c753332001308f0546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c656374656420696e20667574757265dc76616c69646174696f6e20726f756e647320686173206368616e6765642e205c5b6f6c642076616c75652c206e65772076616c75655c5d44426c6f636b73506572526f756e6453657410001c013053657373696f6e496e6465780000100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d62657200140cf8546865206c656e67746820696e20626c6f636b7320666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e01015c5b726f756e64206e756d6265722c20666972737420626c6f636b20696e207468652063757272656e7420726f756e642c206f6c642076616c75652c206e65771c76616c75655c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098c0c3473705f61726974686d65746963287065725f7468696e67732c5065727175696e74696c6c0000040010010c7536340000900c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001382050726f706f73656408013870726f706f73616c5f696e6465781c012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e6465781c012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e6465781c013c5265666572656e64756d496e6465780001247468726573686f6c64940134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e6465781c013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e6465781c013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e6465781c013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011048323536000114756e74696c100138543a3a426c6f636b4e756d62657200090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f686173682c011048323536000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e6465781c013c5265666572656e64756d496e646578000110766f74659801644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e6465781c012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e6465781c012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909940c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f7269747900020000980c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f74659c0110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e6365000100009c0c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000a00c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800013470726f706f73616c5f686173682c011c543a3a486173680001247468726573686f6c641c012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011c543a3a48617368000114766f746564a40110626f6f6c00010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74a801384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74a801384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f686173682c011c543a3a4861736800010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a40000050000a80418526573756c7408045401ac044501600108084f6b0400ac000000000c4572720400600000010000ac0000040000b00c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800013470726f706f73616c5f686173682c011c543a3a486173680001247468726573686f6c641c012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011c543a3a48617368000114766f746564a40110626f6f6c00010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74a801384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74a801384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f686173682c011c543a3a4861736800010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b40c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b80c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001242050726f706f73656404013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909bc0c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e6465781c010c7533320001146572726f7260013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7260013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74a801384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c00c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c40c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736bc8016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964cc01404f7074696f6e3c5461736b4e616d653e000118726573756c74a801384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736bc8016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964cc01404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736bc8016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964cc01404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736bc8016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964cc01404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652ec800000408101c00cc04184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000d00c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74a801384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065d40130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e646578d8010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f686173682c013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200040450412070726f7879207761732072656d6f7665642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d408447370697269746e65745f72756e74696d652450726f7879547970650001180c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e63650002004050617261636861696e5374616b696e670003002c43616e63656c50726f7879000400484e6f6e4465706f736974436c61696d696e6700050000d80000050400dc0c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f746564040110686173682c011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e24526571756573746564040110686173682c011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c6561726564040110686173682c011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e00c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e40c2c70616c6c65745f746970731870616c6c6574144576656e74080454000449000114184e65775469700401207469705f686173682c011c543a3a486173680000049441206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e28546970436c6f73696e670401207469705f686173682c011c543a3a48617368000104d841207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e24546970436c6f7365640c01207469705f686173682c011c543a3a4861736800010c77686f000130543a3a4163636f756e7449640001187061796f757418013c42616c616e63654f663c542c20493e0002048441207469702073756767657374696f6e20686173206265656e20636c6f7365642e305469705265747261637465640401207469705f686173682c011c543a3a486173680003049041207469702073756767657374696f6e20686173206265656e207265747261637465642e28546970536c61736865640c01207469705f686173682c011c543a3a4861736800011866696e646572000130543a3a4163636f756e74496400011c6465706f73697418013c42616c616e63654f663c542c20493e0004048841207469702073756767657374696f6e20686173206265656e20736c61736865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e80c1463747970651870616c6c6574144576656e74040454000108304354797065437265617465640800000144437479706543726561746f724f663c543e00002c01384374797065486173684f663c543e0000087441206e657720435479706520686173206265656e20637265617465642e885c5b63726561746f72206964656e7469666965722c20435479706520686173685c5d3043547970655570646174656404002c01384374797065486173684f663c543e000108ac496e666f726d6174696f6e2061626f7574206120435479706520686173206265656e20757064617465642e385c5b435479706520686173685c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ec0c2c6174746573746174696f6e1870616c6c6574144576656e74040454000110484174746573746174696f6e43726561746564100000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00002c01384374797065486173684f663c543e0000f001704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e0000088c41206e6577206174746573746174696f6e20686173206265656e20637265617465642e05015c5b61747465737465722049442c20636c61696d20686173682c20435479706520686173682c20286f7074696f6e616c292064656c65676174696f6e2049445c5d484174746573746174696f6e5265766f6b6564080000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00010880416e206174746573746174696f6e20686173206265656e207265766f6b65642e685c5b6163636f756e742069642c20636c61696d20686173685c5d484174746573746174696f6e52656d6f766564080000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00020880416e206174746573746174696f6e20686173206265656e2072656d6f7665642e685c5b6163636f756e742069642c20636c61696d20686173685c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e00002c0138436c61696d486173684f663c543e0003080501546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e2e685c5b6163636f756e742069642c20636c61696d20686173685c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f004184f7074696f6e04045401f40108104e6f6e6500000010536f6d650400f40000010000f40c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c417574686f72697a6174696f6e4964043044656c65676174696f6e4964012c01042844656c65676174696f6e04002c013044656c65676174696f6e496400000000f80c2864656c65676174696f6e1870616c6c6574144576656e7404045400011c40486965726172636879437265617465640c0000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c01384374797065486173684f663c543e0000088441206e65772068696572617263687920686173206265656e20637265617465642ea05c5b63726561746f722049442c20726f6f74206e6f64652049442c20435459504520686173685c5d404869657261726368795265766f6b6564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00010874412068696572617263687920686173206265656e207265766f6b65642e705c5b7265766f6b65722049442c20726f6f74206e6f64652049445c5d4048696572617263687952656d6f766564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000208dc412068696572617263687920686173206265656e2072656d6f7665642066726f6d207468652073746f72616765206f6e20636861696e2e705c5b72656d6f7665722049442c20726f6f74206e6f64652049445c5d4444656c65676174696f6e43726561746564180000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000000014044656c656761746f7249644f663c543e0000fc012c5065726d697373696f6e7300030c8841206e65772064656c65676174696f6e20686173206265656e20637265617465642efc5c5b63726561746f722049442c20726f6f74206e6f64652049442c2064656c65676174696f6e206e6f64652049442c20706172656e74206e6f64652049442c6864656c65676174652049442c207065726d697373696f6e735c5d4444656c65676174696f6e5265766f6b6564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00040878412064656c65676174696f6e20686173206265656e207265766f6b65642e885c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d4444656c65676174696f6e52656d6f76656408000001384163636f756e7449644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00050878412064656c65676174696f6e20686173206265656e2072656d6f7665642e885c5b72656d6f7665722049442c2064656c65676174696f6e206e6f64652049445c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000608f8546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720612064656c65676174696f6eac737562747265652e205c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909fc0c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368792c5065726d697373696f6e730000040110626974731c010c753332000001010c0c6469641870616c6c6574144576656e74040454000110284469644372656174656408000001384163636f756e7449644f663c543e00000001484469644964656e7469666965724f663c543e0000086c41206e65772044494420686173206265656e20637265617465642e985c5b7472616e73616374696f6e207369676e65722c20444944206964656e7469666965725c5d284469645570646174656404000001484469644964656e7469666965724f663c543e0001085c412044494420686173206265656e20757064617465642e485c5b444944206964656e7469666965725c5d2844696444656c6574656404000001484469644964656e7469666965724f663c543e0002085c412044494420686173206265656e2064656c657465642e485c5b444944206964656e7469666965725c5d4444696443616c6c4469737061746368656408000001484469644964656e7469666965724f663c543e0000a801384469737061746368526573756c74000308a041204449442d617574686f72697365642063616c6c20686173206265656e2065786563757465642e7c5c5b4449442063616c6c65722c20646973706174636820726573756c745c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090905010c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144576656e74040454000110584173736f63696174696f6e45737461626c69736865640800090101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000004f841206e6577206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e742049442077617320637265617465642e484173736f63696174696f6e52656d6f7665640800090101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000104ec416e206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e74204944207761732072656d6f7665642e444d6967726174696f6e50726f6772657373000204c454686572652077617320736f6d652070726f677265737320696e20746865206d6967726174696f6e2070726f636573732e484d6967726174696f6e436f6d706c65746564000304dc416c6c204163636f756e744964732068617665206265656e206d6967726174656420746f204c696e6b61626c654163636f756e7449642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090909010c4470616c6c65745f6469645f6c6f6f6b7570406c696e6b61626c655f6163636f756e74444c696e6b61626c654163636f756e7449640001082c4163636f756e744964323004000d01012c4163636f756e74496432300000002c4163636f756e7449643332040000012c4163636f756e7449643332000100000d010c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e742c4163636f756e744964323000000400110101205b75383b2032305d0000110100000314000000080015010c4470616c6c65745f776562335f6e616d65731870616c6c6574144576656e740404540001103c576562334e616d65436c61696d65640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6519010134576562334e616d654f663c543e0000047041206e6577206e616d6520686173206265656e20636c61696d65642e40576562334e616d6552656c65617365640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6519010134576562334e616d654f663c543e0001046441206e616d6520686173206265656e2072656c65617365642e38576562334e616d6542616e6e65640401106e616d6519010134576562334e616d654f663c543e0002045c41206e616d6520686173206265656e2062616e6e65642e40576562334e616d65556e62616e6e65640401106e616d6519010134576562334e616d654f663c543e0003046441206e616d6520686173206265656e20756e62616e6e65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090919010c4470616c6c65745f776562335f6e616d657324776562335f6e616d65344173636969576562334e616d65040454000004001d010180426f756e6465645665633c75382c20543a3a4d61784e616d654c656e6774683e00001d01101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000021010c487075626c69635f63726564656e7469616c731870616c6c6574144576656e740404540001104043726564656e7469616c53746f7265640801287375626a6563745f696425010130543a3a5375626a65637449640488546865207375626a656374206f6620746865206e65772063726564656e7469616c2e013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0474546865206964206f6620746865206e65772063726564656e7469616c2e0004a041206e6577207075626c69632063726564656e7469616c20686173206265656e206973737565642e4443726564656e7469616c52656d6f7665640801287375626a6563745f696425010130543a3a5375626a65637449640498546865207375626a656374206f66207468652072656d6f7665642063726564656e7469616c2e013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0484546865206964206f66207468652072656d6f7665642063726564656e7469616c2e01049841207075626c69632063726564656e7469616c7320686173206265656e2072656d6f7665642e4443726564656e7469616c5265766f6b656404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0484546865206964206f6620746865207265766f6b65642063726564656e7469616c2e02049441207075626c69632063726564656e7469616c20686173206265656e207265766f6b65642e4c43726564656e7469616c556e7265766f6b656404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e048c546865206964206f662074686520756e7265766f6b65642063726564656e7469616c2e03049c41207075626c69632063726564656e7469616c20686173206265656e20756e7265766f6b65642e0490546865206576656e74732067656e65726174656420627920746869732070616c6c65742e25010c3872756e74696d655f636f6d6d6f6e18617373657473204173736574446964000004002901013c41737365744964656e746966696572000029010c3c6b696c745f61737365745f646964730876312041737365744469640000080120636861696e5f69642d01011c436861696e496400012061737365745f69645501011c4173736574496400002d01103c6b696c745f61737365745f6469647314636861696e0876311c436861696e49640001141845697031353504003101013c4569703135355265666572656e63650000001842697031323204003501016447656e657369734865784861736833325265666572656e63650001001c446f7473616d6104003501016447656e657369734865784861736833325265666572656e636500020018536f6c616e6104003d01017047656e657369734261736535384861736833325265666572656e63650003001c47656e6572696304004501013847656e65726963436861696e4964000400003101103c6b696c745f61737365745f6469647314636861696e0876313c4569703135355265666572656e6365000004001801107531323800003501103c6b696c745f61737365745f6469647314636861696e0876316447656e657369734865784861736833325265666572656e636500000400390101205b75383b2031365d000039010000031000000008003d01103c6b696c745f61737365745f6469647314636861696e0876317047656e657369734261736535384861736833325265666572656e63650000040041010170426f756e6465645665633c75382c20436f6e73745533323c33323e3e00004101101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00004501103c6b696c745f61737365745f6469647314636861696e0876313847656e65726963436861696e496400000801246e616d6573706163654901015447656e65726963436861696e4e616d6573706163650001247265666572656e63655101015447656e65726963436861696e5265666572656e636500004901103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e4e616d657370616365000004004d0101d8426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f4e414d4553504143455f4c454e4754485f5533323e3e00004d01101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00005101103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e5265666572656e636500000400410101d8426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f5245464552454e43455f4c454e4754485f5533323e3e00005501103c6b696c745f61737365745f646964731461737365740876311c4173736574496400011418536c6970343404005901013c536c697034345265666572656e636500000014457263323004006501018445766d536d617274436f6e747261637446756e6769626c655265666572656e63650001001845726337323104006901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650002001c4572633131353504006901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650003001c47656e6572696304007901013847656e6572696341737365744964000400005901103c6b696c745f61737365745f646964731461737365740876313c536c697034345265666572656e6365000004005d0101105532353600005d01083c7072696d69746976655f7479706573105532353600000400610101205b7536343b20345d000061010000030400000010006501103c6b696c745f61737365745f646964731461737365740876318445766d536d617274436f6e747261637446756e6769626c655265666572656e636500000400110101205b75383b2032305d00006901103c6b696c745f61737365745f646964731461737365740876319045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e6365000008006501018445766d536d617274436f6e747261637446756e6769626c655265666572656e636500006d0101b44f7074696f6e3c45766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e7469666965723e00006d0104184f7074696f6e0404540171010108104e6f6e6500000010536f6d650400710100000100007101103c6b696c745f61737365745f646964731461737365740876319445766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e74696669657200000400750101dc426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f4944454e5449464945525f4c454e4754485f5533323e3e00007501101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00007901103c6b696c745f61737365745f646964731461737365740876313847656e657269634173736574496400000c01246e616d6573706163657d01015447656e6572696341737365744e616d6573706163650001247265666572656e63658101015447656e6572696341737365745265666572656e63650001086964890101784f7074696f6e3c47656e6572696341737365744964656e7469666965723e00007d01103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365744e616d657370616365000004004d0101d8426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f4e414d4553504143455f4c454e4754485f5533323e3e00008101103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365745265666572656e636500000400850101d8426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f5245464552454e43455f4c454e4754485f5533323e3e00008501101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000890104184f7074696f6e040454018d010108104e6f6e6500000010536f6d6504008d0100000100008d01103c6b696c745f61737365745f646964731461737365740876315847656e6572696341737365744964656e74696669657200000400750101dc426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f4944454e5449464945525f4c454e4754485f5533323e3e000091010c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e7404045400011c6056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d1c015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e4455706772616465417574686f72697a6564040124636f64655f686173682c011c543a3a486173680003047c416e207570677261646520686173206265656e20617574686f72697a65642e60446f776e776172644d657373616765735265636569766564040114636f756e741c010c7533320004040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564240118576569676874000120646d715f686561642c014472656c61795f636861696e3a3a48617368000504e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f68617368cc013c4f7074696f6e3c58636d486173683e000604b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090995010c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e7404045400011c1c537563636573730801306d6573736167655f68617368cc013c4f7074696f6e3c58636d486173683e00011877656967687424011857656967687400000464536f6d652058434d20776173206578656375746564206f6b2e104661696c0c01306d6573736167655f68617368cc013c4f7074696f6e3c58636d486173683e0001146572726f729901012058636d4572726f7200011877656967687424011857656967687400010440536f6d652058434d206661696c65642e2842616456657273696f6e0401306d6573736167655f68617368cc013c4f7074696f6e3c58636d486173683e000204544261642058434d2076657273696f6e20757365642e24426164466f726d61740401306d6573736167655f68617368cc013c4f7074696f6e3c58636d486173683e000304504261642058434d20666f726d617420757365642e3c58636d704d65737361676553656e740401306d6573736167655f68617368cc013c4f7074696f6e3c58636d486173683e000404c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e484f766572776569676874456e71756575656410011873656e6465729d01011850617261496400011c73656e745f61741c014052656c6179426c6f636b4e756d626572000114696e64657810013c4f766572776569676874496e6465780001207265717569726564240118576569676874000504d4416e2058434d2065786365656465642074686520696e646976696475616c206d65737361676520776569676874206275646765742e484f7665727765696768745365727669636564080114696e64657810013c4f766572776569676874496e646578000110757365642401185765696768740006044101416e2058434d2066726f6d20746865206f7665727765696768742071756575652077617320657865637574656420776974682074686520676976656e2061637475616c2077656967687420757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909099901100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002401185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d6974002700009d010c48706f6c6b61646f745f70617261636861696e287072696d697469766573084964000004001c010c7533320000a1010c2870616c6c65745f78636d1870616c6c6574144576656e7404045400015c24417474656d707465640400a501015078636d3a3a6c61746573743a3a4f7574636f6d6500000ca8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e00345c5b206f7574636f6d65205c5d1053656e740c00a90101344d756c74694c6f636174696f6e0000a90101344d756c74694c6f636174696f6e0000cd01011c58636d3c28293e00010c5c412058434d206d657373616765207761732073656e742e00885c5b206f726967696e2c2064657374696e6174696f6e2c206d657373616765205c5d48556e6578706563746564526573706f6e73650800a90101344d756c74694c6f636174696f6e000010011c517565727949640002145901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e73655265616479080010011c517565727949640000f5010120526573706f6e73650003105d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e00485c5b2069642c20726573706f6e7365205c5d204e6f7469666965640c0010011c5175657279496400000801087538000008010875380004105901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d404e6f746966794f766572776569676874140010011c517565727949640000080108753800000801087538000024011857656967687400002401185765696768740005146101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20636f756c6441016e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e0019015c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e6465782c2061637475616c207765696768742c206d617820627564676574656420776569676874205c5d4c4e6f7469667944697370617463684572726f720c0010011c5175657279496400000801087538000008010875380006105501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d484e6f746966794465636f64654661696c65640c0010011c5175657279496400000801087538000008010875380007145101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d40496e76616c6964526573706f6e6465720c00a90101344d756c74694c6f636174696f6e000010011c517565727949640000110201544f7074696f6e3c4d756c74694c6f636174696f6e3e0008145901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e00b05c5b206f726967696e206c6f636174696f6e2c2069642c206578706563746564206c6f636174696f6e205c5d5c496e76616c6964526573706f6e64657256657273696f6e0800a90101344d756c74694c6f636174696f6e000010011c517565727949640009245101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e736554616b656e040010011c51756572794964000a0cc8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e00205c5b206964205c5d34417373657473547261707065640c002c0110483235360000a90101344d756c74694c6f636174696f6e00003102015056657273696f6e65644d756c7469417373657473000b0cb8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e00685c5b20686173682c206f726967696e2c20617373657473205c5d5456657273696f6e4368616e67654e6f7469666965640c00a90101344d756c74694c6f636174696f6e00001c012858636d56657273696f6e0000d901012c4d756c7469417373657473000c142501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e007c5c5b2064657374696e6174696f6e2c20726573756c742c20636f7374205c5d5c537570706f7274656456657273696f6e4368616e6765640800a90101344d756c74694c6f636174696f6e00001c012858636d56657273696f6e000d10390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e006c5c5b206c6f636174696f6e2c2058434d2076657273696f6e205c5d504e6f7469667954617267657453656e644661696c0c00a90101344d756c74694c6f636174696f6e000010011c5175657279496400009901012058636d4572726f72000e1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e007c5c5b206c6f636174696f6e2c2071756572792049442c206572726f72205c5d644e6f746966795461726765744d6967726174696f6e4661696c08006902015856657273696f6e65644d756c74694c6f636174696f6e000010011c51756572794964000f1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e00605c5b206c6f636174696f6e2c207175657279204944205c5d54496e76616c69645175657269657256657273696f6e0800a90101344d756c74694c6f636174696f6e000010011c517565727949640010245501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d38496e76616c6964517565726965721000a90101344d756c74694c6f636174696f6e000010011c517565727949640000a90101344d756c74694c6f636174696f6e0000110201544f7074696f6e3c4d756c74694c6f636174696f6e3e0011145d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e0005015c5b206f726967696e206c6f636174696f6e2c2069642c20657870656374656420717565726965722c206d617962652061637475616c2071756572696572205c5d5056657273696f6e4e6f74696679537461727465640800a90101344d756c74694c6f636174696f6e0000d901012c4d756c74694173736574730012105901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d5856657273696f6e4e6f746966795265717565737465640800a90101344d756c74694c6f636174696f6e0000d901012c4d756c746941737365747300130c41015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e64732075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d6056657273696f6e4e6f74696679556e7265717565737465640800a90101344d756c74694c6f636174696f6e0000d901012c4d756c746941737365747300140c61015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d2046656573506169640800a90101344d756c74694c6f636174696f6e0000d901012c4d756c746941737365747300150c310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e006c5c5b20706179696e67206c6f636174696f6e2c2066656573205c5d34417373657473436c61696d65640c002c0110483235360000a90101344d756c74694c6f636174696f6e00003102015056657273696f6e65644d756c746941737365747300160cc0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e206173736574207472617000685c5b20686173682c206f726967696e2c20617373657473205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a501100c78636d087633187472616974731c4f7574636f6d6500010c20436f6d706c657465040024011857656967687400000028496e636f6d706c65746508002401185765696768740000990101144572726f72000100144572726f720400990101144572726f7200020000a901100c78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72ad0101244a756e6374696f6e730000ad01100c78636d087633246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400b10101204a756e6374696f6e0001000858320800b10101204a756e6374696f6e0000b10101204a756e6374696f6e0002000858330c00b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0003000858341000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0004000858351400b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0005000858361800b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0006000858371c00b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0007000858382000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e0000b10101204a756e6374696f6e00080000b101100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400b501010c7533320000002c4163636f756e744964333208011c6e6574776f726bb90101444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bb90101444f7074696f6e3c4e6574776f726b49643e000114696e64657828010c753634000200304163636f756e744b6579323008011c6e6574776f726bb90101444f7074696f6e3c4e6574776f726b49643e00010c6b6579110101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400c1010110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964c5010118426f6479496400011070617274c9010120426f6479506172740008003c476c6f62616c436f6e73656e7375730400bd0101244e6574776f726b496400090000b5010000061c00b90104184f7074696f6e04045401bd010108104e6f6e6500000010536f6d650400bd010000010000bd01100c78636d087633206a756e6374696f6e244e6574776f726b496400012824427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657210010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f696428010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090000c1010000061800c501100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040040011c5b75383b20345d00010014496e6465780400b501010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000c901100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74b501010c753332000100204672616374696f6e08010c6e6f6db501010c75333200011464656e6f6db501010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6db501010c75333200011464656e6f6db501010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6db501010c75333200011464656e6f6db501010c75333200040000cd010c0c78636d0876330c58636d041043616c6c00000400d10101585665633c496e737472756374696f6e3c43616c6c3e3e0000d101000002d50100d5010c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400d901012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400d901012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400d901012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f696428011c51756572794964000120726573706f6e7365f5010120526573706f6e73650001286d61785f77656967687424011857656967687400011c71756572696572110201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473d901012c4d756c746941737365747300012c62656e6566696369617279a90101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473d901012c4d756c746941737365747300011064657374a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64150201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737424011857656967687400011063616c6c1902014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b501010c7533320001406d61785f6d6573736167655f73697a65b501010c7533320001306d61785f6361706163697479b501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b501010c75333200011873656e646572b501010c753332000124726563697069656e74b501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400ad010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f7204001d0201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473210201404d756c7469417373657446696c74657200012c62656e6566696369617279a90101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473210201404d756c7469417373657446696c74657200011064657374a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e000e003445786368616e676541737365740c011067697665210201404d756c7469417373657446696c74657200011077616e74d901012c4d756c746941737365747300011c6d6178696d616ca40110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473210201404d756c7469417373657446696c74657200011c72657365727665a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473210201404d756c7469417373657446696c74657200011064657374a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f1d0201445175657279526573706f6e7365496e666f000118617373657473210201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573e10101284d756c746941737365740001307765696768745f6c696d69742d02012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400cd01012458636d3c43616c6c3e0015002c536574417070656e6469780400cd01012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473d901012c4d756c74694173736574730001187469636b6574a90101344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f776569676874240118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400d901012c4d756c7469417373657473001c002c45787065637441737365740400d901012c4d756c7469417373657473001d00304578706563744f726967696e0400110201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400f90101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304000d0201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6530011c5665633c75383e000134726573706f6e73655f696e666f1d0201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578b501010c7533320001106e616d6530011c5665633c75383e00012c6d6f64756c655f6e616d6530011c5665633c75383e00012c63726174655f6d616a6f72b501010c75333200013c6d696e5f63726174655f6d696e6f72b501010c753332002200505265706f72745472616e7361637453746174757304001d0201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400b10101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bbd0101244e6574776f726b496400012c64657374696e6174696f6ead010154496e746572696f724d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e002600244c6f636b41737365740801146173736574e10101284d756c74694173736574000120756e6c6f636b6572a90101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574e10101284d756c74694173736574000118746172676574a90101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574e10101284d756c746941737365740001146f776e6572a90101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574e10101284d756c746941737365740001186c6f636b6572a90101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177a40110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400a90101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69742d02012c5765696768744c696d6974000130636865636b5f6f726967696e110201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000d901100c78636d087633286d756c746961737365742c4d756c746941737365747300000400dd01013c5665633c4d756c746941737365743e0000dd01000002e10100e101100c78636d087633286d756c74696173736574284d756c7469417373657400000801086964e501011c4173736574496400010c66756ee901012c46756e676962696c6974790000e501100c78636d087633286d756c746961737365741c4173736574496400010820436f6e63726574650400a90101344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d00010000e901100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400c1010110753132380000002c4e6f6e46756e6769626c650400ed0101344173736574496e7374616e636500010000ed01100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400c10101107531323800010018417272617934040040011c5b75383b20345d000200184172726179380400f101011c5b75383b20385d0003001c417272617931360400390101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000f101000003080000000800f5010c0c78636d08763320526573706f6e7365000118104e756c6c000000184173736574730400d901012c4d756c74694173736574730001003c457865637574696f6e526573756c740400f90101504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e04001c013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f04000102013456656350616c6c6574496e666f000400384469737061746368526573756c7404000d0201384d617962654572726f72436f646500050000f90104184f7074696f6e04045401fd010108104e6f6e6500000010536f6d650400fd010000010000fd01000004081c99010001020c0c78636d0876333456656350616c6c6574496e666f000004000502013c5665633c50616c6c6574496e666f3e0000050200000209020009020c0c78636d0876332850616c6c6574496e666f0000180114696e646578b501010c7533320001106e616d6530011c5665633c75383e00012c6d6f64756c655f6e616d6530011c5665633c75383e0001146d616a6f72b501010c7533320001146d696e6f72b501010c7533320001147061746368b501010c75333200000d020c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f72040030011c5665633c75383e000100385472756e63617465644572726f72040030011c5665633c75383e00020000110204184f7074696f6e04045401a9010108104e6f6e6500000010536f6d650400a901000001000015020c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d0003000019020c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656430011c5665633c75383e00001d020c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6ea90101344d756c74694c6f636174696f6e00012071756572795f696428011c517565727949640001286d61785f77656967687424011857656967687400002102100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e6974650400d901012c4d756c74694173736574730000001057696c6404002502013857696c644d756c74694173736574000100002502100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f660801086964e501011c4173736574496400010c66756e2902013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400b501010c75333200020030416c6c4f66436f756e7465640c01086964e501011c4173736574496400010c66756e2902013c57696c6446756e676962696c697479000114636f756e74b501010c753332000300002902100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c65000100002d020c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400240118576569676874000100003102080c78636d5056657273696f6e65644d756c746941737365747300010808563204003502013c76323a3a4d756c74694173736574730000000856330400d901013c76333a3a4d756c7469417373657473000100003502100c78636d087632286d756c746961737365742c4d756c7469417373657473000004003902013c5665633c4d756c746941737365743e000039020000023d02003d02100c78636d087632286d756c74696173736574284d756c74694173736574000008010869644102011c4173736574496400010c66756e6102012c46756e676962696c69747900004102100c78636d087632286d756c746961737365741c4173736574496400010820436f6e63726574650400450201344d756c74694c6f636174696f6e000000204162737472616374040030011c5665633c75383e000100004502100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72490201244a756e6374696f6e7300004902100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e73000124104865726500000008583104004d0201204a756e6374696f6e00010008583208004d0201204a756e6374696f6e00004d0201204a756e6374696f6e0002000858330c004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00030008583410004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00040008583514004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00050008583618004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e0006000858371c004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00070008583820004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e00004d0201204a756e6374696f6e000800004d02100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400b501010c7533320000002c4163636f756e744964333208011c6e6574776f726b510201244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b510201244e6574776f726b4964000114696e64657828010c753634000200304163636f756e744b6579323008011c6e6574776f726b510201244e6574776f726b496400010c6b6579110101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400c1010110753132380005002847656e6572616c4b65790400550201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c697479080108696459020118426f64794964000110706172745d020120426f6479506172740008000051020c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d65640400550201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d61000300005502101c73705f636f72651c626f756e646564407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e000059020c0c78636d08763218426f6479496400012810556e6974000000144e616d65640400550201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400b501010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e000800205472656173757279000900005d020c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74b501010c753332000100204672616374696f6e08010c6e6f6db501010c75333200011464656e6f6db501010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6db501010c75333200011464656e6f6db501010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6db501010c75333200011464656e6f6db501010c753332000400006102100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400c1010110753132380000002c4e6f6e46756e6769626c650400650201344173736574496e7374616e6365000100006502100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400c10101107531323800010018417272617934040040011c5b75383b20345d000200184172726179380400f101011c5b75383b20385d0003001c417272617931360400390101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040030011c5665633c75383e000600006902080c78636d5856657273696f6e65644d756c74694c6f636174696f6e00010808563204004502014476323a3a4d756c74694c6f636174696f6e0000000856330400a901014476333a3a4d756c74694c6f636174696f6e000100006d020c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d0000a501011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090971020c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144576656e7404045400011834496e76616c6964466f726d61740401286d6573736167655f69640401244d657373616765496400000480446f776e77617264206d65737361676520697320696e76616c69642058434d2e48556e737570706f7274656456657273696f6e0401286d6573736167655f69640401244d6573736167654964000104bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e404578656375746564446f776e776172640801286d6573736167655f69640401244d657373616765496400011c6f7574636f6d65a501011c4f7574636f6d65000204c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e3c5765696768744578686175737465640c01286d6573736167655f69640401244d657373616765496400014072656d61696e696e675f77656967687424011857656967687400013c72657175697265645f776569676874240118576569676874000304f054686520776569676874206c696d697420666f722068616e646c696e6720646f776e77617264206d657373616765732077617320726561636865642e484f766572776569676874456e7175657565640c01286d6573736167655f69640401244d65737361676549640001406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800013c72657175697265645f7765696768742401185765696768740004041901446f776e77617264206d657373616765206973206f76657277656967687420616e642077617320706c6163656420696e20746865206f7665727765696768742071756575652e484f76657277656967687453657276696365640801406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800012c7765696768745f75736564240118576569676874000504e0446f776e77617264206d6573736167652066726f6d20746865206f766572776569676874207175657565207761732065786563757465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909750208306672616d655f73797374656d14506861736500010c384170706c7945787472696e73696304001c010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e0002000079020000022c007d02000002c800810208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6eb501014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d658502016473705f72756e74696d653a3a52756e74696d65537472696e6700008502000005020089020c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b30011c5665633c75383e000014684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e002823203c7765696768743e202d20604f283129602c23203c2f7765696768743e387365745f686561705f7061676573040114706167657310010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646530011c5665633c75383e0002306453657420746865206e65772072756e74696d6520636f64652e002823203c7765696768743e31012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f64656045012d20312063616c6c20746f206063616e5f7365745f636f6465603a20604f28532960202863616c6c73206073705f696f3a3a6d6973633a3a72756e74696d655f76657273696f6e60207768696368206973342020657870656e73697665292e842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e4d0154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652c206275742067656e6572616c6c7920746869732069732076657279b8657870656e736976652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e2c23203c2f7765696768743e5c7365745f636f64655f776974686f75745f636865636b73040110636f646530011c5665633c75383e000324190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e002823203c7765696768743e8c2d20604f2843296020776865726520604360206c656e677468206f662060636f646560842d20312073746f726167652077726974652028636f64656320604f28432960292e402d203120646967657374206974656d2e282d2031206576656e742e550154686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652e2057652077696c6c207472656174207468697320617320612066756c6c48626c6f636b2e2023203c2f7765696768743e2c7365745f73746f726167650401146974656d738d0201345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973950201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697830010c4b657900011c7375626b6579731c010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b30011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8d020000029102009102000004083030009502000002300099020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2401185765696768740001246d61785f626c6f636b2401185765696768740001247065725f636c6173739d0201845065724469737061746368436c6173733c57656967687473506572436c6173733e00009d020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401a102000c01186e6f726d616ca10201045400012c6f7065726174696f6e616ca1020104540001246d616e6461746f7279a1020104540000a1020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632401185765696768740001346d61785f65787472696e736963a50201384f7074696f6e3c5765696768743e0001246d61785f746f74616ca50201384f7074696f6e3c5765696768743e0001207265736572766564a50201384f7074696f6e3c5765696768743e0000a50204184f7074696f6e04045401240108104e6f6e6500000010536f6d650400240000010000a9020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178ad0201545065724469737061746368436c6173733c7533323e0000ad020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454011c000c01186e6f726d616c1c01045400012c6f7065726174696f6e616c1c0104540001246d616e6461746f72791c0104540000b102082873705f776569676874733c52756e74696d65446257656967687400000801107265616410010c753634000114777269746510010c7536340000b502082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d658502013452756e74696d65537472696e67000124696d706c5f6e616d658502013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e1c010c753332000130737065635f76657273696f6e1c010c753332000130696d706c5f76657273696f6e1c010c75333200011061706973b902011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e1c010c75333200013473746174655f76657273696f6e08010875380000b902040c436f7704045401bd02000400bd02000000bd02000002c10200c10200000408f1011c00c5020c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c6574c902101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454012c045300000400790201185665633c543e0000cd020c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77280124543a3a4d6f6d656e7400004054536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e002823203c7765696768743e31012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed1020000040c0018a400d5020c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e6465780000489841737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e00dc5061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00f02d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e602d204f6e652072657365727665206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d902d204442205765696768743a203120526561642f577269746520284163636f756e7473292c23203c2f7765696768743e207472616e7366657208010c6e6577d90201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e6465780001505d0141737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6eb86973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0025012d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e642d204f6e65207472616e73666572206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743ae02020202d2052656164733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e742028726563697069656e7429e42020202d205772697465733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e742028726563697069656e74292c23203c2f7765696768743e1066726565040114696e64657810013c543a3a4163636f756e74496e646578000248944672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e005d015061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e000d012d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e0084456d6974732060496e646578467265656460206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e602d204f6e652072657365727665206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d902d204442205765696768743a203120526561642f577269746520284163636f756e7473292c23203c2f7765696768743e38666f7263655f7472616e736665720c010c6e6577d90201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65a40110626f6f6c0003545501466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c7265616479e868656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00a42d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e41012d2060667265657a65603a2069662073657420746f206074727565602c2077696c6c20667265657a652074686520696e64657820736f2069742063616e6e6f74206265207472616e736665727265642e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e782d20557020746f206f6e652072657365727665206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d302d204442205765696768743af42020202d2052656164733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e7420286f726967696e616c206f776e657229f82020202d205772697465733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e7420286f726967696e616c206f776e6572292c23203c2f7765696768743e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004484101467265657a6520616e20696e64657820736f2069742077696c6c20616c7761797320706f696e7420746f207468652073656e646572206163636f756e742e205468697320636f6e73756d657320746865206465706f7369742e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d757374206861766520616c6e6f6e2d66726f7a656e206163636f756e742060696e646578602e00ac2d2060696e646578603a2074686520696e64657820746f2062652066726f7a656e20696e20706c6163652e0088456d6974732060496e64657846726f7a656e60206966207375636365737366756c2e002823203c7765696768743e242d20604f283129602e982d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e702d20557020746f206f6e6520736c617368206f7065726174696f6e2e302d204f6e65206576656e742e4c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d902d204442205765696768743a203120526561642f577269746520284163636f756e7473292c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed9020c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801ac011408496404000001244163636f756e74496400000014496e6465780400dd0201304163636f756e74496e6465780001000c526177040030011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400110101205b75383b2032305d00040000dd02000006ac00e1020c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e502101c73705f636f72651c626f756e646564407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401e902045300000400f10201185665633c543e0000e902083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c01086964f10101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73ed02011c526561736f6e730000ed02083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000f102000002e90200f502101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401f902045300000400fd0201185665633c543e0000f902083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e74696669657201f1011c42616c616e63650118000801086964f1010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000fd02000002f9020001030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e7366657208011064657374d90201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c1010128543a3a42616c616e6365000064d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e002823203c7765696768743e61012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e842d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d11012d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e2c23203c2f7765696768743e2c7365745f62616c616e63650c010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565c1010128543a3a42616c616e63650001306e65775f7265736572766564c1010128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f75726365d90201504163636f756e7449644c6f6f6b75704f663c543e00011064657374d90201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c1010128543a3a42616c616e63650002184d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e2823203c7765696768743e4d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e2c23203c2f7765696768743e4c7472616e736665725f6b6565705f616c69766508011064657374d90201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565c1010128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374d90201504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665a40110626f6f6c00044405015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fc820206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e2023203c7765696768743e39012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e302020233c2f7765696768743e3c666f7263655f756e7265736572766508010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e05030c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090909030c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800000d03086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e74000000085632000100001103101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540115030453000004001d0301185665633c543e00001503104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c6963000004001903013c737232353531393a3a5075626c6963000019030c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d00001d030000021503002103084873705f636f6e73656e7375735f736c6f747310536c6f740000040010010c75363400002503000002000029030000022d03002d030000040800310300310308447370697269746e65745f72756e74696d652c53657373696f6e4b657973000004011061757261150301c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000035030000021c003903000004083d0330003d030c1c73705f636f72651863727970746f244b65795479706549640000040040011c5b75383b20345d000041030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579733103011c543a3a4b65797300011470726f6f6630011c5665633c75383e000038e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e002823203c7765696768743e11012d20436f6d706c65786974793a20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642eec2d20446252656164733a20606f726967696e206163636f756e74602c2060543a3a56616c696461746f7249644f66602c20604e6578744b65797360a02d2044625772697465733a20606f726967696e206163636f756e74602c20604e6578744b65797360802d204462526561647320706572206b65792069643a20604b65794f776e657260842d20446257726974657320706572206b65792069643a20604b65794f776e6572602c23203c2f7765696768743e2870757267655f6b657973000140c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e002823203c7765696768743e61012d20436f6d706c65786974793a20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468a420206f662060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642eec2d20446252656164733a2060543a3a56616c696461746f7249644f66602c20604e6578744b657973602c20606f726967696e206163636f756e7460a02d2044625772697465733a20604e6578744b657973602c20606f726967696e206163636f756e7460842d20446257726974657320706572206b65792069643a20604b65794f776e6572602c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e45030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e49030c4470617261636861696e5f7374616b696e6714747970657324526f756e64496e666f042c426c6f636b4e756d6265720110000c011c63757272656e741c013053657373696f6e496e646578000114666972737410012c426c6f636b4e756d6265720001186c656e67746810012c426c6f636b4e756d62657200004d030c4470617261636861696e5f7374616b696e671474797065734444656c65676174696f6e436f756e7465720000080114726f756e641c013053657373696f6e496e64657800011c636f756e7465721c010c753332000051030c4470617261636861696e5f7374616b696e67147479706573145374616b6508244163636f756e74496401001c42616c616e63650118000801146f776e65720001244163636f756e744964000118616d6f756e7418011c42616c616e6365000055030c4470617261636861696e5f7374616b696e671474797065732443616e6469646174650c244163636f756e74496401001c42616c616e63650118644d617844656c656761746f727350657243616e646964617465000014010869640001244163636f756e7449640001147374616b6518011c42616c616e636500012864656c656761746f727359030101014f7264657265645365743c5374616b653c4163636f756e7449642c2042616c616e63653e2c204d617844656c656761746f727350657243616e6469646174653e000114746f74616c18011c42616c616e63650001187374617475736503013c43616e646964617465537461747573000059030c4470617261636861696e5f7374616b696e670c736574284f7264657265645365740804540151030453000004005d030140426f756e6465645665633c542c20533e00005d03101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454015103045300000400610301185665633c543e0000610300000251030065030c4470617261636861696e5f7374616b696e671474797065733c43616e646964617465537461747573000108184163746976650000001c4c656176696e6704001c013053657373696f6e496e6465780001000069030c4470617261636861696e5f7374616b696e6714747970657328546f74616c5374616b65041c42616c616e6365011800080124636f6c6c61746f727318011c42616c616e636500012864656c656761746f727318011c42616c616e636500006d030c4470617261636861696e5f7374616b696e670c736574284f72646572656453657408045401510304530000040071030140426f756e6465645665633c542c20533e00007103101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454015103045300000400610301185665633c543e000075030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e34496e666c6174696f6e496e666f0000080120636f6c6c61746f727903012c5374616b696e67496e666f00012464656c656761746f727903012c5374616b696e67496e666f000079030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e2c5374616b696e67496e666f00000801206d61785f726174658c012c5065727175696e74696c6c00012c7265776172645f726174657d0301285265776172645261746500007d030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e28526577617264526174650000080118616e6e75616c8c012c5065727175696e74696c6c0001247065725f626c6f636b8c012c5065727175696e74696c6c00008103101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601180453000004008503013842547265654d61703c4b2c20563e00008503042042547265654d617008044b011004560118000400890300000089030000028d03008d030000040810180091030c4470617261636861696e5f7374616b696e671870616c6c65741043616c6c0404540001543c666f7263655f6e65775f726f756e64000018d0466f7263657320746865207374617274206f6620746865206e657720726f756e6420696e20746865206e65787420626c6f636b2e00a0546865206e657720726f756e642077696c6c20626520656e666f7263656420766961203c54206173a453686f756c64456e6453657373696f6e3c5f3e3e3a3a73686f756c645f656e645f73657373696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e347365745f696e666c6174696f6e100170636f6c6c61746f725f6d61785f726174655f70657263656e746167658c012c5065727175696e74696c6c000198636f6c6c61746f725f616e6e75616c5f7265776172645f726174655f70657263656e746167658c012c5065727175696e74696c6c00017464656c656761746f725f6d61785f726174655f70657263656e746167658c012c5065727175696e74696c6c00019c64656c656761746f725f616e6e75616c5f7265776172645f726174655f70657263656e746167658c012c5065727175696e74696c6c00013cf05365742074686520616e6e75616c20696e666c6174696f6e207261746520746f20646572697665207065722d726f756e6420696e666c6174696f6e2e00110154686520696e666c6174696f6e2064657461696c732061726520636f6e736964657265642076616c69642069662074686520616e6e75616c207265776172642072617465f0697320617070726f78696d6174656c7920746865207065722d626c6f636b207265776172642072617465206d756c7469706c69656420627920746865ac657374696d617465642a20746f74616c206e756d626572206f6620626c6f636b732070657220796561722e00cc54686520657374696d61746564206176657261676520626c6f636b2074696d65206973207477656c7665207365636f6e64732e000d014e4f54453a204974657261746573206f7665722043616e646964617465506f6f6c20616e6420666f7220656163682063616e646964617465206f766572207468656972090164656c656761746f727320746f207570646174652074686569722072657761726473206265666f72652074686520726577617264207261746573206368616e67652ee04e6565647320746f20626520696d70726f766564207768656e207363616c696e6720757020604d6178546f7043616e64696461746573602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0068456d6974732060526f756e64496e666c6174696f6e536574602e6c7365745f6d61785f73656c65637465645f63616e6469646174657304010c6e65771c010c75333200022c090153657420746865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e6469646174657320746861742063616e2062652073656c6563746564a861742074686520626567696e6e696e67206f6620656163682076616c69646174696f6e20726f756e642e00e84368616e67657320617265206e6f74206170706c69656420756e74696c20746865207374617274206f6620746865206e65787420726f756e642e000d01546865206e65772076616c7565206d75737420626520686967686572207468616e20746865206d696e696d756d20616c6c6f7765642061732073657420696e207468655c70616c6c6574277320636f6e66696775726174696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0084456d69747320604d617853656c656374656443616e64696461746573536574602e507365745f626c6f636b735f7065725f726f756e6404010c6e6577100138543a3a426c6f636b4e756d62657200032cd453657420746865206e756d626572206f6620626c6f636b7320656163682076616c69646174696f6e20726f756e64206c617374732e000901496620746865206e65772076616c7565206973206c657373207468616e20746865206c656e677468206f66207468652063757272656e7420726f756e642c20746865050173797374656d2077696c6c20696d6d6564696174656c79206d6f766520746f20746865206e65787420726f756e6420696e20746865206e65787420626c6f636b2e000d01546865206e65772076616c7565206d75737420626520686967686572207468616e20746865206d696e696d756d20616c6c6f7765642061732073657420696e207468655c70616c6c6574277320636f6e66696775726174696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0068456d6974732060426c6f636b73506572526f756e64536574602e5c7365745f6d61785f63616e6469646174655f7374616b6504010c6e657718013042616c616e63654f663c543e000418110153657420746865206d6178696d616c20616d6f756e74206120636f6c6c61746f722063616e207374616b652e204578697374696e67207374616b657320617265206e6f74206368616e6765642e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0084456d69747320604d617843616e6469646174655374616b654368616e676564602e58666f7263655f72656d6f76655f63616e646964617465040120636f6c6c61746f72d902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650005300101466f726365646c792072656d6f766573206120636f6c6c61746f722063616e6469646174652066726f6d2074686520546f7043616e6469646174657320616e64e4636c6561727320616c6c206173736f6369617465642073746f7261676520666f72207468652063616e64696461746520616e642074686569722c64656c656761746f72732e00fc507265706172657320756e7374616b696e67206f66207468652063616e6469646174657320616e642074686569722064656c656761746f7273207374616b65f077686963682063616e20626520756e6c6f636b6564207669612060756e6c6f636b5f756e7374616b6564602061667465722077616974696e6720617409016c6561737420605374616b654475726174696f6e60206d616e7920626c6f636b732e20416c736f20696e6372656d656e7473207265776172647320666f722074686578636f6c6c61746f7220616e642074686569722064656c656761746f72732e00d4496e6372656d656e74732072657761726473206f662063616e64696461746520616e642074686569722064656c656761746f72732e0064456d697473206043616e64696461746552656d6f766564602e3c6a6f696e5f63616e646964617465730401147374616b6518013042616c616e63654f663c543e000644904a6f696e2074686520736574206f6620636f6c6c61746f722063616e646964617465732e00f8496e20746865206e65787420626c6f636b732c2069662074686520636f6c6c61746f722063616e6469646174652068617320656e6f7567682066756e6473fc7374616b656420746f20626520696e636c7564656420696e20616e79206f662074686520746f7020604d617853656c656374656443616e64696461746573600d01706f736974696f6e732c2069742077696c6c20626520696e636c7564656420696e2074686520736574206f6620706f74656e7469616c20617574686f72732074686174050177696c6c2062652073656c656374656420627920746865207374616b652d77656967687465642072616e646f6d2073656c656374696f6e2066756e6374696f6e2e00fc546865207374616b65642066756e6473206f6620746865206e657720636f6c6c61746f722063616e6469646174652061726520616464656420746f2074686568746f74616c207374616b65206f66207468652073797374656d2e00110154686520746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e2074686520616c6c6f7765642072616e67652061738873657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e00f0546865206469737061746368206f726967696e206d757374206e6f7420626520616c72656164792070617274206f662074686520636f6c6c61746f729463616e64696461746573206e6f72206f66207468652064656c656761746f7273207365742e0084456d69747320604a6f696e6564436f6c6c61746f7243616e64696461746573602e54696e69745f6c656176655f63616e6469646174657300076cc05265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e0005014f6e20737563636573732c20746865206163636f756e7420697320696d6d6564696174656c792072656d6f7665642066726f6d207468652063616e6469646174651101706f6f6c20746f2070726576656e742073656c656374696f6e206173206120636f6c6c61746f7220696e206675747572652076616c69646174696f6e20726f756e64732cd862757420756e7374616b696e67206f66207468652066756e6473206973206578656375746564207769746820612064656c6179206f665c605374616b654475726174696f6e6020626c6f636b732e00ac546865206578697420726571756573742063616e2062652072657665727365642062792063616c6c696e67686063616e63656c5f6c656176655f63616e64696461746573602e00f454686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e204974206973110175706461746564206576656e2074686f756768207468652066756e6473206f66207468652063616e6469646174652077686f207369676e616c656420746f206c65617665fc617265207374696c6c206c6f636b656420666f7220604578697444656c617960202b20605374616b654475726174696f6e60206d6f726520626c6f636b732e000d014e4f544520313a2055706f6e207374617274696e672061206e65772073657373696f6e5f6920696e20606e65775f73657373696f6e602c207468652063757272656e741101746f702063616e64696461746573206172652073656c656374656420746f20626520626c6f636b20617574686f727320666f722073657373696f6e5f692b312e20416e7905016368616e67657320746f2074686520746f702063616e64696461746573206166746572776172647320646f206e6f74206566666563742074686520736574206f6660617574686f727320666f722073657373696f6e5f692b312ed8546875732c207765206861766520746f206d616b652073757265206e6f6e65206f6620746865736520636f6c6c61746f72732063616ebc6c65617665206265666f72652073657373696f6e5f692b3120656e64732062792064656c6179696e67207468656972846578697420666f7220604578697444656c617960206d616e7920626c6f636b732e00f04e4f544520323a20576520646f206e6f7420696e6372656d656e74207265776172647320696e20746869732065787472696e73696320617320746865110163616e64696461746520636f756c64207374696c6c20617574686f7220626c6f636b732c20616e64207468757320626520656c696769626c6520746f2072656365697665ac726577617264732c20756e74696c2074686520656e64206f6620746865206e6578742073657373696f6e2e0078456d6974732060436f6c6c61746f725363686564756c656445786974602e60657865637574655f6c656176655f63616e64696461746573040120636f6c6c61746f72d902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500084405014578656375746520746865206e6574776f726b2065786974206f6620612063616e6469646174652077686f2072657175657374656420746f206c65617665206174f06c65617374206045786974517565756544656c61796020726f756e64732061676f2e20507265706172657320756e7374616b696e67206f6620746865fc63616e6469646174657320616e642074686569722064656c656761746f7273207374616b652077686963682063616e20626520756e6c6f636b656420766961f460756e6c6f636b5f756e7374616b6564602061667465722077616974696e67206174206c6561737420605374616b654475726174696f6e60206d616e791c626c6f636b732e00c05265717569726573207468652063616e64696461746520746f2070726576696f75736c7920686176652063616c6c65646060696e69745f6c656176655f63616e64696461746573602e00ac546865206578697420726571756573742063616e2062652072657665727365642062792063616c6c696e67686063616e63656c5f6c656176655f63616e64696461746573602e00fc4e4f54453a204974657261746573206f7665722043616e646964617465506f6f6c20666f7220656163682063616e646964617465206f766572207468656972fc64656c656761746f727320746f2073657420726577617264732e204e6565647320746f20626520696d70726f766564207768656e207363616c696e672075704c604d6178546f7043616e64696461746573602e0054456d6974732060436f6c6c61746f724c656674602e5c63616e63656c5f6c656176655f63616e646964617465730009200501526576657274207468652070726576696f75736c79207265717565737465642065786974206f6620746865206e6574776f726b206f66206120636f6c6c61746f720d0163616e6469646174652e204f6e20737563636573732c2061646473206261636b207468652063616e64696461746520746f2074686520546f7043616e6469646174657368616e6420757064617465732074686520636f6c6c61746f72732e00c05265717569726573207468652063616e64696461746520746f2070726576696f75736c7920686176652063616c6c65646060696e69745f6c656176655f63616e64696461746573602e0074456d6974732060436f6c6c61746f7243616e63656c656445786974602e5063616e6469646174655f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000a30a85374616b65206d6f72652066756e647320666f72206120636f6c6c61746f722063616e6469646174652e0001014966206e6f7420696e2074686520736574206f662063616e646964617465732c207374616b696e6720656e6f7567682066756e647320616c6c6f77732074686505016163636f756e7420746f20626520616464656420746f2069742e20546865206c617267657220616d6f756e74206f662066756e64732c2074686520686967686572dc6368616e63657320746f2062652073656c65637465642061732074686520617574686f72206f6620746865206e65787420626c6f636b2e00dc54686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e006c456d6974732060436f6c6c61746f725374616b65644d6f7265602e5063616e6469646174655f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000b3ca85374616b65206c6573732066756e647320666f72206120636f6c6c61746f722063616e6469646174652e000501496620746865206e657720616d6f756e74206f66207374616b65642066756e64206973206e6f74206c6172676520656e6f7567682c20746865206163636f756e74fc636f756c642062652072656d6f7665642066726f6d2074686520736574206f6620636f6c6c61746f722063616e6469646174657320616e64206e6f74206265a4636f6e7369646572656420666f7220617574686f72696e6720746865206e65787420626c6f636b732e00dc54686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e000d0154686520756e7374616b65642066756e647320617265206e6f742072656c656173656420696d6d6564696174656c7920746f20746865206163636f756e742c20627574d0746865792077696c6c20626520617661696c61626c6520616674657220605374616b654475726174696f6e6020626c6f636b732e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e006c456d6974732060436f6c6c61746f725374616b65644c657373602e3c6a6f696e5f64656c656761746f7273080120636f6c6c61746f72d902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e7418013042616c616e63654f663c543e000c5805014a6f696e2074686520736574206f662064656c656761746f72732062792064656c65676174696e6720746f206120636f6c6c61746f722063616e6469646174652e000501546865206163636f756e7420746861742077616e747320746f2064656c65676174652063616e6e6f742062652070617274206f662074686520636f6c6c61746f725c63616e64696461746573207365742061732077656c6c2e0009015468652063616c6c6572206d757374205f6e6f745f206861766520612064656c65676174696f6e2e20496620746861742069732074686520636173652c2074686579b061726520726571756972656420746f2066697273742072656d6f7665207468652064656c65676174696f6e2e00110154686520616d6f756e74207374616b6564206d757374206265206c6172676572207468616e20746865206d696e696d756d20726571756972656420746f206265636f6d65c4612064656c656761746f722061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e0009014173206f6e6c7920604d617844656c656761746f7273506572436f6c6c61746f72602061726520616c6c6f77656420746f2064656c6567617465206120676976656e0501636f6c6c61746f722c2074686520616d6f756e74207374616b6564206d757374206265206c6172676572207468616e20746865206c6f77657374206f6e6520696e01017468652063757272656e7420736574206f662064656c656761746f7220666f7220746865206f7065726174696f6e20746f206265206d65616e696e6766756c2e00090154686520636f6c6c61746f72277320746f74616c207374616b652061732077656c6c206173207468652070616c6c6574277320746f74616c207374616b652061726558696e63726561736564206163636f7264696e676c792e004c456d697473206044656c65676174696f6e602ebc456d697473206044656c65676174696f6e5265706c6163656460206966207468652063616e64696461746520686173f8604d617844656c656761746f7273506572436f6c6c61746f7260206d616e792064656c65676174696f6e732062757420746869732064656c656761746f72fc7374616b6564206d6f7265207468616e206f6e65206f6620746865206f746865722064656c656761746f7273206f6620746869732063616e6469646174652e406c656176655f64656c656761746f7273000d400d014c656176652074686520736574206f662064656c656761746f727320616e642c20627920696d706c69636174696f6e2c207265766f6b6520746865206f6e676f696e672c64656c65676174696f6e2e001101416c6c207374616b65642066756e647320617265206e6f7420756e6c6f636b656420696d6d6564696174656c792c2062757420746865792061726520616464656420746f0101746865207175657565206f662070656e64696e6720756e7374616b696e672c20616e642077696c6c206566666563746976656c792062652072656c65617365640901616674657220605374616b654475726174696f6e6020626c6f636b732066726f6d20746865206d6f6d656e74207468652064656c656761746f72206c65617665732e000d0154686973206f7065726174696f6e20726564756365732074686520746f74616c207374616b65206f66207468652070616c6c65742061732077656c6c2061732074686509017374616b6573206f6620616c6c20636f6c6c61746f7273207468617420776572652064656c6567617465642c20706f74656e7469616c6c7920616666656374696e6705017468656972206368616e63657320746f20626520696e636c7564656420696e2074686520736574206f662063616e6469646174657320696e20746865206e6578741c726f756e64732e0005014175746f6d61746963616c6c7920696e6372656d656e74732074686520616363756d756c617465642072657761726473206f6620746865206f726967696e206f665c7468652063757272656e742064656c65676174696f6e2e0058456d697473206044656c656761746f724c656674602e5064656c656761746f725f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000e18dc496e63726561736520746865207374616b6520666f722064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e0001014966206e6f7420696e2074686520736574206f662063616e646964617465732c207374616b696e6720656e6f7567682066756e647320616c6c6f77732074686594636f6c6c61746f722063616e64696461746520746f20626520616464656420746f2069742e0070456d697473206044656c656761746f725374616b65644d6f7265602e5064656c656761746f725f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000f40d452656475636520746865207374616b6520666f722064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e000901496620746865206e657720616d6f756e74206f66207374616b65642066756e64206973206e6f74206c6172676520656e6f7567682c2074686520636f6c6c61746f72fc636f756c642062652072656d6f7665642066726f6d2074686520736574206f6620636f6c6c61746f722063616e6469646174657320616e64206e6f74206265a4636f6e7369646572656420666f7220617574686f72696e6720746865206e65787420626c6f636b732e00090154686520756e7374616b65642066756e647320617265206e6f742072656c6561736520696d6d6564696174656c7920746f20746865206163636f756e742c20627574d0746865792077696c6c20626520617661696c61626c6520616674657220605374616b654475726174696f6e6020626c6f636b732e0001015468652072656d61696e696e67207374616b65642066756e6473206d757374207374696c6c206265206c6172676572207468616e20746865206d696e696d756df0726571756972656420627920746869732070616c6c657420746f206d61696e7461696e2074686520737461747573206f662064656c656761746f722e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e0070456d697473206044656c656761746f725374616b65644c657373602e3c756e6c6f636b5f756e7374616b6564040118746172676574d902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365001028f4556e6c6f636b20616c6c2070726576696f75736c79207374616b65642066756e6473207468617420617265206e6f7720617661696c61626c6520666f720501756e6c6f636b696e6720627920746865206f726967696e206163636f756e7420616674657220605374616b654475726174696f6e6020626c6f636b73206861766520656c61707365642e00fc5765696768743a204f285529207768657265205520697320746865206e756d626572206f66206c6f636b656420756e7374616b696e6720726571756573747380626f756e64656420627920604d6178556e7374616b655265717565737473602eac2d2052656164733a205b4f726967696e204163636f756e745d2c20556e7374616b696e672c204c6f636b73682d205772697465733a20556e7374616b696e672c204c6f636b73e82d204b696c6c733a20556e7374616b696e672026204c6f636b73206966206e6f2062616c616e6365206973206c6f636b656420616e796d6f72652c23203c2f7765696768743e34636c61696d5f7265776172647300113cd4436c61696d20626c6f636b20617574686f72696e67207265776172647320666f72207468652074617267657420616464726573732e00090152657175697265732060526577617264736020746f20626520736574206265666f726568616e642c2077686963682063616e2062792074726967676572656420627970616e79206f662074686520666f6c6c6f77696e67206f7074696f6e73e82a2043616c6c696e6720696e6372656d656e745f7b636f6c6c61746f722c2064656c656761746f727d5f72657761726473202861637469766529782a20416c746572696e6720796f7572207374616b65202861637469766529b02a204c656176696e6720746865206e6574776f726b206173206120636f6c6c61746f72202861637469766529bc2a205265766f6b696e6720612064656c65676174696f6e20617320612064656c656761746f7220286163746976652909012a204265696e6720612064656c656761746f722077686f736520636f6c6c61746f72206c65667420746865206e6574776f726b2c20616c7465726564207468656972a020207374616b65206f7220696e6372656d656e746564207265776172647320287061737369766529000501546865206469737061746368206f726967696e2063616e20626520616e79207369676e6564206f6e652c20652e672e2c20616e796f6e652063616e20636c61696d2c666f7220616e796f6e652e0044456d69747320605265776172646564602e68696e6372656d656e745f636f6c6c61746f725f72657761726473001218b44163746976656c7920696e6372656d656e74207468652072657761726473206f66206120636f6c6c61746f722e0005015468652073616d652065666665637420697320747269676765726564206279206368616e67696e6720746865207374616b65206f72206c656176696e6720746865206e6574776f726b2e009c546865206469737061746368206f726967696e206d757374206265206120636f6c6c61746f722e6c696e6372656d656e745f64656c656761746f725f72657761726473001318b84163746976656c7920696e6372656d656e74207468652072657761726473206f6620612064656c656761746f722e00f85468652073616d652065666665637420697320747269676765726564206279206368616e67696e6720746865207374616b65206f72207265766f6b696e673064656c65676174696f6e732e00a0546865206469737061746368206f726967696e206d75737420626520612064656c656761746f722e7c657865637574655f7363686564756c65645f7265776172645f6368616e67650014280d0145786563757465732074686520616e6e75616c20726564756374696f6e206f66207468652072657761726420726174657320666f7220636f6c6c61746f727320616e642c64656c656761746f72732e00dc4d6f72656f7665722c2073657473207265776172647320666f7220616c6c20636f6c6c61746f727320616e642064656c656761746f72737c6265666f72652061646a757374696e672074686520696e666c6174696f6e2e000d01546865206469737061746368206f726967696e2063616e20626520616e79207369676e6564206f6e652062656361757365207765206261696c2069662063616c6c656428746f6f206561726c792e0068456d6974732060526f756e64496e666c6174696f6e536574602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e95030c4470617261636861696e5f7374616b696e671870616c6c6574144572726f7204045400017c4444656c656761746f724e6f74466f756e64000004b8546865206163636f756e74206973206e6f742070617274206f66207468652064656c656761746f7273207365742e4443616e6469646174654e6f74466f756e64000104dc546865206163636f756e74206973206e6f742070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3c44656c656761746f72457869737473000204c8546865206163636f756e7420697320616c72656164792070617274206f66207468652064656c656761746f7273207365742e3c43616e646964617465457869737473000304ec546865206163636f756e7420697320616c72656164792070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3056616c5374616b655a65726f000404e4546865206163636f756e7420747269656420746f207374616b65206d6f7265206f72206c657373207769746820616d6f756e74207a65726f2e4056616c5374616b6542656c6f774d696e0005080d01546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f20626520616464656420746f2074686520636f6c6c61746f723c63616e64696461746573207365742e4056616c5374616b6541626f76654d61780006041101546865206163636f756e742068617320616c7265616479207374616b656420746865206d6178696d756d20616d6f756e74206f662066756e647320706f737369626c652e4844656c65676174696f6e42656c6f774d696e000708f8546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f2064656c6567617465206120636f6c6c61746f722863616e6469646174652e38416c72656164794c656176696e670008080d0154686520636f6c6c61746f722063616e6469646174652068617320616c72656164792074726967676572207468652070726f6365737320746f206c65617665207468656c736574206f6620636f6c6c61746f722063616e646964617465732e284e6f744c656176696e67000908f454686520636f6c6c61746f722063616e6469646174652077616e74656420746f20657865637574652074686520657869742062757420686173206e6f74f472657175657374656420746f206c65617665206265666f72652062792063616c6c696e672060696e69745f6c656176655f63616e64696461746573602e3843616e6e6f744c65617665596574000a08dc54686520636f6c6c61746f7220747269656420746f206c65617665206265666f72652077616974696e67206174206c6561737420666f72746045786974517565756544656c617960206d616e7920726f756e64732e6443616e6e6f744a6f696e4265666f7265556e6c6f636b696e67000b10f8546865206163636f756e742068617320612066756c6c206c697374206f6620756e7374616b696e6720726571756573747320616e64206e6565647320746ffc756e6c6f636b206174206c65617374206f6e65206f66207468657365206265666f7265206265696e672061626c6520746f206a6f696e2028616761696e292edc4e4f54453a2043616e206f6e6c792068617070656e20696620746865206163636f756e742077617320612063616e646964617465206f72f464656c656761746f72206265666f726520616e642065697468657220676f74206b69636b6564206f722065786974656420766f6c756e746172696c792e44416c726561647944656c65676174696e67000c04e4546865206163636f756e7420697320616c72656164792064656c65676174696e672074686520636f6c6c61746f722063616e6469646174652e404e6f7459657444656c65676174696e67000d080901546865206163636f756e7420686173206e6f742064656c65676174656420616e7920636f6c6c61746f722063616e646964617465207965742c2068656e6365206974806973206e6f7420696e2074686520736574206f662064656c656761746f72732e6c44656c65676174696f6e73506572526f756e644578636565646564000e1811015468652064656c656761746f722068617320657863656564656420746865206e756d626572206f662064656c65676174696f6e732070657220726f756e6420776869636894697320657175616c20746f204d617844656c656761746f7273506572436f6c6c61746f722e000901546869732070726f746563747320616761696e73742061747461636b7320696e20776869636820612064656c656761746f722063616e2072652d64656c6567617465010166726f6d206120636f6c6c61746f722077686f2068617320616c726561647920617574686f726564206120626c6f636b2c20746f20616e6f74686572206f6e6570776869636820686173206e6f7420696e207468697320726f756e642e44546f6f4d616e7944656c656761746f7273000f14010154686520636f6c6c61746f722063616e6469646174652068617320616c7265616479207265616368656420746865206d6178696d756d206e756d626572206f662c64656c656761746f72732e00050154686973206572726f722069732067656e65726174656420696e20636173652061206e65772064656c65676174696f6e207265717565737420646f6573206e6f74f47374616b6520656e6f7567682066756e647320746f207265706c61636520736f6d65206f74686572206578697374696e672064656c65676174696f6e2e60546f6f466577436f6c6c61746f7243616e64696461746573001008110154686520736574206f6620636f6c6c61746f722063616e6469646174657320776f756c642066616c6c2062656c6f7720746865207265717569726564206d696e696d756d5469662074686520636f6c6c61746f72206c6566742e5043616e6e6f745374616b6549664c656176696e67001108f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66010163616e6469646174657320616e642063616e6e6f7420706572666f726d20616e79206f7468657220616374696f6e7320696e20746865206d65616e74696d652e5c43616e6e6f7444656c656761746549664c656176696e67001208f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66ac63616e6469646174657320616e6420746875732063616e6e6f742062652064656c65676174656420746f2e804d6178436f6c6c61746f727350657244656c656761746f72457863656564656400130811015468652064656c656761746f722068617320616c72656164792064656c65676174656420746865206d6178696d756d206e756d626572206f662063616e6469646174657320616c6c6f7765642e60416c726561647944656c656761746564436f6c6c61746f72001408ec5468652064656c656761746f722068617320616c72656164792070726576696f75736c792064656c6567617465642074686520636f6c6c61746f722863616e6469646174652e4844656c65676174696f6e4e6f74466f756e64001504f854686520676976656e2064656c65676174696f6e20646f6573206e6f7420657869737420696e2074686520736574206f662064656c65676174696f6e732e24556e646572666c6f77001608050154686520636f6c6c61746f722064656c6567617465206f72207468652064656c656761746f7220697320747279696e6720746f20756e2d7374616b65206d6f72658066756e64732074686174206172652063757272656e746c79207374616b65642e4443616e6e6f7453657441626f76654d6178001708d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738061626f766520746865206d6178696d756d2076616c756520616c6c6f7765642e4443616e6e6f7453657442656c6f774d696e001808d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738062656c6f7720746865206d696e696d756d2076616c756520616c6c6f7765642e3c496e76616c69645363686564756c65001904dc416e20696e76616c696420696e666c6174696f6e20636f6e66696775726174696f6e20697320747279696e6720746f206265207365742e3c4e6f4d6f7265556e7374616b696e67001a08c4546865207374616b696e6720726577617264206265696e6720756e6c6f636b656420646f6573206e6f742065786973742e7c4d617820756e6c6f636b696e6720726571756573747320726561636865642e20546f6f4561726c79001b0801015468652072657761726420726174652063616e6e6f742062652061646a75737465642079657420617320616e20656e74697265207965617220686173206e6f741c7061737365642e345374616b654e6f74466f756e64001c04d850726f7669646564207374616b65642076616c7565206973207a65726f2e2053686f756c64206e65766572206265207468726f776e2e40556e7374616b696e674973456d707479001d049443616e6e6f7420756e6c6f636b207768656e20556e7374616b656420697320656d7074792e3c526577617264734e6f74466f756e64001e047843616e6e6f7420636c61696d207265776172647320696620656d7074792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909099903101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454019d03045300000400590501185665633c543e00009d030000040c1ca1030000a10310346672616d655f737570706f72741874726169747324707265696d616765731c426f756e64656404045401a503010c184c6567616379040110686173682c01104861736800000018496e6c696e65040085010134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173682c01104861736800010c6c656e1c010c75333200020000a50308447370697269746e65745f72756e74696d652c52756e74696d6543616c6c0001741853797374656d0400890201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400cd0201b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c496e64696365730400d50201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e0005002042616c616e6365730400010301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0006001c53657373696f6e0400410301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0016004050617261636861696e5374616b696e670400910301d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e5374616b696e672c2052756e74696d653e0015002444656d6f63726163790400a90301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e001e001c436f756e63696c0400b50301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e001f0048546563686e6963616c436f6d6d69747465650400c50301dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465652c2052756e74696d653e0020004c546563686e6963616c4d656d626572736869700400c90301e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c4d656d626572736869702c2052756e74696d653e0022002054726561737572790400cd0301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e0023001c5574696c6974790400d10301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e0028001c56657374696e670400f90301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e002900245363686564756c65720400010401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e002a001450726f78790400090401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002b0020507265696d6167650400110401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e002c0038546970734d656d626572736869700400150401cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970734d656d626572736869702c2052756e74696d653e002d0010546970730400190401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970732c2052756e74696d653e002e0014437479706504001d0401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43747970652c2052756e74696d653e003d002c4174746573746174696f6e0400210401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4174746573746174696f6e2c2052756e74696d653e003e002844656c65676174696f6e0400350401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656c65676174696f6e2c2052756e74696d653e003f000c4469640400510401a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469642c2052756e74696d653e004000244469644c6f6f6b75700400a50401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469644c6f6f6b75702c2052756e74696d653e00430024576562334e616d65730400b50401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c576562334e616d65732c2052756e74696d653e004400445075626c696343726564656e7469616c730400b90401d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5075626c696343726564656e7469616c732c2052756e74696d653e0045003c50617261636861696e53797374656d0400c90401d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0050002458636d7051756575650400fd0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e0052002c506f6c6b61646f7458636d0400010501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e00530020446d7051756575650400550501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446d7051756575652c2052756e74696d653e00550000a9030c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c0404540001481c70726f706f736508012070726f706f73616ca1030140426f756e64656443616c6c4f663c543e00011476616c7565c101013042616c616e63654f663c543e0000249c50726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e001501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737480686176652066756e647320746f20636f76657220746865206465706f7369742e00d42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e15012d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e0044456d697473206050726f706f736564602e187365636f6e6404012070726f706f73616cb501012450726f70496e646578000118b45369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e64657211016d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e00c82d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e10766f74650801247265665f696e646578b501013c5265666572656e64756d496e646578000110766f74659801644163636f756e74566f74653c42616c616e63654f663c543e3e00021c3101566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3bb86f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00dc2d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e842d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e40656d657267656e63795f63616e63656c0401247265665f696e6465781c013c5265666572656e64756d496e6465780003204d015363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d652c7265666572656e64756d2e00f8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e00d02d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e003c5765696768743a20604f283129602e4065787465726e616c5f70726f706f736504012070726f706f73616ca1030140426f756e64656443616c6c4f663c543e0004182d015363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c2c7265666572656e64756d2e00e8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616ca1030140426f756e64656443616c6c4f663c543e00052c55015363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c655c616e2065787465726e616c207265666572656e64756d2e00ec546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f283129606065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616ca1030140426f756e64656443616c6c4f663c543e00062c45015363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f807363686564756c6520616e2065787465726e616c207265666572656e64756d2e00e8546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f2831296028666173745f747261636b0c013470726f706f73616c5f686173682c011048323536000134766f74696e675f706572696f64100138543a3a426c6f636b4e756d62657200011464656c6179100138543a3a426c6f636b4e756d6265720007404d015363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c65646101696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e65e8627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e00d0546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e00f42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e5d012d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f88094d75737420626520616c776179732067726561746572207468616e207a65726f2e350109466f72206046617374547261636b4f726967696e60206d75737420626520657175616c206f722067726561746572207468616e206046617374547261636b566f74696e67506572696f64602e51012d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265b82020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e0040456d697473206053746172746564602e00385765696768743a20604f28312960347665746f5f65787465726e616c04013470726f706f73616c5f686173682c011048323536000824b85665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e00d8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e002d012d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e003c456d69747320605665746f6564602e00fc5765696768743a20604f2856202b206c6f6728562929602077686572652056206973206e756d626572206f6620606578697374696e67207665746f657273604463616e63656c5f7265666572656e64756d0401247265665f696e646578b501013c5265666572656e64756d496e64657800091c5052656d6f76652061207265666572656e64756d2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e00d42d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e004423205765696768743a20604f283129602e2064656c65676174650c0108746fd90201504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6ead030128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a50390144656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e742e0055015468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f7220746865c874696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a7420202d2062652064656c65676174696e6720616c72656164793b206f72590120202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f7665642f636f6e736f6c69646174656494202020207468726f7567682060726561705f766f746560206f722060756e766f746560292e0045012d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e55012d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e20746865410120206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e61012d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d757374206e6f74b420206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e0048456d697473206044656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e28756e64656c6567617465000b30cc556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e742e005d01546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f64dc6f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e20776173206973737565642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062655463757272656e746c792064656c65676174696e672e0050456d6974732060556e64656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e58636c6561725f7075626c69635f70726f706f73616c73000c1470436c6561727320616c6c207075626c69632070726f706f73616c732e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e003c5765696768743a20604f283129602e18756e6c6f636b040118746172676574d90201504163636f756e7449644c6f6f6b75704f663c543e000d1ca0556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00b82d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e00bc5765696768743a20604f2852296020776974682052206e756d626572206f6620766f7465206f66207461726765742e2c72656d6f76655f766f7465040114696e6465781c013c5265666572656e64756d496e646578000e6c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e000c49663a882d20746865207265666572656e64756d207761732063616e63656c6c65642c206f727c2d20746865207265666572656e64756d206973206f6e676f696e672c206f72902d20746865207265666572656e64756d2068617320656e64656420737563682074686174fc20202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f72d420202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f728420202d20746865206163636f756e74206d61646520612073706c697420766f74655d012e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72655866756e6473206265696e6720617661696c61626c652e00a849662c20686f77657665722c20746865207265666572656e64756d2068617320656e64656420616e643aec2d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64dc2d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64bc2d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f76657259012e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c766559012a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756de46f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e004901546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465887265676973746572656420666f72207265666572656e64756d2060696e646578602e00f42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e4472656d6f76655f6f746865725f766f7465080118746172676574d90201504163636f756e7449644c6f6f6b75704f663c543e000114696e6465781c013c5265666572656e64756d496e646578000f3c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e004d0149662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f2d016072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c5501656974686572206265636175736520746865207265666572656e64756d207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f737420746865207265666572656e64756d206f7298626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e004d012d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f725420207265666572656e64756d2060696e646578602ef42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e24626c61636b6c69737408013470726f706f73616c5f686173682c01104832353600013c6d617962655f7265665f696e646578b103015c4f7074696f6e3c5265666572656e64756d496e6465783e00103c45015065726d616e656e746c7920706c61636520612070726f706f73616c20696e746f2074686520626c61636b6c6973742e20546869732070726576656e74732069742066726f6d2065766572206265696e673c70726f706f73656420616761696e2e00510149662063616c6c6564206f6e206120717565756564207075626c6963206f722065787465726e616c2070726f706f73616c2c207468656e20746869732077696c6c20726573756c7420696e206974206265696e67510172656d6f7665642e2049662074686520607265665f696e6465786020737570706c69656420697320616e20616374697665207265666572656e64756d2077697468207468652070726f706f73616c20686173682c687468656e2069742077696c6c2062652063616e63656c6c65642e00ec546865206469737061746368206f726967696e206f6620746869732063616c6c206d7573742062652060426c61636b6c6973744f726967696e602e00f82d206070726f706f73616c5f68617368603a205468652070726f706f73616c206861736820746f20626c61636b6c697374207065726d616e656e746c792e45012d20607265665f696e646578603a20416e206f6e676f696e67207265666572656e64756d2077686f73652068617368206973206070726f706f73616c5f68617368602c2077686963682077696c6c2062652863616e63656c6c65642e0041015765696768743a20604f28702960202874686f756768206173207468697320697320616e20686967682d70726976696c6567652064697370617463682c20776520617373756d65206974206861732061502020726561736f6e61626c652076616c7565292e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578b501012450726f70496e64657800111c4852656d6f766520612070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c50726f706f73616c4f726967696e602e00d02d206070726f705f696e646578603a2054686520696e646578206f66207468652070726f706f73616c20746f2063616e63656c2e00e45765696768743a20604f28702960207768657265206070203d205075626c696350726f70733a3a3c543e3a3a6465636f64655f6c656e282960042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ead030c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000b10304184f7074696f6e040454011c0108104e6f6e6500000010536f6d6504001c0000010000b5030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c08045400044900011c2c7365745f6d656d626572730c012c6e65775f6d656d62657273250301445665633c543a3a4163636f756e7449643e0001147072696d65b90301504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e741c012c4d656d626572436f756e74000080805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e0054526571756972657320726f6f74206f726967696e2e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e002823203c7765696768743e24232320576569676874502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e64656429142d2044423a510120202d20312073746f72616765206d75746174696f6e2028636f64656320604f284d296020726561642c20604f284e29602077726974652920666f722072656164696e6720616e642077726974696e67207468652c202020206d656d62657273ec20202d20312073746f7261676520726561642028636f64656320604f285029602920666f722072656164696e67207468652070726f706f73616c73450120202d206050602073746f72616765206d75746174696f6e732028636f64656320604f284d29602920666f72207570646174696e672074686520766f74657320666f7220656163682070726f706f73616c5d0120202d20312073746f726167652077726974652028636f64656320604f283129602920666f722064656c6574696e6720746865206f6c6420607072696d656020616e642073657474696e6720746865206e6577206f6e652c23203c2f7765696768743e1c6578656375746508012070726f706f73616ca503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64b501010c75333200012cf0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e002823203c7765696768743e2423232057656967687455012d20604f284d202b2050296020776865726520604d60206d656d626572732d636f756e742028636f64652d626f756e6465642920616e642060506020636f6d706c6578697479206f66206469737061746368696e673020206070726f706f73616c60d42d2044423a203120726561642028636f64656320604f284d296029202b20444220616363657373206f66206070726f706f73616c60242d2031206576656e742c23203c2f7765696768743e1c70726f706f73650c01247468726573686f6c64b501012c4d656d626572436f756e7400012070726f706f73616ca503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64b501010c75333200026cf84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e002823203c7765696768743e24232320576569676874ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d20326029142d2044423ab420202d20312073746f726167652072656164206069735f6d656d626572602028636f64656320604f284d296029f020202d20312073746f726167652072656164206050726f706f73616c4f663a3a636f6e7461696e735f6b6579602028636f64656320604f2831296029a820202d20444220616363657373657320696e666c75656e63656420627920607468726573686f6c64603a0901202020202d204549544845522073746f7261676520616363657373657320646f6e65206279206070726f706f73616c602028607468726573686f6c64203c20326029b8202020202d204f522070726f706f73616c20696e73657274696f6e2028607468726573686f6c64203c3d20326029d82020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c73602028636f64656320604f285032296029e42020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c436f756e74602028636f64656320604f2831296029cc2020202020202d20312073746f72616765207772697465206050726f706f73616c4f66602028636f64656320604f2842296029bc2020202020202d20312073746f726167652077726974652060566f74696e67602028636f64656320604f284d2960292c20202d2031206576656e742c23203c2f7765696768743e10766f74650c012070726f706f73616c2c011c543a3a48617368000114696e646578b501013450726f706f73616c496e64657800011c617070726f7665a40110626f6f6c00033cf041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e2823203c7765696768743e2423232057656967687409012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429142d2044423aac20202d20312073746f72616765207265616420604d656d62657273602028636f64656320604f284d296029b820202d20312073746f72616765206d75746174696f6e2060566f74696e67602028636f64656320604f284d296029242d2031206576656e742c23203c2f7765696768743e40636c6f73655f6f6c645f77656967687410013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578b501013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e64bd0301244f6c645765696768740001306c656e6774685f626f756e64b501010c7533320004804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f686173682c011c543a3a486173680005385901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e002823203c7765696768743edc436f6d706c65786974793a204f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c73284442205765696768743a482a2052656164733a2050726f706f73616c739c2a205772697465733a20566f74696e672c2050726f706f73616c732c2050726f706f73616c4f662c23203c2f7765696768743e14636c6f736510013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578b501013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64b501010c7533320006804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb90304184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000bd03000006c10300c103082873705f77656967687473244f6c645765696768740000040010010c7536340000c5030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c08045400044900011c2c7365745f6d656d626572730c012c6e65775f6d656d62657273250301445665633c543a3a4163636f756e7449643e0001147072696d65b90301504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e741c012c4d656d626572436f756e74000080805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e0054526571756972657320726f6f74206f726967696e2e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e002823203c7765696768743e24232320576569676874502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e64656429142d2044423a510120202d20312073746f72616765206d75746174696f6e2028636f64656320604f284d296020726561642c20604f284e29602077726974652920666f722072656164696e6720616e642077726974696e67207468652c202020206d656d62657273ec20202d20312073746f7261676520726561642028636f64656320604f285029602920666f722072656164696e67207468652070726f706f73616c73450120202d206050602073746f72616765206d75746174696f6e732028636f64656320604f284d29602920666f72207570646174696e672074686520766f74657320666f7220656163682070726f706f73616c5d0120202d20312073746f726167652077726974652028636f64656320604f283129602920666f722064656c6574696e6720746865206f6c6420607072696d656020616e642073657474696e6720746865206e6577206f6e652c23203c2f7765696768743e1c6578656375746508012070726f706f73616ca503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64b501010c75333200012cf0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e002823203c7765696768743e2423232057656967687455012d20604f284d202b2050296020776865726520604d60206d656d626572732d636f756e742028636f64652d626f756e6465642920616e642060506020636f6d706c6578697479206f66206469737061746368696e673020206070726f706f73616c60d42d2044423a203120726561642028636f64656320604f284d296029202b20444220616363657373206f66206070726f706f73616c60242d2031206576656e742c23203c2f7765696768743e1c70726f706f73650c01247468726573686f6c64b501012c4d656d626572436f756e7400012070726f706f73616ca503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64b501010c75333200026cf84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e002823203c7765696768743e24232320576569676874ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d20326029142d2044423ab420202d20312073746f726167652072656164206069735f6d656d626572602028636f64656320604f284d296029f020202d20312073746f726167652072656164206050726f706f73616c4f663a3a636f6e7461696e735f6b6579602028636f64656320604f2831296029a820202d20444220616363657373657320696e666c75656e63656420627920607468726573686f6c64603a0901202020202d204549544845522073746f7261676520616363657373657320646f6e65206279206070726f706f73616c602028607468726573686f6c64203c20326029b8202020202d204f522070726f706f73616c20696e73657274696f6e2028607468726573686f6c64203c3d20326029d82020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c73602028636f64656320604f285032296029e42020202020202d20312073746f72616765206d75746174696f6e206050726f706f73616c436f756e74602028636f64656320604f2831296029cc2020202020202d20312073746f72616765207772697465206050726f706f73616c4f66602028636f64656320604f2842296029bc2020202020202d20312073746f726167652077726974652060566f74696e67602028636f64656320604f284d2960292c20202d2031206576656e742c23203c2f7765696768743e10766f74650c012070726f706f73616c2c011c543a3a48617368000114696e646578b501013450726f706f73616c496e64657800011c617070726f7665a40110626f6f6c00033cf041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e2823203c7765696768743e2423232057656967687409012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429142d2044423aac20202d20312073746f72616765207265616420604d656d62657273602028636f64656320604f284d296029b820202d20312073746f72616765206d75746174696f6e2060566f74696e67602028636f64656320604f284d296029242d2031206576656e742c23203c2f7765696768743e40636c6f73655f6f6c645f77656967687410013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578b501013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e64bd0301244f6c645765696768740001306c656e6774685f626f756e64b501010c7533320004804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f686173682c011c543a3a486173680005385901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e002823203c7765696768743edc436f6d706c65786974793a204f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c73284442205765696768743a482a2052656164733a2050726f706f73616c739c2a205772697465733a20566f74696e672c2050726f706f73616c732c2050726f706f73616c4f662c23203c2f7765696768743e14636c6f736510013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578b501013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64b501010c7533320006804d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e002823203c7765696768743e24232320576569676874742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429142d2044423a0d01202d20322073746f726167652072656164732028604d656d62657273603a20636f64656320604f284d29602c20605072696d65603a20636f64656320604f28312960295901202d2033206d75746174696f6e73202860566f74696e67603a20636f64656320604f284d29602c206050726f706f73616c4f66603a20636f64656320604f284229602c206050726f706f73616c73603a20636f6465632c202020604f285032296029dc202d20616e79206d75746174696f6e7320646f6e65207768696c6520657865637574696e67206070726f706f73616c6020286050316029402d20757020746f2033206576656e74732c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec9030c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665d90201504163636f756e7449644c6f6f6b75704f663c543e00010c616464d90201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d62657273250301445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577d90201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ecd030c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001143470726f706f73655f7370656e6408011476616c7565c101013c42616c616e63654f663c542c20493e00012c62656e6566696369617279d90201504163636f756e7449644c6f6f6b75704f663c543e000024290150757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c75653101697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e6365207468655070726f706f73616c20697320617761726465642e002823203c7765696768743e482d20436f6d706c65786974793a204f283129b02d20446252656164733a206050726f706f73616c436f756e74602c20606f726967696e206163636f756e7460e82d2044625772697465733a206050726f706f73616c436f756e74602c206050726f706f73616c73602c20606f726967696e206163636f756e74602c23203c2f7765696768743e3c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964b501013450726f706f73616c496e646578000124f852656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e002823203c7765696768743e482d20436f6d706c65786974793a204f283129cc2d20446252656164733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e7460d02d2044625772697465733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e74602c23203c2f7765696768743e40617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964b501013450726f706f73616c496e6465780002285901417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e6566696369617279a8616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e00ac4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a417070726f76654f726967696e602e002823203c7765696768743e4c2d20436f6d706c65786974793a204f2831292e8c2d20446252656164733a206050726f706f73616c73602c2060417070726f76616c7360582d20446257726974653a2060417070726f76616c73602c23203c2f7765696768743e147370656e64080118616d6f756e74c101013c42616c616e63654f663c542c20493e00012c62656e6566696369617279d90201504163636f756e7449644c6f6f6b75704f663c543e000320b850726f706f736520616e6420617070726f76652061207370656e64206f662074726561737572792066756e64732e004d012d20606f726967696e603a204d75737420626520605370656e644f726967696e60207769746820746865206053756363657373602076616c7565206265696e67206174206c656173742060616d6f756e74602e41012d2060616d6f756e74603a2054686520616d6f756e7420746f206265207472616e736665727265642066726f6d2074686520747265617375727920746f20746865206062656e6566696369617279602ee82d206062656e6566696369617279603a205468652064657374696e6174696f6e206163636f756e7420666f7220746865207472616e736665722e0045014e4f54453a20466f72207265636f72642d6b656570696e6720707572706f7365732c207468652070726f706f736572206973206465656d656420746f206265206571756976616c656e7420746f207468653062656e65666963696172792e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964b501013450726f706f73616c496e64657800043c2d01466f72636520612070726576696f75736c7920617070726f7665642070726f706f73616c20746f2062652072656d6f7665642066726f6d2074686520617070726f76616c2071756575652ec0546865206f726967696e616c206465706f7369742077696c6c206e6f206c6f6e6765722062652072657475726e65642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602ea02d206070726f706f73616c5f6964603a2054686520696e646578206f6620612070726f706f73616c002823203c7765696768743edc2d20436f6d706c65786974793a204f2841292077686572652060416020697320746865206e756d626572206f6620617070726f76616c73882d20446220726561647320616e64207772697465733a2060417070726f76616c73602c23203c2f7765696768743e001c4572726f72733a61012d206050726f706f73616c4e6f74417070726f766564603a20546865206070726f706f73616c5f69646020737570706c69656420776173206e6f7420666f756e6420696e2074686520617070726f76616c2071756575652c5101692e652e2c207468652070726f706f73616c20686173206e6f74206265656e20617070726f7665642e205468697320636f756c6420616c736f206d65616e207468652070726f706f73616c20646f6573206e6f745901657869737420616c746f6765746865722c2074687573207468657265206973206e6f2077617920697420776f756c642068617665206265656e20617070726f76656420696e2074686520666972737420706c6163652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed1030c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c73d503017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00004c7c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e646578d8010c75313600011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c73d503017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000238ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e2c64697370617463685f617308012461735f6f726967696ed9030154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000328c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e002823203c7765696768743e1c2d204f2831292e602d204c696d697465642073746f726167652072656164732e5c2d204f6e6520444220777269746520286576656e74292e1d012d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b20543a3a576569676874496e666f3a3a64697370617463685f617328292e2c23203c2f7765696768743e2c666f7263655f626174636804011463616c6c73d503017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004387c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e002823203c7765696768743e01012d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c23203c2f7765696768743e2c776974685f77656967687408011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874240118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed503000002a50300d90308447370697269746e65745f72756e74696d65304f726967696e43616c6c657200011c1873797374656d0400dd0301746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c0400e10301010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400e50301010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020000c4469640400e90301506469643a3a4f726967696e3c52756e74696d653e0040002c506f6c6b61646f7458636d0400ed03014870616c6c65745f78636d3a3a4f726967696e0053002843756d756c757358636d0400f103016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e00540010566f69640400f50301110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f696400060000dd030c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e6500020000e103084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d6265727308001c012c4d656d626572436f756e7400001c012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d00020000e503084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d6265727308001c012c4d656d626572436f756e7400001c012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d00020000e9030c0c646964186f726967696e304469645261774f726967696e08344469644964656e7469666965720100244163636f756e74496401000008010869640001344469644964656e7469666965720001247375626d69747465720001244163636f756e7449640000ed030c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400a90101344d756c74694c6f636174696f6e00000020526573706f6e73650400a90101344d756c74694c6f636174696f6e00010000f1030c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e04009d01011850617261496400010000f503081c73705f636f726510566f696400010000f9030c3870616c6c65745f76657374696e671870616c6c65741043616c6c0404540001141076657374000034b8556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e005d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20322052656164732c203220577269746573f8202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745dfc202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745d2c23203c2f7765696768743e28766573745f6f74686572040118746172676574d90201504163636f756e7449644c6f6f6b75704f663c543e00013cb8556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051012d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20332052656164732c203320577269746573f0202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e74f4202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c23203c2f7765696768743e3c7665737465645f7472616e73666572080118746172676574d90201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65fd0301a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00024464437265617465206120766573746564207472616e736665722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d2060746172676574603a20546865206163636f756e7420726563656976696e6720746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20332052656164732c2033205772697465733901202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d3d01202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d2c23203c2f7765696768743e54666f7263655f7665737465645f7472616e736665720c0118736f75726365d90201504163636f756e7449644c6f6f6b75704f663c543e000118746172676574d90201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65fd0301a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00034860466f726365206120766573746564207472616e736665722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00e82d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e11012d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e002823203c7765696768743e242d20604f283129602e742d2044625765696768743a20342052656164732c2034205772697465733101202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e743501202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e742c23203c2f7765696768743e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e6465781c010c75333200013c7363686564756c65325f696e6465781c010c7533320004545d014d657267652074776f2076657374696e67207363686564756c657320746f6765746865722c206372656174696e672061206e65772076657374696e67207363686564756c65207468617420756e6c6f636b73206f7665725501746865206869676865737420706f737369626c6520737461727420616e6420656e6420626c6f636b732e20496620626f7468207363686564756c6573206861766520616c7265616479207374617274656420746865590163757272656e7420626c6f636b2077696c6c206265207573656420617320746865207363686564756c652073746172743b207769746820746865206361766561742074686174206966206f6e65207363686564756c655d0169732066696e6973686564206279207468652063757272656e7420626c6f636b2c20746865206f746865722077696c6c206265207472656174656420617320746865206e6577206d6572676564207363686564756c652c2c756e6d6f6469666965642e00f84e4f54453a20496620607363686564756c65315f696e646578203d3d207363686564756c65325f696e6465786020746869732069732061206e6f2d6f702e41014e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b207072696f7220746f206d657267696e672e61014e4f54453a20496620626f7468207363686564756c6573206861766520656e646564206279207468652063757272656e7420626c6f636b2c206e6f206e6577207363686564756c652077696c6c206265206372656174656464616e6420626f74682077696c6c2062652072656d6f7665642e006c4d6572676564207363686564756c6520617474726962757465733a35012d20607374617274696e675f626c6f636b603a20604d4158287363686564756c65312e7374617274696e675f626c6f636b2c207363686564756c6564322e7374617274696e675f626c6f636b2c48202063757272656e745f626c6f636b29602e21012d2060656e64696e675f626c6f636b603a20604d4158287363686564756c65312e656e64696e675f626c6f636b2c207363686564756c65322e656e64696e675f626c6f636b29602e59012d20606c6f636b6564603a20607363686564756c65312e6c6f636b65645f61742863757272656e745f626c6f636b29202b207363686564756c65322e6c6f636b65645f61742863757272656e745f626c6f636b29602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00e82d20607363686564756c65315f696e646578603a20696e646578206f6620746865206669727374207363686564756c6520746f206d657267652eec2d20607363686564756c65325f696e646578603a20696e646578206f6620746865207365636f6e64207363686564756c6520746f206d657267652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632efd030c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d626572000001040c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963050401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963050401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963050401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000414a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e002823203c7765696768743e5453616d65206173205b607363686564756c65605d2e2c23203c2f7765696768743e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963050401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000514905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e002823203c7765696768743ec453616d65206173205b607363686564756c655f6e616d6564605d2853656c663a3a7363686564756c655f6e616d6564292e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e050404184f7074696f6e04045401c80108104e6f6e6500000010536f6d650400c8000001000009040c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616cd90201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f747970650d0401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465d90201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d6265720001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465d90201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065d40130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d626572000114696e646578d8010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572d90201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d40130543a3a50726f787954797065000114696e646578d8010c753136000118686569676874280138543a3a426c6f636b4e756d6265720001246578745f696e646578b501010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616cd90201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616cd90201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465d90201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465d90201504163636f756e7449644c6f6f6b75704f663c543e0001107265616cd90201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f747970650d0401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6ca503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e0d0404184f7074696f6e04045401d40108104e6f6e6500000010536f6d650400d4000001000011040c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657330011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d616765040110686173682c011c543a3a48617368000118dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e00fc496620606c656e602069732070726f76696465642c207468656e2069742077696c6c2062652061206d7563682063686561706572206f7065726174696f6e2e0001012d206068617368603a205468652068617368206f662074686520707265696d61676520746f2062652072656d6f7665642066726f6d207468652073746f72652eb82d20606c656e603a20546865206c656e677468206f662074686520707265696d616765206f66206068617368602e40726571756573745f707265696d616765040110686173682c011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d616765040110686173682c011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e15040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665d90201504163636f756e7449644c6f6f6b75704f663c543e00010c616464d90201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d62657273250301445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577d90201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e19040c2c70616c6c65745f746970731870616c6c65741043616c6c080454000449000118387265706f72745f617765736f6d65080118726561736f6e30011c5665633c75383e00010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e00004c59015265706f727420736f6d657468696e672060726561736f6e60207468617420646573657276657320612074697020616e6420636c61696d20616e79206576656e7475616c207468652066696e6465722773206665652e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051015061796d656e743a20605469705265706f72744465706f73697442617365602077696c6c2062652072657365727665642066726f6d20746865206f726967696e206163636f756e742c2061732077656c6c206173bc60446174614465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e0074456d69747320604e657754697060206966207375636365737366756c2e002823203c7765696768743ec82d20436f6d706c65786974793a20604f2852296020776865726520605260206c656e677468206f662060726561736f6e602e9020202d20656e636f64696e6720616e642068617368696e67206f662027726561736f6e27702d20446252656164733a2060526561736f6e73602c20605469707360742d2044625772697465733a2060526561736f6e73602c206054697073602c23203c2f7765696768743e2c726574726163745f746970040110686173682c011c543a3a4861736800014c5101526574726163742061207072696f72207469702d7265706f72742066726f6d20607265706f72745f617765736f6d65602c20616e642063616e63656c207468652070726f63657373206f662074697070696e672e00dc4966207375636365737366756c2c20746865206f726967696e616c206465706f7369742077696c6c20626520756e72657365727665642e004d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642074686520746970206964656e7469666965642062792060686173686041016d7573742068617665206265656e207265706f7274656420627920746865207369676e696e67206163636f756e74207468726f75676820607265706f72745f617765736f6d65602028616e64206e6f744c7468726f75676820607469705f6e657760292e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e008c456d697473206054697052657472616374656460206966207375636365737366756c2e002823203c7765696768743e502d20436f6d706c65786974793a20604f28312960d820202d20446570656e6473206f6e20746865206c656e677468206f662060543a3a48617368602077686963682069732066697865642e8c2d20446252656164733a206054697073602c20606f726967696e206163636f756e7460bc2d2044625772697465733a2060526561736f6e73602c206054697073602c20606f726967696e206163636f756e74602c23203c2f7765696768743e1c7469705f6e65770c0118726561736f6e30011c5665633c75383e00010c77686fd90201504163636f756e7449644c6f6f6b75704f663c543e0001247469705f76616c7565c101013c42616c616e63654f663c542c20493e000258f04769766520612074697020666f7220736f6d657468696e67206e65773b206e6f2066696e6465722773206665652077696c6c2062652074616b656e2e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e0074456d69747320604e657754697060206966207375636365737366756c2e002823203c7765696768743e51012d20436f6d706c65786974793a20604f2852202b2054296020776865726520605260206c656e677468206f662060726561736f6e602c2060546020697320746865206e756d626572206f6620746970706572732e5d0120202d20604f285429603a206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792d012020202060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f66442020202060543a3a54697070657273602ee020202d20604f285229603a2068617368696e6720616e6420656e636f64696e67206f6620726561736f6e206f66206c656e677468206052607c2d20446252656164733a206054697070657273602c2060526561736f6e7360742d2044625772697465733a2060526561736f6e73602c206054697073602c23203c2f7765696768743e0c746970080110686173682c011c543a3a486173680001247469705f76616c7565c101013c42616c616e63654f663c542c20493e000360b04465636c6172652061207469702076616c756520666f7220616e20616c72656164792d6f70656e207469702e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f66207468652068617368206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e65666963696172793420206163636f756e742049442e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e006101456d6974732060546970436c6f73696e676020696620746865207468726573686f6c64206f66207469707065727320686173206265656e207265616368656420616e642074686520636f756e74646f776e20706572696f643068617320737461727465642e002823203c7765696768743e61012d20436f6d706c65786974793a20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e6774682d0120206054602c20696e736572742074697020616e6420636865636b20636c6f73696e672c20605460206973206368617267656420617320757070657220626f756e6420676976656e2062795d01202060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e005d01202041637475616c6c792077656967687420636f756c64206265206c6f77657220617320697420646570656e6473206f6e20686f77206d616e7920746970732061726520696e20604f70656e5469706020627574206974d02020697320776569676874656420617320696620616c6d6f73742066756c6c20692e65206f66206c656e6774682060542d31602e702d20446252656164733a206054697070657273602c20605469707360482d2044625772697465733a206054697073602c23203c2f7765696768743e24636c6f73655f746970040110686173682c011c543a3a486173680004405c436c6f736520616e64207061796f75742061207469702e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00150154686520746970206964656e74696669656420627920606861736860206d75737420686176652066696e69736865642069747320636f756e74646f776e20706572696f642e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e002823203c7765696768743e61012d20436f6d706c65786974793a20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e677468510120206054602e20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f7374c02020646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602ea82d20446252656164733a206054697073602c206054697070657273602c20607469702066696e64657260d82d2044625772697465733a2060526561736f6e73602c206054697073602c206054697070657273602c20607469702066696e646572602c23203c2f7765696768743e24736c6173685f746970040110686173682c011c543a3a486173680005309452656d6f766520616e6420736c61736820616e20616c72656164792d6f70656e207469702e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e00f44173206120726573756c742c207468652066696e64657220697320736c617368656420616e6420746865206465706f7369747320617265206c6f73742e0084456d6974732060546970536c617368656460206966207375636365737366756c2e002823203c7765696768743efc2020605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e010120205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e2c23203c2f7765696768743e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e1d040c1463747970651870616c6c65741043616c6c0404540001080c616464040114637479706530011c5665633c75383e00003009014372656174652061206e65772043547970652066726f6d2074686520676976656e20756e69717565204354797065206861736820616e64206173736f6369617465735069742077697468206974732063726561746f722e00dc412043547970652077697468207468652073616d652068617368206d757374206e6f742062652073746f726564206f6e20636861696e2e0054456d6974732060435479706543726561746564602e002823203c7765696768743e305765696768743a204f283129602d2052656164733a204374797065732c2042616c616e6365642d205772697465733a204374797065732c2042616c616e63652c23203c2f7765696768743e407365745f626c6f636b5f6e756d62657208012863747970655f686173682c01384374797065486173684f663c543e000130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e00010ce853657420746865206372656174696f6e20626c6f636b206e756d62657220666f72206120676976656e2043547970652c20696620666f756e642e0054456d6974732060435479706555706461746564602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e21040c2c6174746573746174696f6e1870616c6c65741043616c6c0404540001180c6164640c0128636c61696d5f686173682c0138436c61696d486173684f663c543e00012863747970655f686173682c01384374797065486173684f663c543e000134617574686f72697a6174696f6e250401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000054644372656174652061206e6577206174746573746174696f6e2e00f85468652061747465737465722063616e206f7074696f6e616c6c792070726f766964652061207265666572656e636520746f20616e206578697374696e67090164656c65676174696f6e20746861742077696c6c20626520736176656420616c6f6e67207769746820746865206174746573746174696f6e20697473656c6620696e8c74686520666f726d206f6620616e2061747465737465642064656c65676174696f6e2e00ec546865207265666572656e6365642043547970652068617368206d75737420616c72656164792062652070726573656e74206f6e20636861696e2e000901496620616e206f7074696f6e616c2064656c65676174696f6e2069642069732070726f76696465642c20746865206469737061746368206f726967696e206d757374e8626520746865206f776e6572206f66207468652064656c65676174696f6e2e204f74686572776973652c20697420636f756c6420626520616e79546044656c65676174696f6e456e746974794964602e006c456d69747320604174746573746174696f6e43726561746564602e002823203c7765696768743e305765696768743a204f283129b82d2052656164733a205b4f726967696e204163636f756e745d2c2043747970652c204174746573746174696f6e73e42d2052656164732069662064656c65676174696f6e2069642069732070726f76696465643a2044656c65676174696f6e732c20526f6f74732c5c202044656c6567617465644174746573746174696f6e73bc2d205772697465733a204174746573746174696f6e732c202844656c6567617465644174746573746174696f6e73292c23203c2f7765696768743e187265766f6b65080128636c61696d5f686173682c0138436c61696d486173684f663c543e000134617574686f72697a6174696f6e250401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0001447c5265766f6b6520616e206578697374696e67206174746573746174696f6e2e00fc546865207265766f6b6572206d75737420626520656974686572207468652063726561746f72206f6620746865206174746573746174696f6e206265696e6709017265766f6b6564206f7220616e20656e74697479207468617420696e207468652064656c65676174696f6e207472656520697320616e20616e636573746f72206f6609017468652061747465737465722c20692e652e2c2069742077617320656974686572207468652064656c656761746f72206f6620746865206174746573746572206f7250616e20616e636573746f722074686572656f662e006c456d69747320604174746573746174696f6e5265766f6b6564602e002823203c7765696768743e0d015765696768743a204f285029207768657265205020697320746865206e756d626572206f6620737465707320726571756972656420746f2076657269667920746861740901746865206469737061746368204f726967696e20636f6e74726f6c73207468652064656c65676174696f6e20656e7469746c656420746f207265766f6b6520746865c86174746573746174696f6e2e20497420697320626f756e64656420627920606d61785f706172656e745f636865636b73602ee82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2064656c65676174696f6e3a3a526f6f7473d82d205265616473207065722064656c65676174696f6e207374657020503a2064656c65676174696f6e3a3a44656c65676174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e1872656d6f7665080128636c61696d5f686173682c0138436c61696d486173684f663c543e000134617574686f72697a6174696f6e250401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0002445852656d6f766520616e206174746573746174696f6e2e00f8546865206f726967696e206d75737420626520656974686572207468652063726561746f72206f6620746865206174746573746174696f6e206f7220616e0d01656e7469747920776869636820697320616e20616e636573746f72206f662074686520617474657374657220696e207468652064656c65676174696f6e20747265652c0101692e652e2c2069742077617320656974686572207468652064656c656761746f72206f6620746865206174746573746572206f7220616e20616e636573746f722074686572656f662e006c456d69747320604174746573746174696f6e52656d6f766564602e002823203c7765696768743e0d015765696768743a204f285029207768657265205020697320746865206e756d626572206f6620737465707320726571756972656420746f2076657269667920746861740901746865206469737061746368204f726967696e20636f6e74726f6c73207468652064656c65676174696f6e20656e7469746c656420746f207265766f6b6520746865c86174746573746174696f6e2e20497420697320626f756e64656420627920606d61785f706172656e745f636865636b73602ee82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2064656c65676174696f6e3a3a526f6f7473d82d205265616473207065722064656c65676174696f6e207374657020503a2064656c65676174696f6e3a3a44656c65676174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e3c7265636c61696d5f6465706f736974040128636c61696d5f686173682c0138436c61696d486173684f663c543e000324d05265636c61696d20612073746f72616765206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e0064456d69747320604465706f7369745265636c61696d6564602e002823203c7765696768743e305765696768743a204f283129f82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e6572040128636c61696d5f686173682c0138436c61696d486173684f663c543e00041c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00ec546865207375626a656374206f66207468652063616c6c206d757374206265207468652061747465737465722077686f206973737565732074686509016174746573746174696f6e2e205468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f736974040128636c61696d5f686173682c0138436c61696d486173684f663c543e00050cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e250404184f7074696f6e0404540129040108104e6f6e6500000010536f6d6504002904000001000029040c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c50616c6c6574417574686f72697a65043044656c65676174696f6e4163012d0401042844656c65676174696f6e04002d04013044656c65676174696f6e4163000000002d040c2864656c65676174696f6e386163636573735f636f6e74726f6c3044656c65676174696f6e41630404540131040008013c7375626a6563745f6e6f64655f69642c015444656c65676174696f6e4e6f646549644f663c543e0001286d61785f636865636b731c010c7533320000310408447370697269746e65745f72756e74696d651c52756e74696d650000000035040c2864656c65676174696f6e1870616c6c65741043616c6c04045400011c406372656174655f686965726172636879080130726f6f745f6e6f64655f69642c015444656c65676174696f6e4e6f646549644f663c543e00012863747970655f686173682c01384374797065486173684f663c543e00006401014372656174652061206e65772064656c65676174696f6e20726f6f74206173736f6369617465642077697468206120676976656e20435479706520686173682e00f8546865206e657720726f6f742077696c6c20616c6c6f772061206e65772074727573742068696572617263687920746f2062652063726561746564206279a0616464696e67206368696c6472656e2064656c65676174696f6e7320746f2074686520726f6f742e000d015468657265206d757374206265206e6f2064656c65676174696f6e2077697468207468652073616d652049442073746f726564206f6e20636861696e2c207768696c65fc7468657265206d75737420626520616c7265616479206120435479706520776974682074686520676976656e20686173682073746f72656420696e207468653443547970652070616c6c65742e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e000d015265717569726573207468652073656e646572206f6620746865207472616e73616374696f6e20746f206861766520612072657365727661626c652062616c616e6365886f66206174206c6561737420604465706f73697460206d616e7920746f6b656e732e0050456d6974732060526f6f7443726561746564602e002823203c7765696768743e305765696768743a204f283129a02d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c204354797065733c2d205772697465733a20526f6f74732c23203c2f7765696768743e386164645f64656c65676174696f6e14013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e000124706172656e745f69642c015444656c65676174696f6e4e6f646549644f663c543e00012064656c656761746500014044656c656761746f7249644f663c543e00012c7065726d697373696f6e73fc012c5065726d697373696f6e7300014864656c65676174655f7369676e61747572653904016844656c65676174655369676e6174757265547970654f663c543e000180744372656174652061206e65772064656c65676174696f6e206e6f64652e00f4546865206e65772064656c65676174696f6e206e6f646520726570726573656e74732061206e65772074727573742068696572617263687920746861740d01636f6e73696465727320746865206e6577206e6f64652061732069747320726f6f742e20546865206f776e6572206f662074686973206e6f6465206861732066756c6ce0636f6e74726f6c206f76657220616e79206f66206974732064697265637420616e6420696e6469726563742064657363656e64616e74732e00fc466f7220746865206372656174696f6e20746f20737563636565642c207468652064656c656761746565206d7573742070726f7669646520612076616c696411017369676e6174757265206f766572207468652028626c616b65323536292068617368206f6620746865206372656174696f6e206f7065726174696f6e2064657461696c731101776869636820696e636c7564652028696e206f72646572292064656c65676174696f6e2069642c20726f6f74206e6f64652069642c20706172656e742069642c20616e64707065726d697373696f6e73206f6620746865206e6577206e6f64652e00f45468657265206d757374206265206e6f2064656c65676174696f6e2077697468207468652073616d652069642073746f726564206f6e20636861696e2e0501467572746865726d6f72652c20746865207265666572656e63656420726f6f7420616e6420706172656e74206e6f646573206d75737420616c7265616479206265050170726573656e74206f6e20636861696e20616e6420636f6e7461696e207468652076616c6964207065726d697373696f6e7320616e64207265766f636174696f6e6c7374617475732028692e652e2c206e6f74207265766f6b6564292e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e000d015265717569726573207468652073656e646572206f6620746865207472616e73616374696f6e20746f206861766520612072657365727661626c652062616c616e6365886f66206174206c6561737420604465706f73697460206d616e7920746f6b656e732e0068456d697473206044656c65676174696f6e43726561746564602e002823203c7765696768743e305765696768743a204f283129b42d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2044656c65676174696f6e73542d205772697465733a2044656c65676174696f6e732c23203c2f7765696768743e447265766f6b655f64656c65676174696f6e0c013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001446d61785f706172656e745f636865636b731c010c75333200013c6d61785f7265766f636174696f6e731c010c753332000274f85265766f6b6520612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74206e6f64652920616e6420616c6c20697473246368696c6472656e2e00fc446f6573206e6f7420726566756e64207468652064656c65676174696f6e206261636b20746f20746865206465706f736974206f776e657220617320746865f06e6f6465206973207374696c6c2073746f726564206f6e20636861696e2e20526571756972657320746f206164646974696f6e616c6c792063616c6cb46072656d6f76655f64656c65676174696f6e6020746f20756e7265736572766520746865206465706f7369742e0009015265766f6b696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67090166726f6d2074686520676976656e206e6f6465206265696e67207265766f6b65642e204e657665727468656c6573732c207265766f636174696f6e20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f6465206973207265766f6b65642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e73696465726564207265766f6b65642e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e0078456d6974732043202a206044656c65676174696f6e5265766f6b6564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f6368696c6472656e602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e802d205772697465733a20526f6f74732c2043202a2044656c65676174696f6e732c23203c2f7765696768743e4472656d6f76655f64656c65676174696f6e08013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c731c010c753332000370f852656d6f766520612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74206e6f64652920616e6420616c6c20697473246368696c6472656e2e00f052657475726e73207468652064656c65676174696f6e206465706f73697420746f20746865206465706f736974206f776e657220666f722065616368a472656d6f7665642044656c65676174696f6e4e6f646520627920756e726573657276696e672069742e00090152656d6f76696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67fc66726f6d2074686520676976656e206e6f6465206265696e672072656d6f7665642e204e657665727468656c6573732c2072656d6f76616c20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f64652069732072656d6f7665642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e736964657265642072656d6f7665642e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e0078456d6974732043202a206044656c65676174696f6e52656d6f766564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f6368696c6472656e602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e902d205772697465733a20526f6f74732c2032202a2043202a2044656c65676174696f6e732c23203c2f7765696768743e3c7265636c61696d5f6465706f73697408013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c731c010c753332000460f45265636c61696d20746865206465706f73697420666f7220612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74b86e6f6465292c2072656d6f76696e6720746865206e6f646520616e6420616c6c20697473206368696c6472656e2e00f052657475726e73207468652064656c65676174696f6e206465706f73697420746f20746865206465706f736974206f776e657220666f722065616368a472656d6f7665642044656c65676174696f6e4e6f646520627920756e726573657276696e672069742e00090152656d6f76696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67fc66726f6d2074686520676976656e206e6f6465206265696e672072656d6f7665642e204e657665727468656c6573732c2072656d6f76616c20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f64652069732072656d6f7665642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e736964657265642072656d6f7665642e000d01546865206469737061746368206f726967696e206d757374206265207369676e6564206279207468652064656c65676174696f6e206465706f736974206f776e65722e004c604465706f7369745265636c61696d6564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f72656d6f76616c73602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e902d205772697465733a20526f6f74732c2032202a2043202a2044656c65676174696f6e732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657204013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e00051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e000501546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f66207468652064656c65676174696f6e206e6f64652ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e39040c0c6469642c6469645f64657461696c73304469645369676e617475726500010c1c4564323535313904003d040148656432353531393a3a5369676e61747572650000001c53723235353139040045040148737232353531393a3a5369676e617475726500010014456364736104004904014065636473613a3a5369676e6174757265000200003d040c1c73705f636f72651c65643235353139245369676e617475726500000400410401205b75383b2036345d0000410400000340000000080045040c1c73705f636f72651c73723235353139245369676e617475726500000400410401205b75383b2036345d000049040c1c73705f636f7265146563647361245369676e6174757265000004004d0401205b75383b2036355d00004d0400000341000000080051040c0c6469641870616c6c65741043616c6c04045400013c1863726561746508011c64657461696c7355040168426f783c4469644372656174696f6e44657461696c733c543e3e0001247369676e6174757265390401304469645369676e617475726500007cec53746f72652061206e657720444944206f6e20636861696e2c20616674657220766572696679696e67207468617420746865206372656174696f6e05016f7065726174696f6e20686173206265656e207369676e656420627920746865204b494c54206163636f756e74206173736f63696174656420776974682074686501016964656e746966696572206f662074686520444944206265696e67206372656174656420616e6420746861742061204449442077697468207468652073616d6511016964656e74696669657220686173206e6f742070726576696f75736c792065786973746564206f6e2028616e64207468656e2064656c657465642066726f6d292074686518636861696e2e000d015468657265206d757374206265206e6f2044494420696e666f726d6174696f6e2073746f726564206f6e20636861696e20756e646572207468652073616d65204449442c6964656e7469666965722e00fc546865206e6577206b65797320616464656420776974682074686973206f7065726174696f6e206172652073746f72656420756e646572207468652044494405016964656e74696669657220616c6f6e6720776974682074686520626c6f636b206e756d62657220696e20776869636820746865206f7065726174696f6e207761732465786563757465642e000101546865206469737061746368206f726967696e2063616e20626520616e79204b494c54206163636f756e74207769746820656e6f7567682066756e647320746f0d0165786563757465207468652065787472696e73696320616e6420697420646f6573206e6f74206861766520746f206265207469656420696e20616e792077617920746fb4746865204b494c54206163636f756e74206964656e74696679696e672074686520444944207375626a6563742e004c456d697473206044696443726561746564602e002823203c7765696768743e0d012d20546865207472616e73616374696f6e277320636f6d706c6578697479206973206d61696e6c7920646570656e64656e74206f6e20746865206e756d626572206f66010120206e6577206b65792061677265656d656e74206b65797320616e6420746865206e756d626572206f66206e6577207365727669636520656e64706f696e7473702020696e636c7564656420696e20746865206f7065726174696f6e2e242d2d2d2d2d2d2d2d2df85765696768743a204f284b29202b204f284e29207768657265204b20697320746865206e756d626572206f66206e6577206b65792061677265656d656e7409016b65797320626f756e64656420627920604d61784e65774b657941677265656d656e744b657973602c207768696c65204e20697320746865206e756d626572206f66f46e6577207365727669636520656e64706f696e747320626f756e64656420627920604d61784e756d6265724f665365727669636573506572446964602eb02d2052656164733a205b4f726967696e204163636f756e745d2c204469642c20446964426c61636b6c697374fc2d205772697465733a20446964202877697468204b206e6577206b65792061677265656d656e74206b657973292c2053657276696365456e64706f696e7473cc20202877697468204e206e6577207365727669636520656e64706f696e7473292c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e587365745f61757468656e7469636174696f6e5f6b657904011c6e65775f6b65796d040148446964566572696669636174696f6e4b65790001408855706461746520746865204449442061757468656e7469636174696f6e206b65792e00ec546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696620697420697309016e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f207468654c736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e487365745f64656c65676174696f6e5f6b657904011c6e65775f6b65796d040148446964566572696669636174696f6e4b657900024094536574206f722075706461746520746865204449442064656c65676174696f6e206b65792e000d01496620616e206f6c64206b657920657869737465642c2069742069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696611016974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f5c74686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e5472656d6f76655f64656c65676174696f6e5f6b657900033c7852656d6f766520746865204449442064656c65676174696f6e206b65792e00d4546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b657973206966b06974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e4c7365745f6174746573746174696f6e5f6b657904011c6e65775f6b65796d040148446964566572696669636174696f6e4b657900044098536574206f72207570646174652074686520444944206174746573746174696f6e206b65792e000d01496620616e206f6c64206b657920657869737465642c2069742069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696611016974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f5c74686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e5872656d6f76655f6174746573746174696f6e5f6b657900053c7c52656d6f76652074686520444944206174746573746174696f6e206b65792e00d4546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b657973206966b06974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e546164645f6b65795f61677265656d656e745f6b657904011c6e65775f6b65795d040140446964456e6372797074696f6e4b6579000638b841646420612073696e676c65206e6577206b65792061677265656d656e74206b657920746f20746865204449442e00bc546865206e6577206b657920697320616464656420746f2074686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e6072656d6f76655f6b65795f61677265656d656e745f6b65790401186b65795f69642c01284b657949644f663c543e000734050152656d6f7665206120444944206b65792061677265656d656e74206b65792066726f6d20626f74682069747320736574206f66206b65792061677265656d656e74906b65797320616e642061732077656c6c20617320697473207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e506164645f736572766963655f656e64706f696e74040140736572766963655f656e64706f696e7481040138446964456e64706f696e743c543e000830bc4164642061206e6577207365727669636520656e64706f696e7420756e6465722074686520676976656e204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f2831290d012d2052656164733a205b4f726967696e204163636f756e745d2c204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e74c82d205772697465733a204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e5c72656d6f76655f736572766963655f656e64706f696e74040128736572766963655f69648504015053657276696365456e64706f696e7449643c543e000930d452656d6f76652074686520736572766963652077697468207468652070726f76696465642049442066726f6d20746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129f82d2052656164733a205b4f726967696e204163636f756e745d2c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e74c82d205772697465733a204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e1864656c65746504014c656e64706f696e74735f746f5f72656d6f76651c010c753332000a600d0144656c6574652061204449442066726f6d2074686520636861696e20616e6420616c6c20696e666f726d6174696f6e206173736f63696174656420776974682069742c1101616674657220766572696679696e672074686174207468652064656c657465206f7065726174696f6e20686173206265656e207369676e65642062792074686520444944fc7375626a656374207573696e67207468652061757468656e7469636174696f6e206b65792063757272656e746c792073746f726564206f6e20636861696e2e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f7265207468657864656c657465206f7065726174696f6e206973206576616c75617465642e00f441667465722069742069732064656c657465642c2061204449442077697468207468652073616d65206964656e7469666965722063616e6e6f742062655872652d63726561746564206576657220616761696e2e00010141732074686520726573756c74206f66207468652064656c6574696f6e2c20616c6c20747261636573206f662074686520444944206172652072656d6f766564e866726f6d207468652073746f726167652c20776869636820726573756c747320696e2074686520696e76616c69646174696f6e206f6620616c6c9c6174746573746174696f6e73206973737565642062792074686520444944207375626a6563742e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696444656c65746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964cc2d204b696c6c733a2044696420656e747279206173736f63696174656420746f2074686520444944206964656e7469666965722c23203c2f7765696768743e3c7265636c61696d5f6465706f73697408012c6469645f7375626a6563740001484469644964656e7469666965724f663c543e00014c656e64706f696e74735f746f5f72656d6f76651c010c753332000b54f45265636c61696d2061206465706f73697420666f722061204449442e20546869732077696c6c2064656c657465207468652044494420616e6420616c6c0901696e666f726d6174696f6e206173736f63696174656420776974682069742c20616674657220766572696679696e672074686174207468652063616c6c657220697364746865206f776e6572206f6620746865206465706f7369742e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f7265207468657864656c657465206f7065726174696f6e206973206576616c75617465642e00f441667465722069742069732064656c657465642c2061204449442077697468207468652073616d65206964656e7469666965722063616e6e6f742062655872652d63726561746564206576657220616761696e2e00010141732074686520726573756c74206f66207468652064656c6574696f6e2c20616c6c20747261636573206f662074686520444944206172652072656d6f766564e866726f6d207468652073746f726167652c20776869636820726573756c747320696e2074686520696e76616c69646174696f6e206f6620616c6c9c6174746573746174696f6e73206973737565642062792074686520444944207375626a6563742e004c456d697473206044696444656c65746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964cc2d204b696c6c733a2044696420656e747279206173736f63696174656420746f2074686520444944206964656e7469666965722c23203c2f7765696768743e3c7375626d69745f6469645f63616c6c0801206469645f63616c6ca1040188426f783c446964417574686f72697a656443616c6c4f7065726174696f6e3c543e3e0001247369676e6174757265390401304469645369676e6174757265000c8cec50726f7879206120646973706174636861626c652063616c6c206f6620616e6f746865722072756e74696d652065787472696e736963207468617458737570706f727473206120444944206f726967696e2e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f726520746865606f7065726174696f6e20697320646973706174636865642e00fc412063616c6c207375626d6974746564207468726f75676820746869732065787472696e736963206d757374206265207369676e65642077697468207468650901726967687420444944206b65792c20646570656e64696e67206f6e207468652063616c6c2e205468697320696e666f726d6174696f6e2069732070726f766964656409016279207468652060446964417574686f72697a656443616c6c4f7065726174696f6e6020706172616d657465722c20776869636820737065636966696573207468650901444944207375626a65637420616374696e6720617320746865206f726967696e206f66207468652063616c6c2c2074686520444944277320747820636f756e7465720101286e6f6e6365292c2074686520646973706174636861626c6520746f2063616c6c20696e2063617365207369676e617475726520766572696669636174696f6ef073756363656564732c207468652074797065206f6620444944206b657920746f2075736520746f2076657269667920746865206f7065726174696f6efc7369676e61747572652c20616e642074686520626c6f636b206e756d62657220746865206f7065726174696f6e2077617320746172676574696e6720666f72a8696e636c7573696f6e2c207768656e20697420776173206372656174656420616e64207369676e65642e00fc496e206361736520746865207369676e617475726520697320696e636f72726563742c20746865206e6f6e6365206973206e6f742076616c69642c20746865fc7265717569726564206b6579206973206e6f742070726573656e7420666f722074686520737065636966696564204449442c206f722074686520626c6f636bfc73706563696669656420697320746f6f206f6c642074686520766572696669636174696f6e206661696c7320616e64207468652063616c6c206973206e6f74f4646973706174636865642e204f74686572776973652c207468652063616c6c2069732070726f7065726c79206469737061746368656420776974682061b8604469644f726967696e60206f726967696e20696e6469636174696e672074686520444944207375626a6563742e00110141207375636365737366756c206469737061746368206f7065726174696f6e20726573756c747320696e2074686520747820636f756e746572206173736f6369617465640501776974682074686520676976656e2044494420746f20626520696e6372656d656e7465642c20746f206d69746967617465207265706c61792061747461636b732e000101546865206469737061746368206f726967696e2063616e20626520616e79204b494c54206163636f756e74207769746820656e6f7567682066756e647320746f0d0165786563757465207468652065787472696e73696320616e6420697420646f6573206e6f74206861766520746f206265207469656420696e20616e792077617920746fb4746865204b494c54206163636f756e74206964656e74696679696e672074686520444944207375626a6563742e0068456d697473206044696443616c6c44697370617463686564602e002823203c7765696768743eb05765696768743a204f283129202b20776569676874206f662074686520646973706174636865642063616c6c782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e6572000d1c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00b8546865207375626a656374206f66207468652063616c6c206d7573742062652074686520646964206f776e65722ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404010c6469640001484469644964656e7469666965724f663c543e000e0cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e55040c0c6469642c6469645f64657461696c73484469644372656174696f6e44657461696c73040454000018010c6469640001484469644964656e7469666965724f663c543e0001247375626d69747465720001384163636f756e7449644f663c543e0001586e65775f6b65795f61677265656d656e745f6b6579735904016c4469644e65774b657941677265656d656e744b65795365743c543e00014c6e65775f6174746573746174696f6e5f6b6579690401684f7074696f6e3c446964566572696669636174696f6e4b65793e0001486e65775f64656c65676174696f6e5f6b6579690401684f7074696f6e3c446964566572696669636174696f6e4b65793e00014c6e65775f736572766963655f64657461696c737d04014c5665633c446964456e64706f696e743c543e3e00005904101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454015d040453000004006104012c42547265655365743c543e00005d040c0c6469642c6469645f64657461696c7340446964456e6372797074696f6e4b65790001041858323535313904000401205b75383b2033325d00000000610404204254726565536574040454015d04000400650400000065040000025d0400690404184f7074696f6e040454016d040108104e6f6e6500000010536f6d6504006d0400000100006d040c0c6469642c6469645f64657461696c7348446964566572696669636174696f6e4b657900010c1c4564323535313904007104013c656432353531393a3a5075626c69630000001c5372323535313904001903013c737232353531393a3a5075626c696300010014456364736104007504013465636473613a3a5075626c69630002000071040c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d000075040c1c73705f636f7265146563647361185075626c696300000400790401205b75383b2033335d000079040000032100000008007d0400000281040081040c0c64696444736572766963655f656e64706f696e74732c446964456e64706f696e7404045400000c010869648504015053657276696365456e64706f696e7449643c543e000134736572766963655f74797065738904017453657276696365456e64706f696e7454797065456e74726965733c543e00011075726c739504017053657276696365456e64706f696e7455726c456e74726965733c543e00008504101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00008904101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454018d04045300000400910401185665633c543e00008d04101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000091040000028d04009504101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540199040453000004009d0401185665633c543e00009904101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00009d04000002990400a1040c0c6469642c6469645f64657461696c7368446964417574686f72697a656443616c6c4f7065726174696f6e040454000014010c6469640001484469644964656e7469666965724f663c543e00012874785f636f756e74657210010c75363400011063616c6ca503014044696443616c6c61626c654f663c543e000130626c6f636b5f6e756d626572100140426c6f636b4e756d6265724f663c543e0001247375626d69747465720001384163636f756e7449644f663c543e0000a5040c4470616c6c65745f6469645f6c6f6f6b75701870616c6c65741043616c6c040454000120446173736f63696174655f6163636f756e7408010c726571a904015c4173736f63696174654163636f756e745265717565737400012865787069726174696f6e1001a03c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a426c6f636b4e756d62657200004405014173736f63696174652074686520676976656e206163636f756e7420746f2074686520444944207468617420617574686f72697a656420746869732063616c6c2e000501546865206163636f756e742068617320746f207369676e207468652044494420616e64206120626c6f636b6e756d62657220616674657220776869636820746865e07369676e6174757265206578706972657320696e206f7264657220746f20617574686f72697a6520746865206173736f63696174696f6e2e001101546865207369676e61747572652077696c6c20626520636865636b656420616761696e737420746865207363616c6520656e636f646564207475706c65206f66207468650d016d6574686f64207370656369666963206964206f662074686520646964206964656e74696669657220616e642074686520626c6f636b206e756d626572206166746572bc776869636820746865207369676e61747572652073686f756c6420626520726567617264656420696e76616c69642e001101456d69747320604173736f63696174696f6e45737461626c69736865646020616e642c206f7074696f6e616c6c792c20604173736f63696174696f6e52656d6f76656460d069662074686572652077617320612070726576696f7573206173736f63696174696f6e20666f7220746865206163636f756e742e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e406173736f63696174655f73656e64657200012c01014173736f6369617465207468652073656e646572206f66207468652063616c6c20746f2074686520444944207468617420617574686f72697a656420746869731463616c6c2e001101456d69747320604173736f63696174696f6e45737461626c69736865646020616e642c206f7074696f6e616c6c792c20604173736f63696174696f6e52656d6f76656460d069662074686572652077617320612070726576696f7573206173736f63696174696f6e20666f7220746865206163636f756e742e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e6472656d6f76655f73656e6465725f6173736f63696174696f6e000228fc52656d6f766520746865206173736f63696174696f6e206f66207468652073656e646572206163636f756e742e20546869732063616c6c20646f65736e27740d01726571756972652074686520617574686f72697a6174696f6e206f6620746865204449442c206275742072657175697265732061207369676e6564206f726967696e2e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e6872656d6f76655f6163636f756e745f6173736f63696174696f6e04011c6163636f756e74090101444c696e6b61626c654163636f756e74496400032c110152656d6f766520746865206173736f63696174696f6e206f66207468652070726f7669646564206163636f756e742049442e20546869732063616c6c20646f65736e27740d01726571756972652074686520617574686f72697a6174696f6e206f6620746865206163636f756e742049442c2062757420746865206173736f63696174656420444944c46e6565647320746f206d617463682074686520444944207468617420617574686f72697a656420746869732063616c6c2e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e3c7265636c61696d5f6465706f73697404011c6163636f756e74090101444c696e6b61626c654163636f756e74496400042c090152656d6f766520746865206173736f63696174696f6e206f66207468652070726f7669646564206163636f756e742e20546869732063616c6c2063616e206f6e6c79f862652063616c6c65642066726f6d20746865206465706f736974206f776e65722e20546865207265736572766564206465706f7369742077696c6c2062651866726565642e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129582d2052656164733a20436f6e6e6563746564446964735c2d205772697465733a20436f6e6e6563746564446964732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657204011c6163636f756e74090101444c696e6b61626c654163636f756e74496400051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00d8546865207375626a656374206f66207468652063616c6c206d757374206265206c696e6b656420746f20746865206163636f756e742ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404011c6163636f756e74090101444c696e6b61626c654163636f756e74496400060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e1c6d6967726174650401146c696d69741c010c75333200fe18e8457865637574657320746865206b65792074797065206d6967726174696f6e206f66207468652060436f6e6e6563746564446964736020616e64010160436f6e6e65637465644163636f756e7473602073746f726167657320627920636f6e76657274696e672074686520676976656e20604163636f756e74496460f0696e746f20604c696e6b61626c654163636f756e744964284163636f756e74496429602e204f6e636520616c6c206b6579732068617665206265656efc6d696772617465642c20746865206d6967726174696f6e20697320646f6e6520616e6420746869732063616c6c2077696c6c2062652066696c74657265642e007043616e2062652063616c6c656420627920616e79206f726967696e2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea9040c4470616c6c65745f6469645f6c6f6f6b7570646173736f63696174655f6163636f756e745f726571756573745c4173736f63696174654163636f756e745265717565737400010820506f6c6b61646f74080000012c4163636f756e74496433320000ad0401384d756c74695369676e617475726500000020457468657265756d08000d01012c4163636f756e74496432300000b1040144457468657265756d5369676e617475726500010000ad04082873705f72756e74696d65384d756c74695369676e617475726500010c1c4564323535313904003d040148656432353531393a3a5369676e61747572650000001c53723235353139040045040148737232353531393a3a5369676e617475726500010014456364736104004904014065636473613a3a5369676e617475726500020000b1040c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e7444457468657265756d5369676e6174757265000004004904014065636473613a3a5369676e61747572650000b5040c4470616c6c65745f776562335f6e616d65731870616c6c65741043616c6c04045400011c14636c61696d0401106e616d651d010140576562334e616d65496e7075743c543e00003ce841737369676e2074686520737065636966696564206e616d6520746f20746865206f776e65722061732073706563696669656420696e207468651c6f726967696e2e000d01546865206e616d65206d757374206e6f74206861766520616c7265616479206265656e20636c61696d656420627920736f6d656f6e6520656c736520616e6420746865a06f776e6572206d757374206e6f7420616c7265616479206f776e20616e6f74686572206e616d652e00dc456d6974732060576562334e616d65436c61696d65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f28312909012d2052656164733a204e616d65732c204f776e65722c2042616e6e65642073746f7261676520656e7472696573202b20617661696c61626c652063757272656e6379582020636865636b202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f73697420726573657276652c23203c2f7765696768743e4072656c656173655f62795f6f776e6572000130a452656c65617365207468652070726f7669646564206e616d652066726f6d20697473206f776e65722e00cc546865206f726967696e206d75737420626520746865206f776e6572206f662074686520737065636966696564206e616d652e00e0456d6974732060576562334e616d6552656c65617365646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129ac2d2052656164733a204e616d65732073746f7261676520656e747279202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f7369742072656c656173652c23203c2f7765696768743e3c7265636c61696d5f6465706f7369740401106e616d651d010140576562334e616d65496e7075743c543e000230a452656c65617365207468652070726f7669646564206e616d652066726f6d20697473206f776e65722e000101546865206f726967696e206d75737420626520746865206163636f756e742074686174207061696420666f7220746865206e616d652773206465706f7369742e00e0456d6974732060576562334e616d6552656c65617365646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129ac2d2052656164733a204f776e65722073746f7261676520656e747279202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f7369742072656c656173652c23203c2f7765696768743e0c62616e0401106e616d651d010140576562334e616d65496e7075743c543e0003402c42616e2061206e616d652e00f4412062616e6e6564206e616d652063616e6e6f7420626520636c61696d656420627920616e796f6e652e20546865206e616d652773206465706f7369748869732072657475726e656420746f20746865206f726967696e616c2070617965722e0088546865206f726967696e206d757374206265207468652062616e206f726967696e2e00d8456d6974732060576562334e616d6542616e6e65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129f02d2052656164733a2042616e6e65642c204f776e65722c204e616d65732073746f7261676520656e7472696573202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722c2042616e6e65642073746f7261676520656e7472696573202b2063757272656e6379206465706f73697424202072656c656173652c23203c2f7765696768743e14756e62616e0401106e616d651d010140576562334e616d65496e7075743c543e00043834556e62616e2061206e616d652e00704d616b652061206e616d6520636c61696d61626c6520616761696e2e0088546865206f726967696e206d757374206265207468652062616e206f726967696e2e00e0456d6974732060576562334e616d65556e62616e6e65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129b02d2052656164733a2042616e6e65642073746f7261676520656e747279202b206f726967696e20636865636bb82d205772697465733a2042616e6e65642073746f7261676520656e747279206465706f7369742072656c656173652c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657200051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00e8546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f662074686520776562336e616d652ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f7369740401286e616d655f696e7075741d010140576562334e616d65496e7075743c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb9040c487075626c69635f63726564656e7469616c731870616c6c65741043616c6c04045400011c0c61646404012863726564656e7469616cbd040164426f783c496e70757443726564656e7469616c4f663c543e3e000018a852656769737465722061206e6577207075626c69632063726564656e7469616c206f6e20636861696e2e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c2077697468207468652073616d65206964656e74696669657220616c72656164798465786973747320666f722074686520737065636966696564207375626a6563742e0064456d697473206043726564656e7469616c53746f726564602e187265766f6b6508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e250401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000120705265766f6b65732061207075626c69632063726564656e7469616c2e001101496620612063726564656e7469616c2077617320616c7265616479207265766f6b65642c20746869732066756e6374696f6e20646f6573206e6f74206661696c206275746473696d706c7920726573756c747320696e2061206e6f6f702e000101546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f207265766f6b65207468652063726564656e7469616c2e0068456d697473206043726564656e7469616c5265766f6b6564602e20756e7265766f6b6508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e250401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e00022478556e7265766f6b65732061207075626c69632063726564656e7469616c2e000101496620612063726564656e7469616c20776173206e6f74207265766f6b65642c20746869732066756e6374696f6e20646f6573206e6f74206661696c206275746473696d706c7920726573756c747320696e2061206e6f6f702e00d8546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f20756e7265766f6b65207468652c63726564656e7469616c2e0070456d697473206043726564656e7469616c556e7265766f6b6564602e1872656d6f766508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e250401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000344fc52656d6f7665732074686520696e666f726d6174696f6e207065727461696e696e672061207075626c69632063726564656e7469616c2066726f6d2074686518636861696e2e0009015468652072656d6f76616c206f66207468652063726564656e7469616c20646f6573206e6f742064656c65746520697420656e746972656c792066726f6d207468650501626c6f636b636861696e20686973746f72792c20627574206f6e6c7920697473206c696e6b202a66726f6d2a2074686520626c6f636b636861696e2073746174659c2a746f2a2074686520626c6f636b636861696e20686973746f72792069732072656d6f7665642e00cc436c69656e74732070617273696e67207075626c69632063726564656e7469616c732073686f756c6420696e746572707265740101746865206c61636b206f6620737563682061206c696e6b2061732074686520666163742074686174207468652063726564656e7469616c20686173206265656eb872656d6f7665642062792069747320617474657374657220736f6d652074696d6520696e2074686520706173742e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c20616c72656164792065786973747320666f722074686520737065636966696564207375626a6563742e000101546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f2072656d6f7665207468652063726564656e7469616c2e0068456d697473206043726564656e7469616c52656d6f766564602e3c7265636c61696d5f6465706f73697404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000448fc52656d6f7665732074686520696e666f726d6174696f6e207065727461696e696e672061207075626c69632063726564656e7469616c2066726f6d20746865ac636861696e20616e642072657475726e7320746865206465706f73697420746f206974732070617965722e0009015468652072656d6f76616c206f66207468652063726564656e7469616c20646f6573206e6f742064656c65746520697420656e746972656c792066726f6d207468650501626c6f636b636861696e20686973746f72792c20627574206f6e6c7920697473206c696e6b202a66726f6d2a2074686520626c6f636b636861696e2073746174659c2a746f2a2074686520626c6f636b636861696e20686973746f72792069732072656d6f7665642e00cc436c69656e74732070617273696e67207075626c69632063726564656e7469616c732073686f756c6420696e746572707265740101746865206c61636b206f6620737563682061206c696e6b2061732074686520666163742074686174207468652063726564656e7469616c20686173206265656eb872656d6f7665642062792069747320617474657374657220736f6d652074696d6520696e2074686520706173742e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c20616c72656164792065786973747320666f722074686520737065636966696564207375626a6563742e000d01546865206469737061746368206f726967696e206d75737420626520746865206f776e6572206f6620746865206465706f7369742c2068656e6365206e6f74207468655863726564656e7469616c27732061747465737465722e0068456d697473206043726564656e7469616c52656d6f766564602e506368616e67655f6465706f7369745f6f776e657204013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e00051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00f0546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f66207468652063726564656e7469616c2ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ebd040c487075626c69635f63726564656e7469616c732c63726564656e7469616c732843726564656e7469616c1024437479706548617368012c445375626a6563744964656e74696669657201c10418436c61696d7301c50434416363657373436f6e74726f6c0129040010012863747970655f686173682c012443747970654861736800011c7375626a656374c10401445375626a6563744964656e746966696572000118636c61696d73c5040118436c61696d73000134617574686f72697a6174696f6e250401544f7074696f6e3c416363657373436f6e74726f6c3e0000c104101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000c504101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000c9040c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f6461746104011064617461cd04015450617261636861696e496e686572656e744461746100002480536574207468652063757272656e742076616c69646174696f6e20646174612e004101546869732073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e887068617365206966207468652063616c6c20776173206e6f7420696e766f6b65642e00d0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e7460002101417320612073696465206566666563742c20746869732066756e6374696f6e207570677261646573207468652063757272656e742076616c69646174696f6e2066756e6374696f6e8469662074686520617070726f7072696174652074696d652068617320636f6d652e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653001345570776172644d65737361676500010044617574686f72697a655f75706772616465040124636f64655f686173682c011c543a3a4861736800020060656e6163745f617574686f72697a65645f75706772616465040110636f646530011c5665633c75383e000300042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ecd04089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f64617461d104015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f7374617465d904015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d65737361676573e104016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573e90401a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e0000d1040c4c706f6c6b61646f745f7072696d6974697665730876325c50657273697374656456616c69646174696f6e44617461080448012c044e011c0010012c706172656e745f68656164d5040120486561644461746100014c72656c61795f706172656e745f6e756d6265721c01044e00016472656c61795f706172656e745f73746f726167655f726f6f742c0104480001306d61785f706f765f73697a651c010c7533320000d5040c48706f6c6b61646f745f70617261636861696e287072696d6974697665732048656164446174610000040030011c5665633c75383e0000d9040c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f646573dd04014442547265655365743c5665633c75383e3e0000dd040420425472656553657404045401300004009502000000e104000002e50400e5040860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d626572011c0008011c73656e745f61741c012c426c6f636b4e756d62657200010c6d736730013c446f776e776172644d6573736167650000e904042042547265654d617008044b019d01045601ed04000400f504000000ed04000002f10400f1040860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d626572011c0008011c73656e745f61741c012c426c6f636b4e756d6265720001106461746130015073705f7374643a3a7665633a3a5665633c75383e0000f504000002f90400f904000004089d01ed0400fd040c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c04045400012448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d697424011857656967687400003484536572766963657320612073696e676c65206f7665727765696768742058434d2e00c02d20606f726967696e603a204d75737420706173732060457865637574654f7665727765696768744f726967696e602ed42d2060696e646578603a2054686520696e646578206f6620746865206f7665727765696768742058434d20746f20736572766963650d012d20607765696768745f6c696d6974603a2054686520616d6f756e74206f662077656967687420746861742058434d20657865637574696f6e206d61792074616b652e001c4572726f72733a5d012d20604261644f766572776569676874496e646578603a2058434d20756e6465722060696e64657860206973206e6f7420666f756e6420696e2074686520604f766572776569676874602073746f72616765206d61702e45012d206042616458636d603a2058434d20756e6465722060696e646578602063616e6e6f742062652070726f7065726c79206465636f64656420696e746f20612076616c69642058434d20666f726d61742e09012d20605765696768744f7665724c696d6974603a2058434d20657865637574696f6e206d617920757365206772656174657220607765696768745f6c696d6974602e001c4576656e74733a8c2d20604f7665727765696768745365727669636564603a204f6e20737563636573732e5473757370656e645f78636d5f657865637574696f6e00010c490153757370656e647320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652c207265676172646c657373206f66207468652073656e6465722773206f726967696e2e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e50726573756d655f78636d5f657865637574696f6e000214b8526573756d657320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652e003d014e6f7465207468617420746869732066756e6374696f6e20646f65736e2774206368616e67652074686520737461747573206f662074686520696e2f6f757420626f756e64206368616e6e656c732e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e607570646174655f73757370656e645f7468726573686f6c6404010c6e65771c010c75333200031499014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e2074686520717565756520666f7220746865206f74686572207369646520746f20626520746f6c6420746f5873757370656e642074686569722073656e64696e672e00742d20606f726967696e603a204d75737420706173732060526f6f74602ee82d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e73757370656e645f76616c756560547570646174655f64726f705f7468726573686f6c6404010c6e65771c010c75333200041495014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e207468652071756575652061667465722077686963682077652064726f7020616e792066757274686572686d657373616765732066726f6d20746865206368616e6e656c2e00742d20606f726967696e603a204d75737420706173732060526f6f74602eec2d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e64726f705f7468726573686f6c64605c7570646174655f726573756d655f7468726573686f6c6404010c6e65771c010c75333200051491014f76657277726974657320746865206e756d626572206f66207061676573206f66206d6573736167657320776869636820746865207175657565206d757374206265207265647563656420746f206265666f7265206974207369676e616c732074686174ec6d6573736167652073656e64696e67206d6179207265636f6d6d656e636520616674657220697420686173206265656e2073757370656e6465642e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e726573756d655f7468726573686f6c64605c7570646174655f7468726573686f6c645f77656967687404010c6e657724011857656967687400061049014f7665727772697465732074686520616d6f756e74206f662072656d61696e696e672077656967687420756e6465722077686963682077652073746f702070726f63657373696e67206d657373616765732e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7468726573686f6c645f77656967687460707570646174655f7765696768745f72657374726963745f646563617904010c6e657724011857656967687400071445014f7665727772697465732074686520737065656420746f2077686963682074686520617661696c61626c652077656967687420617070726f616368657320746865206d6178696d756d207765696768742ea50141206c6f776572206e756d62657220726573756c747320696e2061206661737465722070726f6772657373696f6e2e20412076616c7565206f662031206d616b65732074686520656e746972652077656967687420617661696c61626c6520696e697469616c6c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e0d012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7765696768745f72657374726963745f6465636179602e847570646174655f78636d705f6d61785f696e646976696475616c5f77656967687404010c6e657724011857656967687400081429014f766572777269746520746865206d6178696d756d20616d6f756e74206f662077656967687420616e7920696e646976696475616c206d657373616765206d617920636f6e73756d652e71014d657373616765732061626f766520746869732077656967687420676f20696e746f20746865206f76657277656967687420717565756520616e64206d6179206f6e6c79206265207365727669636564206578706c696369746c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e21012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e78636d705f6d61785f696e646976696475616c5f776569676874602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e01050c2870616c6c65745f78636d1870616c6c65741043616c6c0404540001281073656e64080110646573746902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011c6d65737361676505050154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f617373657473100110646573746902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172796902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747331020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c75333200013c110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f617373657473100110646573746902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172796902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747331020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320002404d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d657373616765350501c0426f783c56657273696f6e656458636d3c3c5420617320537973436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f77656967687424011857656967687400032cd04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e006d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e2074686559016d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f20657865637574696f6e54617474656d70742077696c6c206265206d6164652e006d014e4f54453a2041207375636365737366756c2072657475726e20746f207468697320646f6573202a6e6f742a20696d706c7920746861742074686520606d73676020776173206578656375746564207375636365737366756c6c79cc746f20636f6d706c6574696f6e3b206f6e6c792074686174202a736f6d652a206f66206974207761732065786563757465642e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6ea9010148426f783c4d756c74694c6f636174696f6e3e00012c78636d5f76657273696f6e1c012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00642d20606f726967696e603a204d75737420626520526f6f742ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6eb10301484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00642d20606f726967696e603a204d75737420626520526f6f742e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e6902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00642d20606f726967696e603a204d75737420626520526f6f742e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e6902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00642d20606f726967696e603a204d75737420626520526f6f742e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f617373657473140110646573746902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172796902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747331020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320001307765696768745f6c696d69742d02012c5765696768744c696d69740008484d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f617373657473140110646573746902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172796902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747331020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320001307765696768745f6c696d69742d02012c5765696768744c696d6974000944110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e0505080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204000905015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400cd01015076333a3a58636d3c52756e74696d6543616c6c3e0003000009050c0c78636d0876320c58636d042c52756e74696d6543616c6c000004000d0501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e00000d0500000211050011050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404003502012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404003502012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404003502012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f696428011c51756572794964000120726573706f6e736515050120526573706f6e73650001286d61785f77656967687428010c753634000300345472616e7366657241737365740801186173736574733502012c4d756c746941737365747300012c62656e6566696369617279450201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574733502012c4d756c746941737365747300011064657374450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065150201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c19020168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b501010c7533320001406d61785f6d6573736167655f73697a65b501010c7533320001306d61785f6361706163697479b501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b501010c75333200011873656e646572b501010c753332000124726563697069656e74b501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040049020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f696428011c5175657279496400011064657374450201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f77656967687428010c753634000c00304465706f73697441737365740c0118617373657473250501404d756c7469417373657446696c7465720001286d61785f617373657473b501010c75333200012c62656e6566696369617279450201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473250501404d756c7469417373657446696c7465720001286d61785f617373657473b501010c75333200011064657374450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e000e003445786368616e6765417373657408011067697665250501404d756c7469417373657446696c74657200011c726563656976653502012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473250501404d756c7469417373657446696c74657200011c72657365727665450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473250501404d756c7469417373657446696c74657200011064657374450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f696428011c5175657279496400011064657374450201344d756c74694c6f636174696f6e000118617373657473250501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f77656967687428010c75363400120030427579457865637574696f6e080110666565733d0201284d756c746941737365740001307765696768745f6c696d69743105012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204000905014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804000905014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574733502012c4d756c74694173736574730001187469636b6574450201344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f77656967687428010c753634001a0048556e73756273637269626556657273696f6e001b000015050c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304003502012c4d756c74694173736574730001003c457865637574696f6e526573756c740400190501504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e04001c013873757065723a3a56657273696f6e00030000190504184f7074696f6e040454011d050108104e6f6e6500000010536f6d6504001d0500000100001d05000004081c2105002105100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404001001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c65001900002505100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504003502012c4d756c74694173736574730000001057696c6404002905013857696c644d756c74694173736574000100002905100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869644102011c4173736574496400010c66756e2d05013c57696c6446756e676962696c697479000100002d05100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000031050c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d69746564040028010c753634000100003505080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204003905015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304004905015076333a3a58636d3c52756e74696d6543616c6c3e0003000039050c0c78636d0876320c58636d042c52756e74696d6543616c6c000004003d0501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e00003d0500000241050041050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404003502012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404003502012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404003502012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f696428011c51756572794964000120726573706f6e736515050120526573706f6e73650001286d61785f77656967687428010c753634000300345472616e7366657241737365740801186173736574733502012c4d756c746941737365747300012c62656e6566696369617279450201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574733502012c4d756c746941737365747300011064657374450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065150201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c45050168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b501010c7533320001406d61785f6d6573736167655f73697a65b501010c7533320001306d61785f6361706163697479b501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b501010c75333200011873656e646572b501010c753332000124726563697069656e74b501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040049020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f696428011c5175657279496400011064657374450201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f77656967687428010c753634000c00304465706f73697441737365740c0118617373657473250501404d756c7469417373657446696c7465720001286d61785f617373657473b501010c75333200012c62656e6566696369617279450201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473250501404d756c7469417373657446696c7465720001286d61785f617373657473b501010c75333200011064657374450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e000e003445786368616e6765417373657408011067697665250501404d756c7469417373657446696c74657200011c726563656976653502012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473250501404d756c7469417373657446696c74657200011c72657365727665450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473250501404d756c7469417373657446696c74657200011064657374450201344d756c74694c6f636174696f6e00010c78636d0905011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f696428011c5175657279496400011064657374450201344d756c74694c6f636174696f6e000118617373657473250501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f77656967687428010c75363400120030427579457865637574696f6e080110666565733d0201284d756c746941737365740001307765696768745f6c696d69743105012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204003905014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804003905014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574733502012c4d756c74694173736574730001187469636b6574450201344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f77656967687428010c753634001a0048556e73756273637269626556657273696f6e001b000045050c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656430011c5665633c75383e000049050c0c78636d0876330c58636d041043616c6c000004004d0501585665633c496e737472756374696f6e3c43616c6c3e3e00004d0500000251050051050c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400d901012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400d901012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400d901012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f696428011c51756572794964000120726573706f6e7365f5010120526573706f6e73650001286d61785f77656967687424011857656967687400011c71756572696572110201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473d901012c4d756c746941737365747300012c62656e6566696369617279a90101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473d901012c4d756c746941737365747300011064657374a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64150201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737424011857656967687400011063616c6c4505014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572b501010c7533320001406d61785f6d6573736167655f73697a65b501010c7533320001306d61785f6361706163697479b501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74b501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72b501010c75333200011873656e646572b501010c753332000124726563697069656e74b501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400ad010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f7204001d0201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473210201404d756c7469417373657446696c74657200012c62656e6566696369617279a90101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473210201404d756c7469417373657446696c74657200011064657374a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e000e003445786368616e676541737365740c011067697665210201404d756c7469417373657446696c74657200011077616e74d901012c4d756c746941737365747300011c6d6178696d616ca40110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473210201404d756c7469417373657446696c74657200011c72657365727665a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473210201404d756c7469417373657446696c74657200011064657374a90101344d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f1d0201445175657279526573706f6e7365496e666f000118617373657473210201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573e10101284d756c746941737365740001307765696768745f6c696d69742d02012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204004905012458636d3c43616c6c3e0015002c536574417070656e64697804004905012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473d901012c4d756c74694173736574730001187469636b6574a90101344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f776569676874240118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400d901012c4d756c7469417373657473001c002c45787065637441737365740400d901012c4d756c7469417373657473001d00304578706563744f726967696e0400110201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400f90101504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304000d0201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6530011c5665633c75383e000134726573706f6e73655f696e666f1d0201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578b501010c7533320001106e616d6530011c5665633c75383e00012c6d6f64756c655f6e616d6530011c5665633c75383e00012c63726174655f6d616a6f72b501010c75333200013c6d696e5f63726174655f6d696e6f72b501010c753332002200505265706f72745472616e7361637453746174757304001d0201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400b10101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bbd0101244e6574776f726b496400012c64657374696e6174696f6ead010154496e746572696f724d756c74694c6f636174696f6e00010c78636dcd01011c58636d3c28293e002600244c6f636b41737365740801146173736574e10101284d756c74694173736574000120756e6c6f636b6572a90101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574e10101284d756c74694173736574000118746172676574a90101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574e10101284d756c746941737365740001146f776e6572a90101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574e10101284d756c746941737365740001186c6f636b6572a90101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177a40110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400a90101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69742d02012c5765696768744c696d6974000130636865636b5f6f726967696e110201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f000055050c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c65741043616c6c04045400010448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d6974240118576569676874000004905365727669636520612073696e676c65206f766572776569676874206d6573736167652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e59050000029d03005d0500000408610518006105101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540100045300000400250301185665633c543e000065050c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d62657201102050726f706f73616c01a1031c42616c616e6365011801081c4f6e676f696e670400690501c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564a40110626f6f6c00010c656e6410012c426c6f636b4e756d6265720001000069050c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d62657201102050726f706f73616c01a1031c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200012070726f706f73616ca103012050726f706f73616c0001247468726573686f6c64940134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c796d05013854616c6c793c42616c616e63653e00006d050c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e6365000071050c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f746573000108184469726563740c0114766f746573750501f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e738105015044656c65676174696f6e733c42616c616e63653e0001147072696f728505017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6ead030128436f6e76696374696f6e00012c64656c65676174696f6e738105015044656c65676174696f6e733c42616c616e63653e0001147072696f728505017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e000100007505101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540179050453000004007d0501185665633c543e00007905000004081c98007d0500000279050081050c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e6365000085050c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e63650000890500000408a10394008d05000004081061050091050c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f7204045400015c2056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7704b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909099505101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454012c045300000400790201185665633c543e00009905084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e6465781c013450726f706f73616c496e6465780001247468726573686f6c641c012c4d656d626572436f756e7400011061796573250301385665633c4163636f756e7449643e0001106e617973250301385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d62657200009d050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a105101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454012c045300000400790201185665633c543e0000a5050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a905101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540100045300000400250301185665633c543e0000ad050c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b105083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e63650000b505101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e646564566563080454011c045300000400350301185665633c543e0000b9050c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c000004001c010c7533320000bd0504184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000c10508346672616d655f737570706f72742050616c6c6574496400000400f101011c5b75383b20385d0000c5050c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900011470496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e04784572726f7220666f72207468652074726561737572792070616c6c65742ec9050c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909cd05101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401fd03045300000400d10501185665633c543e0000d105000002fd0300d505083870616c6c65745f76657374696e672052656c656173657300010808563000000008563100010000d9050c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742edd05101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401e105045300000400e90501185665633c543e0000e10504184f7074696f6e04045401e5050108104e6f6e6500000010536f6d650400e5050000010000e505084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c01a1032c426c6f636b4e756d62657201103450616c6c6574734f726967696e01d903244163636f756e7449640100001401206d617962655f6964cc01304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6ca103011043616c6c0001386d617962655f706572696f646963050401944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696ed903013450616c6c6574734f726967696e0000e905000002e10500ed050c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909f10500000408f5051800f505101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401f905045300000400fd0501185665633c543e0000f905083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501d42c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065d4012450726f78795479706500011464656c617910012c426c6f636b4e756d6265720000fd05000002f90500010600000408050618000506101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e6465645665630804540109060453000004000d0601185665633c543e00000906083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e74496401001048617368012c2c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173682c01104861736800011868656967687410012c426c6f636b4e756d62657200000d0600000209060011060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909091506083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f73697419060150284163636f756e7449642c2042616c616e63652900010c6c656e1c010c753332000000245265717565737465640c011c6465706f7369741d0601704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e741c010c75333200010c6c656eb103012c4f7074696f6e3c7533323e000100001906000004080018001d0604184f7074696f6e0404540119060108104e6f6e6500000010536f6d650400190600000100002106000004082c1c002506101c73705f636f72651c626f756e6465642c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000029060c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909092d060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909093106082c70616c6c65745f746970731c4f70656e54697010244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d62657201101048617368012c001c0118726561736f6e2c01104861736800010c77686f0001244163636f756e74496400011866696e6465720001244163636f756e74496400011c6465706f73697418011c42616c616e6365000118636c6f7365733506014c4f7074696f6e3c426c6f636b4e756d6265723e00011074697073390601645665633c284163636f756e7449642c2042616c616e6365293e00012c66696e646572735f666565a40110626f6f6c0000350604184f7074696f6e04045401100108104e6f6e6500000010536f6d65040010000001000039060000021906003d060c3473705f61726974686d65746963287065725f7468696e67731c50657263656e74000004000801087538000041060c2c70616c6c65745f746970731870616c6c6574144572726f7208045400044900011830526561736f6e546f6f4269670000048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e30416c72656164794b6e6f776e00010488546865207469702077617320616c726561647920666f756e642f737461727465642e28556e6b6e6f776e5469700002046054686520746970206861736820697320756e6b6e6f776e2e244e6f7446696e6465720003041d01546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e245374696c6c4f70656e0004042901546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e245072656d61747572650005043101546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090945060c1463747970652c63747970655f656e747279284374797065456e747279081c43726561746f7201002c426c6f636b4e756d62657201100008011c63726561746f7200011c43726561746f72000128637265617465645f617410012c426c6f636b4e756d626572000049060c1463747970651870616c6c6574144572726f7204045400010c204e6f74466f756e64000004985468657265206973206e6f20435479706520776974682074686520676976656e20686173682e34416c72656164794578697374730001046454686520435479706520616c7265616479206578697374732e3c556e61626c65546f506179466565730002040d0154686520706179696e67206163636f756e742077617320756e61626c6520746f2070617920746865206665657320666f72206372656174696e6720612063747970652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909094d060c2c6174746573746174696f6e306174746573746174696f6e73484174746573746174696f6e44657461696c73040454000014012863747970655f686173682c01384374797065486173684f663c543e000120617474657374657200013441747465737465724f663c543e000140617574686f72697a6174696f6e5f6964f001704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e00011c7265766f6b6564a40110626f6f6c00011c6465706f736974510601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e000051060c306b696c745f737570706f72741c6465706f7369741c4465706f736974081c4163636f756e7401001c42616c616e63650118000801146f776e657200011c4163636f756e74000118616d6f756e7418011c42616c616e63650000550600000408f42c0059060c2c6174746573746174696f6e1870616c6c6574144572726f720404540001183c416c726561647941747465737465640000080901546865726520697320616c726561647920616e206174746573746174696f6e2077697468207468652073616d6520636c61696d20686173682073746f726564206f6e18636861696e2e38416c72656164795265766f6b6564000104a4546865206174746573746174696f6e2068617320616c7265616479206265656e207265766f6b65642e204e6f74466f756e64000204c04e6f206174746573746174696f6e206f6e20636861696e206d61746368696e672074686520636c61696d20686173682e3443547970654d69736d61746368000308fc546865206174746573746174696f6e20435479706520646f6573206e6f74206d61746368207468652043547970652073706563696669656420696e207468656864656c65676174696f6e2068696572617263687920726f6f742e344e6f74417574686f72697a6564000404f05468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f206368616e676520746865206174746573746174696f6e2e804d617844656c6567617465644174746573746174696f6e73457863656564656400050cf4546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732068617320616c7265616479206265656e05017265616368656420666f722074686520636f72726573706f6e64696e672064656c65676174696f6e2069642073756368207468617420616e6f74686572206f6e654063616e6e6f742062652061646465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909095d060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368793844656c65676174696f6e4e6f646504045400001401446869657261726368795f726f6f745f69642c015444656c65676174696f6e4e6f646549644f663c543e000118706172656e74610601744f7074696f6e3c44656c65676174696f6e4e6f646549644f663c543e3e0001206368696c6472656e650601d8426f756e64656442547265655365743c44656c65676174696f6e4e6f646549644f663c543e2c20543a3a4d61784368696c6472656e3e00011c64657461696c736d06015044656c65676174696f6e44657461696c733c543e00011c6465706f736974510601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e0000610604184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c00000100006506101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454012c0453000004006906012c42547265655365743c543e0000690604204254726565536574040454012c00040079020000006d060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368794444656c65676174696f6e44657461696c7304045400000c01146f776e657200014044656c656761746f7249644f663c543e00011c7265766f6b6564a40110626f6f6c00012c7065726d697373696f6e73fc012c5065726d697373696f6e73000071060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368796844656c65676174696f6e48696572617263687944657461696c73040454000004012863747970655f686173682c01384374797065486173684f663c543e000075060c2864656c65676174696f6e1870616c6c6574144572726f720404540001585c44656c65676174696f6e416c72656164794578697374730000041101546865726520697320616c726561647920612064656c65676174696f6e206e6f64652077697468207468652073616d652049442073746f726564206f6e20636861696e2e60496e76616c696444656c65676174655369676e617475726500010805015468652064656c65676174652773207369676e617475726520666f72207468652064656c65676174696f6e206372656174696f6e206f7065726174696f6e20697320696e76616c69642e4844656c65676174696f6e4e6f74466f756e64000204c04e6f2064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e4044656c65676174654e6f74466f756e64000304b84e6f2064656c656761746520776974682074686520676976656e2049442073746f726564206f6e20636861696e2e58486965726172636879416c7265616479457869737473000404f8546865726520697320616c72656164792061206869657261726368792077697468207468652073616d652049442073746f726564206f6e20636861696e2e444869657261726368794e6f74466f756e64000504bc4e6f2068696572617263687920776974682074686520676976656e2049442073746f726564206f6e20636861696e2e544d617853656172636844657074685265616368656400060409014d6178206e756d626572206f66206e6f64657320636865636b656420776974686f757420766572696679696e672074686520676976656e20636f6e646974696f6e2e684e6f744f776e65724f66506172656e7444656c65676174696f6e000708f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6ef462656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20706172656e74206e6f64652e744e6f744f776e65724f6644656c65676174696f6e486965726172636879000808f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6eec62656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20726f6f74206e6f64652e60506172656e7444656c65676174696f6e4e6f74466f756e64000904dc4e6f20706172656e742064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e5c506172656e7444656c65676174696f6e5265766f6b6564000a04c854686520706172656e742064656c65676174696f6e206861732070726576696f75736c79206265656e207265766f6b65642e58556e617574686f72697a65645265766f636174696f6e000b04fc5468652064656c65676174696f6e207265766f6b6572206973206e6f7420616c6c6f77656420746f207265766f6b65207468652064656c65676174696f6e2e4c556e617574686f72697a656452656d6f76616c000c04ec5468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f2072656d6f7665207468652064656c65676174696f6e2e58556e617574686f72697a656444656c65676174696f6e000d04fc5468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f20637265617465207468652064656c65676174696f6e2e3041636365737344656e696564000e04f0546865206f7065726174696f6e207761736e277420616c6c6f7765642062656361757365206f6620696e73756666696369656e74207269676874732e6045786365656465645265766f636174696f6e426f756e6473000f080d014d6178206e756d626572206f66207265766f636174696f6e7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7238746865206f7065726174696f6e2e54457863656564656452656d6f76616c426f756e647300100811014d6178206e756d626572206f662072656d6f76616c7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7220746865286f7065726174696f6e2e584d61785265766f636174696f6e73546f6f4c61726765001104f8546865206d6178206e756d626572206f66207265766f636174696f6e206578636565647320746865206c696d697420666f72207468652070616c6c65742e4c4d617852656d6f76616c73546f6f4c61726765001204f0546865206d6178206e756d626572206f662072656d6f76616c73206578636565647320746865206c696d697420666f72207468652070616c6c65742e5c4d6178506172656e74436865636b73546f6f4c617267650013040501546865206d6178206e756d626572206f6620706172656e7420636865636b73206578636565647320746865206c696d697420666f72207468652070616c6c65742e20496e7465726e616c001404f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e4c4d61784368696c6472656e4578636565646564001508dc546865206d6178206e756d626572206f6620616c6c206368696c6472656e20686173206265656e207265616368656420666f722074686578636f72726573706f6e64696e672064656c65676174696f6e206e6f64652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090979060c0c6469642c6469645f64657461696c732844696444657461696c7304045400001c014861757468656e7469636174696f6e5f6b65792c01284b657949644f663c543e0001486b65795f61677265656d656e745f6b6579737d0601604469644b657941677265656d656e744b65795365743c543e00013864656c65676174696f6e5f6b6579610601484f7074696f6e3c4b657949644f663c543e3e00013c6174746573746174696f6e5f6b6579610601484f7074696f6e3c4b657949644f663c543e3e00012c7075626c69635f6b657973810601484469645075626c69634b65794d61703c543e00013c6c6173745f74785f636f756e74657210010c75363400011c6465706f736974510601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e00007d06101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454012c0453000004006906012c42547265655365743c543e00008106101c73705f636f72651c626f756e64656444626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b012c04560185060453000004008d06013842547265654d61703c4b2c20563e000085060c0c6469642c6469645f64657461696c734c4469645075626c69634b657944657461696c73042c426c6f636b4e756d62657201100008010c6b6579890601304469645075626c69634b6579000130626c6f636b5f6e756d62657210012c426c6f636b4e756d626572000089060c0c6469642c6469645f64657461696c73304469645075626c69634b6579000108545075626c6963566572696669636174696f6e4b657904006d040148446964566572696669636174696f6e4b65790000004c5075626c6963456e6372797074696f6e4b657904005d040140446964456e6372797074696f6e4b6579000100008d06042042547265654d617008044b012c0456018506000400910600000091060000029506009506000004082c850600990600000408008504009d060c0c6469641870616c6c6574144572726f7204045400016c58496e76616c69645369676e6174757265466f726d6174000008050154686520444944206f7065726174696f6e207369676e6174757265206973206e6f7420696e2074686520666f726d61742074686520766572696669636174696f6e306b657920657870656374732e40496e76616c69645369676e6174757265000108f854686520444944206f7065726174696f6e207369676e617475726520697320696e76616c696420666f7220746865207061796c6f616420616e642074686568766572696669636174696f6e206b65792070726f76696465642e34416c7265616479457869737473000204f85468652044494420776974682074686520676976656e206964656e74696669657220697320616c72656164792070726573656e74206f6e20636861696e2e204e6f74466f756e64000304d44e6f2044494420776974682074686520676976656e206964656e7469666965722069732070726573656e74206f6e20636861696e2e5c566572696669636174696f6e4b65794e6f74466f756e6400040809014f6e65206f72206d6f726520766572696669636174696f6e206b657973207265666572656e63656420617265206e6f742073746f72656420696e2074686520736574546f6620766572696669636174696f6e206b6579732e30496e76616c69644e6f6e6365000504090154686520444944206f7065726174696f6e206e6f6e6365206973206e6f7420657175616c20746f207468652063757272656e7420444944206e6f6e6365202b20312e7c556e737570706f72746564446964417574686f72697a6174696f6e43616c6c000604e05468652063616c6c65642065787472696e73696320646f6573206e6f7420737570706f72742044494420617574686f7269736174696f6e2e6c496e76616c6964446964417574686f72697a6174696f6e43616c6c000708dc5468652063616c6c2068616420706172616d6574657273207468617420636f6e666c696374656420776974682065616368206f74686572406f72207765726520696e76616c69642e8c4d61784e65774b657941677265656d656e744b6579734c696d697445786365656465640008080d0141206e756d626572206f66206e6577206b65792061677265656d656e74206b6579732067726561746572207468616e20746865206d6178696d756d20616c6c6f77656448686173206265656e2070726f76696465642e544d61785075626c69634b65797345786365656465640009080501546865206d6178696d756d206e756d626572206f66207075626c6963206b65797320666f72207468697320444944206b6579206964656e74696669657220686173346265656e20726561636865642e6c4d61784b657941677265656d656e744b6579734578636565646564000a080501546865206d6178696d756d206e756d626572206f66206b65792061677265656d656e747320686173206265656e207265616368656420666f722074686520444944207375626a6563742e304261644469644f726967696e000b04bc546865204449442063616c6c20776173207375626d6974746564206279207468652077726f6e67206163636f756e74485472616e73616374696f6e45787069726564000c040d0154686520626c6f636b206e756d6265722070726f766964656420696e2061204449442d617574686f72697a6564206f7065726174696f6e20697320696e76616c69642e38416c726561647944656c65746564000d04b0546865204449442068617320616c7265616479206265656e2070726576696f75736c792064656c657465642e444e6f744f776e65724f664465706f736974000e04fc4f6e6c7920746865206f776e6572206f6620746865206465706f7369742063616e207265636c61696d206974732072657365727665642062616c616e63652e3c556e61626c65546f50617946656573000f04f0546865206f726967696e20697320756e61626c6520746f207265736572766520746865206465706f73697420616e642070617920746865206665652e6c4d61784e756d6265724f66536572766963657345786365656465640010041101546865206d6178696d756d206e756d626572206f66207365727669636520656e64706f696e747320666f7220612044494420686173206265656e2065786365656465642e684d61785365727669636549644c656e6774684578636565646564001104f0546865207365727669636520656e64706f696e7420494420657863656564656420746865206d6178696d756d20616c6c6f776564206c656e6774682e704d617853657276696365547970654c656e6774684578636565646564001208f84f6e65206f6620746865207365727669636520656e64706f696e7420747970657320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e884d61784e756d6265724f665479706573506572536572766963654578636565646564001308ec546865206d6178696d756d206e756d626572206f6620747970657320666f722061207365727669636520656e64706f696e7420686173206265656e2465786365656465642e6c4d61785365727669636555726c4c656e6774684578636565646564001408f44f6e65206f6620746865207365727669636520656e64706f696e742055524c7320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e844d61784e756d6265724f6655726c735065725365727669636545786365656465640015041101546865206d6178696d756d206e756d626572206f662055524c7320666f722061207365727669636520656e64706f696e7420686173206265656e2065786365656465642e5053657276696365416c726561647945786973747300160411014120736572766963652077697468207468652070726f766964656420494420697320616c72656164792070726573656e7420666f722074686520676976656e204449442e3c536572766963654e6f74466f756e6400170409014120736572766963652077697468207468652070726f7669646564204944206973206e6f742070726573656e7420756e6465722074686520676976656e204449442e58496e76616c696453657276696365456e636f64696e6700180409014f6e65206f6620746865207365727669636520656e64706f696e742064657461696c7320636f6e7461696e73206e6f6e2d415343494920636861726163746572732e7c4d617853746f726564456e64706f696e7473436f756e7445786365656465640019080d01546865206e756d626572206f66207365727669636520656e64706f696e74732073746f72656420756e6465722074686520444944206973206c6172676572207468616e88746865206e756d626572206f6620656e64706f696e747320746f2064656c6574652e20496e7465726e616c001a04f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a1060c4470616c6c65745f6469645f6c6f6f6b757044636f6e6e656374696f6e5f7265636f726440436f6e6e656374696f6e5265636f72640c344469644964656e74696669657201001c4163636f756e7401001c42616c616e636501180008010c6469640001344469644964656e74696669657200011c6465706f736974510601644465706f7369743c4163636f756e742c2042616c616e63653e0000a5060000040800090100a9060c4470616c6c65745f6469645f6c6f6f6b75703c6d6967726174696f6e5f7374617465384d6967726174696f6e537461746500010c10446f6e65000000285072655570677261646500010024557067726164696e670400ad06013c4d6978656453746f726167654b657900020000ad060c4470616c6c65745f6469645f6c6f6f6b7570286d6967726174696f6e733c4d6978656453746f726167654b6579000108085631040000012c4163636f756e74496433320000000856320400090101444c696e6b61626c654163636f756e74496400010000b1060c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144572726f72040454000114204e6f74466f756e640000047c546865206173736f63696174696f6e20646f6573206e6f742065786973742e344e6f74417574686f72697a65640001081101546865206f726967696e20776173206e6f7420616c6c6f77656420746f206d616e61676520746865206173736f63696174696f6e206265747765656e20746865204449444c616e6420746865206163636f756e742049442e344f7574646174656450726f6f66000204b454686520737570706c6965642070726f6f66206f66206f776e65727368697020776173206f757464617465642e44496e73756666696369656e7446756e64730003081101546865206163636f756e742068617320696e73756666696369656e742066756e647320616e642063616e277420706179207468652066656573206f72207265736572766530746865206465706f7369742e244d6967726174696f6e00040c010154686520436f6e6e65637465644163636f756e747320616e6420436f6e6e6563746564446964732073746f7261676520617265206f7574206f662073796e632e0011014e4f54453a20746869732077696c6c206f6e6c792062652072657475726e6564206966207468652073746f726167652068617320696e636f6e73697374656e636965732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b5060c4470616c6c65745f776562335f6e616d657324776562335f6e616d6544576562334e616d654f776e6572736869700c144f776e657201001c4465706f7369740151062c426c6f636b4e756d6265720110000c01146f776e65720001144f776e6572000128636c61696d65645f617410012c426c6f636b4e756d62657200011c6465706f7369745106011c4465706f7369740000b9060c4470616c6c65745f776562335f6e616d65731870616c6c6574144572726f7204045400013044496e73756666696369656e7446756e64730000040d01546865207478207375626d697474657220646f6573206e6f74206861766520656e6f7567682066756e647320746f2070617920666f7220746865206465706f7369742e34416c7265616479457869737473000104dc54686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c7920636c61696d65642e204e6f74466f756e640002048854686520737065636966696564206e616d6520646f6573206e6f742065786973742e484f776e6572416c7265616479457869737473000304a054686520737065636966696564206f776e657220616c7265616479206f776e732061206e616d652e344f776e65724e6f74466f756e64000404ac54686520737065636966696564206f776e657220646f6573206e6f74206f776e20616e79206e616d65732e1842616e6e6564000508ec54686520737065636966696564206e616d6520686173206265656e2062616e6e656420616e642063616e6e6f7420626520696e746572616374656414776974682e244e6f7442616e6e6564000604ac54686520737065636966696564206e616d65206973206e6f742063757272656e746c792062616e6e65642e34416c726561647942616e6e6564000704d854686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c792062616e6e65642e344e6f74417574686f72697a6564000804cc546865206163746f722063616e6e6f7420706572666f726d65642074686520737065636966696564206f7065726174696f6e2e20546f6f53686f7274000904a841206e616d65207468617420697320746f6f2073686f7274206973206265696e6720636c61696d65642e1c546f6f4c6f6e67000a04a441206e616d65207468617420697320746f6f206c6f6e67206973206265696e6720636c61696d65642e40496e76616c6964436861726163746572000b04f441206e616d65207468617420636f6e7461696e73206e6f7420616c6c6f7765642063686172616374657273206973206265696e6720636c61696d65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909bd060000040825012c00c1060c487075626c69635f63726564656e7469616c732c63726564656e7469616c733c43726564656e7469616c456e7472791824435479706548617368012c20417474657374657201002c426c6f636b4e756d6265720110244163636f756e74496401001c42616c616e636501183c417574686f72697a6174696f6e496401f40018012863747970655f686173682c01244354797065486173680001206174746573746572000120417474657374657200011c7265766f6b6564a40110626f6f6c000130626c6f636b5f6e756d62657210012c426c6f636b4e756d62657200011c6465706f7369745106016c4465706f7369743c4163636f756e7449642c2042616c616e63653e000140617574686f72697a6174696f6e5f6964f0015c4f7074696f6e3c417574686f72697a6174696f6e49643e0000c5060c487075626c69635f63726564656e7469616c731870616c6c6574144572726f720404540001183c416c72656164794174746573746564000008f8412063726564656e7469616c2077697468207468652073616d6520726f6f7420686173682068617320616c72656164792069737375656420746f2074686548737065636966696564207375626a6563742e204e6f74466f756e6400010805014e6f2063726564656e7469616c2077697468207468652073706563696669656420726f6f74206861736820686173206265656e2069737375656420746f2074686548737065636966696564207375626a6563742e3c556e61626c65546f50617946656573000204d44e6f7420656e6f75676820746f6b656e7320746f2070617920666f72207468652066656573206f7220746865206465706f7369742e30496e76616c6964496e707574000304805468652063726564656e7469616c20696e70757420697320696e76616c69642e344e6f74417574686f72697a6564000404e05468652063616c6c6572206973206e6f7420617574686f72697a656420746f20706572666f726d656420746865206f7065726174696f6e2e20496e7465726e616c000508f443617463682d616c6c20666f7220616e79206f74686572206572726f727320746861742073686f756c64206e6f742068617070656e2c207965742069742468617070656e65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909c90604184f7074696f6e04045401cd060108104e6f6e6500000010536f6d650400cd060000010000cd060c4c706f6c6b61646f745f7072696d69746976657308763248557067726164655265737472696374696f6e0001041c50726573656e7400000000d1060c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f686561642c014472656c61795f636861696e3a3a4861736800016472656c61795f64697370617463685f71756575655f73697a65d5060128287533322c2075333229000140696e67726573735f6368616e6e656c73d90601885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c73d90601885665633c285061726149642c20416272696467656448726d704368616e6e656c293e0000d506000004081c1c00d906000002dd0600dd06000004089d01e10600e1060c4c706f6c6b61646f745f7072696d6974697665730876324c416272696467656448726d704368616e6e656c00001801306d61785f63617061636974791c010c7533320001386d61785f746f74616c5f73697a651c010c7533320001406d61785f6d6573736167655f73697a651c010c7533320001246d73675f636f756e741c010c753332000128746f74616c5f73697a651c010c7533320001206d71635f68656164610601304f7074696f6e3c486173683e0000e5060c4c706f6c6b61646f745f7072696d697469766573087632644162726964676564486f7374436f6e66696775726174696f6e00002401346d61785f636f64655f73697a651c010c7533320001486d61785f686561645f646174615f73697a651c010c7533320001586d61785f7570776172645f71756575655f636f756e741c010c7533320001546d61785f7570776172645f71756575655f73697a651c010c75333200015c6d61785f7570776172645f6d6573736167655f73697a651c010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e6469646174651c010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e6469646174651c010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e1c012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c61791c012c426c6f636b4e756d6265720000e906089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e000004002c012452656c6179486173680000ed06042042547265654d617008044b019d01045601e906000400f106000000f106000002f50600f506000004089d01e90600f906000002fd0600fd060860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d65737361676504084964019d0100080124726563697069656e749d01010849640001106461746130015073705f7374643a3a7665633a3a5665633c75383e000001070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041501417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e675050726f686962697465644279506f6c6b61646f740001044901506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733877696c6c696e6720746f2072756e6856616c69646174696f6e446174614e6f74417661696c61626c65000304190154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404250154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090905070000020907000907086463756d756c75735f70616c6c65745f78636d705f717565756554496e626f756e644368616e6e656c44657461696c7300000c011873656e6465729d01011850617261496400011473746174650d070130496e626f756e6453746174650001406d6573736167655f6d65746164617461110701a85665633c2852656c6179426c6f636b4e756d6265722c2058636d704d657373616765466f726d6174293e00000d07086463756d756c75735f70616c6c65745f78636d705f717565756530496e626f756e645374617465000108084f6b0000002453757370656e6465640001000011070000021507001507000004081c19070019070c48706f6c6b61646f745f70617261636861696e287072696d6974697665734458636d704d657373616765466f726d617400010c60436f6e636174656e6174656456657273696f6e656458636d0000005c436f6e636174656e61746564456e636f646564426c6f620001001c5369676e616c73000200001d07000004089d011c0021070000022507002507086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e749d0101185061726149640001147374617465290701344f7574626f756e6453746174650001347369676e616c735f6578697374a40110626f6f6c00012c66697273745f696e646578d8010c7531360001286c6173745f696e646578d8010c75313600002907086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e646564000100002d07000004089d01d8003107086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e66696744617461000018014473757370656e645f7468726573686f6c641c010c75333200013864726f705f7468726573686f6c641c010c753332000140726573756d655f7468726573686f6c641c010c7533320001407468726573686f6c645f7765696768742401185765696768740001547765696768745f72657374726963745f646563617924011857656967687400016878636d705f6d61785f696e646976696475616c5f776569676874240118576569676874000035070000040c9d011c300039070c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f72040454000114304661696c6564546f53656e640000046c4661696c656420746f2073656e642058434d206d6573736167652e3042616458636d4f726967696e0001043c4261642058434d206f726967696e2e1842616458636d000204344261642058434d20646174612e484261644f766572776569676874496e64657800030454426164206f76657277656967687420696e6465782e3c5765696768744f7665724c696d6974000404f850726f76696465642077656967687420697320706f737369626c79206e6f7420656e6f75676820746f206578656375746520746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909093d070c2870616c6c65745f78636d1870616c6c6574144572726f720404540001502c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108610154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652e2050657268617073a861206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e30496e76616c69644173736574000d0480496e76616c696420617373657420666f7220746865206f7065726174696f6e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304390154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c207573657273206f6620746865206c6f636b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090941070c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144572726f7204045400010004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909094507086063756d756c75735f70616c6c65745f646d705f717565756528436f6e6669674461746100000401386d61785f696e646976696475616c24011857656967687400004907086063756d756c75735f70616c6c65745f646d705f71756575653450616765496e6465784461746100000c0128626567696e5f757365641c012c50616765436f756e746572000120656e645f757365641c012c50616765436f756e7465720001406f7665727765696768745f636f756e7410013c4f766572776569676874496e64657800004d070000025107005107000004081c300055070c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144572726f720404540001081c556e6b6e6f776e0000048c546865206d65737361676520696e64657820676976656e20697320756e6b6e6f776e2e244f7665724c696d6974000104310154686520616d6f756e74206f662077656967687420676976656e20697320706f737369626c79206e6f7420656e6f75676820666f7220657865637574696e6720746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909095907102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301d9021043616c6c01a503245369676e617475726501ad04144578747261015d07000400300000005d07000004206107650769076d07710779077d07810700610710306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000650710306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000690710306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e040454000000006d0710306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000710710306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004007507010c45726100007507102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000790710306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400280120543a3a496e64657800007d0710306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000008107086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400c101013042616c616e63654f663c543e0000941853797374656d011853797374656d401c4163636f756e7401010402000c510100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e7400001c040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010020180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e00001c040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010405102c8000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e73696344617461010104051c300400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d626572010010200000000000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002c80000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010034040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004404001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e7401001c100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104022c7d020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000810204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100a40400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100a40400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500007502040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01890201501830426c6f636b5765696768747399026d01624fd75a00070088526a740200400102c0cd1700010700028fa54b0200d000010700e6bd4f570200f00001000002c0cd1700010700a423c0680200200101070088526a7402004001010700a2941a1d0200500002c0cd170000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468a9023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e7410206009000000000000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874b1024040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6eb5026103386b696c742d7370697269746e6574386b696c742d7370697269746e6574010000005c2b00000000000038df6acb689907609b0400000037e397fc7c91f5e401000000bc9d89904f5b923f0100000037c8bb1350a9a2a803000000f3ff14d5ab5270590300000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000dd718d5cc53262d401000000ea93e3f16f3d69620200000026609555c065660302000000a47b7d544994c99b0100000045bfba51a310b2230100000006000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e2853533538507265666978d808260014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01c502006052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100c90204000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e00000000012454696d657374616d70012454696d657374616d70080c4e6f7701001020000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100a4040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f01cd020004344d696e696d756d506572696f6410207017000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00021c496e6469636573011c496e646963657304204163636f756e74730001040210d1020400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e01d5020174041c4465706f736974184000b47cf328350000000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e01e102052042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200e502040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200f502040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e01010301780c484578697374656e7469616c4465706f736974184000a0724e18090000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b731c103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d617852657365727665731c1032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01050306485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100090340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e01000d0304000000018004604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00071041757261011041757261082c417574686f726974696573010011030400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f74010021032000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000171c53657373696f6e011c53657373696f6e1c2856616c696461746f7273010025030400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e64657801001c100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e6765640100a4040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010029030400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010035030400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050031030400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405390300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e014103018400014503164050617261636861696e5374616b696e67014050617261636861696e5374616b696e6740544d617853656c656374656443616e6469646174657301001c100000000004090120546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c6563746564206174206561636820726f756e642e14526f756e640100490350000000000000000000000000140000000000000004e82043757272656e7420726f756e64206e756d62657220616e64206e65787420726f756e64207363686564756c6564207472616e736974696f6e2e384c61737444656c65676174696f6e01010405004d03200000000000000000140d012044656c65676174696f6e20696e666f726d6174696f6e20666f7220746865206c61746573742073657373696f6e20696e20776869636820612064656c656761746f722c2064656c6567617465642e000501204974206d6170732066726f6d20616e206163636f756e7420746f20746865206e756d626572206f662064656c65676174696f6e7320696e20746865206c617374982073657373696f6e20696e2077686963682074686579202872652d2964656c6567617465642e3844656c656761746f7253746174650001040500510304000c802044656c65676174696f6e207374616b696e6720696e666f726d6174696f6e2e00cc204974206d6170732066726f6d20616e206163636f756e7420746f206974732064656c65676174696f6e2064657461696c732e3443616e646964617465506f6f6c00010405005503040010a420546865207374616b696e6720696e666f726d6174696f6e20666f7220612063616e6469646174652e00b0204974206d6170732066726f6d20616e206163636f756e7420746f2069747320696e666f726d6174696f6e2eb8204d6f72656f7665722c20697420636f756e747320746865206e756d626572206f662063616e646964617465732e5c436f756e746572466f7243616e646964617465506f6f6c01001c100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617048546f74616c436f6c6c61746f725374616b650100690380000000000000000000000000000000000000000000000000000000000000000014f420546f74616c2066756e6473206c6f636b656420746f206261636b207468652063757272656e746c792073656c656374656420636f6c6c61746f72732ed0205468652073756d206f6620616c6c20636f6c6c61746f7220616e642074686569722064656c656761746f72207374616b65732e002101204e6f74653a20546865726520617265206d6f72652066756e6473206c6f636b656420627920746869732070616c6c65742c2073696e636520746865206261636b696e6720666f720901206e6f6e20636f6c6c6174696e672063616e64696461746573206973206e6f7420696e636c7564656420696e205b546f74616c436f6c6c61746f725374616b655d2e34546f7043616e6469646174657301006d03040028e82054686520636f6c6c61746f722063616e64696461746573207769746820746865206869676865737420616d6f756e74206f66207374616b652e00190120456163682074696d6520746865207374616b65206f66206120636f6c6c61746f7220697320696e637265617365642c20697420697320636865636b65642077686574686572050120746869732070757368657320616e6f746865722063616e646964617465206f7574206f6620746865206c6973742e205768656e20746865207374616b652069732101207265647563656420686f77657665722c206974206973206e6f7420636865636b656420696620616e6f746865722063616e64696461746520686173206d6f7265207374616b652c11012073696e6365207468697320776f756c64207265717569726520697465726174696e67206f7665722074686520656e74697265205b43616e646964617465506f6f6c5d2e001501205468657265206d75737420616c77617973206265206d6f72652063616e64696461746573207468616e205b4d617853656c656374656443616e646964617465735d20736f0d012074686174206120636f6c6c61746f722063616e2064726f70206f7574206f662074686520636f6c6c61746f7220736574206279207265647563696e672074686569721c207374616b652e3c496e666c6174696f6e436f6e66696701007503c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046420496e666c6174696f6e20636f6e66696775726174696f6e2e24556e7374616b696e670101040500810304001088205468652066756e64732077616974696e6720746f20626520756e7374616b65642e001d01204974206d6170732066726f6d206163636f756e747320746f20616c6c207468652066756e64732061646472657373656420746f207468656d20696e20746865206675747572652020626c6f636b732e644d6178436f6c6c61746f7243616e6469646174655374616b65010018400000000000000000000000000000000004cc20546865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e6469646174652063616e207374616b652e4c4c617374526577617264526564756374696f6e010010200000000000000000140d0120546865207965617220696e20776869636820746865206c617374206175746f6d6174696320726564756374696f6e206f66207468652072657761726420726174657328206f636375727265642e00250120497420737461727473206174207a65726f2061742067656e6573697320616e6420696e6372656d656e7473206279206f6e6520657665727920424c4f434b535f5045525f5945415234206d616e7920626c6f636b732e38426c6f636b73417574686f726564010104050010200000000000000000080d0120546865206e756d626572206f6620617574686f72656420626c6f636b7320666f7220636f6c6c61746f72732e20497420697320757064617465642076696120746865b020606e6f74655f617574686f726020686f6f6b207768656e20617574686f72696e67206120626c6f636b202e38426c6f636b73526577617264656401010405001020000000000000000024210120546865206e756d626572206f6620626c6f636b7320666f7220776869636820726577617264732068617665206265656e20636c61696d656420627920616e20616464726573732e00190120466f7220636f6c6c61746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f7265642e2049742069732075706461746564207768656ecc20696e6372656d656e74696e6720636f6c6c61746f7220726577617264732c20656974686572207768656e2063616c6c696e67e02060696e635f636f6c6c61746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e00250120466f722064656c656761746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f726564206f662074686520636f6c6c61746f722e497420697305012075706461746564207768656e20696e6372656d656e74696e672064656c656761746f7220726577617264732c20656974686572207768656e2063616c6c696e67e42060696e635f64656c656761746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e1c5265776172647301010405001840000000000000000000000000000000000c01012054686520616363756d756c61746564207265776172647320666f7220636f6c6c61746f722063616e6469646174657320616e642064656c656761746f72732e001101204974206d6170732066726f6d206163636f756e747320746f20746865697220746f74616c20726577617264732073696e636520746865206c617374207061796f75742e34466f7263654e6577526f756e640100a404000001910301883c444d696e426c6f636b73506572526f756e6410202c0100000000000004d4204d696e696d756d206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e64732063616e206c6173742e5444656661756c74426c6f636b73506572526f756e641020580200000000000008fc2044656661756c74206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e6473206c6173742c2061732073657420696e207468655c2067656e6573697320636f6e66696775726174696f6e2e345374616b654475726174696f6e1020e0c40000000000000c0501204e756d626572206f6620626c6f636b7320666f7220776869636820756e7374616b65642062616c616e63652077696c6c207374696c6c206265206c6f636b6564f0206265666f72652069742063616e20626520756e6c6f636b6564206279206163746976656c792063616c6c696e67207468652065787472696e7369634c2060756e6c6f636b5f756e7374616b6564602e3845786974517565756544656c61791c1002000000080901204e756d626572206f6620726f756e6473206120636f6c6c61746f722068617320746f207374617920616374697665206166746572207375626d697474696e672061c4207265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e304d696e436f6c6c61746f72731c1010000000080d01204d696e696d756d206e756d626572206f6620636f6c6c61746f72732073656c65637465642066726f6d2074686520736574206f662063616e64696461746573206174602065766572792076616c69646174696f6e20726f756e642e504d696e5265717569726564436f6c6c61746f72731c1004000000081101204d696e696d756d206e756d626572206f6620636f6c6c61746f72732077686963682063616e6e6f74206c6561766520746865206e6574776f726b2069662074686572653c20617265206e6f206f74686572732e584d617844656c65676174696f6e73506572526f756e641c1001000000140101204d6178696d756d206e756d626572206f662064656c65676174696f6e732077686963682063616e206265206d6164652077697468696e207468652073616d651c20726f756e642e000d01204e4f54453a20546f2070726576656e742072652d64656c65676174696f6e2d7265776172642061747461636b732c2077652073686f756c64206b65657020746869732c20746f206265206f6e652e604d617844656c656761746f7273506572436f6c6c61746f721c102300000004e4204d6178696d756d206e756d626572206f662064656c656761746f727320612073696e676c6520636f6c6c61746f722063616e20686176652e404d6178546f7043616e646964617465731c104b00000004a0204d6178696d756d2073697a65206f662074686520746f702063616e64696461746573207365742e404d696e436f6c6c61746f725374616b6518400000e8890423c78a0000000000000000080901204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520656c65637465642061732076616c696461746f723420666f72206120726f756e642e644d696e436f6c6c61746f7243616e6469646174655374616b6518400000e8890423c78a0000000000000000080501204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520616464656420746f2074686520736574206f66302063616e646964617465732e444d696e44656c656761746f725374616b651840000082dfe40d4700000000000000000004f8204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f206265636f6d6520612064656c656761746f722e484d6178556e7374616b6552657175657374731c100a00000028e8204d6178206e756d626572206f6620636f6e63757272656e742061637469766520756e7374616b696e67207265717565737473206265666f72652c20756e6c6f636b696e672e001501204e4f54453a20546f2070726f7465637420616761696e737420697272656d6f766162696c697479206f6620612063616e646964617465206f722064656c656761746f722cf4207765206f6e6c7920616c6c6f7720666f72204d6178556e7374616b655265717565737473202d2031206d616e79206d616e75616c20756e7374616b6501012072657175657374732e20546865206c617374206f6e6520736572766573206173206120706c616365686f6c64657220666f7220746865206361736573206f66f02063616c6c696e672065697468657220606b69636b5f64656c656761746f72602c20666f7263655f72656d6f76655f63616e64696461746560206f7209012060657865637574655f6c656176655f63616e64696461746573602e204f74686572776973652c2061207573657220636f756c64206d6178206f75742074686569720d0120756e7374616b6520726571756573747320616e642070726576656e74207468656d73656c7665732066726f6d206265696e67206b69636b65642066726f6d20746865f020736574206f662063616e646964617465732f64656c656761746f727320756e74696c207468657920756e6c6f636b2074686569722066756e64732e484e6574776f726b5265776172645374617274102048a3c800000000000c110120546865207374617274696e6720626c6f636b206e756d62657220666f7220746865206e6574776f726b20726577617264732e204f6e6365207468652063757272656e74090120626c6f636b206e756d626572206578636565647320746869732073746172742c207468652062656e65666963696172792077696c6c2072656365697665207468658420636f6e666967757265642072657761726420696e206561636820626c6f636b2e444e6574776f726b526577617264526174658c2000008a5d784563010c0d0120546865207261746520696e2070657263656e7420666f7220746865206e6574776f726b207265776172647320776869636820617265206261736564206f6e207468650901206d6178696d756d206e756d626572206f6620636f6c6c61746f727320616e6420746865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e1c207374616b652e0195031528417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000141c41757261457874011c41757261457874042c417574686f72697469657301001103040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c790120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c20616c77617973f0206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e00000000182444656d6f6372616379012444656d6f63726163792c3c5075626c696350726f70436f756e7401001c100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f707301009903040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f66000104051c5d0504000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e7401001c100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b656401001c100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f66000104051c650504000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f6601010405007105e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100a40400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c00008905040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c697374000104062c8d0504000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e73010104062ca40400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e01a9030190303c456e6163746d656e74506572696f641020201c00000000000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f641020e0c400000000000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f641020e0c400000000000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f641020e0c4000000000000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400080c6a47e8d0300000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f776564a404010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f641020840300000000000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f641020e0c400000000000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f7465731c106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c731c1064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f736974731c1064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c69737465641c106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e0191051e1c436f756e63696c011c436f756e63696c182450726f706f73616c7301009505040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062ca503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e67000104062c9905040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e7401001c100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010025030400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01b50301a000019d051f48546563686e6963616c436f6d6d69747465650148546563686e6963616c436f6d6d6974746565182450726f706f73616c730100a105040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062ca503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e67000104062c9905040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e7401001c100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010025030400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01c50301b00001a505204c546563686e6963616c4d656d62657273686970014c546563686e6963616c4d656d62657273686970081c4d656d626572730100a905040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01c90301b40001ad052220547265617375727901205472656173757279103450726f706f73616c436f756e7401001c100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c73000104051cb1050400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c730100b505040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e01cd0301b81c3050726f706f73616c426f6e64b9051050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d1840000082dfe40d47000000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756dbd050400044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f641020c0a8000000000000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726eb90510000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c65744964c105206b696c742f7473790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c731c10640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e01c505231c5574696c6974790001d10301bc044c626174636865645f63616c6c735f6c696d69741c10aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01c905281c56657374696e67011c56657374696e67081c56657374696e670001040200cd05040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100d50504000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01f90301c008444d696e5665737465645472616e73666572184000407a10f35a0000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c65731c101c0000000001d90529245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e64610101040510dd050400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b75700001040504c8040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01010401c408344d6178696d756d57656967687424280700a0db215d0200000104290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b1c1032000000041d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e01ed052a1450726f7879011450726f7879081c50726f786965730101040500f1054400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500010644000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01090401d0184050726f78794465706f7369744261736518400020f7a54b330000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f72184000f4a92b80010000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f786965731c100a00000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e671c100a00000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f7369744261736518400020f7a54b330000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72184000e8535700030000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e0111062b20507265696d6167650120507265696d6167650824537461747573466f72000104062c15060400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f72000104062106250604000001110401dc000129062c38546970734d656d626572736869700138546970734d656d62657273686970081c4d656d626572730100a905040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01150401e000012d062d1054697073011054697073081054697073000104052c310604000c650120546970734d6170207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e3d012054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c7265616479802067756172616e7465656420746f20626520612073656375726520686173682e1c526561736f6e73000104062c3004000849012053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e610120696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e01190401e4144c4d6178696d756d526561736f6e4c656e6774681c10004000000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756548446174614465706f73697450657242797465184000743ba40b00000000000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e30546970436f756e74646f776e1020201c0000000000000445012054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e3454697046696e646572734665653d060414043501205468652070657263656e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e505469705265706f72744465706f73697442617365184000f45628fa320000000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e0141062e144374797065011443747970650418437479706573000104022c450604001060204354797065732073746f726564206f6e20636861696e2e001901204974206d6170732066726f6d2061204354797065206861736820746f206974732063726561746f7220616e6420626c6f636b206e756d62657220696e207768696368206974342077617320637265617465642e011d0401e8000149063d2c4174746573746174696f6e012c4174746573746174696f6e08304174746573746174696f6e73000104022c4d0604000c78204174746573746174696f6e732073746f726564206f6e20636861696e2e00cc204974206d6170732066726f6d206120636c61696d206861736820746f207468652066756c6c206174746573746174696f6e2e5045787465726e616c4174746573746174696f6e7301010805025506a404000ca02044656c656761746564206174746573746174696f6e732073746f726564206f6e20636861696e2e00e8204974206d6170732066726f6d20612064656c65676174696f6e20494420746f206120766563746f72206f6620636c61696d206861736865732e01210401ec081c4465706f7369741840001cc9dd006e0000000000000000000004e420546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720616e206174746573746174696f6e2e604d617844656c6567617465644174746573746174696f6e731c10e803000008090120546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732077686963682063616e206265206d61646520627954207468652073616d652064656c65676174696f6e2e0159063e2844656c65676174696f6e012844656c65676174696f6e083c44656c65676174696f6e4e6f646573000104022c5d0604000c882044656c65676174696f6e206e6f6465732073746f726564206f6e20636861696e2e00b0204974206d6170732066726f6d2061206e6f646520494420746f20746865206e6f64652064657461696c732e5444656c65676174696f6e4869657261726368696573000104022c710604000ca02044656c65676174696f6e2068696572617263686965732073746f726564206f6e20636861696e2e00dc204974206d61707320666f7220612028726f6f7429206e6f646520494420746f20746865206869657261726368792064657461696c732e01350401f8181c4465706f73697418400080c6a47e8d0300000000000000000004dc20546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720612064656c65676174696f6e2e584d61785369676e6174757265427974654c656e677468d808400000384d61785265766f636174696f6e731c1005000000047c204d6178696d756d206e756d626572206f66207265766f636174696f6e732e2c4d617852656d6f76616c731c100500000004f4204d6178696d756d206e756d626572206f662072656d6f76616c732e2053686f756c642062652073616d65206173204d61785265766f636174696f6e733c4d6178506172656e74436865636b731c1005000000080d01204d6178696d756d206e756d626572206f6620757077617264732074726176657273616c73206f66207468652064656c65676174696f6e20747265652066726f6d2061f0206e6f646520746f2074686520726f6f7420616e64207468757320746865206465707468206f66207468652064656c65676174696f6e20747265652e2c4d61784368696c6472656e1c10e80300000c0d01204d6178696d756d206e756d626572206f6620616c6c206368696c6472656e20666f7220612064656c65676174696f6e206e6f64652e20466f7220612062696e617279fc20747265652c20746869732073686f756c6420626520747769636520746865206d6178696d756d206465707468206f662074686520747265652c20692e652e5c206032205e204d6178506172656e74436865636b73602e0175063f0c446964010c446964100c4469640001040200790604000c5820444944732073746f726564206f6e20636861696e2e00c8204974206d6170732066726f6d206120444944206964656e74696669657220746f20746865204449442064657461696c732e4053657276696365456e64706f696e747300010805029906810404000ca0205365727669636520656e64706f696e7473206173736f636961746564207769746820444944732e000901204974206d6170732066726f6d2028444944206964656e7469666965722c20736572766963652049442920746f2074686520736572766963652064657461696c732e44446964456e64706f696e7473436f756e7401010402001c10000000000cac20436f756e746572206f66207365727669636520656e64706f696e747320666f722065616368204449442e00cc204974206d6170732066726f6d2028444944206964656e7469666965722920746f20612033322d62697420636f756e7465722e30446964426c61636b6c6973740001040200ac0400141d012054686520736574206f66204449447320746861742068617665206265656e2064656c6574656420616e642063616e6e6f74207468657265666f726520626520637265617465647020616761696e20666f7220736563757269747920726561736f6e732e002101204974206d6170732066726f6d206120444944206964656e74696669657220746f206120756e6974207475706c652c20666f72207468652073616b65206f6620747261636b696e674420444944206964656e746966696572732e015104010101301c4465706f736974184000983ea62c22070000000000000000000c0d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974110120746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f7369742063616e2062658c207265636c61696d6564207768656e20746865204449442069732064656c657465642e0c466565184000203d88792d000000000000000000000c09012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f7220656163682044494420617320612066656520746f0d0120696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206665652077696c6c206e6f74206765748820726566756e646564207768656e20746865204449442069732064656c657465642e4c4d61785075626c69634b6579735065724469641c10140000000c1101204d6178696d756d206e756d626572206f6620746f74616c207075626c6963206b6579732077686963682063616e2062652073746f7265642070657220444944206b6579d8206964656e7469666965722e205468697320696e636c7564657320746865206f6e65732063757272656e746c79207573656420666f72f02061757468656e7469636174696f6e2c206b65792061677265656d656e742c206174746573746174696f6e2c20616e642064656c65676174696f6e2e584d61784e65774b657941677265656d656e744b6579731c100a000000081501204d6178696d756d206e756d626572206f66206b65792061677265656d656e74206b65797320746861742063616e20626520616464656420696e2061206372656174696f6e2c206f7065726174696f6e2e604d6178546f74616c4b657941677265656d656e744b6579731c1013000000101101204d6178696d756d206e756d626572206f6620746f74616c206b65792061677265656d656e74206b65797320746861742063616e2062652073746f72656420666f7220613420444944207375626a6563742e00c42053686f756c642062652067726561746572207468616e20604d61784e65774b657941677265656d656e744b657973602e4c4d6178426c6f636b73547856616c696469747910202c0100000000000008ec20546865206d6178696d756d206e756d626572206f6620626c6f636b732061204449442d617574686f72697a6564206f7065726174696f6e2069739420636f6e736964657265642076616c696420616674657220697473206372656174696f6e2e644d61784e756d6265724f6653657276696365735065724469641c101900000004fc20546865206d6178696d756d206e756d626572206f6620736572766963657320746861742063616e2062652073746f72656420756e6465722061204449442e484d61785365727669636549644c656e6774681c1032000000049020546865206d6178696d756d206c656e677468206f66206120736572766963652049442e504d617853657276696365547970654c656e6774681c103200000004c820546865206d6178696d756d206c656e677468206f66206120736572766963652074797065206465736372697074696f6e2e684d61784e756d6265724f665479706573506572536572766963651c100100000004090120546865206d6178696d756d206e756d626572206f662061207479706573206465736372697074696f6e20666f722061207365727669636520656e64706f696e742e4c4d61785365727669636555726c4c656e6774681c10c8000000049420546865206d6178696d756d206c656e677468206f66206120736572766963652055524c2e644d61784e756d6265724f6655726c73506572536572766963651c100100000004d420546865206d6178696d756d206e756d626572206f6620612055524c7320666f722061207365727669636520656e64706f696e742e019d064024496e666c6174696f6e000000084c496e697469616c506572696f644c656e677468102048a3c800000000000c050120546865206c656e677468206f662074686520696e697469616c20706572696f6420696e2077686963682074686520636f6e7374616e74207265776172642069731101206d696e7465642e204f6e6365207468652063757272656e7420626c6f636b206578636565647320746869732c207265776172647320617265206e6f206675727468657220206973737565642e4c496e697469616c506572696f64526577617264184036f539fdaeb30200000000000000000008fc2054686520616d6f756e74206f66206e65776c792069737375656420746f6b656e732070657220626c6f636b20647572696e672074686520696e697469616c2020706572696f642e0042244469644c6f6f6b757001244469644c6f6f6b75700c34436f6e6e656374656444696473000104020901a106040004a8204d617070696e672066726f6d206163636f756e74206964656e7469666965727320746f20444944732e44436f6e6e65637465644163636f756e74730001080202a506ac04000cbc204d617070696e672066726f6d2028444944202b206163636f756e74206964656e74696669657229202d3e2028292e0d012054686520656d707479207475706c65206973207573656420617320612073656e74696e656c2076616c756520746f2073696d706c7920696e64696361746520746865982070726573656e6365206f66206120676976656e207475706c6520696e20746865206d61702e4c4d6967726174696f6e537461746553746f72650100a90604010001a504010501041c4465706f736974184000c0afd69136000000000000000000000c0d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974110120746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f7369742063616e2062658c207265636c61696d6564207768656e20746865204449442069732064656c657465642e01b1064324576562334e616d65730124576562334e616d65730c144f776e6572000104021901b50604000488204d6170206f66206e616d65202d3e206f776e6572736869702064657461696c732e144e616d65730001040200190104000458204d6170206f66206f776e6572202d3e206e616d652e1842616e6e6564000104021901ac04000c4c204d6170206f66206e616d65202d3e2028292e00e02049662061206e616d65206b65792069732070726573656e742c20746865206e616d652069732063757272656e746c792062616e6e65642e01b5040115010c1c4465706f736974184000d450a85d6b0000000000000000000004bc2054686520616d6f756e74206f66204b494c5420746f206465706f73697420746f20636c61696d2061206e616d652e344d696e4e616d654c656e6774681c1003000000048820546865206d696e20656e636f646564206c656e677468206f662061206e616d652e344d61784e616d654c656e6774681c1020000000048820546865206d617820656e636f646564206c656e677468206f662061206e616d652e01b90644445075626c696343726564656e7469616c7301445075626c696343726564656e7469616c73082c43726564656e7469616c730001080502bd06c10604000cc020546865206d6170206f66207075626c69632063726564656e7469616c7320616c72656164792061747465737465642ef0204974206d6170732066726f6d206120287375626a656374206964202b2063726564656e7469616c20696429202d3e20746865206372656174696f6e6c2064657461696c73206f66207468652063726564656e7469616c2e4843726564656e7469616c5375626a65637473000104022c250104001025012041207265766572736520696e646578206d617070696e672066726f6d2063726564656e7469616c20494420746f20746865207375626a656374207468652063726564656e7469616c3c207761732069737375656420746f2e001901204974206974207573656420746f20706572666f726d20656666696369656e74206c6f6f6b7570206f662063726564656e7469616c7320676976656e2074686569722049442e01b9040121010c1c4465706f7369741840005c6a51fc45000000000000000000000411012054686520616d6f756e74206f6620746f6b656e7320746f2072657365727665207768656e20617474657374696e672061207075626c69632063726564656e7469616c2e584d6178456e636f646564436c61696d734c656e6774681c10a0860100040d0120546865206d6178696d756d206c656e67746820696e206279746573206f662074686520656e636f64656420636c61696d73206f6620612063726564656e7469616c2e484d61785375626a65637449644c656e6774681c100c01000008e820546865206d6178696d756d206c656e67746820696e206279746573206f6620746865207261772063726564656e7469616c207375626a65637430206964656e7469666965722e01c506453c50617261636861696e53797374656d013c50617261636861696e53797374656d545450656e64696e6756616c69646174696f6e436f64650100300400187d0120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f206265206170706c6965642e00c10120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f766572777269746520746865205b603a636f6465605d5b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455dad012077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f63657373207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e000501205b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d3a2073705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f4445444e657756616c69646174696f6e436f64650000300400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000d10404000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f64650100a4040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d62657201001c1000000000041d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e60557067726164655265737472696374696f6e5369676e616c0100c90604001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f660000d904040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000d10604001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e0000e5060400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d7163486561640100e90680000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d716348656164730100ed06040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301001c10000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01001c10000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d657373616765730100f90604000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d657373616765730100950204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d6573736167657301009502040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e84416e6e6f756e63656448726d704d6573736167657350657243616e64696461746501001c100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000240400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000240400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e44417574686f72697a65645570677261646500002c040004b820546865206e65787420617574686f72697a656420757067726164652c206966207468657265206973206f6e652e60437573746f6d56616c69646174696f6e486561644461746100003004000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00190120536565205b6050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f64617461605d20666f72206d6f726520696e666f726d6174696f6e2e01c90401910100010107503450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e496401009d0110640000000000000000512458636d705175657565012458636d7051756575652844496e626f756e6458636d70537461747573010005070400049420537461747573206f662074686520696e626f756e642058434d50206368616e6e656c732e4c496e626f756e6458636d704d6573736167657301010802051d0730040004190120496e626f756e64206167677265676174652058434d50206d657373616765732e2049742063616e206f6e6c79206265206f6e6520706572205061726149642f626c6f636b2e484f7574626f756e6458636d70537461747573010021070400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d6573736167657301010802052d0730040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d65737361676573010104029d0130040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e6669670100310774020000000500000001000000821a06000008000700c817a804020004000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e284f76657277656967687400010405103507040010050120546865206d657373616765732074686174206578636565646564206d617820696e646976696475616c206d65737361676520776569676874206275646765742e003901205468657365206d657373616765207374617920696e20746869732073746f72616765206d617020756e74696c207468657920617265206d616e75616c6c79206469737061746368656420766961582060736572766963655f6f766572776569676874602e50436f756e746572466f724f76657277656967687401001c100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c4f766572776569676874436f756e7401001020000000000000000008690120546865206e756d626572206f66206f766572776569676874206d657373616765732065766572207265636f7264656420696e20604f766572776569676874602e20416c736f20646f75626c657320617320746865206e6578748420617661696c61626c652066726565206f76657277656967687420696e6465782e38517565756553757370656e6465640100a404000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e01fd0401950100013907522c506f6c6b61646f7458636d0001010501a10100013d07532843756d756c757358636d0000016d02000141075420446d7051756575650120446d7051756575651434436f6e66696775726174696f6e01004507280700e40b540202000400044c2054686520636f6e66696775726174696f6e2e2450616765496e646578010049074000000000000000000000000000000000044020546865207061676520696e6465782e145061676573010104021c4d0704000444205468652071756575652070616765732e284f766572776569676874000104021051070400046420546865206f766572776569676874206d657373616765732e50436f756e746572466f724f76657277656967687401001c100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617001550501710200015507555907042048436865636b4e6f6e5a65726f53656e6465726107ac40436865636b5370656356657273696f6e65071c38436865636b547856657273696f6e69071c30436865636b47656e657369736d072c38436865636b4d6f7274616c69747971072c28436865636b4e6f6e63657907ac2c436865636b5765696768747d07ac604368617267655472616e73616374696f6e5061796d656e748107ac3104"} \ No newline at end of file +{"result":"0x6d6574610ead07000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d6572731c0120526566436f756e7400012470726f7669646572731c0120526566436f756e7400012c73756666696369656e74731c0120526566436f756e740001106461746114012c4163636f756e7444617461000010000005060014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0000050500200c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540124000c01186e6f726d616c2401045400012c6f7065726174696f6e616c240104540001246d616e6461746f7279240104540000240c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6528010c75363400012870726f6f665f73697a6528010c75363400002800000610002c083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000030000002080034102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677338013c5665633c4469676573744974656d3e0000380000023c003c102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e00060024436f6e73656e7375730800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000400105365616c0800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000500144f74686572040030011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000400000030400000008004400000248004808306672616d655f73797374656d2c4576656e745265636f7264080445014c0454012c000c011470686173658902011450686173650001146576656e744c010445000118746f706963738d0201185665633c543e00004c08447370697269746e65745f72756e74696d653052756e74696d654576656e7400017c1853797374656d04005001706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c496e6469636573040074017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e0005002042616c616e636573040078017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000600485472616e73616374696f6e5061796d656e7404008001a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0007001c53657373696f6e040084015470616c6c65745f73657373696f6e3a3a4576656e740016004050617261636861696e5374616b696e67040088018470617261636861696e5f7374616b696e673a3a4576656e743c52756e74696d653e0015002444656d6f6372616379040090018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e001e001c436f756e63696c0400a401fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400b401fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020004c546563686e6963616c4d656d626572736869700400b801fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365313e0022002054726561737572790400bc017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0023001c5574696c6974790400c0015470616c6c65745f7574696c6974793a3a4576656e740028001c56657374696e670400c4017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e002900245363686564756c65720400c8018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e002a001450726f78790400d4017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002b0020507265696d6167650400e0017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e002c0038546970734d656d626572736869700400e401fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365323e002d0010546970730400e8016c70616c6c65745f746970733a3a4576656e743c52756e74696d653e002e00204d756c74697369670400ec017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e002f001443747970650400f4015463747970653a3a4576656e743c52756e74696d653e003d002c4174746573746174696f6e0400f8016c6174746573746174696f6e3a3a4576656e743c52756e74696d653e003e002844656c65676174696f6e04000501016864656c65676174696f6e3a3a4576656e743c52756e74696d653e003f000c44696404000d01014c6469643a3a4576656e743c52756e74696d653e004000244469644c6f6f6b757004001101018470616c6c65745f6469645f6c6f6f6b75703a3a4576656e743c52756e74696d653e00430024576562334e616d657304002101018470616c6c65745f776562335f6e616d65733a3a4576656e743c52756e74696d653e004400445075626c696343726564656e7469616c7304002d0101887075626c69635f63726564656e7469616c733a3a4576656e743c52756e74696d653e0045003c50617261636861696e53797374656d04009d0101bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0050002458636d7051756575650400a10101a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e0052002c506f6c6b61646f7458636d0400ad01016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e0053002843756d756c757358636d04008102018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e00540020446d7051756575650400850201a063756d756c75735f70616c6c65745f646d705f71756575653a3a4576656e743c52756e74696d653e00550000500c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5401304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7260013444697370617463684572726f7200013464697370617463685f696e666f5401304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e744964000110686173682c011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e540c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874240118576569676874000114636c6173735801344469737061746368436c617373000120706179735f6665655c0110506179730000580c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f7279000200005c0c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000060082873705f72756e74696d653444697370617463684572726f72000134144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040064012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400680128546f6b656e4572726f720007002841726974686d6574696304006c013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007001485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c000064082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7240018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000068082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f72746564000600006c083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000070082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000740c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909780c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475737c01185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909097c14346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000800c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909840c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e6465781c013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909880c4470617261636861696e5f7374616b696e671870616c6c6574144576656e74040454000154204e6577526f756e640800100138543a3a426c6f636b4e756d62657200001c013053657373696f6e496e6465780000088041206e6577207374616b696e6720726f756e642068617320737461727465642e785c5b626c6f636b206e756d6265722c20726f756e64206e756d6265725c5d50456e7465726564546f7043616e646964617465730400000130543a3a4163636f756e744964000108cc41206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d444c656674546f7043616e646964617465730400000130543a3a4163636f756e744964000208d8416e206163636f756e74207761732072656d6f7665642066726f6d2074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d604a6f696e6564436f6c6c61746f7243616e646964617465730800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000308e041206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620636f6c6c61746f722063616e646964617465732ebc5c5b6163636f756e742c20616d6f756e74207374616b656420627920746865206e65772063616e6469646174655c5d48436f6c6c61746f725374616b65644d6f72650c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00040801014120636f6c6c61746f722063616e6469646174652068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d48436f6c6c61746f725374616b65644c6573730c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00050801014120636f6c6c61746f722063616e64696461746520686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d54436f6c6c61746f725363686564756c6564457869740c001c013053657373696f6e496e6465780000000130543a3a4163636f756e74496400001c013053657373696f6e496e64657800061001014120636f6c6c61746f722063616e646964617465206861732073746172746564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e646964617465732e205c5b726f756e64206e756d6265722c20636f6c6c61746f722773206163636f756e742c20726f756e64206e756d626572207768656ee074686520636f6c6c61746f722077696c6c206265206566666563746976656c792072656d6f7665642066726f6d2074686520736574206f663063616e646964617465735c5d50436f6c6c61746f7243616e63656c6564457869740400000130543a3a4163636f756e74496400070c05014120636f6c6c61746f722063616e646964617465206861732063616e63656c6564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e6469646174657320616e6420776173206164646564206261636b20746f207468652063616e64696461746520706f6f6c2e205c5b636f6c6c61746f722773246163636f756e745c5d3443616e6469646174654c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000808cc416e206163636f756e7420686173206c6566742074686520736574206f6620636f6c6c61746f722063616e646964617465732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d3c436f6c6c61746f7252656d6f7665640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000908e4416e206163636f756e742077617320666f726365646c792072656d6f7665642066726f6d207468652020736574206f6620636f6c6c61746f72c863616e646964617465732e205c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d604d617843616e6469646174655374616b654368616e676564040018013042616c616e63654f663c543e000a08b4546865206d6178696d756d2063616e646964617465207374616b6520686173206265656e206368616e6765642e485c5b6e6577206d617820616d6f756e745c5d4c44656c656761746f725374616b65644d6f72651000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000b0cf0412064656c656761746f722068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d4c44656c656761746f725374616b65644c6573731000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000c0cf0412064656c656761746f7220686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d3444656c656761746f724c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000d08a8416e206163636f756e7420686173206c6566742074686520736574206f662064656c656761746f72732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d2844656c65676174696f6e1000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000e0cc8416e206163636f756e74206861732064656c6567617465642061206e657720636f6c6c61746f722063616e6469646174652e11015c5b6163636f756e742c20616d6f756e74206f662066756e6473207374616b65642c20746f74616c20616d6f756e74206f662064656c656761746f7273272066756e64738c7374616b656420666f722074686520636f6c6c61746f722063616e6469646174655c5d4844656c65676174696f6e5265706c616365641800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000f180d0141206e65772064656c65676174696f6e20686173207265706c6163656420616e206578697374696e67206f6e6520696e2074686520736574206f66206f6e676f696e67010164656c65676174696f6e7320666f72206120636f6c6c61746f722063616e6469646174652e205c5b6e65772064656c656761746f722773206163636f756e742c0901616d6f756e74206f662066756e6473207374616b656420696e20746865206e65772064656c65676174696f6e2c207265706c616365642064656c656761746f7227730d016163636f756e742c20616d6f756e74206f662066756e6473207374616b656420696e20746865207265706c6163652064656c65676174696f6e2c20636f6c6c61746f72050163616e6469646174652773206163636f756e742c206e657720746f74616c20616d6f756e74206f662064656c656761746f7273272066756e6473207374616b656470666f722074686520636f6c6c61746f722063616e6469646174655c5d5444656c656761746f724c656674436f6c6c61746f721000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00100cdc416e206163636f756e74206861732073746f707065642064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e09015c5b6163636f756e742c20636f6c6c61746f722063616e6469646174652773206163636f756e742c206f6c6420616d6f756e74206f662064656c656761746f727327d866756e6473207374616b65642c206e657720616d6f756e74206f662064656c656761746f7273272066756e6473207374616b65645c5d2052657761726465640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e001108c04120636f6c6c61746f72206f7220612064656c656761746f72206861732072656365697665642061207265776172642e745c5b6163636f756e742c20616d6f756e74206f66207265776172645c5d44526f756e64496e666c6174696f6e53657410008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00120c0501496e666c6174696f6e20636f6e66696775726174696f6e20666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e09015c5b6d6178696d756d20636f6c6c61746f722773207374616b696e6720726174652c206d6178696d756d20636f6c6c61746f7227732072657761726420726174652c0d016d6178696d756d2064656c656761746f722773207374616b696e6720726174652c206d6178696d756d2064656c656761746f7227732072657761726420726174655c5d604d617853656c656374656443616e6469646174657353657408001c010c75333200001c010c753332001308f0546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c656374656420696e20667574757265dc76616c69646174696f6e20726f756e647320686173206368616e6765642e205c5b6f6c642076616c75652c206e65772076616c75655c5d44426c6f636b73506572526f756e6453657410001c013053657373696f6e496e6465780000100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d62657200140cf8546865206c656e67746820696e20626c6f636b7320666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e01015c5b726f756e64206e756d6265722c20666972737420626c6f636b20696e207468652063757272656e7420726f756e642c206f6c642076616c75652c206e65771c76616c75655c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098c0c3473705f61726974686d65746963287065725f7468696e67732c5065727175696e74696c6c0000040010010c7536340000900c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001442050726f706f73656408013870726f706f73616c5f696e6465781c012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e6465781c012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e6465781c013c5265666572656e64756d496e6465780001247468726573686f6c64940134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e6465781c013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e6465781c013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e6465781c013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011048323536000114756e74696c100138543a3a426c6f636b4e756d62657200090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f686173682c011048323536000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e6465781c013c5265666572656e64756d496e646578000110766f74659801644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e6465781c012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e6465781c012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e2c4d657461646174615365740801146f776e6572a001344d657461646174614f776e6572043c4d65746164617461206f776e65722e0110686173682c0130507265696d616765486173680438507265696d61676520686173682e0e04d44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c65617265640801146f776e6572a001344d657461646174614f776e6572043c4d65746164617461206f776e65722e0110686173682c0130507265696d616765486173680438507265696d61676520686173682e0f04e44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e20636c65617265642e4c4d657461646174615472616e736665727265640c0128707265765f6f776e6572a001344d657461646174614f776e6572046050726576696f7573206d65746164617461206f776e65722e01146f776e6572a001344d657461646174614f776e6572044c4e6577206d65746164617461206f776e65722e0110686173682c0130507265696d616765486173680438507265696d61676520686173682e1004ac4d6574616461746120686173206265656e207472616e7366657272656420746f206e6577206f776e65722e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909940c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f7269747900020000980c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f74659c0110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e6365000100009c0c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000a00c4070616c6c65745f64656d6f6372616379147479706573344d657461646174614f776e657200010c2045787465726e616c0000002050726f706f73616c04001c012450726f70496e646578000100285265666572656e64756d04001c013c5265666572656e64756d496e64657800020000a40c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800013470726f706f73616c5f686173682c011c543a3a486173680001247468726573686f6c641c012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011c543a3a48617368000114766f746564a80110626f6f6c00010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74ac01384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74ac01384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f686173682c011c543a3a4861736800010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a80000050000ac0418526573756c7408045401b0044501600108084f6b0400b0000000000c4572720400600000010000b00000040000b40c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800013470726f706f73616c5f686173682c011c543a3a486173680001247468726573686f6c641c012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011c543a3a48617368000114766f746564a80110626f6f6c00010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74ac01384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74ac01384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f686173682c011c543a3a4861736800010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b80c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909bc0c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001242050726f706f73656404013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c00c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e6465781c010c7533320001146572726f7260013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7260013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74ac01384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c40c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c80c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736bcc016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d001404f7074696f6e3c5461736b4e616d653e000118726573756c74ac01384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736bcc016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d001404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736bcc016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d001404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736bcc016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d001404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652ecc00000408101c00d004184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000d40c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74ac01384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065d80130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e646578dc010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f686173682c013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200040450412070726f7879207761732072656d6f7665642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d808447370697269746e65745f72756e74696d652450726f7879547970650001180c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e63650002004050617261636861696e5374616b696e670003002c43616e63656c50726f7879000400484e6f6e4465706f736974436c61696d696e6700050000dc0000050400e00c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f746564040110686173682c011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e24526571756573746564040110686173682c011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c6561726564040110686173682c011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e40c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e80c2c70616c6c65745f746970731870616c6c6574144576656e74080454000449000114184e65775469700401207469705f686173682c011c543a3a486173680000049441206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e28546970436c6f73696e670401207469705f686173682c011c543a3a48617368000104d841207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e24546970436c6f7365640c01207469705f686173682c011c543a3a4861736800010c77686f000130543a3a4163636f756e7449640001187061796f757418013c42616c616e63654f663c542c20493e0002048441207469702073756767657374696f6e20686173206265656e20636c6f7365642e305469705265747261637465640401207469705f686173682c011c543a3a486173680003049041207469702073756767657374696f6e20686173206265656e207265747261637465642e28546970536c61736865640c01207469705f686173682c011c543a3a4861736800011866696e646572000130543a3a4163636f756e74496400011c6465706f73697418013c42616c616e63654f663c542c20493e0004048841207469702073756767657374696f6e20686173206265656e20736c61736865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ec0c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f0016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f0016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c74ac01384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e74f0016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f0083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e6465781c010c7533320000f40c1463747970651870616c6c6574144576656e74040454000108304354797065437265617465640800000144437479706543726561746f724f663c543e00002c01384374797065486173684f663c543e0000087441206e657720435479706520686173206265656e20637265617465642e885c5b63726561746f72206964656e7469666965722c20435479706520686173685c5d3043547970655570646174656404002c01384374797065486173684f663c543e000108ac496e666f726d6174696f6e2061626f7574206120435479706520686173206265656e20757064617465642e385c5b435479706520686173685c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f80c2c6174746573746174696f6e1870616c6c6574144576656e74040454000110484174746573746174696f6e43726561746564100000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00002c01384374797065486173684f663c543e0000fc01704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e0000088c41206e6577206174746573746174696f6e20686173206265656e20637265617465642e05015c5b61747465737465722049442c20636c61696d20686173682c20435479706520686173682c20286f7074696f6e616c292064656c65676174696f6e2049445c5d484174746573746174696f6e5265766f6b6564080000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00010880416e206174746573746174696f6e20686173206265656e207265766f6b65642e685c5b6163636f756e742069642c20636c61696d20686173685c5d484174746573746174696f6e52656d6f766564080000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00020880416e206174746573746174696f6e20686173206265656e2072656d6f7665642e685c5b6163636f756e742069642c20636c61696d20686173685c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e00002c0138436c61696d486173684f663c543e0003080501546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e2e685c5b6163636f756e742069642c20636c61696d20686173685c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909fc04184f7074696f6e0404540101010108104e6f6e6500000010536f6d6504000101000001000001010c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c417574686f72697a6174696f6e4964043044656c65676174696f6e4964012c01042844656c65676174696f6e04002c013044656c65676174696f6e49640000000005010c2864656c65676174696f6e1870616c6c6574144576656e7404045400011c40486965726172636879437265617465640c0000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c01384374797065486173684f663c543e0000088441206e65772068696572617263687920686173206265656e20637265617465642ea05c5b63726561746f722049442c20726f6f74206e6f64652049442c20435459504520686173685c5d404869657261726368795265766f6b6564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00010874412068696572617263687920686173206265656e207265766f6b65642e705c5b7265766f6b65722049442c20726f6f74206e6f64652049445c5d4048696572617263687952656d6f766564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000208dc412068696572617263687920686173206265656e2072656d6f7665642066726f6d207468652073746f72616765206f6e20636861696e2e705c5b72656d6f7665722049442c20726f6f74206e6f64652049445c5d4444656c65676174696f6e43726561746564180000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000000014044656c656761746f7249644f663c543e00000901012c5065726d697373696f6e7300030c8841206e65772064656c65676174696f6e20686173206265656e20637265617465642efc5c5b63726561746f722049442c20726f6f74206e6f64652049442c2064656c65676174696f6e206e6f64652049442c20706172656e74206e6f64652049442c6864656c65676174652049442c207065726d697373696f6e735c5d4444656c65676174696f6e5265766f6b6564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00040878412064656c65676174696f6e20686173206265656e207265766f6b65642e885c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d4444656c65676174696f6e52656d6f76656408000001384163636f756e7449644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00050878412064656c65676174696f6e20686173206265656e2072656d6f7665642e885c5b72656d6f7665722049442c2064656c65676174696f6e206e6f64652049445c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000608f8546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720612064656c65676174696f6eac737562747265652e205c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090909010c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368792c5065726d697373696f6e730000040110626974731c010c75333200000d010c0c6469641870616c6c6574144576656e74040454000110284469644372656174656408000001384163636f756e7449644f663c543e00000001484469644964656e7469666965724f663c543e0000086c41206e65772044494420686173206265656e20637265617465642e985c5b7472616e73616374696f6e207369676e65722c20444944206964656e7469666965725c5d284469645570646174656404000001484469644964656e7469666965724f663c543e0001085c412044494420686173206265656e20757064617465642e485c5b444944206964656e7469666965725c5d2844696444656c6574656404000001484469644964656e7469666965724f663c543e0002085c412044494420686173206265656e2064656c657465642e485c5b444944206964656e7469666965725c5d4444696443616c6c4469737061746368656408000001484469644964656e7469666965724f663c543e0000ac01384469737061746368526573756c74000308a041204449442d617574686f72697365642063616c6c20686173206265656e2065786563757465642e7c5c5b4449442063616c6c65722c20646973706174636820726573756c745c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090911010c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144576656e74040454000110584173736f63696174696f6e45737461626c69736865640800150101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000004f841206e6577206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e742049442077617320637265617465642e484173736f63696174696f6e52656d6f7665640800150101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000104ec416e206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e74204944207761732072656d6f7665642e444d6967726174696f6e50726f6772657373000204c454686572652077617320736f6d652070726f677265737320696e20746865206d6967726174696f6e2070726f636573732e484d6967726174696f6e436f6d706c65746564000304dc416c6c204163636f756e744964732068617665206265656e206d6967726174656420746f204c696e6b61626c654163636f756e7449642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090915010c4470616c6c65745f6469645f6c6f6f6b7570406c696e6b61626c655f6163636f756e74444c696e6b61626c654163636f756e7449640001082c4163636f756e744964323004001901012c4163636f756e74496432300000002c4163636f756e7449643332040000012c4163636f756e74496433320001000019010c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e742c4163636f756e7449643230000004001d0101205b75383b2032305d00001d0100000314000000080021010c4470616c6c65745f776562335f6e616d65731870616c6c6574144576656e740404540001103c576562334e616d65436c61696d65640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6525010134576562334e616d654f663c543e0000047041206e6577206e616d6520686173206265656e20636c61696d65642e40576562334e616d6552656c65617365640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6525010134576562334e616d654f663c543e0001046441206e616d6520686173206265656e2072656c65617365642e38576562334e616d6542616e6e65640401106e616d6525010134576562334e616d654f663c543e0002045c41206e616d6520686173206265656e2062616e6e65642e40576562334e616d65556e62616e6e65640401106e616d6525010134576562334e616d654f663c543e0003046441206e616d6520686173206265656e20756e62616e6e65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090925010c4470616c6c65745f776562335f6e616d657324776562335f6e616d65344173636969576562334e616d650404540000040029010180426f756e6465645665633c75382c20543a3a4d61784e616d654c656e6774683e000029010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00002d010c487075626c69635f63726564656e7469616c731870616c6c6574144576656e740404540001104043726564656e7469616c53746f7265640801287375626a6563745f696431010130543a3a5375626a65637449640488546865207375626a656374206f6620746865206e65772063726564656e7469616c2e013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0474546865206964206f6620746865206e65772063726564656e7469616c2e0004a041206e6577207075626c69632063726564656e7469616c20686173206265656e206973737565642e4443726564656e7469616c52656d6f7665640801287375626a6563745f696431010130543a3a5375626a65637449640498546865207375626a656374206f66207468652072656d6f7665642063726564656e7469616c2e013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0484546865206964206f66207468652072656d6f7665642063726564656e7469616c2e01049841207075626c69632063726564656e7469616c7320686173206265656e2072656d6f7665642e4443726564656e7469616c5265766f6b656404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0484546865206964206f6620746865207265766f6b65642063726564656e7469616c2e02049441207075626c69632063726564656e7469616c20686173206265656e207265766f6b65642e4c43726564656e7469616c556e7265766f6b656404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e048c546865206964206f662074686520756e7265766f6b65642063726564656e7469616c2e03049c41207075626c69632063726564656e7469616c20686173206265656e20756e7265766f6b65642e0490546865206576656e74732067656e65726174656420627920746869732070616c6c65742e31010c3872756e74696d655f636f6d6d6f6e18617373657473204173736574446964000004003501013c41737365744964656e746966696572000035010c3c6b696c745f61737365745f646964730876312041737365744469640000080120636861696e5f69643901011c436861696e496400012061737365745f69646101011c4173736574496400003901103c6b696c745f61737365745f6469647314636861696e0876311c436861696e49640001141845697031353504003d01013c4569703135355265666572656e63650000001842697031323204004101016447656e657369734865784861736833325265666572656e63650001001c446f7473616d6104004101016447656e657369734865784861736833325265666572656e636500020018536f6c616e6104004901017047656e657369734261736535384861736833325265666572656e63650003001c47656e6572696304005101013847656e65726963436861696e4964000400003d01103c6b696c745f61737365745f6469647314636861696e0876313c4569703135355265666572656e6365000004001801107531323800004101103c6b696c745f61737365745f6469647314636861696e0876316447656e657369734865784861736833325265666572656e636500000400450101205b75383b2031365d000045010000031000000008004901103c6b696c745f61737365745f6469647314636861696e0876317047656e657369734261736535384861736833325265666572656e6365000004004d010170426f756e6465645665633c75382c20436f6e73745533323c33323e3e00004d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00005101103c6b696c745f61737365745f6469647314636861696e0876313847656e65726963436861696e496400000801246e616d6573706163655501015447656e65726963436861696e4e616d6573706163650001247265666572656e63655d01015447656e65726963436861696e5265666572656e636500005501103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e4e616d65737061636500000400590101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f434841494e5f4e414d4553504143455f4c454e4754485f5533323e3e000059010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00005d01103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e5265666572656e6365000004004d0101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f434841494e5f5245464552454e43455f4c454e4754485f5533323e3e00006101103c6b696c745f61737365745f646964731461737365740876311c4173736574496400011418536c6970343404006501013c536c697034345265666572656e636500000014457263323004007101018445766d536d617274436f6e747261637446756e6769626c655265666572656e63650001001845726337323104007501019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650002001c4572633131353504007501019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650003001c47656e6572696304008501013847656e6572696341737365744964000400006501103c6b696c745f61737365745f646964731461737365740876313c536c697034345265666572656e636500000400690101105532353600006901083c7072696d69746976655f74797065731055323536000004006d0101205b7536343b20345d00006d010000030400000010007101103c6b696c745f61737365745f646964731461737365740876318445766d536d617274436f6e747261637446756e6769626c655265666572656e6365000004001d0101205b75383b2032305d00007501103c6b696c745f61737365745f646964731461737365740876319045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e6365000008007101018445766d536d617274436f6e747261637446756e6769626c655265666572656e63650000790101b44f7074696f6e3c45766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e7469666965723e0000790104184f7074696f6e040454017d010108104e6f6e6500000010536f6d6504007d0100000100007d01103c6b696c745f61737365745f646964731461737365740876319445766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e74696669657200000400810101f4426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4944454e5449464945525f4c454e4754485f5533323e3e000081010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00008501103c6b696c745f61737365745f646964731461737365740876313847656e657269634173736574496400000c01246e616d6573706163658901015447656e6572696341737365744e616d6573706163650001247265666572656e63658d01015447656e6572696341737365745265666572656e63650001086964950101784f7074696f6e3c47656e6572696341737365744964656e7469666965723e00008901103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365744e616d65737061636500000400590101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4e414d4553504143455f4c454e4754485f5533323e3e00008d01103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365745265666572656e636500000400910101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f5245464552454e43455f4c454e4754485f5533323e3e000091010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000950104184f7074696f6e0404540199010108104e6f6e6500000010536f6d650400990100000100009901103c6b696c745f61737365745f646964731461737365740876315847656e6572696341737365744964656e74696669657200000400810101f4426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4944454e5449464945525f4c454e4754485f5533323e3e00009d010c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e7404045400011c6056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d1c015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e4455706772616465417574686f72697a6564040124636f64655f686173682c011c543a3a486173680003047c416e207570677261646520686173206265656e20617574686f72697a65642e60446f776e776172644d657373616765735265636569766564040114636f756e741c010c7533320004040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564240118576569676874000120646d715f686561642c014472656c61795f636861696e3a3a48617368000504e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f68617368d0013c4f7074696f6e3c58636d486173683e000604b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a1010c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e7404045400011c1c537563636573730801306d6573736167655f68617368d0013c4f7074696f6e3c58636d486173683e00011877656967687424011857656967687400000464536f6d652058434d20776173206578656375746564206f6b2e104661696c0c01306d6573736167655f68617368d0013c4f7074696f6e3c58636d486173683e0001146572726f72a501012058636d4572726f7200011877656967687424011857656967687400010440536f6d652058434d206661696c65642e2842616456657273696f6e0401306d6573736167655f68617368d0013c4f7074696f6e3c58636d486173683e000204544261642058434d2076657273696f6e20757365642e24426164466f726d61740401306d6573736167655f68617368d0013c4f7074696f6e3c58636d486173683e000304504261642058434d20666f726d617420757365642e3c58636d704d65737361676553656e740401306d6573736167655f68617368d0013c4f7074696f6e3c58636d486173683e000404c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e484f766572776569676874456e71756575656410011873656e646572a901011850617261496400011c73656e745f61741c014052656c6179426c6f636b4e756d626572000114696e64657810013c4f766572776569676874496e6465780001207265717569726564240118576569676874000504d4416e2058434d2065786365656465642074686520696e646976696475616c206d65737361676520776569676874206275646765742e484f7665727765696768745365727669636564080114696e64657810013c4f766572776569676874496e646578000110757365642401185765696768740006044101416e2058434d2066726f6d20746865206f7665727765696768742071756575652077617320657865637574656420776974682074686520676976656e2061637475616c2077656967687420757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a501100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002401185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d697400270000a9010c48706f6c6b61646f745f70617261636861696e287072696d697469766573084964000004001c010c7533320000ad010c2870616c6c65745f78636d1870616c6c6574144576656e7404045400015c24417474656d707465640400b101015078636d3a3a6c61746573743a3a4f7574636f6d6500000ca8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e00345c5b206f7574636f6d65205c5d1053656e740c00b50101344d756c74694c6f636174696f6e0000b50101344d756c74694c6f636174696f6e0000d901011c58636d3c28293e00010c5c412058434d206d657373616765207761732073656e742e00885c5b206f726967696e2c2064657374696e6174696f6e2c206d657373616765205c5d48556e6578706563746564526573706f6e73650800b50101344d756c74694c6f636174696f6e000010011c517565727949640002145901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e73655265616479080010011c51756572794964000001020120526573706f6e73650003105d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e00485c5b2069642c20726573706f6e7365205c5d204e6f7469666965640c0010011c5175657279496400000801087538000008010875380004105901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d404e6f746966794f766572776569676874140010011c517565727949640000080108753800000801087538000024011857656967687400002401185765696768740005146101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20636f756c6441016e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e0019015c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e6465782c2061637475616c207765696768742c206d617820627564676574656420776569676874205c5d4c4e6f7469667944697370617463684572726f720c0010011c5175657279496400000801087538000008010875380006105501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d484e6f746966794465636f64654661696c65640c0010011c5175657279496400000801087538000008010875380007145101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d40496e76616c6964526573706f6e6465720c00b50101344d756c74694c6f636174696f6e000010011c517565727949640000250201544f7074696f6e3c4d756c74694c6f636174696f6e3e0008145901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e00b05c5b206f726967696e206c6f636174696f6e2c2069642c206578706563746564206c6f636174696f6e205c5d5c496e76616c6964526573706f6e64657256657273696f6e0800b50101344d756c74694c6f636174696f6e000010011c517565727949640009245101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e736554616b656e040010011c51756572794964000a0cc8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e00205c5b206964205c5d34417373657473547261707065640c002c0110483235360000b50101344d756c74694c6f636174696f6e00004502015056657273696f6e65644d756c7469417373657473000b0cb8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e00685c5b20686173682c206f726967696e2c20617373657473205c5d5456657273696f6e4368616e67654e6f7469666965640c00b50101344d756c74694c6f636174696f6e00001c012858636d56657273696f6e0000e501012c4d756c7469417373657473000c142501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e007c5c5b2064657374696e6174696f6e2c20726573756c742c20636f7374205c5d5c537570706f7274656456657273696f6e4368616e6765640800b50101344d756c74694c6f636174696f6e00001c012858636d56657273696f6e000d10390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e006c5c5b206c6f636174696f6e2c2058434d2076657273696f6e205c5d504e6f7469667954617267657453656e644661696c0c00b50101344d756c74694c6f636174696f6e000010011c517565727949640000a501012058636d4572726f72000e1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e007c5c5b206c6f636174696f6e2c2071756572792049442c206572726f72205c5d644e6f746966795461726765744d6967726174696f6e4661696c08007d02015856657273696f6e65644d756c74694c6f636174696f6e000010011c51756572794964000f1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e00605c5b206c6f636174696f6e2c207175657279204944205c5d54496e76616c69645175657269657256657273696f6e0800b50101344d756c74694c6f636174696f6e000010011c517565727949640010245501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d38496e76616c6964517565726965721000b50101344d756c74694c6f636174696f6e000010011c517565727949640000b50101344d756c74694c6f636174696f6e0000250201544f7074696f6e3c4d756c74694c6f636174696f6e3e0011145d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e0005015c5b206f726967696e206c6f636174696f6e2c2069642c20657870656374656420717565726965722c206d617962652061637475616c2071756572696572205c5d5056657273696f6e4e6f74696679537461727465640800b50101344d756c74694c6f636174696f6e0000e501012c4d756c74694173736574730012105901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d5856657273696f6e4e6f746966795265717565737465640800b50101344d756c74694c6f636174696f6e0000e501012c4d756c746941737365747300130c41015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e64732075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d6056657273696f6e4e6f74696679556e7265717565737465640800b50101344d756c74694c6f636174696f6e0000e501012c4d756c746941737365747300140c61015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d2046656573506169640800b50101344d756c74694c6f636174696f6e0000e501012c4d756c746941737365747300150c310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e006c5c5b20706179696e67206c6f636174696f6e2c2066656573205c5d34417373657473436c61696d65640c002c0110483235360000b50101344d756c74694c6f636174696f6e00004502015056657273696f6e65644d756c746941737365747300160cc0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e206173736574207472617000685c5b20686173682c206f726967696e2c20617373657473205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b101100c78636d087633187472616974731c4f7574636f6d6500010c20436f6d706c657465040024011857656967687400000028496e636f6d706c65746508002401185765696768740000a50101144572726f72000100144572726f720400a50101144572726f7200020000b501100c78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72b90101244a756e6374696f6e730000b901100c78636d087633246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400bd0101204a756e6374696f6e0001000858320800bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0002000858330c00bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0003000858341000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0004000858351400bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0005000858361800bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0006000858371c00bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0007000858382000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e00080000bd01100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400c101010c7533320000002c4163636f756e744964333208011c6e6574776f726bc50101444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bc50101444f7074696f6e3c4e6574776f726b49643e000114696e64657828010c753634000200304163636f756e744b6579323008011c6e6574776f726bc50101444f7074696f6e3c4e6574776f726b49643e00010c6b65791d0101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400cd010110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964d1010118426f6479496400011070617274d5010120426f6479506172740008003c476c6f62616c436f6e73656e7375730400c90101244e6574776f726b496400090000c1010000061c00c50104184f7074696f6e04045401c9010108104e6f6e6500000010536f6d650400c9010000010000c901100c78636d087633206a756e6374696f6e244e6574776f726b496400012824427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657210010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f696428010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090000cd010000061800d101100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040040011c5b75383b20345d00010014496e6465780400c101010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000d501100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74c101010c753332000100204672616374696f6e08010c6e6f6dc101010c75333200011464656e6f6dc101010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dc101010c75333200011464656e6f6dc101010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dc101010c75333200011464656e6f6dc101010c75333200040000d9010c0c78636d0876330c58636d041043616c6c00000400dd0101585665633c496e737472756374696f6e3c43616c6c3e3e0000dd01000002e10100e1010c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400e501012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400e501012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400e501012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f696428011c51756572794964000120726573706f6e736501020120526573706f6e73650001286d61785f77656967687424011857656967687400011c71756572696572250201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473e501012c4d756c746941737365747300012c62656e6566696369617279b50101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473e501012c4d756c746941737365747300011064657374b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64290201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737424011857656967687400011063616c6c2d02014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c101010c7533320001406d61785f6d6573736167655f73697a65c101010c7533320001306d61785f6361706163697479c101010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c101010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c101010c75333200011873656e646572c101010c753332000124726563697069656e74c101010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400b9010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400310201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473350201404d756c7469417373657446696c74657200012c62656e6566696369617279b50101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473350201404d756c7469417373657446696c74657200011064657374b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e000e003445786368616e676541737365740c011067697665350201404d756c7469417373657446696c74657200011077616e74e501012c4d756c746941737365747300011c6d6178696d616ca80110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473350201404d756c7469417373657446696c74657200011c72657365727665b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473350201404d756c7469417373657446696c74657200011064657374b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f310201445175657279526573706f6e7365496e666f000118617373657473350201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573ed0101284d756c746941737365740001307765696768745f6c696d69744102012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400d901012458636d3c43616c6c3e0015002c536574417070656e6469780400d901012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473e501012c4d756c74694173736574730001187469636b6574b50101344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f776569676874240118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400e501012c4d756c7469417373657473001c002c45787065637441737365740400e501012c4d756c7469417373657473001d00304578706563744f726967696e0400250201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400050201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304001d0201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6530011c5665633c75383e000134726573706f6e73655f696e666f310201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578c101010c7533320001106e616d6530011c5665633c75383e00012c6d6f64756c655f6e616d6530011c5665633c75383e00012c63726174655f6d616a6f72c101010c75333200013c6d696e5f63726174655f6d696e6f72c101010c753332002200505265706f72745472616e736163745374617475730400310201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400bd0101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bc90101244e6574776f726b496400012c64657374696e6174696f6eb9010154496e746572696f724d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e002600244c6f636b41737365740801146173736574ed0101284d756c74694173736574000120756e6c6f636b6572b50101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574ed0101284d756c74694173736574000118746172676574b50101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574ed0101284d756c746941737365740001146f776e6572b50101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574ed0101284d756c746941737365740001186c6f636b6572b50101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177a80110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400b50101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69744102012c5765696768744c696d6974000130636865636b5f6f726967696e250201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000e501100c78636d087633286d756c746961737365742c4d756c746941737365747300000400e901013c5665633c4d756c746941737365743e0000e901000002ed0100ed01100c78636d087633286d756c74696173736574284d756c7469417373657400000801086964f101011c4173736574496400010c66756ef501012c46756e676962696c6974790000f101100c78636d087633286d756c746961737365741c4173736574496400010820436f6e63726574650400b50101344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d00010000f501100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400cd010110753132380000002c4e6f6e46756e6769626c650400f90101344173736574496e7374616e636500010000f901100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400cd0101107531323800010018417272617934040040011c5b75383b20345d000200184172726179380400fd01011c5b75383b20385d0003001c417272617931360400450101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000fd0100000308000000080001020c0c78636d08763320526573706f6e7365000118104e756c6c000000184173736574730400e501012c4d756c74694173736574730001003c457865637574696f6e526573756c740400050201504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e04001c013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f04000d020198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c7404001d0201384d617962654572726f72436f646500050000050204184f7074696f6e0404540109020108104e6f6e6500000010536f6d650400090200000100000902000004081ca501000d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011102045300000400190201185665633c543e000011020c0c78636d0876332850616c6c6574496e666f0000180114696e646578c101010c7533320001106e616d6515020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d6515020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72c101010c7533320001146d696e6f72c101010c7533320001147061746368c101010c753332000015020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000019020000021102001d020c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f7204002102018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000100385472756e63617465644572726f7204002102018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e0002000021020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000250204184f7074696f6e04045401b5010108104e6f6e6500000010536f6d650400b501000001000029020c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d000300002d020c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656430011c5665633c75383e000031020c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6eb50101344d756c74694c6f636174696f6e00012071756572795f696428011c517565727949640001286d61785f77656967687424011857656967687400003502100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e6974650400e501012c4d756c74694173736574730000001057696c6404003902013857696c644d756c74694173736574000100003902100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f660801086964f101011c4173736574496400010c66756e3d02013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400c101010c75333200020030416c6c4f66436f756e7465640c01086964f101011c4173736574496400010c66756e3d02013c57696c6446756e676962696c697479000114636f756e74c101010c753332000300003d02100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000041020c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400240118576569676874000100004502080c78636d5056657273696f6e65644d756c746941737365747300010808563204004902013c76323a3a4d756c74694173736574730001000856330400e501013c76333a3a4d756c7469417373657473000300004902100c78636d087632286d756c746961737365742c4d756c7469417373657473000004004d02013c5665633c4d756c746941737365743e00004d020000025102005102100c78636d087632286d756c74696173736574284d756c74694173736574000008010869645502011c4173736574496400010c66756e7502012c46756e676962696c69747900005502100c78636d087632286d756c746961737365741c4173736574496400010820436f6e63726574650400590201344d756c74694c6f636174696f6e000000204162737472616374040030011c5665633c75383e000100005902100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f725d0201244a756e6374696f6e7300005d02100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e7300012410486572650000000858310400610201204a756e6374696f6e0001000858320800610201204a756e6374696f6e0000610201204a756e6374696f6e0002000858330c00610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0003000858341000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0004000858351400610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0005000858361800610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0006000858371c00610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0007000858382000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e000800006102100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400c101010c7533320000002c4163636f756e744964333208011c6e6574776f726b650201244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b650201244e6574776f726b4964000114696e64657828010c753634000200304163636f756e744b6579323008011c6e6574776f726b650201244e6574776f726b496400010c6b65791d0101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400cd010110753132380005002847656e6572616c4b65790400690201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c69747908010869646d020118426f647949640001107061727471020120426f6479506172740008000065020c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d65640400690201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d610003000069020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e00006d020c0c78636d08763218426f6479496400012810556e6974000000144e616d65640400690201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400c101010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e0008002054726561737572790009000071020c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74c101010c753332000100204672616374696f6e08010c6e6f6dc101010c75333200011464656e6f6dc101010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dc101010c75333200011464656e6f6dc101010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dc101010c75333200011464656e6f6dc101010c753332000400007502100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400cd010110753132380000002c4e6f6e46756e6769626c650400790201344173736574496e7374616e6365000100007902100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400cd0101107531323800010018417272617934040040011c5b75383b20345d000200184172726179380400fd01011c5b75383b20385d0003001c417272617931360400450101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040030011c5665633c75383e000600007d02080c78636d5856657273696f6e65644d756c74694c6f636174696f6e00010808563204005902014476323a3a4d756c74694c6f636174696f6e0001000856330400b501014476333a3a4d756c74694c6f636174696f6e0003000081020c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d0000b101011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090985020c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144576656e7404045400011c34496e76616c6964466f726d61740401286d6573736167655f69640401244d657373616765496400000480446f776e77617264206d65737361676520697320696e76616c69642058434d2e48556e737570706f7274656456657273696f6e0401286d6573736167655f69640401244d6573736167654964000104bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e404578656375746564446f776e776172640801286d6573736167655f69640401244d657373616765496400011c6f7574636f6d65b101011c4f7574636f6d65000204c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e3c5765696768744578686175737465640c01286d6573736167655f69640401244d657373616765496400014072656d61696e696e675f77656967687424011857656967687400013c72657175697265645f776569676874240118576569676874000304f054686520776569676874206c696d697420666f722068616e646c696e6720646f776e77617264206d657373616765732077617320726561636865642e484f766572776569676874456e7175657565640c01286d6573736167655f69640401244d65737361676549640001406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800013c72657175697265645f7765696768742401185765696768740004041901446f776e77617264206d657373616765206973206f76657277656967687420616e642077617320706c6163656420696e20746865206f7665727765696768742071756575652e484f76657277656967687453657276696365640801406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800012c7765696768745f75736564240118576569676874000504e0446f776e77617264206d6573736167652066726f6d20746865206f766572776569676874207175657565207761732065786563757465642e504d61784d657373616765734578686175737465640401286d6573736167655f69640401244d6573736167654964000604b0546865206d6178696d756d206e756d626572206f6620646f776e77617264206d65737361676573207761732e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909890208306672616d655f73797374656d14506861736500010c384170706c7945787472696e73696304001c010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e000200008d020000022c009102000002cc00950208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ec101014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d659902016473705f72756e74696d653a3a52756e74696d65537472696e670000990200000502009d020c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b30011c5665633c75383e000010684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e0034232320436f6d706c6578697479202d20604f28312960387365745f686561705f7061676573040114706167657310010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646530011c5665633c75383e0002106453657420746865206e65772072756e74696d6520636f64652e0034232320436f6d706c657869747931012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f6465605c7365745f636f64655f776974686f75745f636865636b73040110636f646530011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0034232320436f6d706c65786974798c2d20604f2843296020776865726520604360206c656e677468206f662060636f6465602c7365745f73746f726167650401146974656d73a10201345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973a90201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697830010c4b657900011c7375626b6579731c010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b30011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea102000002a50200a50200000408303000a9020000023000ad020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2401185765696768740001246d61785f626c6f636b2401185765696768740001247065725f636c617373b10201845065724469737061746368436c6173733c57656967687473506572436c6173733e0000b1020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401b502000c01186e6f726d616cb50201045400012c6f7065726174696f6e616cb5020104540001246d616e6461746f7279b5020104540000b5020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632401185765696768740001346d61785f65787472696e736963b90201384f7074696f6e3c5765696768743e0001246d61785f746f74616cb90201384f7074696f6e3c5765696768743e0001207265736572766564b90201384f7074696f6e3c5765696768743e0000b90204184f7074696f6e04045401240108104e6f6e6500000010536f6d650400240000010000bd020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178c10201545065724469737061746368436c6173733c7533323e0000c1020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454011c000c01186e6f726d616c1c01045400012c6f7065726174696f6e616c1c0104540001246d616e6461746f72791c0104540000c502082873705f776569676874733c52756e74696d65446257656967687400000801107265616410010c753634000114777269746510010c7536340000c902082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d659902013452756e74696d65537472696e67000124696d706c5f6e616d659902013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e1c010c753332000130737065635f76657273696f6e1c010c753332000130696d706c5f76657273696f6e1c010c75333200011061706973cd02011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e1c010c75333200013473746174655f76657273696f6e08010875380000cd02040c436f7704045401d102000400d102000000d102000002d50200d50200000408fd011c00d9020c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c6574dd020c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77280124543a3a4d6f6d656e7400003c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee1020000040c0018a800e5020c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e6465780000309841737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e00dc5061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00f02d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e207472616e7366657208010c6e6577e90201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e6465780001305d0141737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6eb86973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0025012d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e1066726565040114696e64657810013c543a3a4163636f756e74496e646578000230944672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e005d015061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e000d012d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e0084456d6974732060496e646578467265656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e38666f7263655f7472616e736665720c010c6e6577e90201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65a80110626f6f6c0003345501466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c7265616479e868656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00a42d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e41012d2060667265657a65603a2069662073657420746f206074727565602c2077696c6c20667265657a652074686520696e64657820736f2069742063616e6e6f74206265207472616e736665727265642e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004304101467265657a6520616e20696e64657820736f2069742077696c6c20616c7761797320706f696e7420746f207468652073656e646572206163636f756e742e205468697320636f6e73756d657320746865206465706f7369742e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d757374206861766520616c6e6f6e2d66726f7a656e206163636f756e742060696e646578602e00ac2d2060696e646578603a2074686520696e64657820746f2062652066726f7a656e20696e20706c6163652e0088456d6974732060496e64657846726f7a656e60206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee9020c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801b0011408496404000001244163636f756e74496400000014496e6465780400ed0201304163636f756e74496e6465780001000c526177040030011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d0003002441646472657373323004001d0101205b75383b2032305d00040000ed02000006b000f1020c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909f5020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401f902045300000400010301185665633c543e0000f902083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c01086964fd0101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73fd02011c526561736f6e730000fd02083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c000200000103000002f9020005030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540109030453000004000d0301185665633c543e00000903083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e74696669657201fd011c42616c616e63650118000801086964fd010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e636500000d0300000209030011030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e7366657208011064657374e90201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565cd010128543a3a42616c616e6365000058d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e0034232320436f6d706c657869747961012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e2c7365745f62616c616e63650c010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565cd010128543a3a42616c616e63650001306e65775f7265736572766564cd010128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f75726365e90201504163636f756e7449644c6f6f6b75704f663c543e00011064657374e90201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565cd010128543a3a42616c616e63650002144d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e34232320436f6d706c65786974794d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e4c7472616e736665725f6b6565705f616c69766508011064657374e90201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565cd010128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374e90201504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665a80110626f6f6c00044005015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fd420206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e20232320436f6d706c657869747939012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e3c666f7263655f756e7265736572766508010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e15030c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090919030c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800001d03086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e740000000856320001000021030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540125030453000004002d0301185665633c543e00002503104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c6963000004002903013c737232353531393a3a5075626c6963000029030c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d00002d030000022503003103084873705f636f6e73656e7375735f736c6f747310536c6f740000040010010c75363400003503000002000039030000023d03003d030000040800410300410308447370697269746e65745f72756e74696d652c53657373696f6e4b657973000004011061757261250301c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000045030000021c004903000004084d0330004d030c1c73705f636f72651863727970746f244b65795479706549640000040040011c5b75383b20345d000051030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579734103011c543a3a4b65797300011470726f6f6630011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e55030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e59030c4470617261636861696e5f7374616b696e6714747970657324526f756e64496e666f042c426c6f636b4e756d6265720110000c011c63757272656e741c013053657373696f6e496e646578000114666972737410012c426c6f636b4e756d6265720001186c656e67746810012c426c6f636b4e756d62657200005d030c4470617261636861696e5f7374616b696e671474797065734444656c65676174696f6e436f756e7465720000080114726f756e641c013053657373696f6e496e64657800011c636f756e7465721c010c753332000061030c4470617261636861696e5f7374616b696e67147479706573145374616b6508244163636f756e74496401001c42616c616e63650118000801146f776e65720001244163636f756e744964000118616d6f756e7418011c42616c616e6365000065030c4470617261636861696e5f7374616b696e671474797065732443616e6469646174650c244163636f756e74496401001c42616c616e63650118644d617844656c656761746f727350657243616e646964617465000014010869640001244163636f756e7449640001147374616b6518011c42616c616e636500012864656c656761746f727369030101014f7264657265645365743c5374616b653c4163636f756e7449642c2042616c616e63653e2c204d617844656c656761746f727350657243616e6469646174653e000114746f74616c18011c42616c616e63650001187374617475737503013c43616e646964617465537461747573000069030c4470617261636861696e5f7374616b696e670c736574284f7264657265645365740804540161030453000004006d030140426f756e6465645665633c542c20533e00006d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016103045300000400710301185665633c543e0000710300000261030075030c4470617261636861696e5f7374616b696e671474797065733c43616e646964617465537461747573000108184163746976650000001c4c656176696e6704001c013053657373696f6e496e6465780001000079030c4470617261636861696e5f7374616b696e6714747970657328546f74616c5374616b65041c42616c616e6365011800080124636f6c6c61746f727318011c42616c616e636500012864656c656761746f727318011c42616c616e636500007d030c4470617261636861696e5f7374616b696e670c736574284f72646572656453657408045401610304530000040081030140426f756e6465645665633c542c20533e000081030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016103045300000400710301185665633c543e000085030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e34496e666c6174696f6e496e666f0000080120636f6c6c61746f728903012c5374616b696e67496e666f00012464656c656761746f728903012c5374616b696e67496e666f000089030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e2c5374616b696e67496e666f00000801206d61785f726174658c012c5065727175696e74696c6c00012c7265776172645f726174658d0301285265776172645261746500008d030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e28526577617264526174650000080118616e6e75616c8c012c5065727175696e74696c6c0001247065725f626c6f636b8c012c5065727175696e74696c6c000091030c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601180453000004009503013842547265654d61703c4b2c20563e00009503042042547265654d617008044b011004560118000400990300000099030000029d03009d0300000408101800a1030c4470617261636861696e5f7374616b696e671870616c6c65741043616c6c0404540001543c666f7263655f6e65775f726f756e64000018d0466f7263657320746865207374617274206f6620746865206e657720726f756e6420696e20746865206e65787420626c6f636b2e00a0546865206e657720726f756e642077696c6c20626520656e666f7263656420766961203c54206173a453686f756c64456e6453657373696f6e3c5f3e3e3a3a73686f756c645f656e645f73657373696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e347365745f696e666c6174696f6e100170636f6c6c61746f725f6d61785f726174655f70657263656e746167658c012c5065727175696e74696c6c000198636f6c6c61746f725f616e6e75616c5f7265776172645f726174655f70657263656e746167658c012c5065727175696e74696c6c00017464656c656761746f725f6d61785f726174655f70657263656e746167658c012c5065727175696e74696c6c00019c64656c656761746f725f616e6e75616c5f7265776172645f726174655f70657263656e746167658c012c5065727175696e74696c6c00013cf05365742074686520616e6e75616c20696e666c6174696f6e207261746520746f20646572697665207065722d726f756e6420696e666c6174696f6e2e00110154686520696e666c6174696f6e2064657461696c732061726520636f6e736964657265642076616c69642069662074686520616e6e75616c207265776172642072617465f0697320617070726f78696d6174656c7920746865207065722d626c6f636b207265776172642072617465206d756c7469706c69656420627920746865ac657374696d617465642a20746f74616c206e756d626572206f6620626c6f636b732070657220796561722e00cc54686520657374696d61746564206176657261676520626c6f636b2074696d65206973207477656c7665207365636f6e64732e000d014e4f54453a204974657261746573206f7665722043616e646964617465506f6f6c20616e6420666f7220656163682063616e646964617465206f766572207468656972090164656c656761746f727320746f207570646174652074686569722072657761726473206265666f72652074686520726577617264207261746573206368616e67652ee04e6565647320746f20626520696d70726f766564207768656e207363616c696e6720757020604d6178546f7043616e64696461746573602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0068456d6974732060526f756e64496e666c6174696f6e536574602e6c7365745f6d61785f73656c65637465645f63616e6469646174657304010c6e65771c010c75333200022c090153657420746865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e6469646174657320746861742063616e2062652073656c6563746564a861742074686520626567696e6e696e67206f6620656163682076616c69646174696f6e20726f756e642e00e84368616e67657320617265206e6f74206170706c69656420756e74696c20746865207374617274206f6620746865206e65787420726f756e642e000d01546865206e65772076616c7565206d75737420626520686967686572207468616e20746865206d696e696d756d20616c6c6f7765642061732073657420696e207468655c70616c6c6574277320636f6e66696775726174696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0084456d69747320604d617853656c656374656443616e64696461746573536574602e507365745f626c6f636b735f7065725f726f756e6404010c6e6577100138543a3a426c6f636b4e756d62657200032cd453657420746865206e756d626572206f6620626c6f636b7320656163682076616c69646174696f6e20726f756e64206c617374732e000901496620746865206e65772076616c7565206973206c657373207468616e20746865206c656e677468206f66207468652063757272656e7420726f756e642c20746865050173797374656d2077696c6c20696d6d6564696174656c79206d6f766520746f20746865206e65787420726f756e6420696e20746865206e65787420626c6f636b2e000d01546865206e65772076616c7565206d75737420626520686967686572207468616e20746865206d696e696d756d20616c6c6f7765642061732073657420696e207468655c70616c6c6574277320636f6e66696775726174696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0068456d6974732060426c6f636b73506572526f756e64536574602e5c7365745f6d61785f63616e6469646174655f7374616b6504010c6e657718013042616c616e63654f663c543e000418110153657420746865206d6178696d616c20616d6f756e74206120636f6c6c61746f722063616e207374616b652e204578697374696e67207374616b657320617265206e6f74206368616e6765642e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0084456d69747320604d617843616e6469646174655374616b654368616e676564602e58666f7263655f72656d6f76655f63616e646964617465040120636f6c6c61746f72e902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650005300101466f726365646c792072656d6f766573206120636f6c6c61746f722063616e6469646174652066726f6d2074686520546f7043616e6469646174657320616e64e4636c6561727320616c6c206173736f6369617465642073746f7261676520666f72207468652063616e64696461746520616e642074686569722c64656c656761746f72732e00fc507265706172657320756e7374616b696e67206f66207468652063616e6469646174657320616e642074686569722064656c656761746f7273207374616b65f077686963682063616e20626520756e6c6f636b6564207669612060756e6c6f636b5f756e7374616b6564602061667465722077616974696e6720617409016c6561737420605374616b654475726174696f6e60206d616e7920626c6f636b732e20416c736f20696e6372656d656e7473207265776172647320666f722074686578636f6c6c61746f7220616e642074686569722064656c656761746f72732e00d4496e6372656d656e74732072657761726473206f662063616e64696461746520616e642074686569722064656c656761746f72732e0064456d697473206043616e64696461746552656d6f766564602e3c6a6f696e5f63616e646964617465730401147374616b6518013042616c616e63654f663c543e000644904a6f696e2074686520736574206f6620636f6c6c61746f722063616e646964617465732e00f8496e20746865206e65787420626c6f636b732c2069662074686520636f6c6c61746f722063616e6469646174652068617320656e6f7567682066756e6473fc7374616b656420746f20626520696e636c7564656420696e20616e79206f662074686520746f7020604d617853656c656374656443616e64696461746573600d01706f736974696f6e732c2069742077696c6c20626520696e636c7564656420696e2074686520736574206f6620706f74656e7469616c20617574686f72732074686174050177696c6c2062652073656c656374656420627920746865207374616b652d77656967687465642072616e646f6d2073656c656374696f6e2066756e6374696f6e2e00fc546865207374616b65642066756e6473206f6620746865206e657720636f6c6c61746f722063616e6469646174652061726520616464656420746f2074686568746f74616c207374616b65206f66207468652073797374656d2e00110154686520746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e2074686520616c6c6f7765642072616e67652061738873657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e00f0546865206469737061746368206f726967696e206d757374206e6f7420626520616c72656164792070617274206f662074686520636f6c6c61746f729463616e64696461746573206e6f72206f66207468652064656c656761746f7273207365742e0084456d69747320604a6f696e6564436f6c6c61746f7243616e64696461746573602e54696e69745f6c656176655f63616e6469646174657300076cc05265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e0005014f6e20737563636573732c20746865206163636f756e7420697320696d6d6564696174656c792072656d6f7665642066726f6d207468652063616e6469646174651101706f6f6c20746f2070726576656e742073656c656374696f6e206173206120636f6c6c61746f7220696e206675747572652076616c69646174696f6e20726f756e64732cd862757420756e7374616b696e67206f66207468652066756e6473206973206578656375746564207769746820612064656c6179206f665c605374616b654475726174696f6e6020626c6f636b732e00ac546865206578697420726571756573742063616e2062652072657665727365642062792063616c6c696e67686063616e63656c5f6c656176655f63616e64696461746573602e00f454686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e204974206973110175706461746564206576656e2074686f756768207468652066756e6473206f66207468652063616e6469646174652077686f207369676e616c656420746f206c65617665fc617265207374696c6c206c6f636b656420666f7220604578697444656c617960202b20605374616b654475726174696f6e60206d6f726520626c6f636b732e000d014e4f544520313a2055706f6e207374617274696e672061206e65772073657373696f6e5f6920696e20606e65775f73657373696f6e602c207468652063757272656e741101746f702063616e64696461746573206172652073656c656374656420746f20626520626c6f636b20617574686f727320666f722073657373696f6e5f692b312e20416e7905016368616e67657320746f2074686520746f702063616e64696461746573206166746572776172647320646f206e6f74206566666563742074686520736574206f6660617574686f727320666f722073657373696f6e5f692b312ed8546875732c207765206861766520746f206d616b652073757265206e6f6e65206f6620746865736520636f6c6c61746f72732063616ebc6c65617665206265666f72652073657373696f6e5f692b3120656e64732062792064656c6179696e67207468656972846578697420666f7220604578697444656c617960206d616e7920626c6f636b732e00f04e4f544520323a20576520646f206e6f7420696e6372656d656e74207265776172647320696e20746869732065787472696e73696320617320746865110163616e64696461746520636f756c64207374696c6c20617574686f7220626c6f636b732c20616e64207468757320626520656c696769626c6520746f2072656365697665ac726577617264732c20756e74696c2074686520656e64206f6620746865206e6578742073657373696f6e2e0078456d6974732060436f6c6c61746f725363686564756c656445786974602e60657865637574655f6c656176655f63616e64696461746573040120636f6c6c61746f72e902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500084405014578656375746520746865206e6574776f726b2065786974206f6620612063616e6469646174652077686f2072657175657374656420746f206c65617665206174f06c65617374206045786974517565756544656c61796020726f756e64732061676f2e20507265706172657320756e7374616b696e67206f6620746865fc63616e6469646174657320616e642074686569722064656c656761746f7273207374616b652077686963682063616e20626520756e6c6f636b656420766961f460756e6c6f636b5f756e7374616b6564602061667465722077616974696e67206174206c6561737420605374616b654475726174696f6e60206d616e791c626c6f636b732e00c05265717569726573207468652063616e64696461746520746f2070726576696f75736c7920686176652063616c6c65646060696e69745f6c656176655f63616e64696461746573602e00ac546865206578697420726571756573742063616e2062652072657665727365642062792063616c6c696e67686063616e63656c5f6c656176655f63616e64696461746573602e00fc4e4f54453a204974657261746573206f7665722043616e646964617465506f6f6c20666f7220656163682063616e646964617465206f766572207468656972fc64656c656761746f727320746f2073657420726577617264732e204e6565647320746f20626520696d70726f766564207768656e207363616c696e672075704c604d6178546f7043616e64696461746573602e0054456d6974732060436f6c6c61746f724c656674602e5c63616e63656c5f6c656176655f63616e646964617465730009200501526576657274207468652070726576696f75736c79207265717565737465642065786974206f6620746865206e6574776f726b206f66206120636f6c6c61746f720d0163616e6469646174652e204f6e20737563636573732c2061646473206261636b207468652063616e64696461746520746f2074686520546f7043616e6469646174657368616e6420757064617465732074686520636f6c6c61746f72732e00c05265717569726573207468652063616e64696461746520746f2070726576696f75736c7920686176652063616c6c65646060696e69745f6c656176655f63616e64696461746573602e0074456d6974732060436f6c6c61746f7243616e63656c656445786974602e5063616e6469646174655f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000a30a85374616b65206d6f72652066756e647320666f72206120636f6c6c61746f722063616e6469646174652e0001014966206e6f7420696e2074686520736574206f662063616e646964617465732c207374616b696e6720656e6f7567682066756e647320616c6c6f77732074686505016163636f756e7420746f20626520616464656420746f2069742e20546865206c617267657220616d6f756e74206f662066756e64732c2074686520686967686572dc6368616e63657320746f2062652073656c65637465642061732074686520617574686f72206f6620746865206e65787420626c6f636b2e00dc54686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e006c456d6974732060436f6c6c61746f725374616b65644d6f7265602e5063616e6469646174655f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000b3ca85374616b65206c6573732066756e647320666f72206120636f6c6c61746f722063616e6469646174652e000501496620746865206e657720616d6f756e74206f66207374616b65642066756e64206973206e6f74206c6172676520656e6f7567682c20746865206163636f756e74fc636f756c642062652072656d6f7665642066726f6d2074686520736574206f6620636f6c6c61746f722063616e6469646174657320616e64206e6f74206265a4636f6e7369646572656420666f7220617574686f72696e6720746865206e65787420626c6f636b732e00dc54686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e000d0154686520756e7374616b65642066756e647320617265206e6f742072656c656173656420696d6d6564696174656c7920746f20746865206163636f756e742c20627574d0746865792077696c6c20626520617661696c61626c6520616674657220605374616b654475726174696f6e6020626c6f636b732e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e006c456d6974732060436f6c6c61746f725374616b65644c657373602e3c6a6f696e5f64656c656761746f7273080120636f6c6c61746f72e902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e7418013042616c616e63654f663c543e000c5805014a6f696e2074686520736574206f662064656c656761746f72732062792064656c65676174696e6720746f206120636f6c6c61746f722063616e6469646174652e000501546865206163636f756e7420746861742077616e747320746f2064656c65676174652063616e6e6f742062652070617274206f662074686520636f6c6c61746f725c63616e64696461746573207365742061732077656c6c2e0009015468652063616c6c6572206d757374205f6e6f745f206861766520612064656c65676174696f6e2e20496620746861742069732074686520636173652c2074686579b061726520726571756972656420746f2066697273742072656d6f7665207468652064656c65676174696f6e2e00110154686520616d6f756e74207374616b6564206d757374206265206c6172676572207468616e20746865206d696e696d756d20726571756972656420746f206265636f6d65c4612064656c656761746f722061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e0009014173206f6e6c7920604d617844656c656761746f7273506572436f6c6c61746f72602061726520616c6c6f77656420746f2064656c6567617465206120676976656e0501636f6c6c61746f722c2074686520616d6f756e74207374616b6564206d757374206265206c6172676572207468616e20746865206c6f77657374206f6e6520696e01017468652063757272656e7420736574206f662064656c656761746f7220666f7220746865206f7065726174696f6e20746f206265206d65616e696e6766756c2e00090154686520636f6c6c61746f72277320746f74616c207374616b652061732077656c6c206173207468652070616c6c6574277320746f74616c207374616b652061726558696e63726561736564206163636f7264696e676c792e004c456d697473206044656c65676174696f6e602ebc456d697473206044656c65676174696f6e5265706c6163656460206966207468652063616e64696461746520686173f8604d617844656c656761746f7273506572436f6c6c61746f7260206d616e792064656c65676174696f6e732062757420746869732064656c656761746f72fc7374616b6564206d6f7265207468616e206f6e65206f6620746865206f746865722064656c656761746f7273206f6620746869732063616e6469646174652e406c656176655f64656c656761746f7273000d400d014c656176652074686520736574206f662064656c656761746f727320616e642c20627920696d706c69636174696f6e2c207265766f6b6520746865206f6e676f696e672c64656c65676174696f6e2e001101416c6c207374616b65642066756e647320617265206e6f7420756e6c6f636b656420696d6d6564696174656c792c2062757420746865792061726520616464656420746f0101746865207175657565206f662070656e64696e6720756e7374616b696e672c20616e642077696c6c206566666563746976656c792062652072656c65617365640901616674657220605374616b654475726174696f6e6020626c6f636b732066726f6d20746865206d6f6d656e74207468652064656c656761746f72206c65617665732e000d0154686973206f7065726174696f6e20726564756365732074686520746f74616c207374616b65206f66207468652070616c6c65742061732077656c6c2061732074686509017374616b6573206f6620616c6c20636f6c6c61746f7273207468617420776572652064656c6567617465642c20706f74656e7469616c6c7920616666656374696e6705017468656972206368616e63657320746f20626520696e636c7564656420696e2074686520736574206f662063616e6469646174657320696e20746865206e6578741c726f756e64732e0005014175746f6d61746963616c6c7920696e6372656d656e74732074686520616363756d756c617465642072657761726473206f6620746865206f726967696e206f665c7468652063757272656e742064656c65676174696f6e2e0058456d697473206044656c656761746f724c656674602e5064656c656761746f725f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000e18dc496e63726561736520746865207374616b6520666f722064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e0001014966206e6f7420696e2074686520736574206f662063616e646964617465732c207374616b696e6720656e6f7567682066756e647320616c6c6f77732074686594636f6c6c61746f722063616e64696461746520746f20626520616464656420746f2069742e0070456d697473206044656c656761746f725374616b65644d6f7265602e5064656c656761746f725f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000f40d452656475636520746865207374616b6520666f722064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e000901496620746865206e657720616d6f756e74206f66207374616b65642066756e64206973206e6f74206c6172676520656e6f7567682c2074686520636f6c6c61746f72fc636f756c642062652072656d6f7665642066726f6d2074686520736574206f6620636f6c6c61746f722063616e6469646174657320616e64206e6f74206265a4636f6e7369646572656420666f7220617574686f72696e6720746865206e65787420626c6f636b732e00090154686520756e7374616b65642066756e647320617265206e6f742072656c6561736520696d6d6564696174656c7920746f20746865206163636f756e742c20627574d0746865792077696c6c20626520617661696c61626c6520616674657220605374616b654475726174696f6e6020626c6f636b732e0001015468652072656d61696e696e67207374616b65642066756e6473206d757374207374696c6c206265206c6172676572207468616e20746865206d696e696d756df0726571756972656420627920746869732070616c6c657420746f206d61696e7461696e2074686520737461747573206f662064656c656761746f722e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e0070456d697473206044656c656761746f725374616b65644c657373602e3c756e6c6f636b5f756e7374616b6564040118746172676574e902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365001028f4556e6c6f636b20616c6c2070726576696f75736c79207374616b65642066756e6473207468617420617265206e6f7720617661696c61626c6520666f720501756e6c6f636b696e6720627920746865206f726967696e206163636f756e7420616674657220605374616b654475726174696f6e6020626c6f636b73206861766520656c61707365642e00fc5765696768743a204f285529207768657265205520697320746865206e756d626572206f66206c6f636b656420756e7374616b696e6720726571756573747380626f756e64656420627920604d6178556e7374616b655265717565737473602eac2d2052656164733a205b4f726967696e204163636f756e745d2c20556e7374616b696e672c204c6f636b73682d205772697465733a20556e7374616b696e672c204c6f636b73e82d204b696c6c733a20556e7374616b696e672026204c6f636b73206966206e6f2062616c616e6365206973206c6f636b656420616e796d6f72652c23203c2f7765696768743e34636c61696d5f7265776172647300113cd4436c61696d20626c6f636b20617574686f72696e67207265776172647320666f72207468652074617267657420616464726573732e00090152657175697265732060526577617264736020746f20626520736574206265666f726568616e642c2077686963682063616e2062792074726967676572656420627970616e79206f662074686520666f6c6c6f77696e67206f7074696f6e73e82a2043616c6c696e6720696e6372656d656e745f7b636f6c6c61746f722c2064656c656761746f727d5f72657761726473202861637469766529782a20416c746572696e6720796f7572207374616b65202861637469766529b02a204c656176696e6720746865206e6574776f726b206173206120636f6c6c61746f72202861637469766529bc2a205265766f6b696e6720612064656c65676174696f6e20617320612064656c656761746f7220286163746976652909012a204265696e6720612064656c656761746f722077686f736520636f6c6c61746f72206c65667420746865206e6574776f726b2c20616c7465726564207468656972a020207374616b65206f7220696e6372656d656e746564207265776172647320287061737369766529000501546865206469737061746368206f726967696e2063616e20626520616e79207369676e6564206f6e652c20652e672e2c20616e796f6e652063616e20636c61696d2c666f7220616e796f6e652e0044456d69747320605265776172646564602e68696e6372656d656e745f636f6c6c61746f725f72657761726473001218b44163746976656c7920696e6372656d656e74207468652072657761726473206f66206120636f6c6c61746f722e0005015468652073616d652065666665637420697320747269676765726564206279206368616e67696e6720746865207374616b65206f72206c656176696e6720746865206e6574776f726b2e009c546865206469737061746368206f726967696e206d757374206265206120636f6c6c61746f722e6c696e6372656d656e745f64656c656761746f725f72657761726473001318b84163746976656c7920696e6372656d656e74207468652072657761726473206f6620612064656c656761746f722e00f85468652073616d652065666665637420697320747269676765726564206279206368616e67696e6720746865207374616b65206f72207265766f6b696e673064656c65676174696f6e732e00a0546865206469737061746368206f726967696e206d75737420626520612064656c656761746f722e7c657865637574655f7363686564756c65645f7265776172645f6368616e67650014280d0145786563757465732074686520616e6e75616c20726564756374696f6e206f66207468652072657761726420726174657320666f7220636f6c6c61746f727320616e642c64656c656761746f72732e00dc4d6f72656f7665722c2073657473207265776172647320666f7220616c6c20636f6c6c61746f727320616e642064656c656761746f72737c6265666f72652061646a757374696e672074686520696e666c6174696f6e2e000d01546865206469737061746368206f726967696e2063616e20626520616e79207369676e6564206f6e652062656361757365207765206261696c2069662063616c6c656428746f6f206561726c792e0068456d6974732060526f756e64496e666c6174696f6e536574602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea5030c4470617261636861696e5f7374616b696e671870616c6c6574144572726f7204045400017c4444656c656761746f724e6f74466f756e64000004b8546865206163636f756e74206973206e6f742070617274206f66207468652064656c656761746f7273207365742e4443616e6469646174654e6f74466f756e64000104dc546865206163636f756e74206973206e6f742070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3c44656c656761746f72457869737473000204c8546865206163636f756e7420697320616c72656164792070617274206f66207468652064656c656761746f7273207365742e3c43616e646964617465457869737473000304ec546865206163636f756e7420697320616c72656164792070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3056616c5374616b655a65726f000404e4546865206163636f756e7420747269656420746f207374616b65206d6f7265206f72206c657373207769746820616d6f756e74207a65726f2e4056616c5374616b6542656c6f774d696e0005080d01546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f20626520616464656420746f2074686520636f6c6c61746f723c63616e64696461746573207365742e4056616c5374616b6541626f76654d61780006041101546865206163636f756e742068617320616c7265616479207374616b656420746865206d6178696d756d20616d6f756e74206f662066756e647320706f737369626c652e4844656c65676174696f6e42656c6f774d696e000708f8546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f2064656c6567617465206120636f6c6c61746f722863616e6469646174652e38416c72656164794c656176696e670008080d0154686520636f6c6c61746f722063616e6469646174652068617320616c72656164792074726967676572207468652070726f6365737320746f206c65617665207468656c736574206f6620636f6c6c61746f722063616e646964617465732e284e6f744c656176696e67000908f454686520636f6c6c61746f722063616e6469646174652077616e74656420746f20657865637574652074686520657869742062757420686173206e6f74f472657175657374656420746f206c65617665206265666f72652062792063616c6c696e672060696e69745f6c656176655f63616e64696461746573602e3843616e6e6f744c65617665596574000a08dc54686520636f6c6c61746f7220747269656420746f206c65617665206265666f72652077616974696e67206174206c6561737420666f72746045786974517565756544656c617960206d616e7920726f756e64732e6443616e6e6f744a6f696e4265666f7265556e6c6f636b696e67000b10f8546865206163636f756e742068617320612066756c6c206c697374206f6620756e7374616b696e6720726571756573747320616e64206e6565647320746ffc756e6c6f636b206174206c65617374206f6e65206f66207468657365206265666f7265206265696e672061626c6520746f206a6f696e2028616761696e292edc4e4f54453a2043616e206f6e6c792068617070656e20696620746865206163636f756e742077617320612063616e646964617465206f72f464656c656761746f72206265666f726520616e642065697468657220676f74206b69636b6564206f722065786974656420766f6c756e746172696c792e44416c726561647944656c65676174696e67000c04e4546865206163636f756e7420697320616c72656164792064656c65676174696e672074686520636f6c6c61746f722063616e6469646174652e404e6f7459657444656c65676174696e67000d080901546865206163636f756e7420686173206e6f742064656c65676174656420616e7920636f6c6c61746f722063616e646964617465207965742c2068656e6365206974806973206e6f7420696e2074686520736574206f662064656c656761746f72732e6c44656c65676174696f6e73506572526f756e644578636565646564000e1811015468652064656c656761746f722068617320657863656564656420746865206e756d626572206f662064656c65676174696f6e732070657220726f756e6420776869636894697320657175616c20746f204d617844656c656761746f7273506572436f6c6c61746f722e000901546869732070726f746563747320616761696e73742061747461636b7320696e20776869636820612064656c656761746f722063616e2072652d64656c6567617465010166726f6d206120636f6c6c61746f722077686f2068617320616c726561647920617574686f726564206120626c6f636b2c20746f20616e6f74686572206f6e6570776869636820686173206e6f7420696e207468697320726f756e642e44546f6f4d616e7944656c656761746f7273000f14010154686520636f6c6c61746f722063616e6469646174652068617320616c7265616479207265616368656420746865206d6178696d756d206e756d626572206f662c64656c656761746f72732e00050154686973206572726f722069732067656e65726174656420696e20636173652061206e65772064656c65676174696f6e207265717565737420646f6573206e6f74f47374616b6520656e6f7567682066756e647320746f207265706c61636520736f6d65206f74686572206578697374696e672064656c65676174696f6e2e60546f6f466577436f6c6c61746f7243616e64696461746573001008110154686520736574206f6620636f6c6c61746f722063616e6469646174657320776f756c642066616c6c2062656c6f7720746865207265717569726564206d696e696d756d5469662074686520636f6c6c61746f72206c6566742e5043616e6e6f745374616b6549664c656176696e67001108f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66010163616e6469646174657320616e642063616e6e6f7420706572666f726d20616e79206f7468657220616374696f6e7320696e20746865206d65616e74696d652e5c43616e6e6f7444656c656761746549664c656176696e67001208f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66ac63616e6469646174657320616e6420746875732063616e6e6f742062652064656c65676174656420746f2e804d6178436f6c6c61746f727350657244656c656761746f72457863656564656400130811015468652064656c656761746f722068617320616c72656164792064656c65676174656420746865206d6178696d756d206e756d626572206f662063616e6469646174657320616c6c6f7765642e60416c726561647944656c656761746564436f6c6c61746f72001408ec5468652064656c656761746f722068617320616c72656164792070726576696f75736c792064656c6567617465642074686520636f6c6c61746f722863616e6469646174652e4844656c65676174696f6e4e6f74466f756e64001504f854686520676976656e2064656c65676174696f6e20646f6573206e6f7420657869737420696e2074686520736574206f662064656c65676174696f6e732e24556e646572666c6f77001608050154686520636f6c6c61746f722064656c6567617465206f72207468652064656c656761746f7220697320747279696e6720746f20756e2d7374616b65206d6f72658066756e64732074686174206172652063757272656e746c79207374616b65642e4443616e6e6f7453657441626f76654d6178001708d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738061626f766520746865206d6178696d756d2076616c756520616c6c6f7765642e4443616e6e6f7453657442656c6f774d696e001808d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738062656c6f7720746865206d696e696d756d2076616c756520616c6c6f7765642e3c496e76616c69645363686564756c65001904dc416e20696e76616c696420696e666c6174696f6e20636f6e66696775726174696f6e20697320747279696e6720746f206265207365742e3c4e6f4d6f7265556e7374616b696e67001a08c4546865207374616b696e6720726577617264206265696e6720756e6c6f636b656420646f6573206e6f742065786973742e7c4d617820756e6c6f636b696e6720726571756573747320726561636865642e20546f6f4561726c79001b0801015468652072657761726420726174652063616e6e6f742062652061646a75737465642079657420617320616e20656e74697265207965617220686173206e6f741c7061737365642e345374616b654e6f74466f756e64001c04d850726f7669646564207374616b65642076616c7565206973207a65726f2e2053686f756c64206e65766572206265207468726f776e2e40556e7374616b696e674973456d707479001d049443616e6e6f7420756e6c6f636b207768656e20556e7374616b656420697320656d7074792e3c526577617264734e6f74466f756e64001e047843616e6e6f7420636c61696d207265776172647320696620656d7074792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a9030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ad03045300000400750501185665633c543e0000ad030000040c1cb1030000b10310346672616d655f737570706f72741874726169747324707265696d616765731c426f756e64656404045401b503010c184c6567616379040110686173682c01104861736800000018496e6c696e65040091010134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173682c01104861736800010c6c656e1c010c75333200020000b50308447370697269746e65745f72756e74696d652c52756e74696d6543616c6c0001781853797374656d04009d0201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400dd0201b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c496e64696365730400e50201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e0005002042616c616e6365730400110301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0006001c53657373696f6e0400510301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0016004050617261636861696e5374616b696e670400a10301d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e5374616b696e672c2052756e74696d653e0015002444656d6f63726163790400b90301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e001e001c436f756e63696c0400c90301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e001f0048546563686e6963616c436f6d6d69747465650400d90301dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465652c2052756e74696d653e0020004c546563686e6963616c4d656d626572736869700400dd0301e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c4d656d626572736869702c2052756e74696d653e0022002054726561737572790400e10301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e0023001c5574696c6974790400e50301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e0028001c56657374696e6704000d0401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e002900245363686564756c65720400150401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e002a001450726f787904001d0401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002b0020507265696d6167650400250401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e002c0038546970734d656d626572736869700400290401cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970734d656d626572736869702c2052756e74696d653e002d00105469707304002d0401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970732c2052756e74696d653e002e00204d756c74697369670400310401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e002f001443747970650400390401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43747970652c2052756e74696d653e003d002c4174746573746174696f6e04003d0401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4174746573746174696f6e2c2052756e74696d653e003e002844656c65676174696f6e0400510401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656c65676174696f6e2c2052756e74696d653e003f000c44696404006d0401a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469642c2052756e74696d653e004000244469644c6f6f6b75700400c10401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469644c6f6f6b75702c2052756e74696d653e00430024576562334e616d65730400d10401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c576562334e616d65732c2052756e74696d653e004400445075626c696343726564656e7469616c730400d50401d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5075626c696343726564656e7469616c732c2052756e74696d653e0045003c50617261636861696e53797374656d0400e50401d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0050002458636d7051756575650400190501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e0052002c506f6c6b61646f7458636d04001d0501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e00530020446d7051756575650400710501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446d7051756575652c2052756e74696d653e00550000b9030c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c04045400014c1c70726f706f736508012070726f706f73616cb1030140426f756e64656443616c6c4f663c543e00011476616c7565cd01013042616c616e63654f663c543e0000249c50726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e001501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737480686176652066756e647320746f20636f76657220746865206465706f7369742e00d42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e15012d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e0044456d697473206050726f706f736564602e187365636f6e6404012070726f706f73616cc101012450726f70496e646578000118b45369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e64657211016d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e00c82d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e10766f74650801247265665f696e646578c101013c5265666572656e64756d496e646578000110766f74659801644163636f756e74566f74653c42616c616e63654f663c543e3e00021c3101566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3bb86f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00dc2d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e842d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e40656d657267656e63795f63616e63656c0401247265665f696e6465781c013c5265666572656e64756d496e6465780003204d015363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d652c7265666572656e64756d2e00f8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e00d02d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e003c5765696768743a20604f283129602e4065787465726e616c5f70726f706f736504012070726f706f73616cb1030140426f756e64656443616c6c4f663c543e0004182d015363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c2c7265666572656e64756d2e00e8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616cb1030140426f756e64656443616c6c4f663c543e00052c55015363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c655c616e2065787465726e616c207265666572656e64756d2e00ec546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f283129606065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616cb1030140426f756e64656443616c6c4f663c543e00062c45015363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f807363686564756c6520616e2065787465726e616c207265666572656e64756d2e00e8546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f2831296028666173745f747261636b0c013470726f706f73616c5f686173682c011048323536000134766f74696e675f706572696f64100138543a3a426c6f636b4e756d62657200011464656c6179100138543a3a426c6f636b4e756d6265720007404d015363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c65646101696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e65e8627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e00d0546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e00f42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e5d012d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f88094d75737420626520616c776179732067726561746572207468616e207a65726f2e350109466f72206046617374547261636b4f726967696e60206d75737420626520657175616c206f722067726561746572207468616e206046617374547261636b566f74696e67506572696f64602e51012d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265b82020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e0040456d697473206053746172746564602e00385765696768743a20604f28312960347665746f5f65787465726e616c04013470726f706f73616c5f686173682c011048323536000824b85665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e00d8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e002d012d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e003c456d69747320605665746f6564602e00fc5765696768743a20604f2856202b206c6f6728562929602077686572652056206973206e756d626572206f6620606578697374696e67207665746f657273604463616e63656c5f7265666572656e64756d0401247265665f696e646578c101013c5265666572656e64756d496e64657800091c5052656d6f76652061207265666572656e64756d2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e00d42d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e004423205765696768743a20604f283129602e2064656c65676174650c0108746fe90201504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6ebd030128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a50390144656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e742e0055015468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f7220746865c874696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a7420202d2062652064656c65676174696e6720616c72656164793b206f72590120202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f7665642f636f6e736f6c69646174656494202020207468726f7567682060726561705f766f746560206f722060756e766f746560292e0045012d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e55012d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e20746865410120206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e61012d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d757374206e6f74b420206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e0048456d697473206044656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e28756e64656c6567617465000b30cc556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e742e005d01546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f64dc6f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e20776173206973737565642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062655463757272656e746c792064656c65676174696e672e0050456d6974732060556e64656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e58636c6561725f7075626c69635f70726f706f73616c73000c1470436c6561727320616c6c207075626c69632070726f706f73616c732e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e003c5765696768743a20604f283129602e18756e6c6f636b040118746172676574e90201504163636f756e7449644c6f6f6b75704f663c543e000d1ca0556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00b82d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e00bc5765696768743a20604f2852296020776974682052206e756d626572206f6620766f7465206f66207461726765742e2c72656d6f76655f766f7465040114696e6465781c013c5265666572656e64756d496e646578000e6c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e000c49663a882d20746865207265666572656e64756d207761732063616e63656c6c65642c206f727c2d20746865207265666572656e64756d206973206f6e676f696e672c206f72902d20746865207265666572656e64756d2068617320656e64656420737563682074686174fc20202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f72d420202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f728420202d20746865206163636f756e74206d61646520612073706c697420766f74655d012e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72655866756e6473206265696e6720617661696c61626c652e00a849662c20686f77657665722c20746865207265666572656e64756d2068617320656e64656420616e643aec2d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64dc2d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64bc2d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f76657259012e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c766559012a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756de46f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e004901546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465887265676973746572656420666f72207265666572656e64756d2060696e646578602e00f42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e4472656d6f76655f6f746865725f766f7465080118746172676574e90201504163636f756e7449644c6f6f6b75704f663c543e000114696e6465781c013c5265666572656e64756d496e646578000f3c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e004d0149662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f2d016072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c5501656974686572206265636175736520746865207265666572656e64756d207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f737420746865207265666572656e64756d206f7298626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e004d012d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f725420207265666572656e64756d2060696e646578602ef42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e24626c61636b6c69737408013470726f706f73616c5f686173682c01104832353600013c6d617962655f7265665f696e646578c103015c4f7074696f6e3c5265666572656e64756d496e6465783e00103c45015065726d616e656e746c7920706c61636520612070726f706f73616c20696e746f2074686520626c61636b6c6973742e20546869732070726576656e74732069742066726f6d2065766572206265696e673c70726f706f73656420616761696e2e00510149662063616c6c6564206f6e206120717565756564207075626c6963206f722065787465726e616c2070726f706f73616c2c207468656e20746869732077696c6c20726573756c7420696e206974206265696e67510172656d6f7665642e2049662074686520607265665f696e6465786020737570706c69656420697320616e20616374697665207265666572656e64756d2077697468207468652070726f706f73616c20686173682c687468656e2069742077696c6c2062652063616e63656c6c65642e00ec546865206469737061746368206f726967696e206f6620746869732063616c6c206d7573742062652060426c61636b6c6973744f726967696e602e00f82d206070726f706f73616c5f68617368603a205468652070726f706f73616c206861736820746f20626c61636b6c697374207065726d616e656e746c792e45012d20607265665f696e646578603a20416e206f6e676f696e67207265666572656e64756d2077686f73652068617368206973206070726f706f73616c5f68617368602c2077686963682077696c6c2062652863616e63656c6c65642e0041015765696768743a20604f28702960202874686f756768206173207468697320697320616e20686967682d70726976696c6567652064697370617463682c20776520617373756d65206974206861732061502020726561736f6e61626c652076616c7565292e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578c101012450726f70496e64657800111c4852656d6f766520612070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c50726f706f73616c4f726967696e602e00d02d206070726f705f696e646578603a2054686520696e646578206f66207468652070726f706f73616c20746f2063616e63656c2e00e45765696768743a20604f28702960207768657265206070203d205075626c696350726f70733a3a3c543e3a3a6465636f64655f6c656e282960307365745f6d657461646174610801146f776e6572a001344d657461646174614f776e65720001286d617962655f68617368c50301504f7074696f6e3c507265696d616765486173683e00123cd8536574206f7220636c6561722061206d65746164617461206f6620612070726f706f73616c206f722061207265666572656e64756d2e002c506172616d65746572733acc2d20606f726967696e603a204d75737420636f72726573706f6e6420746f2074686520604d657461646174614f776e6572602e3d01202020202d206045787465726e616c4f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053757065724d616a6f72697479417070726f766560402020202020207468726573686f6c642e5901202020202d206045787465726e616c44656661756c744f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053757065724d616a6f72697479416761696e737460402020202020207468726573686f6c642e4501202020202d206045787465726e616c4d616a6f726974794f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053696d706c654d616a6f7269747960402020202020207468726573686f6c642ec8202020202d20605369676e65646020627920612063726561746f7220666f722061207075626c69632070726f706f73616c2ef4202020202d20605369676e65646020746f20636c6561722061206d6574616461746120666f7220612066696e6973686564207265666572656e64756d2ee4202020202d2060526f6f746020746f207365742061206d6574616461746120666f7220616e206f6e676f696e67207265666572656e64756d2eb42d20606f776e6572603a20616e206964656e746966696572206f662061206d65746164617461206f776e65722e51012d20606d617962655f68617368603a205468652068617368206f6620616e206f6e2d636861696e2073746f72656420707265696d6167652e20604e6f6e656020746f20636c6561722061206d657461646174612e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ebd030c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000c10304184f7074696f6e040454011c0108104e6f6e6500000010536f6d6504001c0000010000c50304184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c0000010000c9030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c08045400044900011c2c7365745f6d656d626572730c012c6e65775f6d656d62657273350301445665633c543a3a4163636f756e7449643e0001147072696d65cd0301504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e741c012c4d656d626572436f756e74000060805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e00d4546865206469737061746368206f6620746869732063616c6c206d75737420626520605365744d656d626572734f726967696e602e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e0038232320436f6d706c65786974793a502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564291c6578656375746508012070726f706f73616cb503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c101010c753332000124f0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e0038232320436f6d706c65786974793a5c2d20604f2842202b204d202b205029602077686572653ad82d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429882d20604d60206d656d626572732d636f756e742028636f64652d626f756e64656429a82d2060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c601c70726f706f73650c01247468726573686f6c64c101012c4d656d626572436f756e7400012070726f706f73616cb503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c101010c753332000238f84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e0034232320436f6d706c6578697479ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d2032602910766f74650c012070726f706f73616c2c011c543a3a48617368000114696e646578c101013450726f706f73616c496e64657800011c617070726f7665a80110626f6f6c000324f041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e34232320436f6d706c657869747909012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e6465642940636c6f73655f6f6c645f77656967687410013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578c101013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e64d10301244f6c645765696768740001306c656e6774685f626f756e64c101010c7533320004604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e646564294c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f686173682c011c543a3a486173680005285901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e0034232320436f6d706c6578697479ac4f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c7314636c6f736510013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578c101013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64c101010c7533320006604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ecd0304184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000d103000006d50300d503082873705f77656967687473244f6c645765696768740000040010010c7536340000d9030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c08045400044900011c2c7365745f6d656d626572730c012c6e65775f6d656d62657273350301445665633c543a3a4163636f756e7449643e0001147072696d65cd0301504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e741c012c4d656d626572436f756e74000060805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e00d4546865206469737061746368206f6620746869732063616c6c206d75737420626520605365744d656d626572734f726967696e602e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e0038232320436f6d706c65786974793a502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564291c6578656375746508012070726f706f73616cb503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c101010c753332000124f0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e0038232320436f6d706c65786974793a5c2d20604f2842202b204d202b205029602077686572653ad82d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429882d20604d60206d656d626572732d636f756e742028636f64652d626f756e64656429a82d2060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c601c70726f706f73650c01247468726573686f6c64c101012c4d656d626572436f756e7400012070726f706f73616cb503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c101010c753332000238f84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e0034232320436f6d706c6578697479ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d2032602910766f74650c012070726f706f73616c2c011c543a3a48617368000114696e646578c101013450726f706f73616c496e64657800011c617070726f7665a80110626f6f6c000324f041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e34232320436f6d706c657869747909012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e6465642940636c6f73655f6f6c645f77656967687410013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578c101013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e64d10301244f6c645765696768740001306c656e6774685f626f756e64c101010c7533320004604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e646564294c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f686173682c011c543a3a486173680005285901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e0034232320436f6d706c6578697479ac4f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c7314636c6f736510013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578c101013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64c101010c7533320006604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632edd030c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665e90201504163636f756e7449644c6f6f6b75704f663c543e00010c616464e90201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d62657273350301445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577e90201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee1030c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001143470726f706f73655f7370656e6408011476616c7565cd01013c42616c616e63654f663c542c20493e00012c62656e6566696369617279e90201504163636f756e7449644c6f6f6b75704f663c543e000018290150757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c75653101697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e6365207468655070726f706f73616c20697320617761726465642e0034232320436f6d706c6578697479182d204f2831293c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964c101013450726f706f73616c496e646578000118f852656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e0034232320436f6d706c6578697479182d204f28312940617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964c101013450726f706f73616c496e64657800021c5901417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e6566696369617279a8616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e00ac4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a417070726f76654f726967696e602e0034232320436f6d706c657869747920202d204f2831292e147370656e64080118616d6f756e74cd01013c42616c616e63654f663c542c20493e00012c62656e6566696369617279e90201504163636f756e7449644c6f6f6b75704f663c543e000320b850726f706f736520616e6420617070726f76652061207370656e64206f662074726561737572792066756e64732e004d012d20606f726967696e603a204d75737420626520605370656e644f726967696e60207769746820746865206053756363657373602076616c7565206265696e67206174206c656173742060616d6f756e74602e41012d2060616d6f756e74603a2054686520616d6f756e7420746f206265207472616e736665727265642066726f6d2074686520747265617375727920746f20746865206062656e6566696369617279602ee82d206062656e6566696369617279603a205468652064657374696e6174696f6e206163636f756e7420666f7220746865207472616e736665722e0045014e4f54453a20466f72207265636f72642d6b656570696e6720707572706f7365732c207468652070726f706f736572206973206465656d656420746f206265206571756976616c656e7420746f207468653062656e65666963696172792e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964c101013450726f706f73616c496e6465780004342d01466f72636520612070726576696f75736c7920617070726f7665642070726f706f73616c20746f2062652072656d6f7665642066726f6d2074686520617070726f76616c2071756575652ec0546865206f726967696e616c206465706f7369742077696c6c206e6f206c6f6e6765722062652072657475726e65642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602ea02d206070726f706f73616c5f6964603a2054686520696e646578206f6620612070726f706f73616c0034232320436f6d706c6578697479ac2d204f2841292077686572652060416020697320746865206e756d626572206f6620617070726f76616c73001c4572726f72733a61012d206050726f706f73616c4e6f74417070726f766564603a20546865206070726f706f73616c5f69646020737570706c69656420776173206e6f7420666f756e6420696e2074686520617070726f76616c2071756575652c5101692e652e2c207468652070726f706f73616c20686173206e6f74206265656e20617070726f7665642e205468697320636f756c6420616c736f206d65616e207468652070726f706f73616c20646f6573206e6f745901657869737420616c746f6765746865722c2074687573207468657265206973206e6f2077617920697420776f756c642068617665206265656e20617070726f76656420696e2074686520666972737420706c6163652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee5030c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c73e903017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e646578dc010c75313600011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c73e903017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696eed030154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c73e903017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874240118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee903000002b50300ed0308447370697269746e65745f72756e74696d65304f726967696e43616c6c657200011c1873797374656d0400f10301746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c0400f50301010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400f90301010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020000c4469640400fd0301506469643a3a4f726967696e3c52756e74696d653e0040002c506f6c6b61646f7458636d04000104014870616c6c65745f78636d3a3a4f726967696e0053002843756d756c757358636d04000504016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e00540010566f69640400090401110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f696400060000f1030c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e6500020000f503084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d6265727308001c012c4d656d626572436f756e7400001c012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d00020000f903084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d6265727308001c012c4d656d626572436f756e7400001c012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d00020000fd030c0c646964186f726967696e304469645261774f726967696e08344469644964656e7469666965720100244163636f756e74496401000008010869640001344469644964656e7469666965720001247375626d69747465720001244163636f756e744964000001040c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400b50101344d756c74694c6f636174696f6e00000020526573706f6e73650400b50101344d756c74694c6f636174696f6e0001000005040c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e0400a9010118506172614964000100000904081c73705f636f726510566f6964000100000d040c3870616c6c65745f76657374696e671870616c6c65741043616c6c0404540001141076657374000024b8556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e005d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e28766573745f6f74686572040118746172676574e90201504163636f756e7449644c6f6f6b75704f663c543e00012cb8556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051012d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e3c7665737465645f7472616e73666572080118746172676574e90201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65110401a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00023464437265617465206120766573746564207472616e736665722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d2060746172676574603a20546865206163636f756e7420726563656976696e6720746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e54666f7263655f7665737465645f7472616e736665720c0118736f75726365e90201504163636f756e7449644c6f6f6b75704f663c543e000118746172676574e90201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65110401a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00033860466f726365206120766573746564207472616e736665722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00e82d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e11012d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e6465781c010c75333200013c7363686564756c65325f696e6465781c010c7533320004545d014d657267652074776f2076657374696e67207363686564756c657320746f6765746865722c206372656174696e672061206e65772076657374696e67207363686564756c65207468617420756e6c6f636b73206f7665725501746865206869676865737420706f737369626c6520737461727420616e6420656e6420626c6f636b732e20496620626f7468207363686564756c6573206861766520616c7265616479207374617274656420746865590163757272656e7420626c6f636b2077696c6c206265207573656420617320746865207363686564756c652073746172743b207769746820746865206361766561742074686174206966206f6e65207363686564756c655d0169732066696e6973686564206279207468652063757272656e7420626c6f636b2c20746865206f746865722077696c6c206265207472656174656420617320746865206e6577206d6572676564207363686564756c652c2c756e6d6f6469666965642e00f84e4f54453a20496620607363686564756c65315f696e646578203d3d207363686564756c65325f696e6465786020746869732069732061206e6f2d6f702e41014e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b207072696f7220746f206d657267696e672e61014e4f54453a20496620626f7468207363686564756c6573206861766520656e646564206279207468652063757272656e7420626c6f636b2c206e6f206e6577207363686564756c652077696c6c206265206372656174656464616e6420626f74682077696c6c2062652072656d6f7665642e006c4d6572676564207363686564756c6520617474726962757465733a35012d20607374617274696e675f626c6f636b603a20604d4158287363686564756c65312e7374617274696e675f626c6f636b2c207363686564756c6564322e7374617274696e675f626c6f636b2c48202063757272656e745f626c6f636b29602e21012d2060656e64696e675f626c6f636b603a20604d4158287363686564756c65312e656e64696e675f626c6f636b2c207363686564756c65322e656e64696e675f626c6f636b29602e59012d20606c6f636b6564603a20607363686564756c65312e6c6f636b65645f61742863757272656e745f626c6f636b29202b207363686564756c65322e6c6f636b65645f61742863757272656e745f626c6f636b29602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00e82d20607363686564756c65315f696e646578603a20696e646578206f6620746865206669727374207363686564756c6520746f206d657267652eec2d20607363686564756c65325f696e646578603a20696e646578206f6620746865207365636f6e64207363686564756c6520746f206d657267652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e11040c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d626572000015040c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963190401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963190401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963190401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000404a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963190401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000504905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e190404184f7074696f6e04045401cc0108104e6f6e6500000010536f6d650400cc00000100001d040c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616ce90201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065210401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465e90201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d6265720001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465e90201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d626572000114696e646578dc010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572e90201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d80130543a3a50726f787954797065000114696e646578dc010c753136000118686569676874280138543a3a426c6f636b4e756d6265720001246578745f696e646578c101010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616ce90201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616ce90201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465e90201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465e90201504163636f756e7449644c6f6f6b75704f663c543e0001107265616ce90201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065210401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e210404184f7074696f6e04045401d80108104e6f6e6500000010536f6d650400d8000001000025040c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657330011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d616765040110686173682c011c543a3a48617368000118dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e00fc496620606c656e602069732070726f76696465642c207468656e2069742077696c6c2062652061206d7563682063686561706572206f7065726174696f6e2e0001012d206068617368603a205468652068617368206f662074686520707265696d61676520746f2062652072656d6f7665642066726f6d207468652073746f72652eb82d20606c656e603a20546865206c656e677468206f662074686520707265696d616765206f66206068617368602e40726571756573745f707265696d616765040110686173682c011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d616765040110686173682c011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e29040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665e90201504163636f756e7449644c6f6f6b75704f663c543e00010c616464e90201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d62657273350301445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577e90201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2d040c2c70616c6c65745f746970731870616c6c65741043616c6c080454000449000118387265706f72745f617765736f6d65080118726561736f6e30011c5665633c75383e00010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e00004059015265706f727420736f6d657468696e672060726561736f6e60207468617420646573657276657320612074697020616e6420636c61696d20616e79206576656e7475616c207468652066696e6465722773206665652e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051015061796d656e743a20605469705265706f72744465706f73697442617365602077696c6c2062652072657365727665642066726f6d20746865206f726967696e206163636f756e742c2061732077656c6c206173bc60446174614465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e0074456d69747320604e657754697060206966207375636365737366756c2e0034232320436f6d706c6578697479982d20604f2852296020776865726520605260206c656e677468206f662060726561736f6e602e9020202d20656e636f64696e6720616e642068617368696e67206f662027726561736f6e272c726574726163745f746970040110686173682c011c543a3a486173680001405101526574726163742061207072696f72207469702d7265706f72742066726f6d20607265706f72745f617765736f6d65602c20616e642063616e63656c207468652070726f63657373206f662074697070696e672e00dc4966207375636365737366756c2c20746865206f726967696e616c206465706f7369742077696c6c20626520756e72657365727665642e004d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642074686520746970206964656e7469666965642062792060686173686041016d7573742068617665206265656e207265706f7274656420627920746865207369676e696e67206163636f756e74207468726f75676820607265706f72745f617765736f6d65602028616e64206e6f744c7468726f75676820607469705f6e657760292e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e008c456d697473206054697052657472616374656460206966207375636365737366756c2e0034232320436f6d706c6578697479202d20604f28312960d820202d20446570656e6473206f6e20746865206c656e677468206f662060543a3a48617368602077686963682069732066697865642e1c7469705f6e65770c0118726561736f6e30011c5665633c75383e00010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e0001247469705f76616c7565cd01013c42616c616e63654f663c542c20493e00024cf04769766520612074697020666f7220736f6d657468696e67206e65773b206e6f2066696e6465722773206665652077696c6c2062652074616b656e2e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e0074456d69747320604e657754697060206966207375636365737366756c2e0034232320436f6d706c657869747921012d20604f2852202b2054296020776865726520605260206c656e677468206f662060726561736f6e602c2060546020697320746865206e756d626572206f6620746970706572732e5d0120202d20604f285429603a206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792d012020202060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f66442020202060543a3a54697070657273602ee020202d20604f285229603a2068617368696e6720616e6420656e636f64696e67206f6620726561736f6e206f66206c656e677468206052600c746970080110686173682c011c543a3a486173680001247469705f76616c7565cd01013c42616c616e63654f663c542c20493e000354b04465636c6172652061207469702076616c756520666f7220616e20616c72656164792d6f70656e207469702e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f66207468652068617368206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e65666963696172793420206163636f756e742049442e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e006101456d6974732060546970436c6f73696e676020696620746865207468726573686f6c64206f66207469707065727320686173206265656e207265616368656420616e642074686520636f756e74646f776e20706572696f643068617320737461727465642e0034232320436f6d706c657869747961012d20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e677468206054602c20696e736572745901202074697020616e6420636865636b20636c6f73696e672c20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e010120205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e005d01202041637475616c6c792077656967687420636f756c64206265206c6f77657220617320697420646570656e6473206f6e20686f77206d616e7920746970732061726520696e20604f70656e5469706020627574206974d02020697320776569676874656420617320696620616c6d6f73742066756c6c20692e65206f66206c656e6774682060542d31602e24636c6f73655f746970040110686173682c011c543a3a486173680004345c436c6f736520616e64207061796f75742061207469702e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00150154686520746970206964656e74696669656420627920606861736860206d75737420686176652066696e69736865642069747320636f756e74646f776e20706572696f642e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e0034232320436f6d706c65786974795d012d203a20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e20605460590120206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e94202074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e24736c6173685f746970040110686173682c011c543a3a486173680005289452656d6f766520616e6420736c61736820616e20616c72656164792d6f70656e207469702e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e00f44173206120726573756c742c207468652066696e64657220697320736c617368656420616e6420746865206465706f7369747320617265206c6f73742e0084456d6974732060546970536c617368656460206966207375636365737366756c2e0034232320436f6d706c65786974791c2d204f2831292e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e31040c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573350301445665633c543a3a4163636f756e7449643e00011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000305101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e0034232320436f6d706c657869747919014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e2061735f6d756c74691401247468726573686f6c64dc010c7531360001446f746865725f7369676e61746f72696573350301445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74350401844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687424011857656967687400019c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e0034232320436f6d706c6578697479502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e40617070726f76655f61735f6d756c74691401247468726573686f6c64dc010c7531360001446f746865725f7369676e61746f72696573350301445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74350401844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f7765696768742401185765696768740002785501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e3c63616e63656c5f61735f6d756c74691001247468726573686f6c64dc010c7531360001446f746865725f7369676e61746f72696573350301445665633c543a3a4163636f756e7449643e00012474696d65706f696e74f0016454696d65706f696e743c543a3a426c6f636b4e756d6265723e00012463616c6c5f686173680401205b75383b2033325d000354550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e350404184f7074696f6e04045401f00108104e6f6e6500000010536f6d650400f0000001000039040c1463747970651870616c6c65741043616c6c0404540001080c616464040114637479706530011c5665633c75383e00003009014372656174652061206e65772043547970652066726f6d2074686520676976656e20756e69717565204354797065206861736820616e64206173736f6369617465735069742077697468206974732063726561746f722e00dc412043547970652077697468207468652073616d652068617368206d757374206e6f742062652073746f726564206f6e20636861696e2e0054456d6974732060435479706543726561746564602e002823203c7765696768743e305765696768743a204f283129602d2052656164733a204374797065732c2042616c616e6365642d205772697465733a204374797065732c2042616c616e63652c23203c2f7765696768743e407365745f626c6f636b5f6e756d62657208012863747970655f686173682c01384374797065486173684f663c543e000130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e00010ce853657420746865206372656174696f6e20626c6f636b206e756d62657220666f72206120676976656e2043547970652c20696620666f756e642e0054456d6974732060435479706555706461746564602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e3d040c2c6174746573746174696f6e1870616c6c65741043616c6c0404540001180c6164640c0128636c61696d5f686173682c0138436c61696d486173684f663c543e00012863747970655f686173682c01384374797065486173684f663c543e000134617574686f72697a6174696f6e410401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000054644372656174652061206e6577206174746573746174696f6e2e00f85468652061747465737465722063616e206f7074696f6e616c6c792070726f766964652061207265666572656e636520746f20616e206578697374696e67090164656c65676174696f6e20746861742077696c6c20626520736176656420616c6f6e67207769746820746865206174746573746174696f6e20697473656c6620696e8c74686520666f726d206f6620616e2061747465737465642064656c65676174696f6e2e00ec546865207265666572656e6365642043547970652068617368206d75737420616c72656164792062652070726573656e74206f6e20636861696e2e000901496620616e206f7074696f6e616c2064656c65676174696f6e2069642069732070726f76696465642c20746865206469737061746368206f726967696e206d757374e8626520746865206f776e6572206f66207468652064656c65676174696f6e2e204f74686572776973652c20697420636f756c6420626520616e79546044656c65676174696f6e456e746974794964602e006c456d69747320604174746573746174696f6e43726561746564602e002823203c7765696768743e305765696768743a204f283129b82d2052656164733a205b4f726967696e204163636f756e745d2c2043747970652c204174746573746174696f6e73e42d2052656164732069662064656c65676174696f6e2069642069732070726f76696465643a2044656c65676174696f6e732c20526f6f74732c5c202044656c6567617465644174746573746174696f6e73bc2d205772697465733a204174746573746174696f6e732c202844656c6567617465644174746573746174696f6e73292c23203c2f7765696768743e187265766f6b65080128636c61696d5f686173682c0138436c61696d486173684f663c543e000134617574686f72697a6174696f6e410401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0001447c5265766f6b6520616e206578697374696e67206174746573746174696f6e2e00fc546865207265766f6b6572206d75737420626520656974686572207468652063726561746f72206f6620746865206174746573746174696f6e206265696e6709017265766f6b6564206f7220616e20656e74697479207468617420696e207468652064656c65676174696f6e207472656520697320616e20616e636573746f72206f6609017468652061747465737465722c20692e652e2c2069742077617320656974686572207468652064656c656761746f72206f6620746865206174746573746572206f7250616e20616e636573746f722074686572656f662e006c456d69747320604174746573746174696f6e5265766f6b6564602e002823203c7765696768743e0d015765696768743a204f285029207768657265205020697320746865206e756d626572206f6620737465707320726571756972656420746f2076657269667920746861740901746865206469737061746368204f726967696e20636f6e74726f6c73207468652064656c65676174696f6e20656e7469746c656420746f207265766f6b6520746865c86174746573746174696f6e2e20497420697320626f756e64656420627920606d61785f706172656e745f636865636b73602ee82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2064656c65676174696f6e3a3a526f6f7473d82d205265616473207065722064656c65676174696f6e207374657020503a2064656c65676174696f6e3a3a44656c65676174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e1872656d6f7665080128636c61696d5f686173682c0138436c61696d486173684f663c543e000134617574686f72697a6174696f6e410401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0002445852656d6f766520616e206174746573746174696f6e2e00f8546865206f726967696e206d75737420626520656974686572207468652063726561746f72206f6620746865206174746573746174696f6e206f7220616e0d01656e7469747920776869636820697320616e20616e636573746f72206f662074686520617474657374657220696e207468652064656c65676174696f6e20747265652c0101692e652e2c2069742077617320656974686572207468652064656c656761746f72206f6620746865206174746573746572206f7220616e20616e636573746f722074686572656f662e006c456d69747320604174746573746174696f6e52656d6f766564602e002823203c7765696768743e0d015765696768743a204f285029207768657265205020697320746865206e756d626572206f6620737465707320726571756972656420746f2076657269667920746861740901746865206469737061746368204f726967696e20636f6e74726f6c73207468652064656c65676174696f6e20656e7469746c656420746f207265766f6b6520746865c86174746573746174696f6e2e20497420697320626f756e64656420627920606d61785f706172656e745f636865636b73602ee82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2064656c65676174696f6e3a3a526f6f7473d82d205265616473207065722064656c65676174696f6e207374657020503a2064656c65676174696f6e3a3a44656c65676174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e3c7265636c61696d5f6465706f736974040128636c61696d5f686173682c0138436c61696d486173684f663c543e000324d05265636c61696d20612073746f72616765206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e0064456d69747320604465706f7369745265636c61696d6564602e002823203c7765696768743e305765696768743a204f283129f82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e6572040128636c61696d5f686173682c0138436c61696d486173684f663c543e00041c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00ec546865207375626a656374206f66207468652063616c6c206d757374206265207468652061747465737465722077686f206973737565732074686509016174746573746174696f6e2e205468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f736974040128636c61696d5f686173682c0138436c61696d486173684f663c543e00050cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e410404184f7074696f6e0404540145040108104e6f6e6500000010536f6d6504004504000001000045040c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c50616c6c6574417574686f72697a65043044656c65676174696f6e416301490401042844656c65676174696f6e04004904013044656c65676174696f6e41630000000049040c2864656c65676174696f6e386163636573735f636f6e74726f6c3044656c65676174696f6e4163040454014d040008013c7375626a6563745f6e6f64655f69642c015444656c65676174696f6e4e6f646549644f663c543e0001286d61785f636865636b731c010c75333200004d0408447370697269746e65745f72756e74696d651c52756e74696d650000000051040c2864656c65676174696f6e1870616c6c65741043616c6c04045400011c406372656174655f686965726172636879080130726f6f745f6e6f64655f69642c015444656c65676174696f6e4e6f646549644f663c543e00012863747970655f686173682c01384374797065486173684f663c543e00006401014372656174652061206e65772064656c65676174696f6e20726f6f74206173736f6369617465642077697468206120676976656e20435479706520686173682e00f8546865206e657720726f6f742077696c6c20616c6c6f772061206e65772074727573742068696572617263687920746f2062652063726561746564206279a0616464696e67206368696c6472656e2064656c65676174696f6e7320746f2074686520726f6f742e000d015468657265206d757374206265206e6f2064656c65676174696f6e2077697468207468652073616d652049442073746f726564206f6e20636861696e2c207768696c65fc7468657265206d75737420626520616c7265616479206120435479706520776974682074686520676976656e20686173682073746f72656420696e207468653443547970652070616c6c65742e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e000d015265717569726573207468652073656e646572206f6620746865207472616e73616374696f6e20746f206861766520612072657365727661626c652062616c616e6365886f66206174206c6561737420604465706f73697460206d616e7920746f6b656e732e0050456d6974732060526f6f7443726561746564602e002823203c7765696768743e305765696768743a204f283129a02d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c204354797065733c2d205772697465733a20526f6f74732c23203c2f7765696768743e386164645f64656c65676174696f6e14013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e000124706172656e745f69642c015444656c65676174696f6e4e6f646549644f663c543e00012064656c656761746500014044656c656761746f7249644f663c543e00012c7065726d697373696f6e730901012c5065726d697373696f6e7300014864656c65676174655f7369676e61747572655504016844656c65676174655369676e6174757265547970654f663c543e000180744372656174652061206e65772064656c65676174696f6e206e6f64652e00f4546865206e65772064656c65676174696f6e206e6f646520726570726573656e74732061206e65772074727573742068696572617263687920746861740d01636f6e73696465727320746865206e6577206e6f64652061732069747320726f6f742e20546865206f776e6572206f662074686973206e6f6465206861732066756c6ce0636f6e74726f6c206f76657220616e79206f66206974732064697265637420616e6420696e6469726563742064657363656e64616e74732e00fc466f7220746865206372656174696f6e20746f20737563636565642c207468652064656c656761746565206d7573742070726f7669646520612076616c696411017369676e6174757265206f766572207468652028626c616b65323536292068617368206f6620746865206372656174696f6e206f7065726174696f6e2064657461696c731101776869636820696e636c7564652028696e206f72646572292064656c65676174696f6e2069642c20726f6f74206e6f64652069642c20706172656e742069642c20616e64707065726d697373696f6e73206f6620746865206e6577206e6f64652e00f45468657265206d757374206265206e6f2064656c65676174696f6e2077697468207468652073616d652069642073746f726564206f6e20636861696e2e0501467572746865726d6f72652c20746865207265666572656e63656420726f6f7420616e6420706172656e74206e6f646573206d75737420616c7265616479206265050170726573656e74206f6e20636861696e20616e6420636f6e7461696e207468652076616c6964207065726d697373696f6e7320616e64207265766f636174696f6e6c7374617475732028692e652e2c206e6f74207265766f6b6564292e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e000d015265717569726573207468652073656e646572206f6620746865207472616e73616374696f6e20746f206861766520612072657365727661626c652062616c616e6365886f66206174206c6561737420604465706f73697460206d616e7920746f6b656e732e0068456d697473206044656c65676174696f6e43726561746564602e002823203c7765696768743e305765696768743a204f283129b42d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2044656c65676174696f6e73542d205772697465733a2044656c65676174696f6e732c23203c2f7765696768743e447265766f6b655f64656c65676174696f6e0c013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001446d61785f706172656e745f636865636b731c010c75333200013c6d61785f7265766f636174696f6e731c010c753332000274f85265766f6b6520612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74206e6f64652920616e6420616c6c20697473246368696c6472656e2e00fc446f6573206e6f7420726566756e64207468652064656c65676174696f6e206261636b20746f20746865206465706f736974206f776e657220617320746865f06e6f6465206973207374696c6c2073746f726564206f6e20636861696e2e20526571756972657320746f206164646974696f6e616c6c792063616c6cb46072656d6f76655f64656c65676174696f6e6020746f20756e7265736572766520746865206465706f7369742e0009015265766f6b696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67090166726f6d2074686520676976656e206e6f6465206265696e67207265766f6b65642e204e657665727468656c6573732c207265766f636174696f6e20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f6465206973207265766f6b65642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e73696465726564207265766f6b65642e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e0078456d6974732043202a206044656c65676174696f6e5265766f6b6564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f6368696c6472656e602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e802d205772697465733a20526f6f74732c2043202a2044656c65676174696f6e732c23203c2f7765696768743e4472656d6f76655f64656c65676174696f6e08013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c731c010c753332000370f852656d6f766520612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74206e6f64652920616e6420616c6c20697473246368696c6472656e2e00f052657475726e73207468652064656c65676174696f6e206465706f73697420746f20746865206465706f736974206f776e657220666f722065616368a472656d6f7665642044656c65676174696f6e4e6f646520627920756e726573657276696e672069742e00090152656d6f76696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67fc66726f6d2074686520676976656e206e6f6465206265696e672072656d6f7665642e204e657665727468656c6573732c2072656d6f76616c20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f64652069732072656d6f7665642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e736964657265642072656d6f7665642e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e0078456d6974732043202a206044656c65676174696f6e52656d6f766564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f6368696c6472656e602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e902d205772697465733a20526f6f74732c2032202a2043202a2044656c65676174696f6e732c23203c2f7765696768743e3c7265636c61696d5f6465706f73697408013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c731c010c753332000460f45265636c61696d20746865206465706f73697420666f7220612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74b86e6f6465292c2072656d6f76696e6720746865206e6f646520616e6420616c6c20697473206368696c6472656e2e00f052657475726e73207468652064656c65676174696f6e206465706f73697420746f20746865206465706f736974206f776e657220666f722065616368a472656d6f7665642044656c65676174696f6e4e6f646520627920756e726573657276696e672069742e00090152656d6f76696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67fc66726f6d2074686520676976656e206e6f6465206265696e672072656d6f7665642e204e657665727468656c6573732c2072656d6f76616c20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f64652069732072656d6f7665642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e736964657265642072656d6f7665642e000d01546865206469737061746368206f726967696e206d757374206265207369676e6564206279207468652064656c65676174696f6e206465706f736974206f776e65722e004c604465706f7369745265636c61696d6564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f72656d6f76616c73602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e902d205772697465733a20526f6f74732c2032202a2043202a2044656c65676174696f6e732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657204013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e00051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e000501546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f66207468652064656c65676174696f6e206e6f64652ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e55040c0c6469642c6469645f64657461696c73304469645369676e617475726500010c1c45643235353139040059040148656432353531393a3a5369676e61747572650000001c53723235353139040061040148737232353531393a3a5369676e617475726500010014456364736104006504014065636473613a3a5369676e61747572650002000059040c1c73705f636f72651c65643235353139245369676e6174757265000004005d0401205b75383b2036345d00005d0400000340000000080061040c1c73705f636f72651c73723235353139245369676e6174757265000004005d0401205b75383b2036345d000065040c1c73705f636f7265146563647361245369676e617475726500000400690401205b75383b2036355d000069040000034100000008006d040c0c6469641870616c6c65741043616c6c04045400013c1863726561746508011c64657461696c7371040168426f783c4469644372656174696f6e44657461696c733c543e3e0001247369676e6174757265550401304469645369676e617475726500007cec53746f72652061206e657720444944206f6e20636861696e2c20616674657220766572696679696e67207468617420746865206372656174696f6e05016f7065726174696f6e20686173206265656e207369676e656420627920746865204b494c54206163636f756e74206173736f63696174656420776974682074686501016964656e746966696572206f662074686520444944206265696e67206372656174656420616e6420746861742061204449442077697468207468652073616d6511016964656e74696669657220686173206e6f742070726576696f75736c792065786973746564206f6e2028616e64207468656e2064656c657465642066726f6d292074686518636861696e2e000d015468657265206d757374206265206e6f2044494420696e666f726d6174696f6e2073746f726564206f6e20636861696e20756e646572207468652073616d65204449442c6964656e7469666965722e00fc546865206e6577206b65797320616464656420776974682074686973206f7065726174696f6e206172652073746f72656420756e646572207468652044494405016964656e74696669657220616c6f6e6720776974682074686520626c6f636b206e756d62657220696e20776869636820746865206f7065726174696f6e207761732465786563757465642e000101546865206469737061746368206f726967696e2063616e20626520616e79204b494c54206163636f756e74207769746820656e6f7567682066756e647320746f0d0165786563757465207468652065787472696e73696320616e6420697420646f6573206e6f74206861766520746f206265207469656420696e20616e792077617920746fb4746865204b494c54206163636f756e74206964656e74696679696e672074686520444944207375626a6563742e004c456d697473206044696443726561746564602e002823203c7765696768743e0d012d20546865207472616e73616374696f6e277320636f6d706c6578697479206973206d61696e6c7920646570656e64656e74206f6e20746865206e756d626572206f66010120206e6577206b65792061677265656d656e74206b65797320616e6420746865206e756d626572206f66206e6577207365727669636520656e64706f696e7473702020696e636c7564656420696e20746865206f7065726174696f6e2e242d2d2d2d2d2d2d2d2df85765696768743a204f284b29202b204f284e29207768657265204b20697320746865206e756d626572206f66206e6577206b65792061677265656d656e7409016b65797320626f756e64656420627920604d61784e65774b657941677265656d656e744b657973602c207768696c65204e20697320746865206e756d626572206f66f46e6577207365727669636520656e64706f696e747320626f756e64656420627920604d61784e756d6265724f665365727669636573506572446964602eb02d2052656164733a205b4f726967696e204163636f756e745d2c204469642c20446964426c61636b6c697374fc2d205772697465733a20446964202877697468204b206e6577206b65792061677265656d656e74206b657973292c2053657276696365456e64706f696e7473cc20202877697468204e206e6577207365727669636520656e64706f696e7473292c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e587365745f61757468656e7469636174696f6e5f6b657904011c6e65775f6b657989040148446964566572696669636174696f6e4b65790001408855706461746520746865204449442061757468656e7469636174696f6e206b65792e00ec546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696620697420697309016e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f207468654c736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e487365745f64656c65676174696f6e5f6b657904011c6e65775f6b657989040148446964566572696669636174696f6e4b657900024094536574206f722075706461746520746865204449442064656c65676174696f6e206b65792e000d01496620616e206f6c64206b657920657869737465642c2069742069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696611016974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f5c74686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e5472656d6f76655f64656c65676174696f6e5f6b657900033c7852656d6f766520746865204449442064656c65676174696f6e206b65792e00d4546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b657973206966b06974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e4c7365745f6174746573746174696f6e5f6b657904011c6e65775f6b657989040148446964566572696669636174696f6e4b657900044098536574206f72207570646174652074686520444944206174746573746174696f6e206b65792e000d01496620616e206f6c64206b657920657869737465642c2069742069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696611016974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f5c74686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e5872656d6f76655f6174746573746174696f6e5f6b657900053c7c52656d6f76652074686520444944206174746573746174696f6e206b65792e00d4546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b657973206966b06974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e546164645f6b65795f61677265656d656e745f6b657904011c6e65775f6b657979040140446964456e6372797074696f6e4b6579000638b841646420612073696e676c65206e6577206b65792061677265656d656e74206b657920746f20746865204449442e00bc546865206e6577206b657920697320616464656420746f2074686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e6072656d6f76655f6b65795f61677265656d656e745f6b65790401186b65795f69642c01284b657949644f663c543e000734050152656d6f7665206120444944206b65792061677265656d656e74206b65792066726f6d20626f74682069747320736574206f66206b65792061677265656d656e74906b65797320616e642061732077656c6c20617320697473207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e506164645f736572766963655f656e64706f696e74040140736572766963655f656e64706f696e749d040138446964456e64706f696e743c543e000830bc4164642061206e6577207365727669636520656e64706f696e7420756e6465722074686520676976656e204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f2831290d012d2052656164733a205b4f726967696e204163636f756e745d2c204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e74c82d205772697465733a204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e5c72656d6f76655f736572766963655f656e64706f696e74040128736572766963655f6964a104015053657276696365456e64706f696e7449643c543e000930d452656d6f76652074686520736572766963652077697468207468652070726f76696465642049442066726f6d20746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129f82d2052656164733a205b4f726967696e204163636f756e745d2c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e74c82d205772697465733a204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e1864656c65746504014c656e64706f696e74735f746f5f72656d6f76651c010c753332000a600d0144656c6574652061204449442066726f6d2074686520636861696e20616e6420616c6c20696e666f726d6174696f6e206173736f63696174656420776974682069742c1101616674657220766572696679696e672074686174207468652064656c657465206f7065726174696f6e20686173206265656e207369676e65642062792074686520444944fc7375626a656374207573696e67207468652061757468656e7469636174696f6e206b65792063757272656e746c792073746f726564206f6e20636861696e2e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f7265207468657864656c657465206f7065726174696f6e206973206576616c75617465642e00f441667465722069742069732064656c657465642c2061204449442077697468207468652073616d65206964656e7469666965722063616e6e6f742062655872652d63726561746564206576657220616761696e2e00010141732074686520726573756c74206f66207468652064656c6574696f6e2c20616c6c20747261636573206f662074686520444944206172652072656d6f766564e866726f6d207468652073746f726167652c20776869636820726573756c747320696e2074686520696e76616c69646174696f6e206f6620616c6c9c6174746573746174696f6e73206973737565642062792074686520444944207375626a6563742e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696444656c65746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964cc2d204b696c6c733a2044696420656e747279206173736f63696174656420746f2074686520444944206964656e7469666965722c23203c2f7765696768743e3c7265636c61696d5f6465706f73697408012c6469645f7375626a6563740001484469644964656e7469666965724f663c543e00014c656e64706f696e74735f746f5f72656d6f76651c010c753332000b54f45265636c61696d2061206465706f73697420666f722061204449442e20546869732077696c6c2064656c657465207468652044494420616e6420616c6c0901696e666f726d6174696f6e206173736f63696174656420776974682069742c20616674657220766572696679696e672074686174207468652063616c6c657220697364746865206f776e6572206f6620746865206465706f7369742e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f7265207468657864656c657465206f7065726174696f6e206973206576616c75617465642e00f441667465722069742069732064656c657465642c2061204449442077697468207468652073616d65206964656e7469666965722063616e6e6f742062655872652d63726561746564206576657220616761696e2e00010141732074686520726573756c74206f66207468652064656c6574696f6e2c20616c6c20747261636573206f662074686520444944206172652072656d6f766564e866726f6d207468652073746f726167652c20776869636820726573756c747320696e2074686520696e76616c69646174696f6e206f6620616c6c9c6174746573746174696f6e73206973737565642062792074686520444944207375626a6563742e004c456d697473206044696444656c65746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964cc2d204b696c6c733a2044696420656e747279206173736f63696174656420746f2074686520444944206964656e7469666965722c23203c2f7765696768743e3c7375626d69745f6469645f63616c6c0801206469645f63616c6cbd040188426f783c446964417574686f72697a656443616c6c4f7065726174696f6e3c543e3e0001247369676e6174757265550401304469645369676e6174757265000c8cec50726f7879206120646973706174636861626c652063616c6c206f6620616e6f746865722072756e74696d652065787472696e736963207468617458737570706f727473206120444944206f726967696e2e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f726520746865606f7065726174696f6e20697320646973706174636865642e00fc412063616c6c207375626d6974746564207468726f75676820746869732065787472696e736963206d757374206265207369676e65642077697468207468650901726967687420444944206b65792c20646570656e64696e67206f6e207468652063616c6c2e205468697320696e666f726d6174696f6e2069732070726f766964656409016279207468652060446964417574686f72697a656443616c6c4f7065726174696f6e6020706172616d657465722c20776869636820737065636966696573207468650901444944207375626a65637420616374696e6720617320746865206f726967696e206f66207468652063616c6c2c2074686520444944277320747820636f756e7465720101286e6f6e6365292c2074686520646973706174636861626c6520746f2063616c6c20696e2063617365207369676e617475726520766572696669636174696f6ef073756363656564732c207468652074797065206f6620444944206b657920746f2075736520746f2076657269667920746865206f7065726174696f6efc7369676e61747572652c20616e642074686520626c6f636b206e756d62657220746865206f7065726174696f6e2077617320746172676574696e6720666f72a8696e636c7573696f6e2c207768656e20697420776173206372656174656420616e64207369676e65642e00fc496e206361736520746865207369676e617475726520697320696e636f72726563742c20746865206e6f6e6365206973206e6f742076616c69642c20746865fc7265717569726564206b6579206973206e6f742070726573656e7420666f722074686520737065636966696564204449442c206f722074686520626c6f636bfc73706563696669656420697320746f6f206f6c642074686520766572696669636174696f6e206661696c7320616e64207468652063616c6c206973206e6f74f4646973706174636865642e204f74686572776973652c207468652063616c6c2069732070726f7065726c79206469737061746368656420776974682061b8604469644f726967696e60206f726967696e20696e6469636174696e672074686520444944207375626a6563742e00110141207375636365737366756c206469737061746368206f7065726174696f6e20726573756c747320696e2074686520747820636f756e746572206173736f6369617465640501776974682074686520676976656e2044494420746f20626520696e6372656d656e7465642c20746f206d69746967617465207265706c61792061747461636b732e000101546865206469737061746368206f726967696e2063616e20626520616e79204b494c54206163636f756e74207769746820656e6f7567682066756e647320746f0d0165786563757465207468652065787472696e73696320616e6420697420646f6573206e6f74206861766520746f206265207469656420696e20616e792077617920746fb4746865204b494c54206163636f756e74206964656e74696679696e672074686520444944207375626a6563742e0068456d697473206044696443616c6c44697370617463686564602e002823203c7765696768743eb05765696768743a204f283129202b20776569676874206f662074686520646973706174636865642063616c6c782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e6572000d1c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00b8546865207375626a656374206f66207468652063616c6c206d7573742062652074686520646964206f776e65722ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404010c6469640001484469644964656e7469666965724f663c543e000e0cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e71040c0c6469642c6469645f64657461696c73484469644372656174696f6e44657461696c73040454000018010c6469640001484469644964656e7469666965724f663c543e0001247375626d69747465720001384163636f756e7449644f663c543e0001586e65775f6b65795f61677265656d656e745f6b6579737504016c4469644e65774b657941677265656d656e744b65795365743c543e00014c6e65775f6174746573746174696f6e5f6b6579850401684f7074696f6e3c446964566572696669636174696f6e4b65793e0001486e65775f64656c65676174696f6e5f6b6579850401684f7074696f6e3c446964566572696669636174696f6e4b65793e00014c6e65775f736572766963655f64657461696c739904014c5665633c446964456e64706f696e743c543e3e000075040c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540179040453000004007d04012c42547265655365743c543e000079040c0c6469642c6469645f64657461696c7340446964456e6372797074696f6e4b65790001041858323535313904000401205b75383b2033325d000000007d040420425472656553657404045401790400040081040000008104000002790400850404184f7074696f6e0404540189040108104e6f6e6500000010536f6d6504008904000001000089040c0c6469642c6469645f64657461696c7348446964566572696669636174696f6e4b657900010c1c4564323535313904008d04013c656432353531393a3a5075626c69630000001c5372323535313904002903013c737232353531393a3a5075626c696300010014456364736104009104013465636473613a3a5075626c6963000200008d040c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d000091040c1c73705f636f7265146563647361185075626c696300000400950401205b75383b2033335d0000950400000321000000080099040000029d04009d040c0c64696444736572766963655f656e64706f696e74732c446964456e64706f696e7404045400000c01086964a104015053657276696365456e64706f696e7449643c543e000134736572766963655f7479706573a504017453657276696365456e64706f696e7454797065456e74726965733c543e00011075726c73b104017053657276696365456e64706f696e7455726c456e74726965733c543e0000a1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000a5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a904045300000400ad0401185665633c543e0000a9040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000ad04000002a90400b1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b504045300000400b90401185665633c543e0000b5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000b904000002b50400bd040c0c6469642c6469645f64657461696c7368446964417574686f72697a656443616c6c4f7065726174696f6e040454000014010c6469640001484469644964656e7469666965724f663c543e00012874785f636f756e74657210010c75363400011063616c6cb503014044696443616c6c61626c654f663c543e000130626c6f636b5f6e756d626572100140426c6f636b4e756d6265724f663c543e0001247375626d69747465720001384163636f756e7449644f663c543e0000c1040c4470616c6c65745f6469645f6c6f6f6b75701870616c6c65741043616c6c04045400011c446173736f63696174655f6163636f756e7408010c726571c504015c4173736f63696174654163636f756e745265717565737400012865787069726174696f6e1001a03c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a426c6f636b4e756d62657200004405014173736f63696174652074686520676976656e206163636f756e7420746f2074686520444944207468617420617574686f72697a656420746869732063616c6c2e000501546865206163636f756e742068617320746f207369676e207468652044494420616e64206120626c6f636b6e756d62657220616674657220776869636820746865e07369676e6174757265206578706972657320696e206f7264657220746f20617574686f72697a6520746865206173736f63696174696f6e2e001101546865207369676e61747572652077696c6c20626520636865636b656420616761696e737420746865207363616c6520656e636f646564207475706c65206f66207468650d016d6574686f64207370656369666963206964206f662074686520646964206964656e74696669657220616e642074686520626c6f636b206e756d626572206166746572bc776869636820746865207369676e61747572652073686f756c6420626520726567617264656420696e76616c69642e001101456d69747320604173736f63696174696f6e45737461626c69736865646020616e642c206f7074696f6e616c6c792c20604173736f63696174696f6e52656d6f76656460d069662074686572652077617320612070726576696f7573206173736f63696174696f6e20666f7220746865206163636f756e742e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e406173736f63696174655f73656e64657200012c01014173736f6369617465207468652073656e646572206f66207468652063616c6c20746f2074686520444944207468617420617574686f72697a656420746869731463616c6c2e001101456d69747320604173736f63696174696f6e45737461626c69736865646020616e642c206f7074696f6e616c6c792c20604173736f63696174696f6e52656d6f76656460d069662074686572652077617320612070726576696f7573206173736f63696174696f6e20666f7220746865206163636f756e742e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e6472656d6f76655f73656e6465725f6173736f63696174696f6e000228fc52656d6f766520746865206173736f63696174696f6e206f66207468652073656e646572206163636f756e742e20546869732063616c6c20646f65736e27740d01726571756972652074686520617574686f72697a6174696f6e206f6620746865204449442c206275742072657175697265732061207369676e6564206f726967696e2e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e6872656d6f76655f6163636f756e745f6173736f63696174696f6e04011c6163636f756e74150101444c696e6b61626c654163636f756e74496400032c110152656d6f766520746865206173736f63696174696f6e206f66207468652070726f7669646564206163636f756e742049442e20546869732063616c6c20646f65736e27740d01726571756972652074686520617574686f72697a6174696f6e206f6620746865206163636f756e742049442c2062757420746865206173736f63696174656420444944c46e6565647320746f206d617463682074686520444944207468617420617574686f72697a656420746869732063616c6c2e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e3c7265636c61696d5f6465706f73697404011c6163636f756e74150101444c696e6b61626c654163636f756e74496400042c090152656d6f766520746865206173736f63696174696f6e206f66207468652070726f7669646564206163636f756e742e20546869732063616c6c2063616e206f6e6c79f862652063616c6c65642066726f6d20746865206465706f736974206f776e65722e20546865207265736572766564206465706f7369742077696c6c2062651866726565642e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129582d2052656164733a20436f6e6e6563746564446964735c2d205772697465733a20436f6e6e6563746564446964732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657204011c6163636f756e74150101444c696e6b61626c654163636f756e74496400051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00d8546865207375626a656374206f66207468652063616c6c206d757374206265206c696e6b656420746f20746865206163636f756e742ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404011c6163636f756e74150101444c696e6b61626c654163636f756e74496400060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec5040c4470616c6c65745f6469645f6c6f6f6b7570646173736f63696174655f6163636f756e745f726571756573745c4173736f63696174654163636f756e745265717565737400010820506f6c6b61646f74080000012c4163636f756e74496433320000c90401384d756c74695369676e617475726500000020457468657265756d08001901012c4163636f756e74496432300000cd040144457468657265756d5369676e617475726500010000c904082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040059040148656432353531393a3a5369676e61747572650000001c53723235353139040061040148737232353531393a3a5369676e617475726500010014456364736104006504014065636473613a3a5369676e617475726500020000cd040c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e7444457468657265756d5369676e6174757265000004006504014065636473613a3a5369676e61747572650000d1040c4470616c6c65745f776562335f6e616d65731870616c6c65741043616c6c04045400011c14636c61696d0401106e616d6529010140576562334e616d65496e7075743c543e00003ce841737369676e2074686520737065636966696564206e616d6520746f20746865206f776e65722061732073706563696669656420696e207468651c6f726967696e2e000d01546865206e616d65206d757374206e6f74206861766520616c7265616479206265656e20636c61696d656420627920736f6d656f6e6520656c736520616e6420746865a06f776e6572206d757374206e6f7420616c7265616479206f776e20616e6f74686572206e616d652e00dc456d6974732060576562334e616d65436c61696d65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f28312909012d2052656164733a204e616d65732c204f776e65722c2042616e6e65642073746f7261676520656e7472696573202b20617661696c61626c652063757272656e6379582020636865636b202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f73697420726573657276652c23203c2f7765696768743e4072656c656173655f62795f6f776e6572000130a452656c65617365207468652070726f7669646564206e616d652066726f6d20697473206f776e65722e00cc546865206f726967696e206d75737420626520746865206f776e6572206f662074686520737065636966696564206e616d652e00e0456d6974732060576562334e616d6552656c65617365646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129ac2d2052656164733a204e616d65732073746f7261676520656e747279202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f7369742072656c656173652c23203c2f7765696768743e3c7265636c61696d5f6465706f7369740401106e616d6529010140576562334e616d65496e7075743c543e000230a452656c65617365207468652070726f7669646564206e616d652066726f6d20697473206f776e65722e000101546865206f726967696e206d75737420626520746865206163636f756e742074686174207061696420666f7220746865206e616d652773206465706f7369742e00e0456d6974732060576562334e616d6552656c65617365646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129ac2d2052656164733a204f776e65722073746f7261676520656e747279202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f7369742072656c656173652c23203c2f7765696768743e0c62616e0401106e616d6529010140576562334e616d65496e7075743c543e0003402c42616e2061206e616d652e00f4412062616e6e6564206e616d652063616e6e6f7420626520636c61696d656420627920616e796f6e652e20546865206e616d652773206465706f7369748869732072657475726e656420746f20746865206f726967696e616c2070617965722e0088546865206f726967696e206d757374206265207468652062616e206f726967696e2e00d8456d6974732060576562334e616d6542616e6e65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129f02d2052656164733a2042616e6e65642c204f776e65722c204e616d65732073746f7261676520656e7472696573202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722c2042616e6e65642073746f7261676520656e7472696573202b2063757272656e6379206465706f73697424202072656c656173652c23203c2f7765696768743e14756e62616e0401106e616d6529010140576562334e616d65496e7075743c543e00043834556e62616e2061206e616d652e00704d616b652061206e616d6520636c61696d61626c6520616761696e2e0088546865206f726967696e206d757374206265207468652062616e206f726967696e2e00e0456d6974732060576562334e616d65556e62616e6e65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129b02d2052656164733a2042616e6e65642073746f7261676520656e747279202b206f726967696e20636865636bb82d205772697465733a2042616e6e65642073746f7261676520656e747279206465706f7369742072656c656173652c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657200051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00e8546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f662074686520776562336e616d652ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f7369740401286e616d655f696e70757429010140576562334e616d65496e7075743c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed5040c487075626c69635f63726564656e7469616c731870616c6c65741043616c6c04045400011c0c61646404012863726564656e7469616cd9040164426f783c496e70757443726564656e7469616c4f663c543e3e000018a852656769737465722061206e6577207075626c69632063726564656e7469616c206f6e20636861696e2e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c2077697468207468652073616d65206964656e74696669657220616c72656164798465786973747320666f722074686520737065636966696564207375626a6563742e0064456d697473206043726564656e7469616c53746f726564602e187265766f6b6508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e410401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000120705265766f6b65732061207075626c69632063726564656e7469616c2e001101496620612063726564656e7469616c2077617320616c7265616479207265766f6b65642c20746869732066756e6374696f6e20646f6573206e6f74206661696c206275746473696d706c7920726573756c747320696e2061206e6f6f702e000101546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f207265766f6b65207468652063726564656e7469616c2e0068456d697473206043726564656e7469616c5265766f6b6564602e20756e7265766f6b6508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e410401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e00022478556e7265766f6b65732061207075626c69632063726564656e7469616c2e000101496620612063726564656e7469616c20776173206e6f74207265766f6b65642c20746869732066756e6374696f6e20646f6573206e6f74206661696c206275746473696d706c7920726573756c747320696e2061206e6f6f702e00d8546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f20756e7265766f6b65207468652c63726564656e7469616c2e0070456d697473206043726564656e7469616c556e7265766f6b6564602e1872656d6f766508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e410401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000344fc52656d6f7665732074686520696e666f726d6174696f6e207065727461696e696e672061207075626c69632063726564656e7469616c2066726f6d2074686518636861696e2e0009015468652072656d6f76616c206f66207468652063726564656e7469616c20646f6573206e6f742064656c65746520697420656e746972656c792066726f6d207468650501626c6f636b636861696e20686973746f72792c20627574206f6e6c7920697473206c696e6b202a66726f6d2a2074686520626c6f636b636861696e2073746174659c2a746f2a2074686520626c6f636b636861696e20686973746f72792069732072656d6f7665642e00cc436c69656e74732070617273696e67207075626c69632063726564656e7469616c732073686f756c6420696e746572707265740101746865206c61636b206f6620737563682061206c696e6b2061732074686520666163742074686174207468652063726564656e7469616c20686173206265656eb872656d6f7665642062792069747320617474657374657220736f6d652074696d6520696e2074686520706173742e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c20616c72656164792065786973747320666f722074686520737065636966696564207375626a6563742e000101546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f2072656d6f7665207468652063726564656e7469616c2e0068456d697473206043726564656e7469616c52656d6f766564602e3c7265636c61696d5f6465706f73697404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000448fc52656d6f7665732074686520696e666f726d6174696f6e207065727461696e696e672061207075626c69632063726564656e7469616c2066726f6d20746865ac636861696e20616e642072657475726e7320746865206465706f73697420746f206974732070617965722e0009015468652072656d6f76616c206f66207468652063726564656e7469616c20646f6573206e6f742064656c65746520697420656e746972656c792066726f6d207468650501626c6f636b636861696e20686973746f72792c20627574206f6e6c7920697473206c696e6b202a66726f6d2a2074686520626c6f636b636861696e2073746174659c2a746f2a2074686520626c6f636b636861696e20686973746f72792069732072656d6f7665642e00cc436c69656e74732070617273696e67207075626c69632063726564656e7469616c732073686f756c6420696e746572707265740101746865206c61636b206f6620737563682061206c696e6b2061732074686520666163742074686174207468652063726564656e7469616c20686173206265656eb872656d6f7665642062792069747320617474657374657220736f6d652074696d6520696e2074686520706173742e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c20616c72656164792065786973747320666f722074686520737065636966696564207375626a6563742e000d01546865206469737061746368206f726967696e206d75737420626520746865206f776e6572206f6620746865206465706f7369742c2068656e6365206e6f74207468655863726564656e7469616c27732061747465737465722e0068456d697473206043726564656e7469616c52656d6f766564602e506368616e67655f6465706f7369745f6f776e657204013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e00051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00f0546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f66207468652063726564656e7469616c2ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed9040c487075626c69635f63726564656e7469616c732c63726564656e7469616c732843726564656e7469616c1024437479706548617368012c445375626a6563744964656e74696669657201dd0418436c61696d7301e10434416363657373436f6e74726f6c0145040010012863747970655f686173682c012443747970654861736800011c7375626a656374dd0401445375626a6563744964656e746966696572000118636c61696d73e1040118436c61696d73000134617574686f72697a6174696f6e410401544f7074696f6e3c416363657373436f6e74726f6c3e0000dd040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000e1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000e5040c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f6461746104011064617461e904015450617261636861696e496e686572656e744461746100002480536574207468652063757272656e742076616c69646174696f6e20646174612e004101546869732073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e887068617365206966207468652063616c6c20776173206e6f7420696e766f6b65642e00d0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e7460002101417320612073696465206566666563742c20746869732066756e6374696f6e207570677261646573207468652063757272656e742076616c69646174696f6e2066756e6374696f6e8469662074686520617070726f7072696174652074696d652068617320636f6d652e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653001345570776172644d65737361676500010044617574686f72697a655f75706772616465080124636f64655f686173682c011c543a3a48617368000134636865636b5f76657273696f6ea80110626f6f6c0002206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015468652060636865636b5f76657273696f6e6020706172616d657465722073657473206120626f6f6c65616e20666c616720666f722077686574686572206f72206e6f74207468652072756e74696d6527732073706563610176657273696f6e20616e64206e616d652073686f756c64206265207665726966696564206f6e20757067726164652e2053696e63652074686520617574686f72697a6174696f6e206f6e6c7920686173206120686173682cb069742063616e6e6f742061637475616c6c7920706572666f726d2074686520766572696669636174696f6e2e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e60656e6163745f617574686f72697a65645f75706772616465040110636f646530011c5665633c75383e000324550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005d014e6f7465207468617420746869732066756e6374696f6e2077696c6c206e6f74206170706c7920746865206e65772060636f6465602c20627574206f6e6c7920617474656d707420746f207363686564756c652074686574757067726164652077697468207468652052656c617920436861696e2e0060416c6c206f726967696e732061726520616c6c6f7765642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee904089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f64617461ed04015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f7374617465f504015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d65737361676573fd04016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573050501a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e0000ed040c4c706f6c6b61646f745f7072696d6974697665730876325c50657273697374656456616c69646174696f6e44617461080448012c044e011c0010012c706172656e745f68656164f1040120486561644461746100014c72656c61795f706172656e745f6e756d6265721c01044e00016472656c61795f706172656e745f73746f726167655f726f6f742c0104480001306d61785f706f765f73697a651c010c7533320000f1040c48706f6c6b61646f745f70617261636861696e287072696d6974697665732048656164446174610000040030011c5665633c75383e0000f5040c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f646573f904014442547265655365743c5665633c75383e3e0000f904042042547265655365740404540130000400a902000000fd0400000201050001050860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d626572011c0008011c73656e745f61741c012c426c6f636b4e756d62657200010c6d736730013c446f776e776172644d65737361676500000505042042547265654d617008044b01a9010456010905000400110500000009050000020d05000d050860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d626572011c0008011c73656e745f61741c012c426c6f636b4e756d6265720001106461746130015073705f7374643a3a7665633a3a5665633c75383e00001105000002150500150500000408a90109050019050c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c04045400012448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d697424011857656967687400003484536572766963657320612073696e676c65206f7665727765696768742058434d2e00c02d20606f726967696e603a204d75737420706173732060457865637574654f7665727765696768744f726967696e602ed42d2060696e646578603a2054686520696e646578206f6620746865206f7665727765696768742058434d20746f20736572766963650d012d20607765696768745f6c696d6974603a2054686520616d6f756e74206f662077656967687420746861742058434d20657865637574696f6e206d61792074616b652e001c4572726f72733a5d012d20604261644f766572776569676874496e646578603a2058434d20756e6465722060696e64657860206973206e6f7420666f756e6420696e2074686520604f766572776569676874602073746f72616765206d61702e45012d206042616458636d603a2058434d20756e6465722060696e646578602063616e6e6f742062652070726f7065726c79206465636f64656420696e746f20612076616c69642058434d20666f726d61742e09012d20605765696768744f7665724c696d6974603a2058434d20657865637574696f6e206d617920757365206772656174657220607765696768745f6c696d6974602e001c4576656e74733a8c2d20604f7665727765696768745365727669636564603a204f6e20737563636573732e5473757370656e645f78636d5f657865637574696f6e00010c490153757370656e647320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652c207265676172646c657373206f66207468652073656e6465722773206f726967696e2e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e50726573756d655f78636d5f657865637574696f6e000214b8526573756d657320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652e003d014e6f7465207468617420746869732066756e6374696f6e20646f65736e2774206368616e67652074686520737461747573206f662074686520696e2f6f757420626f756e64206368616e6e656c732e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e607570646174655f73757370656e645f7468726573686f6c6404010c6e65771c010c75333200031499014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e2074686520717565756520666f7220746865206f74686572207369646520746f20626520746f6c6420746f5873757370656e642074686569722073656e64696e672e00742d20606f726967696e603a204d75737420706173732060526f6f74602ee82d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e73757370656e645f76616c756560547570646174655f64726f705f7468726573686f6c6404010c6e65771c010c75333200041495014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e207468652071756575652061667465722077686963682077652064726f7020616e792066757274686572686d657373616765732066726f6d20746865206368616e6e656c2e00742d20606f726967696e603a204d75737420706173732060526f6f74602eec2d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e64726f705f7468726573686f6c64605c7570646174655f726573756d655f7468726573686f6c6404010c6e65771c010c75333200051491014f76657277726974657320746865206e756d626572206f66207061676573206f66206d6573736167657320776869636820746865207175657565206d757374206265207265647563656420746f206265666f7265206974207369676e616c732074686174ec6d6573736167652073656e64696e67206d6179207265636f6d6d656e636520616674657220697420686173206265656e2073757370656e6465642e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e726573756d655f7468726573686f6c64605c7570646174655f7468726573686f6c645f77656967687404010c6e657724011857656967687400061049014f7665727772697465732074686520616d6f756e74206f662072656d61696e696e672077656967687420756e6465722077686963682077652073746f702070726f63657373696e67206d657373616765732e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7468726573686f6c645f77656967687460707570646174655f7765696768745f72657374726963745f646563617904010c6e657724011857656967687400071445014f7665727772697465732074686520737065656420746f2077686963682074686520617661696c61626c652077656967687420617070726f616368657320746865206d6178696d756d207765696768742ea50141206c6f776572206e756d62657220726573756c747320696e2061206661737465722070726f6772657373696f6e2e20412076616c7565206f662031206d616b65732074686520656e746972652077656967687420617661696c61626c6520696e697469616c6c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e0d012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7765696768745f72657374726963745f6465636179602e847570646174655f78636d705f6d61785f696e646976696475616c5f77656967687404010c6e657724011857656967687400081429014f766572777269746520746865206d6178696d756d20616d6f756e74206f662077656967687420616e7920696e646976696475616c206d657373616765206d617920636f6e73756d652e71014d657373616765732061626f766520746869732077656967687420676f20696e746f20746865206f76657277656967687420717565756520616e64206d6179206f6e6c79206265207365727669636564206578706c696369746c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e21012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e78636d705f6d61785f696e646976696475616c5f776569676874602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e1d050c2870616c6c65745f78636d1870616c6c65741043616c6c0404540001281073656e64080110646573747d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011c6d65737361676521050154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f617373657473100110646573747d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172797d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747345020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c75333200013c110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f617373657473100110646573747d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172797d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747345020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320002404d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d657373616765510501c0426f783c56657273696f6e656458636d3c3c5420617320537973436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f77656967687424011857656967687400032cd04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e006d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e2074686559016d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f20657865637574696f6e54617474656d70742077696c6c206265206d6164652e006d014e4f54453a2041207375636365737366756c2072657475726e20746f207468697320646f6573202a6e6f742a20696d706c7920746861742074686520606d73676020776173206578656375746564207375636365737366756c6c79cc746f20636f6d706c6574696f6e3b206f6e6c792074686174202a736f6d652a206f66206974207761732065786563757465642e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6eb5010148426f783c4d756c74694c6f636174696f6e3e00012c78636d5f76657273696f6e1c012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00642d20606f726967696e603a204d75737420626520526f6f742ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6ec10301484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00642d20606f726967696e603a204d75737420626520526f6f742e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e7d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00642d20606f726967696e603a204d75737420626520526f6f742e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e7d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00642d20606f726967696e603a204d75737420626520526f6f742e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f617373657473140110646573747d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172797d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747345020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320001307765696768745f6c696d69744102012c5765696768744c696d69740008484d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f617373657473140110646573747d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172797d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747345020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320001307765696768745f6c696d69744102012c5765696768744c696d6974000944110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2105080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204002505015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400d901015076333a3a58636d3c52756e74696d6543616c6c3e0003000025050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400290501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e000029050000022d05002d050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404004902012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404004902012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404004902012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f696428011c51756572794964000120726573706f6e736531050120526573706f6e73650001286d61785f77656967687428010c753634000300345472616e7366657241737365740801186173736574734902012c4d756c746941737365747300012c62656e6566696369617279590201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574734902012c4d756c746941737365747300011064657374590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065290201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c2d020168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c101010c7533320001406d61785f6d6573736167655f73697a65c101010c7533320001306d61785f6361706163697479c101010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c101010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c101010c75333200011873656e646572c101010c753332000124726563697069656e74c101010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e04005d020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f696428011c5175657279496400011064657374590201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f77656967687428010c753634000c00304465706f73697441737365740c0118617373657473410501404d756c7469417373657446696c7465720001286d61785f617373657473c101010c75333200012c62656e6566696369617279590201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473410501404d756c7469417373657446696c7465720001286d61785f617373657473c101010c75333200011064657374590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e000e003445786368616e6765417373657408011067697665410501404d756c7469417373657446696c74657200011c726563656976654902012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473410501404d756c7469417373657446696c74657200011c72657365727665590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473410501404d756c7469417373657446696c74657200011064657374590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f696428011c5175657279496400011064657374590201344d756c74694c6f636174696f6e000118617373657473410501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f77656967687428010c75363400120030427579457865637574696f6e08011066656573510201284d756c746941737365740001307765696768745f6c696d69744d05012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204002505014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804002505014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574734902012c4d756c74694173736574730001187469636b6574590201344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f77656967687428010c753634001a0048556e73756273637269626556657273696f6e001b000031050c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304004902012c4d756c74694173736574730001003c457865637574696f6e526573756c740400350501504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e04001c013873757065723a3a56657273696f6e00030000350504184f7074696f6e0404540139050108104e6f6e6500000010536f6d650400390500000100003905000004081c3d05003d05100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404001001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c65001900004105100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504004902012c4d756c74694173736574730000001057696c6404004505013857696c644d756c74694173736574000100004505100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869645502011c4173736574496400010c66756e4905013c57696c6446756e676962696c697479000100004905100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c65000100004d050c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d69746564040028010c753634000100005105080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204005505015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304006505015076333a3a58636d3c52756e74696d6543616c6c3e0003000055050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400590501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e000059050000025d05005d050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404004902012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404004902012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404004902012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f696428011c51756572794964000120726573706f6e736531050120526573706f6e73650001286d61785f77656967687428010c753634000300345472616e7366657241737365740801186173736574734902012c4d756c746941737365747300012c62656e6566696369617279590201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574734902012c4d756c746941737365747300011064657374590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065290201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c61050168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c101010c7533320001406d61785f6d6573736167655f73697a65c101010c7533320001306d61785f6361706163697479c101010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c101010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c101010c75333200011873656e646572c101010c753332000124726563697069656e74c101010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e04005d020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f696428011c5175657279496400011064657374590201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f77656967687428010c753634000c00304465706f73697441737365740c0118617373657473410501404d756c7469417373657446696c7465720001286d61785f617373657473c101010c75333200012c62656e6566696369617279590201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473410501404d756c7469417373657446696c7465720001286d61785f617373657473c101010c75333200011064657374590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e000e003445786368616e6765417373657408011067697665410501404d756c7469417373657446696c74657200011c726563656976654902012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473410501404d756c7469417373657446696c74657200011c72657365727665590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473410501404d756c7469417373657446696c74657200011064657374590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f696428011c5175657279496400011064657374590201344d756c74694c6f636174696f6e000118617373657473410501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f77656967687428010c75363400120030427579457865637574696f6e08011066656573510201284d756c746941737365740001307765696768745f6c696d69744d05012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204005505014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804005505014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574734902012c4d756c74694173736574730001187469636b6574590201344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f77656967687428010c753634001a0048556e73756273637269626556657273696f6e001b000061050c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656430011c5665633c75383e000065050c0c78636d0876330c58636d041043616c6c00000400690501585665633c496e737472756374696f6e3c43616c6c3e3e000069050000026d05006d050c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400e501012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400e501012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400e501012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f696428011c51756572794964000120726573706f6e736501020120526573706f6e73650001286d61785f77656967687424011857656967687400011c71756572696572250201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473e501012c4d756c746941737365747300012c62656e6566696369617279b50101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473e501012c4d756c746941737365747300011064657374b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64290201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737424011857656967687400011063616c6c6105014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c101010c7533320001406d61785f6d6573736167655f73697a65c101010c7533320001306d61785f6361706163697479c101010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c101010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c101010c75333200011873656e646572c101010c753332000124726563697069656e74c101010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400b9010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400310201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473350201404d756c7469417373657446696c74657200012c62656e6566696369617279b50101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473350201404d756c7469417373657446696c74657200011064657374b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e000e003445786368616e676541737365740c011067697665350201404d756c7469417373657446696c74657200011077616e74e501012c4d756c746941737365747300011c6d6178696d616ca80110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473350201404d756c7469417373657446696c74657200011c72657365727665b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473350201404d756c7469417373657446696c74657200011064657374b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f310201445175657279526573706f6e7365496e666f000118617373657473350201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573ed0101284d756c746941737365740001307765696768745f6c696d69744102012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204006505012458636d3c43616c6c3e0015002c536574417070656e64697804006505012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473e501012c4d756c74694173736574730001187469636b6574b50101344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f776569676874240118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400e501012c4d756c7469417373657473001c002c45787065637441737365740400e501012c4d756c7469417373657473001d00304578706563744f726967696e0400250201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400050201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304001d0201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6530011c5665633c75383e000134726573706f6e73655f696e666f310201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578c101010c7533320001106e616d6530011c5665633c75383e00012c6d6f64756c655f6e616d6530011c5665633c75383e00012c63726174655f6d616a6f72c101010c75333200013c6d696e5f63726174655f6d696e6f72c101010c753332002200505265706f72745472616e736163745374617475730400310201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400bd0101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bc90101244e6574776f726b496400012c64657374696e6174696f6eb9010154496e746572696f724d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e002600244c6f636b41737365740801146173736574ed0101284d756c74694173736574000120756e6c6f636b6572b50101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574ed0101284d756c74694173736574000118746172676574b50101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574ed0101284d756c746941737365740001146f776e6572b50101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574ed0101284d756c746941737365740001186c6f636b6572b50101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177a80110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400b50101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69744102012c5765696768744c696d6974000130636865636b5f6f726967696e250201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f000071050c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c65741043616c6c04045400010448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d6974240118576569676874000004905365727669636520612073696e676c65206f766572776569676874206d6573736167652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7505000002ad03007905000004087d0518007d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400350301185665633c543e000081050c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d62657201102050726f706f73616c01b1031c42616c616e6365011801081c4f6e676f696e670400850501c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564a80110626f6f6c00010c656e6410012c426c6f636b4e756d6265720001000085050c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d62657201102050726f706f73616c01b1031c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200012070726f706f73616cb103012050726f706f73616c0001247468726573686f6c64940134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c798905013854616c6c793c42616c616e63653e000089050c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e636500008d050c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f746573000108184469726563740c0114766f746573910501f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e739d05015044656c65676174696f6e733c42616c616e63653e0001147072696f72a105017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6ebd030128436f6e76696374696f6e00012c64656c65676174696f6e739d05015044656c65676174696f6e733c42616c616e63653e0001147072696f72a105017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0001000091050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019505045300000400990501185665633c543e00009505000004081c980099050000029505009d050c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e63650000a1050c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e63650000a50500000408b1039400a90500000408107d0500ad050c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f720404540001602056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7740507265696d6167654e6f7445786973740017047054686520707265696d61676520646f6573206e6f742065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012c0453000004008d0201185665633c543e0000b505084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e6465781c013450726f706f73616c496e6465780001247468726573686f6c641c012c4d656d626572436f756e7400011061796573350301385665633c4163636f756e7449643e0001106e617973350301385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d6265720000b9050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909bd050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012c0453000004008d0201185665633c543e0000c1050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909c5050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400350301185665633c543e0000c9050c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909cd05083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e63650000d1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011c045300000400450301185665633c543e0000d5050c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c000004001c010c7533320000d90504184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000dd0508346672616d655f737570706f72742050616c6c6574496400000400fd01011c5b75383b20385d0000e1050c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900011470496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e04784572726f7220666f72207468652074726561737572792070616c6c65742ee5050c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011104045300000400ed0501185665633c543e0000ed05000002110400f105083870616c6c65745f76657374696e672052656c656173657300010808563000000008563100010000f5050c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742ef9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401fd05045300000400050601185665633c543e0000fd0504184f7074696f6e0404540101060108104e6f6e6500000010536f6d650400010600000100000106084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c01b1032c426c6f636b4e756d62657201103450616c6c6574734f726967696e01ed03244163636f756e7449640100001401206d617962655f6964d001304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cb103011043616c6c0001386d617962655f706572696f646963190401944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696eed03013450616c6c6574734f726967696e00000506000002fd050009060c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909090d06000004081106180011060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011506045300000400190601185665633c543e00001506083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501d82c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065d8012450726f78795479706500011464656c617910012c426c6f636b4e756d626572000019060000021506001d06000004082106180021060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012506045300000400290601185665633c543e00002506083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e74496401001048617368012c2c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173682c01104861736800011868656967687410012c426c6f636b4e756d626572000029060000022506002d060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909093106083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f73697435060150284163636f756e7449642c2042616c616e63652900010c6c656e1c010c753332000000245265717565737465640c011c6465706f736974390601704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e741c010c75333200010c6c656ec103012c4f7074696f6e3c7533323e00010000350600000408001800390604184f7074696f6e0404540135060108104e6f6e6500000010536f6d650400350600000100003d06000004082c1c0041060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000045060c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090949060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400350301185665633c543e00004d060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909095106082c70616c6c65745f746970731c4f70656e54697010244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d62657201101048617368012c001c0118726561736f6e2c01104861736800010c77686f0001244163636f756e74496400011866696e6465720001244163636f756e74496400011c6465706f73697418011c42616c616e6365000118636c6f7365735506014c4f7074696f6e3c426c6f636b4e756d6265723e00011074697073590601645665633c284163636f756e7449642c2042616c616e6365293e00012c66696e646572735f666565a80110626f6f6c0000550604184f7074696f6e04045401100108104e6f6e6500000010536f6d65040010000001000059060000023506005d060c3473705f61726974686d65746963287065725f7468696e67731c50657263656e74000004000801087538000061060c2c70616c6c65745f746970731870616c6c6574144572726f7208045400044900011830526561736f6e546f6f4269670000048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e30416c72656164794b6e6f776e00010488546865207469702077617320616c726561647920666f756e642f737461727465642e28556e6b6e6f776e5469700002046054686520746970206861736820697320756e6b6e6f776e2e244e6f7446696e6465720003041d01546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e245374696c6c4f70656e0004042901546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e245072656d61747572650005043101546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909096506000004080004006906083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656ef0015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c736d06018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e00006d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400350301185665633c543e000071060c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090975060c1463747970652c63747970655f656e747279284374797065456e747279081c43726561746f7201002c426c6f636b4e756d62657201100008011c63726561746f7200011c43726561746f72000128637265617465645f617410012c426c6f636b4e756d626572000079060c1463747970651870616c6c6574144572726f7204045400010c204e6f74466f756e64000004985468657265206973206e6f20435479706520776974682074686520676976656e20686173682e34416c72656164794578697374730001046454686520435479706520616c7265616479206578697374732e3c556e61626c65546f506179466565730002040d0154686520706179696e67206163636f756e742077617320756e61626c6520746f2070617920746865206665657320666f72206372656174696e6720612063747970652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909097d060c2c6174746573746174696f6e306174746573746174696f6e73484174746573746174696f6e44657461696c73040454000014012863747970655f686173682c01384374797065486173684f663c543e000120617474657374657200013441747465737465724f663c543e000140617574686f72697a6174696f6e5f6964fc01704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e00011c7265766f6b6564a80110626f6f6c00011c6465706f736974810601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e000081060c306b696c745f737570706f72741c6465706f7369741c4465706f736974081c4163636f756e7401001c42616c616e63650118000801146f776e657200011c4163636f756e74000118616d6f756e7418011c42616c616e6365000085060000040801012c0089060c2c6174746573746174696f6e1870616c6c6574144572726f720404540001183c416c726561647941747465737465640000080901546865726520697320616c726561647920616e206174746573746174696f6e2077697468207468652073616d6520636c61696d20686173682073746f726564206f6e18636861696e2e38416c72656164795265766f6b6564000104a4546865206174746573746174696f6e2068617320616c7265616479206265656e207265766f6b65642e204e6f74466f756e64000204c04e6f206174746573746174696f6e206f6e20636861696e206d61746368696e672074686520636c61696d20686173682e3443547970654d69736d61746368000308fc546865206174746573746174696f6e20435479706520646f6573206e6f74206d61746368207468652043547970652073706563696669656420696e207468656864656c65676174696f6e2068696572617263687920726f6f742e344e6f74417574686f72697a6564000404f05468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f206368616e676520746865206174746573746174696f6e2e804d617844656c6567617465644174746573746174696f6e73457863656564656400050cf4546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732068617320616c7265616479206265656e05017265616368656420666f722074686520636f72726573706f6e64696e672064656c65676174696f6e2069642073756368207468617420616e6f74686572206f6e654063616e6e6f742062652061646465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909098d060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368793844656c65676174696f6e4e6f646504045400001401446869657261726368795f726f6f745f69642c015444656c65676174696f6e4e6f646549644f663c543e000118706172656e74c50301744f7074696f6e3c44656c65676174696f6e4e6f646549644f663c543e3e0001206368696c6472656e910601d8426f756e64656442547265655365743c44656c65676174696f6e4e6f646549644f663c543e2c20543a3a4d61784368696c6472656e3e00011c64657461696c739906015044656c65676174696f6e44657461696c733c543e00011c6465706f736974810601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e000091060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454012c0453000004009506012c42547265655365743c543e0000950604204254726565536574040454012c0004008d0200000099060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368794444656c65676174696f6e44657461696c7304045400000c01146f776e657200014044656c656761746f7249644f663c543e00011c7265766f6b6564a80110626f6f6c00012c7065726d697373696f6e730901012c5065726d697373696f6e7300009d060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368796844656c65676174696f6e48696572617263687944657461696c73040454000004012863747970655f686173682c01384374797065486173684f663c543e0000a1060c2864656c65676174696f6e1870616c6c6574144572726f720404540001585c44656c65676174696f6e416c72656164794578697374730000041101546865726520697320616c726561647920612064656c65676174696f6e206e6f64652077697468207468652073616d652049442073746f726564206f6e20636861696e2e60496e76616c696444656c65676174655369676e617475726500010805015468652064656c65676174652773207369676e617475726520666f72207468652064656c65676174696f6e206372656174696f6e206f7065726174696f6e20697320696e76616c69642e4844656c65676174696f6e4e6f74466f756e64000204c04e6f2064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e4044656c65676174654e6f74466f756e64000304b84e6f2064656c656761746520776974682074686520676976656e2049442073746f726564206f6e20636861696e2e58486965726172636879416c7265616479457869737473000404f8546865726520697320616c72656164792061206869657261726368792077697468207468652073616d652049442073746f726564206f6e20636861696e2e444869657261726368794e6f74466f756e64000504bc4e6f2068696572617263687920776974682074686520676976656e2049442073746f726564206f6e20636861696e2e544d617853656172636844657074685265616368656400060409014d6178206e756d626572206f66206e6f64657320636865636b656420776974686f757420766572696679696e672074686520676976656e20636f6e646974696f6e2e684e6f744f776e65724f66506172656e7444656c65676174696f6e000708f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6ef462656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20706172656e74206e6f64652e744e6f744f776e65724f6644656c65676174696f6e486965726172636879000808f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6eec62656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20726f6f74206e6f64652e60506172656e7444656c65676174696f6e4e6f74466f756e64000904dc4e6f20706172656e742064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e5c506172656e7444656c65676174696f6e5265766f6b6564000a04c854686520706172656e742064656c65676174696f6e206861732070726576696f75736c79206265656e207265766f6b65642e58556e617574686f72697a65645265766f636174696f6e000b04fc5468652064656c65676174696f6e207265766f6b6572206973206e6f7420616c6c6f77656420746f207265766f6b65207468652064656c65676174696f6e2e4c556e617574686f72697a656452656d6f76616c000c04ec5468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f2072656d6f7665207468652064656c65676174696f6e2e58556e617574686f72697a656444656c65676174696f6e000d04fc5468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f20637265617465207468652064656c65676174696f6e2e3041636365737344656e696564000e04f0546865206f7065726174696f6e207761736e277420616c6c6f7765642062656361757365206f6620696e73756666696369656e74207269676874732e6045786365656465645265766f636174696f6e426f756e6473000f080d014d6178206e756d626572206f66207265766f636174696f6e7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7238746865206f7065726174696f6e2e54457863656564656452656d6f76616c426f756e647300100811014d6178206e756d626572206f662072656d6f76616c7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7220746865286f7065726174696f6e2e584d61785265766f636174696f6e73546f6f4c61726765001104f8546865206d6178206e756d626572206f66207265766f636174696f6e206578636565647320746865206c696d697420666f72207468652070616c6c65742e4c4d617852656d6f76616c73546f6f4c61726765001204f0546865206d6178206e756d626572206f662072656d6f76616c73206578636565647320746865206c696d697420666f72207468652070616c6c65742e5c4d6178506172656e74436865636b73546f6f4c617267650013040501546865206d6178206e756d626572206f6620706172656e7420636865636b73206578636565647320746865206c696d697420666f72207468652070616c6c65742e20496e7465726e616c001404f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e4c4d61784368696c6472656e4578636565646564001508dc546865206d6178206e756d626572206f6620616c6c206368696c6472656e20686173206265656e207265616368656420666f722074686578636f72726573706f6e64696e672064656c65676174696f6e206e6f64652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a5060c0c6469642c6469645f64657461696c732844696444657461696c7304045400001c014861757468656e7469636174696f6e5f6b65792c01284b657949644f663c543e0001486b65795f61677265656d656e745f6b657973a90601604469644b657941677265656d656e744b65795365743c543e00013864656c65676174696f6e5f6b6579c50301484f7074696f6e3c4b657949644f663c543e3e00013c6174746573746174696f6e5f6b6579c50301484f7074696f6e3c4b657949644f663c543e3e00012c7075626c69635f6b657973ad0601484469645075626c69634b65794d61703c543e00013c6c6173745f74785f636f756e74657210010c75363400011c6465706f736974810601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e0000a9060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454012c0453000004009506012c42547265655365743c543e0000ad060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b012c045601b106045300000400b906013842547265654d61703c4b2c20563e0000b1060c0c6469642c6469645f64657461696c734c4469645075626c69634b657944657461696c73042c426c6f636b4e756d62657201100008010c6b6579b50601304469645075626c69634b6579000130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720000b5060c0c6469642c6469645f64657461696c73304469645075626c69634b6579000108545075626c6963566572696669636174696f6e4b6579040089040148446964566572696669636174696f6e4b65790000004c5075626c6963456e6372797074696f6e4b6579040079040140446964456e6372797074696f6e4b657900010000b906042042547265654d617008044b012c045601b106000400bd06000000bd06000002c10600c106000004082cb10600c5060000040800a10400c9060c0c6469641870616c6c6574144572726f7204045400016c58496e76616c69645369676e6174757265466f726d6174000008050154686520444944206f7065726174696f6e207369676e6174757265206973206e6f7420696e2074686520666f726d61742074686520766572696669636174696f6e306b657920657870656374732e40496e76616c69645369676e6174757265000108f854686520444944206f7065726174696f6e207369676e617475726520697320696e76616c696420666f7220746865207061796c6f616420616e642074686568766572696669636174696f6e206b65792070726f76696465642e34416c7265616479457869737473000204f85468652044494420776974682074686520676976656e206964656e74696669657220697320616c72656164792070726573656e74206f6e20636861696e2e204e6f74466f756e64000304d44e6f2044494420776974682074686520676976656e206964656e7469666965722069732070726573656e74206f6e20636861696e2e5c566572696669636174696f6e4b65794e6f74466f756e6400040809014f6e65206f72206d6f726520766572696669636174696f6e206b657973207265666572656e63656420617265206e6f742073746f72656420696e2074686520736574546f6620766572696669636174696f6e206b6579732e30496e76616c69644e6f6e6365000504090154686520444944206f7065726174696f6e206e6f6e6365206973206e6f7420657175616c20746f207468652063757272656e7420444944206e6f6e6365202b20312e7c556e737570706f72746564446964417574686f72697a6174696f6e43616c6c000604e05468652063616c6c65642065787472696e73696320646f6573206e6f7420737570706f72742044494420617574686f7269736174696f6e2e6c496e76616c6964446964417574686f72697a6174696f6e43616c6c000708dc5468652063616c6c2068616420706172616d6574657273207468617420636f6e666c696374656420776974682065616368206f74686572406f72207765726520696e76616c69642e8c4d61784e65774b657941677265656d656e744b6579734c696d697445786365656465640008080d0141206e756d626572206f66206e6577206b65792061677265656d656e74206b6579732067726561746572207468616e20746865206d6178696d756d20616c6c6f77656448686173206265656e2070726f76696465642e544d61785075626c69634b65797345786365656465640009080501546865206d6178696d756d206e756d626572206f66207075626c6963206b65797320666f72207468697320444944206b6579206964656e74696669657220686173346265656e20726561636865642e6c4d61784b657941677265656d656e744b6579734578636565646564000a080501546865206d6178696d756d206e756d626572206f66206b65792061677265656d656e747320686173206265656e207265616368656420666f722074686520444944207375626a6563742e304261644469644f726967696e000b04bc546865204449442063616c6c20776173207375626d6974746564206279207468652077726f6e67206163636f756e74485472616e73616374696f6e45787069726564000c040d0154686520626c6f636b206e756d6265722070726f766964656420696e2061204449442d617574686f72697a6564206f7065726174696f6e20697320696e76616c69642e38416c726561647944656c65746564000d04b0546865204449442068617320616c7265616479206265656e2070726576696f75736c792064656c657465642e444e6f744f776e65724f664465706f736974000e04fc4f6e6c7920746865206f776e6572206f6620746865206465706f7369742063616e207265636c61696d206974732072657365727665642062616c616e63652e3c556e61626c65546f50617946656573000f04f0546865206f726967696e20697320756e61626c6520746f207265736572766520746865206465706f73697420616e642070617920746865206665652e6c4d61784e756d6265724f66536572766963657345786365656465640010041101546865206d6178696d756d206e756d626572206f66207365727669636520656e64706f696e747320666f7220612044494420686173206265656e2065786365656465642e684d61785365727669636549644c656e6774684578636565646564001104f0546865207365727669636520656e64706f696e7420494420657863656564656420746865206d6178696d756d20616c6c6f776564206c656e6774682e704d617853657276696365547970654c656e6774684578636565646564001208f84f6e65206f6620746865207365727669636520656e64706f696e7420747970657320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e884d61784e756d6265724f665479706573506572536572766963654578636565646564001308ec546865206d6178696d756d206e756d626572206f6620747970657320666f722061207365727669636520656e64706f696e7420686173206265656e2465786365656465642e6c4d61785365727669636555726c4c656e6774684578636565646564001408f44f6e65206f6620746865207365727669636520656e64706f696e742055524c7320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e844d61784e756d6265724f6655726c735065725365727669636545786365656465640015041101546865206d6178696d756d206e756d626572206f662055524c7320666f722061207365727669636520656e64706f696e7420686173206265656e2065786365656465642e5053657276696365416c726561647945786973747300160411014120736572766963652077697468207468652070726f766964656420494420697320616c72656164792070726573656e7420666f722074686520676976656e204449442e3c536572766963654e6f74466f756e6400170409014120736572766963652077697468207468652070726f7669646564204944206973206e6f742070726573656e7420756e6465722074686520676976656e204449442e58496e76616c696453657276696365456e636f64696e6700180409014f6e65206f6620746865207365727669636520656e64706f696e742064657461696c7320636f6e7461696e73206e6f6e2d415343494920636861726163746572732e7c4d617853746f726564456e64706f696e7473436f756e7445786365656465640019080d01546865206e756d626572206f66207365727669636520656e64706f696e74732073746f72656420756e6465722074686520444944206973206c6172676572207468616e88746865206e756d626572206f6620656e64706f696e747320746f2064656c6574652e20496e7465726e616c001a04f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909cd060c4470616c6c65745f6469645f6c6f6f6b757044636f6e6e656374696f6e5f7265636f726440436f6e6e656374696f6e5265636f72640c344469644964656e74696669657201001c4163636f756e7401001c42616c616e636501180008010c6469640001344469644964656e74696669657200011c6465706f736974810601644465706f7369743c4163636f756e742c2042616c616e63653e0000d1060000040800150100d5060c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144572726f72040454000114204e6f74466f756e640000047c546865206173736f63696174696f6e20646f6573206e6f742065786973742e344e6f74417574686f72697a65640001081101546865206f726967696e20776173206e6f7420616c6c6f77656420746f206d616e61676520746865206173736f63696174696f6e206265747765656e20746865204449444c616e6420746865206163636f756e742049442e344f7574646174656450726f6f66000204b454686520737570706c6965642070726f6f66206f66206f776e65727368697020776173206f757464617465642e44496e73756666696369656e7446756e64730003081101546865206163636f756e742068617320696e73756666696369656e742066756e647320616e642063616e277420706179207468652066656573206f72207265736572766530746865206465706f7369742e244d6967726174696f6e00040c010154686520436f6e6e65637465644163636f756e747320616e6420436f6e6e6563746564446964732073746f7261676520617265206f7574206f662073796e632e0011014e4f54453a20746869732077696c6c206f6e6c792062652072657475726e6564206966207468652073746f726167652068617320696e636f6e73697374656e636965732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909d9060c4470616c6c65745f776562335f6e616d657324776562335f6e616d6544576562334e616d654f776e6572736869700c144f776e657201001c4465706f7369740181062c426c6f636b4e756d6265720110000c01146f776e65720001144f776e6572000128636c61696d65645f617410012c426c6f636b4e756d62657200011c6465706f7369748106011c4465706f7369740000dd060c4470616c6c65745f776562335f6e616d65731870616c6c6574144572726f7204045400013044496e73756666696369656e7446756e64730000040d01546865207478207375626d697474657220646f6573206e6f74206861766520656e6f7567682066756e647320746f2070617920666f7220746865206465706f7369742e34416c7265616479457869737473000104dc54686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c7920636c61696d65642e204e6f74466f756e640002048854686520737065636966696564206e616d6520646f6573206e6f742065786973742e484f776e6572416c7265616479457869737473000304a054686520737065636966696564206f776e657220616c7265616479206f776e732061206e616d652e344f776e65724e6f74466f756e64000404ac54686520737065636966696564206f776e657220646f6573206e6f74206f776e20616e79206e616d65732e1842616e6e6564000508ec54686520737065636966696564206e616d6520686173206265656e2062616e6e656420616e642063616e6e6f7420626520696e746572616374656414776974682e244e6f7442616e6e6564000604ac54686520737065636966696564206e616d65206973206e6f742063757272656e746c792062616e6e65642e34416c726561647942616e6e6564000704d854686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c792062616e6e65642e344e6f74417574686f72697a6564000804cc546865206163746f722063616e6e6f7420706572666f726d65642074686520737065636966696564206f7065726174696f6e2e20546f6f53686f7274000904a841206e616d65207468617420697320746f6f2073686f7274206973206265696e6720636c61696d65642e1c546f6f4c6f6e67000a04a441206e616d65207468617420697320746f6f206c6f6e67206973206265696e6720636c61696d65642e40496e76616c6964436861726163746572000b04f441206e616d65207468617420636f6e7461696e73206e6f7420616c6c6f7765642063686172616374657273206973206265696e6720636c61696d65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e1060000040831012c00e5060c487075626c69635f63726564656e7469616c732c63726564656e7469616c733c43726564656e7469616c456e7472791824435479706548617368012c20417474657374657201002c426c6f636b4e756d6265720110244163636f756e74496401001c42616c616e636501183c417574686f72697a6174696f6e49640101010018012863747970655f686173682c01244354797065486173680001206174746573746572000120417474657374657200011c7265766f6b6564a80110626f6f6c000130626c6f636b5f6e756d62657210012c426c6f636b4e756d62657200011c6465706f7369748106016c4465706f7369743c4163636f756e7449642c2042616c616e63653e000140617574686f72697a6174696f6e5f6964fc015c4f7074696f6e3c417574686f72697a6174696f6e49643e0000e9060c487075626c69635f63726564656e7469616c731870616c6c6574144572726f720404540001183c416c72656164794174746573746564000008f8412063726564656e7469616c2077697468207468652073616d6520726f6f7420686173682068617320616c72656164792069737375656420746f2074686548737065636966696564207375626a6563742e204e6f74466f756e6400010805014e6f2063726564656e7469616c2077697468207468652073706563696669656420726f6f74206861736820686173206265656e2069737375656420746f2074686548737065636966696564207375626a6563742e3c556e61626c65546f50617946656573000204d44e6f7420656e6f75676820746f6b656e7320746f2070617920666f72207468652066656573206f7220746865206465706f7369742e30496e76616c6964496e707574000304805468652063726564656e7469616c20696e70757420697320696e76616c69642e344e6f74417574686f72697a6564000404e05468652063616c6c6572206973206e6f7420617574686f72697a656420746f20706572666f726d656420746865206f7065726174696f6e2e20496e7465726e616c000508f443617463682d616c6c20666f7220616e79206f74686572206572726f727320746861742073686f756c64206e6f742068617070656e2c207965742069742468617070656e65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909ed0604184f7074696f6e04045401f1060108104e6f6e6500000010536f6d650400f1060000010000f1060c4c706f6c6b61646f745f7072696d69746976657308763248557067726164655265737472696374696f6e0001041c50726573656e7400000000f5060c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f686561642c014472656c61795f636861696e3a3a4861736800016472656c61795f64697370617463685f71756575655f73697a65f9060128287533322c2075333229000140696e67726573735f6368616e6e656c73fd0601885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c73fd0601885665633c285061726149642c20416272696467656448726d704368616e6e656c293e0000f906000004081c1c00fd06000002010700010700000408a90105070005070c4c706f6c6b61646f745f7072696d6974697665730876324c416272696467656448726d704368616e6e656c00001801306d61785f63617061636974791c010c7533320001386d61785f746f74616c5f73697a651c010c7533320001406d61785f6d6573736167655f73697a651c010c7533320001246d73675f636f756e741c010c753332000128746f74616c5f73697a651c010c7533320001206d71635f68656164c50301304f7074696f6e3c486173683e000009070c4c706f6c6b61646f745f7072696d697469766573087632644162726964676564486f7374436f6e66696775726174696f6e00002401346d61785f636f64655f73697a651c010c7533320001486d61785f686561645f646174615f73697a651c010c7533320001586d61785f7570776172645f71756575655f636f756e741c010c7533320001546d61785f7570776172645f71756575655f73697a651c010c75333200015c6d61785f7570776172645f6d6573736167655f73697a651c010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e6469646174651c010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e6469646174651c010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e1c012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c61791c012c426c6f636b4e756d62657200000d07089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e000004002c012452656c61794861736800001107042042547265654d617008044b01a9010456010d0700040015070000001507000002190700190700000408a9010d07001d0700000221070021070860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401a90100080124726563697069656e74a901010849640001106461746130015073705f7374643a3a7665633a3a5665633c75383e00002507087c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f686173682c011c543a3a48617368000134636865636b5f76657273696f6ea80110626f6f6c000029070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041901417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e672e5050726f686962697465644279506f6c6b61646f740001044d01506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e2e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733c77696c6c696e6720746f2072756e2e6856616c69646174696f6e446174614e6f74417661696c61626c650003041d0154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b2e74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404290154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b2e304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909092d070000023107003107086463756d756c75735f70616c6c65745f78636d705f717565756554496e626f756e644368616e6e656c44657461696c7300000c011873656e646572a9010118506172614964000114737461746535070130496e626f756e6453746174650001406d6573736167655f6d65746164617461390701a85665633c2852656c6179426c6f636b4e756d6265722c2058636d704d657373616765466f726d6174293e00003507086463756d756c75735f70616c6c65745f78636d705f717565756530496e626f756e645374617465000108084f6b0000002453757370656e6465640001000039070000023d07003d07000004081c41070041070c48706f6c6b61646f745f70617261636861696e287072696d6974697665734458636d704d657373616765466f726d617400010c60436f6e636174656e6174656456657273696f6e656458636d0000005c436f6e636174656e61746564456e636f646564426c6f620001001c5369676e616c7300020000450700000408a9011c0049070000024d07004d07086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74a90101185061726149640001147374617465510701344f7574626f756e6453746174650001347369676e616c735f6578697374a80110626f6f6c00012c66697273745f696e646578dc010c7531360001286c6173745f696e646578dc010c75313600005107086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000550700000408a901dc005907086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e66696744617461000018014473757370656e645f7468726573686f6c641c010c75333200013864726f705f7468726573686f6c641c010c753332000140726573756d655f7468726573686f6c641c010c7533320001407468726573686f6c645f7765696768742401185765696768740001547765696768745f72657374726963745f646563617924011857656967687400016878636d705f6d61785f696e646976696475616c5f77656967687424011857656967687400005d070000040ca9011c300061070c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f72040454000114304661696c6564546f53656e640000046c4661696c656420746f2073656e642058434d206d6573736167652e3042616458636d4f726967696e0001043c4261642058434d206f726967696e2e1842616458636d000204344261642058434d20646174612e484261644f766572776569676874496e64657800030454426164206f76657277656967687420696e6465782e3c5765696768744f7665724c696d6974000404f850726f76696465642077656967687420697320706f737369626c79206e6f7420656e6f75676820746f206578656375746520746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090965070c2870616c6c65745f78636d1870616c6c6574144572726f720404540001502c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108610154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652e2050657268617073a861206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e30496e76616c69644173736574000d0480496e76616c696420617373657420666f7220746865206f7065726174696f6e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304390154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c207573657273206f6620746865206c6f636b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090969070c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144572726f7204045400010004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909096d07086063756d756c75735f70616c6c65745f646d705f717565756528436f6e6669674461746100000401386d61785f696e646976696475616c24011857656967687400007107086063756d756c75735f70616c6c65745f646d705f71756575653450616765496e6465784461746100000c0128626567696e5f757365641c012c50616765436f756e746572000120656e645f757365641c012c50616765436f756e7465720001406f7665727765696768745f636f756e7410013c4f766572776569676874496e646578000075070000027907007907000004081c30007d070c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144572726f720404540001081c556e6b6e6f776e0000048c546865206d65737361676520696e64657820676976656e20697320756e6b6e6f776e2e244f7665724c696d6974000104310154686520616d6f756e74206f662077656967687420676976656e20697320706f737369626c79206e6f7420656e6f75676820666f7220657865637574696e6720746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909098107102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301e9021043616c6c01b503245369676e617475726501c9041445787472610185070004003000000085070000042089078d07910795079907a107a507a90700890710306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e646572040454000000008d0710306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000910710306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000950710306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000990710306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004009d07010c45726100009d07102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000a10710306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400280120543a3a496e6465780000a50710306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000a907086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400cd01013042616c616e63654f663c543e0000941853797374656d011853797374656d401c4163636f756e7401010402000c510100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e7400001c040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010020180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e00001c040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010405102c8000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e73696344617461010104051c300400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d626572010010200000000000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002c80000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010034040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004404001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e7401001c100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104022c91020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000950204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100a80400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100a80400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500008902040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e019d0201501830426c6f636b57656967687473ad026d01624fd75a00070088526a740200400102c0cd1700010700028fa54b0200d000010700e6bd4f570200f00001000002c0cd1700010700a423c0680200200101070088526a7402004001010700a2941a1d0200500002c0cd170000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468bd023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e7410206009000000000000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874c50240089d26020000000000dce704000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6ec9026103386b696c742d7370697269746e6574386b696c742d7370697269746e6574010000005c2b00000000000038df6acb689907609b0400000037e397fc7c91f5e401000000bc9d89904f5b923f0100000037c8bb1350a9a2a803000000f3ff14d5ab5270590300000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000dd718d5cc53262d401000000ea93e3f16f3d69620200000026609555c065660302000000a47b7d544994c99b0100000045bfba51a310b2230100000006000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e2853533538507265666978dc08260014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01d902002454696d657374616d70012454696d657374616d70080c4e6f7701001020000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100a8040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f01dd020004344d696e696d756d506572696f6410207017000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00021c496e6469636573011c496e646963657304204163636f756e74730001040210e1020400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e01e5020174041c4465706f736974184000b47cf328350000000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e01f102052042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200f502040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e20526573657276657301010402000503040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e01110301780c484578697374656e7469616c4465706f736974184000a0724e18090000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b731c103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d617852657365727665731c1032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01150306485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100190340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e01001d0304000000018004604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00071041757261011041757261082c417574686f726974696573010021030400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f74010031032000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000171c53657373696f6e011c53657373696f6e1c2856616c696461746f7273010035030400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e64657801001c100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e6765640100a8040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010039030400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010045030400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050041030400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405490300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e015103018400015503164050617261636861696e5374616b696e67014050617261636861696e5374616b696e6740544d617853656c656374656443616e6469646174657301001c100000000004090120546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c6563746564206174206561636820726f756e642e14526f756e640100590350000000000000000000000000140000000000000004e82043757272656e7420726f756e64206e756d62657220616e64206e65787420726f756e64207363686564756c6564207472616e736974696f6e2e384c61737444656c65676174696f6e01010405005d03200000000000000000140d012044656c65676174696f6e20696e666f726d6174696f6e20666f7220746865206c61746573742073657373696f6e20696e20776869636820612064656c656761746f722c2064656c6567617465642e000501204974206d6170732066726f6d20616e206163636f756e7420746f20746865206e756d626572206f662064656c65676174696f6e7320696e20746865206c617374982073657373696f6e20696e2077686963682074686579202872652d2964656c6567617465642e3844656c656761746f7253746174650001040500610304000c802044656c65676174696f6e207374616b696e6720696e666f726d6174696f6e2e00cc204974206d6170732066726f6d20616e206163636f756e7420746f206974732064656c65676174696f6e2064657461696c732e3443616e646964617465506f6f6c00010405006503040010a420546865207374616b696e6720696e666f726d6174696f6e20666f7220612063616e6469646174652e00b0204974206d6170732066726f6d20616e206163636f756e7420746f2069747320696e666f726d6174696f6e2eb8204d6f72656f7665722c20697420636f756e747320746865206e756d626572206f662063616e646964617465732e5c436f756e746572466f7243616e646964617465506f6f6c01001c100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617048546f74616c436f6c6c61746f725374616b650100790380000000000000000000000000000000000000000000000000000000000000000014f420546f74616c2066756e6473206c6f636b656420746f206261636b207468652063757272656e746c792073656c656374656420636f6c6c61746f72732ed0205468652073756d206f6620616c6c20636f6c6c61746f7220616e642074686569722064656c656761746f72207374616b65732e002101204e6f74653a20546865726520617265206d6f72652066756e6473206c6f636b656420627920746869732070616c6c65742c2073696e636520746865206261636b696e6720666f720901206e6f6e20636f6c6c6174696e672063616e64696461746573206973206e6f7420696e636c7564656420696e205b546f74616c436f6c6c61746f725374616b655d2e34546f7043616e6469646174657301007d03040028e82054686520636f6c6c61746f722063616e64696461746573207769746820746865206869676865737420616d6f756e74206f66207374616b652e00190120456163682074696d6520746865207374616b65206f66206120636f6c6c61746f7220697320696e637265617365642c20697420697320636865636b65642077686574686572050120746869732070757368657320616e6f746865722063616e646964617465206f7574206f6620746865206c6973742e205768656e20746865207374616b652069732101207265647563656420686f77657665722c206974206973206e6f7420636865636b656420696620616e6f746865722063616e64696461746520686173206d6f7265207374616b652c11012073696e6365207468697320776f756c64207265717569726520697465726174696e67206f7665722074686520656e74697265205b43616e646964617465506f6f6c5d2e001501205468657265206d75737420616c77617973206265206d6f72652063616e64696461746573207468616e205b4d617853656c656374656443616e646964617465735d20736f0d012074686174206120636f6c6c61746f722063616e2064726f70206f7574206f662074686520636f6c6c61746f7220736574206279207265647563696e672074686569721c207374616b652e3c496e666c6174696f6e436f6e66696701008503c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046420496e666c6174696f6e20636f6e66696775726174696f6e2e24556e7374616b696e670101040500910304001088205468652066756e64732077616974696e6720746f20626520756e7374616b65642e001d01204974206d6170732066726f6d206163636f756e747320746f20616c6c207468652066756e64732061646472657373656420746f207468656d20696e20746865206675747572652020626c6f636b732e644d6178436f6c6c61746f7243616e6469646174655374616b65010018400000000000000000000000000000000004cc20546865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e6469646174652063616e207374616b652e4c4c617374526577617264526564756374696f6e010010200000000000000000140d0120546865207965617220696e20776869636820746865206c617374206175746f6d6174696320726564756374696f6e206f66207468652072657761726420726174657328206f636375727265642e00250120497420737461727473206174207a65726f2061742067656e6573697320616e6420696e6372656d656e7473206279206f6e6520657665727920424c4f434b535f5045525f5945415234206d616e7920626c6f636b732e38426c6f636b73417574686f726564010104050010200000000000000000080d0120546865206e756d626572206f6620617574686f72656420626c6f636b7320666f7220636f6c6c61746f72732e20497420697320757064617465642076696120746865b020606e6f74655f617574686f726020686f6f6b207768656e20617574686f72696e67206120626c6f636b202e38426c6f636b73526577617264656401010405001020000000000000000024210120546865206e756d626572206f6620626c6f636b7320666f7220776869636820726577617264732068617665206265656e20636c61696d656420627920616e20616464726573732e00190120466f7220636f6c6c61746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f7265642e2049742069732075706461746564207768656ecc20696e6372656d656e74696e6720636f6c6c61746f7220726577617264732c20656974686572207768656e2063616c6c696e67e02060696e635f636f6c6c61746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e00250120466f722064656c656761746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f726564206f662074686520636f6c6c61746f722e497420697305012075706461746564207768656e20696e6372656d656e74696e672064656c656761746f7220726577617264732c20656974686572207768656e2063616c6c696e67e42060696e635f64656c656761746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e1c5265776172647301010405001840000000000000000000000000000000000c01012054686520616363756d756c61746564207265776172647320666f7220636f6c6c61746f722063616e6469646174657320616e642064656c656761746f72732e001101204974206d6170732066726f6d206163636f756e747320746f20746865697220746f74616c20726577617264732073696e636520746865206c617374207061796f75742e34466f7263654e6577526f756e640100a804000001a10301883c444d696e426c6f636b73506572526f756e6410202c0100000000000004d4204d696e696d756d206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e64732063616e206c6173742e5444656661756c74426c6f636b73506572526f756e641020580200000000000008fc2044656661756c74206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e6473206c6173742c2061732073657420696e207468655c2067656e6573697320636f6e66696775726174696f6e2e345374616b654475726174696f6e1020e0c40000000000000c0501204e756d626572206f6620626c6f636b7320666f7220776869636820756e7374616b65642062616c616e63652077696c6c207374696c6c206265206c6f636b6564f0206265666f72652069742063616e20626520756e6c6f636b6564206279206163746976656c792063616c6c696e67207468652065787472696e7369634c2060756e6c6f636b5f756e7374616b6564602e3845786974517565756544656c61791c1002000000080901204e756d626572206f6620726f756e6473206120636f6c6c61746f722068617320746f207374617920616374697665206166746572207375626d697474696e672061c4207265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e304d696e436f6c6c61746f72731c1010000000080d01204d696e696d756d206e756d626572206f6620636f6c6c61746f72732073656c65637465642066726f6d2074686520736574206f662063616e64696461746573206174602065766572792076616c69646174696f6e20726f756e642e504d696e5265717569726564436f6c6c61746f72731c1004000000081101204d696e696d756d206e756d626572206f6620636f6c6c61746f72732077686963682063616e6e6f74206c6561766520746865206e6574776f726b2069662074686572653c20617265206e6f206f74686572732e584d617844656c65676174696f6e73506572526f756e641c1001000000140101204d6178696d756d206e756d626572206f662064656c65676174696f6e732077686963682063616e206265206d6164652077697468696e207468652073616d651c20726f756e642e000d01204e4f54453a20546f2070726576656e742072652d64656c65676174696f6e2d7265776172642061747461636b732c2077652073686f756c64206b65657020746869732c20746f206265206f6e652e604d617844656c656761746f7273506572436f6c6c61746f721c102300000004e4204d6178696d756d206e756d626572206f662064656c656761746f727320612073696e676c6520636f6c6c61746f722063616e20686176652e404d6178546f7043616e646964617465731c104b00000004a0204d6178696d756d2073697a65206f662074686520746f702063616e64696461746573207365742e404d696e436f6c6c61746f725374616b6518400000e8890423c78a0000000000000000080901204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520656c65637465642061732076616c696461746f723420666f72206120726f756e642e644d696e436f6c6c61746f7243616e6469646174655374616b6518400000e8890423c78a0000000000000000080501204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520616464656420746f2074686520736574206f66302063616e646964617465732e444d696e44656c656761746f725374616b651840000082dfe40d4700000000000000000004f8204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f206265636f6d6520612064656c656761746f722e484d6178556e7374616b6552657175657374731c100a00000028e8204d6178206e756d626572206f6620636f6e63757272656e742061637469766520756e7374616b696e67207265717565737473206265666f72652c20756e6c6f636b696e672e001501204e4f54453a20546f2070726f7465637420616761696e737420697272656d6f766162696c697479206f6620612063616e646964617465206f722064656c656761746f722cf4207765206f6e6c7920616c6c6f7720666f72204d6178556e7374616b655265717565737473202d2031206d616e79206d616e75616c20756e7374616b6501012072657175657374732e20546865206c617374206f6e6520736572766573206173206120706c616365686f6c64657220666f7220746865206361736573206f66f02063616c6c696e672065697468657220606b69636b5f64656c656761746f72602c20666f7263655f72656d6f76655f63616e64696461746560206f7209012060657865637574655f6c656176655f63616e64696461746573602e204f74686572776973652c2061207573657220636f756c64206d6178206f75742074686569720d0120756e7374616b6520726571756573747320616e642070726576656e74207468656d73656c7665732066726f6d206265696e67206b69636b65642066726f6d20746865f020736574206f662063616e646964617465732f64656c656761746f727320756e74696c207468657920756e6c6f636b2074686569722066756e64732e484e6574776f726b5265776172645374617274102048a3c800000000000c110120546865207374617274696e6720626c6f636b206e756d62657220666f7220746865206e6574776f726b20726577617264732e204f6e6365207468652063757272656e74090120626c6f636b206e756d626572206578636565647320746869732073746172742c207468652062656e65666963696172792077696c6c2072656365697665207468658420636f6e666967757265642072657761726420696e206561636820626c6f636b2e444e6574776f726b526577617264526174658c2000008a5d784563010c0d0120546865207261746520696e2070657263656e7420666f7220746865206e6574776f726b207265776172647320776869636820617265206261736564206f6e207468650901206d6178696d756d206e756d626572206f6620636f6c6c61746f727320616e6420746865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e1c207374616b652e01a5031528417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000141c41757261457874011c41757261457874042c417574686f72697469657301002103040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c790120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c20616c77617973f0206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e00000000182444656d6f6372616379012444656d6f6372616379303c5075626c696350726f70436f756e7401001c100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f70730100a903040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f66000104051c790504000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e7401001c100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b656401001c100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f66000104051c810504000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f6601010405008d05e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100a80400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c0000a505040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c697374000104062ca90504000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e73010104062ca80400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e284d657461646174614f6600010402a02c040018ec2047656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720616e792070726f706f73616c206f72207265666572656e64756d2e6901205468652060507265696d61676548617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e01b9030190303c456e6163746d656e74506572696f641020201c00000000000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f641020e0c400000000000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f641020e0c400000000000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f641020e0c4000000000000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400080c6a47e8d0300000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f776564a804010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f641020840300000000000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f641020e0c400000000000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f7465731c106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c731c1064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f736974731c1064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c69737465641c106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e01ad051e1c436f756e63696c011c436f756e63696c182450726f706f73616c730100b105040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062cb503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e67000104062cb505040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e7401001c100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010035030400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01c90301a40001b9051f48546563686e6963616c436f6d6d69747465650148546563686e6963616c436f6d6d6974746565182450726f706f73616c730100bd05040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062cb503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e67000104062cb505040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e7401001c100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010035030400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01d90301b40001c105204c546563686e6963616c4d656d62657273686970014c546563686e6963616c4d656d62657273686970081c4d656d626572730100c505040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01dd0301b80001c9052220547265617375727901205472656173757279103450726f706f73616c436f756e7401001c100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c73000104051ccd050400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c730100d105040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e01e10301bc1c3050726f706f73616c426f6e64d5051050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d1840000082dfe40d47000000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756dd9050400044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f641020c0a8000000000000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726ed50510000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c65744964dd05206b696c742f7473790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c731c10640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e01e105231c5574696c6974790001e50301c0044c626174636865645f63616c6c735f6c696d69741c10aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01e505281c56657374696e67011c56657374696e67081c56657374696e670001040200e905040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100f10504000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e010d0401c408444d696e5665737465645472616e73666572184000407a10f35a0000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c65731c101c0000000001f50529245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e64610101040510f9050400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b75700001040504cc040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01150401c808344d6178696d756d57656967687424280700a0db215d0200000104290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b1c1032000000041d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0109062a1450726f7879011450726f7879081c50726f7869657301010405000d064400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e747301010405001d0644000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e011d0401d4184050726f78794465706f7369744261736518400020f7a54b330000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f72184000f4a92b80010000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f786965731c100a00000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e671c100a00000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f7369744261736518400020f7a54b330000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72184000e8535700030000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e012d062b20507265696d6167650120507265696d6167650824537461747573466f72000104062c31060400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f72000104063d06410604000001250401e0000145062c38546970734d656d626572736869700138546970734d656d62657273686970081c4d656d6265727301004906040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01290401e400014d062d1054697073011054697073081054697073000104052c510604000c650120546970734d6170207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e3d012054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c7265616479802067756172616e7465656420746f20626520612073656375726520686173682e1c526561736f6e73000104062c3004000849012053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e610120696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e012d0401e8144c4d6178696d756d526561736f6e4c656e6774681c10004000000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756548446174614465706f73697450657242797465184000743ba40b00000000000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e30546970436f756e74646f776e1020201c0000000000000445012054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e3454697046696e646572734665655d060400043501205468652070657263656e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e505469705265706f72744465706f73697442617365184000f45628fa320000000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e0161062e204d756c746973696701204d756c746973696704244d756c746973696773000108050265066906040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01310401ec0c2c4465706f73697442617365184000801b84ee320000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f72184000743ba40b00000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f726965731c104000000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e0171062f144374797065011443747970650418437479706573000104022c750604001060204354797065732073746f726564206f6e20636861696e2e001901204974206d6170732066726f6d2061204354797065206861736820746f206974732063726561746f7220616e6420626c6f636b206e756d62657220696e207768696368206974342077617320637265617465642e01390401f4000179063d2c4174746573746174696f6e012c4174746573746174696f6e08304174746573746174696f6e73000104022c7d0604000c78204174746573746174696f6e732073746f726564206f6e20636861696e2e00cc204974206d6170732066726f6d206120636c61696d206861736820746f207468652066756c6c206174746573746174696f6e2e5045787465726e616c4174746573746174696f6e7301010805028506a804000ca02044656c656761746564206174746573746174696f6e732073746f726564206f6e20636861696e2e00e8204974206d6170732066726f6d20612064656c65676174696f6e20494420746f206120766563746f72206f6620636c61696d206861736865732e013d0401f8081c4465706f7369741840001cc9dd006e0000000000000000000004e420546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720616e206174746573746174696f6e2e604d617844656c6567617465644174746573746174696f6e731c10e803000008090120546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732077686963682063616e206265206d61646520627954207468652073616d652064656c65676174696f6e2e0189063e2844656c65676174696f6e012844656c65676174696f6e083c44656c65676174696f6e4e6f646573000104022c8d0604000c882044656c65676174696f6e206e6f6465732073746f726564206f6e20636861696e2e00b0204974206d6170732066726f6d2061206e6f646520494420746f20746865206e6f64652064657461696c732e5444656c65676174696f6e4869657261726368696573000104022c9d0604000ca02044656c65676174696f6e2068696572617263686965732073746f726564206f6e20636861696e2e00dc204974206d61707320666f7220612028726f6f7429206e6f646520494420746f20746865206869657261726368792064657461696c732e015104010501181c4465706f73697418400080c6a47e8d0300000000000000000004dc20546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720612064656c65676174696f6e2e584d61785369676e6174757265427974654c656e677468dc08400000384d61785265766f636174696f6e731c1005000000047c204d6178696d756d206e756d626572206f66207265766f636174696f6e732e2c4d617852656d6f76616c731c100500000004f4204d6178696d756d206e756d626572206f662072656d6f76616c732e2053686f756c642062652073616d65206173204d61785265766f636174696f6e733c4d6178506172656e74436865636b731c1005000000080d01204d6178696d756d206e756d626572206f6620757077617264732074726176657273616c73206f66207468652064656c65676174696f6e20747265652066726f6d2061f0206e6f646520746f2074686520726f6f7420616e64207468757320746865206465707468206f66207468652064656c65676174696f6e20747265652e2c4d61784368696c6472656e1c10e80300000c0d01204d6178696d756d206e756d626572206f6620616c6c206368696c6472656e20666f7220612064656c65676174696f6e206e6f64652e20466f7220612062696e617279fc20747265652c20746869732073686f756c6420626520747769636520746865206d6178696d756d206465707468206f662074686520747265652c20692e652e5c206032205e204d6178506172656e74436865636b73602e01a1063f0c446964010c446964100c4469640001040200a50604000c5820444944732073746f726564206f6e20636861696e2e00c8204974206d6170732066726f6d206120444944206964656e74696669657220746f20746865204449442064657461696c732e4053657276696365456e64706f696e74730001080502c5069d0404000ca0205365727669636520656e64706f696e7473206173736f636961746564207769746820444944732e000901204974206d6170732066726f6d2028444944206964656e7469666965722c20736572766963652049442920746f2074686520736572766963652064657461696c732e44446964456e64706f696e7473436f756e7401010402001c10000000000cac20436f756e746572206f66207365727669636520656e64706f696e747320666f722065616368204449442e00cc204974206d6170732066726f6d2028444944206964656e7469666965722920746f20612033322d62697420636f756e7465722e30446964426c61636b6c6973740001040200b00400141d012054686520736574206f66204449447320746861742068617665206265656e2064656c6574656420616e642063616e6e6f74207468657265666f726520626520637265617465647020616761696e20666f7220736563757269747920726561736f6e732e002101204974206d6170732066726f6d206120444944206964656e74696669657220746f206120756e6974207475706c652c20666f72207468652073616b65206f6620747261636b696e674420444944206964656e746966696572732e016d04010d01382c426173654465706f736974184000008d49fd1a07000000000000000000100d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974f820746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f73697473fc20696e6372656173652062792074686520616d6f756e74206f662075736564206b65797320616e64207365727669636520656e64706f696e74732e20546865c8206465706f7369742063616e206265207265636c61696d6564207768656e20746865204449442069732064656c657465642e5853657276696365456e64706f696e744465706f736974184000b0156a084a00000000000000000000100d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368207365727669636520656e64706f696e7409012061732061206465706f73697420746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e205468651501206465706f7369742063616e206265207265636c61696d6564207768656e20746865207365727669636520656e64706f696e742069732072656d6f766564206f722074686534204449442064656c657465642e284b65794465706f736974184000dc20749701000000000000000000000805012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368206164646564206b65792061732061e4206465706f73697420746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e0c466565184000203d88792d000000000000000000000c09012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f7220656163682044494420617320612066656520746f0d0120696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206665652077696c6c206e6f74206765748820726566756e646564207768656e20746865204449442069732064656c657465642e4c4d61785075626c69634b6579735065724469641c10140000000c1101204d6178696d756d206e756d626572206f6620746f74616c207075626c6963206b6579732077686963682063616e2062652073746f7265642070657220444944206b6579d8206964656e7469666965722e205468697320696e636c7564657320746865206f6e65732063757272656e746c79207573656420666f72f02061757468656e7469636174696f6e2c206b65792061677265656d656e742c206174746573746174696f6e2c20616e642064656c65676174696f6e2e584d61784e65774b657941677265656d656e744b6579731c100a000000081501204d6178696d756d206e756d626572206f66206b65792061677265656d656e74206b65797320746861742063616e20626520616464656420696e2061206372656174696f6e2c206f7065726174696f6e2e604d6178546f74616c4b657941677265656d656e744b6579731c1013000000101101204d6178696d756d206e756d626572206f6620746f74616c206b65792061677265656d656e74206b65797320746861742063616e2062652073746f72656420666f7220613420444944207375626a6563742e00c42053686f756c642062652067726561746572207468616e20604d61784e65774b657941677265656d656e744b657973602e4c4d6178426c6f636b73547856616c696469747910202c0100000000000008ec20546865206d6178696d756d206e756d626572206f6620626c6f636b732061204449442d617574686f72697a6564206f7065726174696f6e2069739420636f6e736964657265642076616c696420616674657220697473206372656174696f6e2e644d61784e756d6265724f6653657276696365735065724469641c101900000004fc20546865206d6178696d756d206e756d626572206f6620736572766963657320746861742063616e2062652073746f72656420756e6465722061204449442e484d61785365727669636549644c656e6774681c1032000000049020546865206d6178696d756d206c656e677468206f66206120736572766963652049442e504d617853657276696365547970654c656e6774681c103200000004c820546865206d6178696d756d206c656e677468206f66206120736572766963652074797065206465736372697074696f6e2e684d61784e756d6265724f665479706573506572536572766963651c100100000004090120546865206d6178696d756d206e756d626572206f662061207479706573206465736372697074696f6e20666f722061207365727669636520656e64706f696e742e4c4d61785365727669636555726c4c656e6774681c10c8000000049420546865206d6178696d756d206c656e677468206f66206120736572766963652055524c2e644d61784e756d6265724f6655726c73506572536572766963651c100200000004d420546865206d6178696d756d206e756d626572206f6620612055524c7320666f722061207365727669636520656e64706f696e742e01c9064024496e666c6174696f6e000000084c496e697469616c506572696f644c656e677468102048a3c800000000000c050120546865206c656e677468206f662074686520696e697469616c20706572696f6420696e2077686963682074686520636f6e7374616e74207265776172642069731101206d696e7465642e204f6e6365207468652063757272656e7420626c6f636b206578636565647320746869732c207265776172647320617265206e6f206675727468657220206973737565642e4c496e697469616c506572696f64526577617264184036f539fdaeb30200000000000000000008fc2054686520616d6f756e74206f66206e65776c792069737375656420746f6b656e732070657220626c6f636b20647572696e672074686520696e697469616c2020706572696f642e0042244469644c6f6f6b757001244469644c6f6f6b75700834436f6e6e656374656444696473000104021501cd06040004a8204d617070696e672066726f6d206163636f756e74206964656e7469666965727320746f20444944732e44436f6e6e65637465644163636f756e74730001080202d106b004000cbc204d617070696e672066726f6d2028444944202b206163636f756e74206964656e74696669657229202d3e2028292e0d012054686520656d707479207475706c65206973207573656420617320612073656e74696e656c2076616c756520746f2073696d706c7920696e64696361746520746865982070726573656e6365206f66206120676976656e207475706c6520696e20746865206d61702e01c104011101041c4465706f736974184000c0afd69136000000000000000000000c0d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974110120746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f7369742063616e2062658c207265636c61696d6564207768656e20746865204449442069732064656c657465642e01d5064324576562334e616d65730124576562334e616d65730c144f776e6572000104022501d90604000488204d6170206f66206e616d65202d3e206f776e6572736869702064657461696c732e144e616d65730001040200250104000458204d6170206f66206f776e6572202d3e206e616d652e1842616e6e6564000104022501b004000c4c204d6170206f66206e616d65202d3e2028292e00e02049662061206e616d65206b65792069732070726573656e742c20746865206e616d652069732063757272656e746c792062616e6e65642e01d1040121010c1c4465706f736974184000d450a85d6b0000000000000000000004bc2054686520616d6f756e74206f66204b494c5420746f206465706f73697420746f20636c61696d2061206e616d652e344d696e4e616d654c656e6774681c1003000000048820546865206d696e20656e636f646564206c656e677468206f662061206e616d652e344d61784e616d654c656e6774681c1020000000048820546865206d617820656e636f646564206c656e677468206f662061206e616d652e01dd0644445075626c696343726564656e7469616c7301445075626c696343726564656e7469616c73082c43726564656e7469616c730001080502e106e50604000cc020546865206d6170206f66207075626c69632063726564656e7469616c7320616c72656164792061747465737465642ef0204974206d6170732066726f6d206120287375626a656374206964202b2063726564656e7469616c20696429202d3e20746865206372656174696f6e6c2064657461696c73206f66207468652063726564656e7469616c2e4843726564656e7469616c5375626a65637473000104022c310104001025012041207265766572736520696e646578206d617070696e672066726f6d2063726564656e7469616c20494420746f20746865207375626a656374207468652063726564656e7469616c3c207761732069737375656420746f2e001901204974206974207573656420746f20706572666f726d20656666696369656e74206c6f6f6b7570206f662063726564656e7469616c7320676976656e2074686569722049442e01d504012d010c1c4465706f7369741840005c6a51fc45000000000000000000000411012054686520616d6f756e74206f6620746f6b656e7320746f2072657365727665207768656e20617474657374696e672061207075626c69632063726564656e7469616c2e584d6178456e636f646564436c61696d734c656e6774681c10a0860100040d0120546865206d6178696d756d206c656e67746820696e206279746573206f662074686520656e636f64656420636c61696d73206f6620612063726564656e7469616c2e484d61785375626a65637449644c656e6774681c100c01000008e820546865206d6178696d756d206c656e67746820696e206279746573206f6620746865207261772063726564656e7469616c207375626a65637430206964656e7469666965722e01e906453c50617261636861696e53797374656d013c50617261636861696e53797374656d545450656e64696e6756616c69646174696f6e436f64650100300400187d0120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f206265206170706c6965642e00c10120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f766572777269746520746865205b603a636f6465605d5b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455dad012077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f63657373207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e000501205b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d3a2073705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f4445444e657756616c69646174696f6e436f64650000300400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000ed0404000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f64650100a8040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d62657201001c1000000000041d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e60557067726164655265737472696374696f6e5369676e616c0100ed0604001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f660000f504040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000f50604001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e000009070400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d71634865616401000d0780000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d7163486561647301001107040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301001c10000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01001c10000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d6573736167657301001d0704000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d657373616765730100a90204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d657373616765730100a902040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e84416e6e6f756e63656448726d704d6573736167657350657243616e64696461746501001c100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000240400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000240400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e44417574686f72697a65645570677261646500002507040004b820546865206e65787420617574686f72697a656420757067726164652c206966207468657265206973206f6e652e60437573746f6d56616c69646174696f6e486561644461746100003004000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00190120536565205b6050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f64617461605d20666f72206d6f726520696e666f726d6174696f6e2e01e504019d0100012907503450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100a90110640000000000000000512458636d705175657565012458636d7051756575652844496e626f756e6458636d7053746174757301002d070400049420537461747573206f662074686520696e626f756e642058434d50206368616e6e656c732e4c496e626f756e6458636d704d657373616765730101080205450730040004190120496e626f756e64206167677265676174652058434d50206d657373616765732e2049742063616e206f6e6c79206265206f6e6520706572205061726149642f626c6f636b2e484f7574626f756e6458636d70537461747573010049070400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205550730040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402a90130040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e6669670100590774020000000500000001000000821a06000008000700c817a804020004000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e284f76657277656967687400010405105d07040010050120546865206d657373616765732074686174206578636565646564206d617820696e646976696475616c206d65737361676520776569676874206275646765742e003901205468657365206d657373616765207374617920696e20746869732073746f72616765206d617020756e74696c207468657920617265206d616e75616c6c79206469737061746368656420766961582060736572766963655f6f766572776569676874602e50436f756e746572466f724f76657277656967687401001c100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c4f766572776569676874436f756e7401001020000000000000000008690120546865206e756d626572206f66206f766572776569676874206d657373616765732065766572207265636f7264656420696e20604f766572776569676874602e20416c736f20646f75626c657320617320746865206e6578748420617661696c61626c652066726565206f76657277656967687420696e6465782e38517565756553757370656e6465640100a804000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e01190501a10100016107522c506f6c6b61646f7458636d00011d0501ad0100016507532843756d756c757358636d0000018102000169075420446d7051756575650120446d7051756575651434436f6e66696775726174696f6e01006d07280700e40b540202000400044c2054686520636f6e66696775726174696f6e2e2450616765496e646578010071074000000000000000000000000000000000044020546865207061676520696e6465782e145061676573010104021c750704000444205468652071756575652070616765732e284f766572776569676874000104021079070400046420546865206f766572776569676874206d657373616765732e50436f756e746572466f724f76657277656967687401001c100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617001710501850200017d07558107042048436865636b4e6f6e5a65726f53656e6465728907b040436865636b5370656356657273696f6e8d071c38436865636b547856657273696f6e91071c30436865636b47656e6573697395072c38436865636b4d6f7274616c69747999072c28436865636b4e6f6e6365a107b02c436865636b576569676874a507b0604368617267655472616e73616374696f6e5061796d656e74a907b04d04"} \ No newline at end of file diff --git a/packages/augment-api/src/interfaces/augment-api-consts.ts b/packages/augment-api/src/interfaces/augment-api-consts.ts index b3fba9062..499d4e269 100644 --- a/packages/augment-api/src/interfaces/augment-api-consts.ts +++ b/packages/augment-api/src/interfaces/augment-api-consts.ts @@ -131,16 +131,22 @@ declare module '@polkadot/api-base/types/consts' { did: { /** * The amount of balance that will be taken for each DID as a deposit - * to incentivise fair use of the on chain storage. The deposit can be - * reclaimed when the DID is deleted. + * to incentivise fair use of the on chain storage. The deposits + * increase by the amount of used keys and service endpoints. The + * deposit can be reclaimed when the DID is deleted. **/ - deposit: u128 & AugmentedConst; + baseDeposit: u128 & AugmentedConst; /** * The amount of balance that will be taken for each DID as a fee to * incentivise fair use of the on chain storage. The fee will not get * refunded when the DID is deleted. **/ fee: u128 & AugmentedConst; + /** + * The amount of balance that will be taken for each added key as a + * deposit to incentivise fair use of the on chain storage. + **/ + keyDeposit: u128 & AugmentedConst; /** * The maximum number of blocks a DID-authorized operation is * considered valid after its creation. @@ -188,6 +194,13 @@ declare module '@polkadot/api-base/types/consts' { * Should be greater than `MaxNewKeyAgreementKeys`. **/ maxTotalKeyAgreementKeys: u32 & AugmentedConst; + /** + * The amount of balance that will be taken for each service endpoint + * as a deposit to incentivise fair use of the on chain storage. The + * deposit can be reclaimed when the service endpoint is removed or the + * DID deleted. + **/ + serviceEndpointDeposit: u128 & AugmentedConst; }; didLookup: { /** @@ -216,6 +229,27 @@ declare module '@polkadot/api-base/types/consts' { **/ initialPeriodReward: u128 & AugmentedConst; }; + multisig: { + /** + * The base amount of currency needed to reserve for creating a multisig execution or to + * store a dispatch call for later. + * + * This is held for an additional storage item whose value size is + * `4 + sizeof((BlockNumber, Balance, AccountId))` bytes and whose key size is + * `32 + sizeof(AccountId)` bytes. + **/ + depositBase: u128 & AugmentedConst; + /** + * The amount of currency needed per unit threshold when creating a multisig execution. + * + * This is held for adding 32 bytes more into a pre-existing storage value. + **/ + depositFactor: u128 & AugmentedConst; + /** + * The maximum amount of signatories allowed in the multisig. + **/ + maxSignatories: u32 & AugmentedConst; + }; parachainStaking: { /** * Default number of blocks validation rounds last, as set in the diff --git a/packages/augment-api/src/interfaces/augment-api-errors.ts b/packages/augment-api/src/interfaces/augment-api-errors.ts index 93a87cc40..e61f6f75f 100644 --- a/packages/augment-api/src/interfaces/augment-api-errors.ts +++ b/packages/augment-api/src/interfaces/augment-api-errors.ts @@ -290,6 +290,10 @@ declare module '@polkadot/api-base/types/errors' { * The given account did not vote on the referendum. **/ NotVoter: AugmentedError; + /** + * The preimage does not exist. + **/ + PreimageNotExist: AugmentedError; /** * Proposal still blacklisted **/ @@ -503,6 +507,64 @@ declare module '@polkadot/api-base/types/errors' { **/ Permanent: AugmentedError; }; + multisig: { + /** + * Call is already approved by this signatory. + **/ + AlreadyApproved: AugmentedError; + /** + * The data to be stored is already stored. + **/ + AlreadyStored: AugmentedError; + /** + * The maximum weight information provided was too low. + **/ + MaxWeightTooLow: AugmentedError; + /** + * Threshold must be 2 or greater. + **/ + MinimumThreshold: AugmentedError; + /** + * Call doesn't need any (more) approvals. + **/ + NoApprovalsNeeded: AugmentedError; + /** + * Multisig operation not found when attempting to cancel. + **/ + NotFound: AugmentedError; + /** + * No timepoint was given, yet the multisig operation is already underway. + **/ + NoTimepoint: AugmentedError; + /** + * Only the account that originally created the multisig is able to cancel it. + **/ + NotOwner: AugmentedError; + /** + * The sender was contained in the other signatories; it shouldn't be. + **/ + SenderInSignatories: AugmentedError; + /** + * The signatories were provided out of order; they should be ordered. + **/ + SignatoriesOutOfOrder: AugmentedError; + /** + * There are too few signatories in the list. + **/ + TooFewSignatories: AugmentedError; + /** + * There are too many signatories in the list. + **/ + TooManySignatories: AugmentedError; + /** + * A timepoint was given, yet no multisig operation is underway. + **/ + UnexpectedTimepoint: AugmentedError; + /** + * A different timepoint was given to the multisig operation that is underway. + **/ + WrongTimepoint: AugmentedError; + }; parachainStaking: { /** * The delegator has already previously delegated the collator @@ -659,7 +721,7 @@ declare module '@polkadot/api-base/types/errors' { }; parachainSystem: { /** - * The inherent which supplies the host configuration did not run this block + * The inherent which supplies the host configuration did not run this block. **/ HostConfigurationNotAvailable: AugmentedError; /** @@ -671,16 +733,16 @@ declare module '@polkadot/api-base/types/errors' { **/ NotScheduled: AugmentedError; /** - * Attempt to upgrade validation function while existing upgrade pending + * Attempt to upgrade validation function while existing upgrade pending. **/ OverlappingUpgrades: AugmentedError; /** - * Polkadot currently prohibits this parachain from upgrading its validation function + * Polkadot currently prohibits this parachain from upgrading its validation function. **/ ProhibitedByPolkadot: AugmentedError; /** * The supplied validation function has compiled into a blob larger than Polkadot is - * willing to run + * willing to run. **/ TooBig: AugmentedError; /** @@ -688,7 +750,7 @@ declare module '@polkadot/api-base/types/errors' { **/ Unauthorized: AugmentedError; /** - * The inherent which supplies the validation data did not run this block + * The inherent which supplies the validation data did not run this block. **/ ValidationDataNotAvailable: AugmentedError; }; diff --git a/packages/augment-api/src/interfaces/augment-api-events.ts b/packages/augment-api/src/interfaces/augment-api-events.ts index e87878e06..99a192737 100644 --- a/packages/augment-api/src/interfaces/augment-api-events.ts +++ b/packages/augment-api/src/interfaces/augment-api-events.ts @@ -9,7 +9,7 @@ import type { ApiTypes, AugmentedEvent } from '@polkadot/api-base/types'; import type { Bytes, Null, Option, Result, U8aFixed, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; import type { ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, H256, Perquintill } from '@polkadot/types/interfaces/runtime'; -import type { DelegationDelegationHierarchyPermissions, FrameSupportDispatchDispatchInfo, FrameSupportTokensMiscBalanceStatus, PalletDemocracyVoteAccountVote, PalletDemocracyVoteThreshold, PalletDidLookupLinkableAccountLinkableAccountId, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpRuntimeDispatchError, SpWeightsWeightV2Weight, SpiritnetRuntimeProxyType, XcmV3MultiLocation, XcmV3MultiassetMultiAssets, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation } from '@polkadot/types/lookup'; +import type { DelegationDelegationHierarchyPermissions, FrameSupportDispatchDispatchInfo, FrameSupportTokensMiscBalanceStatus, PalletDemocracyMetadataOwner, PalletDemocracyVoteAccountVote, PalletDemocracyVoteThreshold, PalletDidLookupLinkableAccountLinkableAccountId, PalletMultisigTimepoint, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpRuntimeDispatchError, SpWeightsWeightV2Weight, SpiritnetRuntimeProxyType, XcmV3MultiLocation, XcmV3MultiassetMultiAssets, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation } from '@polkadot/types/lookup'; export type __AugmentedEvent = AugmentedEvent; @@ -197,6 +197,18 @@ declare module '@polkadot/api-base/types/events' { * An external proposal has been tabled. **/ ExternalTabled: AugmentedEvent; + /** + * Metadata for a proposal or a referendum has been cleared. + **/ + MetadataCleared: AugmentedEvent; + /** + * Metadata for a proposal or a referendum has been set. + **/ + MetadataSet: AugmentedEvent; + /** + * Metadata has been transferred to new owner. + **/ + MetadataTransferred: AugmentedEvent; /** * A proposal has been rejected by referendum. **/ @@ -287,6 +299,10 @@ declare module '@polkadot/api-base/types/events' { * Downward message is invalid XCM. **/ InvalidFormat: AugmentedEvent; + /** + * The maximum number of downward messages was. + **/ + MaxMessagesExhausted: AugmentedEvent; /** * Downward message is overweight and was placed in the overweight queue. **/ @@ -318,6 +334,24 @@ declare module '@polkadot/api-base/types/events' { **/ IndexFrozen: AugmentedEvent; }; + multisig: { + /** + * A multisig operation has been approved by someone. + **/ + MultisigApproval: AugmentedEvent; + /** + * A multisig operation has been cancelled. + **/ + MultisigCancelled: AugmentedEvent; + /** + * A multisig operation has been executed. + **/ + MultisigExecuted: AugmentedEvent], { approving: AccountId32, timepoint: PalletMultisigTimepoint, multisig: AccountId32, callHash: U8aFixed, result: Result }>; + /** + * A new multisig operation has begun. + **/ + NewMultisig: AugmentedEvent; + }; parachainStaking: { /** * The length in blocks for future validation rounds has changed. diff --git a/packages/augment-api/src/interfaces/augment-api-query.ts b/packages/augment-api/src/interfaces/augment-api-query.ts index 0c6ed3456..2c3b2e9cc 100644 --- a/packages/augment-api/src/interfaces/augment-api-query.ts +++ b/packages/augment-api/src/interfaces/augment-api-query.ts @@ -9,7 +9,7 @@ import type { ApiTypes, AugmentedQuery, QueryableStorageEntry } from '@polkadot/ import type { BTreeMap, Bytes, Null, Option, U8aFixed, Vec, bool, u128, u16, u32, u64 } from '@polkadot/types-codec'; import type { AnyNumber, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, Call, H256 } from '@polkadot/types/interfaces/runtime'; -import type { AttestationAttestationsAttestationDetails, CtypeCtypeEntry, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DidDidDetails, DidServiceEndpointsDidEndpoint, FrameSupportDispatchPerDispatchClassWeight, FrameSupportPreimagesBounded, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReserveData, PalletCollectiveVotes, PalletDemocracyReferendumInfo, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupConnectionRecord, PalletDidLookupLinkableAccountLinkableAccountId, PalletDidLookupMigrationState, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletSchedulerScheduled, PalletTipsOpenTip, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesWeb3NameWeb3NameOwnership, ParachainStakingCandidate, ParachainStakingDelegationCounter, ParachainStakingInflationInflationInfo, ParachainStakingRoundInfo, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, PublicCredentialsCredentialsCredentialEntry, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, SpiritnetRuntimeSessionKeys } from '@polkadot/types/lookup'; +import type { AttestationAttestationsAttestationDetails, CtypeCtypeEntry, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DidDidDetails, DidServiceEndpointsDidEndpoint, FrameSupportDispatchPerDispatchClassWeight, FrameSupportPreimagesBounded, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReserveData, PalletCollectiveVotes, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupConnectionRecord, PalletDidLookupLinkableAccountLinkableAccountId, PalletMultisigMultisig, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletSchedulerScheduled, PalletTipsOpenTip, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesWeb3NameWeb3NameOwnership, ParachainStakingCandidate, ParachainStakingDelegationCounter, ParachainStakingInflationInflationInfo, ParachainStakingRoundInfo, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, PublicCredentialsCredentialsCredentialEntry, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, SpiritnetRuntimeSessionKeys } from '@polkadot/types/lookup'; import type { Observable } from '@polkadot/types/types'; export type __AugmentedQuery = AugmentedQuery unknown>; @@ -180,6 +180,15 @@ declare module '@polkadot/api-base/types/storage' { * `ReferendumCount` if there isn't a unbaked referendum. **/ lowestUnbaked: AugmentedQuery Observable, []>; + /** + * General information concerning any proposal or referendum. + * The `PreimageHash` refers to the preimage of the `Preimages` provider which can be a JSON + * dump or IPFS hash of a JSON file. + * + * Consider a garbage collection for a metadata of finished referendums to `unrequest` (remove) + * large preimages. + **/ + metadataOf: AugmentedQuery Observable>, [PalletDemocracyMetadataOwner]>; /** * The referendum to be tabled whenever it would be valid to table an external proposal. * This happens when a referendum needs to be tabled and one of two conditions are met: @@ -252,7 +261,6 @@ declare module '@polkadot/api-base/types/storage' { * Mapping from account identifiers to DIDs. **/ connectedDids: AugmentedQuery Observable>, [PalletDidLookupLinkableAccountLinkableAccountId]>; - migrationStateStore: AugmentedQuery Observable, []>; }; dmpQueue: { /** @@ -282,6 +290,12 @@ declare module '@polkadot/api-base/types/storage' { **/ accounts: AugmentedQuery Observable>>, [u64]>; }; + multisig: { + /** + * The set of open multisig operations. + **/ + multisigs: AugmentedQuery Observable>, [AccountId32, U8aFixed]>; + }; parachainInfo: { parachainId: AugmentedQuery Observable, []>; }; @@ -397,7 +411,7 @@ declare module '@polkadot/api-base/types/storage' { /** * The next authorized upgrade, if there is one. **/ - authorizedUpgrade: AugmentedQuery Observable>, []>; + authorizedUpgrade: AugmentedQuery Observable>, []>; /** * A custom head data that should be returned as result of `validate_block`. * @@ -559,14 +573,6 @@ declare module '@polkadot/api-base/types/storage' { **/ credentialSubjects: AugmentedQuery Observable>, [H256]>; }; - randomnessCollectiveFlip: { - /** - * Series of block headers from the last 81 blocks that acts as random seed material. This - * is arranged as a ring buffer with `block_number % 81` being the index into the `Vec` of - * the oldest hash. - **/ - randomMaterial: AugmentedQuery Observable>, []>; - }; scheduler: { /** * Items to be executed, indexed by the block number that they should be executed on. diff --git a/packages/augment-api/src/interfaces/augment-api-tx.ts b/packages/augment-api/src/interfaces/augment-api-tx.ts index 27fc8ab12..63ab5404b 100644 --- a/packages/augment-api/src/interfaces/augment-api-tx.ts +++ b/packages/augment-api/src/interfaces/augment-api-tx.ts @@ -9,7 +9,7 @@ import type { ApiTypes, AugmentedSubmittable, SubmittableExtrinsic, SubmittableE import type { Bytes, Compact, Option, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, Call, H256, MultiAddress, Perquintill } from '@polkadot/types/interfaces/runtime'; -import type { CumulusPrimitivesParachainInherentParachainInherentData, DelegationDelegationHierarchyPermissions, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidServiceEndpointsDidEndpoint, FrameSupportPreimagesBounded, PalletDemocracyConviction, PalletDemocracyVoteAccountVote, PalletDidLookupAssociateAccountRequest, PalletDidLookupLinkableAccountLinkableAccountId, PalletVestingVestingInfo, PublicCredentialsCredentialsCredential, RuntimeCommonAuthorizationPalletAuthorize, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeSessionKeys, XcmV3MultiLocation, XcmV3WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; +import type { CumulusPrimitivesParachainInherentParachainInherentData, DelegationDelegationHierarchyPermissions, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidServiceEndpointsDidEndpoint, FrameSupportPreimagesBounded, PalletDemocracyConviction, PalletDemocracyMetadataOwner, PalletDemocracyVoteAccountVote, PalletDidLookupAssociateAccountRequest, PalletDidLookupLinkableAccountLinkableAccountId, PalletMultisigTimepoint, PalletVestingVestingInfo, PublicCredentialsCredentialsCredential, RuntimeCommonAuthorizationPalletAuthorize, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeSessionKeys, XcmV3MultiLocation, XcmV3WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; export type __AugmentedSubmittable = AugmentedSubmittable<() => unknown>; export type __SubmittableExtrinsic = SubmittableExtrinsic; @@ -115,10 +115,9 @@ declare module '@polkadot/api-base/types/submittable' { /** * Exactly as `transfer`, except the origin must be root and the source account may be * specified. - * # + * ## Complexity * - Same as transfer, but additional read and write because the source account is not * assumed to be in the overlay. - * # **/ forceTransfer: AugmentedSubmittable<(source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress, Compact]>; /** @@ -147,7 +146,7 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be `Signed` by the transactor. * - * # + * ## Complexity * - Dependent on arguments but not critical, given proper implementations for input config * types. See related functions below. * - It contains a limited number of reads and writes internally and no complex @@ -161,9 +160,6 @@ declare module '@polkadot/api-base/types/submittable' { * - Removing enough funds from an account will trigger `T::DustRemoval::on_unbalanced`. * - `transfer_keep_alive` works the same way as `transfer`, but has an additional check * that the transfer will not kill the origin account. - * --------------------------------- - * - Origin account is already in memory, so no DB operations for them. - * # **/ transfer: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; /** @@ -181,9 +177,8 @@ declare module '@polkadot/api-base/types/submittable' { * - `keep_alive`: A boolean to determine if the `transfer_all` operation should send all * of the funds the account has, causing the sender account to be killed (false), or * transfer everything except at least the existential deposit, which will guarantee to - * keep the sender account alive (true). # + * keep the sender account alive (true). ## Complexity * - O(1). Just like transfer, but reading the user's transferable balance first. - * # **/ transferAll: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, keepAlive: bool | boolean | Uint8Array) => SubmittableExtrinsic, [MultiAddress, bool]>; /** @@ -216,20 +211,12 @@ declare module '@polkadot/api-base/types/submittable' { * + `length_bound`: The upper bound for the length of the proposal in storage. Checked via * `storage::read` so it is `size_of::() == 4` larger than the pure length. * - * # - * ## Weight + * ## Complexity * - `O(B + M + P1 + P2)` where: * - `B` is `proposal` size in bytes (length-fee-bounded) * - `M` is members-count (code- and governance-bounded) * - `P1` is the complexity of `proposal` preimage. * - `P2` is proposal-count (code-bounded) - * - DB: - * - 2 storage reads (`Members`: codec `O(M)`, `Prime`: codec `O(1)`) - * - 3 mutations (`Voting`: codec `O(M)`, `ProposalOf`: codec `O(B)`, `Proposals`: codec - * `O(P2)`) - * - any mutations done while executing `proposal` (`P1`) - * - up to 3 events - * # **/ close: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, proposalWeightBound: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact, SpWeightsWeightV2Weight, Compact]>; /** @@ -251,20 +238,12 @@ declare module '@polkadot/api-base/types/submittable' { * + `length_bound`: The upper bound for the length of the proposal in storage. Checked via * `storage::read` so it is `size_of::() == 4` larger than the pure length. * - * # - * ## Weight + * ## Complexity * - `O(B + M + P1 + P2)` where: * - `B` is `proposal` size in bytes (length-fee-bounded) * - `M` is members-count (code- and governance-bounded) * - `P1` is the complexity of `proposal` preimage. * - `P2` is proposal-count (code-bounded) - * - DB: - * - 2 storage reads (`Members`: codec `O(M)`, `Prime`: codec `O(1)`) - * - 3 mutations (`Voting`: codec `O(M)`, `ProposalOf`: codec `O(B)`, `Proposals`: codec - * `O(P2)`) - * - any mutations done while executing `proposal` (`P1`) - * - up to 3 events - * # **/ closeOldWeight: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, proposalWeightBound: Compact | AnyNumber | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact, Compact, Compact]>; /** @@ -276,12 +255,8 @@ declare module '@polkadot/api-base/types/submittable' { * Parameters: * * `proposal_hash`: The hash of the proposal that should be disapproved. * - * # - * Complexity: O(P) where P is the number of max proposals - * DB Weight: - * * Reads: Proposals - * * Writes: Voting, Proposals, ProposalOf - * # + * ## Complexity + * O(P) where P is the number of max proposals **/ disapproveProposal: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** @@ -289,13 +264,11 @@ declare module '@polkadot/api-base/types/submittable' { * * Origin must be a member of the collective. * - * # - * ## Weight - * - `O(M + P)` where `M` members-count (code-bounded) and `P` complexity of dispatching - * `proposal` - * - DB: 1 read (codec `O(M)`) + DB access of `proposal` - * - 1 event - * # + * ## Complexity: + * - `O(B + M + P)` where: + * - `B` is `proposal` size in bytes (length-fee-bounded) + * - `M` members-count (code-bounded) + * - `P` complexity of dispatching `proposal` **/ execute: AugmentedSubmittable<(proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Call, Compact]>; /** @@ -306,26 +279,13 @@ declare module '@polkadot/api-base/types/submittable' { * `threshold` determines whether `proposal` is executed directly (`threshold < 2`) * or put up for voting. * - * # - * ## Weight + * ## Complexity * - `O(B + M + P1)` or `O(B + M + P2)` where: * - `B` is `proposal` size in bytes (length-fee-bounded) * - `M` is members-count (code- and governance-bounded) * - branching is influenced by `threshold` where: * - `P1` is proposal execution complexity (`threshold < 2`) * - `P2` is proposals-count (code-bounded) (`threshold >= 2`) - * - DB: - * - 1 storage read `is_member` (codec `O(M)`) - * - 1 storage read `ProposalOf::contains_key` (codec `O(1)`) - * - DB accesses influenced by `threshold`: - * - EITHER storage accesses done by `proposal` (`threshold < 2`) - * - OR proposal insertion (`threshold <= 2`) - * - 1 storage mutation `Proposals` (codec `O(P2)`) - * - 1 storage mutation `ProposalCount` (codec `O(1)`) - * - 1 storage write `ProposalOf` (codec `O(B)`) - * - 1 storage write `Voting` (codec `O(M)`) - * - 1 event - * # **/ propose: AugmentedSubmittable<(threshold: Compact | AnyNumber | Uint8Array, proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Call, Compact]>; /** @@ -336,7 +296,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `old_count`: The upper bound for the previous number of members in storage. Used for * weight estimation. * - * Requires root origin. + * The dispatch of this call must be `SetMembersOrigin`. * * NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but * the weight estimations rely on it to estimate dispatchable weight. @@ -348,19 +308,11 @@ declare module '@polkadot/api-base/types/submittable' { * Any call to `set_members` must be careful that the member set doesn't get out of sync * with other logic managing the member set. * - * # - * ## Weight + * ## Complexity: * - `O(MP + N)` where: * - `M` old-members-count (code- and governance-bounded) * - `N` new-members-count (code- and governance-bounded) * - `P` proposals-count (code-bounded) - * - DB: - * - 1 storage mutation (codec `O(M)` read, `O(N)` write) for reading and writing the - * members - * - 1 storage read (codec `O(P)`) for reading the proposals - * - `P` storage mutations (codec `O(M)`) for updating the votes for each proposal - * - 1 storage write (codec `O(1)`) for deleting the old `prime` and setting the new one - * # **/ setMembers: AugmentedSubmittable<(newMembers: Vec | (AccountId32 | string | Uint8Array)[], prime: Option | null | Uint8Array | AccountId32 | string, oldCount: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Vec, Option, u32]>; /** @@ -371,14 +323,8 @@ declare module '@polkadot/api-base/types/submittable' { * Transaction fees will be waived if the member is voting on any particular proposal * for the first time and the call is successful. Subsequent vote changes will charge a * fee. - * # - * ## Weight + * ## Complexity * - `O(M)` where `M` is members-count (code- and governance-bounded) - * - DB: - * - 1 storage read `Members` (codec `O(M)`) - * - 1 storage mutation `Voting` (codec `O(M)`) - * - 1 event - * # **/ vote: AugmentedSubmittable<(proposal: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, approve: bool | boolean | Uint8Array) => SubmittableExtrinsic, [H256, Compact, bool]>; }; @@ -782,6 +728,24 @@ declare module '@polkadot/api-base/types/submittable' { * - `proposal`: The index of the proposal to second. **/ second: AugmentedSubmittable<(proposal: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; + /** + * Set or clear a metadata of a proposal or a referendum. + * + * Parameters: + * - `origin`: Must correspond to the `MetadataOwner`. + * - `ExternalOrigin` for an external proposal with the `SuperMajorityApprove` + * threshold. + * - `ExternalDefaultOrigin` for an external proposal with the `SuperMajorityAgainst` + * threshold. + * - `ExternalMajorityOrigin` for an external proposal with the `SimpleMajority` + * threshold. + * - `Signed` by a creator for a public proposal. + * - `Signed` to clear a metadata for a finished referendum. + * - `Root` to set a metadata for an ongoing referendum. + * - `owner`: an identifier of a metadata owner. + * - `maybe_hash`: The hash of an on-chain stored preimage. `None` to clear a metadata. + **/ + setMetadata: AugmentedSubmittable<(owner: PalletDemocracyMetadataOwner | { External: any } | { Proposal: any } | { Referendum: any } | string | Uint8Array, maybeHash: Option | null | Uint8Array | H256 | string) => SubmittableExtrinsic, [PalletDemocracyMetadataOwner, Option]>; /** * Undelegate the voting power of the sending account. * @@ -1172,15 +1136,6 @@ declare module '@polkadot/api-base/types/submittable' { * The sender of the call will be the new deposit owner. **/ changeDepositOwner: AugmentedSubmittable<(account: PalletDidLookupLinkableAccountLinkableAccountId | { AccountId20: any } | { AccountId32: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletDidLookupLinkableAccountLinkableAccountId]>; - /** - * Executes the key type migration of the `ConnectedDids` and - * `ConnectedAccounts` storages by converting the given `AccountId` - * into `LinkableAccountId(AccountId)`. Once all keys have been - * migrated, the migration is done and this call will be filtered. - * - * Can be called by any origin. - **/ - migrate: AugmentedSubmittable<(limit: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** * Remove the association of the provided account. This call can only * be called from the deposit owner. The reserved deposit will be @@ -1247,14 +1202,8 @@ declare module '@polkadot/api-base/types/submittable' { * * Emits `IndexAssigned` if successful. * - * # + * ## Complexity * - `O(1)`. - * - One storage mutation (codec `O(1)`). - * - One reserve operation. - * - One event. - * ------------------- - * - DB Weight: 1 Read/Write (Accounts) - * # **/ claim: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** @@ -1269,16 +1218,8 @@ declare module '@polkadot/api-base/types/submittable' { * * Emits `IndexAssigned` if successful. * - * # + * ## Complexity * - `O(1)`. - * - One storage mutation (codec `O(1)`). - * - Up to one reserve operation. - * - One event. - * ------------------- - * - DB Weight: - * - Reads: Indices Accounts, System Account (original owner) - * - Writes: Indices Accounts, System Account (original owner) - * # **/ forceTransfer: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, index: u64 | AnyNumber | Uint8Array, freeze: bool | boolean | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u64, bool]>; /** @@ -1292,14 +1233,8 @@ declare module '@polkadot/api-base/types/submittable' { * * Emits `IndexFreed` if successful. * - * # + * ## Complexity * - `O(1)`. - * - One storage mutation (codec `O(1)`). - * - One reserve operation. - * - One event. - * ------------------- - * - DB Weight: 1 Read/Write (Accounts) - * # **/ free: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** @@ -1313,14 +1248,8 @@ declare module '@polkadot/api-base/types/submittable' { * * Emits `IndexFrozen` if successful. * - * # + * ## Complexity * - `O(1)`. - * - One storage mutation (codec `O(1)`). - * - Up to one slash operation. - * - One event. - * ------------------- - * - DB Weight: 1 Read/Write (Accounts) - * # **/ freeze: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** @@ -1334,19 +1263,127 @@ declare module '@polkadot/api-base/types/submittable' { * * Emits `IndexAssigned` if successful. * - * # + * ## Complexity * - `O(1)`. - * - One storage mutation (codec `O(1)`). - * - One transfer operation. - * - One event. - * ------------------- - * - DB Weight: - * - Reads: Indices Accounts, System Account (recipient) - * - Writes: Indices Accounts, System Account (recipient) - * # **/ transfer: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, index: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u64]>; }; + multisig: { + /** + * Register approval for a dispatch to be made from a deterministic composite account if + * approved by a total of `threshold - 1` of `other_signatories`. + * + * Payment: `DepositBase` will be reserved if this is the first approval, plus + * `threshold` times `DepositFactor`. It is returned once this dispatch happens or + * is cancelled. + * + * The dispatch origin for this call must be _Signed_. + * + * - `threshold`: The total number of approvals for this dispatch before it is executed. + * - `other_signatories`: The accounts (other than the sender) who can approve this + * dispatch. May not be empty. + * - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is + * not the first approval, then it must be `Some`, with the timepoint (block number and + * transaction index) of the first approval transaction. + * - `call_hash`: The hash of the call to be executed. + * + * NOTE: If this is the final approval, you will want to use `as_multi` instead. + * + * ## Complexity + * - `O(S)`. + * - Up to one balance-reserve or unreserve operation. + * - One passthrough operation, one insert, both `O(S)` where `S` is the number of + * signatories. `S` is capped by `MaxSignatories`, with weight being proportional. + * - One encode & hash, both of complexity `O(S)`. + * - Up to one binary search and insert (`O(logS + S)`). + * - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. + * - One event. + * - Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit + * taken for its lifetime of `DepositBase + threshold * DepositFactor`. + **/ + approveAsMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], maybeTimepoint: Option | null | Uint8Array | PalletMultisigTimepoint | { height?: any; index?: any } | string, callHash: U8aFixed | string | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, Option, U8aFixed, SpWeightsWeightV2Weight]>; + /** + * Register approval for a dispatch to be made from a deterministic composite account if + * approved by a total of `threshold - 1` of `other_signatories`. + * + * If there are enough, then dispatch the call. + * + * Payment: `DepositBase` will be reserved if this is the first approval, plus + * `threshold` times `DepositFactor`. It is returned once this dispatch happens or + * is cancelled. + * + * The dispatch origin for this call must be _Signed_. + * + * - `threshold`: The total number of approvals for this dispatch before it is executed. + * - `other_signatories`: The accounts (other than the sender) who can approve this + * dispatch. May not be empty. + * - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is + * not the first approval, then it must be `Some`, with the timepoint (block number and + * transaction index) of the first approval transaction. + * - `call`: The call to be executed. + * + * NOTE: Unless this is the final approval, you will generally want to use + * `approve_as_multi` instead, since it only requires a hash of the call. + * + * Result is equivalent to the dispatched result if `threshold` is exactly `1`. Otherwise + * on success, result is `Ok` and the result from the interior call, if it was executed, + * may be found in the deposited `MultisigExecuted` event. + * + * ## Complexity + * - `O(S + Z + Call)`. + * - Up to one balance-reserve or unreserve operation. + * - One passthrough operation, one insert, both `O(S)` where `S` is the number of + * signatories. `S` is capped by `MaxSignatories`, with weight being proportional. + * - One call encode & hash, both of complexity `O(Z)` where `Z` is tx-len. + * - One encode & hash, both of complexity `O(S)`. + * - Up to one binary search and insert (`O(logS + S)`). + * - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. + * - One event. + * - The weight of the `call`. + * - Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit + * taken for its lifetime of `DepositBase + threshold * DepositFactor`. + **/ + asMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], maybeTimepoint: Option | null | Uint8Array | PalletMultisigTimepoint | { height?: any; index?: any } | string, call: Call | IMethod | string | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, Option, Call, SpWeightsWeightV2Weight]>; + /** + * Immediately dispatch a multi-signature call using a single approval from the caller. + * + * The dispatch origin for this call must be _Signed_. + * + * - `other_signatories`: The accounts (other than the sender) who are part of the + * multi-signature, but do not participate in the approval process. + * - `call`: The call to be executed. + * + * Result is equivalent to the dispatched result. + * + * ## Complexity + * O(Z + C) where Z is the length of the call and C its execution weight. + **/ + asMultiThreshold1: AugmentedSubmittable<(otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [Vec, Call]>; + /** + * Cancel a pre-existing, on-going multisig transaction. Any deposit reserved previously + * for this operation will be unreserved on success. + * + * The dispatch origin for this call must be _Signed_. + * + * - `threshold`: The total number of approvals for this dispatch before it is executed. + * - `other_signatories`: The accounts (other than the sender) who can approve this + * dispatch. May not be empty. + * - `timepoint`: The timepoint (block number and transaction index) of the first approval + * transaction for this dispatch. + * - `call_hash`: The hash of the call to be executed. + * + * ## Complexity + * - `O(S)`. + * - Up to one balance-reserve or unreserve operation. + * - One passthrough operation, one insert, both `O(S)` where `S` is the number of + * signatories. `S` is capped by `MaxSignatories`, with weight being proportional. + * - One encode & hash, both of complexity `O(S)`. + * - One event. + * - I/O: 1 read `O(S)`, one remove. + * - Storage: removes one item. + **/ + cancelAsMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], timepoint: PalletMultisigTimepoint | { height?: any; index?: any } | string | Uint8Array, callHash: U8aFixed | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, PalletMultisigTimepoint, U8aFixed]>; + }; parachainStaking: { /** * Revert the previously requested exit of the network of a collator @@ -1677,7 +1714,28 @@ declare module '@polkadot/api-base/types/submittable' { unlockUnstaked: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; }; parachainSystem: { - authorizeUpgrade: AugmentedSubmittable<(codeHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; + /** + * Authorize an upgrade to a given `code_hash` for the runtime. The runtime can be supplied + * later. + * + * The `check_version` parameter sets a boolean flag for whether or not the runtime's spec + * version and name should be verified on upgrade. Since the authorization only has a hash, + * it cannot actually perform the verification. + * + * This call requires Root origin. + **/ + authorizeUpgrade: AugmentedSubmittable<(codeHash: H256 | string | Uint8Array, checkVersion: bool | boolean | Uint8Array) => SubmittableExtrinsic, [H256, bool]>; + /** + * Provide the preimage (runtime binary) `code` for an upgrade that has been authorized. + * + * If the authorization required a version check, this call will ensure the spec name + * remains unchanged and that the spec version has increased. + * + * Note that this function will not apply the new `code`, but only attempt to schedule the + * upgrade with the Relay Chain. + * + * All origins are allowed. + **/ enactAuthorizedUpgrade: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** * Set the current validation data. @@ -2101,10 +2159,6 @@ declare module '@polkadot/api-base/types/submittable' { schedule: AugmentedSubmittable<(when: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [u64, Option>, u8, Call]>; /** * Anonymously schedule a task after a delay. - * - * # - * Same as [`schedule`]. - * # **/ scheduleAfter: AugmentedSubmittable<(after: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [u64, Option>, u8, Call]>; /** @@ -2113,10 +2167,6 @@ declare module '@polkadot/api-base/types/submittable' { scheduleNamed: AugmentedSubmittable<(id: U8aFixed | string | Uint8Array, when: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [U8aFixed, u64, Option>, u8, Call]>; /** * Schedule a named task after a delay. - * - * # - * Same as [`schedule_named`](Self::schedule_named). - * # **/ scheduleNamedAfter: AugmentedSubmittable<(id: U8aFixed | string | Uint8Array, after: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [U8aFixed, u64, Option>, u8, Call]>; }; @@ -2131,13 +2181,9 @@ declare module '@polkadot/api-base/types/submittable' { * means being a controller account) or directly convertible into a validator ID (which * usually means being a stash account). * - * # - * - Complexity: `O(1)` in number of key types. Actual cost depends on the number of length - * of `T::Keys::key_ids()` which is fixed. - * - DbReads: `T::ValidatorIdOf`, `NextKeys`, `origin account` - * - DbWrites: `NextKeys`, `origin account` - * - DbWrites per key id: `KeyOwner` - * # + * ## Complexity + * - `O(1)` in number of key types. Actual cost depends on the number of length of + * `T::Keys::key_ids()` which is fixed. **/ purgeKeys: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** @@ -2147,14 +2193,9 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin of this function must be signed. * - * # - * - Complexity: `O(1)`. Actual cost depends on the number of length of - * `T::Keys::key_ids()` which is fixed. - * - DbReads: `origin account`, `T::ValidatorIdOf`, `NextKeys` - * - DbWrites: `origin account`, `NextKeys` - * - DbReads per key id: `KeyOwner` - * - DbWrites per key id: `KeyOwner` - * # + * ## Complexity + * - `O(1)`. Actual cost depends on the number of length of `T::Keys::key_ids()` which is + * fixed. **/ setKeys: AugmentedSubmittable<(keys: SpiritnetRuntimeSessionKeys | { aura?: any } | string | Uint8Array, proof: Bytes | string | Uint8Array) => SubmittableExtrinsic, [SpiritnetRuntimeSessionKeys, Bytes]>; }; @@ -2173,9 +2214,8 @@ declare module '@polkadot/api-base/types/submittable' { /** * Make some on-chain remark. * - * # + * ## Complexity * - `O(1)` - * # **/ remark: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** @@ -2185,28 +2225,15 @@ declare module '@polkadot/api-base/types/submittable' { /** * Set the new runtime code. * - * # + * ## Complexity * - `O(C + S)` where `C` length of `code` and `S` complexity of `can_set_code` - * - 1 call to `can_set_code`: `O(S)` (calls `sp_io::misc::runtime_version` which is - * expensive). - * - 1 storage write (codec `O(C)`). - * - 1 digest item. - * - 1 event. - * The weight of this function is dependent on the runtime, but generally this is very - * expensive. We will treat this as a full block. - * # **/ setCode: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** * Set the new runtime code without doing any checks of the given `code`. * - * # + * ## Complexity * - `O(C)` where `C` length of `code` - * - 1 storage write (codec `O(C)`). - * - 1 digest item. - * - 1 event. - * The weight of this function is dependent on the runtime. We will treat this as a full - * block. # **/ setCodeWithoutChecks: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** @@ -2238,20 +2265,12 @@ declare module '@polkadot/api-base/types/submittable' { * + `length_bound`: The upper bound for the length of the proposal in storage. Checked via * `storage::read` so it is `size_of::() == 4` larger than the pure length. * - * # - * ## Weight + * ## Complexity * - `O(B + M + P1 + P2)` where: * - `B` is `proposal` size in bytes (length-fee-bounded) * - `M` is members-count (code- and governance-bounded) * - `P1` is the complexity of `proposal` preimage. * - `P2` is proposal-count (code-bounded) - * - DB: - * - 2 storage reads (`Members`: codec `O(M)`, `Prime`: codec `O(1)`) - * - 3 mutations (`Voting`: codec `O(M)`, `ProposalOf`: codec `O(B)`, `Proposals`: codec - * `O(P2)`) - * - any mutations done while executing `proposal` (`P1`) - * - up to 3 events - * # **/ close: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, proposalWeightBound: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact, SpWeightsWeightV2Weight, Compact]>; /** @@ -2273,20 +2292,12 @@ declare module '@polkadot/api-base/types/submittable' { * + `length_bound`: The upper bound for the length of the proposal in storage. Checked via * `storage::read` so it is `size_of::() == 4` larger than the pure length. * - * # - * ## Weight + * ## Complexity * - `O(B + M + P1 + P2)` where: * - `B` is `proposal` size in bytes (length-fee-bounded) * - `M` is members-count (code- and governance-bounded) * - `P1` is the complexity of `proposal` preimage. * - `P2` is proposal-count (code-bounded) - * - DB: - * - 2 storage reads (`Members`: codec `O(M)`, `Prime`: codec `O(1)`) - * - 3 mutations (`Voting`: codec `O(M)`, `ProposalOf`: codec `O(B)`, `Proposals`: codec - * `O(P2)`) - * - any mutations done while executing `proposal` (`P1`) - * - up to 3 events - * # **/ closeOldWeight: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, proposalWeightBound: Compact | AnyNumber | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact, Compact, Compact]>; /** @@ -2298,12 +2309,8 @@ declare module '@polkadot/api-base/types/submittable' { * Parameters: * * `proposal_hash`: The hash of the proposal that should be disapproved. * - * # - * Complexity: O(P) where P is the number of max proposals - * DB Weight: - * * Reads: Proposals - * * Writes: Voting, Proposals, ProposalOf - * # + * ## Complexity + * O(P) where P is the number of max proposals **/ disapproveProposal: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** @@ -2311,13 +2318,11 @@ declare module '@polkadot/api-base/types/submittable' { * * Origin must be a member of the collective. * - * # - * ## Weight - * - `O(M + P)` where `M` members-count (code-bounded) and `P` complexity of dispatching - * `proposal` - * - DB: 1 read (codec `O(M)`) + DB access of `proposal` - * - 1 event - * # + * ## Complexity: + * - `O(B + M + P)` where: + * - `B` is `proposal` size in bytes (length-fee-bounded) + * - `M` members-count (code-bounded) + * - `P` complexity of dispatching `proposal` **/ execute: AugmentedSubmittable<(proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Call, Compact]>; /** @@ -2328,26 +2333,13 @@ declare module '@polkadot/api-base/types/submittable' { * `threshold` determines whether `proposal` is executed directly (`threshold < 2`) * or put up for voting. * - * # - * ## Weight + * ## Complexity * - `O(B + M + P1)` or `O(B + M + P2)` where: * - `B` is `proposal` size in bytes (length-fee-bounded) * - `M` is members-count (code- and governance-bounded) * - branching is influenced by `threshold` where: * - `P1` is proposal execution complexity (`threshold < 2`) * - `P2` is proposals-count (code-bounded) (`threshold >= 2`) - * - DB: - * - 1 storage read `is_member` (codec `O(M)`) - * - 1 storage read `ProposalOf::contains_key` (codec `O(1)`) - * - DB accesses influenced by `threshold`: - * - EITHER storage accesses done by `proposal` (`threshold < 2`) - * - OR proposal insertion (`threshold <= 2`) - * - 1 storage mutation `Proposals` (codec `O(P2)`) - * - 1 storage mutation `ProposalCount` (codec `O(1)`) - * - 1 storage write `ProposalOf` (codec `O(B)`) - * - 1 storage write `Voting` (codec `O(M)`) - * - 1 event - * # **/ propose: AugmentedSubmittable<(threshold: Compact | AnyNumber | Uint8Array, proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Call, Compact]>; /** @@ -2358,7 +2350,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `old_count`: The upper bound for the previous number of members in storage. Used for * weight estimation. * - * Requires root origin. + * The dispatch of this call must be `SetMembersOrigin`. * * NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but * the weight estimations rely on it to estimate dispatchable weight. @@ -2370,19 +2362,11 @@ declare module '@polkadot/api-base/types/submittable' { * Any call to `set_members` must be careful that the member set doesn't get out of sync * with other logic managing the member set. * - * # - * ## Weight + * ## Complexity: * - `O(MP + N)` where: * - `M` old-members-count (code- and governance-bounded) * - `N` new-members-count (code- and governance-bounded) * - `P` proposals-count (code-bounded) - * - DB: - * - 1 storage mutation (codec `O(M)` read, `O(N)` write) for reading and writing the - * members - * - 1 storage read (codec `O(P)`) for reading the proposals - * - `P` storage mutations (codec `O(M)`) for updating the votes for each proposal - * - 1 storage write (codec `O(1)`) for deleting the old `prime` and setting the new one - * # **/ setMembers: AugmentedSubmittable<(newMembers: Vec | (AccountId32 | string | Uint8Array)[], prime: Option | null | Uint8Array | AccountId32 | string, oldCount: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Vec, Option, u32]>; /** @@ -2393,14 +2377,8 @@ declare module '@polkadot/api-base/types/submittable' { * Transaction fees will be waived if the member is voting on any particular proposal * for the first time and the call is successful. Subsequent vote changes will charge a * fee. - * # - * ## Weight + * ## Complexity * - `O(M)` where `M` is members-count (code- and governance-bounded) - * - DB: - * - 1 storage read `Members` (codec `O(M)`) - * - 1 storage mutation `Voting` (codec `O(M)`) - * - 1 event - * # **/ vote: AugmentedSubmittable<(proposal: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, approve: bool | boolean | Uint8Array) => SubmittableExtrinsic, [H256, Compact, bool]>; }; @@ -2465,12 +2443,11 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be `Inherent`. * - * # + * ## Complexity * - `O(1)` (Note that implementations of `OnTimestampSet` must also be `O(1)`) * - 1 storage read and 1 storage mutation (codec `O(1)`). (because of `DidUpdate::take` in * `on_finalize`) * - 1 event handler `on_timestamp_set`. Must be `O(1)`. - * # **/ set: AugmentedSubmittable<(now: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; }; @@ -2485,13 +2462,10 @@ declare module '@polkadot/api-base/types/submittable' { * - `hash`: The identity of the open tip for which a tip value is declared. This is formed * as the hash of the tuple of the original tip `reason` and the beneficiary account ID. * - * # - * - Complexity: `O(T)` where `T` is the number of tippers. decoding `Tipper` vec of length - * `T`. `T` is charged as upper bound given by `ContainsLengthBound`. The actual cost - * depends on the implementation of `T::Tippers`. - * - DbReads: `Tips`, `Tippers`, `tip finder` - * - DbWrites: `Reasons`, `Tips`, `Tippers`, `tip finder` - * # + * ## Complexity + * - : `O(T)` where `T` is the number of tippers. decoding `Tipper` vec of length `T`. `T` + * is charged as upper bound given by `ContainsLengthBound`. The actual cost depends on + * the implementation of `T::Tippers`. **/ closeTip: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** @@ -2508,12 +2482,9 @@ declare module '@polkadot/api-base/types/submittable' { * * Emits `NewTip` if successful. * - * # - * - Complexity: `O(R)` where `R` length of `reason`. + * ## Complexity + * - `O(R)` where `R` length of `reason`. * - encoding and hashing of 'reason' - * - DbReads: `Reasons`, `Tips` - * - DbWrites: `Reasons`, `Tips` - * # **/ reportAwesome: AugmentedSubmittable<(reason: Bytes | string | Uint8Array, who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Bytes, MultiAddress]>; /** @@ -2530,12 +2501,9 @@ declare module '@polkadot/api-base/types/submittable' { * * Emits `TipRetracted` if successful. * - * # - * - Complexity: `O(1)` + * ## Complexity + * - `O(1)` * - Depends on the length of `T::Hash` which is fixed. - * - DbReads: `Tips`, `origin account` - * - DbWrites: `Reasons`, `Tips`, `origin account` - * # **/ retractTip: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** @@ -2547,10 +2515,8 @@ declare module '@polkadot/api-base/types/submittable' { * * Emits `TipSlashed` if successful. * - * # - * `T` is charged as upper bound given by `ContainsLengthBound`. - * The actual cost depends on the implementation of `T::Tippers`. - * # + * ## Complexity + * - O(1). **/ slashTip: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** @@ -2568,16 +2534,13 @@ declare module '@polkadot/api-base/types/submittable' { * Emits `TipClosing` if the threshold of tippers has been reached and the countdown period * has started. * - * # - * - Complexity: `O(T)` where `T` is the number of tippers. decoding `Tipper` vec of length - * `T`, insert tip and check closing, `T` is charged as upper bound given by - * `ContainsLengthBound`. The actual cost depends on the implementation of `T::Tippers`. + * ## Complexity + * - `O(T)` where `T` is the number of tippers. decoding `Tipper` vec of length `T`, insert + * tip and check closing, `T` is charged as upper bound given by `ContainsLengthBound`. + * The actual cost depends on the implementation of `T::Tippers`. * * Actually weight could be lower as it depends on how many tips are in `OpenTip` but it * is weighted as if almost full i.e of length `T-1`. - * - DbReads: `Tippers`, `Tips` - * - DbWrites: `Tips` - * # **/ tip: AugmentedSubmittable<(hash: H256 | string | Uint8Array, tipValue: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact]>; /** @@ -2594,15 +2557,12 @@ declare module '@polkadot/api-base/types/submittable' { * * Emits `NewTip` if successful. * - * # - * - Complexity: `O(R + T)` where `R` length of `reason`, `T` is the number of tippers. + * ## Complexity + * - `O(R + T)` where `R` length of `reason`, `T` is the number of tippers. * - `O(T)`: decoding `Tipper` vec of length `T`. `T` is charged as upper bound given by * `ContainsLengthBound`. The actual cost depends on the implementation of * `T::Tippers`. * - `O(R)`: hashing and encoding of reason of length `R` - * - DbReads: `Tippers`, `Reasons` - * - DbWrites: `Reasons`, `Tips` - * # **/ tipNew: AugmentedSubmittable<(reason: Bytes | string | Uint8Array, who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, tipValue: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Bytes, MultiAddress, Compact]>; }; @@ -2662,11 +2622,8 @@ declare module '@polkadot/api-base/types/submittable' { * * May only be called from `T::ApproveOrigin`. * - * # - * - Complexity: O(1). - * - DbReads: `Proposals`, `Approvals` - * - DbWrite: `Approvals` - * # + * ## Complexity + * - O(1). **/ approveProposal: AugmentedSubmittable<(proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** @@ -2674,11 +2631,8 @@ declare module '@polkadot/api-base/types/submittable' { * is reserved and slashed if the proposal is rejected. It is returned once the * proposal is awarded. * - * # - * - Complexity: O(1) - * - DbReads: `ProposalCount`, `origin account` - * - DbWrites: `ProposalCount`, `Proposals`, `origin account` - * # + * ## Complexity + * - O(1) **/ proposeSpend: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array, beneficiary: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; /** @@ -2686,11 +2640,8 @@ declare module '@polkadot/api-base/types/submittable' { * * May only be called from `T::RejectOrigin`. * - * # - * - Complexity: O(1) - * - DbReads: `Proposals`, `rejected proposer account` - * - DbWrites: `Proposals`, `rejected proposer account` - * # + * ## Complexity + * - O(1) **/ rejectProposal: AugmentedSubmittable<(proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** @@ -2700,10 +2651,8 @@ declare module '@polkadot/api-base/types/submittable' { * May only be called from `T::RejectOrigin`. * - `proposal_id`: The index of a proposal * - * # - * - Complexity: O(A) where `A` is the number of approvals - * - Db reads and writes: `Approvals` - * # + * ## Complexity + * - O(A) where `A` is the number of approvals * * Errors: * - `ProposalNotApproved`: The `proposal_id` supplied was not found in the approval queue, @@ -2751,9 +2700,8 @@ declare module '@polkadot/api-base/types/submittable' { * If origin is root then the calls are dispatched without checking origin filter. (This * includes bypassing `frame_system::Config::BaseCallFilter`). * - * # - * - Complexity: O(C) where C is the number of calls to be batched. - * # + * ## Complexity + * - O(C) where C is the number of calls to be batched. * * This will return `Ok` in all circumstances. To determine the success of the batch, an * event is deposited. If a call failed and the batch was interrupted, then the @@ -2774,9 +2722,8 @@ declare module '@polkadot/api-base/types/submittable' { * If origin is root then the calls are dispatched without checking origin filter. (This * includes bypassing `frame_system::Config::BaseCallFilter`). * - * # - * - Complexity: O(C) where C is the number of calls to be batched. - * # + * ## Complexity + * - O(C) where C is the number of calls to be batched. **/ batchAll: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** @@ -2784,12 +2731,8 @@ declare module '@polkadot/api-base/types/submittable' { * * The dispatch origin for this call must be _Root_. * - * # + * ## Complexity * - O(1). - * - Limited storage reads. - * - One DB write (event). - * - Weight of derivative `call` execution + T::WeightInfo::dispatch_as(). - * # **/ dispatchAs: AugmentedSubmittable<(asOrigin: SpiritnetRuntimeOriginCaller | { system: any } | { Void: any } | { Council: any } | { TechnicalCommittee: any } | { Did: any } | { PolkadotXcm: any } | { CumulusXcm: any } | string | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [SpiritnetRuntimeOriginCaller, Call]>; /** @@ -2804,9 +2747,8 @@ declare module '@polkadot/api-base/types/submittable' { * If origin is root then the calls are dispatch without checking origin filter. (This * includes bypassing `frame_system::Config::BaseCallFilter`). * - * # - * - Complexity: O(C) where C is the number of calls to be batched. - * # + * ## Complexity + * - O(C) where C is the number of calls to be batched. **/ forceBatch: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** @@ -2833,12 +2775,8 @@ declare module '@polkadot/api-base/types/submittable' { * * NOTE: This will unlock all schedules through the current block. * - * # + * ## Complexity * - `O(1)`. - * - DbWeight: 4 Reads, 4 Writes - * - Reads: Vesting Storage, Balances Locks, Target Account, Source Account - * - Writes: Vesting Storage, Balances Locks, Target Account, Source Account - * # **/ forceVestedTransfer: AugmentedSubmittable<(source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, schedule: PalletVestingVestingInfo | { locked?: any; perBlock?: any; startingBlock?: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress, PalletVestingVestingInfo]>; /** @@ -2873,12 +2811,8 @@ declare module '@polkadot/api-base/types/submittable' { * * Emits either `VestingCompleted` or `VestingUpdated`. * - * # + * ## Complexity * - `O(1)`. - * - DbWeight: 2 Reads, 2 Writes - * - Reads: Vesting Storage, Balances Locks, [Sender Account] - * - Writes: Vesting Storage, Balances Locks, [Sender Account] - * # **/ vest: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** @@ -2893,12 +2827,8 @@ declare module '@polkadot/api-base/types/submittable' { * * NOTE: This will unlock all schedules through the current block. * - * # + * ## Complexity * - `O(1)`. - * - DbWeight: 3 Reads, 3 Writes - * - Reads: Vesting Storage, Balances Locks, Target Account, [Sender Account] - * - Writes: Vesting Storage, Balances Locks, Target Account, [Sender Account] - * # **/ vestedTransfer: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, schedule: PalletVestingVestingInfo | { locked?: any; perBlock?: any; startingBlock?: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, PalletVestingVestingInfo]>; /** @@ -2911,12 +2841,8 @@ declare module '@polkadot/api-base/types/submittable' { * * Emits either `VestingCompleted` or `VestingUpdated`. * - * # + * ## Complexity * - `O(1)`. - * - DbWeight: 3 Reads, 3 Writes - * - Reads: Vesting Storage, Balances Locks, Target Account - * - Writes: Vesting Storage, Balances Locks, Target Account - * # **/ vestOther: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; }; diff --git a/packages/augment-api/src/interfaces/lookup.ts b/packages/augment-api/src/interfaces/lookup.ts index 835e39a28..083ad3bac 100644 --- a/packages/augment-api/src/interfaces/lookup.ts +++ b/packages/augment-api/src/interfaces/lookup.ts @@ -338,7 +338,29 @@ export default { propIndex: 'u32', }, ProposalCanceled: { - propIndex: 'u32' + propIndex: 'u32', + }, + MetadataSet: { + _alias: { + hash_: 'hash', + }, + owner: 'PalletDemocracyMetadataOwner', + hash_: 'H256', + }, + MetadataCleared: { + _alias: { + hash_: 'hash', + }, + owner: 'PalletDemocracyMetadataOwner', + hash_: 'H256', + }, + MetadataTransferred: { + _alias: { + hash_: 'hash', + }, + prevOwner: 'PalletDemocracyMetadataOwner', + owner: 'PalletDemocracyMetadataOwner', + hash_: 'H256' } } }, @@ -364,7 +386,17 @@ export default { } }, /** - * Lookup40: pallet_collective::pallet::Event + * Lookup40: pallet_democracy::types::MetadataOwner + **/ + PalletDemocracyMetadataOwner: { + _enum: { + External: 'Null', + Proposal: 'u32', + Referendum: 'u32' + } + }, + /** + * Lookup41: pallet_collective::pallet::Event **/ PalletCollectiveEvent: { _enum: { @@ -403,13 +435,13 @@ export default { } }, /** - * Lookup45: pallet_membership::pallet::Event + * Lookup46: pallet_membership::pallet::Event **/ PalletMembershipEvent: { _enum: ['MemberAdded', 'MemberRemoved', 'MembersSwapped', 'MembersReset', 'KeyChanged', 'Dummy'] }, /** - * Lookup46: pallet_treasury::pallet::Event + * Lookup47: pallet_treasury::pallet::Event **/ PalletTreasuryEvent: { _enum: { @@ -449,7 +481,7 @@ export default { } }, /** - * Lookup47: pallet_utility::pallet::Event + * Lookup48: pallet_utility::pallet::Event **/ PalletUtilityEvent: { _enum: { @@ -469,7 +501,7 @@ export default { } }, /** - * Lookup48: pallet_vesting::pallet::Event + * Lookup49: pallet_vesting::pallet::Event **/ PalletVestingEvent: { _enum: { @@ -483,7 +515,7 @@ export default { } }, /** - * Lookup49: pallet_scheduler::pallet::Event + * Lookup50: pallet_scheduler::pallet::Event **/ PalletSchedulerEvent: { _enum: { @@ -515,7 +547,7 @@ export default { } }, /** - * Lookup52: pallet_proxy::pallet::Event + * Lookup53: pallet_proxy::pallet::Event **/ PalletProxyEvent: { _enum: { @@ -548,13 +580,13 @@ export default { } }, /** - * Lookup53: spiritnet_runtime::ProxyType + * Lookup54: spiritnet_runtime::ProxyType **/ SpiritnetRuntimeProxyType: { _enum: ['Any', 'NonTransfer', 'Governance', 'ParachainStaking', 'CancelProxy', 'NonDepositClaiming'] }, /** - * Lookup55: pallet_preimage::pallet::Event + * Lookup56: pallet_preimage::pallet::Event **/ PalletPreimageEvent: { _enum: { @@ -579,7 +611,7 @@ export default { } }, /** - * Lookup57: pallet_tips::pallet::Event + * Lookup58: pallet_tips::pallet::Event **/ PalletTipsEvent: { _enum: { @@ -605,7 +637,45 @@ export default { } }, /** - * Lookup58: ctype::pallet::Event + * Lookup59: pallet_multisig::pallet::Event + **/ + PalletMultisigEvent: { + _enum: { + NewMultisig: { + approving: 'AccountId32', + multisig: 'AccountId32', + callHash: '[u8;32]', + }, + MultisigApproval: { + approving: 'AccountId32', + timepoint: 'PalletMultisigTimepoint', + multisig: 'AccountId32', + callHash: '[u8;32]', + }, + MultisigExecuted: { + approving: 'AccountId32', + timepoint: 'PalletMultisigTimepoint', + multisig: 'AccountId32', + callHash: '[u8;32]', + result: 'Result', + }, + MultisigCancelled: { + cancelling: 'AccountId32', + timepoint: 'PalletMultisigTimepoint', + multisig: 'AccountId32', + callHash: '[u8;32]' + } + } + }, + /** + * Lookup60: pallet_multisig::Timepoint + **/ + PalletMultisigTimepoint: { + height: 'u64', + index: 'u32' + }, + /** + * Lookup61: ctype::pallet::Event **/ CtypeEvent: { _enum: { @@ -614,7 +684,7 @@ export default { } }, /** - * Lookup59: attestation::pallet::Event + * Lookup62: attestation::pallet::Event **/ AttestationEvent: { _enum: { @@ -625,7 +695,7 @@ export default { } }, /** - * Lookup61: runtime_common::authorization::AuthorizationId + * Lookup64: runtime_common::authorization::AuthorizationId **/ RuntimeCommonAuthorizationAuthorizationId: { _enum: { @@ -633,7 +703,7 @@ export default { } }, /** - * Lookup62: delegation::pallet::Event + * Lookup65: delegation::pallet::Event **/ DelegationEvent: { _enum: { @@ -647,13 +717,13 @@ export default { } }, /** - * Lookup63: delegation::delegation_hierarchy::Permissions + * Lookup66: delegation::delegation_hierarchy::Permissions **/ DelegationDelegationHierarchyPermissions: { bits: 'u32' }, /** - * Lookup64: did::pallet::Event + * Lookup67: did::pallet::Event **/ DidEvent: { _enum: { @@ -664,7 +734,7 @@ export default { } }, /** - * Lookup65: pallet_did_lookup::pallet::Event + * Lookup68: pallet_did_lookup::pallet::Event **/ PalletDidLookupEvent: { _enum: { @@ -675,7 +745,7 @@ export default { } }, /** - * Lookup66: pallet_did_lookup::linkable_account::LinkableAccountId + * Lookup69: pallet_did_lookup::linkable_account::LinkableAccountId **/ PalletDidLookupLinkableAccountLinkableAccountId: { _enum: { @@ -684,11 +754,11 @@ export default { } }, /** - * Lookup67: pallet_did_lookup::account::AccountId20 + * Lookup70: pallet_did_lookup::account::AccountId20 **/ PalletDidLookupAccountAccountId20: '[u8;20]', /** - * Lookup69: pallet_web3_names::pallet::Event + * Lookup72: pallet_web3_names::pallet::Event **/ PalletWeb3NamesEvent: { _enum: { @@ -709,7 +779,7 @@ export default { } }, /** - * Lookup72: public_credentials::pallet::Event + * Lookup75: public_credentials::pallet::Event **/ PublicCredentialsEvent: { _enum: { @@ -730,18 +800,18 @@ export default { } }, /** - * Lookup73: runtime_common::assets::AssetDid + * Lookup76: runtime_common::assets::AssetDid **/ RuntimeCommonAssetsAssetDid: 'KiltAssetDidsV1AssetDid', /** - * Lookup74: kilt_asset_dids::v1::AssetDid + * Lookup77: kilt_asset_dids::v1::AssetDid **/ KiltAssetDidsV1AssetDid: { chainId: 'KiltAssetDidsChainV1ChainId', assetId: 'KiltAssetDidsAssetV1AssetId' }, /** - * Lookup75: kilt_asset_dids::chain::v1::ChainId + * Lookup78: kilt_asset_dids::chain::v1::ChainId **/ KiltAssetDidsChainV1ChainId: { _enum: { @@ -753,18 +823,18 @@ export default { } }, /** - * Lookup77: kilt_asset_dids::chain::v1::GenesisHexHash32Reference + * Lookup80: kilt_asset_dids::chain::v1::GenesisHexHash32Reference **/ KiltAssetDidsChainV1GenesisHexHash32Reference: '[u8;16]', /** - * Lookup81: kilt_asset_dids::chain::v1::GenericChainId + * Lookup84: kilt_asset_dids::chain::v1::GenericChainId **/ KiltAssetDidsChainV1GenericChainId: { namespace: 'Bytes', reference: 'Bytes' }, /** - * Lookup85: kilt_asset_dids::asset::v1::AssetId + * Lookup88: kilt_asset_dids::asset::v1::AssetId **/ KiltAssetDidsAssetV1AssetId: { _enum: { @@ -776,15 +846,15 @@ export default { } }, /** - * Lookup89: kilt_asset_dids::asset::v1::EvmSmartContractFungibleReference + * Lookup92: kilt_asset_dids::asset::v1::EvmSmartContractFungibleReference **/ KiltAssetDidsAssetV1EvmSmartContractFungibleReference: '[u8;20]', /** - * Lookup90: kilt_asset_dids::asset::v1::EvmSmartContractNonFungibleReference + * Lookup93: kilt_asset_dids::asset::v1::EvmSmartContractNonFungibleReference **/ KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference: '(KiltAssetDidsAssetV1EvmSmartContractFungibleReference,Option)', /** - * Lookup94: kilt_asset_dids::asset::v1::GenericAssetId + * Lookup97: kilt_asset_dids::asset::v1::GenericAssetId **/ KiltAssetDidsAssetV1GenericAssetId: { namespace: 'Bytes', @@ -792,7 +862,7 @@ export default { id: 'Option' }, /** - * Lookup100: cumulus_pallet_parachain_system::pallet::Event + * Lookup103: cumulus_pallet_parachain_system::pallet::Event **/ CumulusPalletParachainSystemEvent: { _enum: { @@ -817,7 +887,7 @@ export default { } }, /** - * Lookup101: cumulus_pallet_xcmp_queue::pallet::Event + * Lookup104: cumulus_pallet_xcmp_queue::pallet::Event **/ CumulusPalletXcmpQueueEvent: { _enum: { @@ -852,7 +922,7 @@ export default { } }, /** - * Lookup102: xcm::v3::traits::Error + * Lookup105: xcm::v3::traits::Error **/ XcmV3TraitsError: { _enum: { @@ -899,7 +969,7 @@ export default { } }, /** - * Lookup104: pallet_xcm::pallet::Event + * Lookup107: pallet_xcm::pallet::Event **/ PalletXcmEvent: { _enum: { @@ -929,7 +999,7 @@ export default { } }, /** - * Lookup105: xcm::v3::traits::Outcome + * Lookup108: xcm::v3::traits::Outcome **/ XcmV3TraitsOutcome: { _enum: { @@ -939,14 +1009,14 @@ export default { } }, /** - * Lookup106: xcm::v3::multilocation::MultiLocation + * Lookup109: xcm::v3::multilocation::MultiLocation **/ XcmV3MultiLocation: { parents: 'u8', interior: 'XcmV3Junctions' }, /** - * Lookup107: xcm::v3::junctions::Junctions + * Lookup110: xcm::v3::junctions::Junctions **/ XcmV3Junctions: { _enum: { @@ -962,7 +1032,7 @@ export default { } }, /** - * Lookup108: xcm::v3::junction::Junction + * Lookup111: xcm::v3::junction::Junction **/ XcmV3Junction: { _enum: { @@ -994,7 +1064,7 @@ export default { } }, /** - * Lookup111: xcm::v3::junction::NetworkId + * Lookup114: xcm::v3::junction::NetworkId **/ XcmV3JunctionNetworkId: { _enum: { @@ -1016,7 +1086,7 @@ export default { } }, /** - * Lookup113: xcm::v3::junction::BodyId + * Lookup116: xcm::v3::junction::BodyId **/ XcmV3JunctionBodyId: { _enum: { @@ -1033,7 +1103,7 @@ export default { } }, /** - * Lookup114: xcm::v3::junction::BodyPart + * Lookup117: xcm::v3::junction::BodyPart **/ XcmV3JunctionBodyPart: { _enum: { @@ -1056,11 +1126,11 @@ export default { } }, /** - * Lookup115: xcm::v3::Xcm + * Lookup118: xcm::v3::Xcm **/ XcmV3Xcm: 'Vec', /** - * Lookup117: xcm::v3::Instruction + * Lookup120: xcm::v3::Instruction **/ XcmV3Instruction: { _enum: { @@ -1202,18 +1272,18 @@ export default { } }, /** - * Lookup118: xcm::v3::multiasset::MultiAssets + * Lookup121: xcm::v3::multiasset::MultiAssets **/ XcmV3MultiassetMultiAssets: 'Vec', /** - * Lookup120: xcm::v3::multiasset::MultiAsset + * Lookup123: xcm::v3::multiasset::MultiAsset **/ XcmV3MultiAsset: { id: 'XcmV3MultiassetAssetId', fun: 'XcmV3MultiassetFungibility' }, /** - * Lookup121: xcm::v3::multiasset::AssetId + * Lookup124: xcm::v3::multiasset::AssetId **/ XcmV3MultiassetAssetId: { _enum: { @@ -1222,7 +1292,7 @@ export default { } }, /** - * Lookup122: xcm::v3::multiasset::Fungibility + * Lookup125: xcm::v3::multiasset::Fungibility **/ XcmV3MultiassetFungibility: { _enum: { @@ -1231,7 +1301,7 @@ export default { } }, /** - * Lookup123: xcm::v3::multiasset::AssetInstance + * Lookup126: xcm::v3::multiasset::AssetInstance **/ XcmV3MultiassetAssetInstance: { _enum: { @@ -1244,7 +1314,7 @@ export default { } }, /** - * Lookup125: xcm::v3::Response + * Lookup128: xcm::v3::Response **/ XcmV3Response: { _enum: { @@ -1252,16 +1322,12 @@ export default { Assets: 'XcmV3MultiassetMultiAssets', ExecutionResult: 'Option<(u32,XcmV3TraitsError)>', Version: 'u32', - PalletsInfo: 'XcmV3VecPalletInfo', + PalletsInfo: 'Vec', DispatchResult: 'XcmV3MaybeErrorCode' } }, /** - * Lookup128: xcm::v3::VecPalletInfo - **/ - XcmV3VecPalletInfo: 'Vec', - /** - * Lookup130: xcm::v3::PalletInfo + * Lookup132: xcm::v3::PalletInfo **/ XcmV3PalletInfo: { index: 'Compact', @@ -1272,7 +1338,7 @@ export default { patch: 'Compact' }, /** - * Lookup131: xcm::v3::MaybeErrorCode + * Lookup135: xcm::v3::MaybeErrorCode **/ XcmV3MaybeErrorCode: { _enum: { @@ -1282,19 +1348,19 @@ export default { } }, /** - * Lookup133: xcm::v2::OriginKind + * Lookup138: xcm::v2::OriginKind **/ XcmV2OriginKind: { _enum: ['Native', 'SovereignAccount', 'Superuser', 'Xcm'] }, /** - * Lookup134: xcm::double_encoded::DoubleEncoded + * Lookup139: xcm::double_encoded::DoubleEncoded **/ XcmDoubleEncoded: { encoded: 'Bytes' }, /** - * Lookup135: xcm::v3::QueryResponseInfo + * Lookup140: xcm::v3::QueryResponseInfo **/ XcmV3QueryResponseInfo: { destination: 'XcmV3MultiLocation', @@ -1302,7 +1368,7 @@ export default { maxWeight: 'SpWeightsWeightV2Weight' }, /** - * Lookup136: xcm::v3::multiasset::MultiAssetFilter + * Lookup141: xcm::v3::multiasset::MultiAssetFilter **/ XcmV3MultiassetMultiAssetFilter: { _enum: { @@ -1311,7 +1377,7 @@ export default { } }, /** - * Lookup137: xcm::v3::multiasset::WildMultiAsset + * Lookup142: xcm::v3::multiasset::WildMultiAsset **/ XcmV3MultiassetWildMultiAsset: { _enum: { @@ -1329,13 +1395,13 @@ export default { } }, /** - * Lookup138: xcm::v3::multiasset::WildFungibility + * Lookup143: xcm::v3::multiasset::WildFungibility **/ XcmV3MultiassetWildFungibility: { _enum: ['Fungible', 'NonFungible'] }, /** - * Lookup139: xcm::v3::WeightLimit + * Lookup144: xcm::v3::WeightLimit **/ XcmV3WeightLimit: { _enum: { @@ -1344,27 +1410,29 @@ export default { } }, /** - * Lookup140: xcm::VersionedMultiAssets + * Lookup145: xcm::VersionedMultiAssets **/ XcmVersionedMultiAssets: { _enum: { + __Unused0: 'Null', V2: 'XcmV2MultiassetMultiAssets', + __Unused2: 'Null', V3: 'XcmV3MultiassetMultiAssets' } }, /** - * Lookup141: xcm::v2::multiasset::MultiAssets + * Lookup146: xcm::v2::multiasset::MultiAssets **/ XcmV2MultiassetMultiAssets: 'Vec', /** - * Lookup143: xcm::v2::multiasset::MultiAsset + * Lookup148: xcm::v2::multiasset::MultiAsset **/ XcmV2MultiAsset: { id: 'XcmV2MultiassetAssetId', fun: 'XcmV2MultiassetFungibility' }, /** - * Lookup144: xcm::v2::multiasset::AssetId + * Lookup149: xcm::v2::multiasset::AssetId **/ XcmV2MultiassetAssetId: { _enum: { @@ -1373,14 +1441,14 @@ export default { } }, /** - * Lookup145: xcm::v2::multilocation::MultiLocation + * Lookup150: xcm::v2::multilocation::MultiLocation **/ XcmV2MultiLocation: { parents: 'u8', interior: 'XcmV2MultilocationJunctions' }, /** - * Lookup146: xcm::v2::multilocation::Junctions + * Lookup151: xcm::v2::multilocation::Junctions **/ XcmV2MultilocationJunctions: { _enum: { @@ -1396,7 +1464,7 @@ export default { } }, /** - * Lookup147: xcm::v2::junction::Junction + * Lookup152: xcm::v2::junction::Junction **/ XcmV2Junction: { _enum: { @@ -1424,7 +1492,7 @@ export default { } }, /** - * Lookup148: xcm::v2::NetworkId + * Lookup153: xcm::v2::NetworkId **/ XcmV2NetworkId: { _enum: { @@ -1435,7 +1503,7 @@ export default { } }, /** - * Lookup150: xcm::v2::BodyId + * Lookup155: xcm::v2::BodyId **/ XcmV2BodyId: { _enum: { @@ -1452,7 +1520,7 @@ export default { } }, /** - * Lookup151: xcm::v2::BodyPart + * Lookup156: xcm::v2::BodyPart **/ XcmV2BodyPart: { _enum: { @@ -1475,7 +1543,7 @@ export default { } }, /** - * Lookup152: xcm::v2::multiasset::Fungibility + * Lookup157: xcm::v2::multiasset::Fungibility **/ XcmV2MultiassetFungibility: { _enum: { @@ -1484,7 +1552,7 @@ export default { } }, /** - * Lookup153: xcm::v2::multiasset::AssetInstance + * Lookup158: xcm::v2::multiasset::AssetInstance **/ XcmV2MultiassetAssetInstance: { _enum: { @@ -1498,16 +1566,18 @@ export default { } }, /** - * Lookup154: xcm::VersionedMultiLocation + * Lookup159: xcm::VersionedMultiLocation **/ XcmVersionedMultiLocation: { _enum: { + __Unused0: 'Null', V2: 'XcmV2MultiLocation', + __Unused2: 'Null', V3: 'XcmV3MultiLocation' } }, /** - * Lookup155: cumulus_pallet_xcm::pallet::Event + * Lookup160: cumulus_pallet_xcm::pallet::Event **/ CumulusPalletXcmEvent: { _enum: { @@ -1517,7 +1587,7 @@ export default { } }, /** - * Lookup156: cumulus_pallet_dmp_queue::pallet::Event + * Lookup161: cumulus_pallet_dmp_queue::pallet::Event **/ CumulusPalletDmpQueueEvent: { _enum: { @@ -1543,12 +1613,15 @@ export default { }, OverweightServiced: { overweightIndex: 'u64', - weightUsed: 'SpWeightsWeightV2Weight' + weightUsed: 'SpWeightsWeightV2Weight', + }, + MaxMessagesExhausted: { + messageId: '[u8;32]' } } }, /** - * Lookup157: frame_system::Phase + * Lookup162: frame_system::Phase **/ FrameSystemPhase: { _enum: { @@ -1558,14 +1631,14 @@ export default { } }, /** - * Lookup160: frame_system::LastRuntimeUpgradeInfo + * Lookup165: frame_system::LastRuntimeUpgradeInfo **/ FrameSystemLastRuntimeUpgradeInfo: { specVersion: 'Compact', specName: 'Text' }, /** - * Lookup162: frame_system::pallet::Call + * Lookup167: frame_system::pallet::Call **/ FrameSystemCall: { _enum: { @@ -1600,7 +1673,7 @@ export default { } }, /** - * Lookup166: frame_system::limits::BlockWeights + * Lookup171: frame_system::limits::BlockWeights **/ FrameSystemLimitsBlockWeights: { baseBlock: 'SpWeightsWeightV2Weight', @@ -1608,7 +1681,7 @@ export default { perClass: 'FrameSupportDispatchPerDispatchClassWeightsPerClass' }, /** - * Lookup167: frame_support::dispatch::PerDispatchClass + * Lookup172: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassWeightsPerClass: { normal: 'FrameSystemLimitsWeightsPerClass', @@ -1616,7 +1689,7 @@ export default { mandatory: 'FrameSystemLimitsWeightsPerClass' }, /** - * Lookup168: frame_system::limits::WeightsPerClass + * Lookup173: frame_system::limits::WeightsPerClass **/ FrameSystemLimitsWeightsPerClass: { baseExtrinsic: 'SpWeightsWeightV2Weight', @@ -1625,13 +1698,13 @@ export default { reserved: 'Option' }, /** - * Lookup170: frame_system::limits::BlockLength + * Lookup175: frame_system::limits::BlockLength **/ FrameSystemLimitsBlockLength: { max: 'FrameSupportDispatchPerDispatchClassU32' }, /** - * Lookup171: frame_support::dispatch::PerDispatchClass + * Lookup176: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassU32: { normal: 'u32', @@ -1639,14 +1712,14 @@ export default { mandatory: 'u32' }, /** - * Lookup172: sp_weights::RuntimeDbWeight + * Lookup177: sp_weights::RuntimeDbWeight **/ SpWeightsRuntimeDbWeight: { read: 'u64', write: 'u64' }, /** - * Lookup173: sp_version::RuntimeVersion + * Lookup178: sp_version::RuntimeVersion **/ SpVersionRuntimeVersion: { specName: 'Text', @@ -1659,13 +1732,13 @@ export default { stateVersion: 'u8' }, /** - * Lookup177: frame_system::pallet::Error + * Lookup182: frame_system::pallet::Error **/ FrameSystemError: { _enum: ['InvalidSpecName', 'SpecVersionNeedsToIncrease', 'FailedToExtractRuntimeVersion', 'NonDefaultComposite', 'NonZeroRefCount', 'CallFiltered'] }, /** - * Lookup179: pallet_timestamp::pallet::Call + * Lookup183: pallet_timestamp::pallet::Call **/ PalletTimestampCall: { _enum: { @@ -1675,7 +1748,7 @@ export default { } }, /** - * Lookup181: pallet_indices::pallet::Call + * Lookup185: pallet_indices::pallet::Call **/ PalletIndicesCall: { _enum: { @@ -1706,13 +1779,13 @@ export default { } }, /** - * Lookup184: pallet_indices::pallet::Error + * Lookup188: pallet_indices::pallet::Error **/ PalletIndicesError: { _enum: ['NotAssigned', 'NotOwner', 'InUse', 'NotTransfer', 'Permanent'] }, /** - * Lookup186: pallet_balances::BalanceLock + * Lookup190: pallet_balances::BalanceLock **/ PalletBalancesBalanceLock: { id: '[u8;8]', @@ -1720,20 +1793,20 @@ export default { reasons: 'PalletBalancesReasons' }, /** - * Lookup187: pallet_balances::Reasons + * Lookup191: pallet_balances::Reasons **/ PalletBalancesReasons: { _enum: ['Fee', 'Misc', 'All'] }, /** - * Lookup190: pallet_balances::ReserveData + * Lookup194: pallet_balances::ReserveData **/ PalletBalancesReserveData: { id: '[u8;8]', amount: 'u128' }, /** - * Lookup192: pallet_balances::pallet::Call + * Lookup196: pallet_balances::pallet::Call **/ PalletBalancesCall: { _enum: { @@ -1766,37 +1839,37 @@ export default { } }, /** - * Lookup193: pallet_balances::pallet::Error + * Lookup197: pallet_balances::pallet::Error **/ PalletBalancesError: { _enum: ['VestingBalance', 'LiquidityRestrictions', 'InsufficientBalance', 'ExistentialDeposit', 'KeepAlive', 'ExistingVestingSchedule', 'DeadAccount', 'TooManyReserves'] }, /** - * Lookup195: pallet_transaction_payment::Releases + * Lookup199: pallet_transaction_payment::Releases **/ PalletTransactionPaymentReleases: { _enum: ['V1Ancient', 'V2'] }, /** - * Lookup197: sp_consensus_aura::sr25519::app_sr25519::Public + * Lookup201: sp_consensus_aura::sr25519::app_sr25519::Public **/ SpConsensusAuraSr25519AppSr25519Public: 'SpCoreSr25519Public', /** - * Lookup198: sp_core::sr25519::Public + * Lookup202: sp_core::sr25519::Public **/ SpCoreSr25519Public: '[u8;32]', /** - * Lookup204: spiritnet_runtime::SessionKeys + * Lookup208: spiritnet_runtime::SessionKeys **/ SpiritnetRuntimeSessionKeys: { aura: 'SpConsensusAuraSr25519AppSr25519Public' }, /** - * Lookup207: sp_core::crypto::KeyTypeId + * Lookup211: sp_core::crypto::KeyTypeId **/ SpCoreCryptoKeyTypeId: '[u8;4]', /** - * Lookup208: pallet_session::pallet::Call + * Lookup212: pallet_session::pallet::Call **/ PalletSessionCall: { _enum: { @@ -1811,13 +1884,13 @@ export default { } }, /** - * Lookup209: pallet_session::pallet::Error + * Lookup213: pallet_session::pallet::Error **/ PalletSessionError: { _enum: ['InvalidProof', 'NoAssociatedValidatorId', 'DuplicatedKey', 'NoKeys', 'NoAccount'] }, /** - * Lookup210: parachain_staking::types::RoundInfo + * Lookup214: parachain_staking::types::RoundInfo **/ ParachainStakingRoundInfo: { current: 'u32', @@ -1825,21 +1898,21 @@ export default { length: 'u64' }, /** - * Lookup211: parachain_staking::types::DelegationCounter + * Lookup215: parachain_staking::types::DelegationCounter **/ ParachainStakingDelegationCounter: { round: 'u32', counter: 'u32' }, /** - * Lookup212: parachain_staking::types::Stake + * Lookup216: parachain_staking::types::Stake **/ ParachainStakingStake: { owner: 'AccountId32', amount: 'u128' }, /** - * Lookup213: parachain_staking::types::Candidate + * Lookup217: parachain_staking::types::Candidate **/ ParachainStakingCandidate: { id: 'AccountId32', @@ -1849,11 +1922,11 @@ export default { status: 'ParachainStakingCandidateStatus' }, /** - * Lookup214: parachain_staking::set::OrderedSet, S> + * Lookup218: parachain_staking::set::OrderedSet, S> **/ ParachainStakingSetOrderedSet: 'Vec', /** - * Lookup217: parachain_staking::types::CandidateStatus + * Lookup221: parachain_staking::types::CandidateStatus **/ ParachainStakingCandidateStatus: { _enum: { @@ -1862,35 +1935,35 @@ export default { } }, /** - * Lookup218: parachain_staking::types::TotalStake + * Lookup222: parachain_staking::types::TotalStake **/ ParachainStakingTotalStake: { collators: 'u128', delegators: 'u128' }, /** - * Lookup221: parachain_staking::inflation::InflationInfo + * Lookup225: parachain_staking::inflation::InflationInfo **/ ParachainStakingInflationInflationInfo: { collator: 'ParachainStakingInflationStakingInfo', delegator: 'ParachainStakingInflationStakingInfo' }, /** - * Lookup222: parachain_staking::inflation::StakingInfo + * Lookup226: parachain_staking::inflation::StakingInfo **/ ParachainStakingInflationStakingInfo: { maxRate: 'Perquintill', rewardRate: 'ParachainStakingInflationRewardRate' }, /** - * Lookup223: parachain_staking::inflation::RewardRate + * Lookup227: parachain_staking::inflation::RewardRate **/ ParachainStakingInflationRewardRate: { annual: 'Perquintill', perBlock: 'Perquintill' }, /** - * Lookup228: parachain_staking::pallet::Call + * Lookup232: parachain_staking::pallet::Call **/ ParachainStakingCall: { _enum: { @@ -1957,13 +2030,13 @@ export default { } }, /** - * Lookup229: parachain_staking::pallet::Error + * Lookup233: parachain_staking::pallet::Error **/ ParachainStakingError: { _enum: ['DelegatorNotFound', 'CandidateNotFound', 'DelegatorExists', 'CandidateExists', 'ValStakeZero', 'ValStakeBelowMin', 'ValStakeAboveMax', 'DelegationBelowMin', 'AlreadyLeaving', 'NotLeaving', 'CannotLeaveYet', 'CannotJoinBeforeUnlocking', 'AlreadyDelegating', 'NotYetDelegating', 'DelegationsPerRoundExceeded', 'TooManyDelegators', 'TooFewCollatorCandidates', 'CannotStakeIfLeaving', 'CannotDelegateIfLeaving', 'MaxCollatorsPerDelegatorExceeded', 'AlreadyDelegatedCollator', 'DelegationNotFound', 'Underflow', 'CannotSetAboveMax', 'CannotSetBelowMin', 'InvalidSchedule', 'NoMoreUnstaking', 'TooEarly', 'StakeNotFound', 'UnstakingIsEmpty', 'RewardsNotFound'] }, /** - * Lookup232: frame_support::traits::preimages::Bounded + * Lookup236: frame_support::traits::preimages::Bounded **/ FrameSupportPreimagesBounded: { _enum: { @@ -1984,7 +2057,7 @@ export default { } }, /** - * Lookup234: pallet_democracy::pallet::Call + * Lookup238: pallet_democracy::pallet::Call **/ PalletDemocracyCall: { _enum: { @@ -2044,18 +2117,22 @@ export default { maybeRefIndex: 'Option', }, cancel_proposal: { - propIndex: 'Compact' + propIndex: 'Compact', + }, + set_metadata: { + owner: 'PalletDemocracyMetadataOwner', + maybeHash: 'Option' } } }, /** - * Lookup235: pallet_democracy::conviction::Conviction + * Lookup239: pallet_democracy::conviction::Conviction **/ PalletDemocracyConviction: { _enum: ['None', 'Locked1x', 'Locked2x', 'Locked3x', 'Locked4x', 'Locked5x', 'Locked6x'] }, /** - * Lookup237: pallet_collective::pallet::Call + * Lookup242: pallet_collective::pallet::Call **/ PalletCollectiveCall: { _enum: { @@ -2096,7 +2173,7 @@ export default { } }, /** - * Lookup242: pallet_membership::pallet::Call + * Lookup247: pallet_membership::pallet::Call **/ PalletMembershipCall: { _enum: { @@ -2126,7 +2203,7 @@ export default { } }, /** - * Lookup243: pallet_treasury::pallet::Call + * Lookup248: pallet_treasury::pallet::Call **/ PalletTreasuryCall: { _enum: { @@ -2150,7 +2227,7 @@ export default { } }, /** - * Lookup244: pallet_utility::pallet::Call + * Lookup249: pallet_utility::pallet::Call **/ PalletUtilityCall: { _enum: { @@ -2178,7 +2255,7 @@ export default { } }, /** - * Lookup246: spiritnet_runtime::OriginCaller + * Lookup251: spiritnet_runtime::OriginCaller **/ SpiritnetRuntimeOriginCaller: { _enum: { @@ -2270,7 +2347,7 @@ export default { } }, /** - * Lookup247: frame_support::dispatch::RawOrigin + * Lookup252: frame_support::dispatch::RawOrigin **/ FrameSupportDispatchRawOrigin: { _enum: { @@ -2280,7 +2357,7 @@ export default { } }, /** - * Lookup248: pallet_collective::RawOrigin + * Lookup253: pallet_collective::RawOrigin **/ PalletCollectiveRawOrigin: { _enum: { @@ -2290,14 +2367,14 @@ export default { } }, /** - * Lookup250: did::origin::DidRawOrigin + * Lookup255: did::origin::DidRawOrigin **/ DidOriginDidRawOrigin: { id: 'AccountId32', submitter: 'AccountId32' }, /** - * Lookup251: pallet_xcm::pallet::Origin + * Lookup256: pallet_xcm::pallet::Origin **/ PalletXcmOrigin: { _enum: { @@ -2306,7 +2383,7 @@ export default { } }, /** - * Lookup252: cumulus_pallet_xcm::pallet::Origin + * Lookup257: cumulus_pallet_xcm::pallet::Origin **/ CumulusPalletXcmOrigin: { _enum: { @@ -2315,11 +2392,11 @@ export default { } }, /** - * Lookup253: sp_core::Void + * Lookup258: sp_core::Void **/ SpCoreVoid: 'Null', /** - * Lookup254: pallet_vesting::pallet::Call + * Lookup259: pallet_vesting::pallet::Call **/ PalletVestingCall: { _enum: { @@ -2343,7 +2420,7 @@ export default { } }, /** - * Lookup255: pallet_vesting::vesting_info::VestingInfo + * Lookup260: pallet_vesting::vesting_info::VestingInfo **/ PalletVestingVestingInfo: { locked: 'u128', @@ -2351,7 +2428,7 @@ export default { startingBlock: 'u64' }, /** - * Lookup256: pallet_scheduler::pallet::Call + * Lookup261: pallet_scheduler::pallet::Call **/ PalletSchedulerCall: { _enum: { @@ -2391,7 +2468,7 @@ export default { } }, /** - * Lookup258: pallet_proxy::pallet::Call + * Lookup263: pallet_proxy::pallet::Call **/ PalletProxyCall: { _enum: { @@ -2444,7 +2521,7 @@ export default { } }, /** - * Lookup260: pallet_preimage::pallet::Call + * Lookup265: pallet_preimage::pallet::Call **/ PalletPreimageCall: { _enum: { @@ -2472,7 +2549,7 @@ export default { } }, /** - * Lookup262: pallet_tips::pallet::Call + * Lookup267: pallet_tips::pallet::Call **/ PalletTipsCall: { _enum: { @@ -2513,7 +2590,38 @@ export default { } }, /** - * Lookup263: ctype::pallet::Call + * Lookup268: pallet_multisig::pallet::Call + **/ + PalletMultisigCall: { + _enum: { + as_multi_threshold_1: { + otherSignatories: 'Vec', + call: 'Call', + }, + as_multi: { + threshold: 'u16', + otherSignatories: 'Vec', + maybeTimepoint: 'Option', + call: 'Call', + maxWeight: 'SpWeightsWeightV2Weight', + }, + approve_as_multi: { + threshold: 'u16', + otherSignatories: 'Vec', + maybeTimepoint: 'Option', + callHash: '[u8;32]', + maxWeight: 'SpWeightsWeightV2Weight', + }, + cancel_as_multi: { + threshold: 'u16', + otherSignatories: 'Vec', + timepoint: 'PalletMultisigTimepoint', + callHash: '[u8;32]' + } + } + }, + /** + * Lookup270: ctype::pallet::Call **/ CtypeCall: { _enum: { @@ -2527,7 +2635,7 @@ export default { } }, /** - * Lookup264: attestation::pallet::Call + * Lookup271: attestation::pallet::Call **/ AttestationCall: { _enum: { @@ -2556,7 +2664,7 @@ export default { } }, /** - * Lookup266: runtime_common::authorization::PalletAuthorize> + * Lookup273: runtime_common::authorization::PalletAuthorize> **/ RuntimeCommonAuthorizationPalletAuthorize: { _enum: { @@ -2564,18 +2672,18 @@ export default { } }, /** - * Lookup267: delegation::access_control::DelegationAc + * Lookup274: delegation::access_control::DelegationAc **/ DelegationAccessControlDelegationAc: { subjectNodeId: 'H256', maxChecks: 'u32' }, /** - * Lookup268: spiritnet_runtime::Runtime + * Lookup275: spiritnet_runtime::Runtime **/ SpiritnetRuntimeRuntime: 'Null', /** - * Lookup269: delegation::pallet::Call + * Lookup276: delegation::pallet::Call **/ DelegationCall: { _enum: { @@ -2612,7 +2720,7 @@ export default { } }, /** - * Lookup270: did::did_details::DidSignature + * Lookup277: did::did_details::DidSignature **/ DidDidDetailsDidSignature: { _enum: { @@ -2622,19 +2730,19 @@ export default { } }, /** - * Lookup271: sp_core::ed25519::Signature + * Lookup278: sp_core::ed25519::Signature **/ SpCoreEd25519Signature: '[u8;64]', /** - * Lookup273: sp_core::sr25519::Signature + * Lookup280: sp_core::sr25519::Signature **/ SpCoreSr25519Signature: '[u8;64]', /** - * Lookup274: sp_core::ecdsa::Signature + * Lookup281: sp_core::ecdsa::Signature **/ SpCoreEcdsaSignature: '[u8;65]', /** - * Lookup276: did::pallet::Call + * Lookup283: did::pallet::Call **/ DidCall: { _enum: { @@ -2683,7 +2791,7 @@ export default { } }, /** - * Lookup277: did::did_details::DidCreationDetails + * Lookup284: did::did_details::DidCreationDetails **/ DidDidDetailsDidCreationDetails: { did: 'AccountId32', @@ -2694,7 +2802,7 @@ export default { newServiceDetails: 'Vec' }, /** - * Lookup279: did::did_details::DidEncryptionKey + * Lookup286: did::did_details::DidEncryptionKey **/ DidDidDetailsDidEncryptionKey: { _enum: { @@ -2702,7 +2810,7 @@ export default { } }, /** - * Lookup283: did::did_details::DidVerificationKey + * Lookup290: did::did_details::DidVerificationKey **/ DidDidDetailsDidVerificationKey: { _enum: { @@ -2712,15 +2820,15 @@ export default { } }, /** - * Lookup284: sp_core::ed25519::Public + * Lookup291: sp_core::ed25519::Public **/ SpCoreEd25519Public: '[u8;32]', /** - * Lookup285: sp_core::ecdsa::Public + * Lookup292: sp_core::ecdsa::Public **/ SpCoreEcdsaPublic: '[u8;33]', /** - * Lookup288: did::service_endpoints::DidEndpoint + * Lookup295: did::service_endpoints::DidEndpoint **/ DidServiceEndpointsDidEndpoint: { id: 'Bytes', @@ -2728,7 +2836,7 @@ export default { urls: 'Vec' }, /** - * Lookup296: did::did_details::DidAuthorizedCallOperation + * Lookup303: did::did_details::DidAuthorizedCallOperation **/ DidDidDetailsDidAuthorizedCallOperation: { did: 'AccountId32', @@ -2738,7 +2846,7 @@ export default { submitter: 'AccountId32' }, /** - * Lookup297: pallet_did_lookup::pallet::Call + * Lookup304: pallet_did_lookup::pallet::Call **/ PalletDidLookupCall: { _enum: { @@ -2758,262 +2866,12 @@ export default { account: 'PalletDidLookupLinkableAccountLinkableAccountId', }, update_deposit: { - account: 'PalletDidLookupLinkableAccountLinkableAccountId', - }, - __Unused7: 'Null', - __Unused8: 'Null', - __Unused9: 'Null', - __Unused10: 'Null', - __Unused11: 'Null', - __Unused12: 'Null', - __Unused13: 'Null', - __Unused14: 'Null', - __Unused15: 'Null', - __Unused16: 'Null', - __Unused17: 'Null', - __Unused18: 'Null', - __Unused19: 'Null', - __Unused20: 'Null', - __Unused21: 'Null', - __Unused22: 'Null', - __Unused23: 'Null', - __Unused24: 'Null', - __Unused25: 'Null', - __Unused26: 'Null', - __Unused27: 'Null', - __Unused28: 'Null', - __Unused29: 'Null', - __Unused30: 'Null', - __Unused31: 'Null', - __Unused32: 'Null', - __Unused33: 'Null', - __Unused34: 'Null', - __Unused35: 'Null', - __Unused36: 'Null', - __Unused37: 'Null', - __Unused38: 'Null', - __Unused39: 'Null', - __Unused40: 'Null', - __Unused41: 'Null', - __Unused42: 'Null', - __Unused43: 'Null', - __Unused44: 'Null', - __Unused45: 'Null', - __Unused46: 'Null', - __Unused47: 'Null', - __Unused48: 'Null', - __Unused49: 'Null', - __Unused50: 'Null', - __Unused51: 'Null', - __Unused52: 'Null', - __Unused53: 'Null', - __Unused54: 'Null', - __Unused55: 'Null', - __Unused56: 'Null', - __Unused57: 'Null', - __Unused58: 'Null', - __Unused59: 'Null', - __Unused60: 'Null', - __Unused61: 'Null', - __Unused62: 'Null', - __Unused63: 'Null', - __Unused64: 'Null', - __Unused65: 'Null', - __Unused66: 'Null', - __Unused67: 'Null', - __Unused68: 'Null', - __Unused69: 'Null', - __Unused70: 'Null', - __Unused71: 'Null', - __Unused72: 'Null', - __Unused73: 'Null', - __Unused74: 'Null', - __Unused75: 'Null', - __Unused76: 'Null', - __Unused77: 'Null', - __Unused78: 'Null', - __Unused79: 'Null', - __Unused80: 'Null', - __Unused81: 'Null', - __Unused82: 'Null', - __Unused83: 'Null', - __Unused84: 'Null', - __Unused85: 'Null', - __Unused86: 'Null', - __Unused87: 'Null', - __Unused88: 'Null', - __Unused89: 'Null', - __Unused90: 'Null', - __Unused91: 'Null', - __Unused92: 'Null', - __Unused93: 'Null', - __Unused94: 'Null', - __Unused95: 'Null', - __Unused96: 'Null', - __Unused97: 'Null', - __Unused98: 'Null', - __Unused99: 'Null', - __Unused100: 'Null', - __Unused101: 'Null', - __Unused102: 'Null', - __Unused103: 'Null', - __Unused104: 'Null', - __Unused105: 'Null', - __Unused106: 'Null', - __Unused107: 'Null', - __Unused108: 'Null', - __Unused109: 'Null', - __Unused110: 'Null', - __Unused111: 'Null', - __Unused112: 'Null', - __Unused113: 'Null', - __Unused114: 'Null', - __Unused115: 'Null', - __Unused116: 'Null', - __Unused117: 'Null', - __Unused118: 'Null', - __Unused119: 'Null', - __Unused120: 'Null', - __Unused121: 'Null', - __Unused122: 'Null', - __Unused123: 'Null', - __Unused124: 'Null', - __Unused125: 'Null', - __Unused126: 'Null', - __Unused127: 'Null', - __Unused128: 'Null', - __Unused129: 'Null', - __Unused130: 'Null', - __Unused131: 'Null', - __Unused132: 'Null', - __Unused133: 'Null', - __Unused134: 'Null', - __Unused135: 'Null', - __Unused136: 'Null', - __Unused137: 'Null', - __Unused138: 'Null', - __Unused139: 'Null', - __Unused140: 'Null', - __Unused141: 'Null', - __Unused142: 'Null', - __Unused143: 'Null', - __Unused144: 'Null', - __Unused145: 'Null', - __Unused146: 'Null', - __Unused147: 'Null', - __Unused148: 'Null', - __Unused149: 'Null', - __Unused150: 'Null', - __Unused151: 'Null', - __Unused152: 'Null', - __Unused153: 'Null', - __Unused154: 'Null', - __Unused155: 'Null', - __Unused156: 'Null', - __Unused157: 'Null', - __Unused158: 'Null', - __Unused159: 'Null', - __Unused160: 'Null', - __Unused161: 'Null', - __Unused162: 'Null', - __Unused163: 'Null', - __Unused164: 'Null', - __Unused165: 'Null', - __Unused166: 'Null', - __Unused167: 'Null', - __Unused168: 'Null', - __Unused169: 'Null', - __Unused170: 'Null', - __Unused171: 'Null', - __Unused172: 'Null', - __Unused173: 'Null', - __Unused174: 'Null', - __Unused175: 'Null', - __Unused176: 'Null', - __Unused177: 'Null', - __Unused178: 'Null', - __Unused179: 'Null', - __Unused180: 'Null', - __Unused181: 'Null', - __Unused182: 'Null', - __Unused183: 'Null', - __Unused184: 'Null', - __Unused185: 'Null', - __Unused186: 'Null', - __Unused187: 'Null', - __Unused188: 'Null', - __Unused189: 'Null', - __Unused190: 'Null', - __Unused191: 'Null', - __Unused192: 'Null', - __Unused193: 'Null', - __Unused194: 'Null', - __Unused195: 'Null', - __Unused196: 'Null', - __Unused197: 'Null', - __Unused198: 'Null', - __Unused199: 'Null', - __Unused200: 'Null', - __Unused201: 'Null', - __Unused202: 'Null', - __Unused203: 'Null', - __Unused204: 'Null', - __Unused205: 'Null', - __Unused206: 'Null', - __Unused207: 'Null', - __Unused208: 'Null', - __Unused209: 'Null', - __Unused210: 'Null', - __Unused211: 'Null', - __Unused212: 'Null', - __Unused213: 'Null', - __Unused214: 'Null', - __Unused215: 'Null', - __Unused216: 'Null', - __Unused217: 'Null', - __Unused218: 'Null', - __Unused219: 'Null', - __Unused220: 'Null', - __Unused221: 'Null', - __Unused222: 'Null', - __Unused223: 'Null', - __Unused224: 'Null', - __Unused225: 'Null', - __Unused226: 'Null', - __Unused227: 'Null', - __Unused228: 'Null', - __Unused229: 'Null', - __Unused230: 'Null', - __Unused231: 'Null', - __Unused232: 'Null', - __Unused233: 'Null', - __Unused234: 'Null', - __Unused235: 'Null', - __Unused236: 'Null', - __Unused237: 'Null', - __Unused238: 'Null', - __Unused239: 'Null', - __Unused240: 'Null', - __Unused241: 'Null', - __Unused242: 'Null', - __Unused243: 'Null', - __Unused244: 'Null', - __Unused245: 'Null', - __Unused246: 'Null', - __Unused247: 'Null', - __Unused248: 'Null', - __Unused249: 'Null', - __Unused250: 'Null', - __Unused251: 'Null', - __Unused252: 'Null', - __Unused253: 'Null', - migrate: { - limit: 'u32' + account: 'PalletDidLookupLinkableAccountLinkableAccountId' } } }, /** - * Lookup298: pallet_did_lookup::associate_account_request::AssociateAccountRequest + * Lookup305: pallet_did_lookup::associate_account_request::AssociateAccountRequest **/ PalletDidLookupAssociateAccountRequest: { _enum: { @@ -3022,7 +2880,7 @@ export default { } }, /** - * Lookup299: sp_runtime::MultiSignature + * Lookup306: sp_runtime::MultiSignature **/ SpRuntimeMultiSignature: { _enum: { @@ -3032,11 +2890,11 @@ export default { } }, /** - * Lookup300: pallet_did_lookup::account::EthereumSignature + * Lookup307: pallet_did_lookup::account::EthereumSignature **/ PalletDidLookupAccountEthereumSignature: 'SpCoreEcdsaSignature', /** - * Lookup301: pallet_web3_names::pallet::Call + * Lookup308: pallet_web3_names::pallet::Call **/ PalletWeb3NamesCall: { _enum: { @@ -3060,7 +2918,7 @@ export default { } }, /** - * Lookup302: public_credentials::pallet::Call + * Lookup309: public_credentials::pallet::Call **/ PublicCredentialsCall: { _enum: { @@ -3091,7 +2949,7 @@ export default { } }, /** - * Lookup303: public_credentials::credentials::Credential, sp_core::bounded::bounded_vec::BoundedVec, runtime_common::authorization::PalletAuthorize>> + * Lookup310: public_credentials::credentials::Credential, bounded_collections::bounded_vec::BoundedVec, runtime_common::authorization::PalletAuthorize>> **/ PublicCredentialsCredentialsCredential: { ctypeHash: 'H256', @@ -3100,7 +2958,7 @@ export default { authorization: 'Option' }, /** - * Lookup306: cumulus_pallet_parachain_system::pallet::Call + * Lookup313: cumulus_pallet_parachain_system::pallet::Call **/ CumulusPalletParachainSystemCall: { _enum: { @@ -3112,6 +2970,7 @@ export default { }, authorize_upgrade: { codeHash: 'H256', + checkVersion: 'bool', }, enact_authorized_upgrade: { code: 'Bytes' @@ -3119,7 +2978,7 @@ export default { } }, /** - * Lookup307: cumulus_primitives_parachain_inherent::ParachainInherentData + * Lookup314: cumulus_primitives_parachain_inherent::ParachainInherentData **/ CumulusPrimitivesParachainInherentParachainInherentData: { validationData: 'PolkadotPrimitivesV2PersistedValidationData', @@ -3128,7 +2987,7 @@ export default { horizontalMessages: 'BTreeMap>' }, /** - * Lookup308: polkadot_primitives::v2::PersistedValidationData + * Lookup315: polkadot_primitives::v2::PersistedValidationData **/ PolkadotPrimitivesV2PersistedValidationData: { parentHead: 'Bytes', @@ -3137,27 +2996,27 @@ export default { maxPovSize: 'u32' }, /** - * Lookup310: sp_trie::storage_proof::StorageProof + * Lookup317: sp_trie::storage_proof::StorageProof **/ SpTrieStorageProof: { trieNodes: 'BTreeSet' }, /** - * Lookup313: polkadot_core_primitives::InboundDownwardMessage + * Lookup320: polkadot_core_primitives::InboundDownwardMessage **/ PolkadotCorePrimitivesInboundDownwardMessage: { sentAt: 'u32', msg: 'Bytes' }, /** - * Lookup316: polkadot_core_primitives::InboundHrmpMessage + * Lookup323: polkadot_core_primitives::InboundHrmpMessage **/ PolkadotCorePrimitivesInboundHrmpMessage: { sentAt: 'u32', data: 'Bytes' }, /** - * Lookup319: cumulus_pallet_xcmp_queue::pallet::Call + * Lookup326: cumulus_pallet_xcmp_queue::pallet::Call **/ CumulusPalletXcmpQueueCall: { _enum: { @@ -3206,7 +3065,7 @@ export default { } }, /** - * Lookup320: pallet_xcm::pallet::Call + * Lookup327: pallet_xcm::pallet::Call **/ PalletXcmCall: { _enum: { @@ -3260,7 +3119,7 @@ export default { } }, /** - * Lookup321: xcm::VersionedXcm + * Lookup328: xcm::VersionedXcm **/ XcmVersionedXcm: { _enum: { @@ -3271,11 +3130,11 @@ export default { } }, /** - * Lookup322: xcm::v2::Xcm + * Lookup329: xcm::v2::Xcm **/ XcmV2Xcm: 'Vec', /** - * Lookup324: xcm::v2::Instruction + * Lookup331: xcm::v2::Instruction **/ XcmV2Instruction: { _enum: { @@ -3373,7 +3232,7 @@ export default { } }, /** - * Lookup325: xcm::v2::Response + * Lookup332: xcm::v2::Response **/ XcmV2Response: { _enum: { @@ -3384,7 +3243,7 @@ export default { } }, /** - * Lookup328: xcm::v2::traits::Error + * Lookup335: xcm::v2::traits::Error **/ XcmV2TraitsError: { _enum: { @@ -3417,7 +3276,7 @@ export default { } }, /** - * Lookup329: xcm::v2::multiasset::MultiAssetFilter + * Lookup336: xcm::v2::multiasset::MultiAssetFilter **/ XcmV2MultiassetMultiAssetFilter: { _enum: { @@ -3426,7 +3285,7 @@ export default { } }, /** - * Lookup330: xcm::v2::multiasset::WildMultiAsset + * Lookup337: xcm::v2::multiasset::WildMultiAsset **/ XcmV2MultiassetWildMultiAsset: { _enum: { @@ -3438,13 +3297,13 @@ export default { } }, /** - * Lookup331: xcm::v2::multiasset::WildFungibility + * Lookup338: xcm::v2::multiasset::WildFungibility **/ XcmV2MultiassetWildFungibility: { _enum: ['Fungible', 'NonFungible'] }, /** - * Lookup332: xcm::v2::WeightLimit + * Lookup339: xcm::v2::WeightLimit **/ XcmV2WeightLimit: { _enum: { @@ -3453,7 +3312,7 @@ export default { } }, /** - * Lookup341: cumulus_pallet_dmp_queue::pallet::Call + * Lookup348: cumulus_pallet_dmp_queue::pallet::Call **/ CumulusPalletDmpQueueCall: { _enum: { @@ -3464,7 +3323,7 @@ export default { } }, /** - * Lookup345: pallet_democracy::types::ReferendumInfo, Balance> + * Lookup352: pallet_democracy::types::ReferendumInfo, Balance> **/ PalletDemocracyReferendumInfo: { _enum: { @@ -3476,7 +3335,7 @@ export default { } }, /** - * Lookup346: pallet_democracy::types::ReferendumStatus, Balance> + * Lookup353: pallet_democracy::types::ReferendumStatus, Balance> **/ PalletDemocracyReferendumStatus: { end: 'u64', @@ -3486,7 +3345,7 @@ export default { tally: 'PalletDemocracyTally' }, /** - * Lookup347: pallet_democracy::types::Tally + * Lookup354: pallet_democracy::types::Tally **/ PalletDemocracyTally: { ayes: 'u128', @@ -3494,7 +3353,7 @@ export default { turnout: 'u128' }, /** - * Lookup348: pallet_democracy::vote::Voting + * Lookup355: pallet_democracy::vote::Voting **/ PalletDemocracyVoteVoting: { _enum: { @@ -3513,24 +3372,24 @@ export default { } }, /** - * Lookup352: pallet_democracy::types::Delegations + * Lookup359: pallet_democracy::types::Delegations **/ PalletDemocracyDelegations: { votes: 'u128', capital: 'u128' }, /** - * Lookup353: pallet_democracy::vote::PriorLock + * Lookup360: pallet_democracy::vote::PriorLock **/ PalletDemocracyVotePriorLock: '(u64,u128)', /** - * Lookup356: pallet_democracy::pallet::Error + * Lookup363: pallet_democracy::pallet::Error **/ PalletDemocracyError: { - _enum: ['ValueLow', 'ProposalMissing', 'AlreadyCanceled', 'DuplicateProposal', 'ProposalBlacklisted', 'NotSimpleMajority', 'InvalidHash', 'NoProposal', 'AlreadyVetoed', 'ReferendumInvalid', 'NoneWaiting', 'NotVoter', 'NoPermission', 'AlreadyDelegating', 'InsufficientFunds', 'NotDelegating', 'VotesExist', 'InstantNotAllowed', 'Nonsense', 'WrongUpperBound', 'MaxVotesReached', 'TooMany', 'VotingPeriodLow'] + _enum: ['ValueLow', 'ProposalMissing', 'AlreadyCanceled', 'DuplicateProposal', 'ProposalBlacklisted', 'NotSimpleMajority', 'InvalidHash', 'NoProposal', 'AlreadyVetoed', 'ReferendumInvalid', 'NoneWaiting', 'NotVoter', 'NoPermission', 'AlreadyDelegating', 'InsufficientFunds', 'NotDelegating', 'VotesExist', 'InstantNotAllowed', 'Nonsense', 'WrongUpperBound', 'MaxVotesReached', 'TooMany', 'VotingPeriodLow', 'PreimageNotExist'] }, /** - * Lookup358: pallet_collective::Votes + * Lookup365: pallet_collective::Votes **/ PalletCollectiveVotes: { index: 'u32', @@ -3540,19 +3399,19 @@ export default { end: 'u64' }, /** - * Lookup359: pallet_collective::pallet::Error + * Lookup366: pallet_collective::pallet::Error **/ PalletCollectiveError: { _enum: ['NotMember', 'DuplicateProposal', 'ProposalMissing', 'WrongIndex', 'DuplicateVote', 'AlreadyInitialized', 'TooEarly', 'TooManyProposals', 'WrongProposalWeight', 'WrongProposalLength'] }, /** - * Lookup363: pallet_membership::pallet::Error + * Lookup370: pallet_membership::pallet::Error **/ PalletMembershipError: { _enum: ['AlreadyMember', 'NotMember', 'TooManyMembers'] }, /** - * Lookup364: pallet_treasury::Proposal + * Lookup371: pallet_treasury::Proposal **/ PalletTreasuryProposal: { proposer: 'AccountId32', @@ -3561,35 +3420,35 @@ export default { bond: 'u128' }, /** - * Lookup368: frame_support::PalletId + * Lookup375: frame_support::PalletId **/ FrameSupportPalletId: '[u8;8]', /** - * Lookup369: pallet_treasury::pallet::Error + * Lookup376: pallet_treasury::pallet::Error **/ PalletTreasuryError: { _enum: ['InsufficientProposersBalance', 'InvalidIndex', 'TooManyApprovals', 'InsufficientPermission', 'ProposalNotApproved'] }, /** - * Lookup370: pallet_utility::pallet::Error + * Lookup377: pallet_utility::pallet::Error **/ PalletUtilityError: { _enum: ['TooManyCalls'] }, /** - * Lookup373: pallet_vesting::Releases + * Lookup380: pallet_vesting::Releases **/ PalletVestingReleases: { _enum: ['V0', 'V1'] }, /** - * Lookup374: pallet_vesting::pallet::Error + * Lookup381: pallet_vesting::pallet::Error **/ PalletVestingError: { _enum: ['NotVesting', 'AtMaxVestingSchedules', 'AmountLow', 'ScheduleIndexOutOfBounds', 'InvalidScheduleParams'] }, /** - * Lookup377: pallet_scheduler::Scheduled, BlockNumber, spiritnet_runtime::OriginCaller, sp_core::crypto::AccountId32> + * Lookup384: pallet_scheduler::Scheduled, BlockNumber, spiritnet_runtime::OriginCaller, sp_core::crypto::AccountId32> **/ PalletSchedulerScheduled: { maybeId: 'Option<[u8;32]>', @@ -3599,13 +3458,13 @@ export default { origin: 'SpiritnetRuntimeOriginCaller' }, /** - * Lookup379: pallet_scheduler::pallet::Error + * Lookup386: pallet_scheduler::pallet::Error **/ PalletSchedulerError: { _enum: ['FailedToSchedule', 'NotFound', 'TargetBlockNumberInPast', 'RescheduleNoChange', 'Named'] }, /** - * Lookup382: pallet_proxy::ProxyDefinition + * Lookup389: pallet_proxy::ProxyDefinition **/ PalletProxyProxyDefinition: { delegate: 'AccountId32', @@ -3613,7 +3472,7 @@ export default { delay: 'u64' }, /** - * Lookup386: pallet_proxy::Announcement + * Lookup393: pallet_proxy::Announcement **/ PalletProxyAnnouncement: { real: 'AccountId32', @@ -3621,13 +3480,13 @@ export default { height: 'u64' }, /** - * Lookup388: pallet_proxy::pallet::Error + * Lookup395: pallet_proxy::pallet::Error **/ PalletProxyError: { _enum: ['TooMany', 'NotFound', 'NotProxy', 'Unproxyable', 'Duplicate', 'NoPermission', 'Unannounced', 'NoSelfProxy'] }, /** - * Lookup389: pallet_preimage::RequestStatus + * Lookup396: pallet_preimage::RequestStatus **/ PalletPreimageRequestStatus: { _enum: { @@ -3643,13 +3502,13 @@ export default { } }, /** - * Lookup394: pallet_preimage::pallet::Error + * Lookup401: pallet_preimage::pallet::Error **/ PalletPreimageError: { _enum: ['TooBig', 'AlreadyNoted', 'NotAuthorized', 'NotNoted', 'Requested', 'NotRequested'] }, /** - * Lookup396: pallet_tips::OpenTip + * Lookup404: pallet_tips::OpenTip **/ PalletTipsOpenTip: { reason: 'H256', @@ -3661,26 +3520,41 @@ export default { findersFee: 'bool' }, /** - * Lookup400: pallet_tips::pallet::Error + * Lookup408: pallet_tips::pallet::Error **/ PalletTipsError: { _enum: ['ReasonTooBig', 'AlreadyKnown', 'UnknownTip', 'NotFinder', 'StillOpen', 'Premature'] }, /** - * Lookup401: ctype::ctype_entry::CtypeEntry + * Lookup410: pallet_multisig::Multisig + **/ + PalletMultisigMultisig: { + when: 'PalletMultisigTimepoint', + deposit: 'u128', + depositor: 'AccountId32', + approvals: 'Vec' + }, + /** + * Lookup412: pallet_multisig::pallet::Error + **/ + PalletMultisigError: { + _enum: ['MinimumThreshold', 'AlreadyApproved', 'NoApprovalsNeeded', 'TooFewSignatories', 'TooManySignatories', 'SignatoriesOutOfOrder', 'SenderInSignatories', 'NotFound', 'NotOwner', 'NoTimepoint', 'WrongTimepoint', 'UnexpectedTimepoint', 'MaxWeightTooLow', 'AlreadyStored'] + }, + /** + * Lookup413: ctype::ctype_entry::CtypeEntry **/ CtypeCtypeEntry: { creator: 'AccountId32', createdAt: 'u64' }, /** - * Lookup402: ctype::pallet::Error + * Lookup414: ctype::pallet::Error **/ CtypeError: { _enum: ['NotFound', 'AlreadyExists', 'UnableToPayFees'] }, /** - * Lookup403: attestation::attestations::AttestationDetails + * Lookup415: attestation::attestations::AttestationDetails **/ AttestationAttestationsAttestationDetails: { ctypeHash: 'H256', @@ -3690,20 +3564,20 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup404: kilt_support::deposit::Deposit + * Lookup416: kilt_support::deposit::Deposit **/ KiltSupportDeposit: { owner: 'AccountId32', amount: 'u128' }, /** - * Lookup406: attestation::pallet::Error + * Lookup418: attestation::pallet::Error **/ AttestationError: { _enum: ['AlreadyAttested', 'AlreadyRevoked', 'NotFound', 'CTypeMismatch', 'NotAuthorized', 'MaxDelegatedAttestationsExceeded'] }, /** - * Lookup407: delegation::delegation_hierarchy::DelegationNode + * Lookup419: delegation::delegation_hierarchy::DelegationNode **/ DelegationDelegationHierarchyDelegationNode: { hierarchyRootId: 'H256', @@ -3713,7 +3587,7 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup411: delegation::delegation_hierarchy::DelegationDetails + * Lookup422: delegation::delegation_hierarchy::DelegationDetails **/ DelegationDelegationHierarchyDelegationDetails: { owner: 'AccountId32', @@ -3721,19 +3595,19 @@ export default { permissions: 'DelegationDelegationHierarchyPermissions' }, /** - * Lookup412: delegation::delegation_hierarchy::DelegationHierarchyDetails + * Lookup423: delegation::delegation_hierarchy::DelegationHierarchyDetails **/ DelegationDelegationHierarchyDelegationHierarchyDetails: { ctypeHash: 'H256' }, /** - * Lookup413: delegation::pallet::Error + * Lookup424: delegation::pallet::Error **/ DelegationError: { _enum: ['DelegationAlreadyExists', 'InvalidDelegateSignature', 'DelegationNotFound', 'DelegateNotFound', 'HierarchyAlreadyExists', 'HierarchyNotFound', 'MaxSearchDepthReached', 'NotOwnerOfParentDelegation', 'NotOwnerOfDelegationHierarchy', 'ParentDelegationNotFound', 'ParentDelegationRevoked', 'UnauthorizedRevocation', 'UnauthorizedRemoval', 'UnauthorizedDelegation', 'AccessDenied', 'ExceededRevocationBounds', 'ExceededRemovalBounds', 'MaxRevocationsTooLarge', 'MaxRemovalsTooLarge', 'MaxParentChecksTooLarge', 'Internal', 'MaxChildrenExceeded'] }, /** - * Lookup414: did::did_details::DidDetails + * Lookup425: did::did_details::DidDetails **/ DidDidDetails: { authenticationKey: 'H256', @@ -3745,14 +3619,14 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup417: did::did_details::DidPublicKeyDetails + * Lookup428: did::did_details::DidPublicKeyDetails **/ DidDidDetailsDidPublicKeyDetails: { key: 'DidDidDetailsDidPublicKey', blockNumber: 'u64' }, /** - * Lookup418: did::did_details::DidPublicKey + * Lookup429: did::did_details::DidPublicKey **/ DidDidDetailsDidPublicKey: { _enum: { @@ -3761,45 +3635,26 @@ export default { } }, /** - * Lookup423: did::pallet::Error + * Lookup434: did::pallet::Error **/ DidError: { _enum: ['InvalidSignatureFormat', 'InvalidSignature', 'AlreadyExists', 'NotFound', 'VerificationKeyNotFound', 'InvalidNonce', 'UnsupportedDidAuthorizationCall', 'InvalidDidAuthorizationCall', 'MaxNewKeyAgreementKeysLimitExceeded', 'MaxPublicKeysExceeded', 'MaxKeyAgreementKeysExceeded', 'BadDidOrigin', 'TransactionExpired', 'AlreadyDeleted', 'NotOwnerOfDeposit', 'UnableToPayFees', 'MaxNumberOfServicesExceeded', 'MaxServiceIdLengthExceeded', 'MaxServiceTypeLengthExceeded', 'MaxNumberOfTypesPerServiceExceeded', 'MaxServiceUrlLengthExceeded', 'MaxNumberOfUrlsPerServiceExceeded', 'ServiceAlreadyExists', 'ServiceNotFound', 'InvalidServiceEncoding', 'MaxStoredEndpointsCountExceeded', 'Internal'] }, /** - * Lookup424: pallet_did_lookup::connection_record::ConnectionRecord + * Lookup435: pallet_did_lookup::connection_record::ConnectionRecord **/ PalletDidLookupConnectionRecord: { did: 'AccountId32', deposit: 'KiltSupportDeposit' }, /** - * Lookup426: pallet_did_lookup::migration_state::MigrationState - **/ - PalletDidLookupMigrationState: { - _enum: { - Done: 'Null', - PreUpgrade: 'Null', - Upgrading: 'PalletDidLookupMigrationsMixedStorageKey' - } - }, - /** - * Lookup427: pallet_did_lookup::migrations::MixedStorageKey - **/ - PalletDidLookupMigrationsMixedStorageKey: { - _enum: { - V1: 'AccountId32', - V2: 'PalletDidLookupLinkableAccountLinkableAccountId' - } - }, - /** - * Lookup428: pallet_did_lookup::pallet::Error + * Lookup437: pallet_did_lookup::pallet::Error **/ PalletDidLookupError: { _enum: ['NotFound', 'NotAuthorized', 'OutdatedProof', 'InsufficientFunds', 'Migration'] }, /** - * Lookup429: pallet_web3_names::web3_name::Web3NameOwnership, BlockNumber> + * Lookup438: pallet_web3_names::web3_name::Web3NameOwnership, BlockNumber> **/ PalletWeb3NamesWeb3NameWeb3NameOwnership: { owner: 'AccountId32', @@ -3807,13 +3662,13 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup430: pallet_web3_names::pallet::Error + * Lookup439: pallet_web3_names::pallet::Error **/ PalletWeb3NamesError: { _enum: ['InsufficientFunds', 'AlreadyExists', 'NotFound', 'OwnerAlreadyExists', 'OwnerNotFound', 'Banned', 'NotBanned', 'AlreadyBanned', 'NotAuthorized', 'TooShort', 'TooLong', 'InvalidCharacter'] }, /** - * Lookup432: public_credentials::credentials::CredentialEntry> + * Lookup441: public_credentials::credentials::CredentialEntry> **/ PublicCredentialsCredentialsCredentialEntry: { ctypeHash: 'H256', @@ -3824,19 +3679,19 @@ export default { authorizationId: 'Option' }, /** - * Lookup433: public_credentials::pallet::Error + * Lookup442: public_credentials::pallet::Error **/ PublicCredentialsError: { _enum: ['AlreadyAttested', 'NotFound', 'UnableToPayFees', 'InvalidInput', 'NotAuthorized', 'Internal'] }, /** - * Lookup435: polkadot_primitives::v2::UpgradeRestriction + * Lookup444: polkadot_primitives::v2::UpgradeRestriction **/ PolkadotPrimitivesV2UpgradeRestriction: { _enum: ['Present'] }, /** - * Lookup436: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot + * Lookup445: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot **/ CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: { dmqMqcHead: 'H256', @@ -3845,7 +3700,7 @@ export default { egressChannels: 'Vec<(u32,PolkadotPrimitivesV2AbridgedHrmpChannel)>' }, /** - * Lookup440: polkadot_primitives::v2::AbridgedHrmpChannel + * Lookup449: polkadot_primitives::v2::AbridgedHrmpChannel **/ PolkadotPrimitivesV2AbridgedHrmpChannel: { maxCapacity: 'u32', @@ -3856,7 +3711,7 @@ export default { mqcHead: 'Option' }, /** - * Lookup441: polkadot_primitives::v2::AbridgedHostConfiguration + * Lookup450: polkadot_primitives::v2::AbridgedHostConfiguration **/ PolkadotPrimitivesV2AbridgedHostConfiguration: { maxCodeSize: 'u32', @@ -3870,20 +3725,27 @@ export default { validationUpgradeDelay: 'u32' }, /** - * Lookup447: polkadot_core_primitives::OutboundHrmpMessage + * Lookup456: polkadot_core_primitives::OutboundHrmpMessage **/ PolkadotCorePrimitivesOutboundHrmpMessage: { recipient: 'u32', data: 'Bytes' }, /** - * Lookup448: cumulus_pallet_parachain_system::pallet::Error + * Lookup457: cumulus_pallet_parachain_system::CodeUpgradeAuthorization + **/ + CumulusPalletParachainSystemCodeUpgradeAuthorization: { + codeHash: 'H256', + checkVersion: 'bool' + }, + /** + * Lookup458: cumulus_pallet_parachain_system::pallet::Error **/ CumulusPalletParachainSystemError: { _enum: ['OverlappingUpgrades', 'ProhibitedByPolkadot', 'TooBig', 'ValidationDataNotAvailable', 'HostConfigurationNotAvailable', 'NotScheduled', 'NothingAuthorized', 'Unauthorized'] }, /** - * Lookup450: cumulus_pallet_xcmp_queue::InboundChannelDetails + * Lookup460: cumulus_pallet_xcmp_queue::InboundChannelDetails **/ CumulusPalletXcmpQueueInboundChannelDetails: { sender: 'u32', @@ -3891,19 +3753,19 @@ export default { messageMetadata: 'Vec<(u32,PolkadotParachainPrimitivesXcmpMessageFormat)>' }, /** - * Lookup451: cumulus_pallet_xcmp_queue::InboundState + * Lookup461: cumulus_pallet_xcmp_queue::InboundState **/ CumulusPalletXcmpQueueInboundState: { _enum: ['Ok', 'Suspended'] }, /** - * Lookup454: polkadot_parachain::primitives::XcmpMessageFormat + * Lookup464: polkadot_parachain::primitives::XcmpMessageFormat **/ PolkadotParachainPrimitivesXcmpMessageFormat: { _enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals'] }, /** - * Lookup457: cumulus_pallet_xcmp_queue::OutboundChannelDetails + * Lookup467: cumulus_pallet_xcmp_queue::OutboundChannelDetails **/ CumulusPalletXcmpQueueOutboundChannelDetails: { recipient: 'u32', @@ -3913,13 +3775,13 @@ export default { lastIndex: 'u16' }, /** - * Lookup458: cumulus_pallet_xcmp_queue::OutboundState + * Lookup468: cumulus_pallet_xcmp_queue::OutboundState **/ CumulusPalletXcmpQueueOutboundState: { _enum: ['Ok', 'Suspended'] }, /** - * Lookup460: cumulus_pallet_xcmp_queue::QueueConfigData + * Lookup470: cumulus_pallet_xcmp_queue::QueueConfigData **/ CumulusPalletXcmpQueueQueueConfigData: { suspendThreshold: 'u32', @@ -3930,29 +3792,29 @@ export default { xcmpMaxIndividualWeight: 'SpWeightsWeightV2Weight' }, /** - * Lookup462: cumulus_pallet_xcmp_queue::pallet::Error + * Lookup472: cumulus_pallet_xcmp_queue::pallet::Error **/ CumulusPalletXcmpQueueError: { _enum: ['FailedToSend', 'BadXcmOrigin', 'BadXcm', 'BadOverweightIndex', 'WeightOverLimit'] }, /** - * Lookup463: pallet_xcm::pallet::Error + * Lookup473: pallet_xcm::pallet::Error **/ PalletXcmError: { _enum: ['Unreachable', 'SendFailure', 'Filtered', 'UnweighableMessage', 'DestinationNotInvertible', 'Empty', 'CannotReanchor', 'TooManyAssets', 'InvalidOrigin', 'BadVersion', 'BadLocation', 'NoSubscription', 'AlreadySubscribed', 'InvalidAsset', 'LowBalance', 'TooManyLocks', 'AccountNotSovereign', 'FeesNotMet', 'LockNotFound', 'InUse'] }, /** - * Lookup464: cumulus_pallet_xcm::pallet::Error + * Lookup474: cumulus_pallet_xcm::pallet::Error **/ CumulusPalletXcmError: 'Null', /** - * Lookup465: cumulus_pallet_dmp_queue::ConfigData + * Lookup475: cumulus_pallet_dmp_queue::ConfigData **/ CumulusPalletDmpQueueConfigData: { maxIndividual: 'SpWeightsWeightV2Weight' }, /** - * Lookup466: cumulus_pallet_dmp_queue::PageIndexData + * Lookup476: cumulus_pallet_dmp_queue::PageIndexData **/ CumulusPalletDmpQueuePageIndexData: { beginUsed: 'u32', @@ -3960,37 +3822,37 @@ export default { overweightCount: 'u64' }, /** - * Lookup469: cumulus_pallet_dmp_queue::pallet::Error + * Lookup479: cumulus_pallet_dmp_queue::pallet::Error **/ CumulusPalletDmpQueueError: { _enum: ['Unknown', 'OverLimit'] }, /** - * Lookup472: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender + * Lookup482: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender **/ FrameSystemExtensionsCheckNonZeroSender: 'Null', /** - * Lookup473: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup483: frame_system::extensions::check_spec_version::CheckSpecVersion **/ FrameSystemExtensionsCheckSpecVersion: 'Null', /** - * Lookup474: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup484: frame_system::extensions::check_tx_version::CheckTxVersion **/ FrameSystemExtensionsCheckTxVersion: 'Null', /** - * Lookup475: frame_system::extensions::check_genesis::CheckGenesis + * Lookup485: frame_system::extensions::check_genesis::CheckGenesis **/ FrameSystemExtensionsCheckGenesis: 'Null', /** - * Lookup478: frame_system::extensions::check_nonce::CheckNonce + * Lookup488: frame_system::extensions::check_nonce::CheckNonce **/ FrameSystemExtensionsCheckNonce: 'Compact', /** - * Lookup479: frame_system::extensions::check_weight::CheckWeight + * Lookup489: frame_system::extensions::check_weight::CheckWeight **/ FrameSystemExtensionsCheckWeight: 'Null', /** - * Lookup480: pallet_transaction_payment::ChargeTransactionPayment + * Lookup490: pallet_transaction_payment::ChargeTransactionPayment **/ PalletTransactionPaymentChargeTransactionPayment: 'Compact' }; diff --git a/packages/augment-api/src/interfaces/registry.ts b/packages/augment-api/src/interfaces/registry.ts index 6bf52aa68..c934be065 100644 --- a/packages/augment-api/src/interfaces/registry.ts +++ b/packages/augment-api/src/interfaces/registry.ts @@ -5,7 +5,7 @@ // this is required to allow for ambient/previous definitions import '@polkadot/types/types/registry'; -import type { AttestationAttestationsAttestationDetails, AttestationCall, AttestationError, AttestationEvent, CtypeCall, CtypeCtypeEntry, CtypeError, CtypeEvent, CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, DelegationAccessControlDelegationAc, DelegationCall, DelegationDelegationHierarchyDelegationDetails, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DelegationDelegationHierarchyPermissions, DelegationError, DelegationEvent, DidCall, DidDidDetails, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidPublicKey, DidDidDetailsDidPublicKeyDetails, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidError, DidEvent, DidOriginDidRawOrigin, DidServiceEndpointsDidEndpoint, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportPreimagesBounded, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonZeroSender, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, KiltAssetDidsAssetV1AssetId, KiltAssetDidsAssetV1EvmSmartContractFungibleReference, KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference, KiltAssetDidsAssetV1GenericAssetId, KiltAssetDidsChainV1ChainId, KiltAssetDidsChainV1GenericChainId, KiltAssetDidsChainV1GenesisHexHash32Reference, KiltAssetDidsV1AssetDid, KiltSupportDeposit, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReserveData, PalletCollectiveCall, PalletCollectiveError, PalletCollectiveEvent, PalletCollectiveRawOrigin, PalletCollectiveVotes, PalletDemocracyCall, PalletDemocracyConviction, PalletDemocracyDelegations, PalletDemocracyError, PalletDemocracyEvent, PalletDemocracyReferendumInfo, PalletDemocracyReferendumStatus, PalletDemocracyTally, PalletDemocracyVoteAccountVote, PalletDemocracyVotePriorLock, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupAccountAccountId20, PalletDidLookupAccountEthereumSignature, PalletDidLookupAssociateAccountRequest, PalletDidLookupCall, PalletDidLookupConnectionRecord, PalletDidLookupError, PalletDidLookupEvent, PalletDidLookupLinkableAccountLinkableAccountId, PalletDidLookupMigrationState, PalletDidLookupMigrationsMixedStorageKey, PalletIndicesCall, PalletIndicesError, PalletIndicesEvent, PalletMembershipCall, PalletMembershipError, PalletMembershipEvent, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyCall, PalletProxyError, PalletProxyEvent, PalletProxyProxyDefinition, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletTimestampCall, PalletTipsCall, PalletTipsError, PalletTipsEvent, PalletTipsOpenTip, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletVestingCall, PalletVestingError, PalletVestingEvent, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesCall, PalletWeb3NamesError, PalletWeb3NamesEvent, PalletWeb3NamesWeb3NameWeb3NameOwnership, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, ParachainStakingCall, ParachainStakingCandidate, ParachainStakingCandidateStatus, ParachainStakingDelegationCounter, ParachainStakingError, ParachainStakingEvent, ParachainStakingInflationInflationInfo, ParachainStakingInflationRewardRate, ParachainStakingInflationStakingInfo, ParachainStakingRoundInfo, ParachainStakingSetOrderedSet, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, PublicCredentialsCall, PublicCredentialsCredentialsCredential, PublicCredentialsCredentialsCredentialEntry, PublicCredentialsError, PublicCredentialsEvent, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, RuntimeCommonAuthorizationPalletAuthorize, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaPublic, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeRuntime, SpiritnetRuntimeSessionKeys, XcmDoubleEncoded, XcmV2BodyId, XcmV2BodyPart, XcmV2Instruction, XcmV2Junction, XcmV2MultiAsset, XcmV2MultiLocation, XcmV2MultiassetAssetId, XcmV2MultiassetAssetInstance, XcmV2MultiassetFungibility, XcmV2MultiassetMultiAssetFilter, XcmV2MultiassetMultiAssets, XcmV2MultiassetWildFungibility, XcmV2MultiassetWildMultiAsset, XcmV2MultilocationJunctions, XcmV2NetworkId, XcmV2OriginKind, XcmV2Response, XcmV2TraitsError, XcmV2WeightLimit, XcmV2Xcm, XcmV3Instruction, XcmV3Junction, XcmV3JunctionBodyId, XcmV3JunctionBodyPart, XcmV3JunctionNetworkId, XcmV3Junctions, XcmV3MaybeErrorCode, XcmV3MultiAsset, XcmV3MultiLocation, XcmV3MultiassetAssetId, XcmV3MultiassetAssetInstance, XcmV3MultiassetFungibility, XcmV3MultiassetMultiAssetFilter, XcmV3MultiassetMultiAssets, XcmV3MultiassetWildFungibility, XcmV3MultiassetWildMultiAsset, XcmV3PalletInfo, XcmV3QueryResponseInfo, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3VecPalletInfo, XcmV3WeightLimit, XcmV3Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; +import type { AttestationAttestationsAttestationDetails, AttestationCall, AttestationError, AttestationEvent, CtypeCall, CtypeCtypeEntry, CtypeError, CtypeEvent, CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, DelegationAccessControlDelegationAc, DelegationCall, DelegationDelegationHierarchyDelegationDetails, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DelegationDelegationHierarchyPermissions, DelegationError, DelegationEvent, DidCall, DidDidDetails, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidPublicKey, DidDidDetailsDidPublicKeyDetails, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidError, DidEvent, DidOriginDidRawOrigin, DidServiceEndpointsDidEndpoint, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportPreimagesBounded, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonZeroSender, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, KiltAssetDidsAssetV1AssetId, KiltAssetDidsAssetV1EvmSmartContractFungibleReference, KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference, KiltAssetDidsAssetV1GenericAssetId, KiltAssetDidsChainV1ChainId, KiltAssetDidsChainV1GenericChainId, KiltAssetDidsChainV1GenesisHexHash32Reference, KiltAssetDidsV1AssetDid, KiltSupportDeposit, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReserveData, PalletCollectiveCall, PalletCollectiveError, PalletCollectiveEvent, PalletCollectiveRawOrigin, PalletCollectiveVotes, PalletDemocracyCall, PalletDemocracyConviction, PalletDemocracyDelegations, PalletDemocracyError, PalletDemocracyEvent, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyReferendumStatus, PalletDemocracyTally, PalletDemocracyVoteAccountVote, PalletDemocracyVotePriorLock, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupAccountAccountId20, PalletDidLookupAccountEthereumSignature, PalletDidLookupAssociateAccountRequest, PalletDidLookupCall, PalletDidLookupConnectionRecord, PalletDidLookupError, PalletDidLookupEvent, PalletDidLookupLinkableAccountLinkableAccountId, PalletIndicesCall, PalletIndicesError, PalletIndicesEvent, PalletMembershipCall, PalletMembershipError, PalletMembershipEvent, PalletMultisigCall, PalletMultisigError, PalletMultisigEvent, PalletMultisigMultisig, PalletMultisigTimepoint, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyCall, PalletProxyError, PalletProxyEvent, PalletProxyProxyDefinition, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletTimestampCall, PalletTipsCall, PalletTipsError, PalletTipsEvent, PalletTipsOpenTip, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletVestingCall, PalletVestingError, PalletVestingEvent, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesCall, PalletWeb3NamesError, PalletWeb3NamesEvent, PalletWeb3NamesWeb3NameWeb3NameOwnership, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, ParachainStakingCall, ParachainStakingCandidate, ParachainStakingCandidateStatus, ParachainStakingDelegationCounter, ParachainStakingError, ParachainStakingEvent, ParachainStakingInflationInflationInfo, ParachainStakingInflationRewardRate, ParachainStakingInflationStakingInfo, ParachainStakingRoundInfo, ParachainStakingSetOrderedSet, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, PublicCredentialsCall, PublicCredentialsCredentialsCredential, PublicCredentialsCredentialsCredentialEntry, PublicCredentialsError, PublicCredentialsEvent, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, RuntimeCommonAuthorizationPalletAuthorize, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaPublic, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeRuntime, SpiritnetRuntimeSessionKeys, XcmDoubleEncoded, XcmV2BodyId, XcmV2BodyPart, XcmV2Instruction, XcmV2Junction, XcmV2MultiAsset, XcmV2MultiLocation, XcmV2MultiassetAssetId, XcmV2MultiassetAssetInstance, XcmV2MultiassetFungibility, XcmV2MultiassetMultiAssetFilter, XcmV2MultiassetMultiAssets, XcmV2MultiassetWildFungibility, XcmV2MultiassetWildMultiAsset, XcmV2MultilocationJunctions, XcmV2NetworkId, XcmV2OriginKind, XcmV2Response, XcmV2TraitsError, XcmV2WeightLimit, XcmV2Xcm, XcmV3Instruction, XcmV3Junction, XcmV3JunctionBodyId, XcmV3JunctionBodyPart, XcmV3JunctionNetworkId, XcmV3Junctions, XcmV3MaybeErrorCode, XcmV3MultiAsset, XcmV3MultiLocation, XcmV3MultiassetAssetId, XcmV3MultiassetAssetInstance, XcmV3MultiassetFungibility, XcmV3MultiassetMultiAssetFilter, XcmV3MultiassetMultiAssets, XcmV3MultiassetWildFungibility, XcmV3MultiassetWildMultiAsset, XcmV3PalletInfo, XcmV3QueryResponseInfo, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3WeightLimit, XcmV3Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; declare module '@polkadot/types/types/registry' { interface InterfaceTypes { @@ -23,6 +23,7 @@ declare module '@polkadot/types/types/registry' { CumulusPalletDmpQueueEvent: CumulusPalletDmpQueueEvent; CumulusPalletDmpQueuePageIndexData: CumulusPalletDmpQueuePageIndexData; CumulusPalletParachainSystemCall: CumulusPalletParachainSystemCall; + CumulusPalletParachainSystemCodeUpgradeAuthorization: CumulusPalletParachainSystemCodeUpgradeAuthorization; CumulusPalletParachainSystemError: CumulusPalletParachainSystemError; CumulusPalletParachainSystemEvent: CumulusPalletParachainSystemEvent; CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot; @@ -111,6 +112,7 @@ declare module '@polkadot/types/types/registry' { PalletDemocracyDelegations: PalletDemocracyDelegations; PalletDemocracyError: PalletDemocracyError; PalletDemocracyEvent: PalletDemocracyEvent; + PalletDemocracyMetadataOwner: PalletDemocracyMetadataOwner; PalletDemocracyReferendumInfo: PalletDemocracyReferendumInfo; PalletDemocracyReferendumStatus: PalletDemocracyReferendumStatus; PalletDemocracyTally: PalletDemocracyTally; @@ -126,14 +128,17 @@ declare module '@polkadot/types/types/registry' { PalletDidLookupError: PalletDidLookupError; PalletDidLookupEvent: PalletDidLookupEvent; PalletDidLookupLinkableAccountLinkableAccountId: PalletDidLookupLinkableAccountLinkableAccountId; - PalletDidLookupMigrationState: PalletDidLookupMigrationState; - PalletDidLookupMigrationsMixedStorageKey: PalletDidLookupMigrationsMixedStorageKey; PalletIndicesCall: PalletIndicesCall; PalletIndicesError: PalletIndicesError; PalletIndicesEvent: PalletIndicesEvent; PalletMembershipCall: PalletMembershipCall; PalletMembershipError: PalletMembershipError; PalletMembershipEvent: PalletMembershipEvent; + PalletMultisigCall: PalletMultisigCall; + PalletMultisigError: PalletMultisigError; + PalletMultisigEvent: PalletMultisigEvent; + PalletMultisigMultisig: PalletMultisigMultisig; + PalletMultisigTimepoint: PalletMultisigTimepoint; PalletPreimageCall: PalletPreimageCall; PalletPreimageError: PalletPreimageError; PalletPreimageEvent: PalletPreimageEvent; @@ -274,7 +279,6 @@ declare module '@polkadot/types/types/registry' { XcmV3Response: XcmV3Response; XcmV3TraitsError: XcmV3TraitsError; XcmV3TraitsOutcome: XcmV3TraitsOutcome; - XcmV3VecPalletInfo: XcmV3VecPalletInfo; XcmV3WeightLimit: XcmV3WeightLimit; XcmV3Xcm: XcmV3Xcm; XcmVersionedMultiAssets: XcmVersionedMultiAssets; diff --git a/packages/augment-api/src/interfaces/types-lookup.ts b/packages/augment-api/src/interfaces/types-lookup.ts index cf6f588f8..30618f4ff 100644 --- a/packages/augment-api/src/interfaces/types-lookup.ts +++ b/packages/augment-api/src/interfaces/types-lookup.ts @@ -389,7 +389,23 @@ declare module '@polkadot/types/lookup' { readonly asProposalCanceled: { readonly propIndex: u32; } & Struct; - readonly type: 'Proposed' | 'Tabled' | 'ExternalTabled' | 'Started' | 'Passed' | 'NotPassed' | 'Cancelled' | 'Delegated' | 'Undelegated' | 'Vetoed' | 'Blacklisted' | 'Voted' | 'Seconded' | 'ProposalCanceled'; + readonly isMetadataSet: boolean; + readonly asMetadataSet: { + readonly owner: PalletDemocracyMetadataOwner; + readonly hash_: H256; + } & Struct; + readonly isMetadataCleared: boolean; + readonly asMetadataCleared: { + readonly owner: PalletDemocracyMetadataOwner; + readonly hash_: H256; + } & Struct; + readonly isMetadataTransferred: boolean; + readonly asMetadataTransferred: { + readonly prevOwner: PalletDemocracyMetadataOwner; + readonly owner: PalletDemocracyMetadataOwner; + readonly hash_: H256; + } & Struct; + readonly type: 'Proposed' | 'Tabled' | 'ExternalTabled' | 'Started' | 'Passed' | 'NotPassed' | 'Cancelled' | 'Delegated' | 'Undelegated' | 'Vetoed' | 'Blacklisted' | 'Voted' | 'Seconded' | 'ProposalCanceled' | 'MetadataSet' | 'MetadataCleared' | 'MetadataTransferred'; } /** @name PalletDemocracyVoteThreshold (37) */ @@ -415,7 +431,17 @@ declare module '@polkadot/types/lookup' { readonly type: 'Standard' | 'Split'; } - /** @name PalletCollectiveEvent (40) */ + /** @name PalletDemocracyMetadataOwner (40) */ + interface PalletDemocracyMetadataOwner extends Enum { + readonly isExternal: boolean; + readonly isProposal: boolean; + readonly asProposal: u32; + readonly isReferendum: boolean; + readonly asReferendum: u32; + readonly type: 'External' | 'Proposal' | 'Referendum'; + } + + /** @name PalletCollectiveEvent (41) */ interface PalletCollectiveEvent extends Enum { readonly isProposed: boolean; readonly asProposed: { @@ -459,7 +485,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Proposed' | 'Voted' | 'Approved' | 'Disapproved' | 'Executed' | 'MemberExecuted' | 'Closed'; } - /** @name PalletMembershipEvent (45) */ + /** @name PalletMembershipEvent (46) */ interface PalletMembershipEvent extends Enum { readonly isMemberAdded: boolean; readonly isMemberRemoved: boolean; @@ -470,7 +496,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'MemberAdded' | 'MemberRemoved' | 'MembersSwapped' | 'MembersReset' | 'KeyChanged' | 'Dummy'; } - /** @name PalletTreasuryEvent (46) */ + /** @name PalletTreasuryEvent (47) */ interface PalletTreasuryEvent extends Enum { readonly isProposed: boolean; readonly asProposed: { @@ -517,7 +543,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Proposed' | 'Spending' | 'Awarded' | 'Rejected' | 'Burnt' | 'Rollover' | 'Deposit' | 'SpendApproved' | 'UpdatedInactive'; } - /** @name PalletUtilityEvent (47) */ + /** @name PalletUtilityEvent (48) */ interface PalletUtilityEvent extends Enum { readonly isBatchInterrupted: boolean; readonly asBatchInterrupted: { @@ -538,7 +564,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'BatchInterrupted' | 'BatchCompleted' | 'BatchCompletedWithErrors' | 'ItemCompleted' | 'ItemFailed' | 'DispatchedAs'; } - /** @name PalletVestingEvent (48) */ + /** @name PalletVestingEvent (49) */ interface PalletVestingEvent extends Enum { readonly isVestingUpdated: boolean; readonly asVestingUpdated: { @@ -552,7 +578,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'VestingUpdated' | 'VestingCompleted'; } - /** @name PalletSchedulerEvent (49) */ + /** @name PalletSchedulerEvent (50) */ interface PalletSchedulerEvent extends Enum { readonly isScheduled: boolean; readonly asScheduled: { @@ -588,7 +614,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Scheduled' | 'Canceled' | 'Dispatched' | 'CallUnavailable' | 'PeriodicFailed' | 'PermanentlyOverweight'; } - /** @name PalletProxyEvent (52) */ + /** @name PalletProxyEvent (53) */ interface PalletProxyEvent extends Enum { readonly isProxyExecuted: boolean; readonly asProxyExecuted: { @@ -624,7 +650,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ProxyExecuted' | 'PureCreated' | 'Announced' | 'ProxyAdded' | 'ProxyRemoved'; } - /** @name SpiritnetRuntimeProxyType (53) */ + /** @name SpiritnetRuntimeProxyType (54) */ interface SpiritnetRuntimeProxyType extends Enum { readonly isAny: boolean; readonly isNonTransfer: boolean; @@ -635,7 +661,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming'; } - /** @name PalletPreimageEvent (55) */ + /** @name PalletPreimageEvent (56) */ interface PalletPreimageEvent extends Enum { readonly isNoted: boolean; readonly asNoted: { @@ -652,7 +678,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noted' | 'Requested' | 'Cleared'; } - /** @name PalletTipsEvent (57) */ + /** @name PalletTipsEvent (58) */ interface PalletTipsEvent extends Enum { readonly isNewTip: boolean; readonly asNewTip: { @@ -681,7 +707,46 @@ declare module '@polkadot/types/lookup' { readonly type: 'NewTip' | 'TipClosing' | 'TipClosed' | 'TipRetracted' | 'TipSlashed'; } - /** @name CtypeEvent (58) */ + /** @name PalletMultisigEvent (59) */ + interface PalletMultisigEvent extends Enum { + readonly isNewMultisig: boolean; + readonly asNewMultisig: { + readonly approving: AccountId32; + readonly multisig: AccountId32; + readonly callHash: U8aFixed; + } & Struct; + readonly isMultisigApproval: boolean; + readonly asMultisigApproval: { + readonly approving: AccountId32; + readonly timepoint: PalletMultisigTimepoint; + readonly multisig: AccountId32; + readonly callHash: U8aFixed; + } & Struct; + readonly isMultisigExecuted: boolean; + readonly asMultisigExecuted: { + readonly approving: AccountId32; + readonly timepoint: PalletMultisigTimepoint; + readonly multisig: AccountId32; + readonly callHash: U8aFixed; + readonly result: Result; + } & Struct; + readonly isMultisigCancelled: boolean; + readonly asMultisigCancelled: { + readonly cancelling: AccountId32; + readonly timepoint: PalletMultisigTimepoint; + readonly multisig: AccountId32; + readonly callHash: U8aFixed; + } & Struct; + readonly type: 'NewMultisig' | 'MultisigApproval' | 'MultisigExecuted' | 'MultisigCancelled'; + } + + /** @name PalletMultisigTimepoint (60) */ + interface PalletMultisigTimepoint extends Struct { + readonly height: u64; + readonly index: u32; + } + + /** @name CtypeEvent (61) */ interface CtypeEvent extends Enum { readonly isCTypeCreated: boolean; readonly asCTypeCreated: ITuple<[AccountId32, H256]>; @@ -690,7 +755,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CTypeCreated' | 'CTypeUpdated'; } - /** @name AttestationEvent (59) */ + /** @name AttestationEvent (62) */ interface AttestationEvent extends Enum { readonly isAttestationCreated: boolean; readonly asAttestationCreated: ITuple<[AccountId32, H256, H256, Option]>; @@ -703,14 +768,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'AttestationCreated' | 'AttestationRevoked' | 'AttestationRemoved' | 'DepositReclaimed'; } - /** @name RuntimeCommonAuthorizationAuthorizationId (61) */ + /** @name RuntimeCommonAuthorizationAuthorizationId (64) */ interface RuntimeCommonAuthorizationAuthorizationId extends Enum { readonly isDelegation: boolean; readonly asDelegation: H256; readonly type: 'Delegation'; } - /** @name DelegationEvent (62) */ + /** @name DelegationEvent (65) */ interface DelegationEvent extends Enum { readonly isHierarchyCreated: boolean; readonly asHierarchyCreated: ITuple<[AccountId32, H256, H256]>; @@ -729,12 +794,12 @@ declare module '@polkadot/types/lookup' { readonly type: 'HierarchyCreated' | 'HierarchyRevoked' | 'HierarchyRemoved' | 'DelegationCreated' | 'DelegationRevoked' | 'DelegationRemoved' | 'DepositReclaimed'; } - /** @name DelegationDelegationHierarchyPermissions (63) */ + /** @name DelegationDelegationHierarchyPermissions (66) */ interface DelegationDelegationHierarchyPermissions extends Struct { readonly bits: u32; } - /** @name DidEvent (64) */ + /** @name DidEvent (67) */ interface DidEvent extends Enum { readonly isDidCreated: boolean; readonly asDidCreated: ITuple<[AccountId32, AccountId32]>; @@ -747,7 +812,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'DidCreated' | 'DidUpdated' | 'DidDeleted' | 'DidCallDispatched'; } - /** @name PalletDidLookupEvent (65) */ + /** @name PalletDidLookupEvent (68) */ interface PalletDidLookupEvent extends Enum { readonly isAssociationEstablished: boolean; readonly asAssociationEstablished: ITuple<[PalletDidLookupLinkableAccountLinkableAccountId, AccountId32]>; @@ -758,7 +823,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AssociationEstablished' | 'AssociationRemoved' | 'MigrationProgress' | 'MigrationCompleted'; } - /** @name PalletDidLookupLinkableAccountLinkableAccountId (66) */ + /** @name PalletDidLookupLinkableAccountLinkableAccountId (69) */ interface PalletDidLookupLinkableAccountLinkableAccountId extends Enum { readonly isAccountId20: boolean; readonly asAccountId20: PalletDidLookupAccountAccountId20; @@ -767,10 +832,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'AccountId20' | 'AccountId32'; } - /** @name PalletDidLookupAccountAccountId20 (67) */ + /** @name PalletDidLookupAccountAccountId20 (70) */ interface PalletDidLookupAccountAccountId20 extends U8aFixed {} - /** @name PalletWeb3NamesEvent (69) */ + /** @name PalletWeb3NamesEvent (72) */ interface PalletWeb3NamesEvent extends Enum { readonly isWeb3NameClaimed: boolean; readonly asWeb3NameClaimed: { @@ -793,7 +858,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Web3NameClaimed' | 'Web3NameReleased' | 'Web3NameBanned' | 'Web3NameUnbanned'; } - /** @name PublicCredentialsEvent (72) */ + /** @name PublicCredentialsEvent (75) */ interface PublicCredentialsEvent extends Enum { readonly isCredentialStored: boolean; readonly asCredentialStored: { @@ -816,16 +881,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'CredentialStored' | 'CredentialRemoved' | 'CredentialRevoked' | 'CredentialUnrevoked'; } - /** @name RuntimeCommonAssetsAssetDid (73) */ + /** @name RuntimeCommonAssetsAssetDid (76) */ interface RuntimeCommonAssetsAssetDid extends KiltAssetDidsV1AssetDid {} - /** @name KiltAssetDidsV1AssetDid (74) */ + /** @name KiltAssetDidsV1AssetDid (77) */ interface KiltAssetDidsV1AssetDid extends Struct { readonly chainId: KiltAssetDidsChainV1ChainId; readonly assetId: KiltAssetDidsAssetV1AssetId; } - /** @name KiltAssetDidsChainV1ChainId (75) */ + /** @name KiltAssetDidsChainV1ChainId (78) */ interface KiltAssetDidsChainV1ChainId extends Enum { readonly isEip155: boolean; readonly asEip155: u128; @@ -840,16 +905,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'Eip155' | 'Bip122' | 'Dotsama' | 'Solana' | 'Generic'; } - /** @name KiltAssetDidsChainV1GenesisHexHash32Reference (77) */ + /** @name KiltAssetDidsChainV1GenesisHexHash32Reference (80) */ interface KiltAssetDidsChainV1GenesisHexHash32Reference extends U8aFixed {} - /** @name KiltAssetDidsChainV1GenericChainId (81) */ + /** @name KiltAssetDidsChainV1GenericChainId (84) */ interface KiltAssetDidsChainV1GenericChainId extends Struct { readonly namespace: Bytes; readonly reference: Bytes; } - /** @name KiltAssetDidsAssetV1AssetId (85) */ + /** @name KiltAssetDidsAssetV1AssetId (88) */ interface KiltAssetDidsAssetV1AssetId extends Enum { readonly isSlip44: boolean; readonly asSlip44: U256; @@ -864,20 +929,20 @@ declare module '@polkadot/types/lookup' { readonly type: 'Slip44' | 'Erc20' | 'Erc721' | 'Erc1155' | 'Generic'; } - /** @name KiltAssetDidsAssetV1EvmSmartContractFungibleReference (89) */ + /** @name KiltAssetDidsAssetV1EvmSmartContractFungibleReference (92) */ interface KiltAssetDidsAssetV1EvmSmartContractFungibleReference extends U8aFixed {} - /** @name KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference (90) */ + /** @name KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference (93) */ interface KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference extends ITuple<[KiltAssetDidsAssetV1EvmSmartContractFungibleReference, Option]> {} - /** @name KiltAssetDidsAssetV1GenericAssetId (94) */ + /** @name KiltAssetDidsAssetV1GenericAssetId (97) */ interface KiltAssetDidsAssetV1GenericAssetId extends Struct { readonly namespace: Bytes; readonly reference: Bytes; readonly id: Option; } - /** @name CumulusPalletParachainSystemEvent (100) */ + /** @name CumulusPalletParachainSystemEvent (103) */ interface CumulusPalletParachainSystemEvent extends Enum { readonly isValidationFunctionStored: boolean; readonly isValidationFunctionApplied: boolean; @@ -905,7 +970,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed' | 'UpwardMessageSent'; } - /** @name CumulusPalletXcmpQueueEvent (101) */ + /** @name CumulusPalletXcmpQueueEvent (104) */ interface CumulusPalletXcmpQueueEvent extends Enum { readonly isSuccess: boolean; readonly asSuccess: { @@ -945,7 +1010,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced'; } - /** @name XcmV3TraitsError (102) */ + /** @name XcmV3TraitsError (105) */ interface XcmV3TraitsError extends Enum { readonly isOverflow: boolean; readonly isUnimplemented: boolean; @@ -992,7 +1057,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'LocationFull' | 'LocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'ExpectationFalse' | 'PalletNotFound' | 'NameMismatch' | 'VersionIncompatible' | 'HoldingWouldOverflow' | 'ExportError' | 'ReanchorFailed' | 'NoDeal' | 'FeesNotMet' | 'LockError' | 'NoPermission' | 'Unanchored' | 'NotDepositable' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable' | 'ExceedsStackLimit'; } - /** @name PalletXcmEvent (104) */ + /** @name PalletXcmEvent (107) */ interface PalletXcmEvent extends Enum { readonly isAttempted: boolean; readonly asAttempted: XcmV3TraitsOutcome; @@ -1043,7 +1108,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail' | 'InvalidQuerierVersion' | 'InvalidQuerier' | 'VersionNotifyStarted' | 'VersionNotifyRequested' | 'VersionNotifyUnrequested' | 'FeesPaid' | 'AssetsClaimed'; } - /** @name XcmV3TraitsOutcome (105) */ + /** @name XcmV3TraitsOutcome (108) */ interface XcmV3TraitsOutcome extends Enum { readonly isComplete: boolean; readonly asComplete: SpWeightsWeightV2Weight; @@ -1054,13 +1119,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Complete' | 'Incomplete' | 'Error'; } - /** @name XcmV3MultiLocation (106) */ + /** @name XcmV3MultiLocation (109) */ interface XcmV3MultiLocation extends Struct { readonly parents: u8; readonly interior: XcmV3Junctions; } - /** @name XcmV3Junctions (107) */ + /** @name XcmV3Junctions (110) */ interface XcmV3Junctions extends Enum { readonly isHere: boolean; readonly isX1: boolean; @@ -1082,7 +1147,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; } - /** @name XcmV3Junction (108) */ + /** @name XcmV3Junction (111) */ interface XcmV3Junction extends Enum { readonly isParachain: boolean; readonly asParachain: Compact; @@ -1121,7 +1186,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality' | 'GlobalConsensus'; } - /** @name XcmV3JunctionNetworkId (111) */ + /** @name XcmV3JunctionNetworkId (114) */ interface XcmV3JunctionNetworkId extends Enum { readonly isByGenesis: boolean; readonly asByGenesis: U8aFixed; @@ -1144,7 +1209,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ByGenesis' | 'ByFork' | 'Polkadot' | 'Kusama' | 'Westend' | 'Rococo' | 'Wococo' | 'Ethereum' | 'BitcoinCore' | 'BitcoinCash'; } - /** @name XcmV3JunctionBodyId (113) */ + /** @name XcmV3JunctionBodyId (116) */ interface XcmV3JunctionBodyId extends Enum { readonly isUnit: boolean; readonly isMoniker: boolean; @@ -1161,7 +1226,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unit' | 'Moniker' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; } - /** @name XcmV3JunctionBodyPart (114) */ + /** @name XcmV3JunctionBodyPart (117) */ interface XcmV3JunctionBodyPart extends Enum { readonly isVoice: boolean; readonly isMembers: boolean; @@ -1186,10 +1251,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; } - /** @name XcmV3Xcm (115) */ + /** @name XcmV3Xcm (118) */ interface XcmV3Xcm extends Vec {} - /** @name XcmV3Instruction (117) */ + /** @name XcmV3Instruction (120) */ interface XcmV3Instruction extends Enum { readonly isWithdrawAsset: boolean; readonly asWithdrawAsset: XcmV3MultiassetMultiAssets; @@ -1371,16 +1436,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'ReportHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion' | 'BurnAsset' | 'ExpectAsset' | 'ExpectOrigin' | 'ExpectError' | 'ExpectTransactStatus' | 'QueryPallet' | 'ExpectPallet' | 'ReportTransactStatus' | 'ClearTransactStatus' | 'UniversalOrigin' | 'ExportMessage' | 'LockAsset' | 'UnlockAsset' | 'NoteUnlockable' | 'RequestUnlock' | 'SetFeesMode' | 'SetTopic' | 'ClearTopic' | 'AliasOrigin' | 'UnpaidExecution'; } - /** @name XcmV3MultiassetMultiAssets (118) */ + /** @name XcmV3MultiassetMultiAssets (121) */ interface XcmV3MultiassetMultiAssets extends Vec {} - /** @name XcmV3MultiAsset (120) */ + /** @name XcmV3MultiAsset (123) */ interface XcmV3MultiAsset extends Struct { readonly id: XcmV3MultiassetAssetId; readonly fun: XcmV3MultiassetFungibility; } - /** @name XcmV3MultiassetAssetId (121) */ + /** @name XcmV3MultiassetAssetId (124) */ interface XcmV3MultiassetAssetId extends Enum { readonly isConcrete: boolean; readonly asConcrete: XcmV3MultiLocation; @@ -1389,7 +1454,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Concrete' | 'Abstract'; } - /** @name XcmV3MultiassetFungibility (122) */ + /** @name XcmV3MultiassetFungibility (125) */ interface XcmV3MultiassetFungibility extends Enum { readonly isFungible: boolean; readonly asFungible: Compact; @@ -1398,7 +1463,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV3MultiassetAssetInstance (123) */ + /** @name XcmV3MultiassetAssetInstance (126) */ interface XcmV3MultiassetAssetInstance extends Enum { readonly isUndefined: boolean; readonly isIndex: boolean; @@ -1414,7 +1479,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32'; } - /** @name XcmV3Response (125) */ + /** @name XcmV3Response (128) */ interface XcmV3Response extends Enum { readonly isNull: boolean; readonly isAssets: boolean; @@ -1424,16 +1489,13 @@ declare module '@polkadot/types/lookup' { readonly isVersion: boolean; readonly asVersion: u32; readonly isPalletsInfo: boolean; - readonly asPalletsInfo: XcmV3VecPalletInfo; + readonly asPalletsInfo: Vec; readonly isDispatchResult: boolean; readonly asDispatchResult: XcmV3MaybeErrorCode; readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version' | 'PalletsInfo' | 'DispatchResult'; } - /** @name XcmV3VecPalletInfo (128) */ - interface XcmV3VecPalletInfo extends Vec {} - - /** @name XcmV3PalletInfo (130) */ + /** @name XcmV3PalletInfo (132) */ interface XcmV3PalletInfo extends Struct { readonly index: Compact; readonly name: Bytes; @@ -1443,7 +1505,7 @@ declare module '@polkadot/types/lookup' { readonly patch: Compact; } - /** @name XcmV3MaybeErrorCode (131) */ + /** @name XcmV3MaybeErrorCode (135) */ interface XcmV3MaybeErrorCode extends Enum { readonly isSuccess: boolean; readonly isError: boolean; @@ -1453,7 +1515,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Success' | 'Error' | 'TruncatedError'; } - /** @name XcmV2OriginKind (133) */ + /** @name XcmV2OriginKind (138) */ interface XcmV2OriginKind extends Enum { readonly isNative: boolean; readonly isSovereignAccount: boolean; @@ -1462,19 +1524,19 @@ declare module '@polkadot/types/lookup' { readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm'; } - /** @name XcmDoubleEncoded (134) */ + /** @name XcmDoubleEncoded (139) */ interface XcmDoubleEncoded extends Struct { readonly encoded: Bytes; } - /** @name XcmV3QueryResponseInfo (135) */ + /** @name XcmV3QueryResponseInfo (140) */ interface XcmV3QueryResponseInfo extends Struct { readonly destination: XcmV3MultiLocation; readonly queryId: Compact; readonly maxWeight: SpWeightsWeightV2Weight; } - /** @name XcmV3MultiassetMultiAssetFilter (136) */ + /** @name XcmV3MultiassetMultiAssetFilter (141) */ interface XcmV3MultiassetMultiAssetFilter extends Enum { readonly isDefinite: boolean; readonly asDefinite: XcmV3MultiassetMultiAssets; @@ -1483,7 +1545,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Definite' | 'Wild'; } - /** @name XcmV3MultiassetWildMultiAsset (137) */ + /** @name XcmV3MultiassetWildMultiAsset (142) */ interface XcmV3MultiassetWildMultiAsset extends Enum { readonly isAll: boolean; readonly isAllOf: boolean; @@ -1502,14 +1564,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'All' | 'AllOf' | 'AllCounted' | 'AllOfCounted'; } - /** @name XcmV3MultiassetWildFungibility (138) */ + /** @name XcmV3MultiassetWildFungibility (143) */ interface XcmV3MultiassetWildFungibility extends Enum { readonly isFungible: boolean; readonly isNonFungible: boolean; readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV3WeightLimit (139) */ + /** @name XcmV3WeightLimit (144) */ interface XcmV3WeightLimit extends Enum { readonly isUnlimited: boolean; readonly isLimited: boolean; @@ -1517,7 +1579,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unlimited' | 'Limited'; } - /** @name XcmVersionedMultiAssets (140) */ + /** @name XcmVersionedMultiAssets (145) */ interface XcmVersionedMultiAssets extends Enum { readonly isV2: boolean; readonly asV2: XcmV2MultiassetMultiAssets; @@ -1526,16 +1588,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'V2' | 'V3'; } - /** @name XcmV2MultiassetMultiAssets (141) */ + /** @name XcmV2MultiassetMultiAssets (146) */ interface XcmV2MultiassetMultiAssets extends Vec {} - /** @name XcmV2MultiAsset (143) */ + /** @name XcmV2MultiAsset (148) */ interface XcmV2MultiAsset extends Struct { readonly id: XcmV2MultiassetAssetId; readonly fun: XcmV2MultiassetFungibility; } - /** @name XcmV2MultiassetAssetId (144) */ + /** @name XcmV2MultiassetAssetId (149) */ interface XcmV2MultiassetAssetId extends Enum { readonly isConcrete: boolean; readonly asConcrete: XcmV2MultiLocation; @@ -1544,13 +1606,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Concrete' | 'Abstract'; } - /** @name XcmV2MultiLocation (145) */ + /** @name XcmV2MultiLocation (150) */ interface XcmV2MultiLocation extends Struct { readonly parents: u8; readonly interior: XcmV2MultilocationJunctions; } - /** @name XcmV2MultilocationJunctions (146) */ + /** @name XcmV2MultilocationJunctions (151) */ interface XcmV2MultilocationJunctions extends Enum { readonly isHere: boolean; readonly isX1: boolean; @@ -1572,7 +1634,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; } - /** @name XcmV2Junction (147) */ + /** @name XcmV2Junction (152) */ interface XcmV2Junction extends Enum { readonly isParachain: boolean; readonly asParachain: Compact; @@ -1606,7 +1668,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality'; } - /** @name XcmV2NetworkId (148) */ + /** @name XcmV2NetworkId (153) */ interface XcmV2NetworkId extends Enum { readonly isAny: boolean; readonly isNamed: boolean; @@ -1616,7 +1678,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama'; } - /** @name XcmV2BodyId (150) */ + /** @name XcmV2BodyId (155) */ interface XcmV2BodyId extends Enum { readonly isUnit: boolean; readonly isNamed: boolean; @@ -1633,7 +1695,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; } - /** @name XcmV2BodyPart (151) */ + /** @name XcmV2BodyPart (156) */ interface XcmV2BodyPart extends Enum { readonly isVoice: boolean; readonly isMembers: boolean; @@ -1658,7 +1720,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; } - /** @name XcmV2MultiassetFungibility (152) */ + /** @name XcmV2MultiassetFungibility (157) */ interface XcmV2MultiassetFungibility extends Enum { readonly isFungible: boolean; readonly asFungible: Compact; @@ -1667,7 +1729,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV2MultiassetAssetInstance (153) */ + /** @name XcmV2MultiassetAssetInstance (158) */ interface XcmV2MultiassetAssetInstance extends Enum { readonly isUndefined: boolean; readonly isIndex: boolean; @@ -1685,7 +1747,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob'; } - /** @name XcmVersionedMultiLocation (154) */ + /** @name XcmVersionedMultiLocation (159) */ interface XcmVersionedMultiLocation extends Enum { readonly isV2: boolean; readonly asV2: XcmV2MultiLocation; @@ -1694,7 +1756,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'V2' | 'V3'; } - /** @name CumulusPalletXcmEvent (155) */ + /** @name CumulusPalletXcmEvent (160) */ interface CumulusPalletXcmEvent extends Enum { readonly isInvalidFormat: boolean; readonly asInvalidFormat: U8aFixed; @@ -1705,7 +1767,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward'; } - /** @name CumulusPalletDmpQueueEvent (156) */ + /** @name CumulusPalletDmpQueueEvent (161) */ interface CumulusPalletDmpQueueEvent extends Enum { readonly isInvalidFormat: boolean; readonly asInvalidFormat: { @@ -1737,10 +1799,14 @@ declare module '@polkadot/types/lookup' { readonly overweightIndex: u64; readonly weightUsed: SpWeightsWeightV2Weight; } & Struct; - readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced'; + readonly isMaxMessagesExhausted: boolean; + readonly asMaxMessagesExhausted: { + readonly messageId: U8aFixed; + } & Struct; + readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced' | 'MaxMessagesExhausted'; } - /** @name FrameSystemPhase (157) */ + /** @name FrameSystemPhase (162) */ interface FrameSystemPhase extends Enum { readonly isApplyExtrinsic: boolean; readonly asApplyExtrinsic: u32; @@ -1749,13 +1815,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; } - /** @name FrameSystemLastRuntimeUpgradeInfo (160) */ + /** @name FrameSystemLastRuntimeUpgradeInfo (165) */ interface FrameSystemLastRuntimeUpgradeInfo extends Struct { readonly specVersion: Compact; readonly specName: Text; } - /** @name FrameSystemCall (162) */ + /** @name FrameSystemCall (167) */ interface FrameSystemCall extends Enum { readonly isRemark: boolean; readonly asRemark: { @@ -1793,21 +1859,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent'; } - /** @name FrameSystemLimitsBlockWeights (166) */ + /** @name FrameSystemLimitsBlockWeights (171) */ interface FrameSystemLimitsBlockWeights extends Struct { readonly baseBlock: SpWeightsWeightV2Weight; readonly maxBlock: SpWeightsWeightV2Weight; readonly perClass: FrameSupportDispatchPerDispatchClassWeightsPerClass; } - /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (167) */ + /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (172) */ interface FrameSupportDispatchPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; readonly operational: FrameSystemLimitsWeightsPerClass; readonly mandatory: FrameSystemLimitsWeightsPerClass; } - /** @name FrameSystemLimitsWeightsPerClass (168) */ + /** @name FrameSystemLimitsWeightsPerClass (173) */ interface FrameSystemLimitsWeightsPerClass extends Struct { readonly baseExtrinsic: SpWeightsWeightV2Weight; readonly maxExtrinsic: Option; @@ -1815,25 +1881,25 @@ declare module '@polkadot/types/lookup' { readonly reserved: Option; } - /** @name FrameSystemLimitsBlockLength (170) */ + /** @name FrameSystemLimitsBlockLength (175) */ interface FrameSystemLimitsBlockLength extends Struct { readonly max: FrameSupportDispatchPerDispatchClassU32; } - /** @name FrameSupportDispatchPerDispatchClassU32 (171) */ + /** @name FrameSupportDispatchPerDispatchClassU32 (176) */ interface FrameSupportDispatchPerDispatchClassU32 extends Struct { readonly normal: u32; readonly operational: u32; readonly mandatory: u32; } - /** @name SpWeightsRuntimeDbWeight (172) */ + /** @name SpWeightsRuntimeDbWeight (177) */ interface SpWeightsRuntimeDbWeight extends Struct { readonly read: u64; readonly write: u64; } - /** @name SpVersionRuntimeVersion (173) */ + /** @name SpVersionRuntimeVersion (178) */ interface SpVersionRuntimeVersion extends Struct { readonly specName: Text; readonly implName: Text; @@ -1845,7 +1911,7 @@ declare module '@polkadot/types/lookup' { readonly stateVersion: u8; } - /** @name FrameSystemError (177) */ + /** @name FrameSystemError (182) */ interface FrameSystemError extends Enum { readonly isInvalidSpecName: boolean; readonly isSpecVersionNeedsToIncrease: boolean; @@ -1856,7 +1922,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered'; } - /** @name PalletTimestampCall (179) */ + /** @name PalletTimestampCall (183) */ interface PalletTimestampCall extends Enum { readonly isSet: boolean; readonly asSet: { @@ -1865,7 +1931,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Set'; } - /** @name PalletIndicesCall (181) */ + /** @name PalletIndicesCall (185) */ interface PalletIndicesCall extends Enum { readonly isClaim: boolean; readonly asClaim: { @@ -1893,7 +1959,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Claim' | 'Transfer' | 'Free' | 'ForceTransfer' | 'Freeze'; } - /** @name PalletIndicesError (184) */ + /** @name PalletIndicesError (188) */ interface PalletIndicesError extends Enum { readonly isNotAssigned: boolean; readonly isNotOwner: boolean; @@ -1903,14 +1969,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotAssigned' | 'NotOwner' | 'InUse' | 'NotTransfer' | 'Permanent'; } - /** @name PalletBalancesBalanceLock (186) */ + /** @name PalletBalancesBalanceLock (190) */ interface PalletBalancesBalanceLock extends Struct { readonly id: U8aFixed; readonly amount: u128; readonly reasons: PalletBalancesReasons; } - /** @name PalletBalancesReasons (187) */ + /** @name PalletBalancesReasons (191) */ interface PalletBalancesReasons extends Enum { readonly isFee: boolean; readonly isMisc: boolean; @@ -1918,13 +1984,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Fee' | 'Misc' | 'All'; } - /** @name PalletBalancesReserveData (190) */ + /** @name PalletBalancesReserveData (194) */ interface PalletBalancesReserveData extends Struct { readonly id: U8aFixed; readonly amount: u128; } - /** @name PalletBalancesCall (192) */ + /** @name PalletBalancesCall (196) */ interface PalletBalancesCall extends Enum { readonly isTransfer: boolean; readonly asTransfer: { @@ -1961,7 +2027,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Transfer' | 'SetBalance' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve'; } - /** @name PalletBalancesError (193) */ + /** @name PalletBalancesError (197) */ interface PalletBalancesError extends Enum { readonly isVestingBalance: boolean; readonly isLiquidityRestrictions: boolean; @@ -1974,28 +2040,28 @@ declare module '@polkadot/types/lookup' { readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'KeepAlive' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves'; } - /** @name PalletTransactionPaymentReleases (195) */ + /** @name PalletTransactionPaymentReleases (199) */ interface PalletTransactionPaymentReleases extends Enum { readonly isV1Ancient: boolean; readonly isV2: boolean; readonly type: 'V1Ancient' | 'V2'; } - /** @name SpConsensusAuraSr25519AppSr25519Public (197) */ + /** @name SpConsensusAuraSr25519AppSr25519Public (201) */ interface SpConsensusAuraSr25519AppSr25519Public extends SpCoreSr25519Public {} - /** @name SpCoreSr25519Public (198) */ + /** @name SpCoreSr25519Public (202) */ interface SpCoreSr25519Public extends U8aFixed {} - /** @name SpiritnetRuntimeSessionKeys (204) */ + /** @name SpiritnetRuntimeSessionKeys (208) */ interface SpiritnetRuntimeSessionKeys extends Struct { readonly aura: SpConsensusAuraSr25519AppSr25519Public; } - /** @name SpCoreCryptoKeyTypeId (207) */ + /** @name SpCoreCryptoKeyTypeId (211) */ interface SpCoreCryptoKeyTypeId extends U8aFixed {} - /** @name PalletSessionCall (208) */ + /** @name PalletSessionCall (212) */ interface PalletSessionCall extends Enum { readonly isSetKeys: boolean; readonly asSetKeys: { @@ -2006,7 +2072,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetKeys' | 'PurgeKeys'; } - /** @name PalletSessionError (209) */ + /** @name PalletSessionError (213) */ interface PalletSessionError extends Enum { readonly isInvalidProof: boolean; readonly isNoAssociatedValidatorId: boolean; @@ -2016,26 +2082,26 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidProof' | 'NoAssociatedValidatorId' | 'DuplicatedKey' | 'NoKeys' | 'NoAccount'; } - /** @name ParachainStakingRoundInfo (210) */ + /** @name ParachainStakingRoundInfo (214) */ interface ParachainStakingRoundInfo extends Struct { readonly current: u32; readonly first: u64; readonly length: u64; } - /** @name ParachainStakingDelegationCounter (211) */ + /** @name ParachainStakingDelegationCounter (215) */ interface ParachainStakingDelegationCounter extends Struct { readonly round: u32; readonly counter: u32; } - /** @name ParachainStakingStake (212) */ + /** @name ParachainStakingStake (216) */ interface ParachainStakingStake extends Struct { readonly owner: AccountId32; readonly amount: u128; } - /** @name ParachainStakingCandidate (213) */ + /** @name ParachainStakingCandidate (217) */ interface ParachainStakingCandidate extends Struct { readonly id: AccountId32; readonly stake: u128; @@ -2044,10 +2110,10 @@ declare module '@polkadot/types/lookup' { readonly status: ParachainStakingCandidateStatus; } - /** @name ParachainStakingSetOrderedSet (214) */ + /** @name ParachainStakingSetOrderedSet (218) */ interface ParachainStakingSetOrderedSet extends Vec {} - /** @name ParachainStakingCandidateStatus (217) */ + /** @name ParachainStakingCandidateStatus (221) */ interface ParachainStakingCandidateStatus extends Enum { readonly isActive: boolean; readonly isLeaving: boolean; @@ -2055,31 +2121,31 @@ declare module '@polkadot/types/lookup' { readonly type: 'Active' | 'Leaving'; } - /** @name ParachainStakingTotalStake (218) */ + /** @name ParachainStakingTotalStake (222) */ interface ParachainStakingTotalStake extends Struct { readonly collators: u128; readonly delegators: u128; } - /** @name ParachainStakingInflationInflationInfo (221) */ + /** @name ParachainStakingInflationInflationInfo (225) */ interface ParachainStakingInflationInflationInfo extends Struct { readonly collator: ParachainStakingInflationStakingInfo; readonly delegator: ParachainStakingInflationStakingInfo; } - /** @name ParachainStakingInflationStakingInfo (222) */ + /** @name ParachainStakingInflationStakingInfo (226) */ interface ParachainStakingInflationStakingInfo extends Struct { readonly maxRate: Perquintill; readonly rewardRate: ParachainStakingInflationRewardRate; } - /** @name ParachainStakingInflationRewardRate (223) */ + /** @name ParachainStakingInflationRewardRate (227) */ interface ParachainStakingInflationRewardRate extends Struct { readonly annual: Perquintill; readonly perBlock: Perquintill; } - /** @name ParachainStakingCall (228) */ + /** @name ParachainStakingCall (232) */ interface ParachainStakingCall extends Enum { readonly isForceNewRound: boolean; readonly isSetInflation: boolean; @@ -2148,7 +2214,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ForceNewRound' | 'SetInflation' | 'SetMaxSelectedCandidates' | 'SetBlocksPerRound' | 'SetMaxCandidateStake' | 'ForceRemoveCandidate' | 'JoinCandidates' | 'InitLeaveCandidates' | 'ExecuteLeaveCandidates' | 'CancelLeaveCandidates' | 'CandidateStakeMore' | 'CandidateStakeLess' | 'JoinDelegators' | 'LeaveDelegators' | 'DelegatorStakeMore' | 'DelegatorStakeLess' | 'UnlockUnstaked' | 'ClaimRewards' | 'IncrementCollatorRewards' | 'IncrementDelegatorRewards' | 'ExecuteScheduledRewardChange'; } - /** @name ParachainStakingError (229) */ + /** @name ParachainStakingError (233) */ interface ParachainStakingError extends Enum { readonly isDelegatorNotFound: boolean; readonly isCandidateNotFound: boolean; @@ -2184,7 +2250,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'DelegatorNotFound' | 'CandidateNotFound' | 'DelegatorExists' | 'CandidateExists' | 'ValStakeZero' | 'ValStakeBelowMin' | 'ValStakeAboveMax' | 'DelegationBelowMin' | 'AlreadyLeaving' | 'NotLeaving' | 'CannotLeaveYet' | 'CannotJoinBeforeUnlocking' | 'AlreadyDelegating' | 'NotYetDelegating' | 'DelegationsPerRoundExceeded' | 'TooManyDelegators' | 'TooFewCollatorCandidates' | 'CannotStakeIfLeaving' | 'CannotDelegateIfLeaving' | 'MaxCollatorsPerDelegatorExceeded' | 'AlreadyDelegatedCollator' | 'DelegationNotFound' | 'Underflow' | 'CannotSetAboveMax' | 'CannotSetBelowMin' | 'InvalidSchedule' | 'NoMoreUnstaking' | 'TooEarly' | 'StakeNotFound' | 'UnstakingIsEmpty' | 'RewardsNotFound'; } - /** @name FrameSupportPreimagesBounded (232) */ + /** @name FrameSupportPreimagesBounded (236) */ interface FrameSupportPreimagesBounded extends Enum { readonly isLegacy: boolean; readonly asLegacy: { @@ -2200,7 +2266,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Legacy' | 'Inline' | 'Lookup'; } - /** @name PalletDemocracyCall (234) */ + /** @name PalletDemocracyCall (238) */ interface PalletDemocracyCall extends Enum { readonly isPropose: boolean; readonly asPropose: { @@ -2276,10 +2342,15 @@ declare module '@polkadot/types/lookup' { readonly asCancelProposal: { readonly propIndex: Compact; } & Struct; - readonly type: 'Propose' | 'Second' | 'Vote' | 'EmergencyCancel' | 'ExternalPropose' | 'ExternalProposeMajority' | 'ExternalProposeDefault' | 'FastTrack' | 'VetoExternal' | 'CancelReferendum' | 'Delegate' | 'Undelegate' | 'ClearPublicProposals' | 'Unlock' | 'RemoveVote' | 'RemoveOtherVote' | 'Blacklist' | 'CancelProposal'; + readonly isSetMetadata: boolean; + readonly asSetMetadata: { + readonly owner: PalletDemocracyMetadataOwner; + readonly maybeHash: Option; + } & Struct; + readonly type: 'Propose' | 'Second' | 'Vote' | 'EmergencyCancel' | 'ExternalPropose' | 'ExternalProposeMajority' | 'ExternalProposeDefault' | 'FastTrack' | 'VetoExternal' | 'CancelReferendum' | 'Delegate' | 'Undelegate' | 'ClearPublicProposals' | 'Unlock' | 'RemoveVote' | 'RemoveOtherVote' | 'Blacklist' | 'CancelProposal' | 'SetMetadata'; } - /** @name PalletDemocracyConviction (235) */ + /** @name PalletDemocracyConviction (239) */ interface PalletDemocracyConviction extends Enum { readonly isNone: boolean; readonly isLocked1x: boolean; @@ -2291,7 +2362,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'None' | 'Locked1x' | 'Locked2x' | 'Locked3x' | 'Locked4x' | 'Locked5x' | 'Locked6x'; } - /** @name PalletCollectiveCall (237) */ + /** @name PalletCollectiveCall (242) */ interface PalletCollectiveCall extends Enum { readonly isSetMembers: boolean; readonly asSetMembers: { @@ -2337,7 +2408,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetMembers' | 'Execute' | 'Propose' | 'Vote' | 'CloseOldWeight' | 'DisapproveProposal' | 'Close'; } - /** @name PalletMembershipCall (242) */ + /** @name PalletMembershipCall (247) */ interface PalletMembershipCall extends Enum { readonly isAddMember: boolean; readonly asAddMember: { @@ -2368,7 +2439,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AddMember' | 'RemoveMember' | 'SwapMember' | 'ResetMembers' | 'ChangeKey' | 'SetPrime' | 'ClearPrime'; } - /** @name PalletTreasuryCall (243) */ + /** @name PalletTreasuryCall (248) */ interface PalletTreasuryCall extends Enum { readonly isProposeSpend: boolean; readonly asProposeSpend: { @@ -2395,7 +2466,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal' | 'Spend' | 'RemoveApproval'; } - /** @name PalletUtilityCall (244) */ + /** @name PalletUtilityCall (249) */ interface PalletUtilityCall extends Enum { readonly isBatch: boolean; readonly asBatch: { @@ -2427,7 +2498,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Batch' | 'AsDerivative' | 'BatchAll' | 'DispatchAs' | 'ForceBatch' | 'WithWeight'; } - /** @name SpiritnetRuntimeOriginCaller (246) */ + /** @name SpiritnetRuntimeOriginCaller (251) */ interface SpiritnetRuntimeOriginCaller extends Enum { readonly isSystem: boolean; readonly asSystem: FrameSupportDispatchRawOrigin; @@ -2445,7 +2516,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'System' | 'Void' | 'Council' | 'TechnicalCommittee' | 'Did' | 'PolkadotXcm' | 'CumulusXcm'; } - /** @name FrameSupportDispatchRawOrigin (247) */ + /** @name FrameSupportDispatchRawOrigin (252) */ interface FrameSupportDispatchRawOrigin extends Enum { readonly isRoot: boolean; readonly isSigned: boolean; @@ -2454,7 +2525,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Root' | 'Signed' | 'None'; } - /** @name PalletCollectiveRawOrigin (248) */ + /** @name PalletCollectiveRawOrigin (253) */ interface PalletCollectiveRawOrigin extends Enum { readonly isMembers: boolean; readonly asMembers: ITuple<[u32, u32]>; @@ -2464,13 +2535,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Members' | 'Member' | 'Phantom'; } - /** @name DidOriginDidRawOrigin (250) */ + /** @name DidOriginDidRawOrigin (255) */ interface DidOriginDidRawOrigin extends Struct { readonly id: AccountId32; readonly submitter: AccountId32; } - /** @name PalletXcmOrigin (251) */ + /** @name PalletXcmOrigin (256) */ interface PalletXcmOrigin extends Enum { readonly isXcm: boolean; readonly asXcm: XcmV3MultiLocation; @@ -2479,7 +2550,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Xcm' | 'Response'; } - /** @name CumulusPalletXcmOrigin (252) */ + /** @name CumulusPalletXcmOrigin (257) */ interface CumulusPalletXcmOrigin extends Enum { readonly isRelay: boolean; readonly isSiblingParachain: boolean; @@ -2487,10 +2558,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'Relay' | 'SiblingParachain'; } - /** @name SpCoreVoid (253) */ + /** @name SpCoreVoid (258) */ type SpCoreVoid = Null; - /** @name PalletVestingCall (254) */ + /** @name PalletVestingCall (259) */ interface PalletVestingCall extends Enum { readonly isVest: boolean; readonly isVestOther: boolean; @@ -2516,14 +2587,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Vest' | 'VestOther' | 'VestedTransfer' | 'ForceVestedTransfer' | 'MergeSchedules'; } - /** @name PalletVestingVestingInfo (255) */ + /** @name PalletVestingVestingInfo (260) */ interface PalletVestingVestingInfo extends Struct { readonly locked: u128; readonly perBlock: u128; readonly startingBlock: u64; } - /** @name PalletSchedulerCall (256) */ + /** @name PalletSchedulerCall (261) */ interface PalletSchedulerCall extends Enum { readonly isSchedule: boolean; readonly asSchedule: { @@ -2567,7 +2638,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Schedule' | 'Cancel' | 'ScheduleNamed' | 'CancelNamed' | 'ScheduleAfter' | 'ScheduleNamedAfter'; } - /** @name PalletProxyCall (258) */ + /** @name PalletProxyCall (263) */ interface PalletProxyCall extends Enum { readonly isProxy: boolean; readonly asProxy: { @@ -2627,7 +2698,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Proxy' | 'AddProxy' | 'RemoveProxy' | 'RemoveProxies' | 'CreatePure' | 'KillPure' | 'Announce' | 'RemoveAnnouncement' | 'RejectAnnouncement' | 'ProxyAnnounced'; } - /** @name PalletPreimageCall (260) */ + /** @name PalletPreimageCall (265) */ interface PalletPreimageCall extends Enum { readonly isNotePreimage: boolean; readonly asNotePreimage: { @@ -2648,7 +2719,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotePreimage' | 'UnnotePreimage' | 'RequestPreimage' | 'UnrequestPreimage'; } - /** @name PalletTipsCall (262) */ + /** @name PalletTipsCall (267) */ interface PalletTipsCall extends Enum { readonly isReportAwesome: boolean; readonly asReportAwesome: { @@ -2681,7 +2752,40 @@ declare module '@polkadot/types/lookup' { readonly type: 'ReportAwesome' | 'RetractTip' | 'TipNew' | 'Tip' | 'CloseTip' | 'SlashTip'; } - /** @name CtypeCall (263) */ + /** @name PalletMultisigCall (268) */ + interface PalletMultisigCall extends Enum { + readonly isAsMultiThreshold1: boolean; + readonly asAsMultiThreshold1: { + readonly otherSignatories: Vec; + readonly call: Call; + } & Struct; + readonly isAsMulti: boolean; + readonly asAsMulti: { + readonly threshold: u16; + readonly otherSignatories: Vec; + readonly maybeTimepoint: Option; + readonly call: Call; + readonly maxWeight: SpWeightsWeightV2Weight; + } & Struct; + readonly isApproveAsMulti: boolean; + readonly asApproveAsMulti: { + readonly threshold: u16; + readonly otherSignatories: Vec; + readonly maybeTimepoint: Option; + readonly callHash: U8aFixed; + readonly maxWeight: SpWeightsWeightV2Weight; + } & Struct; + readonly isCancelAsMulti: boolean; + readonly asCancelAsMulti: { + readonly threshold: u16; + readonly otherSignatories: Vec; + readonly timepoint: PalletMultisigTimepoint; + readonly callHash: U8aFixed; + } & Struct; + readonly type: 'AsMultiThreshold1' | 'AsMulti' | 'ApproveAsMulti' | 'CancelAsMulti'; + } + + /** @name CtypeCall (270) */ interface CtypeCall extends Enum { readonly isAdd: boolean; readonly asAdd: { @@ -2695,7 +2799,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Add' | 'SetBlockNumber'; } - /** @name AttestationCall (264) */ + /** @name AttestationCall (271) */ interface AttestationCall extends Enum { readonly isAdd: boolean; readonly asAdd: { @@ -2728,23 +2832,23 @@ declare module '@polkadot/types/lookup' { readonly type: 'Add' | 'Revoke' | 'Remove' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name RuntimeCommonAuthorizationPalletAuthorize (266) */ + /** @name RuntimeCommonAuthorizationPalletAuthorize (273) */ interface RuntimeCommonAuthorizationPalletAuthorize extends Enum { readonly isDelegation: boolean; readonly asDelegation: DelegationAccessControlDelegationAc; readonly type: 'Delegation'; } - /** @name DelegationAccessControlDelegationAc (267) */ + /** @name DelegationAccessControlDelegationAc (274) */ interface DelegationAccessControlDelegationAc extends Struct { readonly subjectNodeId: H256; readonly maxChecks: u32; } - /** @name SpiritnetRuntimeRuntime (268) */ + /** @name SpiritnetRuntimeRuntime (275) */ type SpiritnetRuntimeRuntime = Null; - /** @name DelegationCall (269) */ + /** @name DelegationCall (276) */ interface DelegationCall extends Enum { readonly isCreateHierarchy: boolean; readonly asCreateHierarchy: { @@ -2786,7 +2890,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CreateHierarchy' | 'AddDelegation' | 'RevokeDelegation' | 'RemoveDelegation' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name DidDidDetailsDidSignature (270) */ + /** @name DidDidDetailsDidSignature (277) */ interface DidDidDetailsDidSignature extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Signature; @@ -2797,16 +2901,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name SpCoreEd25519Signature (271) */ + /** @name SpCoreEd25519Signature (278) */ interface SpCoreEd25519Signature extends U8aFixed {} - /** @name SpCoreSr25519Signature (273) */ + /** @name SpCoreSr25519Signature (280) */ interface SpCoreSr25519Signature extends U8aFixed {} - /** @name SpCoreEcdsaSignature (274) */ + /** @name SpCoreEcdsaSignature (281) */ interface SpCoreEcdsaSignature extends U8aFixed {} - /** @name DidCall (276) */ + /** @name DidCall (283) */ interface DidCall extends Enum { readonly isCreate: boolean; readonly asCreate: { @@ -2865,7 +2969,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Create' | 'SetAuthenticationKey' | 'SetDelegationKey' | 'RemoveDelegationKey' | 'SetAttestationKey' | 'RemoveAttestationKey' | 'AddKeyAgreementKey' | 'RemoveKeyAgreementKey' | 'AddServiceEndpoint' | 'RemoveServiceEndpoint' | 'Delete' | 'ReclaimDeposit' | 'SubmitDidCall' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name DidDidDetailsDidCreationDetails (277) */ + /** @name DidDidDetailsDidCreationDetails (284) */ interface DidDidDetailsDidCreationDetails extends Struct { readonly did: AccountId32; readonly submitter: AccountId32; @@ -2875,14 +2979,14 @@ declare module '@polkadot/types/lookup' { readonly newServiceDetails: Vec; } - /** @name DidDidDetailsDidEncryptionKey (279) */ + /** @name DidDidDetailsDidEncryptionKey (286) */ interface DidDidDetailsDidEncryptionKey extends Enum { readonly isX25519: boolean; readonly asX25519: U8aFixed; readonly type: 'X25519'; } - /** @name DidDidDetailsDidVerificationKey (283) */ + /** @name DidDidDetailsDidVerificationKey (290) */ interface DidDidDetailsDidVerificationKey extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Public; @@ -2893,20 +2997,20 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name SpCoreEd25519Public (284) */ + /** @name SpCoreEd25519Public (291) */ interface SpCoreEd25519Public extends U8aFixed {} - /** @name SpCoreEcdsaPublic (285) */ + /** @name SpCoreEcdsaPublic (292) */ interface SpCoreEcdsaPublic extends U8aFixed {} - /** @name DidServiceEndpointsDidEndpoint (288) */ + /** @name DidServiceEndpointsDidEndpoint (295) */ interface DidServiceEndpointsDidEndpoint extends Struct { readonly id: Bytes; readonly serviceTypes: Vec; readonly urls: Vec; } - /** @name DidDidDetailsDidAuthorizedCallOperation (296) */ + /** @name DidDidDetailsDidAuthorizedCallOperation (303) */ interface DidDidDetailsDidAuthorizedCallOperation extends Struct { readonly did: AccountId32; readonly txCounter: u64; @@ -2915,7 +3019,7 @@ declare module '@polkadot/types/lookup' { readonly submitter: AccountId32; } - /** @name PalletDidLookupCall (297) */ + /** @name PalletDidLookupCall (304) */ interface PalletDidLookupCall extends Enum { readonly isAssociateAccount: boolean; readonly asAssociateAccount: { @@ -2940,14 +3044,10 @@ declare module '@polkadot/types/lookup' { readonly asUpdateDeposit: { readonly account: PalletDidLookupLinkableAccountLinkableAccountId; } & Struct; - readonly isMigrate: boolean; - readonly asMigrate: { - readonly limit: u32; - } & Struct; - readonly type: 'AssociateAccount' | 'AssociateSender' | 'RemoveSenderAssociation' | 'RemoveAccountAssociation' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit' | 'Migrate'; + readonly type: 'AssociateAccount' | 'AssociateSender' | 'RemoveSenderAssociation' | 'RemoveAccountAssociation' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name PalletDidLookupAssociateAccountRequest (298) */ + /** @name PalletDidLookupAssociateAccountRequest (305) */ interface PalletDidLookupAssociateAccountRequest extends Enum { readonly isPolkadot: boolean; readonly asPolkadot: ITuple<[AccountId32, SpRuntimeMultiSignature]>; @@ -2956,7 +3056,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Polkadot' | 'Ethereum'; } - /** @name SpRuntimeMultiSignature (299) */ + /** @name SpRuntimeMultiSignature (306) */ interface SpRuntimeMultiSignature extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Signature; @@ -2967,10 +3067,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name PalletDidLookupAccountEthereumSignature (300) */ + /** @name PalletDidLookupAccountEthereumSignature (307) */ interface PalletDidLookupAccountEthereumSignature extends SpCoreEcdsaSignature {} - /** @name PalletWeb3NamesCall (301) */ + /** @name PalletWeb3NamesCall (308) */ interface PalletWeb3NamesCall extends Enum { readonly isClaim: boolean; readonly asClaim: { @@ -2997,7 +3097,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Claim' | 'ReleaseByOwner' | 'ReclaimDeposit' | 'Ban' | 'Unban' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name PublicCredentialsCall (302) */ + /** @name PublicCredentialsCall (309) */ interface PublicCredentialsCall extends Enum { readonly isAdd: boolean; readonly asAdd: { @@ -3033,7 +3133,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Add' | 'Revoke' | 'Unrevoke' | 'Remove' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name PublicCredentialsCredentialsCredential (303) */ + /** @name PublicCredentialsCredentialsCredential (310) */ interface PublicCredentialsCredentialsCredential extends Struct { readonly ctypeHash: H256; readonly subject: Bytes; @@ -3041,7 +3141,7 @@ declare module '@polkadot/types/lookup' { readonly authorization: Option; } - /** @name CumulusPalletParachainSystemCall (306) */ + /** @name CumulusPalletParachainSystemCall (313) */ interface CumulusPalletParachainSystemCall extends Enum { readonly isSetValidationData: boolean; readonly asSetValidationData: { @@ -3054,6 +3154,7 @@ declare module '@polkadot/types/lookup' { readonly isAuthorizeUpgrade: boolean; readonly asAuthorizeUpgrade: { readonly codeHash: H256; + readonly checkVersion: bool; } & Struct; readonly isEnactAuthorizedUpgrade: boolean; readonly asEnactAuthorizedUpgrade: { @@ -3062,7 +3163,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetValidationData' | 'SudoSendUpwardMessage' | 'AuthorizeUpgrade' | 'EnactAuthorizedUpgrade'; } - /** @name CumulusPrimitivesParachainInherentParachainInherentData (307) */ + /** @name CumulusPrimitivesParachainInherentParachainInherentData (314) */ interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct { readonly validationData: PolkadotPrimitivesV2PersistedValidationData; readonly relayChainState: SpTrieStorageProof; @@ -3070,7 +3171,7 @@ declare module '@polkadot/types/lookup' { readonly horizontalMessages: BTreeMap>; } - /** @name PolkadotPrimitivesV2PersistedValidationData (308) */ + /** @name PolkadotPrimitivesV2PersistedValidationData (315) */ interface PolkadotPrimitivesV2PersistedValidationData extends Struct { readonly parentHead: Bytes; readonly relayParentNumber: u32; @@ -3078,24 +3179,24 @@ declare module '@polkadot/types/lookup' { readonly maxPovSize: u32; } - /** @name SpTrieStorageProof (310) */ + /** @name SpTrieStorageProof (317) */ interface SpTrieStorageProof extends Struct { readonly trieNodes: BTreeSet; } - /** @name PolkadotCorePrimitivesInboundDownwardMessage (313) */ + /** @name PolkadotCorePrimitivesInboundDownwardMessage (320) */ interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct { readonly sentAt: u32; readonly msg: Bytes; } - /** @name PolkadotCorePrimitivesInboundHrmpMessage (316) */ + /** @name PolkadotCorePrimitivesInboundHrmpMessage (323) */ interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct { readonly sentAt: u32; readonly data: Bytes; } - /** @name CumulusPalletXcmpQueueCall (319) */ + /** @name CumulusPalletXcmpQueueCall (326) */ interface CumulusPalletXcmpQueueCall extends Enum { readonly isServiceOverweight: boolean; readonly asServiceOverweight: { @@ -3131,7 +3232,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight'; } - /** @name PalletXcmCall (320) */ + /** @name PalletXcmCall (327) */ interface PalletXcmCall extends Enum { readonly isSend: boolean; readonly asSend: { @@ -3193,7 +3294,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets'; } - /** @name XcmVersionedXcm (321) */ + /** @name XcmVersionedXcm (328) */ interface XcmVersionedXcm extends Enum { readonly isV2: boolean; readonly asV2: XcmV2Xcm; @@ -3202,10 +3303,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'V2' | 'V3'; } - /** @name XcmV2Xcm (322) */ + /** @name XcmV2Xcm (329) */ interface XcmV2Xcm extends Vec {} - /** @name XcmV2Instruction (324) */ + /** @name XcmV2Instruction (331) */ interface XcmV2Instruction extends Enum { readonly isWithdrawAsset: boolean; readonly asWithdrawAsset: XcmV2MultiassetMultiAssets; @@ -3325,7 +3426,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion'; } - /** @name XcmV2Response (325) */ + /** @name XcmV2Response (332) */ interface XcmV2Response extends Enum { readonly isNull: boolean; readonly isAssets: boolean; @@ -3337,7 +3438,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version'; } - /** @name XcmV2TraitsError (328) */ + /** @name XcmV2TraitsError (335) */ interface XcmV2TraitsError extends Enum { readonly isOverflow: boolean; readonly isUnimplemented: boolean; @@ -3370,7 +3471,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable'; } - /** @name XcmV2MultiassetMultiAssetFilter (329) */ + /** @name XcmV2MultiassetMultiAssetFilter (336) */ interface XcmV2MultiassetMultiAssetFilter extends Enum { readonly isDefinite: boolean; readonly asDefinite: XcmV2MultiassetMultiAssets; @@ -3379,7 +3480,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Definite' | 'Wild'; } - /** @name XcmV2MultiassetWildMultiAsset (330) */ + /** @name XcmV2MultiassetWildMultiAsset (337) */ interface XcmV2MultiassetWildMultiAsset extends Enum { readonly isAll: boolean; readonly isAllOf: boolean; @@ -3390,14 +3491,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'All' | 'AllOf'; } - /** @name XcmV2MultiassetWildFungibility (331) */ + /** @name XcmV2MultiassetWildFungibility (338) */ interface XcmV2MultiassetWildFungibility extends Enum { readonly isFungible: boolean; readonly isNonFungible: boolean; readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV2WeightLimit (332) */ + /** @name XcmV2WeightLimit (339) */ interface XcmV2WeightLimit extends Enum { readonly isUnlimited: boolean; readonly isLimited: boolean; @@ -3405,7 +3506,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unlimited' | 'Limited'; } - /** @name CumulusPalletDmpQueueCall (341) */ + /** @name CumulusPalletDmpQueueCall (348) */ interface CumulusPalletDmpQueueCall extends Enum { readonly isServiceOverweight: boolean; readonly asServiceOverweight: { @@ -3415,7 +3516,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ServiceOverweight'; } - /** @name PalletDemocracyReferendumInfo (345) */ + /** @name PalletDemocracyReferendumInfo (352) */ interface PalletDemocracyReferendumInfo extends Enum { readonly isOngoing: boolean; readonly asOngoing: PalletDemocracyReferendumStatus; @@ -3427,7 +3528,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ongoing' | 'Finished'; } - /** @name PalletDemocracyReferendumStatus (346) */ + /** @name PalletDemocracyReferendumStatus (353) */ interface PalletDemocracyReferendumStatus extends Struct { readonly end: u64; readonly proposal: FrameSupportPreimagesBounded; @@ -3436,14 +3537,14 @@ declare module '@polkadot/types/lookup' { readonly tally: PalletDemocracyTally; } - /** @name PalletDemocracyTally (347) */ + /** @name PalletDemocracyTally (354) */ interface PalletDemocracyTally extends Struct { readonly ayes: u128; readonly nays: u128; readonly turnout: u128; } - /** @name PalletDemocracyVoteVoting (348) */ + /** @name PalletDemocracyVoteVoting (355) */ interface PalletDemocracyVoteVoting extends Enum { readonly isDirect: boolean; readonly asDirect: { @@ -3462,16 +3563,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'Direct' | 'Delegating'; } - /** @name PalletDemocracyDelegations (352) */ + /** @name PalletDemocracyDelegations (359) */ interface PalletDemocracyDelegations extends Struct { readonly votes: u128; readonly capital: u128; } - /** @name PalletDemocracyVotePriorLock (353) */ + /** @name PalletDemocracyVotePriorLock (360) */ interface PalletDemocracyVotePriorLock extends ITuple<[u64, u128]> {} - /** @name PalletDemocracyError (356) */ + /** @name PalletDemocracyError (363) */ interface PalletDemocracyError extends Enum { readonly isValueLow: boolean; readonly isProposalMissing: boolean; @@ -3496,10 +3597,11 @@ declare module '@polkadot/types/lookup' { readonly isMaxVotesReached: boolean; readonly isTooMany: boolean; readonly isVotingPeriodLow: boolean; - readonly type: 'ValueLow' | 'ProposalMissing' | 'AlreadyCanceled' | 'DuplicateProposal' | 'ProposalBlacklisted' | 'NotSimpleMajority' | 'InvalidHash' | 'NoProposal' | 'AlreadyVetoed' | 'ReferendumInvalid' | 'NoneWaiting' | 'NotVoter' | 'NoPermission' | 'AlreadyDelegating' | 'InsufficientFunds' | 'NotDelegating' | 'VotesExist' | 'InstantNotAllowed' | 'Nonsense' | 'WrongUpperBound' | 'MaxVotesReached' | 'TooMany' | 'VotingPeriodLow'; + readonly isPreimageNotExist: boolean; + readonly type: 'ValueLow' | 'ProposalMissing' | 'AlreadyCanceled' | 'DuplicateProposal' | 'ProposalBlacklisted' | 'NotSimpleMajority' | 'InvalidHash' | 'NoProposal' | 'AlreadyVetoed' | 'ReferendumInvalid' | 'NoneWaiting' | 'NotVoter' | 'NoPermission' | 'AlreadyDelegating' | 'InsufficientFunds' | 'NotDelegating' | 'VotesExist' | 'InstantNotAllowed' | 'Nonsense' | 'WrongUpperBound' | 'MaxVotesReached' | 'TooMany' | 'VotingPeriodLow' | 'PreimageNotExist'; } - /** @name PalletCollectiveVotes (358) */ + /** @name PalletCollectiveVotes (365) */ interface PalletCollectiveVotes extends Struct { readonly index: u32; readonly threshold: u32; @@ -3508,7 +3610,7 @@ declare module '@polkadot/types/lookup' { readonly end: u64; } - /** @name PalletCollectiveError (359) */ + /** @name PalletCollectiveError (366) */ interface PalletCollectiveError extends Enum { readonly isNotMember: boolean; readonly isDuplicateProposal: boolean; @@ -3523,7 +3625,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotMember' | 'DuplicateProposal' | 'ProposalMissing' | 'WrongIndex' | 'DuplicateVote' | 'AlreadyInitialized' | 'TooEarly' | 'TooManyProposals' | 'WrongProposalWeight' | 'WrongProposalLength'; } - /** @name PalletMembershipError (363) */ + /** @name PalletMembershipError (370) */ interface PalletMembershipError extends Enum { readonly isAlreadyMember: boolean; readonly isNotMember: boolean; @@ -3531,7 +3633,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AlreadyMember' | 'NotMember' | 'TooManyMembers'; } - /** @name PalletTreasuryProposal (364) */ + /** @name PalletTreasuryProposal (371) */ interface PalletTreasuryProposal extends Struct { readonly proposer: AccountId32; readonly value: u128; @@ -3539,10 +3641,10 @@ declare module '@polkadot/types/lookup' { readonly bond: u128; } - /** @name FrameSupportPalletId (368) */ + /** @name FrameSupportPalletId (375) */ interface FrameSupportPalletId extends U8aFixed {} - /** @name PalletTreasuryError (369) */ + /** @name PalletTreasuryError (376) */ interface PalletTreasuryError extends Enum { readonly isInsufficientProposersBalance: boolean; readonly isInvalidIndex: boolean; @@ -3552,20 +3654,20 @@ declare module '@polkadot/types/lookup' { readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'TooManyApprovals' | 'InsufficientPermission' | 'ProposalNotApproved'; } - /** @name PalletUtilityError (370) */ + /** @name PalletUtilityError (377) */ interface PalletUtilityError extends Enum { readonly isTooManyCalls: boolean; readonly type: 'TooManyCalls'; } - /** @name PalletVestingReleases (373) */ + /** @name PalletVestingReleases (380) */ interface PalletVestingReleases extends Enum { readonly isV0: boolean; readonly isV1: boolean; readonly type: 'V0' | 'V1'; } - /** @name PalletVestingError (374) */ + /** @name PalletVestingError (381) */ interface PalletVestingError extends Enum { readonly isNotVesting: boolean; readonly isAtMaxVestingSchedules: boolean; @@ -3575,7 +3677,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotVesting' | 'AtMaxVestingSchedules' | 'AmountLow' | 'ScheduleIndexOutOfBounds' | 'InvalidScheduleParams'; } - /** @name PalletSchedulerScheduled (377) */ + /** @name PalletSchedulerScheduled (384) */ interface PalletSchedulerScheduled extends Struct { readonly maybeId: Option; readonly priority: u8; @@ -3584,7 +3686,7 @@ declare module '@polkadot/types/lookup' { readonly origin: SpiritnetRuntimeOriginCaller; } - /** @name PalletSchedulerError (379) */ + /** @name PalletSchedulerError (386) */ interface PalletSchedulerError extends Enum { readonly isFailedToSchedule: boolean; readonly isNotFound: boolean; @@ -3594,21 +3696,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange' | 'Named'; } - /** @name PalletProxyProxyDefinition (382) */ + /** @name PalletProxyProxyDefinition (389) */ interface PalletProxyProxyDefinition extends Struct { readonly delegate: AccountId32; readonly proxyType: SpiritnetRuntimeProxyType; readonly delay: u64; } - /** @name PalletProxyAnnouncement (386) */ + /** @name PalletProxyAnnouncement (393) */ interface PalletProxyAnnouncement extends Struct { readonly real: AccountId32; readonly callHash: H256; readonly height: u64; } - /** @name PalletProxyError (388) */ + /** @name PalletProxyError (395) */ interface PalletProxyError extends Enum { readonly isTooMany: boolean; readonly isNotFound: boolean; @@ -3621,7 +3723,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'TooMany' | 'NotFound' | 'NotProxy' | 'Unproxyable' | 'Duplicate' | 'NoPermission' | 'Unannounced' | 'NoSelfProxy'; } - /** @name PalletPreimageRequestStatus (389) */ + /** @name PalletPreimageRequestStatus (396) */ interface PalletPreimageRequestStatus extends Enum { readonly isUnrequested: boolean; readonly asUnrequested: { @@ -3637,7 +3739,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unrequested' | 'Requested'; } - /** @name PalletPreimageError (394) */ + /** @name PalletPreimageError (401) */ interface PalletPreimageError extends Enum { readonly isTooBig: boolean; readonly isAlreadyNoted: boolean; @@ -3648,7 +3750,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'TooBig' | 'AlreadyNoted' | 'NotAuthorized' | 'NotNoted' | 'Requested' | 'NotRequested'; } - /** @name PalletTipsOpenTip (396) */ + /** @name PalletTipsOpenTip (404) */ interface PalletTipsOpenTip extends Struct { readonly reason: H256; readonly who: AccountId32; @@ -3659,7 +3761,7 @@ declare module '@polkadot/types/lookup' { readonly findersFee: bool; } - /** @name PalletTipsError (400) */ + /** @name PalletTipsError (408) */ interface PalletTipsError extends Enum { readonly isReasonTooBig: boolean; readonly isAlreadyKnown: boolean; @@ -3670,13 +3772,40 @@ declare module '@polkadot/types/lookup' { readonly type: 'ReasonTooBig' | 'AlreadyKnown' | 'UnknownTip' | 'NotFinder' | 'StillOpen' | 'Premature'; } - /** @name CtypeCtypeEntry (401) */ + /** @name PalletMultisigMultisig (410) */ + interface PalletMultisigMultisig extends Struct { + readonly when: PalletMultisigTimepoint; + readonly deposit: u128; + readonly depositor: AccountId32; + readonly approvals: Vec; + } + + /** @name PalletMultisigError (412) */ + interface PalletMultisigError extends Enum { + readonly isMinimumThreshold: boolean; + readonly isAlreadyApproved: boolean; + readonly isNoApprovalsNeeded: boolean; + readonly isTooFewSignatories: boolean; + readonly isTooManySignatories: boolean; + readonly isSignatoriesOutOfOrder: boolean; + readonly isSenderInSignatories: boolean; + readonly isNotFound: boolean; + readonly isNotOwner: boolean; + readonly isNoTimepoint: boolean; + readonly isWrongTimepoint: boolean; + readonly isUnexpectedTimepoint: boolean; + readonly isMaxWeightTooLow: boolean; + readonly isAlreadyStored: boolean; + readonly type: 'MinimumThreshold' | 'AlreadyApproved' | 'NoApprovalsNeeded' | 'TooFewSignatories' | 'TooManySignatories' | 'SignatoriesOutOfOrder' | 'SenderInSignatories' | 'NotFound' | 'NotOwner' | 'NoTimepoint' | 'WrongTimepoint' | 'UnexpectedTimepoint' | 'MaxWeightTooLow' | 'AlreadyStored'; + } + + /** @name CtypeCtypeEntry (413) */ interface CtypeCtypeEntry extends Struct { readonly creator: AccountId32; readonly createdAt: u64; } - /** @name CtypeError (402) */ + /** @name CtypeError (414) */ interface CtypeError extends Enum { readonly isNotFound: boolean; readonly isAlreadyExists: boolean; @@ -3684,7 +3813,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotFound' | 'AlreadyExists' | 'UnableToPayFees'; } - /** @name AttestationAttestationsAttestationDetails (403) */ + /** @name AttestationAttestationsAttestationDetails (415) */ interface AttestationAttestationsAttestationDetails extends Struct { readonly ctypeHash: H256; readonly attester: AccountId32; @@ -3693,13 +3822,13 @@ declare module '@polkadot/types/lookup' { readonly deposit: KiltSupportDeposit; } - /** @name KiltSupportDeposit (404) */ + /** @name KiltSupportDeposit (416) */ interface KiltSupportDeposit extends Struct { readonly owner: AccountId32; readonly amount: u128; } - /** @name AttestationError (406) */ + /** @name AttestationError (418) */ interface AttestationError extends Enum { readonly isAlreadyAttested: boolean; readonly isAlreadyRevoked: boolean; @@ -3710,7 +3839,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AlreadyAttested' | 'AlreadyRevoked' | 'NotFound' | 'CTypeMismatch' | 'NotAuthorized' | 'MaxDelegatedAttestationsExceeded'; } - /** @name DelegationDelegationHierarchyDelegationNode (407) */ + /** @name DelegationDelegationHierarchyDelegationNode (419) */ interface DelegationDelegationHierarchyDelegationNode extends Struct { readonly hierarchyRootId: H256; readonly parent: Option; @@ -3719,19 +3848,19 @@ declare module '@polkadot/types/lookup' { readonly deposit: KiltSupportDeposit; } - /** @name DelegationDelegationHierarchyDelegationDetails (411) */ + /** @name DelegationDelegationHierarchyDelegationDetails (422) */ interface DelegationDelegationHierarchyDelegationDetails extends Struct { readonly owner: AccountId32; readonly revoked: bool; readonly permissions: DelegationDelegationHierarchyPermissions; } - /** @name DelegationDelegationHierarchyDelegationHierarchyDetails (412) */ + /** @name DelegationDelegationHierarchyDelegationHierarchyDetails (423) */ interface DelegationDelegationHierarchyDelegationHierarchyDetails extends Struct { readonly ctypeHash: H256; } - /** @name DelegationError (413) */ + /** @name DelegationError (424) */ interface DelegationError extends Enum { readonly isDelegationAlreadyExists: boolean; readonly isInvalidDelegateSignature: boolean; @@ -3758,7 +3887,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'DelegationAlreadyExists' | 'InvalidDelegateSignature' | 'DelegationNotFound' | 'DelegateNotFound' | 'HierarchyAlreadyExists' | 'HierarchyNotFound' | 'MaxSearchDepthReached' | 'NotOwnerOfParentDelegation' | 'NotOwnerOfDelegationHierarchy' | 'ParentDelegationNotFound' | 'ParentDelegationRevoked' | 'UnauthorizedRevocation' | 'UnauthorizedRemoval' | 'UnauthorizedDelegation' | 'AccessDenied' | 'ExceededRevocationBounds' | 'ExceededRemovalBounds' | 'MaxRevocationsTooLarge' | 'MaxRemovalsTooLarge' | 'MaxParentChecksTooLarge' | 'Internal' | 'MaxChildrenExceeded'; } - /** @name DidDidDetails (414) */ + /** @name DidDidDetails (425) */ interface DidDidDetails extends Struct { readonly authenticationKey: H256; readonly keyAgreementKeys: BTreeSet; @@ -3769,13 +3898,13 @@ declare module '@polkadot/types/lookup' { readonly deposit: KiltSupportDeposit; } - /** @name DidDidDetailsDidPublicKeyDetails (417) */ + /** @name DidDidDetailsDidPublicKeyDetails (428) */ interface DidDidDetailsDidPublicKeyDetails extends Struct { readonly key: DidDidDetailsDidPublicKey; readonly blockNumber: u64; } - /** @name DidDidDetailsDidPublicKey (418) */ + /** @name DidDidDetailsDidPublicKey (429) */ interface DidDidDetailsDidPublicKey extends Enum { readonly isPublicVerificationKey: boolean; readonly asPublicVerificationKey: DidDidDetailsDidVerificationKey; @@ -3784,7 +3913,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'PublicVerificationKey' | 'PublicEncryptionKey'; } - /** @name DidError (423) */ + /** @name DidError (434) */ interface DidError extends Enum { readonly isInvalidSignatureFormat: boolean; readonly isInvalidSignature: boolean; @@ -3816,31 +3945,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidSignatureFormat' | 'InvalidSignature' | 'AlreadyExists' | 'NotFound' | 'VerificationKeyNotFound' | 'InvalidNonce' | 'UnsupportedDidAuthorizationCall' | 'InvalidDidAuthorizationCall' | 'MaxNewKeyAgreementKeysLimitExceeded' | 'MaxPublicKeysExceeded' | 'MaxKeyAgreementKeysExceeded' | 'BadDidOrigin' | 'TransactionExpired' | 'AlreadyDeleted' | 'NotOwnerOfDeposit' | 'UnableToPayFees' | 'MaxNumberOfServicesExceeded' | 'MaxServiceIdLengthExceeded' | 'MaxServiceTypeLengthExceeded' | 'MaxNumberOfTypesPerServiceExceeded' | 'MaxServiceUrlLengthExceeded' | 'MaxNumberOfUrlsPerServiceExceeded' | 'ServiceAlreadyExists' | 'ServiceNotFound' | 'InvalidServiceEncoding' | 'MaxStoredEndpointsCountExceeded' | 'Internal'; } - /** @name PalletDidLookupConnectionRecord (424) */ + /** @name PalletDidLookupConnectionRecord (435) */ interface PalletDidLookupConnectionRecord extends Struct { readonly did: AccountId32; readonly deposit: KiltSupportDeposit; } - /** @name PalletDidLookupMigrationState (426) */ - interface PalletDidLookupMigrationState extends Enum { - readonly isDone: boolean; - readonly isPreUpgrade: boolean; - readonly isUpgrading: boolean; - readonly asUpgrading: PalletDidLookupMigrationsMixedStorageKey; - readonly type: 'Done' | 'PreUpgrade' | 'Upgrading'; - } - - /** @name PalletDidLookupMigrationsMixedStorageKey (427) */ - interface PalletDidLookupMigrationsMixedStorageKey extends Enum { - readonly isV1: boolean; - readonly asV1: AccountId32; - readonly isV2: boolean; - readonly asV2: PalletDidLookupLinkableAccountLinkableAccountId; - readonly type: 'V1' | 'V2'; - } - - /** @name PalletDidLookupError (428) */ + /** @name PalletDidLookupError (437) */ interface PalletDidLookupError extends Enum { readonly isNotFound: boolean; readonly isNotAuthorized: boolean; @@ -3850,14 +3961,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotFound' | 'NotAuthorized' | 'OutdatedProof' | 'InsufficientFunds' | 'Migration'; } - /** @name PalletWeb3NamesWeb3NameWeb3NameOwnership (429) */ + /** @name PalletWeb3NamesWeb3NameWeb3NameOwnership (438) */ interface PalletWeb3NamesWeb3NameWeb3NameOwnership extends Struct { readonly owner: AccountId32; readonly claimedAt: u64; readonly deposit: KiltSupportDeposit; } - /** @name PalletWeb3NamesError (430) */ + /** @name PalletWeb3NamesError (439) */ interface PalletWeb3NamesError extends Enum { readonly isInsufficientFunds: boolean; readonly isAlreadyExists: boolean; @@ -3874,7 +3985,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InsufficientFunds' | 'AlreadyExists' | 'NotFound' | 'OwnerAlreadyExists' | 'OwnerNotFound' | 'Banned' | 'NotBanned' | 'AlreadyBanned' | 'NotAuthorized' | 'TooShort' | 'TooLong' | 'InvalidCharacter'; } - /** @name PublicCredentialsCredentialsCredentialEntry (432) */ + /** @name PublicCredentialsCredentialsCredentialEntry (441) */ interface PublicCredentialsCredentialsCredentialEntry extends Struct { readonly ctypeHash: H256; readonly attester: AccountId32; @@ -3884,7 +3995,7 @@ declare module '@polkadot/types/lookup' { readonly authorizationId: Option; } - /** @name PublicCredentialsError (433) */ + /** @name PublicCredentialsError (442) */ interface PublicCredentialsError extends Enum { readonly isAlreadyAttested: boolean; readonly isNotFound: boolean; @@ -3895,13 +4006,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'AlreadyAttested' | 'NotFound' | 'UnableToPayFees' | 'InvalidInput' | 'NotAuthorized' | 'Internal'; } - /** @name PolkadotPrimitivesV2UpgradeRestriction (435) */ + /** @name PolkadotPrimitivesV2UpgradeRestriction (444) */ interface PolkadotPrimitivesV2UpgradeRestriction extends Enum { readonly isPresent: boolean; readonly type: 'Present'; } - /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (436) */ + /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (445) */ interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct { readonly dmqMqcHead: H256; readonly relayDispatchQueueSize: ITuple<[u32, u32]>; @@ -3909,7 +4020,7 @@ declare module '@polkadot/types/lookup' { readonly egressChannels: Vec>; } - /** @name PolkadotPrimitivesV2AbridgedHrmpChannel (440) */ + /** @name PolkadotPrimitivesV2AbridgedHrmpChannel (449) */ interface PolkadotPrimitivesV2AbridgedHrmpChannel extends Struct { readonly maxCapacity: u32; readonly maxTotalSize: u32; @@ -3919,7 +4030,7 @@ declare module '@polkadot/types/lookup' { readonly mqcHead: Option; } - /** @name PolkadotPrimitivesV2AbridgedHostConfiguration (441) */ + /** @name PolkadotPrimitivesV2AbridgedHostConfiguration (450) */ interface PolkadotPrimitivesV2AbridgedHostConfiguration extends Struct { readonly maxCodeSize: u32; readonly maxHeadDataSize: u32; @@ -3932,13 +4043,19 @@ declare module '@polkadot/types/lookup' { readonly validationUpgradeDelay: u32; } - /** @name PolkadotCorePrimitivesOutboundHrmpMessage (447) */ + /** @name PolkadotCorePrimitivesOutboundHrmpMessage (456) */ interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct { readonly recipient: u32; readonly data: Bytes; } - /** @name CumulusPalletParachainSystemError (448) */ + /** @name CumulusPalletParachainSystemCodeUpgradeAuthorization (457) */ + interface CumulusPalletParachainSystemCodeUpgradeAuthorization extends Struct { + readonly codeHash: H256; + readonly checkVersion: bool; + } + + /** @name CumulusPalletParachainSystemError (458) */ interface CumulusPalletParachainSystemError extends Enum { readonly isOverlappingUpgrades: boolean; readonly isProhibitedByPolkadot: boolean; @@ -3951,21 +4068,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'OverlappingUpgrades' | 'ProhibitedByPolkadot' | 'TooBig' | 'ValidationDataNotAvailable' | 'HostConfigurationNotAvailable' | 'NotScheduled' | 'NothingAuthorized' | 'Unauthorized'; } - /** @name CumulusPalletXcmpQueueInboundChannelDetails (450) */ + /** @name CumulusPalletXcmpQueueInboundChannelDetails (460) */ interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct { readonly sender: u32; readonly state: CumulusPalletXcmpQueueInboundState; readonly messageMetadata: Vec>; } - /** @name CumulusPalletXcmpQueueInboundState (451) */ + /** @name CumulusPalletXcmpQueueInboundState (461) */ interface CumulusPalletXcmpQueueInboundState extends Enum { readonly isOk: boolean; readonly isSuspended: boolean; readonly type: 'Ok' | 'Suspended'; } - /** @name PolkadotParachainPrimitivesXcmpMessageFormat (454) */ + /** @name PolkadotParachainPrimitivesXcmpMessageFormat (464) */ interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum { readonly isConcatenatedVersionedXcm: boolean; readonly isConcatenatedEncodedBlob: boolean; @@ -3973,7 +4090,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals'; } - /** @name CumulusPalletXcmpQueueOutboundChannelDetails (457) */ + /** @name CumulusPalletXcmpQueueOutboundChannelDetails (467) */ interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct { readonly recipient: u32; readonly state: CumulusPalletXcmpQueueOutboundState; @@ -3982,14 +4099,14 @@ declare module '@polkadot/types/lookup' { readonly lastIndex: u16; } - /** @name CumulusPalletXcmpQueueOutboundState (458) */ + /** @name CumulusPalletXcmpQueueOutboundState (468) */ interface CumulusPalletXcmpQueueOutboundState extends Enum { readonly isOk: boolean; readonly isSuspended: boolean; readonly type: 'Ok' | 'Suspended'; } - /** @name CumulusPalletXcmpQueueQueueConfigData (460) */ + /** @name CumulusPalletXcmpQueueQueueConfigData (470) */ interface CumulusPalletXcmpQueueQueueConfigData extends Struct { readonly suspendThreshold: u32; readonly dropThreshold: u32; @@ -3999,7 +4116,7 @@ declare module '@polkadot/types/lookup' { readonly xcmpMaxIndividualWeight: SpWeightsWeightV2Weight; } - /** @name CumulusPalletXcmpQueueError (462) */ + /** @name CumulusPalletXcmpQueueError (472) */ interface CumulusPalletXcmpQueueError extends Enum { readonly isFailedToSend: boolean; readonly isBadXcmOrigin: boolean; @@ -4009,7 +4126,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit'; } - /** @name PalletXcmError (463) */ + /** @name PalletXcmError (473) */ interface PalletXcmError extends Enum { readonly isUnreachable: boolean; readonly isSendFailure: boolean; @@ -4034,47 +4151,47 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed' | 'InvalidAsset' | 'LowBalance' | 'TooManyLocks' | 'AccountNotSovereign' | 'FeesNotMet' | 'LockNotFound' | 'InUse'; } - /** @name CumulusPalletXcmError (464) */ + /** @name CumulusPalletXcmError (474) */ type CumulusPalletXcmError = Null; - /** @name CumulusPalletDmpQueueConfigData (465) */ + /** @name CumulusPalletDmpQueueConfigData (475) */ interface CumulusPalletDmpQueueConfigData extends Struct { readonly maxIndividual: SpWeightsWeightV2Weight; } - /** @name CumulusPalletDmpQueuePageIndexData (466) */ + /** @name CumulusPalletDmpQueuePageIndexData (476) */ interface CumulusPalletDmpQueuePageIndexData extends Struct { readonly beginUsed: u32; readonly endUsed: u32; readonly overweightCount: u64; } - /** @name CumulusPalletDmpQueueError (469) */ + /** @name CumulusPalletDmpQueueError (479) */ interface CumulusPalletDmpQueueError extends Enum { readonly isUnknown: boolean; readonly isOverLimit: boolean; readonly type: 'Unknown' | 'OverLimit'; } - /** @name FrameSystemExtensionsCheckNonZeroSender (472) */ + /** @name FrameSystemExtensionsCheckNonZeroSender (482) */ type FrameSystemExtensionsCheckNonZeroSender = Null; - /** @name FrameSystemExtensionsCheckSpecVersion (473) */ + /** @name FrameSystemExtensionsCheckSpecVersion (483) */ type FrameSystemExtensionsCheckSpecVersion = Null; - /** @name FrameSystemExtensionsCheckTxVersion (474) */ + /** @name FrameSystemExtensionsCheckTxVersion (484) */ type FrameSystemExtensionsCheckTxVersion = Null; - /** @name FrameSystemExtensionsCheckGenesis (475) */ + /** @name FrameSystemExtensionsCheckGenesis (485) */ type FrameSystemExtensionsCheckGenesis = Null; - /** @name FrameSystemExtensionsCheckNonce (478) */ + /** @name FrameSystemExtensionsCheckNonce (488) */ interface FrameSystemExtensionsCheckNonce extends Compact {} - /** @name FrameSystemExtensionsCheckWeight (479) */ + /** @name FrameSystemExtensionsCheckWeight (489) */ type FrameSystemExtensionsCheckWeight = Null; - /** @name PalletTransactionPaymentChargeTransactionPayment (480) */ + /** @name PalletTransactionPaymentChargeTransactionPayment (490) */ interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} } // declare module diff --git a/packages/core/src/__integrationtests__/Did.spec.ts b/packages/core/src/__integrationtests__/Did.spec.ts index b86915244..93e4d96b2 100644 --- a/packages/core/src/__integrationtests__/Did.spec.ts +++ b/packages/core/src/__integrationtests__/Did.spec.ts @@ -54,11 +54,6 @@ beforeAll(async () => { paymentAccount = await createEndowedTestAccount() }, 30_000) -it('fetches the correct deposit amount', async () => { - const depositAmount = api.consts.did.deposit.toBn() - expect(depositAmount.toString()).toMatchInlineSnapshot('"2007900000000000"') -}) - describe('write and didDeleteTx', () => { let did: DidDocument let key: KeyTool @@ -1267,7 +1262,7 @@ describe('Runtime constraints', () => { }) it('should not be possible to create a DID with a service endpoint that has too many URIs', async () => { - const uris = ['x:url-1', 'x:url-2'] + const uris = ['x:url-1', 'x:url-2', 'x:url-3'] const limit = api.consts.did.maxNumberOfUrlsPerService.toNumber() expect(uris.length).toBeGreaterThan(limit) }) From 23fd3d5b144d58679bb856cf8a777a3c5c088a27 Mon Sep 17 00:00:00 2001 From: Github Action Date: Thu, 8 Jun 2023 13:48:39 +0000 Subject: [PATCH 048/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index fc95e74e0..d9200da14 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.33.1-0", + "version": "0.33.1-1", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index c6f00629f..59e7e34c8 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.33.1-0", + "version": "0.33.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index fc6ab6559..d5009e2b4 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.33.1-0", + "version": "0.33.1-1", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index bc1027fe6..5881f37f3 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.33.1-0", + "version": "0.33.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index fa3b70f24..3efca40dd 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.33.1-0", + "version": "0.33.1-1", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index d67786e3b..ef514d441 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.33.1-0", + "version": "0.33.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index c0b835688..0b7fef64b 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.33.1-0", + "version": "0.33.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 3321da4a1..484909eac 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.33.1-0", + "version": "0.33.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 8ab62abd5..41032d319 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.33.1-0", + "version": "0.33.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index dfbded56c..a61b6c6d5 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.33.1-0", + "version": "0.33.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 0f4618305..cf4c55153 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.33.1-0", + "version": "0.33.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index ff3e9c28e..a925f604c 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.33.1-0", + "version": "0.33.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 322351547..4236776f2 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.33.1-0", + "version": "0.33.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 0a8ed2a9a..ea51ea047 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.33.1-0", + "version": "0.33.1-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 7f33e14a9ffa8908a32664aca06cd5485f6e18fb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 8 Jun 2023 18:21:16 +0200 Subject: [PATCH 049/130] chore(deps): update dependency cbor-web to v9 (#756) * chore(deps): update dependency cbor-web to v9 * refactor: cbor-web now has typescript types Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Raphael Flechtner --- packages/core/package.json | 2 +- packages/core/src/cbor-web.d.ts | 1 - packages/did/package.json | 2 +- packages/did/src/cbor-web.d.ts | 1 - tests/cbor-web.d.ts | 1 - tests/tsconfig.json | 2 +- yarn.lock | 12 ++++++------ 7 files changed, 9 insertions(+), 12 deletions(-) delete mode 100644 packages/core/src/cbor-web.d.ts delete mode 100644 packages/did/src/cbor-web.d.ts delete mode 100644 tests/cbor-web.d.ts diff --git a/packages/core/package.json b/packages/core/package.json index ef514d441..4b539b0ca 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -50,6 +50,6 @@ "@polkadot/types": "^10.4.0", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0", - "cbor-web": "^8.0.0" + "cbor-web": "^9.0.0" } } diff --git a/packages/core/src/cbor-web.d.ts b/packages/core/src/cbor-web.d.ts deleted file mode 100644 index 4def7650e..000000000 --- a/packages/core/src/cbor-web.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module 'cbor-web' diff --git a/packages/did/package.json b/packages/did/package.json index 0b7fef64b..fb2976822 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -46,6 +46,6 @@ "@polkadot/types-codec": "^10.4.0", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0", - "cbor-web": "^8.0.0" + "cbor-web": "^9.0.0" } } diff --git a/packages/did/src/cbor-web.d.ts b/packages/did/src/cbor-web.d.ts deleted file mode 100644 index 4def7650e..000000000 --- a/packages/did/src/cbor-web.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module 'cbor-web' diff --git a/tests/cbor-web.d.ts b/tests/cbor-web.d.ts deleted file mode 100644 index 4def7650e..000000000 --- a/tests/cbor-web.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module 'cbor-web' diff --git a/tests/tsconfig.json b/tests/tsconfig.json index 073b69d65..ba717355b 100644 --- a/tests/tsconfig.json +++ b/tests/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "../tsconfig.json", - "include": ["bundle-test.ts", "types.d.ts", "cbor-web.d.ts"], + "include": ["bundle-test.ts", "types.d.ts"], "compilerOptions": { "module": "None", "resolveJsonModule": false, diff --git a/yarn.lock b/yarn.lock index 7b6fccb28..1cdadad8c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1953,7 +1953,7 @@ __metadata: "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 "@types/uuid": ^8.0.0 - cbor-web: ^8.0.0 + cbor-web: ^9.0.0 rimraf: ^3.0.2 testcontainers: ^9.0.0 typescript: ^4.8.3 @@ -1976,7 +1976,7 @@ __metadata: "@polkadot/types-codec": ^10.4.0 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 - cbor-web: ^8.0.0 + cbor-web: ^9.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 languageName: unknown @@ -4151,10 +4151,10 @@ __metadata: languageName: node linkType: hard -"cbor-web@npm:^8.0.0": - version: 8.1.0 - resolution: "cbor-web@npm:8.1.0" - checksum: 7898694ae4959a306f6e7dd2d042be8dab060a312d78dc8a2131d8ca641d5bcbcfe7e0691f1b6f0f95e5402b14ebf0ad797be14546712ab4682720b459c4836c +"cbor-web@npm:^9.0.0": + version: 9.0.0 + resolution: "cbor-web@npm:9.0.0" + checksum: 814b960a856e25736018bc79b6e4ace2c4c520098d007ed4769f780cc4355c171814e36a364730bee33a21d4c6e0b755f8949a6cb81597c3e92b1a80be609a43 languageName: node linkType: hard From 87217ae230c0a5d8f45027f538849201808d83ec Mon Sep 17 00:00:00 2001 From: Github Action Date: Thu, 8 Jun 2023 16:27:34 +0000 Subject: [PATCH 050/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index d9200da14..da6dc363d 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.33.1-1", + "version": "0.33.1-2", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 59e7e34c8..4e15e3c78 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.33.1-1", + "version": "0.33.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index d5009e2b4..d0ab77c91 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.33.1-1", + "version": "0.33.1-2", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 5881f37f3..3b0a99008 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.33.1-1", + "version": "0.33.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 3efca40dd..d20a2867c 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.33.1-1", + "version": "0.33.1-2", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 4b539b0ca..ee6740cd3 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.33.1-1", + "version": "0.33.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index fb2976822..039f77a90 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.33.1-1", + "version": "0.33.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 484909eac..15adb0ccc 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.33.1-1", + "version": "0.33.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 41032d319..d5bfd90df 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.33.1-1", + "version": "0.33.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index a61b6c6d5..0ba9b57a1 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.33.1-1", + "version": "0.33.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index cf4c55153..16c9fb743 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.33.1-1", + "version": "0.33.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index a925f604c..c9697d09c 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.33.1-1", + "version": "0.33.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 4236776f2..5c6892664 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.33.1-1", + "version": "0.33.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index ea51ea047..6c975a322 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.33.1-1", + "version": "0.33.1-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 2f5189b656ecfc227c1480b38d397118e2f56531 Mon Sep 17 00:00:00 2001 From: Tom Adler Date: Mon, 12 Jun 2023 12:01:02 +0200 Subject: [PATCH 051/130] feat: vite SSR cbor-web workaround (#767) --- .../core/src/publicCredential/PublicCredential.chain.ts | 6 +++--- packages/did/src/DidDetails/LightDidDetails.ts | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core/src/publicCredential/PublicCredential.chain.ts b/packages/core/src/publicCredential/PublicCredential.chain.ts index 6ef1bb3e0..4d635b596 100644 --- a/packages/core/src/publicCredential/PublicCredential.chain.ts +++ b/packages/core/src/publicCredential/PublicCredential.chain.ts @@ -22,7 +22,7 @@ import type { PublicCredentialsCredentialsCredentialEntry, } from '@kiltprotocol/augment-api' -import { encode as cborEncode, decode as cborDecode } from 'cbor-web' +import * as cbor from 'cbor-web' import { HexString } from '@polkadot/util/types' import { ConfigService } from '@kiltprotocol/config' @@ -51,7 +51,7 @@ export function toChain( ): EncodedPublicCredential { const { cTypeHash, claims, subject, delegationId } = publicCredential - const cborSerializedClaims = cborEncode(claims) + const cborSerializedClaims = cbor.encode(claims) return { ctypeHash: cTypeHash, @@ -72,7 +72,7 @@ function credentialInputFromChain({ const credentialSubject = subject.toUtf8() validateUri(credentialSubject) return { - claims: cborDecode(claims), + claims: cbor.decode(claims), cTypeHash: ctypeHash.toHex(), delegationId: authorization.unwrapOr(undefined)?.toHex() ?? null, subject: credentialSubject as AssetDidUri, diff --git a/packages/did/src/DidDetails/LightDidDetails.ts b/packages/did/src/DidDetails/LightDidDetails.ts index 6adcbc177..71a32f4bb 100644 --- a/packages/did/src/DidDetails/LightDidDetails.ts +++ b/packages/did/src/DidDetails/LightDidDetails.ts @@ -5,7 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { decode as cborDecode, encode as cborEncode } from 'cbor-web' +import * as cbor from 'cbor-web' import { base58Decode, base58Encode, @@ -147,7 +147,7 @@ function serializeAdditionalLightDidDetails({ } const serializationVersion = 0x0 - const serialized = cborEncode(objectToSerialize) + const serialized = cbor.encode(objectToSerialize) return base58Encode([serializationVersion, ...serialized], true) } @@ -166,7 +166,7 @@ function deserializeAdditionalLightDidDetails( if (serializationVersion !== 0x0) { throw new SDKErrors.DidError('Serialization algorithm not supported') } - const deserialized: SerializableStructure = cborDecode(serialized) + const deserialized: SerializableStructure = cbor.decode(serialized) const keyAgreement = deserialized[KEY_AGREEMENT_MAP_KEY] return { From 931a14efe3695a5590240481a55441e85f677474 Mon Sep 17 00:00:00 2001 From: Github Action Date: Mon, 12 Jun 2023 10:05:05 +0000 Subject: [PATCH 052/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index da6dc363d..1cc2f0bb8 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.33.1-2", + "version": "0.33.1-3", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 4e15e3c78..5c0d89291 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.33.1-2", + "version": "0.33.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index d0ab77c91..51ea95499 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.33.1-2", + "version": "0.33.1-3", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 3b0a99008..c23521ff4 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.33.1-2", + "version": "0.33.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index d20a2867c..78abff26c 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.33.1-2", + "version": "0.33.1-3", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index ee6740cd3..f44836367 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.33.1-2", + "version": "0.33.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index 039f77a90..92486cdbe 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.33.1-2", + "version": "0.33.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 15adb0ccc..73c769475 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.33.1-2", + "version": "0.33.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index d5bfd90df..ae533cc30 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.33.1-2", + "version": "0.33.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 0ba9b57a1..79fb6d9ed 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.33.1-2", + "version": "0.33.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 16c9fb743..f808ce6da 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.33.1-2", + "version": "0.33.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index c9697d09c..e621c314b 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.33.1-2", + "version": "0.33.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 5c6892664..813d11c31 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.33.1-2", + "version": "0.33.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 6c975a322..60da6742e 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.33.1-2", + "version": "0.33.1-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 909b7711c63269d2ddf511a4241e39e87eaed07c Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Mon, 12 Jun 2023 16:26:43 +0200 Subject: [PATCH 053/130] ci: fix test polkadot deps wf (#768) --- .github/workflows/tests-polkadot-deps.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests-polkadot-deps.yml b/.github/workflows/tests-polkadot-deps.yml index ced20feba..837030d49 100644 --- a/.github/workflows/tests-polkadot-deps.yml +++ b/.github/workflows/tests-polkadot-deps.yml @@ -93,7 +93,7 @@ jobs: steps: - uses: actions/download-artifact@v3 with: - name: build-14.x + name: build-16.x - name: unzip run: unzip build.zip -d . @@ -133,7 +133,7 @@ jobs: steps: - uses: actions/download-artifact@v3 with: - name: deps-14.x + name: deps-16.x - name: set dependencies env run: | echo 'DEPS<> $GITHUB_ENV From fbeed978d260df988ca5b183d6b1ddf3d016cb1f Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Tue, 13 Jun 2023 11:43:50 +0200 Subject: [PATCH 054/130] feat: re-export imported types from @kiltprotocol/types (#762) * feat: re-export imported types from @kiltprotocol/types * refactor: use re-exported types throughout sdk --- .../PublicCredentials.spec.ts | 2 +- packages/core/src/claim/Claim.ts | 9 +++++++-- .../publicCredential/PublicCredential.chain.ts | 2 +- .../src/publicCredential/PublicCredential.ts | 2 +- packages/did/src/Did.chain.ts | 2 +- packages/did/src/Did.rpc.ts | 3 ++- packages/did/src/DidLinks/AccountLinks.chain.ts | 9 ++++++--- packages/testing/src/metadata/spiritnet.ts | 2 +- packages/testing/src/mocks/typeRegistry.ts | 4 ++-- packages/types/src/Address.ts | 5 ++--- packages/types/src/Balance.ts | 3 +-- packages/types/src/CType.ts | 2 +- packages/types/src/Credential.ts | 2 +- packages/types/src/Deposit.ts | 2 +- packages/types/src/DidDocument.ts | 3 +-- packages/types/src/Imported.ts | 17 +++++++++++++++++ packages/types/src/Message.ts | 3 +-- packages/types/src/PublicCredential.ts | 4 +--- packages/types/src/index.ts | 5 +---- packages/utils/src/Crypto.ts | 4 ++-- 20 files changed, 51 insertions(+), 34 deletions(-) create mode 100644 packages/types/src/Imported.ts diff --git a/packages/core/src/__integrationtests__/PublicCredentials.spec.ts b/packages/core/src/__integrationtests__/PublicCredentials.spec.ts index 0b4f221a5..dfa42f056 100644 --- a/packages/core/src/__integrationtests__/PublicCredentials.spec.ts +++ b/packages/core/src/__integrationtests__/PublicCredentials.spec.ts @@ -10,13 +10,13 @@ */ import type { ApiPromise } from '@polkadot/api' -import type { HexString } from '@polkadot/util/types' import type { AssetDidUri, DidDocument, IPublicCredential, IPublicCredentialInput, KiltKeyringPair, + HexString, } from '@kiltprotocol/types' import { BN } from '@polkadot/util' diff --git a/packages/core/src/claim/Claim.ts b/packages/core/src/claim/Claim.ts index 58285a236..17aa1da54 100644 --- a/packages/core/src/claim/Claim.ts +++ b/packages/core/src/claim/Claim.ts @@ -18,8 +18,13 @@ */ import { hexToBn } from '@polkadot/util' -import type { HexString } from '@polkadot/util/types' -import type { DidUri, IClaim, ICType, PartialClaim } from '@kiltprotocol/types' +import type { + DidUri, + IClaim, + ICType, + PartialClaim, + HexString, +} from '@kiltprotocol/types' import { Crypto, DataUtils, SDKErrors } from '@kiltprotocol/utils' import * as Did from '@kiltprotocol/did' import * as CType from '../ctype/index.js' diff --git a/packages/core/src/publicCredential/PublicCredential.chain.ts b/packages/core/src/publicCredential/PublicCredential.chain.ts index 4d635b596..046f3de73 100644 --- a/packages/core/src/publicCredential/PublicCredential.chain.ts +++ b/packages/core/src/publicCredential/PublicCredential.chain.ts @@ -12,6 +12,7 @@ import type { IPublicCredentialInput, IPublicCredential, DidUri, + HexString, } from '@kiltprotocol/types' import type { ApiPromise } from '@polkadot/api' import type { GenericCall, Option } from '@polkadot/types' @@ -24,7 +25,6 @@ import type { import * as cbor from 'cbor-web' -import { HexString } from '@polkadot/util/types' import { ConfigService } from '@kiltprotocol/config' import { fromChain as didFromChain } from '@kiltprotocol/did' import { validateUri } from '@kiltprotocol/asset-did' diff --git a/packages/core/src/publicCredential/PublicCredential.ts b/packages/core/src/publicCredential/PublicCredential.ts index f28a865db..51e39482c 100644 --- a/packages/core/src/publicCredential/PublicCredential.ts +++ b/packages/core/src/publicCredential/PublicCredential.ts @@ -5,10 +5,10 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { HexString } from '@polkadot/util/types' import type { AccountId } from '@polkadot/types/interfaces' import type { PublicCredentialsCredentialsCredential } from '@kiltprotocol/augment-api' import type { + HexString, DidUri, IAssetClaim, ICType, diff --git a/packages/did/src/Did.chain.ts b/packages/did/src/Did.chain.ts index 3880c141f..09daf45e4 100644 --- a/packages/did/src/Did.chain.ts +++ b/packages/did/src/Did.chain.ts @@ -8,7 +8,6 @@ import type { Option } from '@polkadot/types' import type { AccountId32, Extrinsic, Hash } from '@polkadot/types/interfaces' import type { AnyNumber } from '@polkadot/types/types' -import { BN } from '@polkadot/util' import type { Deposit, @@ -27,6 +26,7 @@ import type { SubmittableExtrinsic, UriFragment, VerificationKeyRelationship, + BN, } from '@kiltprotocol/types' import { verificationKeyTypes } from '@kiltprotocol/types' import { Crypto, SDKErrors, ss58Format } from '@kiltprotocol/utils' diff --git a/packages/did/src/Did.rpc.ts b/packages/did/src/Did.rpc.ts index 4812a0cac..da77219d6 100644 --- a/packages/did/src/Did.rpc.ts +++ b/packages/did/src/Did.rpc.ts @@ -26,11 +26,12 @@ import type { DidVerificationKey, KiltAddress, UriFragment, + BN, } from '@kiltprotocol/types' import { encodeAddress } from '@polkadot/keyring' import { ethereumEncode } from '@polkadot/util-crypto' -import { BN, u8aToString } from '@polkadot/util' +import { u8aToString } from '@polkadot/util' import { Crypto, ss58Format } from '@kiltprotocol/utils' import { Address, SubstrateAddress } from './DidLinks/AccountLinks.chain.js' diff --git a/packages/did/src/DidLinks/AccountLinks.chain.ts b/packages/did/src/DidLinks/AccountLinks.chain.ts index ae62cbc60..882568d3b 100644 --- a/packages/did/src/DidLinks/AccountLinks.chain.ts +++ b/packages/did/src/DidLinks/AccountLinks.chain.ts @@ -7,8 +7,6 @@ import { decodeAddress, signatureVerify } from '@polkadot/util-crypto' import type { TypeDef } from '@polkadot/types/types' -import type { HexString } from '@polkadot/util/types' -import type { KeyringPair } from '@polkadot/keyring/types' import type { KeypairType } from '@polkadot/util-crypto/types' import { stringToU8a, @@ -21,8 +19,13 @@ import { import { ApiPromise } from '@polkadot/api' import { SDKErrors } from '@kiltprotocol/utils' -import type { DidUri, KiltAddress } from '@kiltprotocol/types' import { ConfigService } from '@kiltprotocol/config' +import type { + DidUri, + HexString, + KeyringPair, + KiltAddress, +} from '@kiltprotocol/types' import { EncodedSignature } from '../Did.utils.js' import { toChain } from '../Did.chain.js' diff --git a/packages/testing/src/metadata/spiritnet.ts b/packages/testing/src/metadata/spiritnet.ts index 341f1d6ea..1a319ed1d 100644 --- a/packages/testing/src/metadata/spiritnet.ts +++ b/packages/testing/src/metadata/spiritnet.ts @@ -7,7 +7,7 @@ import { readFileSync } from 'fs' import path from 'path' -import type { HexString } from '@polkadot/util/types' +import type { HexString } from '@kiltprotocol/types' const META_PATH = '../../../../augment-api/metadata/spiritnet.json' const { result: metaHex } = JSON.parse( diff --git a/packages/testing/src/mocks/typeRegistry.ts b/packages/testing/src/mocks/typeRegistry.ts index 457bc8773..a2aa7f1ae 100644 --- a/packages/testing/src/mocks/typeRegistry.ts +++ b/packages/testing/src/mocks/typeRegistry.ts @@ -8,12 +8,12 @@ // This module is not part of the public-facing api. /* eslint-disable jsdoc/require-jsdoc */ -import type { HexString } from '@polkadot/util/types' - import { ApiPromise, WsProvider } from '@polkadot/api' import { Metadata, TypeRegistry } from '@polkadot/types' import { types } from '@kiltprotocol/type-definitions' +import type { HexString } from '@kiltprotocol/types' + import metaStatic from '../metadata/spiritnet.js' // adapted from https://github.com/polkadot-js/apps/blob/master/packages/test-support/src/api/createAugmentedApi.ts diff --git a/packages/types/src/Address.ts b/packages/types/src/Address.ts index 57f1e320c..9ee9edfd5 100644 --- a/packages/types/src/Address.ts +++ b/packages/types/src/Address.ts @@ -5,10 +5,9 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { Prefix } from '@polkadot/util-crypto/address/types' -import type { HexString } from '@polkadot/util/types' import '@polkadot/keyring' // TS needs this for the augmentation below -import type { KeyringPair } from './index.js' + +import type { HexString, KeyringPair, Prefix } from './Imported' export interface KiltEncryptionKeypair { secretKey: Uint8Array diff --git a/packages/types/src/Balance.ts b/packages/types/src/Balance.ts index 6ea4ddcf8..a8381b130 100644 --- a/packages/types/src/Balance.ts +++ b/packages/types/src/Balance.ts @@ -5,8 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { AnyNumber } from '@polkadot/types/types/codec' -import type { BN } from '@polkadot/util' +import type { AnyNumber, BN } from './Imported' export type Balances = { free: BN diff --git a/packages/types/src/CType.ts b/packages/types/src/CType.ts index c0737de15..7ab4452f1 100644 --- a/packages/types/src/CType.ts +++ b/packages/types/src/CType.ts @@ -5,7 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { HexString } from '@polkadot/util/types' +import type { HexString } from './Imported' export type InstanceType = 'boolean' | 'integer' | 'number' | 'string' | 'array' diff --git a/packages/types/src/Credential.ts b/packages/types/src/Credential.ts index e0f7e657c..ec2c0d467 100644 --- a/packages/types/src/Credential.ts +++ b/packages/types/src/Credential.ts @@ -5,10 +5,10 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { HexString } from '@polkadot/util/types' import type { DidSignature } from './DidDocument' import type { IClaim } from './Claim' import type { IDelegationNode } from './Delegation' +import type { HexString } from './Imported' export type Hash = HexString diff --git a/packages/types/src/Deposit.ts b/packages/types/src/Deposit.ts index 01a5e6f74..6cc0a583c 100644 --- a/packages/types/src/Deposit.ts +++ b/packages/types/src/Deposit.ts @@ -5,7 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { BN } from '@polkadot/util' +import type { BN } from './Imported' import type { KiltAddress } from './Address' /** diff --git a/packages/types/src/DidDocument.ts b/packages/types/src/DidDocument.ts index 61340a977..9bf9a7502 100644 --- a/packages/types/src/DidDocument.ts +++ b/packages/types/src/DidDocument.ts @@ -5,8 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { BN } from '@polkadot/util' - +import type { BN } from './Imported' import type { KiltAddress } from './Address' type AuthenticationKeyType = '00' | '01' diff --git a/packages/types/src/Imported.ts b/packages/types/src/Imported.ts new file mode 100644 index 000000000..f83228443 --- /dev/null +++ b/packages/types/src/Imported.ts @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +export type { + ISubmittableResult, + AnyNumber, + AnyJson, +} from '@polkadot/types/types' +export type { BN } from '@polkadot/util' +export type { HexString } from '@polkadot/util/types' +export type { Prefix } from '@polkadot/util-crypto/address/types' +export type { SubmittableExtrinsic } from '@polkadot/api/promise/types' +export type { KeyringPair } from '@polkadot/keyring/types' diff --git a/packages/types/src/Message.ts b/packages/types/src/Message.ts index ba2445d1f..b4264dc76 100644 --- a/packages/types/src/Message.ts +++ b/packages/types/src/Message.ts @@ -5,8 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { AnyJson } from '@polkadot/types/types/codec' - +import type { AnyJson } from './Imported' import type { DidResourceUri, DidSignature, DidUri } from './DidDocument.js' import type { IAttestation } from './Attestation.js' import type { PartialClaim } from './Claim.js' diff --git a/packages/types/src/PublicCredential.ts b/packages/types/src/PublicCredential.ts index 25451038b..0b3ba75db 100644 --- a/packages/types/src/PublicCredential.ts +++ b/packages/types/src/PublicCredential.ts @@ -5,9 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { HexString } from '@polkadot/util/types' -import type { BN } from '@polkadot/util' - +import type { HexString, BN } from './Imported' import type { CTypeHash } from './CType' import type { IDelegationNode } from './Delegation' import type { IClaimContents } from './Claim' diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 81efc6583..16c6bf418 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -9,10 +9,6 @@ * @module @kiltprotocol/types */ -export type { ISubmittableResult } from '@polkadot/types/types' -export type { SubmittableExtrinsic } from '@polkadot/api/promise/types' -export type { KeyringPair } from '@polkadot/keyring/types' - export * as SubscriptionPromise from './SubscriptionPromise.js' export * from './Attestation.js' @@ -33,3 +29,4 @@ export * from './CryptoCallbacks.js' export * from './DidResolver.js' export * from './DidDocumentExporter.js' export * from './PublicCredential.js' +export * from './Imported.js' diff --git a/packages/utils/src/Crypto.ts b/packages/utils/src/Crypto.ts index 111f04997..5e493c438 100644 --- a/packages/utils/src/Crypto.ts +++ b/packages/utils/src/Crypto.ts @@ -15,8 +15,9 @@ import { decodeAddress, encodeAddress } from '@polkadot/keyring' import type { - KiltEncryptionKeypair, + HexString, KeyringPair, + KiltEncryptionKeypair, KiltKeyringPair, } from '@kiltprotocol/types' import { @@ -36,7 +37,6 @@ import { import { Keyring } from '@polkadot/api' import nacl from 'tweetnacl' import { v4 as uuid } from 'uuid' -import type { HexString } from '@polkadot/util/types' import jsonabc from './jsonabc.js' import * as SDKErrors from './SDKErrors.js' import { ss58Format } from './ss58Format.js' From 054d7f20945ee9438813a3bbe92ab62aa98579f0 Mon Sep 17 00:00:00 2001 From: Github Action Date: Tue, 13 Jun 2023 09:48:08 +0000 Subject: [PATCH 055/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 1cc2f0bb8..1892d492b 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.33.1-3", + "version": "0.33.1-4", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 5c0d89291..d4c27680c 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.33.1-3", + "version": "0.33.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 51ea95499..3a9455dd6 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.33.1-3", + "version": "0.33.1-4", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index c23521ff4..f84d1d208 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.33.1-3", + "version": "0.33.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 78abff26c..157a045ba 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.33.1-3", + "version": "0.33.1-4", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index f44836367..50da11507 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.33.1-3", + "version": "0.33.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index 92486cdbe..972478ad3 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.33.1-3", + "version": "0.33.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 73c769475..38542e567 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.33.1-3", + "version": "0.33.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index ae533cc30..fff1fd976 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.33.1-3", + "version": "0.33.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 79fb6d9ed..eed9a4ee1 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.33.1-3", + "version": "0.33.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index f808ce6da..7c9589801 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.33.1-3", + "version": "0.33.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index e621c314b..9eab5697c 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.33.1-3", + "version": "0.33.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 813d11c31..2ee13f8da 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.33.1-3", + "version": "0.33.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 60da6742e..da7d396a3 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.33.1-3", + "version": "0.33.1-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 62c5fded50c6671b47911ad4aa81d71144164292 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Wed, 14 Jun 2023 16:50:05 +0200 Subject: [PATCH 056/130] chore: cherry-pick hotfix release 0.33.1 (#773) --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 5 ++--- .../src/publicCredential/PublicCredential.chain.ts | 4 +--- packages/did/package.json | 5 ++--- packages/did/src/DidDetails/LightDidDetails.ts | 3 +-- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 3 ++- packages/utils/src/cbor.ts | 11 +++++++++++ packages/utils/src/index.ts | 1 + packages/vc-export/package.json | 2 +- yarn.lock | 3 +-- 19 files changed, 32 insertions(+), 25 deletions(-) create mode 100644 packages/utils/src/cbor.ts diff --git a/package.json b/package.json index 1892d492b..36aade0bc 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.33.1-4", + "version": "0.33.1", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index d4c27680c..a93fb108c 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.33.1-4", + "version": "0.33.1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 3a9455dd6..7a43d75cf 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.33.1-4", + "version": "0.33.1", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index f84d1d208..551adcb1f 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.33.1-4", + "version": "0.33.1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 157a045ba..36cf3619d 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.33.1-4", + "version": "0.33.1", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 50da11507..fdb8a976d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.33.1-4", + "version": "0.33.1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", @@ -49,7 +49,6 @@ "@polkadot/keyring": "^12.0.0", "@polkadot/types": "^10.4.0", "@polkadot/util": "^12.0.0", - "@polkadot/util-crypto": "^12.0.0", - "cbor-web": "^9.0.0" + "@polkadot/util-crypto": "^12.0.0" } } diff --git a/packages/core/src/publicCredential/PublicCredential.chain.ts b/packages/core/src/publicCredential/PublicCredential.chain.ts index 046f3de73..3ffa1f196 100644 --- a/packages/core/src/publicCredential/PublicCredential.chain.ts +++ b/packages/core/src/publicCredential/PublicCredential.chain.ts @@ -23,12 +23,10 @@ import type { PublicCredentialsCredentialsCredentialEntry, } from '@kiltprotocol/augment-api' -import * as cbor from 'cbor-web' - import { ConfigService } from '@kiltprotocol/config' import { fromChain as didFromChain } from '@kiltprotocol/did' import { validateUri } from '@kiltprotocol/asset-did' -import { SDKErrors } from '@kiltprotocol/utils' +import { SDKErrors, cbor } from '@kiltprotocol/utils' import { getIdForCredential } from './PublicCredential.js' import { flattenCalls, isBatch, retrieveExtrinsicFromBlock } from '../utils.js' diff --git a/packages/did/package.json b/packages/did/package.json index 972478ad3..b556cbc43 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.33.1-4", + "version": "0.33.1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", @@ -45,7 +45,6 @@ "@polkadot/types": "^10.4.0", "@polkadot/types-codec": "^10.4.0", "@polkadot/util": "^12.0.0", - "@polkadot/util-crypto": "^12.0.0", - "cbor-web": "^9.0.0" + "@polkadot/util-crypto": "^12.0.0" } } diff --git a/packages/did/src/DidDetails/LightDidDetails.ts b/packages/did/src/DidDetails/LightDidDetails.ts index 71a32f4bb..30a752f6b 100644 --- a/packages/did/src/DidDetails/LightDidDetails.ts +++ b/packages/did/src/DidDetails/LightDidDetails.ts @@ -5,7 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -import * as cbor from 'cbor-web' import { base58Decode, base58Encode, @@ -22,7 +21,7 @@ import type { } from '@kiltprotocol/types' import { encryptionKeyTypes } from '@kiltprotocol/types' -import { SDKErrors, ss58Format } from '@kiltprotocol/utils' +import { SDKErrors, ss58Format, cbor } from '@kiltprotocol/utils' import { getAddressByKey, parse } from '../Did.utils.js' import { resourceIdToChain, validateService } from '../Did.chain.js' diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 38542e567..74a297aad 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.33.1-4", + "version": "0.33.1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index fff1fd976..00b833d58 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.33.1-4", + "version": "0.33.1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index eed9a4ee1..e450b37ae 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.33.1-4", + "version": "0.33.1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 7c9589801..6ca78ae0b 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.33.1-4", + "version": "0.33.1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 9eab5697c..d8ac81f4f 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.33.1-4", + "version": "0.33.1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 2ee13f8da..d308a27ac 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.33.1-4", + "version": "0.33.1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", @@ -39,6 +39,7 @@ "@polkadot/keyring": "^12.0.0", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0", + "cbor-web": "^9.0.0", "tweetnacl": "^1.0.3", "uuid": "^9.0.0" } diff --git a/packages/utils/src/cbor.ts b/packages/utils/src/cbor.ts new file mode 100644 index 000000000..b12205bcd --- /dev/null +++ b/packages/utils/src/cbor.ts @@ -0,0 +1,11 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +// special import syntax as this is a pure cjs import +import * as cborImp from 'cbor-web' +// this is horrible but the only way to make this import work in both cjs & esm builds +export const cbor: typeof cborImp = (cborImp as any)?.default ?? cborImp diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index c4ef91110..30cbd3b3e 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -17,4 +17,5 @@ export * as DataUtils from './DataUtils.js' export * as SDKErrors from './SDKErrors.js' export * as JsonSchema from './json-schema/index.js' export { ss58Format } from './ss58Format.js' +export { cbor } from './cbor.js' export { Keyring } from '@polkadot/keyring' diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index da7d396a3..826f56275 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.33.1-4", + "version": "0.33.1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/yarn.lock b/yarn.lock index 1cdadad8c..9ae175277 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1953,7 +1953,6 @@ __metadata: "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 "@types/uuid": ^8.0.0 - cbor-web: ^9.0.0 rimraf: ^3.0.2 testcontainers: ^9.0.0 typescript: ^4.8.3 @@ -1976,7 +1975,6 @@ __metadata: "@polkadot/types-codec": ^10.4.0 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 - cbor-web: ^9.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 languageName: unknown @@ -2071,6 +2069,7 @@ __metadata: "@polkadot/keyring": ^12.0.0 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 + cbor-web: ^9.0.0 rimraf: ^3.0.2 tweetnacl: ^1.0.3 typescript: ^4.8.3 From 6dc0b89f7644d4c76d948fe96396e0c554ec703e Mon Sep 17 00:00:00 2001 From: Github Action Date: Wed, 14 Jun 2023 16:14:03 +0000 Subject: [PATCH 057/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 36aade0bc..f00b8ae68 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.33.1", + "version": "0.33.2-0", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index a93fb108c..c1833c4d2 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.33.1", + "version": "0.33.2-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 7a43d75cf..a775ede2f 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.33.1", + "version": "0.33.2-0", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 551adcb1f..e3c6d233a 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.33.1", + "version": "0.33.2-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 36cf3619d..ab13a1fca 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.33.1", + "version": "0.33.2-0", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index fdb8a976d..1652903fd 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.33.1", + "version": "0.33.2-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index b556cbc43..fccfff91d 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.33.1", + "version": "0.33.2-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 74a297aad..ddaa4f4ac 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.33.1", + "version": "0.33.2-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 00b833d58..324ac724e 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.33.1", + "version": "0.33.2-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index e450b37ae..283498016 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.33.1", + "version": "0.33.2-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 6ca78ae0b..1450baf7e 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.33.1", + "version": "0.33.2-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index d8ac81f4f..a856f7f30 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.33.1", + "version": "0.33.2-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index d308a27ac..6eb57ad41 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.33.1", + "version": "0.33.2-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 826f56275..c1a5e87e0 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.33.1", + "version": "0.33.2-0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 0bdea23892ccd229ca1378c1fc863c217121f2f8 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Thu, 15 Jun 2023 15:53:20 +0200 Subject: [PATCH 058/130] refactor!: nest ctype in ICTypeDetails (#766) * refactor: nest ctype in ICTypeDetails * test: fix integration tests --- packages/core/src/__integrationtests__/Ctypes.spec.ts | 4 ++-- packages/core/src/ctype/CType.chain.ts | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/core/src/__integrationtests__/Ctypes.spec.ts b/packages/core/src/__integrationtests__/Ctypes.spec.ts index 4fac16e74..e24dc7a5d 100644 --- a/packages/core/src/__integrationtests__/Ctypes.spec.ts +++ b/packages/core/src/__integrationtests__/Ctypes.spec.ts @@ -84,10 +84,10 @@ describe('When there is an CtypeCreator and a verifier', () => { if (hasBlockNumbers) { const retrievedCType = await CType.fetchFromChain(ctype.$id) // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { createdAt, creator, ...originalCtype } = retrievedCType + const { ctype: originalCtype, creator } = retrievedCType expect(originalCtype).toStrictEqual(ctype) expect(creator).toBe(ctypeCreator.uri) - await expect(CType.verifyStored(retrievedCType)).resolves.not.toThrow() + await expect(CType.verifyStored(originalCtype)).resolves.not.toThrow() } }, 40_000) diff --git a/packages/core/src/ctype/CType.chain.ts b/packages/core/src/ctype/CType.chain.ts index e6712fc64..a765333eb 100644 --- a/packages/core/src/ctype/CType.chain.ts +++ b/packages/core/src/ctype/CType.chain.ts @@ -83,7 +83,7 @@ export interface CTypeChainDetails { createdAt: BN } -export type ICTypeDetails = ICType & CTypeChainDetails +export type ICTypeDetails = { ctype: ICType } & CTypeChainDetails /** * Decodes the CType details returned by `api.query.ctype.ctypes()`. @@ -226,8 +226,10 @@ export async function fetchFromChain( const [ctypeInput, creator] = lastRightCTypeCreationCall return { - ...ctypeInput, - $id: cTypeId, + ctype: { + ...ctypeInput, + $id: cTypeId, + }, creator, createdAt, } From 980e30434f294c55e7bb9083fc08e72931dc4f47 Mon Sep 17 00:00:00 2001 From: Github Action Date: Thu, 15 Jun 2023 13:57:41 +0000 Subject: [PATCH 059/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index f00b8ae68..dffd8d835 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.33.2-0", + "version": "0.33.2-1", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index c1833c4d2..4740d2ea7 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.33.2-0", + "version": "0.33.2-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index a775ede2f..9a4f3c827 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.33.2-0", + "version": "0.33.2-1", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index e3c6d233a..159488878 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.33.2-0", + "version": "0.33.2-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index ab13a1fca..dc638f054 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.33.2-0", + "version": "0.33.2-1", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 1652903fd..235cd502e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.33.2-0", + "version": "0.33.2-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index fccfff91d..3ff695792 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.33.2-0", + "version": "0.33.2-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index ddaa4f4ac..b35fdd99c 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.33.2-0", + "version": "0.33.2-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 324ac724e..88e0b28f7 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.33.2-0", + "version": "0.33.2-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 283498016..ada9de7a4 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.33.2-0", + "version": "0.33.2-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 1450baf7e..d8fb14e4a 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.33.2-0", + "version": "0.33.2-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index a856f7f30..60861c4af 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.33.2-0", + "version": "0.33.2-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 6eb57ad41..1af44e6bb 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.33.2-0", + "version": "0.33.2-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index c1a5e87e0..e564a53e9 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.33.2-0", + "version": "0.33.2-1", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 48f6e49e75fdf43a957152a2ff31f10995965e2e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Jun 2023 16:54:57 +0200 Subject: [PATCH 060/130] chore(deps-dev): bump webpack from 5.70.0 to 5.76.0 (#771) * chore(deps-dev): bump webpack from 5.70.0 to 5.76.0 Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gerawork Aynekulu Co-authored-by: Raphael Flechtner --- packages/sdk-js/package.json | 2 +- yarn.lock | 353 +++++++++++++++++------------------ 2 files changed, 174 insertions(+), 181 deletions(-) diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 88e0b28f7..e267d2ac0 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -35,7 +35,7 @@ "rimraf": "^3.0.2", "terser-webpack-plugin": "^5.1.1", "typescript": "^4.8.3", - "webpack": "^5.70.0", + "webpack": "^5.76.0", "webpack-cli": "^4.9.2" }, "dependencies": { diff --git a/yarn.lock b/yarn.lock index 9ae175277..81c18df84 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1831,10 +1831,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:^3.0.3": - version: 3.0.5 - resolution: "@jridgewell/resolve-uri@npm:3.0.5" - checksum: 1ee652b693da7979ac4007926cc3f0a32b657ffeb913e111f44e5b67153d94a2f28a1d560101cc0cf8087625468293a69a00f634a2914e1a6d0817ba2039a913 +"@jridgewell/resolve-uri@npm:3.1.0, @jridgewell/resolve-uri@npm:^3.0.3": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 languageName: node linkType: hard @@ -1845,20 +1845,20 @@ __metadata: languageName: node linkType: hard -"@jridgewell/source-map@npm:^0.3.2": - version: 0.3.2 - resolution: "@jridgewell/source-map@npm:0.3.2" +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.3 + resolution: "@jridgewell/source-map@npm:0.3.3" dependencies: "@jridgewell/gen-mapping": ^0.3.0 "@jridgewell/trace-mapping": ^0.3.9 - checksum: 1b83f0eb944e77b70559a394d5d3b3f98a81fcc186946aceb3ef42d036762b52ef71493c6c0a3b7c1d2f08785f53ba2df1277fe629a06e6109588ff4cdcf7482 + checksum: ae1302146339667da5cd6541260ecbef46ae06819a60f88da8f58b3e64682f787c09359933d050dea5d2173ea7fa40f40dd4d4e7a8d325c5892cccd99aaf8959 languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10": - version: 1.4.11 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.11" - checksum: 3b2afaf8400fb07a36db60e901fcce6a746cdec587310ee9035939d89878e57b2dec8173b0b8f63176f647efa352294049a53c49739098eb907ff81fec2547c8 +"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.14 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" + checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 languageName: node linkType: hard @@ -1872,13 +1872,13 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.0, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.14 - resolution: "@jridgewell/trace-mapping@npm:0.3.14" +"@jridgewell/trace-mapping@npm:^0.3.0, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.18 + resolution: "@jridgewell/trace-mapping@npm:0.3.18" dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: b9537b9630ffb631aef9651a085fe361881cde1772cd482c257fe3c78c8fd5388d681f504a9c9fe1081b1c05e8f75edf55ee10fdb58d92bbaa8dbf6a7bd6b18c + "@jridgewell/resolve-uri": 3.1.0 + "@jridgewell/sourcemap-codec": 1.4.14 + checksum: 0572669f855260808c16fe8f78f5f1b4356463b11d3f2c7c0b5580c8ba1cbf4ae53efe9f627595830856e57dbac2325ac17eb0c3dd0ec42102e6f227cc289c02 languageName: node linkType: hard @@ -2009,7 +2009,7 @@ __metadata: rimraf: ^3.0.2 terser-webpack-plugin: ^5.1.1 typescript: ^4.8.3 - webpack: ^5.70.0 + webpack: ^5.76.0 webpack-cli: ^4.9.2 languageName: unknown linkType: soft @@ -2911,10 +2911,10 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:^0.0.51": - version: 0.0.51 - resolution: "@types/estree@npm:0.0.51" - checksum: e56a3bcf759fd9185e992e7fdb3c6a5f81e8ff120e871641607581fb3728d16c811702a7d40fa5f869b7f7b4437ab6a87eb8d98ffafeee51e85bbe955932a189 +"@types/estree@npm:*, @types/estree@npm:^1.0.0": + version: 1.0.1 + resolution: "@types/estree@npm:1.0.1" + checksum: e9aa175eacb797216fafce4d41e8202c7a75555bc55232dee0f9903d7171f8f19f0ae7d5191bb1a88cb90e65468be508c0df850a9fb81b4433b293a5a749899d languageName: node linkType: hard @@ -3194,154 +3194,154 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/ast@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/ast@npm:1.11.1" +"@webassemblyjs/ast@npm:1.11.6, @webassemblyjs/ast@npm:^1.11.5": + version: 1.11.6 + resolution: "@webassemblyjs/ast@npm:1.11.6" dependencies: - "@webassemblyjs/helper-numbers": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - checksum: 1eee1534adebeece635362f8e834ae03e389281972611408d64be7895fc49f48f98fddbbb5339bf8a72cb101bcb066e8bca3ca1bf1ef47dadf89def0395a8d87 + "@webassemblyjs/helper-numbers": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + checksum: 38ef1b526ca47c210f30975b06df2faf1a8170b1636ce239fc5738fc231ce28389dd61ecedd1bacfc03cbe95b16d1af848c805652080cb60982836eb4ed2c6cf languageName: node linkType: hard -"@webassemblyjs/floating-point-hex-parser@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.1" - checksum: b8efc6fa08e4787b7f8e682182d84dfdf8da9d9c77cae5d293818bc4a55c1f419a87fa265ab85252b3e6c1fd323d799efea68d825d341a7c365c64bc14750e97 +"@webassemblyjs/floating-point-hex-parser@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" + checksum: 29b08758841fd8b299c7152eda36b9eb4921e9c584eb4594437b5cd90ed6b920523606eae7316175f89c20628da14326801090167cc7fbffc77af448ac84b7e2 languageName: node linkType: hard -"@webassemblyjs/helper-api-error@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-api-error@npm:1.11.1" - checksum: 0792813f0ed4a0e5ee0750e8b5d0c631f08e927f4bdfdd9fe9105dc410c786850b8c61bff7f9f515fdfb149903bec3c976a1310573a4c6866a94d49bc7271959 +"@webassemblyjs/helper-api-error@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" + checksum: e8563df85161096343008f9161adb138a6e8f3c2cc338d6a36011aa55eabb32f2fd138ffe63bc278d009ada001cc41d263dadd1c0be01be6c2ed99076103689f languageName: node linkType: hard -"@webassemblyjs/helper-buffer@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-buffer@npm:1.11.1" - checksum: a337ee44b45590c3a30db5a8b7b68a717526cf967ada9f10253995294dbd70a58b2da2165222e0b9830cd4fc6e4c833bf441a721128d1fe2e9a7ab26b36003ce +"@webassemblyjs/helper-buffer@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-buffer@npm:1.11.6" + checksum: b14d0573bf680d22b2522e8a341ec451fddd645d1f9c6bd9012ccb7e587a2973b86ab7b89fe91e1c79939ba96095f503af04369a3b356c8023c13a5893221644 languageName: node linkType: hard -"@webassemblyjs/helper-numbers@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-numbers@npm:1.11.1" +"@webassemblyjs/helper-numbers@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" dependencies: - "@webassemblyjs/floating-point-hex-parser": 1.11.1 - "@webassemblyjs/helper-api-error": 1.11.1 + "@webassemblyjs/floating-point-hex-parser": 1.11.6 + "@webassemblyjs/helper-api-error": 1.11.6 "@xtuc/long": 4.2.2 - checksum: 44d2905dac2f14d1e9b5765cf1063a0fa3d57295c6d8930f6c59a36462afecc6e763e8a110b97b342a0f13376166c5d41aa928e6ced92e2f06b071fd0db59d3a + checksum: f4b562fa219f84368528339e0f8d273ad44e047a07641ffcaaec6f93e5b76fd86490a009aa91a294584e1436d74b0a01fa9fde45e333a4c657b58168b04da424 languageName: node linkType: hard -"@webassemblyjs/helper-wasm-bytecode@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.1" - checksum: eac400113127832c88f5826bcc3ad1c0db9b3dbd4c51a723cfdb16af6bfcbceb608170fdaac0ab7731a7e18b291be7af68a47fcdb41cfe0260c10857e7413d97 +"@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" + checksum: 3535ef4f1fba38de3475e383b3980f4bbf3de72bbb631c2b6584c7df45be4eccd62c6ff48b5edd3f1bcff275cfd605a37679ec199fc91fd0a7705d7f1e3972dc languageName: node linkType: hard -"@webassemblyjs/helper-wasm-section@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.1" +"@webassemblyjs/helper-wasm-section@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.6" dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-buffer": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - "@webassemblyjs/wasm-gen": 1.11.1 - checksum: 617696cfe8ecaf0532763162aaf748eb69096fb27950219bb87686c6b2e66e11cd0614d95d319d0ab1904bc14ebe4e29068b12c3e7c5e020281379741fe4bedf + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-buffer": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/wasm-gen": 1.11.6 + checksum: b2cf751bf4552b5b9999d27bbb7692d0aca75260140195cb58ea6374d7b9c2dc69b61e10b211a0e773f66209c3ddd612137ed66097e3684d7816f854997682e9 languageName: node linkType: hard -"@webassemblyjs/ieee754@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/ieee754@npm:1.11.1" +"@webassemblyjs/ieee754@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/ieee754@npm:1.11.6" dependencies: "@xtuc/ieee754": ^1.2.0 - checksum: 23a0ac02a50f244471631802798a816524df17e56b1ef929f0c73e3cde70eaf105a24130105c60aff9d64a24ce3b640dad443d6f86e5967f922943a7115022ec + checksum: 13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de languageName: node linkType: hard -"@webassemblyjs/leb128@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/leb128@npm:1.11.1" +"@webassemblyjs/leb128@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/leb128@npm:1.11.6" dependencies: "@xtuc/long": 4.2.2 - checksum: 33ccc4ade2f24de07bf31690844d0b1ad224304ee2062b0e464a610b0209c79e0b3009ac190efe0e6bd568b0d1578d7c3047fc1f9d0197c92fc061f56224ff4a + checksum: 7ea942dc9777d4b18a5ebfa3a937b30ae9e1d2ce1fee637583ed7f376334dd1d4274f813d2e250056cca803e0952def4b954913f1a3c9068bcd4ab4ee5143bf0 languageName: node linkType: hard -"@webassemblyjs/utf8@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/utf8@npm:1.11.1" - checksum: 972c5cfc769d7af79313a6bfb96517253a270a4bf0c33ba486aa43cac43917184fb35e51dfc9e6b5601548cd5931479a42e42c89a13bb591ffabebf30c8a6a0b +"@webassemblyjs/utf8@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/utf8@npm:1.11.6" + checksum: 807fe5b5ce10c390cfdd93e0fb92abda8aebabb5199980681e7c3743ee3306a75729bcd1e56a3903980e96c885ee53ef901fcbaac8efdfa480f9c0dae1d08713 languageName: node linkType: hard -"@webassemblyjs/wasm-edit@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wasm-edit@npm:1.11.1" +"@webassemblyjs/wasm-edit@npm:^1.11.5": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-edit@npm:1.11.6" dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-buffer": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - "@webassemblyjs/helper-wasm-section": 1.11.1 - "@webassemblyjs/wasm-gen": 1.11.1 - "@webassemblyjs/wasm-opt": 1.11.1 - "@webassemblyjs/wasm-parser": 1.11.1 - "@webassemblyjs/wast-printer": 1.11.1 - checksum: 6d7d9efaec1227e7ef7585a5d7ff0be5f329f7c1c6b6c0e906b18ed2e9a28792a5635e450aca2d136770d0207225f204eff70a4b8fd879d3ac79e1dcc26dbeb9 + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-buffer": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/helper-wasm-section": 1.11.6 + "@webassemblyjs/wasm-gen": 1.11.6 + "@webassemblyjs/wasm-opt": 1.11.6 + "@webassemblyjs/wasm-parser": 1.11.6 + "@webassemblyjs/wast-printer": 1.11.6 + checksum: 29ce75870496d6fad864d815ebb072395a8a3a04dc9c3f4e1ffdc63fc5fa58b1f34304a1117296d8240054cfdbc38aca88e71fb51483cf29ffab0a61ef27b481 languageName: node linkType: hard -"@webassemblyjs/wasm-gen@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wasm-gen@npm:1.11.1" +"@webassemblyjs/wasm-gen@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-gen@npm:1.11.6" dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - "@webassemblyjs/ieee754": 1.11.1 - "@webassemblyjs/leb128": 1.11.1 - "@webassemblyjs/utf8": 1.11.1 - checksum: 1f6921e640293bf99fb16b21e09acb59b340a79f986c8f979853a0ae9f0b58557534b81e02ea2b4ef11e929d946708533fd0693c7f3712924128fdafd6465f5b + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/ieee754": 1.11.6 + "@webassemblyjs/leb128": 1.11.6 + "@webassemblyjs/utf8": 1.11.6 + checksum: a645a2eecbea24833c3260a249704a7f554ef4a94c6000984728e94bb2bc9140a68dfd6fd21d5e0bbb09f6dfc98e083a45760a83ae0417b41a0196ff6d45a23a languageName: node linkType: hard -"@webassemblyjs/wasm-opt@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wasm-opt@npm:1.11.1" +"@webassemblyjs/wasm-opt@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-opt@npm:1.11.6" dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-buffer": 1.11.1 - "@webassemblyjs/wasm-gen": 1.11.1 - "@webassemblyjs/wasm-parser": 1.11.1 - checksum: 21586883a20009e2b20feb67bdc451bbc6942252e038aae4c3a08e6f67b6bae0f5f88f20bfc7bd0452db5000bacaf5ab42b98cf9aa034a6c70e9fc616142e1db + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-buffer": 1.11.6 + "@webassemblyjs/wasm-gen": 1.11.6 + "@webassemblyjs/wasm-parser": 1.11.6 + checksum: b4557f195487f8e97336ddf79f7bef40d788239169aac707f6eaa2fa5fe243557c2d74e550a8e57f2788e70c7ae4e7d32f7be16101afe183d597b747a3bdd528 languageName: node linkType: hard -"@webassemblyjs/wasm-parser@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wasm-parser@npm:1.11.1" +"@webassemblyjs/wasm-parser@npm:1.11.6, @webassemblyjs/wasm-parser@npm:^1.11.5": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-parser@npm:1.11.6" dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-api-error": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - "@webassemblyjs/ieee754": 1.11.1 - "@webassemblyjs/leb128": 1.11.1 - "@webassemblyjs/utf8": 1.11.1 - checksum: 1521644065c360e7b27fad9f4bb2df1802d134dd62937fa1f601a1975cde56bc31a57b6e26408b9ee0228626ff3ba1131ae6f74ffb7d718415b6528c5a6dbfc2 + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-api-error": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/ieee754": 1.11.6 + "@webassemblyjs/leb128": 1.11.6 + "@webassemblyjs/utf8": 1.11.6 + checksum: 8200a8d77c15621724a23fdabe58d5571415cda98a7058f542e670ea965dd75499f5e34a48675184947c66f3df23adf55df060312e6d72d57908e3f049620d8a languageName: node linkType: hard -"@webassemblyjs/wast-printer@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wast-printer@npm:1.11.1" +"@webassemblyjs/wast-printer@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/wast-printer@npm:1.11.6" dependencies: - "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/ast": 1.11.6 "@xtuc/long": 4.2.2 - checksum: f15ae4c2441b979a3b4fce78f3d83472fb22350c6dc3fd34bfe7c3da108e0b2360718734d961bba20e7716cb8578e964b870da55b035e209e50ec9db0378a3f7 + checksum: d2fa6a4c427325ec81463e9c809aa6572af6d47f619f3091bf4c4a6fc34f1da3df7caddaac50b8e7a457f8784c62cd58c6311b6cb69b0162ccd8d4c072f79cf8 languageName: node linkType: hard @@ -3437,12 +3437,12 @@ __metadata: languageName: node linkType: hard -"acorn-import-assertions@npm:^1.7.6": - version: 1.8.0 - resolution: "acorn-import-assertions@npm:1.8.0" +"acorn-import-assertions@npm:^1.9.0": + version: 1.9.0 + resolution: "acorn-import-assertions@npm:1.9.0" peerDependencies: acorn: ^8 - checksum: 5c4cf7c850102ba7ae0eeae0deb40fb3158c8ca5ff15c0bca43b5c47e307a1de3d8ef761788f881343680ea374631ae9e9615ba8876fee5268dbe068c98bcba6 + checksum: 944fb2659d0845c467066bdcda2e20c05abe3aaf11972116df457ce2627628a81764d800dd55031ba19de513ee0d43bb771bc679cc0eda66dc8b4fade143bc0c languageName: node linkType: hard @@ -3478,12 +3478,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0": - version: 8.7.0 - resolution: "acorn@npm:8.7.0" +"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.2": + version: 8.8.2 + resolution: "acorn@npm:8.8.2" bin: acorn: bin/acorn - checksum: e0f79409d68923fbf1aa6d4166f3eedc47955320d25c89a20cc822e6ba7c48c5963d5bc657bc242d68f7a4ac9faf96eef033e8f73656da6c640d4219935fdfd0 + checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 languageName: node linkType: hard @@ -4940,13 +4940,13 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.9.2": - version: 5.9.2 - resolution: "enhanced-resolve@npm:5.9.2" +"enhanced-resolve@npm:^5.14.1": + version: 5.14.1 + resolution: "enhanced-resolve@npm:5.14.1" dependencies: graceful-fs: ^4.2.4 tapable: ^2.2.0 - checksum: 792b7a01abb4ee4433b658c71f92d5948675938e0c03cad1732abe843b87395f15cb880ace4f819f78ead94163278283afc79b8be63c0eddca8ab45f7d8c515d + checksum: ad2a31928b6649eed40d364838449587f731baa63863e83d2629bebaa8be1eabac18b90f89c1784bc805b0818363e99b22547159edd485d7e5ccf18cdc640642 languageName: node linkType: hard @@ -5028,10 +5028,10 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^0.9.0": - version: 0.9.3 - resolution: "es-module-lexer@npm:0.9.3" - checksum: 84bbab23c396281db2c906c766af58b1ae2a1a2599844a504df10b9e8dc77ec800b3211fdaa133ff700f5703d791198807bba25d9667392d27a5e9feda344da8 +"es-module-lexer@npm:^1.2.1": + version: 1.3.0 + resolution: "es-module-lexer@npm:1.3.0" + checksum: 48fd9f504a9d2a894126f75c8b7ccc6273a289983e9b67255f165bfd9ae765d50100218251e94e702ca567826905ea2f7b3b4a0c4d74d3ce99cce3a2a606a238 languageName: node linkType: hard @@ -7031,14 +7031,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"json-parse-better-errors@npm:^1.0.2": - version: 1.0.2 - resolution: "json-parse-better-errors@npm:1.0.2" - checksum: ff2b5ba2a70e88fd97a3cb28c1840144c5ce8fae9cbeeddba15afa333a5c407cf0e42300cd0a2885dbb055227fe68d405070faad941beeffbfde9cf3b2c78c5d - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^2.3.0": +"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f @@ -8668,14 +8661,14 @@ fsevents@^2.3.2: languageName: node linkType: hard -"schema-utils@npm:^3.1.0, schema-utils@npm:^3.1.1": - version: 3.1.1 - resolution: "schema-utils@npm:3.1.1" +"schema-utils@npm:^3.1.1, schema-utils@npm:^3.1.2": + version: 3.2.0 + resolution: "schema-utils@npm:3.2.0" dependencies: "@types/json-schema": ^7.0.8 ajv: ^6.12.5 ajv-keywords: ^3.5.2 - checksum: fb73f3d759d43ba033c877628fe9751620a26879f6301d3dbeeb48cf2a65baec5cdf99da65d1bf3b4ff5444b2e59cbe4f81c2456b5e0d2ba7d7fd4aed5da29ce + checksum: e8c590c525a58e135658dbe614c60e4821f98eb4c257c962ad61f72ad1e48b23148c7edd9295dbd5f9fc525ff8c6f448af0a932871fe9c9e1f523d1dbef917c8 languageName: node linkType: hard @@ -8747,12 +8740,12 @@ fsevents@^2.3.2: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.0": - version: 6.0.0 - resolution: "serialize-javascript@npm:6.0.0" +"serialize-javascript@npm:^6.0.1": + version: 6.0.1 + resolution: "serialize-javascript@npm:6.0.1" dependencies: randombytes: ^2.1.0 - checksum: 56f90b562a1bdc92e55afb3e657c6397c01a902c588c0fe3d4c490efdcc97dcd2a3074ba12df9e94630f33a5ce5b76a74784a7041294628a6f4306e0ec84bf93 + checksum: 3c4f4cb61d0893b988415bdb67243637333f3f574e9e9cc9a006a2ced0b390b0b3b44aef8d51c951272a9002ec50885eefdc0298891bc27eb2fe7510ea87dc4f languageName: node linkType: hard @@ -9309,15 +9302,15 @@ fsevents@^2.3.2: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.1.1, terser-webpack-plugin@npm:^5.1.3": - version: 5.3.1 - resolution: "terser-webpack-plugin@npm:5.3.1" +"terser-webpack-plugin@npm:^5.1.1, terser-webpack-plugin@npm:^5.3.7": + version: 5.3.9 + resolution: "terser-webpack-plugin@npm:5.3.9" dependencies: + "@jridgewell/trace-mapping": ^0.3.17 jest-worker: ^27.4.5 schema-utils: ^3.1.1 - serialize-javascript: ^6.0.0 - source-map: ^0.6.1 - terser: ^5.7.2 + serialize-javascript: ^6.0.1 + terser: ^5.16.8 peerDependencies: webpack: ^5.1.0 peerDependenciesMeta: @@ -9327,21 +9320,21 @@ fsevents@^2.3.2: optional: true uglify-js: optional: true - checksum: 1b808fd4f58ce0b532baacc50b9a850fc69ce0077a0e9e5076d4156c52fab3d40b02d5d9148a3eba64630cf7f40057de54f6a5a87fac1849b1f11d6bfdb42072 + checksum: 41705713d6f9cb83287936b21e27c658891c78c4392159f5148b5623f0e8c48559869779619b058382a4c9758e7820ea034695e57dc7c474b4962b79f553bc5f languageName: node linkType: hard -"terser@npm:^5.7.2": - version: 5.16.3 - resolution: "terser@npm:5.16.3" +"terser@npm:^5.16.8": + version: 5.17.7 + resolution: "terser@npm:5.17.7" dependencies: - "@jridgewell/source-map": ^0.3.2 - acorn: ^8.5.0 + "@jridgewell/source-map": ^0.3.3 + acorn: ^8.8.2 commander: ^2.20.0 source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: d3c2ac1c2723c37b698b25b68d76fd315a1277fddde113983d5783d1f2a01dd7b8ed83ba3f54e5e65f0b59dd971ed7be2fdf8d4be94ec694b2d27832d2e7561f + checksum: b7b17b281febadf3bea9b9412d699fa24edf9b3e20fc7ad4e1a9cec276bdb65ddaa291c9663d5ab66b58834e433377477f73328574ccab2da1637a15b095811d languageName: node linkType: hard @@ -9928,13 +9921,13 @@ typescript@^4.8.3: languageName: node linkType: hard -"watchpack@npm:^2.3.1": - version: 2.3.1 - resolution: "watchpack@npm:2.3.1" +"watchpack@npm:^2.4.0": + version: 2.4.0 + resolution: "watchpack@npm:2.4.0" dependencies: glob-to-regexp: ^0.4.1 graceful-fs: ^4.1.2 - checksum: 70a34f92842d94b5d842980f866d568d7a467de667c96ae5759c759f46587e49265863171f4650bdbafc5f3870a28f2b4453e9e847098ec4b718b38926d47d22 + checksum: 23d4bc58634dbe13b86093e01c6a68d8096028b664ab7139d58f0c37d962d549a940e98f2f201cecdabd6f9c340338dc73ef8bf094a2249ef582f35183d1a131 languageName: node linkType: hard @@ -10016,40 +10009,40 @@ typescript@^4.8.3: languageName: node linkType: hard -"webpack@npm:^5.70.0": - version: 5.70.0 - resolution: "webpack@npm:5.70.0" +"webpack@npm:^5.76.0": + version: 5.86.0 + resolution: "webpack@npm:5.86.0" dependencies: "@types/eslint-scope": ^3.7.3 - "@types/estree": ^0.0.51 - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/wasm-edit": 1.11.1 - "@webassemblyjs/wasm-parser": 1.11.1 - acorn: ^8.4.1 - acorn-import-assertions: ^1.7.6 + "@types/estree": ^1.0.0 + "@webassemblyjs/ast": ^1.11.5 + "@webassemblyjs/wasm-edit": ^1.11.5 + "@webassemblyjs/wasm-parser": ^1.11.5 + acorn: ^8.7.1 + acorn-import-assertions: ^1.9.0 browserslist: ^4.14.5 chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.9.2 - es-module-lexer: ^0.9.0 + enhanced-resolve: ^5.14.1 + es-module-lexer: ^1.2.1 eslint-scope: 5.1.1 events: ^3.2.0 glob-to-regexp: ^0.4.1 graceful-fs: ^4.2.9 - json-parse-better-errors: ^1.0.2 + json-parse-even-better-errors: ^2.3.1 loader-runner: ^4.2.0 mime-types: ^2.1.27 neo-async: ^2.6.2 - schema-utils: ^3.1.0 + schema-utils: ^3.1.2 tapable: ^2.1.1 - terser-webpack-plugin: ^5.1.3 - watchpack: ^2.3.1 + terser-webpack-plugin: ^5.3.7 + watchpack: ^2.4.0 webpack-sources: ^3.2.3 peerDependenciesMeta: webpack-cli: optional: true bin: webpack: bin/webpack.js - checksum: 00439884a9cdd5305aed3ce93735635785a15c5464a6d2cfce87e17727a07585de02420913e82aa85ddd2ae7322175d2cfda6ac0878a17f061cb605e6a7db57a + checksum: 682b1aa8328bb9d52ae66a1d0a1078af88f9e3b3b3a9c9e1ce203e669581a8e61d522420ef253130eacd510d24d7275b840c1311d50bd048d6fd7c1af186ce55 languageName: node linkType: hard From 544519f094953faf7b41faed384e65fd558d6ebd Mon Sep 17 00:00:00 2001 From: Github Action Date: Thu, 15 Jun 2023 15:00:00 +0000 Subject: [PATCH 061/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index dffd8d835..54fe6bd12 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.33.2-1", + "version": "0.33.2-2", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 4740d2ea7..a645b907c 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.33.2-1", + "version": "0.33.2-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 9a4f3c827..99192ca0d 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.33.2-1", + "version": "0.33.2-2", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 159488878..1e32d07e5 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.33.2-1", + "version": "0.33.2-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index dc638f054..d22695341 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.33.2-1", + "version": "0.33.2-2", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 235cd502e..76892d1c0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.33.2-1", + "version": "0.33.2-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index 3ff695792..ac4cbe334 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.33.2-1", + "version": "0.33.2-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index b35fdd99c..65c6b7929 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.33.2-1", + "version": "0.33.2-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index e267d2ac0..b42b7a449 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.33.2-1", + "version": "0.33.2-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index ada9de7a4..9fe4c9c4e 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.33.2-1", + "version": "0.33.2-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index d8fb14e4a..e749157dc 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.33.2-1", + "version": "0.33.2-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 60861c4af..e1c2e0b4f 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.33.2-1", + "version": "0.33.2-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 1af44e6bb..2d4c01591 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.33.2-1", + "version": "0.33.2-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index e564a53e9..e84c56690 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.33.2-1", + "version": "0.33.2-2", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 5be18755924b461e26d80b0fd94c0969b102588b Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Thu, 13 Jul 2023 15:26:10 +0200 Subject: [PATCH 062/130] feat: deprecate CType meta schema draft-01 (#778) * feat: deprecate CType meta schema draft-01 * fix: default to log level warn in non-production environments --- packages/config/src/ConfigService.spec.ts | 4 ++-- packages/config/src/ConfigService.ts | 17 +++++++++----- packages/core/src/ctype/CType.ts | 27 +++++++++++++++++++++++ 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/packages/config/src/ConfigService.spec.ts b/packages/config/src/ConfigService.spec.ts index f5069556b..85f3d3c18 100644 --- a/packages/config/src/ConfigService.spec.ts +++ b/packages/config/src/ConfigService.spec.ts @@ -24,7 +24,7 @@ describe('Log Configuration', () => { it('Tests the default Log Level', () => { if (process.env.DEBUG === 'true') { expect(testLogger.getLogLevel()).toEqual(LogLevel.Debug) - } else expect(testLogger.getLogLevel()).toEqual(LogLevel.Error) + } else expect(testLogger.getLogLevel()).toEqual(LogLevel.Warn) }) it('modifies the Log Level of all Loggers to the desired Level', () => { @@ -44,7 +44,7 @@ describe('Log Configuration', () => { describe('Configuration Service', () => { it('has configuration Object with default values', () => { - expect(ConfigService.get('logLevel')).toEqual(LogLevel.Error) + expect(ConfigService.get('logLevel')).toEqual(LogLevel.Warn) expect(() => ConfigService.get('api')).toThrowErrorMatchingInlineSnapshot( `"The blockchain API is not set. Did you forget to call \`Kilt.connect(…)\` or \`Kilt.init(…)\`?"` ) diff --git a/packages/config/src/ConfigService.ts b/packages/config/src/ConfigService.ts index d9e68b4a8..38d22fc3c 100644 --- a/packages/config/src/ConfigService.ts +++ b/packages/config/src/ConfigService.ts @@ -24,12 +24,17 @@ import { } from 'typescript-logging' import type { SubscriptionPromise } from '@kiltprotocol/types' -const DEFAULT_DEBUG_LEVEL = - typeof process !== 'undefined' && - process.env?.DEBUG && - process.env.DEBUG === 'true' - ? LogLevel.Debug - : LogLevel.Error +const DEFAULT_DEBUG_LEVEL = (() => { + if (typeof process !== 'undefined') { + if (process.env.DEBUG === 'true') { + return LogLevel.Debug + } + if (process.env.NODE_ENV && process.env.NODE_ENV !== 'production') { + return LogLevel.Warn + } + } + return LogLevel.Error +})() export type configOpts = { api: ApiPromise diff --git a/packages/core/src/ctype/CType.ts b/packages/core/src/ctype/CType.ts index 6c061809d..70c545dc0 100644 --- a/packages/core/src/ctype/CType.ts +++ b/packages/core/src/ctype/CType.ts @@ -30,6 +30,27 @@ import { CTypeModelV1, } from './CType.schemas.js' +let notifyDeprecated: (cTypeId: ICType['$id']) => void = () => { + // do nothing +} +if ( + typeof process !== 'undefined' && + process.env?.NODE_ENV && + process.env.NODE_ENV !== 'production' +) { + const logger = ConfigService.LoggingFactory.getLogger('deprecated') + const alreadyNotified = new Set() + notifyDeprecated = (cTypeId) => { + if (alreadyNotified.has(cTypeId)) { + return + } + logger.warn( + `Your application has processed the CType '${cTypeId}' which follows the meta schema '${CTypeModelDraft01.$id}'. This class of schemas has known issues that can result in unexpected properties being present in a credential. Consider switching to a CType based on meta schema ${CTypeModelV1.$id} which fixes this issue.` + ) + alreadyNotified.add(cTypeId) + } +} + /** * Utility for (re)creating CType hashes. Sorts the schema and strips the $id property (which contains the CType hash) before stringifying. * @@ -136,6 +157,9 @@ export function verifyClaimAgainstSchema( messages?: string[] ): void { verifyObjectAgainstSchema(schema, CTypeModel, messages) + if (schema.$schema === CTypeModelDraft01.$id) { + notifyDeprecated(schema.$id) + } verifyObjectAgainstSchema(claimContents, schema, messages) } @@ -162,6 +186,9 @@ export async function verifyStored(ctype: ICType): Promise { */ export function verifyDataStructure(input: ICType): void { verifyObjectAgainstSchema(input, CTypeModel) + if (input.$schema === CTypeModelDraft01.$id) { + notifyDeprecated(input.$id) + } const idFromSchema = getIdForSchema(input) if (idFromSchema !== input.$id) { throw new SDKErrors.CTypeIdMismatchError(idFromSchema, input.$id) From 55b21924a6feeab985d2228cb54c2b3aa674bcae Mon Sep 17 00:00:00 2001 From: Github Action Date: Thu, 13 Jul 2023 13:31:55 +0000 Subject: [PATCH 063/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 54fe6bd12..9ab120eb3 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.33.2-2", + "version": "0.33.2-3", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index a645b907c..b93daf462 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.33.2-2", + "version": "0.33.2-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 99192ca0d..3962afc2d 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.33.2-2", + "version": "0.33.2-3", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 1e32d07e5..5a6608b91 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.33.2-2", + "version": "0.33.2-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index d22695341..a7ff73ad2 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.33.2-2", + "version": "0.33.2-3", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 76892d1c0..e5ddc1492 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.33.2-2", + "version": "0.33.2-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index ac4cbe334..d9e463af7 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.33.2-2", + "version": "0.33.2-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 65c6b7929..6897d8121 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.33.2-2", + "version": "0.33.2-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index b42b7a449..27a2742b6 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.33.2-2", + "version": "0.33.2-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 9fe4c9c4e..50e85a812 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.33.2-2", + "version": "0.33.2-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index e749157dc..8cc8cfb91 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.33.2-2", + "version": "0.33.2-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index e1c2e0b4f..30446b68c 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.33.2-2", + "version": "0.33.2-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 2d4c01591..fc9b0f9b8 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.33.2-2", + "version": "0.33.2-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index e84c56690..5b24a56d5 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.33.2-2", + "version": "0.33.2-3", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 93e8ac5a7881b5b456d84ba7c1b932d17a2f6642 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Fri, 14 Jul 2023 11:33:36 +0200 Subject: [PATCH 064/130] refactor!: credentialSchema does not work for CTypes (#774) * refactor!: remove CType from credentialSchema * refactor!: make CType validation part of proof verification * feat: verify that credential uses correct schema * test: expect credential schema id * refactor!: add CType to VC type field * chore: add schema name and description * refactor!: move CredentialSchema functions to KiltCredentialV1 --- ...hema.spec.ts => CTypeVerification.spec.ts} | 49 ++- packages/vc-export/src/CredentialSchema.ts | 49 --- packages/vc-export/src/DidJwt.spec.ts | 5 +- .../src/KiltAttestationProofV1.spec.ts | 15 +- .../vc-export/src/KiltAttestationProofV1.ts | 19 +- packages/vc-export/src/KiltCredentialV1.ts | 349 ++++++++++++------ .../vc-export/src/KiltRevocationStatusV1.ts | 2 +- packages/vc-export/src/constants.ts | 2 +- .../src/exportToVerifiableCredential.spec.ts | 32 +- packages/vc-export/src/index.ts | 1 - packages/vc-export/src/types.ts | 18 +- .../vc-export/src/vc-js/context/context.ts | 9 + .../vc-export/src/vc-js/documentLoader.ts | 9 + .../suites/KiltAttestationProofV1.spec.ts | 21 +- .../vc-js/suites/KiltAttestationProofV1.ts | 26 +- 15 files changed, 360 insertions(+), 246 deletions(-) rename packages/vc-export/src/{CredentialSchema.spec.ts => CTypeVerification.spec.ts} (50%) delete mode 100644 packages/vc-export/src/CredentialSchema.ts diff --git a/packages/vc-export/src/CredentialSchema.spec.ts b/packages/vc-export/src/CTypeVerification.spec.ts similarity index 50% rename from packages/vc-export/src/CredentialSchema.spec.ts rename to packages/vc-export/src/CTypeVerification.spec.ts index 2beeb01de..cf27e5470 100644 --- a/packages/vc-export/src/CredentialSchema.spec.ts +++ b/packages/vc-export/src/CTypeVerification.spec.ts @@ -11,14 +11,17 @@ import { CType } from '@kiltprotocol/core' import { randomAsHex, randomAsU8a } from '@polkadot/util-crypto' -import { validateSubject } from './CredentialSchema' import { attestation, credential, cType, } from './exportToVerifiableCredential.spec' import { exportICredentialToVc } from './fromICredential' -import { validateStructure } from './KiltCredentialV1' +import { + credentialSchema, + validateStructure, + validateSubject, +} from './KiltCredentialV1' import type { KiltCredentialV1 } from './types' let VC: KiltCredentialV1 @@ -35,40 +38,36 @@ beforeAll(() => { }) }) -it('exports to VC including ctype as schema', () => { +it('exports to VC including ctype as schema', async () => { expect(VC).toMatchObject({ credentialSchema: { - id: cType.$id, - name: cType.title, - type: 'JsonSchemaValidator2018', - schema: cType, + id: credentialSchema.$id, + type: 'JsonSchema2023', }, }) expect(() => validateStructure(VC)).not.toThrow() }) -it('it verifies valid claim against schema', () => { - expect(() => validateSubject(VC)).not.toThrow() +it('it verifies valid claim against schema', async () => { + await expect(validateSubject(VC, { cTypes: [cType] })).resolves.not.toThrow() }) -it('it detects schema violations', () => { +it('it detects schema violations', async () => { const credentialSubject = { ...VC.credentialSubject, name: 5 } - expect(() => validateSubject({ ...VC, credentialSubject })).toThrow() + await expect( + validateSubject({ ...VC, credentialSubject }, { cTypes: [cType] }) + ).rejects.toThrow() }) -it('accepts passing in CType if not part of credential', () => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { schema, ...credentialSchema } = VC.credentialSchema - const vcNoSchema = { - ...VC, - credentialSchema, - } - expect(() => validateSubject(vcNoSchema, cType)).not.toThrow() - expect(() => validateSubject(vcNoSchema)).toThrow() - expect(() => - validateSubject(vcNoSchema, { - ...cType, - $id: CType.hashToId(randomAsHex()), +it('detects wrong/invalid ctype being passed in', async () => { + await expect( + validateSubject(VC, { + cTypes: [ + { + ...cType, + $id: CType.hashToId(randomAsHex()), + }, + ], }) - ).toThrow() + ).rejects.toThrow() }) diff --git a/packages/vc-export/src/CredentialSchema.ts b/packages/vc-export/src/CredentialSchema.ts deleted file mode 100644 index 7d0f81335..000000000 --- a/packages/vc-export/src/CredentialSchema.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import { CType } from '@kiltprotocol/core' -import type { ICType } from '@kiltprotocol/types' - -import { jsonLdExpandCredentialSubject } from './common.js' -import type { KiltCredentialV1 } from './types.js' - -/** - * Validates the claims in the VC's `credentialSubject` against a CType definition on the `credentialSchema` property. - * - * @param credential A verifiable credential where `credentialSchema.schema` is an [[ICType]]. - * @param credential.credentialSubject The credentialSubject to be validated. - * @param credential.credentialSchema The credentialSchema to be applied. - * @param cType Optionally pass the CType definition to be used if it is not embedded in the credentialSchema. - */ -export function validateSubject( - { credentialSubject, credentialSchema }: KiltCredentialV1, - cType?: ICType -): void { - const { schema = cType } = credentialSchema ?? {} - // check that we have access to the right schema - if (!schema) { - throw new Error( - 'Schema validation can only be performed if schema is present in credentialSchema or passed as the cType argument' - ) - } - if (schema.$id !== credentialSchema.id) { - throw new Error('CType[$id] must be equal to the credentialSchema[id]') - } - // normalize credential subject to form expected by CType schema - const expandedClaims: Record = - jsonLdExpandCredentialSubject(credentialSubject) - delete expandedClaims['@id'] - const vocab = `${schema.$id}#` - const claims = Object.entries(expandedClaims).reduce((obj, [key, value]) => { - return { - ...obj, - [key.startsWith(vocab) ? key.substring(vocab.length) : key]: value, - } - }, {}) - // validates against CType (also validates CType schema itself) - CType.verifyClaimAgainstSchema(claims, schema) -} diff --git a/packages/vc-export/src/DidJwt.spec.ts b/packages/vc-export/src/DidJwt.spec.ts index f79ea2222..3cace4f82 100644 --- a/packages/vc-export/src/DidJwt.spec.ts +++ b/packages/vc-export/src/DidJwt.spec.ts @@ -27,6 +27,7 @@ import type { import * as JWT from './DidJwt' import * as Presentation from './Presentation' +import { credentialSchema } from './KiltCredentialV1' import type { KiltCredentialV1 } from './types' jest.mock('@kiltprotocol/did', () => ({ @@ -109,8 +110,8 @@ it('produces and reverses JWT payload representations of a credential and presen salt: ['censored'], }, credentialSchema: { - type: 'JsonSchemaValidator2018', - id: 'kilt:ctype:0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf', + type: 'JsonSchema2023', + id: credentialSchema.$id, }, credentialStatus: { id: 'polkadot:1234567890:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad', diff --git a/packages/vc-export/src/KiltAttestationProofV1.spec.ts b/packages/vc-export/src/KiltAttestationProofV1.spec.ts index 9dc06804d..b066d8dca 100644 --- a/packages/vc-export/src/KiltAttestationProofV1.spec.ts +++ b/packages/vc-export/src/KiltAttestationProofV1.spec.ts @@ -23,19 +23,32 @@ import { makeAttestationCreatedEvents, mockedApi, timestamp, + cType, } from './exportToVerifiableCredential.spec' import { exportICredentialToVc } from './fromICredential' import { finalizeProof, initializeProof, applySelectiveDisclosure, - verify, + verify as verifyOriginal, } from './KiltAttestationProofV1' import { check as checkStatus } from './KiltRevocationStatusV1' import { fromICredential } from './KiltCredentialV1' import { credentialIdFromRootHash } from './common' import type { KiltCredentialV1 } from './types' +// the original verify implementation but with a mocked CType loader +const verify: typeof verifyOriginal = async (cred, proof, options) => + verifyOriginal(cred, proof, { + ...options, + loadCTypes: async (id) => { + if (id === cType.$id) { + return cType + } + throw new Error('CType could not be resolved') + }, + }) + let VC: KiltCredentialV1 describe('proofs', () => { beforeAll(() => { diff --git a/packages/vc-export/src/KiltAttestationProofV1.ts b/packages/vc-export/src/KiltAttestationProofV1.ts index 4d88d322e..21bd294d8 100644 --- a/packages/vc-export/src/KiltAttestationProofV1.ts +++ b/packages/vc-export/src/KiltAttestationProofV1.ts @@ -62,7 +62,11 @@ import { KILT_REVOCATION_STATUS_V1_TYPE, spiritnetGenesisHash, } from './constants.js' -import { validateStructure as validateCredentialStructure } from './KiltCredentialV1.js' +import { + validateStructure as validateCredentialStructure, + CTypeLoader, + validateSubject, +} from './KiltCredentialV1.js' import { fromGenesisAndRootHash } from './KiltRevocationStatusV1.js' import { jsonLdExpandCredentialSubject, @@ -359,11 +363,13 @@ async function verifyLegitimation( * @param proof KiltAttestationProofV1 proof object to be verified. Any proofs embedded in the credentialInput are stripped and ignored. * @param opts Additional parameters. * @param opts.api A polkadot-js/api instance connected to the blockchain network on which the credential is anchored. + * @param opts.cTypes One or more CType definitions to be used for validation. If `loadCTypes` is set to `false`, validation will fail if the definition of the credential's CType is not given. + * @param opts.loadCTypes A function to load CType definitions that are not in `cTypes`. Defaults to using the [[CachingCTypeLoader]]. If set to `false` or `undefined`, no additional CTypes will be loaded. */ export async function verify( credentialInput: Omit, proof: KiltAttestationProofV1, - opts: { api?: ApiPromise } = {} + opts: { api?: ApiPromise; cTypes?: ICType[]; loadCTypes?: CTypeLoader } = {} ): Promise { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { proof: _, ...credential } = credentialInput as KiltCredentialV1 @@ -374,6 +380,7 @@ export async function verify( const { nonTransferable, credentialStatus, credentialSubject, issuer } = credential validateUri(issuer, 'Did') + await validateSubject(credential, opts) // 4. check nonTransferable if (nonTransferable !== true) throw new CredentialMalformedError('nonTransferable must be true') @@ -437,7 +444,7 @@ export async function verify( } = await verifyAttestedAt(rootHash, base58Decode(proof.block), { api }) const issuerMatches = attester === issuer - const cTypeMatches = onChainCType === credential.credentialSchema.id + const cTypeMatches = credential.type.includes(onChainCType) const delegationMatches = u8aEq( delegationId ?? new Uint8Array(), getDelegationNodeIdForCredential(credential) ?? new Uint8Array() @@ -583,7 +590,7 @@ export function initializeProof( KiltAttestationProofV1, Parameters ] { - const { credentialSubject, credentialSchema, nonTransferable } = credential + const { credentialSubject, nonTransferable, type } = credential if (nonTransferable !== true) { throw new Error('nonTransferable must be set to true') @@ -616,7 +623,9 @@ export function initializeProof( proof, [ rootHash, - CType.idToHash(credentialSchema.id as ICType['$id']), + CType.idToHash( + type.find((str) => str.startsWith('kilt:ctype:')) as ICType['$id'] + ), delegationId && { Delegation: delegationId }, ], ] diff --git a/packages/vc-export/src/KiltCredentialV1.ts b/packages/vc-export/src/KiltCredentialV1.ts index 41090c4ca..e6e1ae1d4 100644 --- a/packages/vc-export/src/KiltCredentialV1.ts +++ b/packages/vc-export/src/KiltCredentialV1.ts @@ -26,134 +26,24 @@ import { KILT_ATTESTER_DELEGATION_V1_TYPE, KILT_ATTESTER_LEGITIMATION_V1_TYPE, KILT_CREDENTIAL_TYPE, + W3C_CREDENTIAL_TYPE, spiritnetGenesisHash, } from './constants.js' import type { - JsonSchemaValidator2018, KiltAttesterDelegationV1, KiltAttesterLegitimationV1, KiltCredentialV1, } from './types.js' -import { credentialIdFromRootHash } from './common.js' - -interface CredentialInput { - subject: DidUri - claims: ICredential['claim']['contents'] - cType: ICType | ICType['$id'] - issuer: DidUri - timestamp: number - chainGenesisHash?: Uint8Array - claimHash?: ICredential['rootHash'] - legitimations?: Array - delegationId?: IDelegationNode['id'] -} -interface CredentialInputWithRootHash extends CredentialInput { - claimHash: ICredential['rootHash'] -} - -export function fromInput( - input: CredentialInputWithRootHash -): Omit -/** - * Produces a KiltCredentialV1 from input data. - * - * @param input Container for input data. - * @param input.subject Did of the credential subject (claimer). - * @param input.claims A record of claims about the subject. - * @param input.cType The CType (or alternatively its id) to which the claims conform. - * @param input.issuer The issuer of the credential. - * @param input.timestamp Timestamp of a block at which the credential can be verified, in milliseconds since January 1, 1970, UTC (UNIX epoch). - * @param input.chainGenesisHash Optional: Genesis hash of the chain against which this credential is verifiable. Defaults to the spiritnet genesis hash. - * @param input.claimHash Optional: digest of the credential contents needed to produce a credential id. - * @param input.legitimations Optional: array of credentials (or credential ids) which function as legitimations to this credential. - * @param input.delegationId Optional: the id of a delegation node which was used in attesting this credential. - * @returns A VerfiableCredential (without proof) conforming to the KiltCredentialV1 data model. The `id` is omitted if no `claimHash` was specified. - */ -export function fromInput({ - claimHash, - subject, - claims, - cType, - issuer, - timestamp, - chainGenesisHash = spiritnetGenesisHash, - legitimations, - delegationId, -}: CredentialInput): Omit< - KiltCredentialV1, - 'proof' | 'id' | 'credentialStatus' -> { - // write root hash to id - const id = credentialIdFromRootHash(hexToU8a(claimHash)) - - const cTypeId = typeof cType === 'object' ? cType.$id : cType - // transform & annotate claim to be json-ld and VC conformant - const credentialSubject = { - '@context': { '@vocab': `${cTypeId}#` }, - id: subject, - } - - Object.entries(claims).forEach(([key, claim]) => { - if (key.startsWith('@') || key === 'id' || key === 'type') { - credentialSubject[`${cTypeId}#${key}`] = claim - } else { - credentialSubject[key] = claim - } - }) - - const credentialSchema: JsonSchemaValidator2018 = { - id: cTypeId, - type: JSON_SCHEMA_TYPE, - } - if (typeof cType === 'object') { - credentialSchema.name = cType.title - credentialSchema.schema = cType - } - - const federatedTrustModel: KiltCredentialV1['federatedTrustModel'] = [] - legitimations?.forEach((legitimation) => { - const type = KILT_ATTESTER_LEGITIMATION_V1_TYPE - const entry: KiltAttesterLegitimationV1 = - typeof legitimation === 'object' - ? { - id: legitimation.id, - type, - verifiableCredential: legitimation, - } - : { - id: legitimation, - type, - } - federatedTrustModel.push(entry) - }) - if (delegationId) { - const delegation: KiltAttesterDelegationV1 = { - id: `kilt:delegation/${base58Encode(hexToU8a(delegationId))}`, - type: KILT_ATTESTER_DELEGATION_V1_TYPE, - } - federatedTrustModel.push(delegation) - } - - const issuanceDate = new Date(timestamp).toISOString() - - return { - '@context': DEFAULT_CREDENTIAL_CONTEXTS, - type: DEFAULT_CREDENTIAL_TYPES, - ...(id && { id }), - nonTransferable: true, - credentialSubject, - credentialSchema, - issuer, - issuanceDate, - ...(claimHash && { - credentialStatus: fromGenesisAndRootHash(chainGenesisHash, claimHash), - }), - ...(federatedTrustModel.length > 0 && { federatedTrustModel }), - } -} +import { + credentialIdFromRootHash, + jsonLdExpandCredentialSubject, +} from './common.js' export const credentialSchema: JsonSchema.Schema = { + $id: 'ipfs://QmRpbcBsAPLCKUZSNncPiMxtVfM33UBmudaCMQV9K3FD5z', $schema: 'http://json-schema.org/draft-07/schema#', + name: 'KiltCredentialV1', + description: 'Verifiable Credential of KiltCredentialV1 type', type: 'object', properties: { '@context': { @@ -163,9 +53,13 @@ export const credentialSchema: JsonSchema.Schema = { type: { type: 'array', uniqueItems: true, - minItems: 2, - maxItems: 2, - items: { enum: DEFAULT_CREDENTIAL_TYPES }, + minItems: 3, + maxItems: 3, + allOf: [ + { contains: { const: W3C_CREDENTIAL_TYPE } }, + { contains: { const: KILT_CREDENTIAL_TYPE } }, + { contains: { type: 'string', pattern: '^kilt:ctype:0x[0-9a-f]+$' } }, + ], }, id: { type: 'string', @@ -233,7 +127,6 @@ export const credentialSchema: JsonSchema.Schema = { type: 'string', const: JSON_SCHEMA_TYPE, }, - schema: { $ref: CType.Schemas.CTypeModel.$id }, }, required: ['id', 'type'], }, @@ -274,6 +167,14 @@ schemaValidator.addSchema(CType.Schemas.CTypeModel, 'kilt.schemas/CTypeModel') export function validateStructure( credential: Omit ): void { + if ( + credential?.credentialSchema?.type !== JSON_SCHEMA_TYPE || + credential?.credentialSchema?.id !== credentialSchema.$id + ) { + throw new Error( + `A ${KILT_CREDENTIAL_TYPE} type credential must have a credentialSchema of type ${JSON_SCHEMA_TYPE} and id ${credentialSchema.$id}` + ) + } const { errors, valid } = schemaValidator.validate(credential) if (!valid) throw new CredentialMalformedError( @@ -284,6 +185,116 @@ export function validateStructure( ) } +interface CredentialInput { + subject: DidUri + claims: ICredential['claim']['contents'] + cType: ICType | ICType['$id'] + issuer: DidUri + timestamp: number + chainGenesisHash?: Uint8Array + claimHash?: ICredential['rootHash'] + legitimations?: Array + delegationId?: IDelegationNode['id'] +} +interface CredentialInputWithRootHash extends CredentialInput { + claimHash: ICredential['rootHash'] +} + +export function fromInput( + input: CredentialInputWithRootHash +): Omit +/** + * Produces a KiltCredentialV1 from input data. + * + * @param input Container for input data. + * @param input.subject Did of the credential subject (claimer). + * @param input.claims A record of claims about the subject. + * @param input.cType The CType (or alternatively its id) to which the claims conform. + * @param input.issuer The issuer of the credential. + * @param input.timestamp Timestamp of a block at which the credential can be verified, in milliseconds since January 1, 1970, UTC (UNIX epoch). + * @param input.chainGenesisHash Optional: Genesis hash of the chain against which this credential is verifiable. Defaults to the spiritnet genesis hash. + * @param input.claimHash Optional: digest of the credential contents needed to produce a credential id. + * @param input.legitimations Optional: array of credentials (or credential ids) which function as legitimations to this credential. + * @param input.delegationId Optional: the id of a delegation node which was used in attesting this credential. + * @returns A VerfiableCredential (without proof) conforming to the KiltCredentialV1 data model. The `id` is omitted if no `claimHash` was specified. + */ +export function fromInput({ + claimHash, + subject, + claims, + cType, + issuer, + timestamp, + chainGenesisHash = spiritnetGenesisHash, + legitimations, + delegationId, +}: CredentialInput): Omit< + KiltCredentialV1, + 'proof' | 'id' | 'credentialStatus' +> { + // write root hash to id + const id = credentialIdFromRootHash(hexToU8a(claimHash)) + + const cTypeId = typeof cType === 'object' ? cType.$id : cType + // transform & annotate claim to be json-ld and VC conformant + const credentialSubject = { + '@context': { '@vocab': `${cTypeId}#` }, + id: subject, + } + + Object.entries(claims).forEach(([key, claim]) => { + if (key.startsWith('@') || key === 'id' || key === 'type') { + credentialSubject[`${cTypeId}#${key}`] = claim + } else { + credentialSubject[key] = claim + } + }) + + const federatedTrustModel: KiltCredentialV1['federatedTrustModel'] = [] + legitimations?.forEach((legitimation) => { + const type = KILT_ATTESTER_LEGITIMATION_V1_TYPE + const entry: KiltAttesterLegitimationV1 = + typeof legitimation === 'object' + ? { + id: legitimation.id, + type, + verifiableCredential: legitimation, + } + : { + id: legitimation, + type, + } + federatedTrustModel.push(entry) + }) + if (delegationId) { + const delegation: KiltAttesterDelegationV1 = { + id: `kilt:delegation/${base58Encode(hexToU8a(delegationId))}`, + type: KILT_ATTESTER_DELEGATION_V1_TYPE, + } + federatedTrustModel.push(delegation) + } + + const issuanceDate = new Date(timestamp).toISOString() + + return { + '@context': DEFAULT_CREDENTIAL_CONTEXTS, + type: [...DEFAULT_CREDENTIAL_TYPES, cTypeId], + ...(id && { id }), + nonTransferable: true, + credentialSubject, + credentialSchema: { + id: credentialSchema.$id as string, + type: JSON_SCHEMA_TYPE, + }, + issuer, + issuanceDate, + ...(claimHash && { + credentialStatus: fromGenesisAndRootHash(chainGenesisHash, claimHash), + }), + ...(federatedTrustModel.length > 0 && { federatedTrustModel }), + } +} + /** * Transforms an [[ICredential]] object to conform to the KiltCredentialV1 data model. * @@ -332,3 +343,97 @@ export function fromICredential( return vc } + +export type CTypeLoader = (id: ICType['$id']) => Promise + +const loadCType: CTypeLoader = async (id) => { + return (await CType.fetchFromChain(id)).ctype +} + +/** + * A factory for a CType loader that caches a CType definition once it has been loaded. + * Used in validating the credentialSubject of a [[KiltCredentialV1]] against the Claim Type referenced in its `type` field. + * + * @param initialCTypes An array of CTypes with which the cache is to be initialized. + * @returns A function that takes a CType id and looks up a CType definition in an internal cache, and if not found, tries to fetch it from the KILT blochchain. + */ +export function newCachingCTypeLoader( + initialCTypes: ICType[] = [] +): CTypeLoader { + const ctypes: Map = new Map() + + initialCTypes.forEach((ctype) => { + ctypes.set(ctype.$id, ctype) + }) + + async function getCType(id: ICType['$id']): Promise { + const ctype: ICType = ctypes.get(id) ?? (await loadCType(id)) + ctypes.set(ctype.$id, ctype) + return ctype + } + return getCType +} + +const cachingCTypeLoader = newCachingCTypeLoader() + +/** + * Validates the claims in the VC's `credentialSubject` against a CType definition. + * + * @param credential A [[KiltCredentialV1]] type verifiable credential. + * @param credential.credentialSubject The credentialSubject to be validated. + * @param credential.type The credential's types. + * @param options Options map. + * @param options.cTypes One or more CType definitions to be used for validation. If `loadCTypes` is set to `false`, validation will fail if the definition of the credential's CType is not given. + * @param options.loadCTypes A function to load CType definitions that are not in `cTypes`. Defaults to using the [[CachingCTypeLoader]]. If set to `false` or `undefined`, no additional CTypes will be loaded. + */ +export async function validateSubject( + { + credentialSubject, + type, + }: Pick, + { + cTypes = [], + loadCTypes = cachingCTypeLoader, + }: { cTypes?: ICType[]; loadCTypes?: false | CTypeLoader } = {} +): Promise { + // get CType id referenced in credential + const credentialsCTypeId = type.find((str) => + str.startsWith('kilt:ctype:') + ) as ICType['$id'] + if (!credentialsCTypeId) { + throw new Error('credential type does not contain a valid CType id') + } + // check that we have access to the right schema + let cType = cTypes?.find(({ $id }) => $id === credentialsCTypeId) + if (!cType) { + if (typeof loadCTypes !== 'function') { + throw new Error( + `The definition for this credential's CType ${credentialsCTypeId} has not been passed to the validator and CType loading has been disabled` + ) + } + cType = await loadCTypes(credentialsCTypeId) + if (cType.$id !== credentialsCTypeId) { + throw new Error('failed to load correct CType') + } + } + + // normalize credential subject to form expected by CType schema + const expandedClaims: Record = + jsonLdExpandCredentialSubject(credentialSubject) + delete expandedClaims['@id'] + + const vocab = `${cType.$id}#` + const claims = Object.entries(expandedClaims).reduce((obj, [key, value]) => { + if (!key.startsWith(vocab)) { + throw new Error( + `The credential contains claims which do not follow the expected CType: ${key}` + ) + } + return { + ...obj, + [key.substring(vocab.length)]: value, + } + }, {}) + // validates against CType (also validates CType schema itself) + CType.verifyClaimAgainstSchema(claims, cType) +} diff --git a/packages/vc-export/src/KiltRevocationStatusV1.ts b/packages/vc-export/src/KiltRevocationStatusV1.ts index 0aa4157a8..b5a518699 100644 --- a/packages/vc-export/src/KiltRevocationStatusV1.ts +++ b/packages/vc-export/src/KiltRevocationStatusV1.ts @@ -65,7 +65,7 @@ export async function check( const delegationId = getDelegationNodeIdForCredential(credential) if ( decoded.owner !== credential.issuer || - onChainCType !== credential.credentialSchema.id || + !credential.type.includes(onChainCType) || !u8aEq( delegationId ?? new Uint8Array(), decoded.delegationId ?? new Uint8Array() diff --git a/packages/vc-export/src/constants.ts b/packages/vc-export/src/constants.ts index 6285c9c8b..f19e4bf41 100644 --- a/packages/vc-export/src/constants.ts +++ b/packages/vc-export/src/constants.ts @@ -53,7 +53,7 @@ export const KILT_ATTESTER_LEGITIMATION_V1_TYPE = 'KiltAttesterLegitimationV1' export const KILT_ATTESTER_DELEGATION_V1_TYPE = 'KiltAttesterDelegationV1' -export const JSON_SCHEMA_TYPE = 'JsonSchemaValidator2018' +export const JSON_SCHEMA_TYPE = 'JsonSchema2023' export const KILT_CREDENTIAL_IRI_PREFIX = 'kilt:credential:' diff --git a/packages/vc-export/src/exportToVerifiableCredential.spec.ts b/packages/vc-export/src/exportToVerifiableCredential.spec.ts index 193bc661f..f8afff985 100644 --- a/packages/vc-export/src/exportToVerifiableCredential.spec.ts +++ b/packages/vc-export/src/exportToVerifiableCredential.spec.ts @@ -16,7 +16,10 @@ import { Credential } from '@kiltprotocol/core' import { ApiMocks } from '@kiltprotocol/testing' import type { IAttestation, ICType, ICredential } from '@kiltprotocol/types' -import { validateStructure as validateCredentialStructure } from './KiltCredentialV1' +import { + credentialSchema, + validateStructure as validateCredentialStructure, +} from './KiltCredentialV1' import { exportICredentialToVc } from './fromICredential' import { DEFAULT_CREDENTIAL_CONTEXTS, @@ -159,7 +162,7 @@ it('exports credential to VC', () => { }) expect(exported).toMatchObject({ '@context': DEFAULT_CREDENTIAL_CONTEXTS, - type: DEFAULT_CREDENTIAL_TYPES, + type: [...DEFAULT_CREDENTIAL_TYPES, cType.$id], credentialSubject: { id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', birthday: '1991-01-01', @@ -185,29 +188,10 @@ it('VC has correct format (full example)', () => { }) ).toMatchObject({ '@context': DEFAULT_CREDENTIAL_CONTEXTS, - type: DEFAULT_CREDENTIAL_TYPES, + type: [...DEFAULT_CREDENTIAL_TYPES, cType.$id], credentialSchema: { - id: expect.any(String), - type: 'JsonSchemaValidator2018', - name: 'membership', - schema: { - $id: expect.any(String), - $schema: 'http://kilt-protocol.org/draft-01/ctype#', - properties: { - birthday: { - format: 'date', - type: 'string', - }, - name: { - type: 'string', - }, - premium: { - type: 'boolean', - }, - }, - title: 'membership', - type: 'object', - }, + id: credentialSchema.$id, + type: 'JsonSchema2023', }, credentialSubject: { '@context': { diff --git a/packages/vc-export/src/index.ts b/packages/vc-export/src/index.ts index 08ba83c3d..0fbdf8617 100644 --- a/packages/vc-export/src/index.ts +++ b/packages/vc-export/src/index.ts @@ -13,7 +13,6 @@ export * from './fromICredential.js' export * as KiltCredentialV1 from './KiltCredentialV1.js' export * as KiltAttestationProofV1 from './KiltAttestationProofV1.js' export * as KiltRevocationStatusV1 from './KiltRevocationStatusV1.js' -export * as CredentialSchema from './CredentialSchema.js' export * as Presentation from './Presentation.js' export * as DidJWT from './DidJwt.js' export * as vcjs from './vc-js/index.js' diff --git a/packages/vc-export/src/types.ts b/packages/vc-export/src/types.ts index c6a1b4b46..2d439bdd8 100644 --- a/packages/vc-export/src/types.ts +++ b/packages/vc-export/src/types.ts @@ -8,21 +8,21 @@ /* eslint-disable no-use-before-define */ import type { - ICType, ConformingDidKey, DidUri, Caip2ChainId, IClaimContents, + ICType, } from '@kiltprotocol/types' import type { ATTESTATION_PROOF_V1_TYPE, DEFAULT_CREDENTIAL_CONTEXTS, - DEFAULT_CREDENTIAL_TYPES, JSON_SCHEMA_TYPE, KILT_ATTESTER_DELEGATION_V1_TYPE, KILT_ATTESTER_LEGITIMATION_V1_TYPE, KILT_CREDENTIAL_IRI_PREFIX, + KILT_CREDENTIAL_TYPE, KILT_REVOCATION_STATUS_V1_TYPE, W3C_CREDENTIAL_CONTEXT_URL, W3C_CREDENTIAL_TYPE, @@ -108,15 +108,9 @@ export interface KiltAttestationProofV1 extends Proof { salt: string[] } -export interface JsonSchemaValidator2018 { +export interface JsonSchema2023 { id: string type: typeof JSON_SCHEMA_TYPE - schema?: ICType - modelVersion?: string - name?: string - author?: string - authored?: string - // proof?: Proof } export interface KiltRevocationStatusV1 { @@ -160,7 +154,9 @@ export interface KiltCredentialV1 extends VerifiableCredential { /** * The credential types, which declare what data to expect in the credential. */ - type: typeof DEFAULT_CREDENTIAL_TYPES + type: Array< + typeof W3C_CREDENTIAL_TYPE | typeof KILT_CREDENTIAL_TYPE | ICType['$id'] + > /** * Claims about the subjects of the credential. */ @@ -176,7 +172,7 @@ export interface KiltCredentialV1 extends VerifiableCredential { /** * Contains json schema for the validation of credentialSubject claims. */ - credentialSchema: JsonSchemaValidator2018 + credentialSchema: JsonSchema2023 /** * Contains credentials status method. */ diff --git a/packages/vc-export/src/vc-js/context/context.ts b/packages/vc-export/src/vc-js/context/context.ts index a142113d2..a6ea7f547 100644 --- a/packages/vc-export/src/vc-js/context/context.ts +++ b/packages/vc-export/src/vc-js/context/context.ts @@ -148,5 +148,14 @@ export const context = { }, }, }, + JsonSchema2023: { + '@id': 'https://www.w3.org/ns/credentials#JsonSchema2023', + '@context': { + '@version': 1.1, + '@protected': true, + + id: '@id', + }, + }, }, } diff --git a/packages/vc-export/src/vc-js/documentLoader.ts b/packages/vc-export/src/vc-js/documentLoader.ts index d14cf68a6..7acd20df9 100644 --- a/packages/vc-export/src/vc-js/documentLoader.ts +++ b/packages/vc-export/src/vc-js/documentLoader.ts @@ -19,10 +19,12 @@ import type { ConformingDidDocument, ConformingDidKey, DidUri, + ICType, } from '@kiltprotocol/types' import { validationContexts } from './context/index.js' import { Sr25519VerificationKey2020 } from './suites/Sr25519VerificationKey.js' +import { newCachingCTypeLoader } from '../KiltCredentialV1.js' export type JsonLdObj = Record export interface RemoteDocument { @@ -128,6 +130,12 @@ export const kiltDidLoader: DocumentLoader = async (url) => { return { contextUrl: undefined, documentUrl: url, document } } +const loader = newCachingCTypeLoader() +export const kiltCTypeLoader: DocumentLoader = async (id) => { + const document = (await loader(id as ICType['$id'])) as JsonLdObj & ICType + return { contextUrl: undefined, documentUrl: id, document } +} + /** * Document loader that provides access to the JSON-LD contexts required for verifying Kilt VCs. * Essentially wraps the vc-js defaultDocumentLoader, but additionally loads KILTs [[validationContexts]] & [[DID_CONTEXTS]]. @@ -138,4 +146,5 @@ export const kiltDidLoader: DocumentLoader = async (url) => { export const defaultDocumentLoader: DocumentLoader = combineDocumentLoaders([ kiltContextsLoader, kiltDidLoader, + kiltCTypeLoader, ]) diff --git a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts b/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts index 92ad52687..c8f4b80c7 100644 --- a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts +++ b/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts @@ -27,6 +27,7 @@ import * as Did from '@kiltprotocol/did' import { Crypto } from '@kiltprotocol/utils' import type { ConformingDidDocument, + ICType, IClaim, ICredential, KiltKeyringPair, @@ -49,6 +50,7 @@ import { Sr25519Signature2020 } from './Sr25519Signature2020.js' import { KiltAttestationV1Suite } from './KiltAttestationProofV1.js' import ingosCredential from '../examples/ICredentialExample.json' import { + cType, makeAttestationCreatedEvents, mockedApi, } from '../../exportToVerifiableCredential.spec.js' @@ -141,9 +143,21 @@ jest .mocked(mockedApi.query.timestamp.now) .mockResolvedValue(mockedApi.createType('u64', timestamp) as any) +const emailCType: ICType = { + $schema: 'http://kilt-protocol.org/draft-01/ctype#', + properties: { + Email: { + type: 'string', + }, + }, + title: 'Email', + type: 'object', + $id: 'kilt:ctype:0x3291bb126e33b4862d421bfaa1d2f272e6cdfc4f96658988fbcffea8914bd9ac', +} + const documentLoader = combineDocumentLoaders([ - kiltDidLoader, kiltContextsLoader, + kiltDidLoader, vcjs.defaultDocumentLoader, ]) @@ -154,7 +168,10 @@ let keypair: KiltKeyringPair let didDocument: ConformingDidDocument beforeAll(async () => { - suite = new KiltAttestationV1Suite({ api: mockedApi }) + suite = new KiltAttestationV1Suite({ + api: mockedApi, + ctypes: [cType, emailCType], + }) purpose = new KiltAttestationProofV1Purpose() proof = attestedVc.proof as KiltAttestationProofV1 ;({ keypair, didDocument } = await makeFakeDid()) diff --git a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts b/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts index b11782de9..52a87f86d 100644 --- a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts +++ b/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts @@ -14,6 +14,9 @@ import type { ApiPromise } from '@polkadot/api' // @ts-expect-error not a typescript module import jsigs from 'jsonld-signatures' // cjs module +import { CType } from '@kiltprotocol/core' +import type { ICType } from '@kiltprotocol/types' + import { AttestationHandler, calculateRootHash, @@ -33,8 +36,9 @@ import type { Proof, KiltCredentialV1, } from '../../types.js' +import type { CTypeLoader } from '../../KiltCredentialV1.js' import type { JSigsVerificationResult } from './types.js' -import type { JsonLdObj } from '../documentLoader.js' +import type { DocumentLoader, JsonLdObj } from '../documentLoader.js' const { suites: { LinkedDataProof }, @@ -43,11 +47,13 @@ const { interface CallArgs { proof: Proof document?: JsonLdObj + documentLoader?: DocumentLoader [key: string]: unknown } export class KiltAttestationV1Suite extends LinkedDataProof { private api: ApiPromise + private ctypes: ICType[] private transactionHandler?: AttestationHandler private pendingSubmissions = new Map>() @@ -59,13 +65,16 @@ export class KiltAttestationV1Suite extends LinkedDataProof { constructor({ api, + ctypes = [], transactionHandler, }: { api: ApiPromise + ctypes?: ICType[] transactionHandler?: AttestationHandler }) { super({ type: ATTESTATION_PROOF_V1_TYPE }) this.api = api + this.ctypes = ctypes this.transactionHandler = transactionHandler this.verificationMethod = chainIdFromGenesis(api.genesisHash) } @@ -108,7 +117,20 @@ export class KiltAttestationV1Suite extends LinkedDataProof { // TODO: do we have to compact first in order to allow credentials in non-canonical (non-compacted) form? const proof = options.proof as KiltAttestationProofV1 const document = options.document as unknown as KiltCredentialV1 - await verifyProof(document, proof, { api: this.api }) + const loadCTypes: CTypeLoader = async (id) => { + const { document: ctype } = (await options.documentLoader?.(id)) ?? {} + if (!CType.isICType(ctype)) { + throw new Error( + `documentLoader failed to resolve to valid CType for ${id}` + ) + } + return ctype + } + await verifyProof(document, proof, { + api: this.api, + loadCTypes, + cTypes: this.ctypes, + }) return { verified: true, } From cdd99be4c411505f761e31f35811c6152f0e64e4 Mon Sep 17 00:00:00 2001 From: Github Action Date: Fri, 14 Jul 2023 09:38:30 +0000 Subject: [PATCH 065/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 9ab120eb3..a965cdc49 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.33.2-3", + "version": "0.33.2-4", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index b93daf462..7a9671f92 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.33.2-3", + "version": "0.33.2-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 3962afc2d..0bb335e4e 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.33.2-3", + "version": "0.33.2-4", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 5a6608b91..eca5cf63a 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.33.2-3", + "version": "0.33.2-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index a7ff73ad2..f8739eaba 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.33.2-3", + "version": "0.33.2-4", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index e5ddc1492..badd1e6ec 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.33.2-3", + "version": "0.33.2-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index d9e463af7..a540ffbef 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.33.2-3", + "version": "0.33.2-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index 6897d8121..cce406d47 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.33.2-3", + "version": "0.33.2-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 27a2742b6..ccf50c8d8 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.33.2-3", + "version": "0.33.2-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 50e85a812..5c1739ecb 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.33.2-3", + "version": "0.33.2-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 8cc8cfb91..e1c391507 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.33.2-3", + "version": "0.33.2-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 30446b68c..905551674 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.33.2-3", + "version": "0.33.2-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index fc9b0f9b8..20ab15b6f 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.33.2-3", + "version": "0.33.2-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 5b24a56d5..e7c151d26 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.33.2-3", + "version": "0.33.2-4", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From e186bedbad25b7c9ac9c1d06a20d6ac6b05d2266 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Wed, 19 Jul 2023 12:40:07 +0200 Subject: [PATCH 066/130] refactor: improve vc export api surface (#770) * fix: omit credential id if no root hash is passed to fromInput * refactor!: anchorCredential first, then call createProof * refactor!: remove api parameter from issue * refactor!: align `issue` signature with `anchorCredential` * refactor: improve typings & error handling --------- Co-authored-by: Antonio --- packages/vc-export/package.json | 1 + .../vc-export/src/CTypeVerification.spec.ts | 2 +- .../vc-export/src/KiltAttestationProofV1.ts | 105 ++++++++---- packages/vc-export/src/KiltCredentialV1.ts | 27 ++- .../src/exportToVerifiableCredential.spec.ts | 4 +- .../suites/KiltAttestationProofV1.spec.ts | 148 ++++++++-------- .../vc-js/suites/KiltAttestationProofV1.ts | 158 +++++++++--------- yarn.lock | 1 + 8 files changed, 247 insertions(+), 199 deletions(-) diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index e7c151d26..fc263f7d4 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -37,6 +37,7 @@ "typescript": "^4.8.3" }, "dependencies": { + "@kiltprotocol/chain-helpers": "workspace:*", "@kiltprotocol/config": "workspace:*", "@kiltprotocol/core": "workspace:*", "@kiltprotocol/did": "workspace:*", diff --git a/packages/vc-export/src/CTypeVerification.spec.ts b/packages/vc-export/src/CTypeVerification.spec.ts index cf27e5470..f526e045f 100644 --- a/packages/vc-export/src/CTypeVerification.spec.ts +++ b/packages/vc-export/src/CTypeVerification.spec.ts @@ -34,7 +34,7 @@ beforeAll(() => { issuer: attester, blockHash, timestamp, - cType, + cType: cType.$id, }) }) diff --git a/packages/vc-export/src/KiltAttestationProofV1.ts b/packages/vc-export/src/KiltAttestationProofV1.ts index 21bd294d8..55c25ef56 100644 --- a/packages/vc-export/src/KiltAttestationProofV1.ts +++ b/packages/vc-export/src/KiltAttestationProofV1.ts @@ -28,7 +28,7 @@ import type { Extrinsic, Hash, } from '@polkadot/types/interfaces/types.js' -import type { IEventData } from '@polkadot/types/types' +import type { IEventData, Signer } from '@polkadot/types/types' import { CType } from '@kiltprotocol/core' import { @@ -39,6 +39,7 @@ import { } from '@kiltprotocol/did' import { JsonSchema, SDKErrors } from '@kiltprotocol/utils' import { ConfigService } from '@kiltprotocol/config' +import { Blockchain } from '@kiltprotocol/chain-helpers' import type { FrameSystemEventRecord, RuntimeCommonAuthorizationAuthorizationId, @@ -49,7 +50,7 @@ import type { ICType, IDelegationNode, KiltAddress, - SignCallback, + SignExtrinsicCallback, } from '@kiltprotocol/types' import { Caip19 } from './CAIP/index.js' @@ -571,6 +572,11 @@ export function applySelectiveDisclosure( } } +export type UnissuedCredential = Omit< + KiltCredentialV1, + 'proof' | 'id' | 'credentialStatus' | 'issuanceDate' +> + /** * Initialize a new, prelimiary [[KiltAttestationProofV1]], which is the first step in issuing a new credential. * @@ -585,17 +591,29 @@ export function applySelectiveDisclosure( * @returns A tuple where the first entry is the (partial) proof object and the second entry are the arguments required to create an extrinsic that anchors the proof on the KILT blockchain. */ export function initializeProof( - credential: Omit + credential: UnissuedCredential ): [ KiltAttestationProofV1, Parameters ] { - const { credentialSubject, nonTransferable, type } = credential + const { credentialSubject, nonTransferable } = credential if (nonTransferable !== true) { throw new Error('nonTransferable must be set to true') } + const type = credential.type.find((str): str is ICType['$id'] => + str.startsWith('kilt:ctype:') + ) + if (!type) { + throw new Error('A CType id is required in the set of credential types') + } + if (`${type}#` !== credentialSubject['@context']['@vocab']) { + throw new Error( + `The credential type ${type} does not match credentialSubject vocabulary ${credentialSubject['@context']['@vocab']}` + ) + } + // 1. json-ld expand credentialSubject const expandedContents = jsonLdExpandCredentialSubject(credentialSubject) // 2. Transform to normalized statments and hash @@ -623,9 +641,7 @@ export function initializeProof( proof, [ rootHash, - CType.idToHash( - type.find((str) => str.startsWith('kilt:ctype:')) as ICType['$id'] - ), + CType.idToHash(type), delegationId && { Delegation: delegationId }, ], ] @@ -650,7 +666,7 @@ export function initializeProof( * @returns The credential where `id`, `credentialStatus`, and `issuanceDate` have been updated based on the on-chain attestation record, containing a finalized proof. */ export function finalizeProof( - credential: Omit, + credential: UnissuedCredential, proof: KiltAttestationProofV1, { blockHash, @@ -676,53 +692,72 @@ export type AttestationHandler = ( timestamp?: number }> +export interface DidSigner { + did: DidUri + signer: SignExtrinsicCallback +} + +export type TxHandler = { + account: KiltAddress + signAndSubmit?: AttestationHandler + signer?: Signer +} + +export type IssueOpts = { + didSigner: DidSigner + transactionHandler: TxHandler +} & Parameters[4] + +function makeDefaultTxSubmit( + transactionHandler: TxHandler +): AttestationHandler { + return async (tx, api) => { + const signed = await api.tx(tx).signAsync(transactionHandler.account, { + signer: transactionHandler.signer, + }) + const result = await Blockchain.submitSignedTx(signed, { + resolveOn: Blockchain.IS_FINALIZED, + }) + const blockHash = result.status.asFinalized + return { blockHash } + } +} + /** * * Creates a complete [[KiltAttestationProofV1]] for issuing a new credential. * * @param credential A [[KiltCredentialV1]] for which a proof shall be created. * @param opts Additional parameters. - * @param opts.did The attester's DID URI. - * @param opts.didSigner A signing callback to create the attester's signature over the transaction to store an attestation record on-chain. - * @param opts.submitterAddress The address of the wallet that's going to cover the transaction fees. - * @param opts.txSubmissionHandler Callback function handling extrinsic submission. - * It receives an unsigned extrinsic and is expected to return the `blockHash` and `timestamp` when the extrinsic was included in a block. + * @param opts.didSigner Object containing the attester's `did` and a `signer` callback which authorizes the on-chain anchoring of the credential with the attester's signature. + * @param opts.transactionHandler Object containing the submitter `address` that's going to cover the transaction fees as well as either a `signer` or `signAndSubmit` callback handling extrinsic signing and submission. + * The signAndSubmit callback receives an unsigned extrinsic and is expected to return the `blockHash` and (optionally) `timestamp` when the extrinsic was included in a block. * This callback must thus take care of signing and submitting the extrinsic to the KILT blockchain as well as noting the inclusion block. - * If no `timestamp` is returned by the callback, the timestamp is queried from the blockchain based on the block hash. - * @param opts.api A polkadot-js/api instance connected to the blockchain network on which the credential shall be anchored. + * If only the `signer` is given, a default callback will be constructed to take care of submitting the signed extrinsic using the cached blockchain api object. * @returns The credential where `id`, `credentialStatus`, and `issuanceDate` have been updated based on the on-chain attestation record, containing a finalized proof. */ export async function issue( - credential: KiltCredentialV1, - { - did, - didSigner, - submitterAddress, - txSubmissionHandler, - api = ConfigService.get('api'), - ...otherParams - }: { - didSigner: SignCallback - did: DidUri - submitterAddress: KiltAddress - txSubmissionHandler: AttestationHandler - api?: ApiPromise - } & Parameters[4] + credential: Omit, + { didSigner, transactionHandler, ...otherParams }: IssueOpts ): Promise { - const [proof, callArgs] = initializeProof(credential) + const updatedCredential = { ...credential, issuer: didSigner.did } + const [proof, callArgs] = initializeProof(updatedCredential) + const api = ConfigService.get('api') const call = api.tx.attestation.add(...callArgs) + const txSubmissionHandler = + transactionHandler.signAndSubmit ?? makeDefaultTxSubmit(transactionHandler) const didSigned = await authorizeTx( - did, + didSigner.did, call, - didSigner, - submitterAddress, + didSigner.signer, + transactionHandler.account, otherParams ) const { blockHash, timestamp = (await api.query.timestamp.now.at(blockHash)).toNumber(), } = await txSubmissionHandler(didSigned, api) - return finalizeProof(credential, proof, { + return finalizeProof(updatedCredential, proof, { blockHash, timestamp, genesisHash: api.genesisHash, diff --git a/packages/vc-export/src/KiltCredentialV1.ts b/packages/vc-export/src/KiltCredentialV1.ts index e6e1ae1d4..8e363e737 100644 --- a/packages/vc-export/src/KiltCredentialV1.ts +++ b/packages/vc-export/src/KiltCredentialV1.ts @@ -188,9 +188,9 @@ export function validateStructure( interface CredentialInput { subject: DidUri claims: ICredential['claim']['contents'] - cType: ICType | ICType['$id'] + cType: ICType['$id'] issuer: DidUri - timestamp: number + timestamp?: number chainGenesisHash?: Uint8Array claimHash?: ICredential['rootHash'] legitimations?: Array @@ -203,6 +203,9 @@ interface CredentialInputWithRootHash extends CredentialInput { export function fromInput( input: CredentialInputWithRootHash ): Omit +export function fromInput( + input: CredentialInput +): Omit /** * Produces a KiltCredentialV1 from input data. * @@ -219,32 +222,28 @@ export function fromInput( * @returns A VerfiableCredential (without proof) conforming to the KiltCredentialV1 data model. The `id` is omitted if no `claimHash` was specified. */ export function fromInput({ - claimHash, subject, claims, cType, issuer, - timestamp, + timestamp = Date.now(), chainGenesisHash = spiritnetGenesisHash, + claimHash, legitimations, delegationId, }: CredentialInput): Omit< KiltCredentialV1, 'proof' | 'id' | 'credentialStatus' > { - // write root hash to id - const id = credentialIdFromRootHash(hexToU8a(claimHash)) - - const cTypeId = typeof cType === 'object' ? cType.$id : cType // transform & annotate claim to be json-ld and VC conformant const credentialSubject = { - '@context': { '@vocab': `${cTypeId}#` }, + '@context': { '@vocab': `${cType}#` }, id: subject, } Object.entries(claims).forEach(([key, claim]) => { if (key.startsWith('@') || key === 'id' || key === 'type') { - credentialSubject[`${cTypeId}#${key}`] = claim + credentialSubject[`${cType}#${key}`] = claim } else { credentialSubject[key] = claim } @@ -278,19 +277,19 @@ export function fromInput({ return { '@context': DEFAULT_CREDENTIAL_CONTEXTS, - type: [...DEFAULT_CREDENTIAL_TYPES, cTypeId], - ...(id && { id }), + type: [...DEFAULT_CREDENTIAL_TYPES, cType], nonTransferable: true, credentialSubject, credentialSchema: { id: credentialSchema.$id as string, type: JSON_SCHEMA_TYPE, }, - issuer, - issuanceDate, ...(claimHash && { credentialStatus: fromGenesisAndRootHash(chainGenesisHash, claimHash), + id: credentialIdFromRootHash(hexToU8a(claimHash)), }), + issuer, + issuanceDate, ...(federatedTrustModel.length > 0 && { federatedTrustModel }), } } diff --git a/packages/vc-export/src/exportToVerifiableCredential.spec.ts b/packages/vc-export/src/exportToVerifiableCredential.spec.ts index f8afff985..535121e14 100644 --- a/packages/vc-export/src/exportToVerifiableCredential.spec.ts +++ b/packages/vc-export/src/exportToVerifiableCredential.spec.ts @@ -158,7 +158,7 @@ it('exports credential to VC', () => { chainGenesisHash: mockedApi.genesisHash, blockHash, timestamp, - cType, + cType: cType.$id, }) expect(exported).toMatchObject({ '@context': DEFAULT_CREDENTIAL_CONTEXTS, @@ -184,7 +184,7 @@ it('VC has correct format (full example)', () => { chainGenesisHash: mockedApi.genesisHash, blockHash, timestamp, - cType, + cType: cType.$id, }) ).toMatchObject({ '@context': DEFAULT_CREDENTIAL_CONTEXTS, diff --git a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts b/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts index c8f4b80c7..33bd2262c 100644 --- a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts +++ b/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts @@ -23,6 +23,7 @@ import jsigs from 'jsonld-signatures' // cjs module import jsonld from 'jsonld' // cjs module import { Credential } from '@kiltprotocol/core' +import { ConfigService } from '@kiltprotocol/config' import * as Did from '@kiltprotocol/did' import { Crypto } from '@kiltprotocol/utils' import type { @@ -31,10 +32,15 @@ import type { IClaim, ICredential, KiltKeyringPair, + SubmittableExtrinsic, } from '@kiltprotocol/types' import { exportICredentialToVc } from '../../fromICredential.js' -import { applySelectiveDisclosure } from '../../KiltAttestationProofV1.js' +import { + DidSigner, + TxHandler, + applySelectiveDisclosure, +} from '../../KiltAttestationProofV1.js' import { KiltAttestationProofV1Purpose } from '../purposes/KiltAttestationProofV1Purpose.js' import { JsonLdObj, @@ -47,7 +53,10 @@ import { W3C_CREDENTIAL_CONTEXT_URL, } from '../../constants.js' import { Sr25519Signature2020 } from './Sr25519Signature2020.js' -import { KiltAttestationV1Suite } from './KiltAttestationProofV1.js' +import { + CredentialStub, + KiltAttestationV1Suite, +} from './KiltAttestationProofV1.js' import ingosCredential from '../examples/ICredentialExample.json' import { cType, @@ -64,6 +73,7 @@ import { makeFakeDid } from './Sr25519Signature2020.spec' jest.mock('@kiltprotocol/did', () => ({ ...jest.requireActual('@kiltprotocol/did'), resolveCompliant: jest.fn(), + authorizeTx: jest.fn(), })) // is not needed and imports a dependency that does not work in node 18 @@ -156,8 +166,8 @@ const emailCType: ICType = { } const documentLoader = combineDocumentLoaders([ - kiltContextsLoader, kiltDidLoader, + kiltContextsLoader, vcjs.defaultDocumentLoader, ]) @@ -169,7 +179,6 @@ let didDocument: ConformingDidDocument beforeAll(async () => { suite = new KiltAttestationV1Suite({ - api: mockedApi, ctypes: [cType, emailCType], }) purpose = new KiltAttestationProofV1Purpose() @@ -177,6 +186,10 @@ beforeAll(async () => { ;({ keypair, didDocument } = await makeFakeDid()) }) +beforeEach(() => { + ConfigService.set({ api: mockedApi }) +}) + describe('jsigs', () => { describe('proof matching', () => { it('purpose matches compacted proof', async () => { @@ -293,20 +306,6 @@ describe('jsigs', () => { }) }) describe('vc-js', () => { - const mockSuite = new KiltAttestationV1Suite({ - api: { - genesisHash, - query: { - attestation: { - attestations: async () => - mockedApi.createType( - 'Option' - ), - }, - }, - } as any, - }) - describe('attested', () => { it('verifies Kilt Attestation Proof', async () => { const result = await vcjs.verifyCredential({ @@ -411,13 +410,26 @@ describe('vc-js', () => { describe('revoked', () => { it('fails to verify credential', async () => { + ConfigService.set({ + api: { + genesisHash, + query: { + attestation: { + attestations: async () => + mockedApi.createType( + 'Option' + ), + }, + }, + } as any, + }) expect( await vcjs.verifyCredential({ credential: revokedVc, suite, purpose, documentLoader, - checkStatus: mockSuite.checkStatus, + checkStatus: suite.checkStatus, }) ).toMatchObject({ verified: false }) }) @@ -441,35 +453,50 @@ describe('vc-js', () => { describe('issuance', () => { let txArgs: any let issuanceSuite: KiltAttestationV1Suite - let toBeSigned: Partial + let toBeSigned: CredentialStub + + const didSigner: DidSigner = { + did: attestedVc.issuer, + signer: async () => ({ + signature: new Uint8Array(32), + keyType: 'sr25519' as const, + }), + } + const transactionHandler: TxHandler = { + account: attester, + signAndSubmit: async () => { + return { + blockHash, + timestamp, + } + }, + } beforeEach(() => { - issuanceSuite = new KiltAttestationV1Suite({ - api: mockedApi, - transactionHandler: async (tx) => { - txArgs = tx.args - return { - blockHash, - timestamp, - } - }, - }) toBeSigned = { - '@context': attestedVc['@context'], - type: attestedVc.type, credentialSubject: attestedVc.credentialSubject, - credentialSchema: attestedVc.credentialSchema, - nonTransferable: true, - issuer: attestedVc.issuer, } + issuanceSuite = new KiltAttestationV1Suite() + jest + .mocked(Did.authorizeTx) + .mockImplementation(async (...[, extrinsic]) => { + txArgs = extrinsic.args + return extrinsic as SubmittableExtrinsic + }) }) it('issues a credential via vc-js', async () => { - let newCred = (await vcjs.issue({ - credential: { ...toBeSigned }, + let newCred: Partial = + await issuanceSuite.anchorCredential( + { ...toBeSigned }, + didSigner, + transactionHandler + ) + newCred = await vcjs.issue({ + credential: newCred, suite: issuanceSuite, documentLoader, purpose, - })) as KiltCredentialV1 + }) expect(newCred.proof).toMatchObject({ type: 'KiltAttestationProofV1', commitments: expect.any(Array), @@ -477,14 +504,13 @@ describe('issuance', () => { }) expect(newCred).toMatchObject(toBeSigned) - newCred = await issuanceSuite.finalizeProof(newCred) expect(newCred.issuanceDate).toStrictEqual(attestedVc.issuanceDate) expect(newCred.proof?.block).toStrictEqual(attestedVc.proof.block) expect(newCred.credentialStatus).toMatchObject({ id: expect.any(String), type: 'KiltRevocationStatusV1', }) - expect(newCred.credentialStatus.id).not.toMatch( + expect(newCred.credentialStatus?.id).not.toMatch( attestedVc.credentialStatus.id ) expect(newCred.id).not.toMatch(attestedVc.id) @@ -516,9 +542,16 @@ describe('issuance', () => { }) it('adds context if not present', async () => { - const newCred = (await vcjs.issue({ - credential: { + let newCred = await issuanceSuite.anchorCredential( + { ...toBeSigned, + }, + didSigner, + transactionHandler + ) + newCred = (await vcjs.issue({ + credential: { + ...newCred, '@context': [W3C_CREDENTIAL_CONTEXT_URL], }, suite: issuanceSuite, @@ -530,7 +563,7 @@ describe('issuance', () => { await expect( jsigs.sign( { - ...toBeSigned, + ...newCred, '@context': [W3C_CREDENTIAL_CONTEXT_URL], }, { @@ -545,39 +578,16 @@ describe('issuance', () => { ) }) - it('complains if transaction handler not given', async () => { + it('fails proof creation if credential is unknown', async () => { await expect( vcjs.issue({ - credential: toBeSigned, + credential: attestedVc, suite, documentLoader, purpose, }) ).rejects.toThrowErrorMatchingInlineSnapshot( - `"suite must be configured with a transactionHandler for proof generation"` - ) - }) - - it('fails proof finalization if credential does not have proof', async () => { - await expect( - issuanceSuite.finalizeProof(toBeSigned as KiltCredentialV1) - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"The credential must have a proof property containing a proof stub as created by the \`createProof\` method"` - ) - }) - - it('fails if proof stub was created by different suite', async () => { - const newCred = (await vcjs.issue({ - credential: toBeSigned, - suite: issuanceSuite, - documentLoader, - purpose, - })) as KiltCredentialV1 - - await expect( - suite.finalizeProof(newCred) - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"no submission found for this proof"` + `"No attestation information available for the credential kilt:credential:6N736gaJzLkwZXAgg51eZFjocLHGp2RH3YPpYnvqDHzw. Make sure you have called anchorCredential on the same instance of this class."` ) }) }) diff --git a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts b/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts index 52a87f86d..1df276f6f 100644 --- a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts +++ b/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts @@ -8,37 +8,41 @@ /* eslint-disable class-methods-use-this */ /* eslint-disable no-empty-pattern */ -import { u8aToHex } from '@polkadot/util' -import type { ApiPromise } from '@polkadot/api' - // @ts-expect-error not a typescript module import jsigs from 'jsonld-signatures' // cjs module +import { ConfigService } from '@kiltprotocol/config' import { CType } from '@kiltprotocol/core' import type { ICType } from '@kiltprotocol/types' +import { chainIdFromGenesis } from '../../CAIP/caip2.js' import { - AttestationHandler, - calculateRootHash, - finalizeProof, - initializeProof, + DidSigner, + TxHandler, + issue, verify as verifyProof, } from '../../KiltAttestationProofV1.js' +import type { CTypeLoader } from '../../KiltCredentialV1.js' +import { + credentialSchema, + validateStructure as validateCredentialStructure, +} from '../../KiltCredentialV1.js' import { check as checkStatus } from '../../KiltRevocationStatusV1.js' import { ATTESTATION_PROOF_V1_TYPE, + DEFAULT_CREDENTIAL_CONTEXTS, + DEFAULT_CREDENTIAL_TYPES, + JSON_SCHEMA_TYPE, KILT_CREDENTIAL_CONTEXT_URL, } from '../../constants.js' -import { chainIdFromGenesis } from '../../CAIP/caip2.js' -import { includesContext } from './utils.js' import type { KiltAttestationProofV1, - Proof, KiltCredentialV1, + Proof, } from '../../types.js' -import type { CTypeLoader } from '../../KiltCredentialV1.js' -import type { JSigsVerificationResult } from './types.js' import type { DocumentLoader, JsonLdObj } from '../documentLoader.js' +import type { JSigsVerificationResult } from './types.js' +import { includesContext } from './utils.js' const { suites: { LinkedDataProof }, @@ -51,32 +55,32 @@ interface CallArgs { [key: string]: unknown } +export type CredentialStub = Pick & + Partial + export class KiltAttestationV1Suite extends LinkedDataProof { - private api: ApiPromise private ctypes: ICType[] - private transactionHandler?: AttestationHandler - private pendingSubmissions = new Map>() + private attestationInfo = new Map< + KiltCredentialV1['id'], + KiltAttestationProofV1 + >() public readonly contextUrl = KILT_CREDENTIAL_CONTEXT_URL + // eslint-disable-next-line jsdoc/require-returns /** - * Placeholder value as @digitalbazaar/vc requires a verificationMethod property on issuance. + * Placeholder value as \@digitalbazaar/vc requires a verificationMethod property on issuance. */ - public readonly verificationMethod: string + public get verificationMethod(): string { + return chainIdFromGenesis(ConfigService.get('api').genesisHash) + } constructor({ - api, ctypes = [], - transactionHandler, }: { - api: ApiPromise ctypes?: ICType[] - transactionHandler?: AttestationHandler - }) { + } = {}) { super({ type: ATTESTATION_PROOF_V1_TYPE }) - this.api = api this.ctypes = ctypes - this.transactionHandler = transactionHandler - this.verificationMethod = chainIdFromGenesis(api.genesisHash) } // eslint-disable-next-line jsdoc/require-returns @@ -86,9 +90,8 @@ export class KiltAttestationV1Suite extends LinkedDataProof { public get checkStatus(): (args: { credential: KiltCredentialV1 }) => Promise<{ verified: boolean; error?: unknown }> { - const { api } = this return async ({ credential }) => { - return checkStatus(credential, { api }) + return checkStatus(credential) .then(() => ({ verified: true })) .catch((error) => ({ verified: false, error })) } @@ -127,7 +130,6 @@ export class KiltAttestationV1Suite extends LinkedDataProof { return ctype } await verifyProof(document, proof, { - api: this.api, loadCTypes, cTypes: this.ctypes, }) @@ -182,12 +184,9 @@ export class KiltAttestationV1Suite extends LinkedDataProof { } /** - * Initializes a proof for a [[KiltCredentialV1]] type document. - * - * _! This is not a complete proof yet !_. + * Adds a proof to a [[KiltCredentialV1]] type document. * - * After adding the proof stub to the credential, the resulting document must be processed - * by the `finalizeProof` method to make necessary adjustments to the document itself. + * ! __This will fail unless the document has been created with `anchorCredential` by the same class instance prior to calling `createProof`__ ! * * @param input Object containing the function arguments. * @param input.document [[KiltCredentialV1]] object to be signed. @@ -199,63 +198,66 @@ export class KiltAttestationV1Suite extends LinkedDataProof { }: { document: object }): Promise { - if (!this.transactionHandler) { + const credential = document as KiltCredentialV1 + validateCredentialStructure(credential) + const { id } = credential + const proof = this.attestationInfo.get(id) + if (!proof) { throw new Error( - 'suite must be configured with a transactionHandler for proof generation' + `No attestation information available for the credential ${id}. Make sure you have called anchorCredential on the same instance of this class.` ) } - const [proof, submissionArgs] = initializeProof( - document as KiltCredentialV1 - ) - const [rootHash] = submissionArgs - this.pendingSubmissions.set( - u8aToHex(rootHash as Uint8Array), - this.transactionHandler( - this.api.tx.attestation.add(...submissionArgs), - this.api - ) - ) return proof } /** - * Processes a [[KiltCredentialV1]] with a proof stub created by `createProof` to produce a verifiable credential. - * The proof must have been created with the same instance of the [[KiltAttestationProofV1Suite]]. + * Processes a [[KiltCredentialV1]] stub to produce a verifiable [[KiltCredentialV1]], which is anchored on the Kilt blockchain via an attestation. + * The class instance keeps track of attestation-related data. + * You can then add a proof about the successful attestation to the credential using `createProof`. * - * @param credential A [[KiltCredentialV1]] with a proof stub created by `createProof`. + * @param input A partial [[KiltCredentialV1]]; `credentialSubject` is required. + * @param didSigner Signer interface to be passed to [[issue]], containing the attester's `did` and a `signer` callback which authorizes the on-chain anchoring of the credential with the attester's signature. + * @param transactionHandler Transaction handler interface to be passed to [[issue]] containing the submitter `address` that's going to cover the transaction fees as well as either a `signer` or `signAndSubmit` callback handling extrinsic signing and submission. * - * @returns An updated copy of the credential with necessary adjustments, containing a complete [[KiltAttestationV1]] proof. + * @returns A copy of the input updated to fit the [[KiltCredentialV1]] and to align with the attestation record (concerns, e.g., the `issuanceDate` which is set to the block time at which the credential was anchored). */ - public async finalizeProof( - credential: KiltCredentialV1 - ): Promise { - const { proof } = credential - const proofStub: KiltAttestationProofV1 | undefined = ( - Array.isArray(proof) ? proof : [proof] - ).find((p) => p?.type === ATTESTATION_PROOF_V1_TYPE) - if (!proofStub) { - throw new Error( - 'The credential must have a proof property containing a proof stub as created by the `createProof` method' - ) + public async anchorCredential( + input: CredentialStub, + didSigner: DidSigner, + transactionHandler: TxHandler + ): Promise> { + const { credentialSubject, type } = input + + let cType = type?.find((str): str is ICType['$id'] => + str.startsWith('kilt:ctype:') + ) + if (!cType) { + cType = credentialSubject['@context']['@vocab'].slice( + 0, + -1 + ) as ICType['$id'] + } else { + credentialSubject['@context']['@vocab'] = `${cType}#` } - const rootHash = u8aToHex(calculateRootHash(credential, proofStub)) - const submissionPromise = this.pendingSubmissions.get(rootHash) - if (!submissionPromise) { - throw new Error('no submission found for this proof') + + const credentialStub = { + ...input, + '@context': DEFAULT_CREDENTIAL_CONTEXTS, + type: [...DEFAULT_CREDENTIAL_TYPES, cType], + nonTransferable: true as const, + credentialSubject, + credentialSchema: { + id: credentialSchema.$id as string, + type: JSON_SCHEMA_TYPE, + } as const, } - const { - blockHash, - timestamp = (await this.api.query.timestamp.now.at(blockHash)).toNumber(), - } = await submissionPromise.catch((e) => { - this.pendingSubmissions.delete(rootHash) - throw new Error(`Promise rejected with ${e}`) - }) - const updated = finalizeProof(credential, proofStub, { - blockHash, - timestamp, - genesisHash: this.api.genesisHash, + + const { proof, ...credential } = await issue(credentialStub, { + didSigner, + transactionHandler, }) - this.pendingSubmissions.delete(rootHash) - return updated + + this.attestationInfo.set(credential.id, proof) + return credential } } diff --git a/yarn.lock b/yarn.lock index 81c18df84..dedee4a56 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2083,6 +2083,7 @@ __metadata: dependencies: "@digitalbazaar/ed25519-signature-2020": ^5.2.0 "@digitalbazaar/vc": ^6.0.1 + "@kiltprotocol/chain-helpers": "workspace:*" "@kiltprotocol/config": "workspace:*" "@kiltprotocol/core": "workspace:*" "@kiltprotocol/did": "workspace:*" From 269da2895318584659d1e4be002701238161426a Mon Sep 17 00:00:00 2001 From: Github Action Date: Wed, 19 Jul 2023 10:45:19 +0000 Subject: [PATCH 067/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/testing/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index a965cdc49..ebea49782 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.33.2-4", + "version": "0.33.2-5", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index 7a9671f92..eb64d0ae5 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.33.2-4", + "version": "0.33.2-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 0bb335e4e..ae48b98fd 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.33.2-4", + "version": "0.33.2-5", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index eca5cf63a..8c3dd9d67 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.33.2-4", + "version": "0.33.2-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index f8739eaba..9c4b6a968 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.33.2-4", + "version": "0.33.2-5", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index badd1e6ec..e07c4bad7 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.33.2-4", + "version": "0.33.2-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index a540ffbef..0b8d65c58 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.33.2-4", + "version": "0.33.2-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index cce406d47..a4e269aea 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.33.2-4", + "version": "0.33.2-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index ccf50c8d8..a43923af5 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.33.2-4", + "version": "0.33.2-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/testing/package.json b/packages/testing/package.json index 5c1739ecb..1a8542801 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,7 +1,7 @@ { "name": "@kiltprotocol/testing", "private": true, - "version": "0.33.2-4", + "version": "0.33.2-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index e1c391507..4c0fdd5b3 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.33.2-4", + "version": "0.33.2-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 905551674..5d45de4a3 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.33.2-4", + "version": "0.33.2-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 20ab15b6f..023e2d0fc 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.33.2-4", + "version": "0.33.2-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index fc263f7d4..e74803d69 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.33.2-4", + "version": "0.33.2-5", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From 9c469551ce9531af81a7c995b8243ec0342372bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jul 2023 13:57:46 +0200 Subject: [PATCH 068/130] chore(deps): bump semver-regex from 3.1.3 to 3.1.4 (#775) --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index dedee4a56..6d1325743 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8688,9 +8688,9 @@ fsevents@^2.3.2: linkType: hard "semver-regex@npm:^3.1.2": - version: 3.1.3 - resolution: "semver-regex@npm:3.1.3" - checksum: a40c17716679f413994ba4723cf32cf94160a4a3db36e3f730f840cb36bbdbcfda2a34df051d1adb56ed2c67c2a00badfaa9e1e4b755ae6addc7d23ebf55c32b + version: 3.1.4 + resolution: "semver-regex@npm:3.1.4" + checksum: 3962105908e326aa2cd5c851a2f6d4cc7340d1b06560afc35cd5348d9fa5b1cc0ac0cad7e7cef2072bc12b992c5ae654d9e8d355c19d75d4216fced3b6c5d8a7 languageName: node linkType: hard From 2cbfd3e3db28cabf834b851ebc81ccb022f0e083 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Wed, 26 Jul 2023 10:05:24 +0200 Subject: [PATCH 069/130] test: esm variant of integration tests (#779) * test: move integration tests to tests directory * test: integration tests on esm * tests: move test utils to tests folder * tests: move jest setup file * tests: use projects instead of group runner * tests: update test coverage setup * tests: fix failing & flaky integration tests * ci: run esm tests in ci --- .eslintrc.js | 23 +- .github/workflows/test-node-candidate.yml | 2 +- .github/workflows/tests-polkadot-deps.yml | 8 +- .github/workflows/tests.yml | 9 +- babel.config.json | 3 +- jest-setup/setup.js | 6 - jest.config.js | 89 +- package.json | 26 +- packages/chain-helpers/package.json | 1 - .../src/blockchain/Blockchain.spec.ts | 6 +- .../blockchain/SubscriptionPromise.spec.ts | 4 - .../src/errorhandling/ErrorHandler.spec.ts | 4 - packages/config/src/ConfigService.spec.ts | 4 - packages/core/package.json | 1 - .../core/src/attestation/Attestation.spec.ts | 14 +- .../core/src/balance/Balance.utils.spec.ts | 6 +- packages/core/src/claim/Claim.spec.ts | 22 +- .../core/src/credential/Credential.spec.ts | 16 +- .../core/src/ctype/CType.metadata.spec.ts | 4 - packages/core/src/ctype/CType.spec.ts | 9 +- packages/core/src/ctype/Ctype.nested.spec.ts | 4 - .../src/delegation/DelegationNode.spec.ts | 18 +- .../publicCredential/PublicCredential.spec.ts | 13 +- packages/core/src/quote/Quote.spec.ts | 17 +- packages/did/package.json | 1 - packages/did/src/Did.chain.spec.ts | 6 +- packages/did/src/Did.signature.spec.ts | 14 +- .../did/src/DidDetails/DidDetails.spec.ts | 4 - .../did/src/DidDetails/FullDidDetails.spec.ts | 12 +- .../src/DidDetails/LightDidDetails.spec.ts | 4 - .../DidDocumentExporter.spec.ts | 58 +- .../did/src/DidResolver/DidResolver.spec.ts | 12 +- packages/messaging/package.json | 1 - packages/messaging/src/Message.spec.ts | 51 +- packages/testing/package.json | 53 - packages/testing/tsconfig.build.json | 17 - packages/testing/tsconfig.esm.json | 7 - packages/utils/src/Crypto.spec.ts | 8 +- packages/utils/src/DataUtils.spec.ts | 4 - packages/utils/src/UUID.spec.ts | 4 - packages/vc-export/package.json | 1 - packages/vc-export/src/CAIP/CAIP.spec.ts | 8 +- .../vc-export/src/CTypeVerification.spec.ts | 4 - packages/vc-export/src/DidJwt.spec.ts | 4 - .../src/KiltAttestationProofV1.spec.ts | 4 - packages/vc-export/src/Presentation.spec.ts | 28 +- .../src/exportToVerifiableCredential.spec.ts | 12 +- .../suites/KiltAttestationProofV1.spec.ts | 6 +- .../vc-js/suites/Sr25519Signature2020.spec.ts | 4 - .../suites/Sr25519VerificationKey2020.spec.ts | 6 +- .../breakingChanges}/BreakingChanges.spec.ts | 7 +- .../BreakingChanges.spec.ts.snap | 124 +- tests/{ => bundle}/bundle-test.html | 4 +- tests/{ => bundle}/bundle-test.ts | 8 +- tests/{ => bundle}/bundle.spec.ts | 0 tests/{ => bundle}/playwright.config.ts | 0 tests/{ => bundle}/tsconfig.json | 3 +- tests/{ => bundle}/types.d.ts | 0 .../integration}/AccountLinking.spec.ts | 32 +- .../integration}/Attestation.spec.ts | 26 +- .../integration}/Balance.spec.ts | 17 +- .../integration}/Blockchain.spec.ts | 23 +- .../integration}/Ctypes.spec.ts | 19 +- .../integration}/Delegation.spec.ts | 40 +- .../integration}/Deposit.spec.ts | 35 +- .../integration}/Did.spec.ts | 24 +- .../integration}/ErrorHandler.spec.ts | 46 +- .../integration}/PublicCredentials.spec.ts | 21 +- .../integration}/Web3Names.spec.ts | 17 +- .../jest.config.integration.esm.js | 12 + tests/integration/jest.config.integration.js | 13 + tests/integration/tsconfig.esm.json | 9 + .../integration}/utils.ts | 12 +- tests/jest.setup.js | 5 + .../src => tests/testUtils}/TestUtils.ts | 0 .../testing/src => tests/testUtils}/index.ts | 0 .../testUtils}/metadata/spiritnet.ts | 4 +- .../src => tests/testUtils}/mocks/index.ts | 0 .../testUtils}/mocks/mockedApi.ts | 0 .../testUtils}/mocks/mockedApi.utils.ts | 0 .../testUtils}/mocks/typeRegistry.ts | 0 tsconfig.docs.json | 2 +- tsconfig.json | 3 +- yarn.lock | 1966 +++++++---------- 84 files changed, 1254 insertions(+), 1860 deletions(-) delete mode 100644 jest-setup/setup.js delete mode 100644 packages/testing/package.json delete mode 100644 packages/testing/tsconfig.build.json delete mode 100644 packages/testing/tsconfig.esm.json rename {packages/testing/src => tests/breakingChanges}/BreakingChanges.spec.ts (98%) rename {packages/testing/src => tests/breakingChanges}/__snapshots__/BreakingChanges.spec.ts.snap (92%) rename tests/{ => bundle}/bundle-test.html (60%) rename tests/{ => bundle}/bundle-test.ts (97%) rename tests/{ => bundle}/bundle.spec.ts (100%) rename tests/{ => bundle}/playwright.config.ts (100%) rename tests/{ => bundle}/tsconfig.json (75%) rename tests/{ => bundle}/types.d.ts (100%) rename {packages/core/src/__integrationtests__ => tests/integration}/AccountLinking.spec.ts (98%) rename {packages/core/src/__integrationtests__ => tests/integration}/Attestation.spec.ts (98%) rename {packages/core/src/__integrationtests__ => tests/integration}/Balance.spec.ts (95%) rename {packages/core/src/__integrationtests__ => tests/integration}/Blockchain.spec.ts (93%) rename {packages/core/src/__integrationtests__ => tests/integration}/Ctypes.spec.ts (95%) rename {packages/core/src/__integrationtests__ => tests/integration}/Delegation.spec.ts (96%) rename {packages/core/src/__integrationtests__ => tests/integration}/Deposit.spec.ts (97%) rename {packages/core/src/__integrationtests__ => tests/integration}/Did.spec.ts (99%) rename {packages/core/src/__integrationtests__ => tests/integration}/ErrorHandler.spec.ts (72%) rename {packages/core/src/__integrationtests__ => tests/integration}/PublicCredentials.spec.ts (98%) rename {packages/core/src/__integrationtests__ => tests/integration}/Web3Names.spec.ts (98%) create mode 100644 tests/integration/jest.config.integration.esm.js create mode 100644 tests/integration/jest.config.integration.js create mode 100644 tests/integration/tsconfig.esm.json rename {packages/core/src/__integrationtests__ => tests/integration}/utils.ts (96%) create mode 100644 tests/jest.setup.js rename {packages/testing/src => tests/testUtils}/TestUtils.ts (100%) rename {packages/testing/src => tests/testUtils}/index.ts (100%) rename {packages/testing/src => tests/testUtils}/metadata/spiritnet.ts (75%) rename {packages/testing/src => tests/testUtils}/mocks/index.ts (100%) rename {packages/testing/src => tests/testUtils}/mocks/mockedApi.ts (100%) rename {packages/testing/src => tests/testUtils}/mocks/mockedApi.utils.ts (100%) rename {packages/testing/src => tests/testUtils}/mocks/typeRegistry.ts (100%) diff --git a/.eslintrc.js b/.eslintrc.js index 552112827..ab424d1f9 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -37,7 +37,7 @@ module.exports = { devDependencies: [ '**/*.test.ts', '**/*.spec.ts', - '**/__integrationtests__/*', + 'tests/**/*', '**/webpack.config.js', ], }, @@ -142,7 +142,7 @@ module.exports = { 'jsdoc/check-tag-names': [ 'warn', { - definedTags: ['group', 'packageDocumentation'], + definedTags: ['packageDocumentation'], }, ], '@typescript-eslint/no-var-requires': 'off', @@ -152,14 +152,6 @@ module.exports = { 'no-console': 'off', }, }, - { - files: ['**/__integrationtests__/*.ts', '**/TestUtils.ts'], - rules: { - 'import/extensions': 'off', - 'jsdoc/require-jsdoc': 'off', - 'no-console': 'off', - }, - }, { files: ['**/augment-api/src/interfaces/**/*.ts'], rules: { @@ -167,16 +159,13 @@ module.exports = { }, }, { - files: ['tests/*'], + files: ['tests/**/*', 'packages/testing/**/*'], rules: { + 'import/extensions': 'off', + 'jsdoc/require-jsdoc': 'off', 'no-console': 'off', '@typescript-eslint/explicit-function-return-type': 'off', - 'import/no-extraneous-dependencies': [ - 'error', - { - devDependencies: ['tests/*', 'tests/bundle.spec.ts'], - }, - ], + 'import/no-extraneous-dependencies': 'off' }, }, ], diff --git a/.github/workflows/test-node-candidate.yml b/.github/workflows/test-node-candidate.yml index 8e933834f..47e249598 100644 --- a/.github/workflows/test-node-candidate.yml +++ b/.github/workflows/test-node-candidate.yml @@ -90,7 +90,7 @@ jobs: - name: run integration tests timeout-minutes: 60 - run: yarn test:integration:ci + run: yarn test:integration -b bundle_cache: runs-on: ubuntu-latest diff --git a/.github/workflows/tests-polkadot-deps.yml b/.github/workflows/tests-polkadot-deps.yml index 837030d49..ce47e76b5 100644 --- a/.github/workflows/tests-polkadot-deps.yml +++ b/.github/workflows/tests-polkadot-deps.yml @@ -122,9 +122,13 @@ jobs: with: image: ${{ env.TESTCONTAINERS_WATCHER_IMG }} - - name: run integration tests + - name: run integration tests (cjs) timeout-minutes: 60 - run: yarn test:integration:ci + run: yarn test:integration -b + + - name: run integration tests (esm) + timeout-minutes: 60 + run: yarn test:integration:esm -b create-issue: runs-on: ubuntu-latest diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 626adea2b..933dbecff 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -161,9 +161,14 @@ jobs: with: image: ${{ env.TESTCONTAINERS_WATCHER_IMG }} - - name: run integration tests + - name: run integration tests (cjs) timeout-minutes: 60 - run: yarn test:integration:ci + run: yarn test:integration -b + + - name: run integration tests (esm) + timeout-minutes: 60 + run: yarn test:integration:esm -b + bundle_cache: runs-on: ubuntu-latest diff --git a/babel.config.json b/babel.config.json index c99be6aa9..509e22c8c 100644 --- a/babel.config.json +++ b/babel.config.json @@ -3,7 +3,8 @@ [ "@babel/preset-env", { - "modules": "commonjs" + "modules": "commonjs", + "targets": {"node": "current"} } ] ] diff --git a/jest-setup/setup.js b/jest-setup/setup.js deleted file mode 100644 index ecf272898..000000000 --- a/jest-setup/setup.js +++ /dev/null @@ -1,6 +0,0 @@ -import { cryptoWaitReady } from '@polkadot/util-crypto' -export {} - -beforeAll(async () => { - await cryptoWaitReady() -}) diff --git a/jest.config.js b/jest.config.js index 63fc4a01e..217a73a31 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,12 +1,18 @@ -module.exports = { - preset: 'ts-jest', +const common = { testEnvironment: 'node', clearMocks: true, - runner: 'groups', - // Parachain block time is 12s - testTimeout: 15000, - setupFilesAfterEnv: ['../jest-setup/setup.js'], - transformIgnorePatterns: ['/node_modules/(?!@polkadot|@babel/runtime/helpers/esm/|@digitalbazaar|base.+-universal|crypto-ld)'], + setupFilesAfterEnv: ['/tests/jest.setup.js'], + transformIgnorePatterns: ['/node_modules/(?!@digitalbazaar|base.+-universal|crypto-ld)'], + transform: { + "\\.js$": ["babel-jest", { root: './' }], + "\\.ts$": "ts-jest" + }, + resolver: "ts-jest-resolver", + moduleDirectories: [ + "node_modules", + "packages/*/src" + ], + coverageDirectory: 'coverage', coverageThreshold: { global: { branches: 70, @@ -15,37 +21,44 @@ module.exports = { statements: 80, }, }, - transform: { - "\\.js$": "babel-jest", - "\\.ts$": "ts-jest" - }, collectCoverageFrom: [ - '**/*/src/**/*.ts', - '!**/index.ts', - '!**/__integrationtests__/**', - '!**/__mocks__/**', - '!**/__tests__/**', - '!**/lib/**', - '!**/test/**', - '!**/kilt/*', - '!**/types/**/*', - '!**/SDKErrors.ts', - '!utils/src/json-schema/*', - '!testing/**', - '!augment-api/**', - '!type-definitions/**', - '!**/*.chain.ts', - '!did/src/Did.chain.ts', - '!did/src/Did.rpc.ts', - '!did/src/Did.utils.ts', - '!utils/src/jsonabc.ts', - '!core/src/utils.ts', + 'packages/*/src/**', + ], + coveragePathIgnorePatterns: [ + // test and library code + '/node_modules/', + '/lib/', + '/tests/', + // not properly testable + 'packages/types/', + 'packages/augment-api/', + 'packages/type-definitions/', + 'packages/core/src/kilt/', + 'index.ts', + 'types.ts', + '.chain.ts', + 'SDKErrors.ts', + 'Did.rpc.ts', + 'packages/core/src/utils.ts', + // third party code copied to this repo + 'packages/utils/src/json-schema/', + 'jsonabc.ts', ], - resolver: "ts-jest-resolver", - rootDir: 'packages', - coverageDirectory: 'coverage', - moduleDirectories: [ - "node_modules", - "packages/*/src" - ] } + +module.exports = { + ...common, + testTimeout: 5000, + projects: [ + { + ...common, + displayName: 'unit', + roots: ['/packages'], + }, + { + ...common, + displayName: 'breaking', + roots: ['/tests/breakingChanges'], + }, + ] +} \ No newline at end of file diff --git a/package.json b/package.json index ebea49782..5430689d0 100644 --- a/package.json +++ b/package.json @@ -11,23 +11,24 @@ "build": "yarn workspaces foreach -p -t --exclude '{root-workspace}' run build", "build:docs": "typedoc --theme default --out docs/api --tsconfig tsconfig.docs.json && touch docs/.nojekyll", "bundle": "yarn workspace @kiltprotocol/sdk-js run bundle", - "clean": "rimraf tests/dist && yarn workspaces foreach -p --exclude '{root-workspace}' run clean", + "clean": "rimraf tests/bundle/dist && rimraf tests/integration/dist && yarn workspaces foreach -p --exclude '{root-workspace}' run clean", "clean:docs": "rimraf docs/api", "prepublish": "yarn workspaces foreach -p --no-private exec cp -f ../../LICENSE .", "publish": "yarn workspaces foreach -pt --no-private npm publish", - "lint": "eslint packages --format=codeframe", + "lint": "eslint packages tests --format=codeframe", "lint:fix": "yarn lint --fix", "set:version": "npm version --no-git-tag-version --no-workspaces-update --workspaces --include-workspace-root", "style": "prettier -l packages", "style:fix": "yarn style --write", - "test": "jest --coverage --group=unit", - "test:breaking": "jest --group=breaking", + "test": "jest --coverage --selectProjects=unit", + "test:breaking": "jest --selectProjects=breaking", "test:ci": "yarn test --ci --forceExit", - "test:integration": "jest --group=integration -w 3 --testTimeout=30000", - "test:integration:ci": "jest --group=integration -b -w 3 --testTimeout=60000", + "test:integration": "jest -c tests/integration/jest.config.integration.js", + "build:esm-tests": "rimraf tests/integration/dist && tsc -p tests/integration/tsconfig.esm.json && echo '{\"type\":\"module\"}' > tests/integration/dist/package.json", + "test:integration:esm": "yarn build:esm-tests && yarn node --experimental-vm-modules $(yarn bin jest) -c tests/integration/jest.config.integration.esm.js", "test:integration:latest-develop": "TESTCONTAINERS_NODE_IMG=kiltprotocol/mashnet-node:latest-develop yarn test:integration", "test:watch": "yarn test --watch", - "test:bundle": "tsc -p tests/tsconfig.json && yarn ./tests playwright test --config playwright.config.ts", + "test:bundle": "tsc -p tests/bundle/tsconfig.json && yarn ./tests/bundle playwright test --config playwright.config.ts", "test:ci:bundle": "yarn test:ci:bundle:preparation && yarn test:bundle", "test:ci:bundle:preparation": "yarn playwright install-deps && yarn playwright install chromium" }, @@ -47,7 +48,7 @@ "@commitlint/cli": "^9.0.1", "@commitlint/config-conventional": "^9.0.1", "@playwright/test": "^1.21.1", - "@types/jest": "^27.4.0", + "@types/jest": "^29.5.3", "@typescript-eslint/eslint-plugin": "^5.7.0", "@typescript-eslint/parser": "^5.7.0", "eslint": "^7.32.0", @@ -58,15 +59,12 @@ "eslint-plugin-license-header": "^0.2.1", "eslint-plugin-prettier": "^3.4.1", "husky": "^4.2.5", - "jest": "^27.4.7", - "jest-docblock": "^27.4.0", - "jest-runner": "^27.4.6", - "jest-runner-groups": "^2.1.0", + "jest": "^29.6.1", "prettier": "^2.4.1", "rimraf": "^3.0.2", "testcontainers": "^9.0.0", - "ts-jest": "^27.1.2", - "ts-jest-resolver": "^2.0.0", + "ts-jest": "^29.1.1", + "ts-jest-resolver": "^2.0.1", "typedoc": "^0.23.0", "typescript": "^4.8.3" }, diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 8c3dd9d67..a3521d0bf 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -30,7 +30,6 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { - "@kiltprotocol/testing": "workspace:*", "@polkadot/keyring": "^12.0.0", "rimraf": "^3.0.2", "typescript": "^4.8.3" diff --git a/packages/chain-helpers/src/blockchain/Blockchain.spec.ts b/packages/chain-helpers/src/blockchain/Blockchain.spec.ts index ebe9d5fc1..95a197f5e 100644 --- a/packages/chain-helpers/src/blockchain/Blockchain.spec.ts +++ b/packages/chain-helpers/src/blockchain/Blockchain.spec.ts @@ -5,15 +5,11 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/blockchain - */ - -import { ApiMocks } from '@kiltprotocol/testing' import { ConfigService } from '@kiltprotocol/config' import type { KeyringPair } from '@kiltprotocol/types' import { Crypto, SDKErrors } from '@kiltprotocol/utils' +import { ApiMocks } from '../../../../tests/testUtils' import { IS_FINALIZED, IS_IN_BLOCK, diff --git a/packages/chain-helpers/src/blockchain/SubscriptionPromise.spec.ts b/packages/chain-helpers/src/blockchain/SubscriptionPromise.spec.ts index 3938e17e8..b78ad6e9a 100644 --- a/packages/chain-helpers/src/blockchain/SubscriptionPromise.spec.ts +++ b/packages/chain-helpers/src/blockchain/SubscriptionPromise.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/util - */ - import { SDKErrors } from '@kiltprotocol/utils' import { makeSubscriptionPromise } from './SubscriptionPromise' diff --git a/packages/chain-helpers/src/errorhandling/ErrorHandler.spec.ts b/packages/chain-helpers/src/errorhandling/ErrorHandler.spec.ts index bca610171..e9b27395c 100644 --- a/packages/chain-helpers/src/errorhandling/ErrorHandler.spec.ts +++ b/packages/chain-helpers/src/errorhandling/ErrorHandler.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/errorhandling - */ - import type { ISubmittableResult } from '@kiltprotocol/types' import type { EventRecord } from '@polkadot/types/interfaces' import { ErrorHandler } from './index' diff --git a/packages/config/src/ConfigService.spec.ts b/packages/config/src/ConfigService.spec.ts index 85f3d3c18..bb97365b6 100644 --- a/packages/config/src/ConfigService.spec.ts +++ b/packages/config/src/ConfigService.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/ConfigService - */ - /* eslint-disable dot-notation */ import { ApiPromise, WsProvider } from '@polkadot/api' import { LogLevel, Logger } from 'typescript-logging' diff --git a/packages/core/package.json b/packages/core/package.json index e07c4bad7..b2c36c40f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -30,7 +30,6 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { - "@kiltprotocol/testing": "workspace:*", "@types/uuid": "^8.0.0", "rimraf": "^3.0.2", "testcontainers": "^9.0.0", diff --git a/packages/core/src/attestation/Attestation.spec.ts b/packages/core/src/attestation/Attestation.spec.ts index 6b17c7fcd..63906f75c 100644 --- a/packages/core/src/attestation/Attestation.spec.ts +++ b/packages/core/src/attestation/Attestation.spec.ts @@ -5,27 +5,23 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/attestation - */ - /* eslint-disable @typescript-eslint/ban-ts-comment */ +import { ConfigService } from '@kiltprotocol/config' import type { - IAttestation, + CTypeHash, DidUri, + IAttestation, ICType, IClaim, ICredential, - CTypeHash, } from '@kiltprotocol/types' import { SDKErrors } from '@kiltprotocol/utils' -import { ApiMocks } from '@kiltprotocol/testing' -import { ConfigService } from '@kiltprotocol/config' +import { ApiMocks } from '../../../../tests/testUtils' import * as Claim from '../claim' -import * as CType from '../ctype' import * as Credential from '../credential' +import * as CType from '../ctype' import * as Attestation from './Attestation' let mockedApi: any diff --git a/packages/core/src/balance/Balance.utils.spec.ts b/packages/core/src/balance/Balance.utils.spec.ts index 1715f72d9..aad9d30e4 100644 --- a/packages/core/src/balance/Balance.utils.spec.ts +++ b/packages/core/src/balance/Balance.utils.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/balance - */ - import { BN } from '@polkadot/util' import type { BalanceNumber, @@ -261,7 +257,7 @@ describe('toFemtoKilt', () => { expect(() => toFemtoKilt('-0.0000001', 'nano').toString() ).toThrowErrorMatchingInlineSnapshot( - `"Too many decimal places: input with unit \\"nano\\" and value \\"-0.0000001\\" exceeds the 6 possible decimal places by 1"` + `"Too many decimal places: input with unit "nano" and value "-0.0000001" exceeds the 6 possible decimal places by 1"` ) expect(toFemtoKilt('-0').toString()).toEqual(new BN('0').toString()) expect(toFemtoKilt('-0.000001', 'nano').toString()).toEqual( diff --git a/packages/core/src/claim/Claim.spec.ts b/packages/core/src/claim/Claim.spec.ts index c13f14e6c..c82d13ef7 100644 --- a/packages/core/src/claim/Claim.spec.ts +++ b/packages/core/src/claim/Claim.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/claim - */ - import { SDKErrors } from '@kiltprotocol/utils' import type { IClaim, ICType, DidUri } from '@kiltprotocol/types' import * as CType from '../ctype' @@ -31,11 +27,11 @@ describe('jsonld', () => { // this is what a kilt claim looks like when expressed in expanded JSON-LD const jsonld = Claim.toJsonLD(claim, true) expect(jsonld).toMatchInlineSnapshot(` - Object { - "https://www.w3.org/2018/credentials#credentialSchema": Object { + { + "https://www.w3.org/2018/credentials#credentialSchema": { "@id": "kilt:ctype:0x90364302f3b6ccfa50f3d384ec0ab6369711e13298ba4a5316d7e2addd5647b2", }, - "https://www.w3.org/2018/credentials#credentialSubject": Object { + "https://www.w3.org/2018/credentials#credentialSubject": { "@id": "did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs", "kilt:ctype:0x90364302f3b6ccfa50f3d384ec0ab6369711e13298ba4a5316d7e2addd5647b2#address": "homestreet, home", "kilt:ctype:0x90364302f3b6ccfa50f3d384ec0ab6369711e13298ba4a5316d7e2addd5647b2#name": "John", @@ -50,15 +46,15 @@ describe('jsonld', () => { // this is what a kilt claim looks like when expressed in compact JSON-LD const jsonld = Claim.toJsonLD(claim, false) expect(jsonld).toMatchInlineSnapshot(` - Object { - "@context": Object { + { + "@context": { "@vocab": "https://www.w3.org/2018/credentials#", }, - "credentialSchema": Object { + "credentialSchema": { "@id": "kilt:ctype:0x90364302f3b6ccfa50f3d384ec0ab6369711e13298ba4a5316d7e2addd5647b2", }, - "credentialSubject": Object { - "@context": Object { + "credentialSubject": { + "@context": { "@vocab": "kilt:ctype:0x90364302f3b6ccfa50f3d384ec0ab6369711e13298ba4a5316d7e2addd5647b2#", }, "@id": "did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs", @@ -93,7 +89,7 @@ describe('jsonld', () => { }) expect(hashed.nonceMap).toEqual(nonceMap) expect(hashed.hashes).toMatchInlineSnapshot(` - Array [ + [ "0x3c2ae125a0baf4ed64a30b7ad012810b4622628a2eb5ad32e769e6a1d356d58d", "0x69aae66efd954c3712e91dd2761dab08ea941e6516e7cf6ddf6e3b90ddc5bdf3", "0x8d5736197583931c4e4d3dce0503596760f7a13e8187cc440b7de1edd4370d6a", diff --git a/packages/core/src/credential/Credential.spec.ts b/packages/core/src/credential/Credential.spec.ts index 2d303ce80..ffa25284f 100644 --- a/packages/core/src/credential/Credential.spec.ts +++ b/packages/core/src/credential/Credential.spec.ts @@ -5,12 +5,12 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/credential - */ - /* eslint-disable dot-notation */ +import { randomAsHex } from '@polkadot/util-crypto' + +import { ConfigService } from '@kiltprotocol/config' +import * as Did from '@kiltprotocol/did' import type { DidDocument, DidResourceUri, @@ -26,20 +26,18 @@ import type { SignCallback, } from '@kiltprotocol/types' import { Crypto, SDKErrors, UUID } from '@kiltprotocol/utils' -import * as Did from '@kiltprotocol/did' + import { ApiMocks, createLocalDemoFullDidFromKeypair, KeyTool, makeSigningKeyTool, -} from '@kiltprotocol/testing' -import { ConfigService } from '@kiltprotocol/config' -import { randomAsHex } from '@polkadot/util-crypto' +} from '../../../../tests/testUtils' import * as Attestation from '../attestation' import * as Claim from '../claim' import * as CType from '../ctype' -import * as Credential from './Credential' import { init } from '../kilt' +import * as Credential from './Credential' const testCType = CType.fromProperties('Credential', { a: { type: 'string' }, diff --git a/packages/core/src/ctype/CType.metadata.spec.ts b/packages/core/src/ctype/CType.metadata.spec.ts index ad1cbdef1..25b92e880 100644 --- a/packages/core/src/ctype/CType.metadata.spec.ts +++ b/packages/core/src/ctype/CType.metadata.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/ctype - */ - import { SDKErrors } from '@kiltprotocol/utils' import type { ICType, ICTypeMetadata } from '@kiltprotocol/types' import * as CType from './CType' diff --git a/packages/core/src/ctype/CType.spec.ts b/packages/core/src/ctype/CType.spec.ts index 9c4eb4e6f..bf76272d2 100644 --- a/packages/core/src/ctype/CType.spec.ts +++ b/packages/core/src/ctype/CType.spec.ts @@ -5,14 +5,11 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/ctype - */ - -import { SDKErrors } from '@kiltprotocol/utils' import { ConfigService } from '@kiltprotocol/config' -import { ApiMocks } from '@kiltprotocol/testing' import type { ICType } from '@kiltprotocol/types' +import { SDKErrors } from '@kiltprotocol/utils' + +import { ApiMocks } from '../../../../tests/testUtils' import * as Claim from '../claim' import * as CType from './CType.js' import { CTypeModel, CTypeModelDraft01 } from './CType.schemas' diff --git a/packages/core/src/ctype/Ctype.nested.spec.ts b/packages/core/src/ctype/Ctype.nested.spec.ts index 27639e9ef..95903447d 100644 --- a/packages/core/src/ctype/Ctype.nested.spec.ts +++ b/packages/core/src/ctype/Ctype.nested.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/ctype - */ - import type { ICType, IClaim, IClaimContents } from '@kiltprotocol/types' import { SDKErrors } from '@kiltprotocol/utils' import * as CType from './CType' diff --git a/packages/core/src/delegation/DelegationNode.spec.ts b/packages/core/src/delegation/DelegationNode.spec.ts index f9bbaff8c..dbf3a84e8 100644 --- a/packages/core/src/delegation/DelegationNode.spec.ts +++ b/packages/core/src/delegation/DelegationNode.spec.ts @@ -5,23 +5,21 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/delegation - */ +import { encodeAddress } from '@polkadot/keyring' +import { ConfigService } from '@kiltprotocol/config' import { - IDelegationNode, + CTypeHash, + DidUri, IDelegationHierarchyDetails, + IDelegationNode, Permission, - DidUri, - CTypeHash, } from '@kiltprotocol/types' -import { encodeAddress } from '@polkadot/keyring' -import { ApiMocks } from '@kiltprotocol/testing' -import { ConfigService } from '@kiltprotocol/config' import { Crypto, SDKErrors, ss58Format } from '@kiltprotocol/utils' + +import { ApiMocks } from '../../../../tests/testUtils' import { DelegationNode } from './DelegationNode' -import { permissionsAsBitset, errorCheck } from './DelegationNode.utils' +import { errorCheck, permissionsAsBitset } from './DelegationNode.utils' let mockedApi: any diff --git a/packages/core/src/publicCredential/PublicCredential.spec.ts b/packages/core/src/publicCredential/PublicCredential.spec.ts index 1c3b7dde4..dca0722c6 100644 --- a/packages/core/src/publicCredential/PublicCredential.spec.ts +++ b/packages/core/src/publicCredential/PublicCredential.spec.ts @@ -5,10 +5,10 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/publicCredential - */ +import { BN } from '@polkadot/util' +import { ConfigService } from '@kiltprotocol/config' +import * as Did from '@kiltprotocol/did' import type { AssetDidUri, DidUri, @@ -16,12 +16,9 @@ import type { IClaimContents, IPublicCredential, } from '@kiltprotocol/types' - -import { BN } from '@polkadot/util' -import { ApiMocks } from '@kiltprotocol/testing' import { Crypto } from '@kiltprotocol/utils' -import { ConfigService } from '@kiltprotocol/config' -import * as Did from '@kiltprotocol/did' + +import { ApiMocks } from '../../../../tests/testUtils' import * as CType from '../ctype' import * as PublicCredential from '../publicCredential' import { verifyAgainstCType } from './PublicCredential' diff --git a/packages/core/src/quote/Quote.spec.ts b/packages/core/src/quote/Quote.spec.ts index ab1f4ec5c..8c5701a71 100644 --- a/packages/core/src/quote/Quote.spec.ts +++ b/packages/core/src/quote/Quote.spec.ts @@ -5,30 +5,27 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/quote - */ - +import * as Did from '@kiltprotocol/did' import type { DidDocument, + DidResourceUri, + ICType, IClaim, ICostBreakdown, - ICType, + ICredential, IQuote, IQuoteAgreement, IQuoteAttesterSigned, - ICredential, - DidResourceUri, ResolvedDidKey, } from '@kiltprotocol/types' import { Crypto, SDKErrors } from '@kiltprotocol/utils' -import * as Did from '@kiltprotocol/did' + import { createLocalDemoFullDidFromKeypair, makeSigningKeyTool, -} from '@kiltprotocol/testing' -import * as CType from '../ctype' +} from '../../../../tests/testUtils' import * as Credential from '../credential' +import * as CType from '../ctype' import * as Quote from './Quote' import { QuoteSchema } from './QuoteSchema' diff --git a/packages/did/package.json b/packages/did/package.json index 0b8d65c58..b057624de 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -30,7 +30,6 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { - "@kiltprotocol/testing": "workspace:*", "rimraf": "^3.0.2", "typescript": "^4.8.3" }, diff --git a/packages/did/src/Did.chain.spec.ts b/packages/did/src/Did.chain.spec.ts index b66abac03..2efc9368d 100644 --- a/packages/did/src/Did.chain.spec.ts +++ b/packages/did/src/Did.chain.spec.ts @@ -5,13 +5,9 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/did - */ - import { ConfigService } from '@kiltprotocol/config' -import { ApiMocks } from '@kiltprotocol/testing' +import { ApiMocks } from '../../../tests/testUtils' import { serviceToChain } from './Did.chain' let api: any diff --git a/packages/did/src/Did.signature.spec.ts b/packages/did/src/Did.signature.spec.ts index 9ff4c3aeb..449e69813 100644 --- a/packages/did/src/Did.signature.spec.ts +++ b/packages/did/src/Did.signature.spec.ts @@ -5,9 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/did - */ +import { randomAsHex, randomAsU8a } from '@polkadot/util-crypto' import type { DidDocument, @@ -18,17 +16,17 @@ import type { NewLightDidVerificationKey, SignCallback, } from '@kiltprotocol/types' -import { randomAsHex, randomAsU8a } from '@polkadot/util-crypto' import { Crypto, SDKErrors } from '@kiltprotocol/utils' -import { makeSigningKeyTool } from '@kiltprotocol/testing' -import * as Did from './index.js' + +import { makeSigningKeyTool } from '../../../tests/testUtils' import { - verifyDidSignature, isDidSignature, signatureFromJson, signatureToJson, + verifyDidSignature, } from './Did.signature' -import { resolveKey, keyToResolvedKey } from './DidResolver' +import { keyToResolvedKey, resolveKey } from './DidResolver' +import * as Did from './index.js' jest.mock('./DidResolver') jest diff --git a/packages/did/src/DidDetails/DidDetails.spec.ts b/packages/did/src/DidDetails/DidDetails.spec.ts index 1ad1ba2fd..26302a1f6 100644 --- a/packages/did/src/DidDetails/DidDetails.spec.ts +++ b/packages/did/src/DidDetails/DidDetails.spec.ts @@ -9,10 +9,6 @@ import { DidDocument, DidKey, DidServiceEndpoint } from '@kiltprotocol/types' import { getService, getKey, getKeys } from './DidDetails' -/** - * @group unit/did - */ - const minimalDid: DidDocument = { uri: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', authentication: [ diff --git a/packages/did/src/DidDetails/FullDidDetails.spec.ts b/packages/did/src/DidDetails/FullDidDetails.spec.ts index a8a2595d2..3f8004931 100644 --- a/packages/did/src/DidDetails/FullDidDetails.spec.ts +++ b/packages/did/src/DidDetails/FullDidDetails.spec.ts @@ -8,25 +8,21 @@ import { BN } from '@polkadot/util' import { randomAsHex } from '@polkadot/util-crypto' +import { ConfigService } from '@kiltprotocol/config' import type { DidDocument, KiltKeyringPair, SignCallback, SubmittableExtrinsic, } from '@kiltprotocol/types' + import { ApiMocks, createLocalDemoFullDidFromKeypair, makeSigningKeyTool, -} from '@kiltprotocol/testing' -import { ConfigService } from '@kiltprotocol/config' - -import * as Did from './index.js' +} from '../../../../tests/testUtils' import { generateDidAuthenticatedTx } from '../Did.chain.js' - -/** - * @group unit/did - */ +import * as Did from './index.js' const augmentedApi = ApiMocks.createAugmentedApi() const mockedApi: any = ApiMocks.getMockedApi() diff --git a/packages/did/src/DidDetails/LightDidDetails.spec.ts b/packages/did/src/DidDetails/LightDidDetails.spec.ts index ed467d349..2a7a23a92 100644 --- a/packages/did/src/DidDetails/LightDidDetails.spec.ts +++ b/packages/did/src/DidDetails/LightDidDetails.spec.ts @@ -10,10 +10,6 @@ import { Crypto } from '@kiltprotocol/utils' import * as Did from '../index.js' -/** - * @group unit/did - */ - /* * Functions tested: * - createLightDidDocument diff --git a/packages/did/src/DidDocumentExporter/DidDocumentExporter.spec.ts b/packages/did/src/DidDocumentExporter/DidDocumentExporter.spec.ts index b7d9c22d1..4a957c40d 100644 --- a/packages/did/src/DidDocumentExporter/DidDocumentExporter.spec.ts +++ b/packages/did/src/DidDocumentExporter/DidDocumentExporter.spec.ts @@ -21,10 +21,6 @@ import { exportToDidDocument } from './DidDocumentExporter.js' import * as Did from '../index.js' import { KILT_DID_CONTEXT_URL, W3C_DID_CONTEXT_URL } from '../index.js' -/** - * @group unit/did - */ - const did: DidUri = 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' function generateAuthenticationKey(): DidVerificationKey { @@ -231,42 +227,42 @@ describe('When exporting a DID Document from a light DID', () => { const didDoc = exportToDidDocument(lightDid, 'application/json') expect(didDoc).toMatchInlineSnapshot(` - Object { - "authentication": Array [ + { + "authentication": [ "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#authentication", ], "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf", - "keyAgreement": Array [ + "keyAgreement": [ "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#encryption", ], - "service": Array [ - Object { + "service": [ + { "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#id-1", - "serviceEndpoint": Array [ + "serviceEndpoint": [ "x:url-id-1", ], - "type": Array [ + "type": [ "type-id-1", ], }, - Object { + { "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#id-2", - "serviceEndpoint": Array [ + "serviceEndpoint": [ "x:url-id-2", ], - "type": Array [ + "type": [ "type-id-2", ], }, ], - "verificationMethod": Array [ - Object { + "verificationMethod": [ + { "controller": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf", "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#authentication", "publicKeyBase58": "11111111111111111111111111111111", "type": "Ed25519VerificationKey2018", }, - Object { + { "controller": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf", "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#encryption", "publicKeyBase58": "11111111111111111111111111111111", @@ -281,46 +277,46 @@ describe('When exporting a DID Document from a light DID', () => { const didDoc = exportToDidDocument(lightDid, 'application/ld+json') expect(didDoc).toMatchInlineSnapshot(` - Object { - "@context": Array [ + { + "@context": [ "https://www.w3.org/ns/did/v1", "ipfs://QmU7QkuTCPz7NmD5bD7Z7mQVz2UsSPaEK58B5sYnjnPRNW", ], - "authentication": Array [ + "authentication": [ "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#authentication", ], "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf", - "keyAgreement": Array [ + "keyAgreement": [ "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#encryption", ], - "service": Array [ - Object { + "service": [ + { "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#id-1", - "serviceEndpoint": Array [ + "serviceEndpoint": [ "x:url-id-1", ], - "type": Array [ + "type": [ "type-id-1", ], }, - Object { + { "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#id-2", - "serviceEndpoint": Array [ + "serviceEndpoint": [ "x:url-id-2", ], - "type": Array [ + "type": [ "type-id-2", ], }, ], - "verificationMethod": Array [ - Object { + "verificationMethod": [ + { "controller": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf", "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#authentication", "publicKeyBase58": "11111111111111111111111111111111", "type": "Ed25519VerificationKey2018", }, - Object { + { "controller": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf", "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#encryption", "publicKeyBase58": "11111111111111111111111111111111", diff --git a/packages/did/src/DidResolver/DidResolver.spec.ts b/packages/did/src/DidResolver/DidResolver.spec.ts index 236b01c25..4a1c21280 100644 --- a/packages/did/src/DidResolver/DidResolver.spec.ts +++ b/packages/did/src/DidResolver/DidResolver.spec.ts @@ -8,6 +8,7 @@ import { BN } from '@polkadot/util' import { base58Encode } from '@polkadot/util-crypto' +import { ConfigService } from '@kiltprotocol/config' import type { ConformingDidKey, ConformingDidServiceEndpoint, @@ -26,23 +27,18 @@ import type { UriFragment, } from '@kiltprotocol/types' import { Crypto } from '@kiltprotocol/utils' -import { ApiMocks, makeSigningKeyTool } from '@kiltprotocol/testing' -import { ConfigService } from '@kiltprotocol/config' -import { getFullDidUriFromKey } from '../Did.utils' +import { ApiMocks, makeSigningKeyTool } from '../../../../tests/testUtils' import { linkedInfoFromChain } from '../Did.rpc.js' +import { getFullDidUriFromKey } from '../Did.utils' +import * as Did from '../index.js' import { resolve, resolveCompliant, resolveKey, resolveService, } from './index.js' -import * as Did from '../index.js' - -/** - * @group unit/did - */ const addressWithAuthenticationKey = '4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' diff --git a/packages/messaging/package.json b/packages/messaging/package.json index a4e269aea..b0c6837bb 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -30,7 +30,6 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { - "@kiltprotocol/testing": "workspace:*", "rimraf": "^3.0.2", "typescript": "^4.8.3" }, diff --git a/packages/messaging/src/Message.spec.ts b/packages/messaging/src/Message.spec.ts index e1ce56ae6..ea26bbaa1 100644 --- a/packages/messaging/src/Message.spec.ts +++ b/packages/messaging/src/Message.spec.ts @@ -5,28 +5,32 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/messaging - */ +import { u8aToHex } from '@polkadot/util' +import { + Attestation, + CType, + Claim, + Credential, + Quote, +} from '@kiltprotocol/core' +import * as Did from '@kiltprotocol/did' import type { DidDocument, DidResourceUri, DidUri, - IEncryptedMessage, - IQuote, - IRequestAttestation, - ISubmitAttestation, - ISubmitCredential, - ResolvedDidKey, IAcceptCredential, IAttestation, - IClaim, ICType, + IClaim, + ICredential, + ICredentialPresentation, IDelegationData, + IEncryptedMessage, IInformCreateDelegation, IInformDelegationCreation, IMessage, + IQuote, IQuoteAgreement, IQuoteAttesterSigned, IRejectAcceptDelegation, @@ -34,40 +38,33 @@ import type { IRejectCredential, IRejectTerms, IRequestAcceptDelegation, + IRequestAttestation, IRequestAttestationContent, IRequestCredential, IRequestCredentialContent, IRequestDelegationApproval, - ICredential, IRequestTerms, ISubmitAcceptDelegation, + ISubmitAttestation, ISubmitAttestationContent, + ISubmitCredential, ISubmitDelegationApproval, ISubmitTerms, ITerms, MessageBody, PartialClaim, - ICredentialPresentation, + ResolvedDidKey, } from '@kiltprotocol/types' +import { Crypto, SDKErrors } from '@kiltprotocol/utils' + import { - Quote, - Credential, - Attestation, - Claim, - CType, -} from '@kiltprotocol/core' -import * as Did from '@kiltprotocol/did' -import { + KeyTool, + KeyToolSignCallback, + createLocalDemoFullDidFromKeypair, createLocalDemoFullDidFromLightDid, makeEncryptionKeyTool, makeSigningKeyTool, - createLocalDemoFullDidFromKeypair, - KeyTool, - KeyToolSignCallback, -} from '@kiltprotocol/testing' -import { u8aToHex } from '@polkadot/util' -import { Crypto, SDKErrors } from '@kiltprotocol/utils' - +} from '../../../tests/testUtils' import * as Message from './Message' describe('Messaging', () => { diff --git a/packages/testing/package.json b/packages/testing/package.json deleted file mode 100644 index 1a8542801..000000000 --- a/packages/testing/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "@kiltprotocol/testing", - "private": true, - "version": "0.33.2-5", - "description": "", - "main": "./lib/cjs/index.js", - "module": "./lib/esm/index.js", - "types": "./lib/cjs/index.d.ts", - "exports": { - ".": { - "import": "./lib/esm/index.js", - "require": "./lib/cjs/index.js" - } - }, - "files": [ - "lib/**/*" - ], - "scripts": { - "clean": "rimraf ./lib", - "build": "yarn clean && yarn build:ts", - "build:ts": "yarn build:cjs && yarn build:esm", - "build:cjs": "tsc --declaration -p tsconfig.build.json && echo '{\"type\":\"commonjs\"}' > ./lib/cjs/package.json", - "build:esm": "tsc --declaration -p tsconfig.esm.json && echo '{\"type\":\"module\"}' > ./lib/esm/package.json" - }, - "repository": "github:kiltprotocol/sdk-js", - "engines": { - "node": ">=16.0" - }, - "author": "", - "license": "BSD-4-Clause", - "bugs": "https://github.com/KILTprotocol/sdk-js/issues", - "homepage": "https://github.com/KILTprotocol/sdk-js#readme", - "dependencies": { - "@kiltprotocol/chain-helpers": "workspace:*", - "@kiltprotocol/config": "workspace:*", - "@kiltprotocol/did": "workspace:*", - "@kiltprotocol/sdk-js": "workspace:*", - "@kiltprotocol/type-definitions": "workspace:*", - "@kiltprotocol/types": "workspace:*", - "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^10.4.0", - "@polkadot/keyring": "^12.0.0", - "@polkadot/types": "^10.4.0", - "@polkadot/util": "^12.0.0", - "@polkadot/util-crypto": "^12.0.0", - "tweetnacl": "^1.0.3", - "uuid": "^9.0.0" - }, - "devDependencies": { - "rimraf": "^3.0.2", - "typescript": "^4.8.3" - } -} diff --git a/packages/testing/tsconfig.build.json b/packages/testing/tsconfig.build.json deleted file mode 100644 index d59aa31ce..000000000 --- a/packages/testing/tsconfig.build.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - - "compilerOptions": { - "module": "CommonJS", - "outDir": "./lib/cjs" - }, - - "include": [ - "src/**/*.ts", "src/**/*.js" - ], - - "exclude": [ - "coverage", - "**/*.spec.ts", - ] -} diff --git a/packages/testing/tsconfig.esm.json b/packages/testing/tsconfig.esm.json deleted file mode 100644 index e1f3b73b6..000000000 --- a/packages/testing/tsconfig.esm.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.build.json", - "compilerOptions": { - "module": "ES6", - "outDir": "./lib/esm" - } -} diff --git a/packages/utils/src/Crypto.spec.ts b/packages/utils/src/Crypto.spec.ts index de8f3d621..fd08e586a 100644 --- a/packages/utils/src/Crypto.spec.ts +++ b/packages/utils/src/Crypto.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/utils - */ - import * as string from '@polkadot/util/string' import nacl from 'tweetnacl' import * as Crypto from './Crypto' @@ -97,7 +93,7 @@ describe('helper functions', () => { hashed = Crypto.hashStatements(statements, { nonceGenerator: () => '' }) expect(hashed.map((i) => i.digest)).toEqual(digests) expect(hashed.map((i) => i.saltedHash)).toMatchInlineSnapshot(` - Array [ + [ "0x3d4b9478848e85771d9d678f2d80966bf9ea36f0d05b44fe5b23433e14a3eace", "0x56c8f25bc8a9a8921c756c41f47efceb12c8129a9569456f7d80955bfcec2dcf", "0x46ee56523ea5289f05709c26f6be6b08f364a3f2d6a5a8b6cfb2839bfe6a506e", @@ -112,7 +108,7 @@ describe('helper functions', () => { }) expect(hashed.map((i) => i.digest)).toEqual(digests) expect(hashed.map((i) => i.saltedHash)).toMatchInlineSnapshot(` - Array [ + [ "0x7126bd9e273ae6a1b2cfdc5f987b0f862cf2db77fea9b017963fec83b328784d", "0xda617d15abd22984c2f1927f4e23a101696b7495c83ac178bbb91818ec102117", "0x4e31eef9054d0d8682707880a414b86fafaa963b19220d03273eae764ad0bc1d", diff --git a/packages/utils/src/DataUtils.spec.ts b/packages/utils/src/DataUtils.spec.ts index 19dfb5cae..c53cfc4c5 100644 --- a/packages/utils/src/DataUtils.spec.ts +++ b/packages/utils/src/DataUtils.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/utils - */ - import { encodeAddress } from '@polkadot/keyring' import type { KiltAddress } from '@kiltprotocol/types' import { SDKErrors, ss58Format } from './index' diff --git a/packages/utils/src/UUID.spec.ts b/packages/utils/src/UUID.spec.ts index 5ae83c706..fdc61a48a 100644 --- a/packages/utils/src/UUID.spec.ts +++ b/packages/utils/src/UUID.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/utils - */ - import * as UUID from './UUID' describe('UUID', () => { diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index e74803d69..e3b4d3935 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -32,7 +32,6 @@ "devDependencies": { "@digitalbazaar/ed25519-signature-2020": "^5.2.0", "@digitalbazaar/vc": "^6.0.1", - "@kiltprotocol/testing": "workspace:*", "rimraf": "^3.0.2", "typescript": "^4.8.3" }, diff --git a/packages/vc-export/src/CAIP/CAIP.spec.ts b/packages/vc-export/src/CAIP/CAIP.spec.ts index 1c10ffbdd..4ce8a3e01 100644 --- a/packages/vc-export/src/CAIP/CAIP.spec.ts +++ b/packages/vc-export/src/CAIP/CAIP.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/caip - */ - import { spiritnetGenesisHash } from '../constants' import { chainIdFromGenesis, parse as parseCaip2 } from './caip2' import { parse as parseCaip19 } from './caip19' @@ -19,7 +15,7 @@ it('parses a CAIP-2 chain id', () => { `"polkadot:411f057b9107718c9624d6aa4a3f23c1"` ) expect(parseCaip2(chainId)).toMatchInlineSnapshot(` - Object { + { "chainNamespace": "polkadot", "chainReference": "411f057b9107718c9624d6aa4a3f23c1", } @@ -37,7 +33,7 @@ it('throws if CAIP-2 identifier not valid', () => { it('parses a CAIP-19 asset id', () => { expect(parseCaip19('polkadot:1234567890abcdef/jabba:dabba/asset10')) .toMatchInlineSnapshot(` - Object { + { "assetId": "jabba:dabba/asset10", "assetInstance": "asset10", "assetNamespace": "jabba", diff --git a/packages/vc-export/src/CTypeVerification.spec.ts b/packages/vc-export/src/CTypeVerification.spec.ts index f526e045f..22530a98d 100644 --- a/packages/vc-export/src/CTypeVerification.spec.ts +++ b/packages/vc-export/src/CTypeVerification.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/vc-export - */ - import { CType } from '@kiltprotocol/core' import { randomAsHex, randomAsU8a } from '@polkadot/util-crypto' import { diff --git a/packages/vc-export/src/DidJwt.spec.ts b/packages/vc-export/src/DidJwt.spec.ts index 3cace4f82..9bae27a3f 100644 --- a/packages/vc-export/src/DidJwt.spec.ts +++ b/packages/vc-export/src/DidJwt.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/vc-export - */ - import { hexToU8a } from '@polkadot/util' import { ed25519PairFromSeed } from '@polkadot/util-crypto' import type { Keypair } from '@polkadot/util-crypto/types' diff --git a/packages/vc-export/src/KiltAttestationProofV1.spec.ts b/packages/vc-export/src/KiltAttestationProofV1.spec.ts index b066d8dca..a82c431e6 100644 --- a/packages/vc-export/src/KiltAttestationProofV1.spec.ts +++ b/packages/vc-export/src/KiltAttestationProofV1.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/vc-export - */ - import { encodeAddress, randomAsHex, randomAsU8a } from '@polkadot/util-crypto' import { u8aToHex, u8aToU8a } from '@polkadot/util' diff --git a/packages/vc-export/src/Presentation.spec.ts b/packages/vc-export/src/Presentation.spec.ts index 2dae8711b..02560beb0 100644 --- a/packages/vc-export/src/Presentation.spec.ts +++ b/packages/vc-export/src/Presentation.spec.ts @@ -5,44 +5,40 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/vc-export - */ - +import type { ApiPromise } from '@polkadot/api' +import type { Codec } from '@polkadot/types/types' import { hexToU8a } from '@polkadot/util' import { - secp256k1PairFromSeed, ed25519PairFromSeed, - randomAsU8a, encodeAddress, + randomAsU8a, + secp256k1PairFromSeed, } from '@polkadot/util-crypto' -import type { ApiPromise } from '@polkadot/api' import type { Keypair } from '@polkadot/util-crypto/types' -import type { Codec } from '@polkadot/types/types' import { init } from '@kiltprotocol/core' -import { Crypto } from '@kiltprotocol/utils' import { getFullDidUri, getFullDidUriFromKey } from '@kiltprotocol/did' -import { ApiMocks } from '@kiltprotocol/testing' import type { DidDocument, DidVerificationKey, ResolvedDidKey, VerificationKeyType, } from '@kiltprotocol/types' +import { Crypto } from '@kiltprotocol/utils' +import { ApiMocks } from '../../../tests/testUtils' +import { + create as createJWT, + credentialFromPayload, + credentialToPayload, + verify as verifyJWT, +} from './DidJwt' import { create as createPresentation, signAsJwt, verifySignedAsJwt, } from './Presentation' import type { VerifiableCredential, VerifiablePresentation } from './types' -import { - create as createJWT, - verify as verifyJWT, - credentialToPayload, - credentialFromPayload, -} from './DidJwt' const credential = { '@context': [ diff --git a/packages/vc-export/src/exportToVerifiableCredential.spec.ts b/packages/vc-export/src/exportToVerifiableCredential.spec.ts index 535121e14..e5eb3862b 100644 --- a/packages/vc-export/src/exportToVerifiableCredential.spec.ts +++ b/packages/vc-export/src/exportToVerifiableCredential.spec.ts @@ -5,27 +5,23 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/vc-export - */ - -import { randomAsU8a } from '@polkadot/util-crypto' import { hexToU8a, u8aConcat, u8aToU8a } from '@polkadot/util' +import { randomAsU8a } from '@polkadot/util-crypto' import { Credential } from '@kiltprotocol/core' -import { ApiMocks } from '@kiltprotocol/testing' import type { IAttestation, ICType, ICredential } from '@kiltprotocol/types' +import { ApiMocks } from '../../../tests/testUtils' import { credentialSchema, validateStructure as validateCredentialStructure, } from './KiltCredentialV1' -import { exportICredentialToVc } from './fromICredential' +import { credentialIdFromRootHash } from './common' import { DEFAULT_CREDENTIAL_CONTEXTS, DEFAULT_CREDENTIAL_TYPES, } from './constants' -import { credentialIdFromRootHash } from './common' +import { exportICredentialToVc } from './fromICredential' export const mockedApi = ApiMocks.createAugmentedApi() diff --git a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts b/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts index 33bd2262c..03272e689 100644 --- a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts +++ b/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/vc-js - */ - import { hexToU8a, u8aEq } from '@polkadot/util' // @ts-expect-error not a typescript module import * as vcjs from '@digitalbazaar/vc' @@ -574,7 +570,7 @@ describe('issuance', () => { } ) ).rejects.toThrowErrorMatchingInlineSnapshot( - `"The document to be signed must contain this suite's @context, \\"https://www.kilt.io/contexts/credentials\\"."` + `"The document to be signed must contain this suite's @context, "https://www.kilt.io/contexts/credentials"."` ) }) diff --git a/packages/vc-export/src/vc-js/suites/Sr25519Signature2020.spec.ts b/packages/vc-export/src/vc-js/suites/Sr25519Signature2020.spec.ts index 85847f46f..b7b94f442 100644 --- a/packages/vc-export/src/vc-js/suites/Sr25519Signature2020.spec.ts +++ b/packages/vc-export/src/vc-js/suites/Sr25519Signature2020.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/vc-js - */ - // @ts-expect-error not a typescript module import * as vcjs from '@digitalbazaar/vc' diff --git a/packages/vc-export/src/vc-js/suites/Sr25519VerificationKey2020.spec.ts b/packages/vc-export/src/vc-js/suites/Sr25519VerificationKey2020.spec.ts index a4afafa9a..2e717b1c4 100644 --- a/packages/vc-export/src/vc-js/suites/Sr25519VerificationKey2020.spec.ts +++ b/packages/vc-export/src/vc-js/suites/Sr25519VerificationKey2020.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group unit/vc-js - */ - import { Keyring } from '@kiltprotocol/utils' import { hexToU8a } from '@polkadot/util' import { randomAsU8a, signatureVerify } from '@polkadot/util-crypto' @@ -35,7 +31,7 @@ it('generates a key', async () => { expect( key.export({ publicKey: true, privateKey: true, includeContext: true }) ).toMatchInlineSnapshot(` - Object { + { "@context": "https://www.kilt.io/contexts/credentials", "controller": "Alice", "id": "Alice/key", diff --git a/packages/testing/src/BreakingChanges.spec.ts b/tests/breakingChanges/BreakingChanges.spec.ts similarity index 98% rename from packages/testing/src/BreakingChanges.spec.ts rename to tests/breakingChanges/BreakingChanges.spec.ts index 6890ec11a..2c73a6772 100644 --- a/packages/testing/src/BreakingChanges.spec.ts +++ b/tests/breakingChanges/BreakingChanges.spec.ts @@ -5,10 +5,6 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group breaking - */ - import { Attestation, Claim, @@ -26,7 +22,8 @@ import { } from '@kiltprotocol/sdk-js' import nacl from 'tweetnacl' import { v4 } from 'uuid' -import { makeEncryptionKeyTool } from './TestUtils' + +import { makeEncryptionKeyTool } from '../testUtils/index.js' jest.mock('uuid') jest.mocked(v4).mockReturnValue('1ee1307c-9e65-475d-9061-0b5bfd86d2f7') diff --git a/packages/testing/src/__snapshots__/BreakingChanges.spec.ts.snap b/tests/breakingChanges/__snapshots__/BreakingChanges.spec.ts.snap similarity index 92% rename from packages/testing/src/__snapshots__/BreakingChanges.spec.ts.snap rename to tests/breakingChanges/__snapshots__/BreakingChanges.spec.ts.snap index 4fbd05fa3..aed34b2a8 100644 --- a/packages/testing/src/__snapshots__/BreakingChanges.spec.ts.snap +++ b/tests/breakingChanges/__snapshots__/BreakingChanges.spec.ts.snap @@ -1,9 +1,9 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Breaking Changes Light DID does not break the light did uri generation 2`] = ` -Object { - "authentication": Array [ - Object { +{ + "authentication": [ + { "id": "#authentication", "publicKey": Uint8Array [ 132, @@ -42,8 +42,8 @@ Object { "type": "sr25519", }, ], - "keyAgreement": Array [ - Object { + "keyAgreement": [ + { "id": "#encryption", "publicKey": Uint8Array [ 179, @@ -82,13 +82,13 @@ Object { "type": "x25519", }, ], - "service": Array [ - Object { + "service": [ + { "id": "#1234", - "serviceEndpoint": Array [ + "serviceEndpoint": [ "https://ipfs.io/ipfs/QmNUAwg7JPK9nnuZiUri5nDaqLHqUFtNoZYtfD22Q6w3c8", ], - "type": Array [ + "type": [ "KiltPublishedCredentialCollectionV1", ], }, @@ -98,9 +98,9 @@ Object { `; exports[`Breaking Changes Messages does not break Message & EncryptedMessage structure 1`] = ` -Object { - "body": Object { - "content": Object { +{ + "body": { + "content": { "cTypeHash": "0x1234", }, "type": "request-terms", @@ -113,7 +113,7 @@ Object { `; exports[`Breaking Changes Messages does not break Message & EncryptedMessage structure 2`] = ` -Object { +{ "ciphertext": "0x8edac73d2230d66ba1a177db550773afa4f2d914786050424594c89f07ccbc2f643df95ba030281079a92215c66d76a74b39e6013cb8a5e1459a6853fdbfb522bff1295cbf9e5e2d6947de5974dafe6de32e6d42e2c349f07b5bb934a504d0a227d502e920cadfae44869ed041d86916cee71e0619650f15a1a04f27751f0839e8f3c629d626a54f489c4170b3ffefe118039925124acba91c097bf4d8c582f26c8a3b0f1dba93bf8da6b8f2a2a4303ac529c7028aec026f6baeb1ae95d90884f12890f4bc2d535247a170dd68a6828573e36502ef0d99fb4cdb0750b84902876009cca8662f952746cad88c9a8285b8be42ad349c67de540fb92e122d52c2ffa4c8e229076990ce60b13b64ddb6d769017262597bb33085cb8e09d5189f2077e48ece3c0100a1aa11935237a1ee3ef80200c4ccf92bb41d75c83238ac18360c6ce81df45ade968a59aff9fddf6a475fd976f581c267ddc377a1a239997ccdfd92f0e8d3a6b1b76f520e1c25ea7e3954ed555eb4ac02d68562cd1f031b724a063606c95d528c91b80ea49786303d0a6e7201e16f3e0d5571f205069da31874ed8e6c5d380cce070b2cb96961d2f594cc4a5dffc94e3782bf6a1da3bbc1af2f773e79250e09c3206b0e0c7a08a001393526220831f3735c07bf68c8ccca07260b8cb1acbb66163c73af0d783eb035a99add5d604f10916432846279524e8741b57961d52583ced5b79943c986a9f28d99be029b00e5688afcb3731152861a37ddf5e70c95dd64e2d765a4d0a662f93d16a3650c505dc2e4a048b0d585fadc8c4efa23360e81292c2ae88027068deed4ff3cd97d961b58afd95728aa4ce03340ebf13a4bc7d4b6f8b5e69a7a3ecb18c79a06946466d0b29ca0bd00c47d1256fe564b48eac37b389c246d9b556dc67921e27fb6a8aeb93953c1947834432e5ade8117bcad7173f9d8b43ebf4cce89789744d55215a8bbdfd9a7222cafccc02a3c62e5a26794ef21d1bba441f0aa9ca3e077f32e06daa22264345b66dbf34dbb9219434ad7c21b386de7587c3612fc36b63bdf650206a191fea82855a5181942c151c8a90741c8a930c570350f863ca448d908f7f1a098b0521a14c9c49bf99bd1715ebed5a93b3bc7e04fcd845efcc564448d0426e21496ca124ca8c96a1a598e90529d65fc33d64b937b16a077eaa052b10d34ef91a321a2c0476601318a7eaecc8308d618d82db10f8978c4310e1384bfb043d0a12c20325c4ceef36e144a9f2fb94d0dc546b5b4cbce162569e8e40454d219750eb85758555547c0900874bd2ca7c561aeab4e2b5e26130d91e22196fd138e8e73f6414c50c08a6f981e8a1ed244c2ee2f5c4d446d793e0039b5f75ea40215ebb2e2bcf8fae608173a00ccc24e016176417bbac0ce5682932341fc3a2a106a4f6d83dbf17a81fc7d0e5cbe52c92ece5789e8e8b3", "nonce": "0x2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a", "receivedAt": undefined, @@ -123,7 +123,7 @@ Object { `; exports[`Breaking Changes Messages does not break for attestation flow: attestation 1`] = ` -Object { +{ "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", "claimHash": "0x453559279a1816c20673194e21eb72f121e7b31f5b33ea3a8d3264d6f4d319ac", "delegationId": null, @@ -133,9 +133,9 @@ Object { `; exports[`Breaking Changes Messages does not break for attestation flow: claim 1`] = ` -Object { +{ "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", - "contents": Object { + "contents": { "name": "Bob", }, "owner": "did:kilt:light:004rn1Xps9QSMiAb2aMoKQbAred94wh1iLjGmNBYy1FVCS81ry:z1msTRicERqs59nwMvp3yzMRBhRatQoZZaiSZfyN7TzqeEs1bHHTCH3RURC6zWk5B8HXGZThZos9PJFJrkiYchNGbAGQRKSKucBVDVoXBLDyEm4P1dsco9wyoaWa5kkFw6DZgnKrTJg8Y8iCy7k2yo8GeMXAuR8qoBFFXj7Up7DxKJrMoQudvFHTy2uk2HPNfqkzJX17Wqsny1MKHD82eC3TcjrGCkhMZy3NmzkySmLsDmmHnG2csZ5vvefFRFZ1hSKfUtcV8EnLd3zozsiZByaLrED2XVbuHqPVzqcnrCJF8fSm49NcGDgsQkwnQwbuKfMkov9WwJoxhDSYG6e7WP", @@ -143,77 +143,77 @@ Object { `; exports[`Breaking Changes Messages does not break for attestation flow: credential 1`] = ` -Object { - "claim": Object { +{ + "claim": { "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", - "contents": Object { + "contents": { "name": "Bob", }, "owner": "did:kilt:light:004rzcHqKvv6TbsA46VpG53JrvdzRr6ccyboUNeCGTvDw2AozU:z1msTRicERqs59nwMvp3yzMRBhQhYShb1vEhbpWo5ZbqVAgi2UFELJk7MbUSeEfBdAVsJhdqcEAhXxH4YrV5nwgTYjFYszWKLFnYvSUhgZ7teDiLt1FbAo484ihnagUKQkE46o3fqSv52WgM6VatrEqetD3ekokxFtz4yn2vFYPdDMPmKE3cVxdKqPMa3Ewh6k46SENeEDZFLg1L8Yi73ZVEA9AwDg2RDuBDnpjetxBC6U5qMKVfqbh1rjgxpubpSj6sppHDq8xZ4LDU2bs1a9g6qcWJjkrtS69t3PTFZv5Ey84epnvbXEm8hsVnzTKsY6LbQmCiVqwKWUPUwXpj83", }, - "claimHashes": Array [ + "claimHashes": [ "0x901805bb5659ecf21cc79d50a98021d49eb83ee136a2609d4377dd615a271a78", "0xdaff2311c04ea4d2c16e9bd3dc4debba9822e5c4cfb53e36b48f090036169575", ], - "claimNonceMap": Object { + "claimNonceMap": { "0x499856031d06ddecbda0c1e0f1c0de4f53f614732f205190d81d0c76e793bdf0": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", "0x721cf4dd222afba0b79565332ac711cb634762052c3c2d45434f53f465d030f7": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", }, "delegationId": null, - "legitimations": Array [], + "legitimations": [], "rootHash": "0x453559279a1816c20673194e21eb72f121e7b31f5b33ea3a8d3264d6f4d319ac", } `; exports[`Breaking Changes Messages does not break for attestation flow: presentation 1`] = ` -Object { - "claim": Object { +{ + "claim": { "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", - "contents": Object { + "contents": { "name": "Bob", }, "owner": "did:kilt:light:004rzcHqKvv6TbsA46VpG53JrvdzRr6ccyboUNeCGTvDw2AozU:z1msTRicERqs59nwMvp3yzMRBhQhYShb1vEhbpWo5ZbqVAgi2UFELJk7MbUSeEfBdAVsJhdqcEAhXxH4YrV5nwgTYjFYszWKLFnYvSUhgZ7teDiLt1FbAo484ihnagUKQkE46o3fqSv52WgM6VatrEqetD3ekokxFtz4yn2vFYPdDMPmKE3cVxdKqPMa3Ewh6k46SENeEDZFLg1L8Yi73ZVEA9AwDg2RDuBDnpjetxBC6U5qMKVfqbh1rjgxpubpSj6sppHDq8xZ4LDU2bs1a9g6qcWJjkrtS69t3PTFZv5Ey84epnvbXEm8hsVnzTKsY6LbQmCiVqwKWUPUwXpj83", }, - "claimHashes": Array [ + "claimHashes": [ "0x901805bb5659ecf21cc79d50a98021d49eb83ee136a2609d4377dd615a271a78", "0xdaff2311c04ea4d2c16e9bd3dc4debba9822e5c4cfb53e36b48f090036169575", ], - "claimNonceMap": Object { + "claimNonceMap": { "0x499856031d06ddecbda0c1e0f1c0de4f53f614732f205190d81d0c76e793bdf0": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", "0x721cf4dd222afba0b79565332ac711cb634762052c3c2d45434f53f465d030f7": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", }, - "claimerSignature": Object { + "claimerSignature": { "challenge": "0xCAFE", "keyUri": "did:kilt:light:004rzcHqKvv6TbsA46VpG53JrvdzRr6ccyboUNeCGTvDw2AozU:z1msTRicERqs59nwMvp3yzMRBhQhYShb1vEhbpWo5ZbqVAgi2UFELJk7MbUSeEfBdAVsJhdqcEAhXxH4YrV5nwgTYjFYszWKLFnYvSUhgZ7teDiLt1FbAo484ihnagUKQkE46o3fqSv52WgM6VatrEqetD3ekokxFtz4yn2vFYPdDMPmKE3cVxdKqPMa3Ewh6k46SENeEDZFLg1L8Yi73ZVEA9AwDg2RDuBDnpjetxBC6U5qMKVfqbh1rjgxpubpSj6sppHDq8xZ4LDU2bs1a9g6qcWJjkrtS69t3PTFZv5Ey84epnvbXEm8hsVnzTKsY6LbQmCiVqwKWUPUwXpj83#authentication", "signature": "0x0000000000000000000000000000000000000000000000000000000000000000", }, "delegationId": null, - "legitimations": Array [], + "legitimations": [], "rootHash": "0x453559279a1816c20673194e21eb72f121e7b31f5b33ea3a8d3264d6f4d319ac", } `; exports[`Breaking Changes Messages does not break for attestation flow: request-attestation 1`] = ` -Object { - "content": Object { - "credential": Object { - "claim": Object { +{ + "content": { + "credential": { + "claim": { "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", - "contents": Object { + "contents": { "name": "Bob", }, "owner": "did:kilt:light:004rzcHqKvv6TbsA46VpG53JrvdzRr6ccyboUNeCGTvDw2AozU:z1msTRicERqs59nwMvp3yzMRBhQhYShb1vEhbpWo5ZbqVAgi2UFELJk7MbUSeEfBdAVsJhdqcEAhXxH4YrV5nwgTYjFYszWKLFnYvSUhgZ7teDiLt1FbAo484ihnagUKQkE46o3fqSv52WgM6VatrEqetD3ekokxFtz4yn2vFYPdDMPmKE3cVxdKqPMa3Ewh6k46SENeEDZFLg1L8Yi73ZVEA9AwDg2RDuBDnpjetxBC6U5qMKVfqbh1rjgxpubpSj6sppHDq8xZ4LDU2bs1a9g6qcWJjkrtS69t3PTFZv5Ey84epnvbXEm8hsVnzTKsY6LbQmCiVqwKWUPUwXpj83", }, - "claimHashes": Array [ + "claimHashes": [ "0x901805bb5659ecf21cc79d50a98021d49eb83ee136a2609d4377dd615a271a78", "0xdaff2311c04ea4d2c16e9bd3dc4debba9822e5c4cfb53e36b48f090036169575", ], - "claimNonceMap": Object { + "claimNonceMap": { "0x499856031d06ddecbda0c1e0f1c0de4f53f614732f205190d81d0c76e793bdf0": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", "0x721cf4dd222afba0b79565332ac711cb634762052c3c2d45434f53f465d030f7": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", }, "delegationId": null, - "legitimations": Array [], + "legitimations": [], "rootHash": "0x453559279a1816c20673194e21eb72f121e7b31f5b33ea3a8d3264d6f4d319ac", }, }, @@ -222,15 +222,15 @@ Object { `; exports[`Breaking Changes Messages does not break for attestation flow: request-credential 1`] = ` -Object { - "content": Object { - "cTypes": Array [ - Object { +{ + "content": { + "cTypes": [ + { "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", - "requiredProperties": Array [ + "requiredProperties": [ "name", ], - "trustedAttesters": Array [ + "trustedAttesters": [ "did:kilt:light:004rn1Xps9QSMiAb2aMoKQbAred94wh1iLjGmNBYy1FVCS81ry:z1msTRicERqs59nwMvp3yzMRBhRatQoZZaiSZfyN7TzqeEs1bHHTCH3RURC6zWk5B8HXGZThZos9PJFJrkiYchNGbAGQRKSKucBVDVoXBLDyEm4P1dsco9wyoaWa5kkFw6DZgnKrTJg8Y8iCy7k2yo8GeMXAuR8qoBFFXj7Up7DxKJrMoQudvFHTy2uk2HPNfqkzJX17Wqsny1MKHD82eC3TcjrGCkhMZy3NmzkySmLsDmmHnG2csZ5vvefFRFZ1hSKfUtcV8EnLd3zozsiZByaLrED2XVbuHqPVzqcnrCJF8fSm49NcGDgsQkwnQwbuKfMkov9WwJoxhDSYG6e7WP", ], }, @@ -242,8 +242,8 @@ Object { `; exports[`Breaking Changes Messages does not break for attestation flow: request-terms 1`] = ` -Object { - "content": Object { +{ + "content": { "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", }, "type": "request-terms", @@ -251,9 +251,9 @@ Object { `; exports[`Breaking Changes Messages does not break for attestation flow: submit-attestation 1`] = ` -Object { - "content": Object { - "attestation": Object { +{ + "content": { + "attestation": { "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", "claimHash": "0x453559279a1816c20673194e21eb72f121e7b31f5b33ea3a8d3264d6f4d319ac", "delegationId": null, @@ -266,31 +266,31 @@ Object { `; exports[`Breaking Changes Messages does not break for attestation flow: submit-credential 1`] = ` -Object { - "content": Array [ - Object { - "claim": Object { +{ + "content": [ + { + "claim": { "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", - "contents": Object { + "contents": { "name": "Bob", }, "owner": "did:kilt:light:004rzcHqKvv6TbsA46VpG53JrvdzRr6ccyboUNeCGTvDw2AozU:z1msTRicERqs59nwMvp3yzMRBhQhYShb1vEhbpWo5ZbqVAgi2UFELJk7MbUSeEfBdAVsJhdqcEAhXxH4YrV5nwgTYjFYszWKLFnYvSUhgZ7teDiLt1FbAo484ihnagUKQkE46o3fqSv52WgM6VatrEqetD3ekokxFtz4yn2vFYPdDMPmKE3cVxdKqPMa3Ewh6k46SENeEDZFLg1L8Yi73ZVEA9AwDg2RDuBDnpjetxBC6U5qMKVfqbh1rjgxpubpSj6sppHDq8xZ4LDU2bs1a9g6qcWJjkrtS69t3PTFZv5Ey84epnvbXEm8hsVnzTKsY6LbQmCiVqwKWUPUwXpj83", }, - "claimHashes": Array [ + "claimHashes": [ "0x901805bb5659ecf21cc79d50a98021d49eb83ee136a2609d4377dd615a271a78", "0xdaff2311c04ea4d2c16e9bd3dc4debba9822e5c4cfb53e36b48f090036169575", ], - "claimNonceMap": Object { + "claimNonceMap": { "0x499856031d06ddecbda0c1e0f1c0de4f53f614732f205190d81d0c76e793bdf0": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", "0x721cf4dd222afba0b79565332ac711cb634762052c3c2d45434f53f465d030f7": "1ee1307c-9e65-475d-9061-0b5bfd86d2f7", }, - "claimerSignature": Object { + "claimerSignature": { "challenge": "0xCAFE", "keyUri": "did:kilt:light:004rzcHqKvv6TbsA46VpG53JrvdzRr6ccyboUNeCGTvDw2AozU:z1msTRicERqs59nwMvp3yzMRBhQhYShb1vEhbpWo5ZbqVAgi2UFELJk7MbUSeEfBdAVsJhdqcEAhXxH4YrV5nwgTYjFYszWKLFnYvSUhgZ7teDiLt1FbAo484ihnagUKQkE46o3fqSv52WgM6VatrEqetD3ekokxFtz4yn2vFYPdDMPmKE3cVxdKqPMa3Ewh6k46SENeEDZFLg1L8Yi73ZVEA9AwDg2RDuBDnpjetxBC6U5qMKVfqbh1rjgxpubpSj6sppHDq8xZ4LDU2bs1a9g6qcWJjkrtS69t3PTFZv5Ey84epnvbXEm8hsVnzTKsY6LbQmCiVqwKWUPUwXpj83#authentication", "signature": "0x0000000000000000000000000000000000000000000000000000000000000000", }, "delegationId": null, - "legitimations": Array [], + "legitimations": [], "rootHash": "0x453559279a1816c20673194e21eb72f121e7b31f5b33ea3a8d3264d6f4d319ac", }, ], @@ -299,16 +299,16 @@ Object { `; exports[`Breaking Changes Messages does not break for attestation flow: submit-terms 1`] = ` -Object { - "content": Object { - "claim": Object { +{ + "content": { + "claim": { "cTypeHash": "0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c", - "contents": Object { + "contents": { "name": "Bob", }, "owner": "did:kilt:light:004rn1Xps9QSMiAb2aMoKQbAred94wh1iLjGmNBYy1FVCS81ry:z1msTRicERqs59nwMvp3yzMRBhRatQoZZaiSZfyN7TzqeEs1bHHTCH3RURC6zWk5B8HXGZThZos9PJFJrkiYchNGbAGQRKSKucBVDVoXBLDyEm4P1dsco9wyoaWa5kkFw6DZgnKrTJg8Y8iCy7k2yo8GeMXAuR8qoBFFXj7Up7DxKJrMoQudvFHTy2uk2HPNfqkzJX17Wqsny1MKHD82eC3TcjrGCkhMZy3NmzkySmLsDmmHnG2csZ5vvefFRFZ1hSKfUtcV8EnLd3zozsiZByaLrED2XVbuHqPVzqcnrCJF8fSm49NcGDgsQkwnQwbuKfMkov9WwJoxhDSYG6e7WP", }, - "legitimations": Array [], + "legitimations": [], }, "type": "submit-terms", } diff --git a/tests/bundle-test.html b/tests/bundle/bundle-test.html similarity index 60% rename from tests/bundle-test.html rename to tests/bundle/bundle-test.html index 2ed21cbcb..ab8c4378e 100644 --- a/tests/bundle-test.html +++ b/tests/bundle/bundle-test.html @@ -1,13 +1,13 @@ - + Bundle tests - + diff --git a/tests/bundle-test.ts b/tests/bundle/bundle-test.ts similarity index 97% rename from tests/bundle-test.ts rename to tests/bundle/bundle-test.ts index 091ea0e0b..df39e0397 100644 --- a/tests/bundle-test.ts +++ b/tests/bundle/bundle-test.ts @@ -149,7 +149,9 @@ async function createFullDidFromKeypair( await Blockchain.signAndSubmitTx(storeTx, payer) const queryFunction = api.call.did?.query ?? api.call.didApi.queryDid - const encodedDidDetails = await queryFunction(Did.toChain(Did.getFullDidUriFromKey(keypair))) + const encodedDidDetails = await queryFunction( + Did.toChain(Did.getFullDidUriFromKey(keypair)) + ) return Did.linkedInfoFromChain(encodedDidDetails).document } @@ -223,7 +225,9 @@ async function runAll() { await Blockchain.signAndSubmitTx(didStoreTx, payer) const queryFunction = api.call.did?.query ?? api.call.didApi.queryDid - const encodedDidDetails = await queryFunction(Did.toChain(Did.getFullDidUriFromKey(keypair))) + const encodedDidDetails = await queryFunction( + Did.toChain(Did.getFullDidUriFromKey(keypair)) + ) const fullDid = Did.linkedInfoFromChain(encodedDidDetails).document const resolved = await Did.resolve(fullDid.uri) diff --git a/tests/bundle.spec.ts b/tests/bundle/bundle.spec.ts similarity index 100% rename from tests/bundle.spec.ts rename to tests/bundle/bundle.spec.ts diff --git a/tests/playwright.config.ts b/tests/bundle/playwright.config.ts similarity index 100% rename from tests/playwright.config.ts rename to tests/bundle/playwright.config.ts diff --git a/tests/tsconfig.json b/tests/bundle/tsconfig.json similarity index 75% rename from tests/tsconfig.json rename to tests/bundle/tsconfig.json index ba717355b..6ea1fa0bc 100644 --- a/tests/tsconfig.json +++ b/tests/bundle/tsconfig.json @@ -1,7 +1,8 @@ { - "extends": "../tsconfig.json", + "extends": "../../tsconfig.json", "include": ["bundle-test.ts", "types.d.ts"], "compilerOptions": { + "baseUrl": "./", "module": "None", "resolveJsonModule": false, "sourceMap": false, diff --git a/tests/types.d.ts b/tests/bundle/types.d.ts similarity index 100% rename from tests/types.d.ts rename to tests/bundle/types.d.ts diff --git a/packages/core/src/__integrationtests__/AccountLinking.spec.ts b/tests/integration/AccountLinking.spec.ts similarity index 98% rename from packages/core/src/__integrationtests__/AccountLinking.spec.ts rename to tests/integration/AccountLinking.spec.ts index 3f31ec64c..51b9da0ae 100644 --- a/packages/core/src/__integrationtests__/AccountLinking.spec.ts +++ b/tests/integration/AccountLinking.spec.ts @@ -5,33 +5,30 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group integration/accountLinking - */ +import type { ApiPromise } from '@polkadot/api' +import { Keyring } from '@polkadot/keyring' +import { BN } from '@polkadot/util' +import { mnemonicGenerate } from '@polkadot/util-crypto' +import { BalanceUtils, disconnect } from '@kiltprotocol/core' import * as Did from '@kiltprotocol/did' -import { - createFullDidFromSeed, - KeyTool, - makeSigningKeyTool, -} from '@kiltprotocol/testing' import type { DidDocument, KeyringPair, KiltKeyringPair, } from '@kiltprotocol/types' -import { Keyring } from '@polkadot/keyring' -import { BN } from '@polkadot/util' -import type { ApiPromise } from '@polkadot/api' -import { mnemonicGenerate } from '@polkadot/util-crypto' -import { convertToTxUnit } from '../balance/Balance.utils' + +import { + createFullDidFromSeed, + KeyTool, + makeSigningKeyTool, +} from '../testUtils/index.js' import { createEndowedTestAccount, fundAccount, initializeApi, submitTx, -} from './utils' -import { disconnect } from '../kilt' +} from './utils.js' let paymentAccount: KiltKeyringPair let linkDeposit: BN @@ -289,7 +286,10 @@ describe('When there is an on-chain DID', () => { genericAccount = new Keyring({ type: 'ecdsa' }).addFromMnemonic( mnemonicGenerate() ) - await fundAccount(genericAccount.address, convertToTxUnit(new BN(10), 1)) + await fundAccount( + genericAccount.address, + BalanceUtils.convertToTxUnit(new BN(10), 1) + ) didKey = makeSigningKeyTool() newDidKey = makeSigningKeyTool() did = await createFullDidFromSeed(paymentAccount, didKey.keypair) diff --git a/packages/core/src/__integrationtests__/Attestation.spec.ts b/tests/integration/Attestation.spec.ts similarity index 98% rename from packages/core/src/__integrationtests__/Attestation.spec.ts rename to tests/integration/Attestation.spec.ts index 46883e811..09f205af0 100644 --- a/packages/core/src/__integrationtests__/Attestation.spec.ts +++ b/tests/integration/Attestation.spec.ts @@ -5,36 +5,36 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group integration/attestation - */ +import type { ApiPromise } from '@polkadot/api' +import { + Attestation, + Claim, + Credential, + CType, + disconnect, +} from '@kiltprotocol/core' +import * as Did from '@kiltprotocol/did' import type { DidDocument, IAttestation, ICredential, KiltKeyringPair, } from '@kiltprotocol/types' +import { Crypto } from '@kiltprotocol/utils' + import { createFullDidFromSeed, KeyTool, makeSigningKeyTool, -} from '@kiltprotocol/testing' -import * as Did from '@kiltprotocol/did' -import { Crypto } from '@kiltprotocol/utils' -import { ApiPromise } from '@polkadot/api' -import * as Attestation from '../attestation' -import * as Credential from '../credential' -import { disconnect } from '../kilt' -import * as Claim from '../claim' -import * as CType from '../ctype' +} from '../testUtils/index.js' import { createEndowedTestAccount, driversLicenseCType, initializeApi, isCtypeOnChain, submitTx, -} from './utils' +} from './utils.js' let tokenHolder: KiltKeyringPair let attester: DidDocument diff --git a/packages/core/src/__integrationtests__/Balance.spec.ts b/tests/integration/Balance.spec.ts similarity index 95% rename from packages/core/src/__integrationtests__/Balance.spec.ts rename to tests/integration/Balance.spec.ts index 555d2fa19..c05d58cc0 100644 --- a/packages/core/src/__integrationtests__/Balance.spec.ts +++ b/tests/integration/Balance.spec.ts @@ -5,16 +5,15 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group integration/balance - */ +import { jest } from '@jest/globals' import { ApiPromise } from '@polkadot/api' import { BN } from '@polkadot/util' +import { disconnect } from '@kiltprotocol/core' import type { KeyringPair } from '@kiltprotocol/types' -import { makeSigningKeyTool } from '@kiltprotocol/testing' -import { disconnect } from '../kilt' + +import { makeSigningKeyTool } from '../testUtils/index.js' import { addressFromRandom, devAlice, @@ -23,7 +22,7 @@ import { EXISTENTIAL_DEPOSIT, initializeApi, submitTx, -} from './utils' +} from './utils.js' let api: ApiPromise beforeAll(async () => { @@ -66,7 +65,7 @@ describe('when there is a dev chain with a faucet', () => { // in the other test cases. it('should be able to faucet coins to a new address', async () => { const address = addressFromRandom() - const spy = jest.fn() + const spy = jest.fn() api.query.system.account(address, spy) const balanceBefore = (await api.query.system.account(faucet.address)).data const transferTx = api.tx.balances.transfer(address, EXISTENTIAL_DEPOSIT) @@ -140,7 +139,7 @@ describe('When there are haves and have-nots', () => { }, 30_000) it('should be able to make a new transaction once the last is ready', async () => { - const spy = jest.fn() + const spy = jest.fn() api.query.system.account(faucet.address, spy) const transferTx1 = api.tx.balances.transfer( @@ -158,7 +157,7 @@ describe('When there are haves and have-nots', () => { }, 30_000) it('should be able to make multiple transactions at once', async () => { - const listener = jest.fn() + const listener = jest.fn() api.query.system.account(faucet.address, listener) const batch = api.tx.utility.batchAll([ diff --git a/packages/core/src/__integrationtests__/Blockchain.spec.ts b/tests/integration/Blockchain.spec.ts similarity index 93% rename from packages/core/src/__integrationtests__/Blockchain.spec.ts rename to tests/integration/Blockchain.spec.ts index 74bfdbeda..d54729eb0 100644 --- a/packages/core/src/__integrationtests__/Blockchain.spec.ts +++ b/tests/integration/Blockchain.spec.ts @@ -5,20 +5,15 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group integration/blockchain - */ - -import { BN } from '@polkadot/util' import type { ApiPromise } from '@polkadot/api' +import { BN } from '@polkadot/util' -import type { KeyringPair } from '@kiltprotocol/types' import { Blockchain } from '@kiltprotocol/chain-helpers' -import { makeSigningKeyTool } from '@kiltprotocol/testing' +import { BalanceUtils, disconnect } from '@kiltprotocol/core' +import type { KeyringPair } from '@kiltprotocol/types' -import { toFemtoKilt } from '../balance/Balance.utils' -import { devCharlie, devFaucet, initializeApi, submitTx } from './utils' -import { disconnect } from '../kilt' +import { makeSigningKeyTool } from '../testUtils/index.js' +import { devCharlie, devFaucet, initializeApi, submitTx } from './utils.js' let api: ApiPromise beforeAll(async () => { @@ -36,7 +31,7 @@ describe('Chain returns specific errors, that we check for', () => { const transferTx = api.tx.balances.transfer( testIdentity.address, - toFemtoKilt(10000) + BalanceUtils.toFemtoKilt(10000) ) await submitTx(transferTx, faucet) }, 40000) @@ -143,7 +138,11 @@ describe('Chain returns specific errors, that we check for', () => { ) const promiseToFail = Blockchain.dispatchTx(tx) - const promiseToUsurp = Blockchain.dispatchTx(errorTx) + const promiseToUsurp = new Promise((resolve) => { + setTimeout(() => { + resolve(Blockchain.dispatchTx(errorTx)) + }, 50) + }) await Promise.all([ expect(promiseToFail).rejects.toHaveProperty('status.isUsurped', true), promiseToUsurp, diff --git a/packages/core/src/__integrationtests__/Ctypes.spec.ts b/tests/integration/Ctypes.spec.ts similarity index 95% rename from packages/core/src/__integrationtests__/Ctypes.spec.ts rename to tests/integration/Ctypes.spec.ts index e24dc7a5d..8db6ebf37 100644 --- a/packages/core/src/__integrationtests__/Ctypes.spec.ts +++ b/tests/integration/Ctypes.spec.ts @@ -5,22 +5,19 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group integration/ctype - */ +import type { ApiPromise } from '@polkadot/api' -import type { DidDocument, ICType, KiltKeyringPair } from '@kiltprotocol/types' +import { CType, disconnect } from '@kiltprotocol/core' import * as Did from '@kiltprotocol/did' +import type { DidDocument, ICType, KiltKeyringPair } from '@kiltprotocol/types' +import { Crypto, UUID } from '@kiltprotocol/utils' + import { - createFullDidFromSeed, KeyTool, + createFullDidFromSeed, makeSigningKeyTool, -} from '@kiltprotocol/testing' -import { Crypto, UUID } from '@kiltprotocol/utils' -import { ApiPromise } from '@polkadot/api' -import * as CType from '../ctype' -import { disconnect } from '../kilt' -import { createEndowedTestAccount, initializeApi, submitTx } from './utils' +} from '../testUtils/index.js' +import { createEndowedTestAccount, initializeApi, submitTx } from './utils.js' let api: ApiPromise // we skip fetching CTypes from chain for the old pallet version, where the necessary information was not yet on chain. diff --git a/packages/core/src/__integrationtests__/Delegation.spec.ts b/tests/integration/Delegation.spec.ts similarity index 96% rename from packages/core/src/__integrationtests__/Delegation.spec.ts rename to tests/integration/Delegation.spec.ts index b2d56a31a..325ab53e0 100644 --- a/packages/core/src/__integrationtests__/Delegation.spec.ts +++ b/tests/integration/Delegation.spec.ts @@ -5,10 +5,18 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group integration/delegation - */ +import { ApiPromise } from '@polkadot/api' +import { randomAsHex } from '@polkadot/util-crypto' +import { + Attestation, + CType, + Claim, + Credential, + DelegationNode, + disconnect, +} from '@kiltprotocol/core' +import * as Did from '@kiltprotocol/did' import type { DidDocument, ICType, @@ -17,20 +25,12 @@ import type { SignCallback, } from '@kiltprotocol/types' import { Permission, PermissionType } from '@kiltprotocol/types' + import { - createFullDidFromSeed, KeyTool, + createFullDidFromSeed, makeSigningKeyTool, -} from '@kiltprotocol/testing' -import * as Did from '@kiltprotocol/did' -import { ApiPromise } from '@polkadot/api' -import { randomAsHex } from '@polkadot/util-crypto' -import * as Attestation from '../attestation' -import * as Claim from '../claim' -import * as CType from '../ctype' -import * as Credential from '../credential' -import { disconnect } from '../kilt' -import { DelegationNode } from '../delegation/DelegationNode' +} from '../testUtils/index.js' import { createEndowedTestAccount, devBob, @@ -38,8 +38,7 @@ import { initializeApi, isCtypeOnChain, submitTx, -} from './utils' -import { getAttestationHashes } from '../delegation/DelegationNode.chain' +} from './utils.js' let api: ApiPromise @@ -435,7 +434,14 @@ describe('handling queries to data not on chain', () => { }) it('getAttestationHashes on empty', async () => { - expect(await getAttestationHashes(randomAsHex(32))).toEqual([]) + expect( + await DelegationNode.newNode({ + permissions: [0], + hierarchyId: randomAsHex(32), + parentId: randomAsHex(32), + account: attester.uri, + }).getAttestationHashes() + ).toEqual([]) }) }) diff --git a/packages/core/src/__integrationtests__/Deposit.spec.ts b/tests/integration/Deposit.spec.ts similarity index 97% rename from packages/core/src/__integrationtests__/Deposit.spec.ts rename to tests/integration/Deposit.spec.ts index 65612e4fe..92f4f2da1 100644 --- a/packages/core/src/__integrationtests__/Deposit.spec.ts +++ b/tests/integration/Deposit.spec.ts @@ -5,18 +5,17 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group integration/deposit - */ +import type { ApiPromise } from '@polkadot/api' +import { BN } from '@polkadot/util' -import * as Did from '@kiltprotocol/did' import { - createFullDidFromLightDid, - createFullDidFromSeed, - createMinimalLightDidFromKeypair, - KeyTool, - makeSigningKeyTool, -} from '@kiltprotocol/testing' + Attestation, + Claim, + Credential, + CType, + disconnect, +} from '@kiltprotocol/core' +import * as Did from '@kiltprotocol/did' import type { DidDocument, IAttestation, @@ -26,8 +25,13 @@ import type { SignCallback, SubmittableExtrinsic, } from '@kiltprotocol/types' -import type { ApiPromise } from '@polkadot/api' -import { BN } from '@polkadot/util' +import { + createFullDidFromLightDid, + createFullDidFromSeed, + createMinimalLightDidFromKeypair, + KeyTool, + makeSigningKeyTool, +} from '../testUtils/index.js' import { devFaucet, driversLicenseCTypeForDeposit as driversLicenseCType, @@ -35,12 +39,7 @@ import { initializeApi, isCtypeOnChain, submitTx, -} from './utils' -import * as Attestation from '../attestation' -import * as Claim from '../claim' -import * as Credential from '../credential' -import { disconnect } from '../kilt' -import * as CType from '../ctype' +} from './utils.js' let api: ApiPromise let tx: SubmittableExtrinsic diff --git a/packages/core/src/__integrationtests__/Did.spec.ts b/tests/integration/Did.spec.ts similarity index 99% rename from packages/core/src/__integrationtests__/Did.spec.ts rename to tests/integration/Did.spec.ts index 93e4d96b2..be357b3c1 100644 --- a/packages/core/src/__integrationtests__/Did.spec.ts +++ b/tests/integration/Did.spec.ts @@ -5,21 +5,11 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group integration/did - */ - import type { ApiPromise } from '@polkadot/api' import { BN } from '@polkadot/util' +import { CType, DelegationNode, disconnect } from '@kiltprotocol/core' import * as Did from '@kiltprotocol/did' -import { - createFullDidFromSeed, - createMinimalLightDidFromKeypair, - KeyTool, - makeEncryptionKeyTool, - makeSigningKeyTool, -} from '@kiltprotocol/testing' import { DidDocument, DidResolutionResult, @@ -33,15 +23,19 @@ import { } from '@kiltprotocol/types' import { UUID } from '@kiltprotocol/utils' -import * as CType from '../ctype' -import { disconnect } from '../kilt' +import { + createFullDidFromSeed, + createMinimalLightDidFromKeypair, + KeyTool, + makeEncryptionKeyTool, + makeSigningKeyTool, +} from '../testUtils/index.js' import { createEndowedTestAccount, devBob, initializeApi, submitTx, -} from './utils' -import { DelegationNode } from '../delegation' +} from './utils.js' let paymentAccount: KiltKeyringPair let api: ApiPromise diff --git a/packages/core/src/__integrationtests__/ErrorHandler.spec.ts b/tests/integration/ErrorHandler.spec.ts similarity index 72% rename from packages/core/src/__integrationtests__/ErrorHandler.spec.ts rename to tests/integration/ErrorHandler.spec.ts index 497cc4139..611179e15 100644 --- a/packages/core/src/__integrationtests__/ErrorHandler.spec.ts +++ b/tests/integration/ErrorHandler.spec.ts @@ -5,30 +5,28 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group integration/errorhandler - */ - -import { BN } from '@polkadot/util' import { ApiPromise } from '@polkadot/api' + +import { disconnect } from '@kiltprotocol/core' +import * as Did from '@kiltprotocol/did' import type { DidDocument, IAttestation, KiltKeyringPair, } from '@kiltprotocol/types' + import { - createFullDidFromSeed, KeyTool, + createFullDidFromSeed, makeSigningKeyTool, -} from '@kiltprotocol/testing' -import * as Did from '@kiltprotocol/did' -import { disconnect } from '../kilt' +} from '../testUtils/index.js' + import { addressFromRandom, createEndowedTestAccount, initializeApi, submitTx, -} from './utils' +} from './utils.js' let paymentAccount: KiltKeyringPair let someDid: DidDocument @@ -46,11 +44,29 @@ beforeAll(async () => { }, 60_000) it('records an extrinsic error when transferring less than the existential amount to new identity', async () => { - const transferTx = api.tx.balances.transfer(addressFromRandom(), new BN(1)) - await expect(submitTx(transferTx, paymentAccount)).rejects.toMatchObject({ - section: 'balances', - name: 'ExistentialDeposit', - }) + const transferTx = api.tx.balances.transfer(addressFromRandom(), 1) + const promise = submitTx(transferTx, paymentAccount) + if (api.runtimeVersion.specVersion.toBigInt() > 11_000n) { + await expect(promise).rejects.toMatchInlineSnapshot(` + { + "token": "BelowMinimum", + } + `) + } else { + await expect(promise).rejects.toMatchInlineSnapshot(` + { + "args": [], + "docs": [ + "Value too low to create account due to existential deposit", + ], + "fields": [], + "index": 3, + "method": "ExistentialDeposit", + "name": "ExistentialDeposit", + "section": "balances", + } + `) + } }, 30_000) it('records an extrinsic error when ctype does not exist', async () => { diff --git a/packages/core/src/__integrationtests__/PublicCredentials.spec.ts b/tests/integration/PublicCredentials.spec.ts similarity index 98% rename from packages/core/src/__integrationtests__/PublicCredentials.spec.ts rename to tests/integration/PublicCredentials.spec.ts index dfa42f056..f28799855 100644 --- a/packages/core/src/__integrationtests__/PublicCredentials.spec.ts +++ b/tests/integration/PublicCredentials.spec.ts @@ -5,31 +5,27 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group integration/publicCredentials - */ - -import type { ApiPromise } from '@polkadot/api' import type { AssetDidUri, DidDocument, + HexString, IPublicCredential, IPublicCredentialInput, KiltKeyringPair, - HexString, } from '@kiltprotocol/types' - +import type { ApiPromise } from '@polkadot/api' import { BN } from '@polkadot/util' import { randomAsHex } from '@polkadot/util-crypto' + +import { CType, disconnect, PublicCredential } from '@kiltprotocol/core' import * as Did from '@kiltprotocol/did' +import { UUID } from '@kiltprotocol/utils' + import { createFullDidFromSeed, KeyTool, makeSigningKeyTool, -} from '@kiltprotocol/testing' -import { UUID } from '@kiltprotocol/utils' -import * as CType from '../ctype' -import * as PublicCredential from '../publicCredential' +} from '../testUtils/index.js' import { createEndowedTestAccount, devAlice, @@ -37,8 +33,7 @@ import { isCtypeOnChain, nftNameCType, submitTx, -} from './utils' -import { disconnect } from '../kilt' +} from './utils.js' let tokenHolder: KiltKeyringPair let attester: DidDocument diff --git a/packages/core/src/__integrationtests__/Web3Names.spec.ts b/tests/integration/Web3Names.spec.ts similarity index 98% rename from packages/core/src/__integrationtests__/Web3Names.spec.ts rename to tests/integration/Web3Names.spec.ts index da6b9bba9..1c00908e5 100644 --- a/packages/core/src/__integrationtests__/Web3Names.spec.ts +++ b/tests/integration/Web3Names.spec.ts @@ -5,26 +5,23 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @group integration/web3name - */ - +import type { ApiPromise } from '@polkadot/api' import { randomAsHex } from '@polkadot/util-crypto' +import { disconnect } from '@kiltprotocol/core' +import * as Did from '@kiltprotocol/did' import type { DidDocument, KeyringPair, KiltKeyringPair, } from '@kiltprotocol/types' + import { - createFullDidFromSeed, KeyTool, + createFullDidFromSeed, makeSigningKeyTool, -} from '@kiltprotocol/testing' -import * as Did from '@kiltprotocol/did' -import type { ApiPromise } from '@polkadot/api' -import { disconnect } from '../kilt' -import { createEndowedTestAccount, initializeApi, submitTx } from './utils' +} from '../testUtils/index.js' +import { createEndowedTestAccount, initializeApi, submitTx } from './utils.js' let api: ApiPromise diff --git a/tests/integration/jest.config.integration.esm.js b/tests/integration/jest.config.integration.esm.js new file mode 100644 index 000000000..d1278ccff --- /dev/null +++ b/tests/integration/jest.config.integration.esm.js @@ -0,0 +1,12 @@ +module.exports = { + testEnvironment: "node", + clearMocks: true, + // Parachain block time is 12s + testTimeout: 120_000, + maxWorkers: 3, + roots: ["dist"], + transform: {}, + moduleDirectories: [ + "node_modules", + ], +} diff --git a/tests/integration/jest.config.integration.js b/tests/integration/jest.config.integration.js new file mode 100644 index 000000000..7776ab565 --- /dev/null +++ b/tests/integration/jest.config.integration.js @@ -0,0 +1,13 @@ +module.exports = { + preset: "ts-jest", + testEnvironment: "node", + clearMocks: true, + // Parachain block time is 12s + testTimeout: 120_000, + maxWorkers: 3, + testPathIgnorePatterns: ["dist"], + resolver: "ts-jest-resolver", + moduleDirectories: [ + "node_modules", + ], +} diff --git a/tests/integration/tsconfig.esm.json b/tests/integration/tsconfig.esm.json new file mode 100644 index 000000000..fac8f2c04 --- /dev/null +++ b/tests/integration/tsconfig.esm.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "include": ["*.ts"], + "compilerOptions": { + "module": "ES6", + "baseUrl": "./", + "outDir": "dist" + } +} diff --git a/packages/core/src/__integrationtests__/utils.ts b/tests/integration/utils.ts similarity index 96% rename from packages/core/src/__integrationtests__/utils.ts rename to tests/integration/utils.ts index ee15e867f..3fa379a89 100644 --- a/packages/core/src/__integrationtests__/utils.ts +++ b/tests/integration/utils.ts @@ -8,13 +8,14 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ /* eslint-disable no-console */ +import type { ApiPromise } from '@polkadot/api' import { BN } from '@polkadot/util' -import { ApiPromise } from '@polkadot/api' + import { GenericContainer, StartedTestContainer, Wait } from 'testcontainers' -import { Crypto } from '@kiltprotocol/utils' -import { makeSigningKeyTool } from '@kiltprotocol/testing' import { Blockchain } from '@kiltprotocol/chain-helpers' +import { ConfigService } from '@kiltprotocol/config' +import { CType, connect, init } from '@kiltprotocol/core' import type { ICType, KeyringPair, @@ -23,10 +24,9 @@ import type { SubmittableExtrinsic, SubscriptionPromise, } from '@kiltprotocol/types' -import { ConfigService } from '@kiltprotocol/config' +import { Crypto } from '@kiltprotocol/utils' -import * as CType from '../ctype' -import { connect, init } from '../kilt' +import { makeSigningKeyTool } from '../testUtils/index.js' export const EXISTENTIAL_DEPOSIT = new BN(10 ** 13) const ENDOWMENT = EXISTENTIAL_DEPOSIT.muln(10000) diff --git a/tests/jest.setup.js b/tests/jest.setup.js new file mode 100644 index 000000000..0ce07364d --- /dev/null +++ b/tests/jest.setup.js @@ -0,0 +1,5 @@ +const { cryptoWaitReady } = require('@polkadot/util-crypto') + +beforeAll(async () => { + await cryptoWaitReady() +}) diff --git a/packages/testing/src/TestUtils.ts b/tests/testUtils/TestUtils.ts similarity index 100% rename from packages/testing/src/TestUtils.ts rename to tests/testUtils/TestUtils.ts diff --git a/packages/testing/src/index.ts b/tests/testUtils/index.ts similarity index 100% rename from packages/testing/src/index.ts rename to tests/testUtils/index.ts diff --git a/packages/testing/src/metadata/spiritnet.ts b/tests/testUtils/metadata/spiritnet.ts similarity index 75% rename from packages/testing/src/metadata/spiritnet.ts rename to tests/testUtils/metadata/spiritnet.ts index 1a319ed1d..26dba2867 100644 --- a/packages/testing/src/metadata/spiritnet.ts +++ b/tests/testUtils/metadata/spiritnet.ts @@ -9,9 +9,9 @@ import { readFileSync } from 'fs' import path from 'path' import type { HexString } from '@kiltprotocol/types' -const META_PATH = '../../../../augment-api/metadata/spiritnet.json' +const META_PATH = 'packages/augment-api/metadata/spiritnet.json' const { result: metaHex } = JSON.parse( - readFileSync(path.join(__dirname, META_PATH), { encoding: 'utf-8' }) + readFileSync(path.resolve(META_PATH), { encoding: 'utf-8' }) ) /* eslint-disable import/no-default-export */ diff --git a/packages/testing/src/mocks/index.ts b/tests/testUtils/mocks/index.ts similarity index 100% rename from packages/testing/src/mocks/index.ts rename to tests/testUtils/mocks/index.ts diff --git a/packages/testing/src/mocks/mockedApi.ts b/tests/testUtils/mocks/mockedApi.ts similarity index 100% rename from packages/testing/src/mocks/mockedApi.ts rename to tests/testUtils/mocks/mockedApi.ts diff --git a/packages/testing/src/mocks/mockedApi.utils.ts b/tests/testUtils/mocks/mockedApi.utils.ts similarity index 100% rename from packages/testing/src/mocks/mockedApi.utils.ts rename to tests/testUtils/mocks/mockedApi.utils.ts diff --git a/packages/testing/src/mocks/typeRegistry.ts b/tests/testUtils/mocks/typeRegistry.ts similarity index 100% rename from packages/testing/src/mocks/typeRegistry.ts rename to tests/testUtils/mocks/typeRegistry.ts diff --git a/tsconfig.docs.json b/tsconfig.docs.json index 3846cc96f..1a9740e2f 100644 --- a/tsconfig.docs.json +++ b/tsconfig.docs.json @@ -1,6 +1,6 @@ { "extends": "./tsconfig.json", - "include": ["packages/**/*", "jest-setup/*"], + "include": ["packages/**/*"], "typedocOptions": { "entryPointStrategy": "resolve", "entryPoints": [ diff --git a/tsconfig.json b/tsconfig.json index cf928ba32..a447ff164 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "./tsconfig.build.json", - "include": ["packages/**/*", "jest-setup/*", "docs/*"], + "include": ["packages/**/*", "docs/*", "tests/**/*"], "compilerOptions": { "baseUrl": "./packages", "sourceMap": true, @@ -16,7 +16,6 @@ "@kiltprotocol/did": ["did/src"], "@kiltprotocol/asset-did": ["asset-did/src"], "@kiltprotocol/docs": ["docs/src"], - "@kiltprotocol/testing": ["testing/src"], "@kiltprotocol/augment-api": ["augment-api/src"], "@kiltprotocol/augment-api/extraDefs": ["augment-api/src/interfaces/extraDefs"], "@kiltprotocol/type-definitions": ["type-definitions/src"], diff --git a/yarn.lock b/yarn.lock index 6d1325743..db034755f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,12 +5,13 @@ __metadata: version: 6 cacheKey: 8 -"@ampproject/remapping@npm:^2.1.0": - version: 2.1.2 - resolution: "@ampproject/remapping@npm:2.1.2" +"@ampproject/remapping@npm:^2.2.0": + version: 2.2.1 + resolution: "@ampproject/remapping@npm:2.2.1" dependencies: - "@jridgewell/trace-mapping": ^0.3.0 - checksum: e023f92cdd9723f3042cde3b4d922adfeef0e198aa73486b0b6c034ad36af5f96e5c0cc72b335b30b2eb9852d907efc92af6bfcd3f4b4d286177ee32a189cf92 + "@jridgewell/gen-mapping": ^0.3.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 03c04fd526acc64a1f4df22651186f3e5ef0a9d6d6530ce4482ec9841269cf7a11dbb8af79237c282d721c5312024ff17529cd72cc4768c11e999b58e2302079 languageName: node linkType: hard @@ -23,53 +24,54 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/code-frame@npm:7.18.6" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/code-frame@npm:7.22.5" dependencies: - "@babel/highlight": ^7.18.6 - checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba + "@babel/highlight": ^7.22.5 + checksum: cfe804f518f53faaf9a1d3e0f9f74127ab9a004912c3a16fda07fb6a633393ecb9918a053cb71804204c1b7ec3d49e1699604715e2cfb0c9f7bc4933d324ebb6 languageName: node linkType: hard -"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.0, @babel/compat-data@npm:^7.20.1": - version: 7.20.1 - resolution: "@babel/compat-data@npm:7.20.1" - checksum: 989b9b7a6fe43c547bb8329241bd0ba6983488b83d29cc59de35536272ee6bb4cc7487ba6c8a4bceebb3a57f8c5fea1434f80bbbe75202bc79bc1110f955ff25 +"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.1, @babel/compat-data@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/compat-data@npm:7.22.9" + checksum: bed77d9044ce948b4327b30dd0de0779fa9f3a7ed1f2d31638714ed00229fa71fc4d1617ae0eb1fad419338d3658d0e9a5a083297451e09e73e078d0347ff808 languageName: node linkType: hard -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": - version: 7.20.5 - resolution: "@babel/core@npm:7.20.5" +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": + version: 7.22.9 + resolution: "@babel/core@npm:7.22.9" dependencies: - "@ampproject/remapping": ^2.1.0 - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.5 - "@babel/helper-compilation-targets": ^7.20.0 - "@babel/helper-module-transforms": ^7.20.2 - "@babel/helpers": ^7.20.5 - "@babel/parser": ^7.20.5 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.20.5 - "@babel/types": ^7.20.5 + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.22.5 + "@babel/generator": ^7.22.9 + "@babel/helper-compilation-targets": ^7.22.9 + "@babel/helper-module-transforms": ^7.22.9 + "@babel/helpers": ^7.22.6 + "@babel/parser": ^7.22.7 + "@babel/template": ^7.22.5 + "@babel/traverse": ^7.22.8 + "@babel/types": ^7.22.5 convert-source-map: ^1.7.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 - json5: ^2.2.1 - semver: ^6.3.0 - checksum: 9547f1e6364bc58c3621e3b17ec17f0d034ff159e5a520091d9381608d40af3be4042dd27c20ad7d3e938422d75850ac56a3758d6801d65df701557af4bd244b + json5: ^2.2.2 + semver: ^6.3.1 + checksum: 7bf069aeceb417902c4efdaefab1f7b94adb7dea694a9aed1bda2edf4135348a080820529b1a300c6f8605740a00ca00c19b2d5e74b5dd489d99d8c11d5e56d1 languageName: node linkType: hard -"@babel/generator@npm:^7.20.5, @babel/generator@npm:^7.7.2": - version: 7.20.5 - resolution: "@babel/generator@npm:7.20.5" +"@babel/generator@npm:^7.22.7, @babel/generator@npm:^7.22.9, @babel/generator@npm:^7.7.2": + version: 7.22.9 + resolution: "@babel/generator@npm:7.22.9" dependencies: - "@babel/types": ^7.20.5 + "@babel/types": ^7.22.5 "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 jsesc: ^2.5.1 - checksum: 31c10d1e122f08cf755a24bd6f5d197f47eceba03f1133759687d00ab72d210e60ba4011da42f368b6e9fa85cbfda7dc4adb9889c2c20cc5c34bb2d57c1deab7 + checksum: 7c9d2c58b8d5ac5e047421a6ab03ec2ff5d9a5ff2c2212130a0055e063ac349e0b19d435537d6886c999771aef394832e4f54cd9fc810100a7f23d982f6af06b languageName: node linkType: hard @@ -92,17 +94,18 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.0": - version: 7.20.0 - resolution: "@babel/helper-compilation-targets@npm:7.20.0" +"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.0, @babel/helper-compilation-targets@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/helper-compilation-targets@npm:7.22.9" dependencies: - "@babel/compat-data": ^7.20.0 - "@babel/helper-validator-option": ^7.18.6 - browserslist: ^4.21.3 - semver: ^6.3.0 + "@babel/compat-data": ^7.22.9 + "@babel/helper-validator-option": ^7.22.5 + browserslist: ^4.21.9 + lru-cache: ^5.1.1 + semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: bc183f2109648849c8fde0b3c5cf08adf2f7ad6dc617b546fd20f34c8ef574ee5ee293c8d1bd0ed0221212e8f5907cdc2c42097870f1dcc769a654107d82c95b + checksum: ea0006c6a93759025f4a35a25228ae260538c9f15023e8aac2a6d45ca68aef4cf86cfc429b19af9a402cbdd54d5de74ad3fbcf6baa7e48184dc079f1a791e178 languageName: node linkType: hard @@ -151,10 +154,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-environment-visitor@npm:7.18.9" - checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 +"@babel/helper-environment-visitor@npm:^7.18.9, @babel/helper-environment-visitor@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-environment-visitor@npm:7.22.5" + checksum: 248532077d732a34cd0844eb7b078ff917c3a8ec81a7f133593f71a860a582f05b60f818dc5049c2212e5baa12289c27889a4b81d56ef409b4863db49646c4b1 languageName: node linkType: hard @@ -167,22 +170,22 @@ __metadata: languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-function-name@npm:7.19.0" +"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0, @babel/helper-function-name@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-function-name@npm:7.22.5" dependencies: - "@babel/template": ^7.18.10 - "@babel/types": ^7.19.0 - checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e + "@babel/template": ^7.22.5 + "@babel/types": ^7.22.5 + checksum: 6b1f6ce1b1f4e513bf2c8385a557ea0dd7fa37971b9002ad19268ca4384bbe90c09681fe4c076013f33deabc63a53b341ed91e792de741b4b35e01c00238177a languageName: node linkType: hard -"@babel/helper-hoist-variables@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-hoist-variables@npm:7.18.6" +"@babel/helper-hoist-variables@npm:^7.18.6, @babel/helper-hoist-variables@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-hoist-variables@npm:7.22.5" dependencies: - "@babel/types": ^7.18.6 - checksum: fd9c35bb435fda802bf9ff7b6f2df06308a21277c6dec2120a35b09f9de68f68a33972e2c15505c1a1a04b36ec64c9ace97d4a9e26d6097b76b4396b7c5fa20f + "@babel/types": ^7.22.5 + checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc languageName: node linkType: hard @@ -195,28 +198,27 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-module-imports@npm:7.18.6" +"@babel/helper-module-imports@npm:^7.18.6, @babel/helper-module-imports@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-module-imports@npm:7.22.5" dependencies: - "@babel/types": ^7.18.6 - checksum: f393f8a3b3304b1b7a288a38c10989de754f01d29caf62ce7c4e5835daf0a27b81f3ac687d9d2780d39685aae7b55267324b512150e7b2be967b0c493b6a1def + "@babel/types": ^7.22.5 + checksum: 9ac2b0404fa38b80bdf2653fbeaf8e8a43ccb41bd505f9741d820ed95d3c4e037c62a1bcdcb6c9527d7798d2e595924c4d025daed73283badc180ada2c9c49ad languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.19.6, @babel/helper-module-transforms@npm:^7.20.2": - version: 7.20.2 - resolution: "@babel/helper-module-transforms@npm:7.20.2" +"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.19.6, @babel/helper-module-transforms@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/helper-module-transforms@npm:7.22.9" dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-simple-access": ^7.20.2 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/helper-validator-identifier": ^7.19.1 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.20.1 - "@babel/types": ^7.20.2 - checksum: 33a60ca115f6fce2c9d98e2a2e5649498aa7b23e2ae3c18745d7a021487708fc311458c33542f299387a0da168afccba94116e077f2cce49ae9e5ab83399e8a2 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-module-imports": ^7.22.5 + "@babel/helper-simple-access": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/helper-validator-identifier": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2751f77660518cf4ff027514d6f4794f04598c6393be7b04b8e46c6e21606e11c19f3f57ab6129a9c21bacdf8b3ffe3af87bb401d972f34af2d0ffde02ac3001 languageName: node linkType: hard @@ -229,10 +231,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.20.2 - resolution: "@babel/helper-plugin-utils@npm:7.20.2" - checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.22.5 + resolution: "@babel/helper-plugin-utils@npm:7.22.5" + checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5 languageName: node linkType: hard @@ -263,12 +265,12 @@ __metadata: languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.19.4, @babel/helper-simple-access@npm:^7.20.2": - version: 7.20.2 - resolution: "@babel/helper-simple-access@npm:7.20.2" +"@babel/helper-simple-access@npm:^7.19.4, @babel/helper-simple-access@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-simple-access@npm:7.22.5" dependencies: - "@babel/types": ^7.20.2 - checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 + "@babel/types": ^7.22.5 + checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2 languageName: node linkType: hard @@ -281,33 +283,33 @@ __metadata: languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-split-export-declaration@npm:7.18.6" +"@babel/helper-split-export-declaration@npm:^7.18.6, @babel/helper-split-export-declaration@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helper-split-export-declaration@npm:7.22.6" dependencies: - "@babel/types": ^7.18.6 - checksum: c6d3dede53878f6be1d869e03e9ffbbb36f4897c7cc1527dc96c56d127d834ffe4520a6f7e467f5b6f3c2843ea0e81a7819d66ae02f707f6ac057f3d57943a2b + "@babel/types": ^7.22.5 + checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.19.4": - version: 7.19.4 - resolution: "@babel/helper-string-parser@npm:7.19.4" - checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 +"@babel/helper-string-parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-string-parser@npm:7.22.5" + checksum: 836851ca5ec813077bbb303acc992d75a360267aa3b5de7134d220411c852a6f17de7c0d0b8c8dcc0f567f67874c00f4528672b2a4f1bc978a3ada64c8c78467 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": - version: 7.19.1 - resolution: "@babel/helper-validator-identifier@npm:7.19.1" - checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a +"@babel/helper-validator-identifier@npm:^7.19.1, @babel/helper-validator-identifier@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-validator-identifier@npm:7.22.5" + checksum: 7f0f30113474a28298c12161763b49de5018732290ca4de13cdaefd4fd0d635a6fe3f6686c37a02905fb1e64f21a5ee2b55140cf7b070e729f1bd66866506aea languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-validator-option@npm:7.18.6" - checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf +"@babel/helper-validator-option@npm:^7.18.6, @babel/helper-validator-option@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-validator-option@npm:7.22.5" + checksum: bbeca8a85ee86990215c0424997438b388b8d642d69b9f86c375a174d3cdeb270efafd1ff128bc7a1d370923d13b6e45829ba8581c027620e83e3a80c5c414b3 languageName: node linkType: hard @@ -323,34 +325,34 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.20.5": - version: 7.20.6 - resolution: "@babel/helpers@npm:7.20.6" +"@babel/helpers@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helpers@npm:7.22.6" dependencies: - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.20.5 - "@babel/types": ^7.20.5 - checksum: f03ec6eb2bf8dc7cdfe2569ee421fd9ba6c7bac6c862d90b608ccdd80281ebe858bc56ca175fc92b3ac50f63126b66bbd5ec86f9f361729289a20054518f1ac5 + "@babel/template": ^7.22.5 + "@babel/traverse": ^7.22.6 + "@babel/types": ^7.22.5 + checksum: 5c1f33241fe7bf7709868c2105134a0a86dca26a0fbd508af10a89312b1f77ca38ebae43e50be3b208613c5eacca1559618af4ca236f0abc55d294800faeff30 languageName: node linkType: hard -"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/highlight@npm:7.18.6" +"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/highlight@npm:7.22.5" dependencies: - "@babel/helper-validator-identifier": ^7.18.6 + "@babel/helper-validator-identifier": ^7.22.5 chalk: ^2.0.0 js-tokens: ^4.0.0 - checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789 + checksum: f61ae6de6ee0ea8d9b5bcf2a532faec5ab0a1dc0f7c640e5047fc61630a0edb88b18d8c92eb06566d30da7a27db841aca11820ecd3ebe9ce514c9350fbed39c4 languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.20.5": - version: 7.20.5 - resolution: "@babel/parser@npm:7.20.5" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.22.5, @babel/parser@npm:^7.22.7": + version: 7.22.7 + resolution: "@babel/parser@npm:7.22.7" bin: parser: ./bin/babel-parser.js - checksum: e8d514ce0aa74d56725bd102919a49fa367afef9cd8208cf52f670f54b061c4672f51b4b7980058ab1f5fe73615fe4dc90720ab47bbcebae07ad08d667eda318 + checksum: 02209ddbd445831ee8bf966fdf7c29d189ed4b14343a68eb2479d940e7e3846340d7cc6bd654a5f3d87d19dc84f49f50a58cf9363bee249dc5409ff3ba3dab54 languageName: node linkType: hard @@ -666,6 +668,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.22.5 + resolution: "@babel/plugin-syntax-jsx@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8829d30c2617ab31393d99cec2978e41f014f4ac6f01a1cecf4c4dd8320c3ec12fdc3ce121126b2d8d32f6887e99ca1a0bad53dedb1e6ad165640b92b24980ce + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" @@ -1252,43 +1265,43 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.3.3": - version: 7.18.10 - resolution: "@babel/template@npm:7.18.10" +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.22.5, @babel/template@npm:^7.3.3": + version: 7.22.5 + resolution: "@babel/template@npm:7.22.5" dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/parser": ^7.18.10 - "@babel/types": ^7.18.10 - checksum: 93a6aa094af5f355a72bd55f67fa1828a046c70e46f01b1606e6118fa1802b6df535ca06be83cc5a5e834022be95c7b714f0a268b5f20af984465a71e28f1473 + "@babel/code-frame": ^7.22.5 + "@babel/parser": ^7.22.5 + "@babel/types": ^7.22.5 + checksum: c5746410164039aca61829cdb42e9a55410f43cace6f51ca443313f3d0bdfa9a5a330d0b0df73dc17ef885c72104234ae05efede37c1cc8a72dc9f93425977a3 languageName: node linkType: hard -"@babel/traverse@npm:^7.19.0, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.20.1, @babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.7.2": - version: 7.20.5 - resolution: "@babel/traverse@npm:7.20.5" +"@babel/traverse@npm:^7.19.0, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.22.6, @babel/traverse@npm:^7.22.8": + version: 7.22.8 + resolution: "@babel/traverse@npm:7.22.8" dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.5 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.20.5 - "@babel/types": ^7.20.5 + "@babel/code-frame": ^7.22.5 + "@babel/generator": ^7.22.7 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/parser": ^7.22.7 + "@babel/types": ^7.22.5 debug: ^4.1.0 globals: ^11.1.0 - checksum: c7fed468614aab1cf762dda5df26e2cfcd2b1b448c9d3321ac44786c4ee773fb0e10357e6593c3c6a648ae2e0be6d90462d855998dc10e3abae84de99291e008 + checksum: a381369bc3eedfd13ed5fef7b884657f1c29024ea7388198149f0edc34bd69ce3966e9f40188d15f56490a5e12ba250ccc485f2882b53d41b054fccefb233e33 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.20.5 - resolution: "@babel/types@npm:7.20.5" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.22.5, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.22.5 + resolution: "@babel/types@npm:7.22.5" dependencies: - "@babel/helper-string-parser": ^7.19.4 - "@babel/helper-validator-identifier": ^7.19.1 + "@babel/helper-string-parser": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.5 to-fast-properties: ^2.0.0 - checksum: 773f0a1ad9f6ca5c5beaf751d1d8d81b9130de87689d1321fc911d73c3b1167326d66f0ae086a27fb5bfc8b4ee3ffebf1339be50d3b4d8015719692468c31f2d + checksum: c13a9c1dc7d2d1a241a2f8363540cb9af1d66e978e8984b400a20c4f38ba38ca29f06e26a0f2d49a70bad9e57615dac09c35accfddf1bb90d23cd3e0a0bab892 languageName: node linkType: hard @@ -1619,50 +1632,50 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/console@npm:27.5.1" +"@jest/console@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/console@npm:29.6.1" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^29.6.1 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^27.5.1 - jest-util: ^27.5.1 + jest-message-util: ^29.6.1 + jest-util: ^29.6.1 slash: ^3.0.0 - checksum: 7cb20f06a34b09734c0342685ec53aa4c401fe3757c13a9c58fce76b971a322eb884f6de1068ef96f746e5398e067371b89515a07c268d4440a867c87748a706 + checksum: d0ab23a00947bfb4bff8c0a7e5a7afd16519de16dde3fe7e77b9f13e794c6df7043ecf7fcdde66ac0d2b5fb3262e9cab3d92eaf61f89a12d3b8e3602e06a9902 languageName: node linkType: hard -"@jest/core@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/core@npm:27.5.1" +"@jest/core@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/core@npm:29.6.1" dependencies: - "@jest/console": ^27.5.1 - "@jest/reporters": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^29.6.1 + "@jest/reporters": ^29.6.1 + "@jest/test-result": ^29.6.1 + "@jest/transform": ^29.6.1 + "@jest/types": ^29.6.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 - emittery: ^0.8.1 + ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^27.5.1 - jest-config: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-message-util: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-resolve-dependencies: ^27.5.1 - jest-runner: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 - jest-watcher: ^27.5.1 + jest-changed-files: ^29.5.0 + jest-config: ^29.6.1 + jest-haste-map: ^29.6.1 + jest-message-util: ^29.6.1 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.6.1 + jest-resolve-dependencies: ^29.6.1 + jest-runner: ^29.6.1 + jest-runtime: ^29.6.1 + jest-snapshot: ^29.6.1 + jest-util: ^29.6.1 + jest-validate: ^29.6.1 + jest-watcher: ^29.6.1 micromatch: ^4.0.4 - rimraf: ^3.0.0 + pretty-format: ^29.6.1 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -1670,153 +1683,182 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 904a94ad8f1b43cd6b48de3b0226659bff3696150ff8cf7680fc2faffdc8a115203bb9ab6e817c1f79f9d6a81f67953053cbc64d8a4604f2e0c42a04c28cf126 + checksum: 736dcc90c6c58dd9e1d2da122103b851187719ce3b3d4167689c63e68252632cd817712955b52ddaa648eba9c6f98f86cd58677325f0db4185f76899c64d7dac languageName: node linkType: hard -"@jest/environment@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/environment@npm:27.5.1" +"@jest/environment@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/environment@npm:29.6.1" dependencies: - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/fake-timers": ^29.6.1 + "@jest/types": ^29.6.1 "@types/node": "*" - jest-mock: ^27.5.1 - checksum: 2a9e18c35a015508dbec5b90b21c150230fa6c1c8cb8fabe029d46ee2ca4c40eb832fb636157da14c66590d0a4c8a2c053226b041f54a44507d6f6a89abefd66 + jest-mock: ^29.6.1 + checksum: fb671f91f27e7aa1ba04983ef87a83f0794a597aba0a57d08cbb1fcb484c2aedc2201e99f85fafe27aec9be78af6f2d1d7e6ea88267938992a1d0f9d4615f5b2 languageName: node linkType: hard -"@jest/fake-timers@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/fake-timers@npm:27.5.1" +"@jest/expect-utils@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/expect-utils@npm:29.6.1" + dependencies: + jest-get-type: ^29.4.3 + checksum: 037ee017eca62f7b45e1465fb5c6f9e92d5709a9ac716b8bff0bd294240a54de734e8f968fb69309cc4aef6c83b9552d5a821f3b18371af394bf04783859d706 + languageName: node + linkType: hard + +"@jest/expect@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/expect@npm:29.6.1" + dependencies: + expect: ^29.6.1 + jest-snapshot: ^29.6.1 + checksum: 5c56977b3cc8489744d97d9dc2dcb196c1dfecc83a058a7ef0fd4f63d68cf120a23d27669272d1e1b184fb4337b85e4ac1fc7f886e3988fdf243d42d73973eac + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/fake-timers@npm:29.6.1" dependencies: - "@jest/types": ^27.5.1 - "@sinonjs/fake-timers": ^8.0.1 + "@jest/types": ^29.6.1 + "@sinonjs/fake-timers": ^10.0.2 "@types/node": "*" - jest-message-util: ^27.5.1 - jest-mock: ^27.5.1 - jest-util: ^27.5.1 - checksum: 02a0561ed2f4586093facd4ae500b74694f187ac24d4a00e949a39a1c5325bca8932b4fcb0388a2c5ed0656506fc1cf51fd3e32cdd48cea7497ad9c6e028aba8 + jest-message-util: ^29.6.1 + jest-mock: ^29.6.1 + jest-util: ^29.6.1 + checksum: 86991276944b7d6c2ada3703a272517f5f8f2f4e2af1fe26065f6db1dac4dc6299729a88c46bcb781dcc1b20504c1d4bbd8119fd8a0838ac81a9a4b5d2c8e429 languageName: node linkType: hard -"@jest/globals@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/globals@npm:27.5.1" +"@jest/globals@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/globals@npm:29.6.1" dependencies: - "@jest/environment": ^27.5.1 - "@jest/types": ^27.5.1 - expect: ^27.5.1 - checksum: 087f97047e9dcf555f76fe2ce54aee681e005eaa837a0c0c2d251df6b6412c892c9df54cb871b180342114389a5ff895a4e52e6e6d3d0015bf83c02a54f64c3c + "@jest/environment": ^29.6.1 + "@jest/expect": ^29.6.1 + "@jest/types": ^29.6.1 + jest-mock: ^29.6.1 + checksum: fcca0b970a8b4894a1cdff0f500a86b45609e72c0a4319875e9504237b839df1a46c44d2f1362c6d87fdc7a05928edcc4b5a3751c9e6648dd70a761cdab64c94 languageName: node linkType: hard -"@jest/reporters@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/reporters@npm:27.5.1" +"@jest/reporters@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/reporters@npm:29.6.1" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^29.6.1 + "@jest/test-result": ^29.6.1 + "@jest/transform": ^29.6.1 + "@jest/types": ^29.6.1 + "@jridgewell/trace-mapping": ^0.3.18 "@types/node": "*" chalk: ^4.0.0 collect-v8-coverage: ^1.0.0 exit: ^0.1.2 - glob: ^7.1.2 + glob: ^7.1.3 graceful-fs: ^4.2.9 istanbul-lib-coverage: ^3.0.0 istanbul-lib-instrument: ^5.1.0 istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-haste-map: ^27.5.1 - jest-resolve: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 + jest-message-util: ^29.6.1 + jest-util: ^29.6.1 + jest-worker: ^29.6.1 slash: ^3.0.0 - source-map: ^0.6.0 string-length: ^4.0.1 - terminal-link: ^2.0.0 - v8-to-istanbul: ^8.1.0 + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true - checksum: faba5eafb86e62b62e152cafc8812d56308f9d1e8b77f3a7dcae4a8803a20a60a0909cc43ed73363ef649bf558e4fb181c7a336d144c89f7998279d1882bb69e + checksum: b7dae415f3f6342b4db2671261bbee29af20a829f42135316c3dd548b9ef85290c9bb64a0e3aec4a55486596be1257ac8216a0f8d9794acd43f8b8fb686fc7e3 languageName: node linkType: hard -"@jest/source-map@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/source-map@npm:27.5.1" +"@jest/schemas@npm:^29.6.0": + version: 29.6.0 + resolution: "@jest/schemas@npm:29.6.0" + dependencies: + "@sinclair/typebox": ^0.27.8 + checksum: c00511c69cf89138a7d974404d3a5060af375b5a52b9c87215d91873129b382ca11c1ff25bd6d605951404bb381ddce5f8091004a61e76457da35db1f5c51365 + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.6.0": + version: 29.6.0 + resolution: "@jest/source-map@npm:29.6.0" dependencies: + "@jridgewell/trace-mapping": ^0.3.18 callsites: ^3.0.0 graceful-fs: ^4.2.9 - source-map: ^0.6.0 - checksum: 4fb1e743b602841babf7e22bd84eca34676cb05d4eb3b604cae57fc59e406099f5ac759ac1a0d04d901237d143f0f4f234417306e823bde732a1d19982230862 + checksum: 9c6c40387410bb70b2fae8124287fc28f6bdd1b2d7f24348e8611e1bb638b404518228a4ce64a582365b589c536ae8e7ebab0126cef59a87874b71061d19783b languageName: node linkType: hard -"@jest/test-result@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/test-result@npm:27.5.1" +"@jest/test-result@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/test-result@npm:29.6.1" dependencies: - "@jest/console": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^29.6.1 + "@jest/types": ^29.6.1 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: 338f7c509d6a3bc6d7dd7388c8f6f548b87638e171dc1fddfedcacb4e8950583288832223ba688058cbcf874b937d22bdc0fa88f79f5fc666f77957e465c06a5 + checksum: 9397a3a3410c5df564e79297b1be4fe33807a6157a017a1f74b54a6ef14de1530f12b922299e822e66a82c53269da16661772bffde3d883a78c5eefd2cd6d1cc languageName: node linkType: hard -"@jest/test-sequencer@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/test-sequencer@npm:27.5.1" +"@jest/test-sequencer@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/test-sequencer@npm:29.6.1" dependencies: - "@jest/test-result": ^27.5.1 + "@jest/test-result": ^29.6.1 graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-runtime: ^27.5.1 - checksum: f21f9c8bb746847f7f89accfd29d6046eec1446f0b54e4694444feaa4df379791f76ef0f5a4360aafcbc73b50bc979f68b8a7620de404019d3de166be6720cb0 + jest-haste-map: ^29.6.1 + slash: ^3.0.0 + checksum: f3437178b5dca0401ed2e990d8b69161442351856d56f5725e009a487f5232b51039f8829673884b9bea61c861120d08a53a36432f4a4b8aab38915a68f7000d languageName: node linkType: hard -"@jest/transform@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/transform@npm:27.5.1" +"@jest/transform@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/transform@npm:29.6.1" dependencies: - "@babel/core": ^7.1.0 - "@jest/types": ^27.5.1 + "@babel/core": ^7.11.6 + "@jest/types": ^29.6.1 + "@jridgewell/trace-mapping": ^0.3.18 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 - convert-source-map: ^1.4.0 - fast-json-stable-stringify: ^2.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-util: ^27.5.1 + jest-haste-map: ^29.6.1 + jest-regex-util: ^29.4.3 + jest-util: ^29.6.1 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 - source-map: ^0.6.1 - write-file-atomic: ^3.0.0 - checksum: a22079121aedea0f20a03a9c026be971f7b92adbfb4d5fd1fb67be315741deac4f056936d7c72a53b24aa5a1071bc942c003925fd453bf3f6a0ae5da6384e137 + write-file-atomic: ^4.0.2 + checksum: 1635cd66e4b3dbba0689ecefabc6137301756c9c12d1d23e25124dd0dd9b4a6a38653d51e825e90f74faa022152ac1eaf200591fb50417aa7e1f7d1d1c2bc11d languageName: node linkType: hard -"@jest/types@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/types@npm:27.5.1" +"@jest/types@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/types@npm:29.6.1" dependencies: + "@jest/schemas": ^29.6.0 "@types/istanbul-lib-coverage": ^2.0.0 "@types/istanbul-reports": ^3.0.0 "@types/node": "*" - "@types/yargs": ^16.0.0 + "@types/yargs": ^17.0.8 chalk: ^4.0.0 - checksum: d1f43cc946d87543ddd79d49547aab2399481d34025d5c5f2025d3d99c573e1d9832fa83cef25e9d9b07a8583500229d15bbb07b8e233d127d911d133e2f14b1 + checksum: 89fc1ccf71a84fe0da643e0675b1cfe6a6f19ea72e935b2ab1dbdb56ec547e94433fb59b3536d3832a6e156c077865b7176fe9dae707dab9c3d2f9405ba6233c languageName: node linkType: hard @@ -1872,7 +1914,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.0, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.18 resolution: "@jridgewell/trace-mapping@npm:0.3.18" dependencies: @@ -1911,7 +1953,6 @@ __metadata: resolution: "@kiltprotocol/chain-helpers@workspace:packages/chain-helpers" dependencies: "@kiltprotocol/config": "workspace:*" - "@kiltprotocol/testing": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" "@polkadot/api": ^10.4.0 @@ -1943,7 +1984,6 @@ __metadata: "@kiltprotocol/chain-helpers": "workspace:*" "@kiltprotocol/config": "workspace:*" "@kiltprotocol/did": "workspace:*" - "@kiltprotocol/testing": "workspace:*" "@kiltprotocol/type-definitions": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" @@ -1966,7 +2006,6 @@ __metadata: "@digitalbazaar/security-context": ^1.0.0 "@kiltprotocol/augment-api": "workspace:*" "@kiltprotocol/config": "workspace:*" - "@kiltprotocol/testing": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" "@polkadot/api": ^10.4.0 @@ -1986,7 +2025,6 @@ __metadata: dependencies: "@kiltprotocol/core": "workspace:*" "@kiltprotocol/did": "workspace:*" - "@kiltprotocol/testing": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" "@polkadot/util": ^12.0.0 @@ -1995,7 +2033,7 @@ __metadata: languageName: unknown linkType: soft -"@kiltprotocol/sdk-js@workspace:*, @kiltprotocol/sdk-js@workspace:packages/sdk-js": +"@kiltprotocol/sdk-js@workspace:packages/sdk-js": version: 0.0.0-use.local resolution: "@kiltprotocol/sdk-js@workspace:packages/sdk-js" dependencies: @@ -2014,29 +2052,6 @@ __metadata: languageName: unknown linkType: soft -"@kiltprotocol/testing@workspace:*, @kiltprotocol/testing@workspace:packages/testing": - version: 0.0.0-use.local - resolution: "@kiltprotocol/testing@workspace:packages/testing" - dependencies: - "@kiltprotocol/chain-helpers": "workspace:*" - "@kiltprotocol/config": "workspace:*" - "@kiltprotocol/did": "workspace:*" - "@kiltprotocol/sdk-js": "workspace:*" - "@kiltprotocol/type-definitions": "workspace:*" - "@kiltprotocol/types": "workspace:*" - "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^10.4.0 - "@polkadot/keyring": ^12.0.0 - "@polkadot/types": ^10.4.0 - "@polkadot/util": ^12.0.0 - "@polkadot/util-crypto": ^12.0.0 - rimraf: ^3.0.2 - tweetnacl: ^1.0.3 - typescript: ^4.8.3 - uuid: ^9.0.0 - languageName: unknown - linkType: soft - "@kiltprotocol/type-definitions@workspace:*, @kiltprotocol/type-definitions@workspace:packages/type-definitions": version: 0.0.0-use.local resolution: "@kiltprotocol/type-definitions@workspace:packages/type-definitions" @@ -2087,7 +2102,6 @@ __metadata: "@kiltprotocol/config": "workspace:*" "@kiltprotocol/core": "workspace:*" "@kiltprotocol/did": "workspace:*" - "@kiltprotocol/testing": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" "@polkadot/api": ^10.4.0 @@ -2633,21 +2647,28 @@ __metadata: languageName: node linkType: hard -"@sinonjs/commons@npm:^1.7.0": - version: 1.8.3 - resolution: "@sinonjs/commons@npm:1.8.3" +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.0 + resolution: "@sinonjs/commons@npm:3.0.0" dependencies: type-detect: 4.0.8 - checksum: 6159726db5ce6bf9f2297f8427f7ca5b3dff45b31e5cee23496f1fa6ef0bb4eab878b23fb2c5e6446381f6a66aba4968ef2fc255c1180d753d4b8c271636a2e5 + checksum: b4b5b73d4df4560fb8c0c7b38c7ad4aeabedd362f3373859d804c988c725889cde33550e4bcc7cd316a30f5152a2d1d43db71b6d0c38f5feef71fd8d016763f8 languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^8.0.1": - version: 8.1.0 - resolution: "@sinonjs/fake-timers@npm:8.1.0" +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" dependencies: - "@sinonjs/commons": ^1.7.0 - checksum: 09b5a158ce013a6c37613258bad79ca4efeb99b1f59c41c73cca36cac00b258aefcf46eeea970fccf06b989414d86fe9f54c1102272c0c3bdd51a313cea80949 + "@sinonjs/commons": ^3.0.0 + checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 languageName: node linkType: hard @@ -2771,13 +2792,6 @@ __metadata: languageName: node linkType: hard -"@tootallnate/once@npm:1": - version: 1.1.2 - resolution: "@tootallnate/once@npm:1.1.2" - checksum: e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 - languageName: node - linkType: hard - "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -2822,7 +2836,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14": +"@types/babel__core@npm:^7.1.14": version: 7.1.19 resolution: "@types/babel__core@npm:7.1.19" dependencies: @@ -2854,7 +2868,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.4, @types/babel__traverse@npm:^7.0.6": +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": version: 7.14.2 resolution: "@types/babel__traverse@npm:7.14.2" dependencies: @@ -2929,12 +2943,12 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.2": - version: 4.1.5 - resolution: "@types/graceful-fs@npm:4.1.5" +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.6 + resolution: "@types/graceful-fs@npm:4.1.6" dependencies: "@types/node": "*" - checksum: d076bb61f45d0fc42dee496ef8b1c2f8742e15d5e47e90e20d0243386e426c04d4efd408a48875ab432f7960b4ce3414db20ed0fbbfc7bcc89d84e574f6e045a + checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 languageName: node linkType: hard @@ -2963,13 +2977,13 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^27.4.0": - version: 27.4.1 - resolution: "@types/jest@npm:27.4.1" +"@types/jest@npm:^29.5.3": + version: 29.5.3 + resolution: "@types/jest@npm:29.5.3" dependencies: - jest-matcher-utils: ^27.0.0 - pretty-format: ^27.0.0 - checksum: 5184f3eef4832d01ee8f59bed15eec45ccc8e29c724a5e6ce37bf74396b37bdf04f557000f45ba4fc38ae6075cf9cfcce3d7a75abc981023c61ceb27230a93e4 + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: e36bb92e0b9e5ea7d6f8832baa42f087fc1697f6cd30ec309a07ea4c268e06ec460f1f0cfd2581daf5eff5763475190ec1ad8ac6520c49ccfe4f5c0a48bfa676 languageName: node linkType: hard @@ -3069,12 +3083,12 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^16.0.0": - version: 16.0.4 - resolution: "@types/yargs@npm:16.0.4" +"@types/yargs@npm:^17.0.8": + version: 17.0.24 + resolution: "@types/yargs@npm:17.0.24" dependencies: "@types/yargs-parser": "*" - checksum: caa21d2c957592fe2184a8368c8cbe5a82a6c2e2f2893722e489f842dc5963293d2f3120bc06fe3933d60a3a0d1e2eb269649fd6b1947fe1820f8841ba611dd9 + checksum: 5f3ac4dc4f6e211c1627340160fbe2fd247ceba002190da6cf9155af1798450501d628c9165a183f30a224fc68fa5e700490d740ff4c73e2cdef95bc4e8ba7bf languageName: node linkType: hard @@ -3405,13 +3419,6 @@ __metadata: languageName: node linkType: hard -"abab@npm:^2.0.3, abab@npm:^2.0.5": - version: 2.0.5 - resolution: "abab@npm:2.0.5" - checksum: 0ec951b46d5418c2c2f923021ec193eaebdb4e802ffd5506286781b454be722a13a8430f98085cd3e204918401d9130ec6cc8f5ae19be315b3a0e857d83196e1 - languageName: node - linkType: hard - "abbrev@npm:1": version: 1.1.1 resolution: "abbrev@npm:1.1.1" @@ -3428,16 +3435,6 @@ __metadata: languageName: node linkType: hard -"acorn-globals@npm:^6.0.0": - version: 6.0.0 - resolution: "acorn-globals@npm:6.0.0" - dependencies: - acorn: ^7.1.1 - acorn-walk: ^7.1.1 - checksum: 72d95e5b5e585f9acd019b993ab8bbba68bb3cbc9d9b5c1ebb3c2f1fe5981f11deababfb4949f48e6262f9c57878837f5958c0cca396f81023814680ca878042 - languageName: node - linkType: hard - "acorn-import-assertions@npm:^1.9.0": version: 1.9.0 resolution: "acorn-import-assertions@npm:1.9.0" @@ -3456,13 +3453,6 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^7.1.1": - version: 7.2.0 - resolution: "acorn-walk@npm:7.2.0" - checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f - languageName: node - linkType: hard - "acorn-walk@npm:^8.1.1": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" @@ -3470,7 +3460,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^7.1.1, acorn@npm:^7.4.0": +"acorn@npm:^7.4.0": version: 7.4.1 resolution: "acorn@npm:7.4.1" bin: @@ -3479,7 +3469,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.2": +"acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.2": version: 8.8.2 resolution: "acorn@npm:8.8.2" bin: @@ -3757,28 +3747,20 @@ __metadata: languageName: node linkType: hard -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be - languageName: node - linkType: hard - -"babel-jest@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-jest@npm:27.5.1" +"babel-jest@npm:^29.6.1": + version: 29.6.1 + resolution: "babel-jest@npm:29.6.1" dependencies: - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/transform": ^29.6.1 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^27.5.1 + babel-preset-jest: ^29.5.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: 4e93e6e9fb996cc5f1505e924eb8e8cc7b25c294ba9629762a2715390f48af6a4c14dbb84cd9730013ac0e03267a5a9aa2fb6318c544489cda7f50f4e506def4 + checksum: bc46cfba468edde91f34a8292501d4448a39fab72d80d7d95f4349feb114fa21becb01def007d6166de7933ab9633bf5b5e1b72ba6ffeaa991f7abf014a2f61d languageName: node linkType: hard @@ -3795,15 +3777,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-plugin-jest-hoist@npm:27.5.1" +"babel-plugin-jest-hoist@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-plugin-jest-hoist@npm:29.5.0" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 - "@types/babel__core": ^7.0.0 + "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: 709c17727aa8fd3be755d256fb514bf945a5c2ea6017f037d80280fc44ae5fe7dfeebf63d8412df53796455c2c216119d628d8cc90b099434fd819005943d058 + checksum: 099b5254073b6bc985b6d2d045ad26fb8ed30ff8ae6404c4fe8ee7cd0e98a820f69e3dfb871c7c65aae0f4b65af77046244c07bb92d49ef9005c90eedf681539 languageName: node linkType: hard @@ -3865,15 +3847,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-preset-jest@npm:27.5.1" +"babel-preset-jest@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-preset-jest@npm:29.5.0" dependencies: - babel-plugin-jest-hoist: ^27.5.1 + babel-plugin-jest-hoist: ^29.5.0 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 251bcea11c18fd9672fec104eadb45b43f117ceeb326fa7345ced778d4c1feab29343cd7a87a1dcfae4997d6c851a8b386d7f7213792da6e23b74f4443a8976d + checksum: 5566ca2762766c9319b4973d018d2fa08c0fcf6415c72cc54f4c8e7199e851ea8f5e6c6730f03ed7ed44fc8beefa959dd15911f2647dee47c615ff4faeddb1ad languageName: node linkType: hard @@ -3976,24 +3958,17 @@ __metadata: languageName: node linkType: hard -"browser-process-hrtime@npm:^1.0.0": - version: 1.0.0 - resolution: "browser-process-hrtime@npm:1.0.0" - checksum: e30f868cdb770b1201afb714ad1575dd86366b6e861900884665fb627109b3cc757c40067d3bfee1ff2a29c835257ea30725a8018a9afd02ac1c24b408b1e45f - languageName: node - linkType: hard - -"browserslist@npm:^4.14.5, browserslist@npm:^4.21.3, browserslist@npm:^4.21.4": - version: 4.21.4 - resolution: "browserslist@npm:4.21.4" +"browserslist@npm:^4.14.5, browserslist@npm:^4.21.4, browserslist@npm:^4.21.9": + version: 4.21.9 + resolution: "browserslist@npm:4.21.9" dependencies: - caniuse-lite: ^1.0.30001400 - electron-to-chromium: ^1.4.251 - node-releases: ^2.0.6 - update-browserslist-db: ^1.0.9 + caniuse-lite: ^1.0.30001503 + electron-to-chromium: ^1.4.431 + node-releases: ^2.0.12 + update-browserslist-db: ^1.0.11 bin: browserslist: cli.js - checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 + checksum: 80d3820584e211484ad1b1a5cfdeca1dd00442f47be87e117e1dda34b628c87e18b81ae7986fa5977b3e6a03154f6d13cd763baa6b8bf5dd9dd19f4926603698 languageName: node linkType: hard @@ -4130,10 +4105,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001400": - version: 1.0.30001407 - resolution: "caniuse-lite@npm:1.0.30001407" - checksum: e1c449d22f120a708accc956c1780f1da01af6c226cb6a324e531dc9f26f53075bff98e6c9cfce806157cdeede459aa8de03a3407b05f71d292a57b2910018b1 +"caniuse-lite@npm:^1.0.30001503": + version: 1.0.30001517 + resolution: "caniuse-lite@npm:1.0.30001517" + checksum: e4e87436ae1c4408cf4438aac22902b31eb03f3f5bad7f33bc518d12ffb35f3fd9395ccf7efc608ee046f90ce324ec6f7f26f8a8172b8c43c26a06ecee612a29 languageName: node linkType: hard @@ -4351,15 +4326,6 @@ __metadata: languageName: node linkType: hard -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: ~1.0.0 - checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c - languageName: node - linkType: hard - "commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" @@ -4478,7 +4444,7 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": +"convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.8.0 resolution: "convert-source-map@npm:1.8.0" dependencies: @@ -4487,6 +4453,13 @@ __metadata: languageName: node linkType: hard +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + "core-js-compat@npm:^3.25.1": version: 3.26.1 resolution: "core-js-compat@npm:3.26.1" @@ -4605,29 +4578,6 @@ __metadata: languageName: node linkType: hard -"cssom@npm:^0.4.4": - version: 0.4.4 - resolution: "cssom@npm:0.4.4" - checksum: e3bc1076e7ee4213d4fef05e7ae03bfa83dc05f32611d8edc341f4ecc3d9647b89c8245474c7dd2cdcdb797a27c462e99da7ad00a34399694559f763478ff53f - languageName: node - linkType: hard - -"cssom@npm:~0.3.6": - version: 0.3.8 - resolution: "cssom@npm:0.3.8" - checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 - languageName: node - linkType: hard - -"cssstyle@npm:^2.3.0": - version: 2.3.0 - resolution: "cssstyle@npm:2.3.0" - dependencies: - cssom: ~0.3.6 - checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 - languageName: node - linkType: hard - "dargs@npm:^7.0.0": version: 7.0.0 resolution: "dargs@npm:7.0.0" @@ -4642,17 +4592,6 @@ __metadata: languageName: node linkType: hard -"data-urls@npm:^2.0.0": - version: 2.0.0 - resolution: "data-urls@npm:2.0.0" - dependencies: - abab: ^2.0.3 - whatwg-mimetype: ^2.3.0 - whatwg-url: ^8.0.0 - checksum: 97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71 - languageName: node - linkType: hard - "debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" @@ -4700,13 +4639,6 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.2.1": - version: 10.3.1 - resolution: "decimal.js@npm:10.3.1" - checksum: 0351ac9f05fe050f23227aa6a4573bee2d58fa7378fcf28d969a8c789525032effb488a90320fd3fe86a66e17b4bc507d811b15eada5b7f0e7ec5d2af4c24a59 - languageName: node - linkType: hard - "dedent@npm:^0.7.0": version: 0.7.0 resolution: "dedent@npm:0.7.0" @@ -4714,7 +4646,7 @@ __metadata: languageName: node linkType: hard -"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": +"deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 @@ -4737,13 +4669,6 @@ __metadata: languageName: node linkType: hard -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 - languageName: node - linkType: hard - "delegates@npm:^1.0.0": version: 1.0.0 resolution: "delegates@npm:1.0.0" @@ -4788,10 +4713,10 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^27.5.1": - version: 27.5.1 - resolution: "diff-sequences@npm:27.5.1" - checksum: a00db5554c9da7da225db2d2638d85f8e41124eccbd56cbaefb3b276dcbb1c1c2ad851c32defe2055a54a4806f030656cbf6638105fd6ce97bb87b90b32a33ca +"diff-sequences@npm:^29.4.3": + version: 29.4.3 + resolution: "diff-sequences@npm:29.4.3" + checksum: 28b265e04fdddcf7f9f814effe102cc95a9dec0564a579b5aed140edb24fc345c611ca52d76d725a3cab55d3888b915b5e8a4702e0f6058968a90fa5f41fcde7 languageName: node linkType: hard @@ -4861,15 +4786,6 @@ __metadata: languageName: node linkType: hard -"domexception@npm:^2.0.1": - version: 2.0.1 - resolution: "domexception@npm:2.0.1" - dependencies: - webidl-conversions: ^5.0.0 - checksum: d638e9cb05c52999f1b2eb87c374b03311ea5b1d69c2f875bc92da73e17db60c12142b45c950228642ff7f845c536b65305483350d080df59003a653da80b691 - languageName: node - linkType: hard - "dot-prop@npm:^3.0.0": version: 3.0.0 resolution: "dot-prop@npm:3.0.0" @@ -4902,17 +4818,17 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.251": - version: 1.4.255 - resolution: "electron-to-chromium@npm:1.4.255" - checksum: 9fd4e0b4a05b072e211b5a1ad2e20b099d7cd54a47b6cbf700dc9ef2020291b5b2d179af0dd0fc71be74b3c765a71ad14f7ff20afb637c0b58e7abc26ff3b68e +"electron-to-chromium@npm:^1.4.431": + version: 1.4.466 + resolution: "electron-to-chromium@npm:1.4.466" + checksum: 695af573f8642ed86db6e291b1c102083b1306fff7566b9d8e90bab04f7f330a9073a0487013fa21772625d60d9e2eb193a0518a6e80ef20ece20be8f3cd6e50 languageName: node linkType: hard -"emittery@npm:^0.8.1": - version: 0.8.1 - resolution: "emittery@npm:0.8.1" - checksum: 2457e8c7b0688bb006126f2c025b2655abe682f66b184954122a8a065b5277f9813d49d627896a10b076b81c513ec5f491fd9c14fbd42c04b95ca3c9f3c365ee +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 languageName: node linkType: hard @@ -5075,25 +4991,6 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^2.0.0": - version: 2.0.0 - resolution: "escodegen@npm:2.0.0" - dependencies: - esprima: ^4.0.1 - estraverse: ^5.2.0 - esutils: ^2.0.2 - optionator: ^0.8.1 - source-map: ~0.6.1 - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 5aa6b2966fafe0545e4e77936300cc94ad57cfe4dc4ebff9950492eaba83eef634503f12d7e3cbd644ecc1bab388ad0e92b06fd32222c9281a75d1cf02ec6cef - languageName: node - linkType: hard - "eslint-config-airbnb-base@npm:14.2.1": version: 14.2.1 resolution: "eslint-config-airbnb-base@npm:14.2.1" @@ -5318,7 +5215,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:^4.0.1": +"esprima@npm:^4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -5419,15 +5316,17 @@ __metadata: languageName: node linkType: hard -"expect@npm:^27.5.1": - version: 27.5.1 - resolution: "expect@npm:27.5.1" +"expect@npm:^29.0.0, expect@npm:^29.6.1": + version: 29.6.1 + resolution: "expect@npm:29.6.1" dependencies: - "@jest/types": ^27.5.1 - jest-get-type: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - checksum: b2c66beb52de53ef1872165aace40224e722bca3c2274c54cfa74b6d617d55cf0ccdbf36783ccd64dbea501b280098ed33fd0b207d4f15bc03cd3c7a24364a6a + "@jest/expect-utils": ^29.6.1 + "@types/node": "*" + jest-get-type: ^29.4.3 + jest-matcher-utils: ^29.6.1 + jest-message-util: ^29.6.1 + jest-util: ^29.6.1 + checksum: 4e712e52c90f6c54e748fd2876be33c43ada6a59088ddf6a1acb08b18b3b97b3a672124684abe32599986d2f2a438d5afad148837ee06ea386d2a4bf0348de78 languageName: node linkType: hard @@ -5458,14 +5357,14 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0": +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb languageName: node linkType: hard -"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": +"fast-levenshtein@npm:^2.0.6": version: 2.0.6 resolution: "fast-levenshtein@npm:2.0.6" checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c @@ -5580,17 +5479,6 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^3.0.0": - version: 3.0.1 - resolution: "form-data@npm:3.0.1" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.8 - mime-types: ^2.1.12 - checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d - languageName: node - linkType: hard - "formdata-polyfill@npm:^4.0.10": version: 4.0.10 resolution: "formdata-polyfill@npm:4.0.10" @@ -5784,7 +5672,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0": +"glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0": version: 7.2.0 resolution: "glob@npm:7.2.0" dependencies: @@ -5938,15 +5826,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"html-encoding-sniffer@npm:^2.0.1": - version: 2.0.1 - resolution: "html-encoding-sniffer@npm:2.0.1" - dependencies: - whatwg-encoding: ^1.0.5 - checksum: bf30cce461015ed7e365736fcd6a3063c7bc016a91f74398ef6158886970a96333938f7c02417ab3c12aa82e3e53b40822145facccb9ddfbcdc15a879ae4d7ba - languageName: node - linkType: hard - "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -5961,17 +5840,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"http-proxy-agent@npm:^4.0.1": - version: 4.0.1 - resolution: "http-proxy-agent@npm:4.0.1" - dependencies: - "@tootallnate/once": 1 - agent-base: 6 - debug: 4 - checksum: c6a5da5a1929416b6bbdf77b1aca13888013fe7eb9d59fc292e25d18e041bb154a8dfada58e223fc7b76b9b2d155a87e92e608235201f77d34aa258707963a82 - languageName: node - linkType: hard - "http-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "http-proxy-agent@npm:5.0.0" @@ -6030,15 +5898,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"iconv-lite@npm:0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: ">= 2.1.2 < 3" - checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 - languageName: node - linkType: hard - "iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" @@ -6302,13 +6161,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"is-potential-custom-element-name@npm:^1.0.1": - version: 1.0.1 - resolution: "is-potential-custom-element-name@npm:1.0.1" - checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab - languageName: node - linkType: hard - "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -6360,13 +6212,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"is-typedarray@npm:^1.0.0": - version: 1.0.0 - resolution: "is-typedarray@npm:1.0.0" - checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 - languageName: node - linkType: hard - "is-weakref@npm:^1.0.1": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" @@ -6449,60 +6294,60 @@ fsevents@^2.3.2: languageName: node linkType: hard -"jest-changed-files@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-changed-files@npm:27.5.1" +"jest-changed-files@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-changed-files@npm:29.5.0" dependencies: - "@jest/types": ^27.5.1 execa: ^5.0.0 - throat: ^6.0.1 - checksum: 95e9dc74c3ca688ef85cfeab270f43f8902721a6c8ade6ac2459459a77890c85977f537d6fb809056deaa6d9c3f075fa7d2699ff5f3bf7d3fda17c3760b79b15 + p-limit: ^3.1.0 + checksum: a67a7cb3c11f8f92bd1b7c79e84f724cbd11a9ad51f3cdadafe3ce7ee3c79ee50dbea128f920f5fddc807e9e4e83f5462143094391feedd959a77dd20ab96cf3 languageName: node linkType: hard -"jest-circus@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-circus@npm:27.5.1" +"jest-circus@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-circus@npm:29.6.1" dependencies: - "@jest/environment": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/environment": ^29.6.1 + "@jest/expect": ^29.6.1 + "@jest/test-result": ^29.6.1 + "@jest/types": ^29.6.1 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 - expect: ^27.5.1 is-generator-fn: ^2.0.0 - jest-each: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 + jest-each: ^29.6.1 + jest-matcher-utils: ^29.6.1 + jest-message-util: ^29.6.1 + jest-runtime: ^29.6.1 + jest-snapshot: ^29.6.1 + jest-util: ^29.6.1 + p-limit: ^3.1.0 + pretty-format: ^29.6.1 + pure-rand: ^6.0.0 slash: ^3.0.0 stack-utils: ^2.0.3 - throat: ^6.0.1 - checksum: 6192dccbccb3a6acfa361cbb97bdbabe94864ccf3d885932cfd41f19534329d40698078cf9be1489415e8234255d6ea9f9aff5396b79ad842a6fca6e6fc08fd0 + checksum: f3e39a74b601929448df92037f0599978d4d7a4b8f636f64e8020533d2d2b2f669d6729c80c6efed69341ca26753e5061e9787a0acd6c70af2127a94375ebb76 languageName: node linkType: hard -"jest-cli@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-cli@npm:27.5.1" +"jest-cli@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-cli@npm:29.6.1" dependencies: - "@jest/core": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/core": ^29.6.1 + "@jest/test-result": ^29.6.1 + "@jest/types": ^29.6.1 chalk: ^4.0.0 exit: ^0.1.2 graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 + jest-config: ^29.6.1 + jest-util: ^29.6.1 + jest-validate: ^29.6.1 prompts: ^2.0.1 - yargs: ^16.2.0 + yargs: ^17.3.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -6510,212 +6355,173 @@ fsevents@^2.3.2: optional: true bin: jest: bin/jest.js - checksum: 6c0a69fb48e500241409e09ff743ed72bc6578d7769e2c994724e7ef1e5587f6c1f85dc429e93b98ae38a365222993ee70f0acc2199358992120900984f349e5 + checksum: f5854ffea977b9a12520ea71f8d0cc8a626cbb93d7e1e6eea18a2a1f2b25f70f1b6b08a89f11b4dc7dd36a1776a9ac2cf8ec5c7998086f913ee690c06c07c949 languageName: node linkType: hard -"jest-config@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-config@npm:27.5.1" +"jest-config@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-config@npm:29.6.1" dependencies: - "@babel/core": ^7.8.0 - "@jest/test-sequencer": ^27.5.1 - "@jest/types": ^27.5.1 - babel-jest: ^27.5.1 + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.6.1 + "@jest/types": ^29.6.1 + babel-jest: ^29.6.1 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 - glob: ^7.1.1 + glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^27.5.1 - jest-environment-jsdom: ^27.5.1 - jest-environment-node: ^27.5.1 - jest-get-type: ^27.5.1 - jest-jasmine2: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-runner: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 + jest-circus: ^29.6.1 + jest-environment-node: ^29.6.1 + jest-get-type: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.6.1 + jest-runner: ^29.6.1 + jest-util: ^29.6.1 + jest-validate: ^29.6.1 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^27.5.1 + pretty-format: ^29.6.1 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: + "@types/node": "*" ts-node: ">=9.0.0" peerDependenciesMeta: + "@types/node": + optional: true ts-node: optional: true - checksum: 1188fd46c0ed78cbe3175eb9ad6712ccf74a74be33d9f0d748e147c107f0889f8b701fbff1567f31836ae18597dacdc43d6a8fc30dd34ade6c9229cc6c7cb82d + checksum: 3a30afeb28cc5658ef9cd95f2551ab8a29641bb6d377eb239cba8e7522eb4611c9a98cdcf173d87f5ad7b5e1ad242c3cd5434a260107bd3c7e8305d05023e05c languageName: node linkType: hard -"jest-diff@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-diff@npm:27.5.1" +"jest-diff@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-diff@npm:29.6.1" dependencies: chalk: ^4.0.0 - diff-sequences: ^27.5.1 - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: 8be27c1e1ee57b2bb2bef9c0b233c19621b4c43d53a3c26e2c00a4e805eb4ea11fe1694a06a9fb0e80ffdcfdc0d2b1cb0b85920b3f5c892327ecd1e7bd96b865 + diff-sequences: ^29.4.3 + jest-get-type: ^29.4.3 + pretty-format: ^29.6.1 + checksum: c6350178ca27d92c7fd879790fb2525470c1ff1c5d29b1834a240fecd26c6904fb470ebddb98dc96dd85389c56c3b50e6965a1f5203e9236d213886ed9806219 languageName: node linkType: hard -"jest-docblock@npm:^27.4.0, jest-docblock@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-docblock@npm:27.5.1" +"jest-docblock@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-docblock@npm:29.4.3" dependencies: detect-newline: ^3.0.0 - checksum: c0fed6d55b229d8bffdd8d03f121dd1a3be77c88f50552d374f9e1ea3bde57bf6bea017a0add04628d98abcb1bfb48b456438eeca8a74ef0053f4dae3b95d29c + checksum: e0e9df1485bb8926e5b33478cdf84b3387d9caf3658e7dc1eaa6dc34cb93dea0d2d74797f6e940f0233a88f3dadd60957f2288eb8f95506361f85b84bf8661df languageName: node linkType: hard -"jest-each@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-each@npm:27.5.1" +"jest-each@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-each@npm:29.6.1" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^29.6.1 chalk: ^4.0.0 - jest-get-type: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 - checksum: b5a6d8730fd938982569c9e0b42bdf3c242f97b957ed8155a6473b5f7b540970f8685524e7f53963dc1805319f4b6602abfc56605590ca19d55bd7a87e467e63 - languageName: node - linkType: hard - -"jest-environment-jsdom@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-environment-jsdom@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - jest-mock: ^27.5.1 - jest-util: ^27.5.1 - jsdom: ^16.6.0 - checksum: bc104aef7d7530d0740402aa84ac812138b6d1e51fe58adecce679f82b99340ddab73e5ec68fa079f33f50c9ddec9728fc9f0ddcca2ad6f0b351eed2762cc555 + jest-get-type: ^29.4.3 + jest-util: ^29.6.1 + pretty-format: ^29.6.1 + checksum: 9d2ea7ed5326ee8c22523b22c66c85fe73754ea39f9b389881956508ee441392c61072a5fbf673e39beddd31d011bb94acae3edc77053ba4f9aa5c060114a5c8 languageName: node linkType: hard -"jest-environment-node@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-environment-node@npm:27.5.1" +"jest-environment-node@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-environment-node@npm:29.6.1" dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/environment": ^29.6.1 + "@jest/fake-timers": ^29.6.1 + "@jest/types": ^29.6.1 "@types/node": "*" - jest-mock: ^27.5.1 - jest-util: ^27.5.1 - checksum: 0f988330c4f3eec092e3fb37ea753b0c6f702e83cd8f4d770af9c2bf964a70bc45fbd34ec6fdb6d71ce98a778d9f54afd673e63f222e4667fff289e8069dba39 + jest-mock: ^29.6.1 + jest-util: ^29.6.1 + checksum: a50287e1ff29d131646bd09acc3222ac6ea0ad61e86bf73851d318ef2be0633a421b8558c4a15ddc67e0ffcfc32da7f6a0d8a2ddbfa85453837899dec88d256c languageName: node linkType: hard -"jest-get-type@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-get-type@npm:27.5.1" - checksum: 63064ab70195c21007d897c1157bf88ff94a790824a10f8c890392e7d17eda9c3900513cb291ca1c8d5722cad79169764e9a1279f7c8a9c4cd6e9109ff04bbc0 +"jest-get-type@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-get-type@npm:29.4.3" + checksum: 6ac7f2dde1c65e292e4355b6c63b3a4897d7e92cb4c8afcf6d397f2682f8080e094c8b0b68205a74d269882ec06bf696a9de6cd3e1b7333531e5ed7b112605ce languageName: node linkType: hard -"jest-haste-map@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-haste-map@npm:27.5.1" +"jest-haste-map@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-haste-map@npm:29.6.1" dependencies: - "@jest/types": ^27.5.1 - "@types/graceful-fs": ^4.1.2 + "@jest/types": ^29.6.1 + "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 fb-watchman: ^2.0.0 fsevents: ^2.3.2 graceful-fs: ^4.2.9 - jest-regex-util: ^27.5.1 - jest-serializer: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 + jest-regex-util: ^29.4.3 + jest-util: ^29.6.1 + jest-worker: ^29.6.1 micromatch: ^4.0.4 - walker: ^1.0.7 + walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: e092a1412829a9254b4725531ee72926de530f77fda7b0d9ea18008fb7623c16f72e772d8e93be71cac9e591b2c6843a669610887dd2c89bd9eb528856e3ab47 + checksum: 7c74d5a0f6aafa9f4e60fae7949d4774770c0243fb529c24f2f4c81229db479fa318dc8b81e8d226865aef1d600af10bd8404dd208e802318434b46f75d5d869 languageName: node linkType: hard -"jest-jasmine2@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-jasmine2@npm:27.5.1" +"jest-leak-detector@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-leak-detector@npm:29.6.1" dependencies: - "@jest/environment": ^27.5.1 - "@jest/source-map": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - expect: ^27.5.1 - is-generator-fn: ^2.0.0 - jest-each: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 - throat: ^6.0.1 - checksum: b716adf253ceb73db661936153394ab90d7f3a8ba56d6189b7cd4df8e4e2a4153b4e63ebb5d36e29ceb0f4c211d5a6f36ab7048c6abbd881c8646567e2ab8e6d + jest-get-type: ^29.4.3 + pretty-format: ^29.6.1 + checksum: 5122d40c248effaede4c9ee3a99046a3f30088fef7bfc4af534678b432455161399357af46deb6423de7e05c6597920d6ee8cd570e26048886a90d541334f8c8 languageName: node linkType: hard -"jest-leak-detector@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-leak-detector@npm:27.5.1" - dependencies: - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: 5c9689060960567ddaf16c570d87afa760a461885765d2c71ef4f4857bbc3af1482c34e3cce88e50beefde1bf35e33530b020480752057a7e3dbb1ca0bae359f - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^27.0.0, jest-matcher-utils@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-matcher-utils@npm:27.5.1" +"jest-matcher-utils@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-matcher-utils@npm:29.6.1" dependencies: chalk: ^4.0.0 - jest-diff: ^27.5.1 - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: bb2135fc48889ff3fe73888f6cc7168ddab9de28b51b3148f820c89fdfd2effdcad005f18be67d0b9be80eda208ad47290f62f03d0a33f848db2dd0273c8217a + jest-diff: ^29.6.1 + jest-get-type: ^29.4.3 + pretty-format: ^29.6.1 + checksum: d2efa6aed6e4820758b732b9fefd315c7fa4508ee690da656e1c5ac4c1a0f4cee5b04c9719ee1fda9aeb883b4209186c145089ced521e715b9fa70afdfa4a9c6 languageName: node linkType: hard -"jest-message-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-message-util@npm:27.5.1" +"jest-message-util@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-message-util@npm:29.6.1" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^27.5.1 + "@jest/types": ^29.6.1 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^27.5.1 + pretty-format: ^29.6.1 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: eb6d637d1411c71646de578c49826b6da8e33dd293e501967011de9d1916d53d845afbfb52a5b661ff1c495be7c13f751c48c7f30781fd94fbd64842e8195796 + checksum: 3e7cb2ff087fe72255292e151d24e4fbb4cd6134885c0a67a4b302f233fe4110bf7580b176f427f05ad7550eb878ed94237209785d09d659a7d171ffa59c068f languageName: node linkType: hard -"jest-mock@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-mock@npm:27.5.1" +"jest-mock@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-mock@npm:29.6.1" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^29.6.1 "@types/node": "*" - checksum: f5b5904bb1741b4a1687a5f492535b7b1758dc26534c72a5423305f8711292e96a601dec966df81bb313269fb52d47227e29f9c2e08324d79529172f67311be0 + jest-util: ^29.6.1 + checksum: 5e902f1a7eba1eb1a64eb6c19947fe1316834359d9869d0e2644d8979b9cad0465885dc4c9909c471888cddeea835c938cec6263d386d3d1aad720fc74e52ea1 languageName: node linkType: hard @@ -6731,195 +6537,173 @@ fsevents@^2.3.2: languageName: node linkType: hard -"jest-regex-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-regex-util@npm:27.5.1" - checksum: d45ca7a9543616a34f7f3079337439cf07566e677a096472baa2810e274b9808b76767c97b0a4029b8a5b82b9d256dee28ef9ad4138b2b9e5933f6fac106c418 +"jest-regex-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-regex-util@npm:29.4.3" + checksum: 96fc7fc28cd4dd73a63c13a526202c4bd8b351d4e5b68b1a2a2c88da3308c2a16e26feaa593083eb0bac38cca1aa9dd05025412e7de013ba963fb8e66af22b8a languageName: node linkType: hard -"jest-resolve-dependencies@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-resolve-dependencies@npm:27.5.1" +"jest-resolve-dependencies@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-resolve-dependencies@npm:29.6.1" dependencies: - "@jest/types": ^27.5.1 - jest-regex-util: ^27.5.1 - jest-snapshot: ^27.5.1 - checksum: c67af97afad1da88f5530317c732bbd1262d1225f6cd7f4e4740a5db48f90ab0bd8564738ac70d1a43934894f9aef62205c1b8f8ee89e5c7a737e6a121ee4c25 + jest-regex-util: ^29.4.3 + jest-snapshot: ^29.6.1 + checksum: cee0a0fe53fd4531492a526b6ccd32377baad1eff6e6c124f04e9dc920219fd23fd39be88bb9551ee68d5fe92a3af627b423c9bc65a2aa0ac8a223c0e74dbbbb languageName: node linkType: hard -"jest-resolve@npm:^27.2.5, jest-resolve@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-resolve@npm:27.5.1" +"jest-resolve@npm:^29.5.0, jest-resolve@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-resolve@npm:29.6.1" dependencies: - "@jest/types": ^27.5.1 chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 + jest-haste-map: ^29.6.1 jest-pnp-resolver: ^1.2.2 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 + jest-util: ^29.6.1 + jest-validate: ^29.6.1 resolve: ^1.20.0 - resolve.exports: ^1.1.0 + resolve.exports: ^2.0.0 slash: ^3.0.0 - checksum: 735830e7265b20a348029738680bb2f6e37f80ecea86cda869a4c318ba3a45d39c7a3a873a22f7f746d86258c50ead6e7f501de043e201c095d7ba628a1c440f - languageName: node - linkType: hard - -"jest-runner-groups@npm:^2.1.0": - version: 2.1.0 - resolution: "jest-runner-groups@npm:2.1.0" - peerDependencies: - jest-docblock: ">= 24" - jest-runner: ">= 24" - checksum: 760ae1b47e0d257441843508652bc09d6b9e09c35be2325d81bb14b082bc9c49974df0123c75a4b45a655c04e61d52dc3d4bf32279243fd86b5656fdb582573a + checksum: 9ce979a0f4a751bea58caea76415112df2a3f4d58e294019872244728aadd001f0ec20c873a3c805dd8f7c762143b3c14d00f87d124ed87c9981fbf8723090ef languageName: node linkType: hard -"jest-runner@npm:^27.4.6, jest-runner@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-runner@npm:27.5.1" +"jest-runner@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-runner@npm:29.6.1" dependencies: - "@jest/console": ^27.5.1 - "@jest/environment": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/console": ^29.6.1 + "@jest/environment": ^29.6.1 + "@jest/test-result": ^29.6.1 + "@jest/transform": ^29.6.1 + "@jest/types": ^29.6.1 "@types/node": "*" chalk: ^4.0.0 - emittery: ^0.8.1 + emittery: ^0.13.1 graceful-fs: ^4.2.9 - jest-docblock: ^27.5.1 - jest-environment-jsdom: ^27.5.1 - jest-environment-node: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-leak-detector: ^27.5.1 - jest-message-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-runtime: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 - source-map-support: ^0.5.6 - throat: ^6.0.1 - checksum: 5bbe6cf847dd322b3332ec9d6977b54f91bd5f72ff620bc1a0192f0f129deda8aa7ca74c98922187a7aa87d8e0ce4f6c50e99a7ccb2a310bf4d94be2e0c3ce8e - languageName: node - linkType: hard - -"jest-runtime@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-runtime@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/globals": ^27.5.1 - "@jest/source-map": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 + jest-docblock: ^29.4.3 + jest-environment-node: ^29.6.1 + jest-haste-map: ^29.6.1 + jest-leak-detector: ^29.6.1 + jest-message-util: ^29.6.1 + jest-resolve: ^29.6.1 + jest-runtime: ^29.6.1 + jest-util: ^29.6.1 + jest-watcher: ^29.6.1 + jest-worker: ^29.6.1 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: 0e4dbda26669ae31fee32f8a62b3119bba510f2d17a098d6157b48a73ed2fc9842405bf893f3045c12b3632c7c0e3399fb22684b18ab5566aff4905b26c79a9a + languageName: node + linkType: hard + +"jest-runtime@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-runtime@npm:29.6.1" + dependencies: + "@jest/environment": ^29.6.1 + "@jest/fake-timers": ^29.6.1 + "@jest/globals": ^29.6.1 + "@jest/source-map": ^29.6.0 + "@jest/test-result": ^29.6.1 + "@jest/transform": ^29.6.1 + "@jest/types": ^29.6.1 + "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 - execa: ^5.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-message-util: ^27.5.1 - jest-mock: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 + jest-haste-map: ^29.6.1 + jest-message-util: ^29.6.1 + jest-mock: ^29.6.1 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.6.1 + jest-snapshot: ^29.6.1 + jest-util: ^29.6.1 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: 929e3df0c53dab43f831f2af4e2996b22aa8cb2d6d483919d6b0426cbc100098fd5b777b998c6568b77f8c4d860b2e83127514292ff61416064f5ef926492386 - languageName: node - linkType: hard - -"jest-serializer@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-serializer@npm:27.5.1" - dependencies: - "@types/node": "*" - graceful-fs: ^4.2.9 - checksum: 803e03a552278610edc6753c0dd9fa5bb5cd3ca47414a7b2918106efb62b79fd5e9ae785d0a21f12a299fa599fea8acc1fa6dd41283328cee43962cf7df9bb44 + checksum: 7c360c9694467d996f3d6d914fefa0e7bda554adda8c2b9fba31546dba663d71a64eda103ff68120a2422f3c16db8f0bc2c445923fe8fb934f37e53ef74fb429 languageName: node linkType: hard -"jest-snapshot@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-snapshot@npm:27.5.1" +"jest-snapshot@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-snapshot@npm:29.6.1" dependencies: - "@babel/core": ^7.7.2 + "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/traverse": ^7.7.2 - "@babel/types": ^7.0.0 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/babel__traverse": ^7.0.4 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.6.1 + "@jest/transform": ^29.6.1 + "@jest/types": ^29.6.1 "@types/prettier": ^2.1.5 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^27.5.1 + expect: ^29.6.1 graceful-fs: ^4.2.9 - jest-diff: ^27.5.1 - jest-get-type: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-util: ^27.5.1 + jest-diff: ^29.6.1 + jest-get-type: ^29.4.3 + jest-matcher-utils: ^29.6.1 + jest-message-util: ^29.6.1 + jest-util: ^29.6.1 natural-compare: ^1.4.0 - pretty-format: ^27.5.1 - semver: ^7.3.2 - checksum: a5cfadf0d21cd76063925d1434bc076443ed6d87847d0e248f0b245f11db3d98ff13e45cc03b15404027dabecd712d925f47b6eae4f64986f688640a7d362514 + pretty-format: ^29.6.1 + semver: ^7.5.3 + checksum: e8f69d1fd4a29d354d4dca9eb2a22674b300f8ef509e4f1e75337c880414a00d2bdc9d3849a6855dbb5a76bfbe74603f33435378a3877e69f0838e4cc2244350 languageName: node linkType: hard -"jest-util@npm:^27.0.0, jest-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-util@npm:27.5.1" +"jest-util@npm:^29.0.0, jest-util@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-util@npm:29.6.1" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^29.6.1 "@types/node": "*" chalk: ^4.0.0 ci-info: ^3.2.0 graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: ac8d122f6daf7a035dcea156641fd3701aeba245417c40836a77e35b3341b9c02ddc5d904cfcd4ddbaa00ab854da76d3b911870cafdcdbaff90ea471de26c7d7 + checksum: fc553556c1350c443449cadaba5fb9d604628e8b5ceb6ceaf4e7e08975b24277d0a14bf2e0f956024e03c23e556fcb074659423422a06fbedf2ab52978697ac7 languageName: node linkType: hard -"jest-validate@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-validate@npm:27.5.1" +"jest-validate@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-validate@npm:29.6.1" dependencies: - "@jest/types": ^27.5.1 + "@jest/types": ^29.6.1 camelcase: ^6.2.0 chalk: ^4.0.0 - jest-get-type: ^27.5.1 + jest-get-type: ^29.4.3 leven: ^3.1.0 - pretty-format: ^27.5.1 - checksum: 82e870f8ee7e4fb949652711b1567f05ae31c54be346b0899e8353e5c20fad7692b511905b37966945e90af8dc0383eb41a74f3ffefb16140ea4f9164d841412 + pretty-format: ^29.6.1 + checksum: d2491f3f33d9bbc2dcaaa6acbff26f257b59c5eeceb65a52a9c1cec2f679b836ec2a4658b7004c0ef9d90cd0d9bd664e41d5ed6900f932bea742dd8e6b85e7f1 languageName: node linkType: hard -"jest-watcher@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-watcher@npm:27.5.1" +"jest-watcher@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-watcher@npm:29.6.1" dependencies: - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 + "@jest/test-result": ^29.6.1 + "@jest/types": ^29.6.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 - jest-util: ^27.5.1 + emittery: ^0.13.1 + jest-util: ^29.6.1 string-length: ^4.0.1 - checksum: 191c4e9c278c0902ade1a8a80883ac244963ba3e6e78607a3d5f729ccca9c6e71fb3b316f87883658132641c5d818aa84202585c76752e03c539e6cbecb820bd + checksum: 69bd5a602284fdce6eba5486c5c57aca6b511d91cb0907c34c104d6dd931e18ce67baa7f8e280fa473e5d81ea3e7b9e7d94f712c37ab0b3b8cc2aec30676955d languageName: node linkType: hard -"jest-worker@npm:^27.4.5, jest-worker@npm:^27.5.1": +"jest-worker@npm:^27.4.5": version: 27.5.1 resolution: "jest-worker@npm:27.5.1" dependencies: @@ -6930,13 +6714,26 @@ fsevents@^2.3.2: languageName: node linkType: hard -"jest@npm:^27.4.7": - version: 27.5.1 - resolution: "jest@npm:27.5.1" +"jest-worker@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-worker@npm:29.6.1" + dependencies: + "@types/node": "*" + jest-util: ^29.6.1 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 0af309ea4db17c4c47e84a9246f907960a15577683c005fdeafc8f3c06bc455136f95a6f28fa2a3e924b767eb4dacd9b40915a7707305f88586f099af3ac27a8 + languageName: node + linkType: hard + +"jest@npm:^29.6.1": + version: 29.6.1 + resolution: "jest@npm:29.6.1" dependencies: - "@jest/core": ^27.5.1 + "@jest/core": ^29.6.1 + "@jest/types": ^29.6.1 import-local: ^3.0.2 - jest-cli: ^27.5.1 + jest-cli: ^29.6.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -6944,7 +6741,7 @@ fsevents@^2.3.2: optional: true bin: jest: bin/jest.js - checksum: 96f1d69042b3c6dfc695f2a4e4b0db38af6fb78582ad1a02beaa57cfcd77cbd31567d7d865c1c85709b7c3e176eefa3b2035ffecd646005f15d8ef528eccf205 + checksum: 7b8c0ca72f483e00ec19dcf9549f9a9af8ae468ab62925b148d714b58eb52d5fea9a082625193bc833d2d9b64cf65a11f3d37857636c5551af05c10aec4ce71b languageName: node linkType: hard @@ -6974,46 +6771,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"jsdom@npm:^16.6.0": - version: 16.7.0 - resolution: "jsdom@npm:16.7.0" - dependencies: - abab: ^2.0.5 - acorn: ^8.2.4 - acorn-globals: ^6.0.0 - cssom: ^0.4.4 - cssstyle: ^2.3.0 - data-urls: ^2.0.0 - decimal.js: ^10.2.1 - domexception: ^2.0.1 - escodegen: ^2.0.0 - form-data: ^3.0.0 - html-encoding-sniffer: ^2.0.1 - http-proxy-agent: ^4.0.1 - https-proxy-agent: ^5.0.0 - is-potential-custom-element-name: ^1.0.1 - nwsapi: ^2.2.0 - parse5: 6.0.1 - saxes: ^5.0.1 - symbol-tree: ^3.2.4 - tough-cookie: ^4.0.0 - w3c-hr-time: ^1.0.2 - w3c-xmlserializer: ^2.0.0 - webidl-conversions: ^6.1.0 - whatwg-encoding: ^1.0.5 - whatwg-mimetype: ^2.3.0 - whatwg-url: ^8.5.0 - ws: ^7.4.6 - xml-name-validator: ^3.0.0 - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 454b83371857000763ed31130a049acd1b113e3b927e6dcd75c67ddc30cdd242d7ebcac5c2294b7a1a6428155cb1398709c573b3c6d809218692ea68edd93370 - languageName: node - linkType: hard - "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -7067,15 +6824,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"json5@npm:2.x, json5@npm:^2.2.1": - version: 2.2.3 - resolution: "json5@npm:2.2.3" - bin: - json5: lib/cli.js - checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 - languageName: node - linkType: hard - "json5@npm:^1.0.1": version: 1.0.2 resolution: "json5@npm:1.0.2" @@ -7087,6 +6835,15 @@ fsevents@^2.3.2: languageName: node linkType: hard +"json5@npm:^2.2.2, json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + "jsonc-parser@npm:^3.2.0": version: 3.2.0 resolution: "jsonc-parser@npm:3.2.0" @@ -7199,16 +6956,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"levn@npm:~0.3.0": - version: 0.3.0 - resolution: "levn@npm:0.3.0" - dependencies: - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e - languageName: node - linkType: hard - "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -7314,13 +7061,22 @@ fsevents@^2.3.2: languageName: node linkType: hard -"lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21, lodash@npm:^4.7.0": +"lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 languageName: node linkType: hard +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" @@ -7466,7 +7222,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27": +"mime-types@npm:^2.1.27": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -7747,10 +7503,10 @@ fsevents@^2.3.2: languageName: node linkType: hard -"node-releases@npm:^2.0.6": - version: 2.0.6 - resolution: "node-releases@npm:2.0.6" - checksum: e86a926dc9fbb3b41b4c4a89d998afdf140e20a4e8dbe6c0a807f7b2948b42ea97d7fd3ad4868041487b6e9ee98409829c6e4d84a734a4215dff060a7fbeb4bf +"node-releases@npm:^2.0.12": + version: 2.0.13 + resolution: "node-releases@npm:2.0.13" + checksum: 17ec8f315dba62710cae71a8dad3cd0288ba943d2ece43504b3b1aa8625bf138637798ab470b1d9035b0545996f63000a8a926e0f6d35d0996424f8b6d36dda3 languageName: node linkType: hard @@ -7817,13 +7573,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"nwsapi@npm:^2.2.0": - version: 2.2.0 - resolution: "nwsapi@npm:2.2.0" - checksum: 5ef4a9bc0c1a5b7f2e014aa6a4b359a257503b796618ed1ef0eb852098f77e772305bb0e92856e4bbfa3e6c75da48c0113505c76f144555ff38867229c2400a7 - languageName: node - linkType: hard - "object-inspect@npm:^1.11.0, object-inspect@npm:^1.9.0": version: 1.12.0 resolution: "object-inspect@npm:1.12.0" @@ -7899,20 +7648,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"optionator@npm:^0.8.1": - version: 0.8.3 - resolution: "optionator@npm:0.8.3" - dependencies: - deep-is: ~0.1.3 - fast-levenshtein: ~2.0.6 - levn: ~0.3.0 - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - word-wrap: ~1.2.3 - checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 - languageName: node - linkType: hard - "optionator@npm:^0.9.1": version: 0.9.1 resolution: "optionator@npm:0.9.1" @@ -7945,7 +7680,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"p-limit@npm:^3.0.2": +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": version: 3.1.0 resolution: "p-limit@npm:3.1.0" dependencies: @@ -8032,13 +7767,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"parse5@npm:6.0.1": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd - languageName: node - linkType: hard - "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" @@ -8145,13 +7873,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"prelude-ls@npm:~1.1.2": - version: 1.1.2 - resolution: "prelude-ls@npm:1.1.2" - checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 - languageName: node - linkType: hard - "prettier-linter-helpers@npm:^1.0.0": version: 1.0.0 resolution: "prettier-linter-helpers@npm:1.0.0" @@ -8170,14 +7891,14 @@ fsevents@^2.3.2: languageName: node linkType: hard -"pretty-format@npm:^27.0.0, pretty-format@npm:^27.5.1": - version: 27.5.1 - resolution: "pretty-format@npm:27.5.1" +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.6.1": + version: 29.6.1 + resolution: "pretty-format@npm:29.6.1" dependencies: - ansi-regex: ^5.0.1 + "@jest/schemas": ^29.6.0 ansi-styles: ^5.0.0 - react-is: ^17.0.1 - checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088 + react-is: ^18.0.0 + checksum: 6f923a2379a37a425241dc223d76f671c73c4f37dba158050575a54095867d565c068b441843afdf3d7c37bed9df4bbadf46297976e60d4149972b779474203a languageName: node linkType: hard @@ -8238,13 +7959,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"psl@npm:^1.1.33": - version: 1.8.0 - resolution: "psl@npm:1.8.0" - checksum: 6150048ed2da3f919478bee8a82f3828303bc0fc730fb015a48f83c9977682c7b28c60ab01425a72d82a2891a1681627aa530a991d50c086b48a3be27744bde7 - languageName: node - linkType: hard - "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" @@ -8255,13 +7969,20 @@ fsevents@^2.3.2: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.1.1": +"punycode@npm:^2.1.0": version: 2.1.1 resolution: "punycode@npm:2.1.1" checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 languageName: node linkType: hard +"pure-rand@npm:^6.0.0": + version: 6.0.2 + resolution: "pure-rand@npm:6.0.2" + checksum: 79de33876a4f515d759c48e98d00756bbd916b4ea260cc572d7adfa4b62cace9952e89f0241d0410214554503d25061140fe325c66f845213d2b1728ba8d413e + languageName: node + linkType: hard + "q@npm:^1.5.1": version: 1.5.1 resolution: "q@npm:1.5.1" @@ -8301,10 +8022,10 @@ fsevents@^2.3.2: languageName: node linkType: hard -"react-is@npm:^17.0.1": - version: 17.0.2 - resolution: "react-is@npm:17.0.2" - checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 +"react-is@npm:^18.0.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e languageName: node linkType: hard @@ -8523,10 +8244,10 @@ fsevents@^2.3.2: languageName: node linkType: hard -"resolve.exports@npm:^1.1.0": - version: 1.1.0 - resolution: "resolve.exports@npm:1.1.0" - checksum: 52865af8edb088f6c7759a328584a5de6b226754f004b742523adcfe398cfbc4559515104bc2ae87b8e78b1e4de46c9baec400b3fb1f7d517b86d2d48a098a2d +"resolve.exports@npm:^2.0.0": + version: 2.0.2 + resolution: "resolve.exports@npm:2.0.2" + checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 languageName: node linkType: hard @@ -8570,7 +8291,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": +"rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -8589,7 +8310,7 @@ fsevents@^2.3.2: "@commitlint/cli": ^9.0.1 "@commitlint/config-conventional": ^9.0.1 "@playwright/test": ^1.21.1 - "@types/jest": ^27.4.0 + "@types/jest": ^29.5.3 "@typescript-eslint/eslint-plugin": ^5.7.0 "@typescript-eslint/parser": ^5.7.0 eslint: ^7.32.0 @@ -8600,15 +8321,12 @@ fsevents@^2.3.2: eslint-plugin-license-header: ^0.2.1 eslint-plugin-prettier: ^3.4.1 husky: ^4.2.5 - jest: ^27.4.7 - jest-docblock: ^27.4.0 - jest-runner: ^27.4.6 - jest-runner-groups: ^2.1.0 + jest: ^29.6.1 prettier: ^2.4.1 rimraf: ^3.0.2 testcontainers: ^9.0.0 - ts-jest: ^27.1.2 - ts-jest-resolver: ^2.0.0 + ts-jest: ^29.1.1 + ts-jest-resolver: ^2.0.1 typedoc: ^0.23.0 typescript: ^4.8.3 languageName: unknown @@ -8646,22 +8364,13 @@ fsevents@^2.3.2: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:~2.1.0": +"safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 languageName: node linkType: hard -"saxes@npm:^5.0.1": - version: 5.0.1 - resolution: "saxes@npm:5.0.1" - dependencies: - xmlchars: ^2.2.0 - checksum: 5636b55cf15f7cf0baa73f2797bf992bdcf75d1b39d82c0aa4608555c774368f6ac321cb641fd5f3d3ceb87805122cd47540da6a7b5960fe0dbdb8f8c263f000 - languageName: node - linkType: hard - "schema-utils@npm:^3.1.1, schema-utils@npm:^3.1.2": version: 3.2.0 resolution: "schema-utils@npm:3.2.0" @@ -8712,23 +8421,23 @@ fsevents@^2.3.2: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5": - version: 7.3.5 - resolution: "semver@npm:7.3.5" - dependencies: - lru-cache: ^6.0.0 +"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" bin: semver: bin/semver.js - checksum: 5eafe6102bea2a7439897c1856362e31cc348ccf96efd455c8b5bc2c61e6f7e7b8250dc26b8828c1d76a56f818a7ee907a36ae9fb37a599d3d24609207001d60 + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": - version: 6.3.0 - resolution: "semver@npm:6.3.0" +"semver@npm:^7.2.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.5.3": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 bin: - semver: ./bin/semver.js - checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 languageName: node linkType: hard @@ -8812,7 +8521,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 @@ -8882,7 +8591,17 @@ fsevents@^2.3.2: languageName: node linkType: hard -"source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 + languageName: node + linkType: hard + +"source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -8899,20 +8618,13 @@ fsevents@^2.3.2: languageName: node linkType: hard -"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": +"source-map@npm:^0.6.0, source-map@npm:^0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 languageName: node linkType: hard -"source-map@npm:^0.7.3": - version: 0.7.3 - resolution: "source-map@npm:0.7.3" - checksum: cd24efb3b8fa69b64bf28e3c1b1a500de77e84260c5b7f2b873f88284df17974157cc88d386ee9b6d081f08fdd8242f3fc05c953685a6ad81aad94c7393dedea - languageName: node - linkType: hard - "spdx-correct@npm:^3.0.0": version: 3.1.1 resolution: "spdx-correct@npm:3.1.1" @@ -9180,7 +8892,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": +"supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" dependencies: @@ -9198,16 +8910,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"supports-hyperlinks@npm:^2.0.0": - version: 2.2.0 - resolution: "supports-hyperlinks@npm:2.2.0" - dependencies: - has-flag: ^4.0.0 - supports-color: ^7.0.0 - checksum: aef04fb41f4a67f1bc128f7c3e88a81b6cf2794c800fccf137006efe5bafde281da3e42e72bf9206c2fcf42e6438f37e3a820a389214d0a88613ca1f2d36076a - languageName: node - linkType: hard - "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -9215,13 +8917,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"symbol-tree@npm:^3.2.4": - version: 3.2.4 - resolution: "symbol-tree@npm:3.2.4" - checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d - languageName: node - linkType: hard - "table@npm:^6.0.9": version: 6.8.0 resolution: "table@npm:6.8.0" @@ -9293,16 +8988,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"terminal-link@npm:^2.0.0": - version: 2.1.1 - resolution: "terminal-link@npm:2.1.1" - dependencies: - ansi-escapes: ^4.2.1 - supports-hyperlinks: ^2.0.0 - checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f - languageName: node - linkType: hard - "terser-webpack-plugin@npm:^5.1.1, terser-webpack-plugin@npm:^5.3.7": version: 5.3.9 resolution: "terser-webpack-plugin@npm:5.3.9" @@ -9386,13 +9071,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"throat@npm:^6.0.1": - version: 6.0.1 - resolution: "throat@npm:6.0.1" - checksum: 782d4171ee4e3cf947483ed2ff1af3e17cc4354c693b9d339284f61f99fbc401d171e0b0d2db3295bb7d447630333e9319c174ebd7ef315c6fb791db9675369c - languageName: node - linkType: hard - "through2@npm:^4.0.0": version: 4.0.2 resolution: "through2@npm:4.0.2" @@ -9432,26 +9110,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"tough-cookie@npm:^4.0.0": - version: 4.0.0 - resolution: "tough-cookie@npm:4.0.0" - dependencies: - psl: ^1.1.33 - punycode: ^2.1.1 - universalify: ^0.1.2 - checksum: 0891b37eb7d17faa3479d47f0dce2e3007f2583094ad272f2670d120fbcc3df3b0b0a631ba96ecad49f9e2297d93ff8995ce0d3292d08dd7eabe162f5b224d69 - languageName: node - linkType: hard - -"tr46@npm:^2.1.0": - version: 2.1.0 - resolution: "tr46@npm:2.1.0" - dependencies: - punycode: ^2.1.1 - checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 - languageName: node - linkType: hard - "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -9466,38 +9124,37 @@ fsevents@^2.3.2: languageName: node linkType: hard -"ts-jest-resolver@npm:^2.0.0": - version: 2.0.0 - resolution: "ts-jest-resolver@npm:2.0.0" +"ts-jest-resolver@npm:^2.0.1": + version: 2.0.1 + resolution: "ts-jest-resolver@npm:2.0.1" dependencies: - jest-resolve: ^27.2.5 - checksum: 7208f45efd64b9e110e07fcb2ab1dcaf97c8a6f16daee8d188432857f7ffc128fdf0c4c8eee348803de603ca7805ea00554feec915b41b9320b2b4014625c607 + jest-resolve: ^29.5.0 + checksum: 0845b9ab6a7d5c7b872e7573550607e9da1a2281c4db7a9d900c52b518bf5237ca265d56356b2ebb6d5aad705613e55e406c0eb66cad60ab2a303d17e6b0844e languageName: node linkType: hard -"ts-jest@npm:^27.1.2": - version: 27.1.3 - resolution: "ts-jest@npm:27.1.3" +"ts-jest@npm:^29.1.1": + version: 29.1.1 + resolution: "ts-jest@npm:29.1.1" dependencies: bs-logger: 0.x fast-json-stable-stringify: 2.x - jest-util: ^27.0.0 - json5: 2.x + jest-util: ^29.0.0 + json5: ^2.2.3 lodash.memoize: 4.x make-error: 1.x - semver: 7.x - yargs-parser: 20.x + semver: ^7.5.3 + yargs-parser: ^21.0.1 peerDependencies: "@babel/core": ">=7.0.0-beta.0 <8" - "@types/jest": ^27.0.0 - babel-jest: ">=27.0.0 <28" - esbuild: ~0.14.0 - jest: ^27.0.0 - typescript: ">=3.8 <5.0" + "@jest/types": ^29.0.0 + babel-jest: ^29.0.0 + jest: ^29.0.0 + typescript: ">=4.3 <6" peerDependenciesMeta: "@babel/core": optional: true - "@types/jest": + "@jest/types": optional: true babel-jest: optional: true @@ -9505,7 +9162,7 @@ fsevents@^2.3.2: optional: true bin: ts-jest: cli.js - checksum: eb54e5b8fc5f06e4cc20ecec7891201ddc78a3537d5eb3775e29ffbc7e83fd2a68f91db801b6a8c820c872060b24dc41fb6decac800b76256d3cdda6520b5c4f + checksum: a8c9e284ed4f819526749f6e4dc6421ec666f20ab44d31b0f02b4ed979975f7580b18aea4813172d43e39b29464a71899f8893dd29b06b4a351a3af8ba47b402 languageName: node linkType: hard @@ -9607,15 +9264,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"type-check@npm:~0.3.2": - version: 0.3.2 - resolution: "type-check@npm:0.3.2" - dependencies: - prelude-ls: ~1.1.2 - checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 - languageName: node - linkType: hard - "type-detect@npm:4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" @@ -9658,15 +9306,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"typedarray-to-buffer@npm:^3.1.5": - version: 3.1.5 - resolution: "typedarray-to-buffer@npm:3.1.5" - dependencies: - is-typedarray: ^1.0.0 - checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60 - languageName: node - linkType: hard - "typedoc@npm:^0.23.0": version: 0.23.28 resolution: "typedoc@npm:0.23.28" @@ -9800,24 +9439,24 @@ typescript@^4.8.3: languageName: node linkType: hard -"universalify@npm:^0.1.0, universalify@npm:^0.1.2": +"universalify@npm:^0.1.0": version: 0.1.2 resolution: "universalify@npm:0.1.2" checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.9": - version: 1.0.9 - resolution: "update-browserslist-db@npm:1.0.9" +"update-browserslist-db@npm:^1.0.11": + version: 1.0.11 + resolution: "update-browserslist-db@npm:1.0.11" dependencies: escalade: ^3.1.1 picocolors: ^1.0.0 peerDependencies: browserslist: ">= 4.21.0" bin: - browserslist-lint: cli.js - checksum: f625899b236f6a4d7f62b56be1b8da230c5563d1fef84d3ef148f2e1a3f11a5a4b3be4fd7e3703e51274c116194017775b10afb4de09eb2c0d09d36b90f1f578 + update-browserslist-db: cli.js + checksum: b98327518f9a345c7cad5437afae4d2ae7d865f9779554baf2a200fdf4bac4969076b679b1115434bd6557376bdd37ca7583d0f9b8f8e302d7d4cc1e91b5f231 languageName: node linkType: hard @@ -9860,14 +9499,14 @@ typescript@^4.8.3: languageName: node linkType: hard -"v8-to-istanbul@npm:^8.1.0": - version: 8.1.1 - resolution: "v8-to-istanbul@npm:8.1.1" +"v8-to-istanbul@npm:^9.0.1": + version: 9.1.0 + resolution: "v8-to-istanbul@npm:9.1.0" dependencies: + "@jridgewell/trace-mapping": ^0.3.12 "@types/istanbul-lib-coverage": ^2.0.1 convert-source-map: ^1.6.0 - source-map: ^0.7.3 - checksum: 54ce92bec2727879626f623d02c8d193f0c7e919941fa373ec135189a8382265117f5316ea317a1e12a5f9c13d84d8449052a731fe3306fa4beaafbfa4cab229 + checksum: 2069d59ee46cf8d83b4adfd8a5c1a90834caffa9f675e4360f1157ffc8578ef0f763c8f32d128334424159bb6b01f3876acd39cd13297b2769405a9da241f8d1 languageName: node linkType: hard @@ -9895,25 +9534,7 @@ typescript@^4.8.3: languageName: node linkType: hard -"w3c-hr-time@npm:^1.0.2": - version: 1.0.2 - resolution: "w3c-hr-time@npm:1.0.2" - dependencies: - browser-process-hrtime: ^1.0.0 - checksum: ec3c2dacbf8050d917bbf89537a101a08c2e333b4c19155f7d3bedde43529d4339db6b3d049d9610789cb915f9515f8be037e0c54c079e9d4735c50b37ed52b9 - languageName: node - linkType: hard - -"w3c-xmlserializer@npm:^2.0.0": - version: 2.0.0 - resolution: "w3c-xmlserializer@npm:2.0.0" - dependencies: - xml-name-validator: ^3.0.0 - checksum: ae25c51cf71f1fb2516df1ab33a481f83461a117565b95e3d0927432522323f93b1b2846cbb60196d337970c421adb604fc2d0d180c6a47a839da01db5b9973b - languageName: node - linkType: hard - -"walker@npm:^1.0.7": +"walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8" dependencies: @@ -9946,20 +9567,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"webidl-conversions@npm:^5.0.0": - version: 5.0.0 - resolution: "webidl-conversions@npm:5.0.0" - checksum: ccf1ec2ca7c0b5671e5440ace4a66806ae09c49016ab821481bec0c05b1b82695082dc0a27d1fe9d804d475a408ba0c691e6803fd21be608e710955d4589cd69 - languageName: node - linkType: hard - -"webidl-conversions@npm:^6.1.0": - version: 6.1.0 - resolution: "webidl-conversions@npm:6.1.0" - checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb - languageName: node - linkType: hard - "webpack-cli@npm:^4.9.2": version: 4.9.2 resolution: "webpack-cli@npm:4.9.2" @@ -10047,22 +9654,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"whatwg-encoding@npm:^1.0.5": - version: 1.0.5 - resolution: "whatwg-encoding@npm:1.0.5" - dependencies: - iconv-lite: 0.4.24 - checksum: 5be4efe111dce29ddee3448d3915477fcc3b28f991d9cf1300b4e50d6d189010d47bca2f51140a844cf9b726e8f066f4aee72a04d687bfe4f2ee2767b2f5b1e6 - languageName: node - linkType: hard - -"whatwg-mimetype@npm:^2.3.0": - version: 2.3.0 - resolution: "whatwg-mimetype@npm:2.3.0" - checksum: 23eb885940bcbcca4ff841c40a78e9cbb893ec42743993a42bf7aed16085b048b44b06f3402018931687153550f9a32d259dfa524e4f03577ab898b6965e5383 - languageName: node - linkType: hard - "whatwg-url@npm:^5.0.0": version: 5.0.0 resolution: "whatwg-url@npm:5.0.0" @@ -10073,17 +9664,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"whatwg-url@npm:^8.0.0, whatwg-url@npm:^8.5.0": - version: 8.7.0 - resolution: "whatwg-url@npm:8.7.0" - dependencies: - lodash: ^4.7.0 - tr46: ^2.1.0 - webidl-conversions: ^6.1.0 - checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e - languageName: node - linkType: hard - "which-boxed-primitive@npm:^1.0.2": version: 1.0.2 resolution: "which-boxed-primitive@npm:1.0.2" @@ -10138,7 +9718,7 @@ typescript@^4.8.3: languageName: node linkType: hard -"word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": +"word-wrap@npm:^1.2.3": version: 1.2.3 resolution: "word-wrap@npm:1.2.3" checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f @@ -10181,30 +9761,13 @@ typescript@^4.8.3: languageName: node linkType: hard -"write-file-atomic@npm:^3.0.0": - version: 3.0.3 - resolution: "write-file-atomic@npm:3.0.3" +"write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" dependencies: imurmurhash: ^0.1.4 - is-typedarray: ^1.0.0 - signal-exit: ^3.0.2 - typedarray-to-buffer: ^3.1.5 - checksum: c55b24617cc61c3a4379f425fc62a386cc51916a9b9d993f39734d005a09d5a4bb748bc251f1304e7abd71d0a26d339996c275955f527a131b1dcded67878280 - languageName: node - linkType: hard - -"ws@npm:^7.4.6": - version: 7.5.7 - resolution: "ws@npm:7.5.7" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 5c1f669a166fb57560b4e07f201375137fa31d9186afde78b1508926345ce546332f109081574ddc4e38cc474c5406b5fc71c18d71eb75f6e2d2245576976cba + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c languageName: node linkType: hard @@ -10223,20 +9786,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"xml-name-validator@npm:^3.0.0": - version: 3.0.0 - resolution: "xml-name-validator@npm:3.0.0" - checksum: b3ac459afed783c285bb98e4960bd1f3ba12754fd4f2320efa0f9181ca28928c53cc75ca660d15d205e81f92304419afe94c531c7cfb3e0649aa6d140d53ecb0 - languageName: node - linkType: hard - -"xmlchars@npm:^2.2.0": - version: 2.2.0 - resolution: "xmlchars@npm:2.2.0" - checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 - languageName: node - linkType: hard - "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3" @@ -10251,6 +9800,13 @@ typescript@^4.8.3: languageName: node linkType: hard +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0" @@ -10265,13 +9821,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"yargs-parser@npm:20.x, yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 - languageName: node - linkType: hard - "yargs-parser@npm:^18.1.2": version: 18.1.3 resolution: "yargs-parser@npm:18.1.3" @@ -10282,7 +9831,14 @@ typescript@^4.8.3: languageName: node linkType: hard -"yargs-parser@npm:^21.1.1": +"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c @@ -10323,7 +9879,7 @@ typescript@^4.8.3: languageName: node linkType: hard -"yargs@npm:^17.7.2": +"yargs@npm:^17.3.1, yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: From 715d329d880330be8696ebeef0fc252e197ceb34 Mon Sep 17 00:00:00 2001 From: Github Action Date: Wed, 26 Jul 2023 08:09:11 +0000 Subject: [PATCH 070/130] [CI Skip] ci: publish prerelease --- package.json | 2 +- packages/asset-did/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/did/package.json | 2 +- packages/messaging/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 5430689d0..382204d5c 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.33.2-5", + "version": "0.33.2-6", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-did/package.json b/packages/asset-did/package.json index eb64d0ae5..0e18ba727 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-did", - "version": "0.33.2-5", + "version": "0.33.2-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index ae48b98fd..706100457 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.33.2-5", + "version": "0.33.2-6", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index a3521d0bf..27be9b16b 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.33.2-5", + "version": "0.33.2-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 9c4b6a968..0a41e4418 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.33.2-5", + "version": "0.33.2-6", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index b2c36c40f..aa0c0a8d1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.33.2-5", + "version": "0.33.2-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/did/package.json b/packages/did/package.json index b057624de..840bc9880 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.33.2-5", + "version": "0.33.2-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/messaging/package.json b/packages/messaging/package.json index b0c6837bb..b041b5c95 100644 --- a/packages/messaging/package.json +++ b/packages/messaging/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/messaging", - "version": "0.33.2-5", + "version": "0.33.2-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index a43923af5..e7ee8f930 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.33.2-5", + "version": "0.33.2-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 4c0fdd5b3..e995d3f8c 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.33.2-5", + "version": "0.33.2-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index 5d45de4a3..e7f8db0b7 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.33.2-5", + "version": "0.33.2-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 023e2d0fc..988c3bf87 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.33.2-5", + "version": "0.33.2-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index e3b4d3935..94ae61d73 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.33.2-5", + "version": "0.33.2-6", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", From e9c78712070303469d02f9d8438d200ec0b931a1 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Thu, 3 Aug 2023 09:44:21 -0400 Subject: [PATCH 071/130] ci: make latest-develop tests optional and latest mandatory --- .github/workflows/tests.yml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 933dbecff..20904ac9d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -118,8 +118,11 @@ jobs: strategy: matrix: - image: ['latest-master', 'latest-develop', 'latest'] - required: ['optional'] + image: ['latest'] + required: ['required'] + include: + - image: 'latest-develop' + required: 'optional' continue-on-error: ${{ matrix.required == 'optional' }} @@ -198,11 +201,11 @@ jobs: needs: [cache_imgs, bundle_cache] strategy: matrix: - image: ['latest-master', 'latest'] - required: ['optional'] + image: ['latest'] + required: ['required'] include: - image: 'latest-develop' - required: 'required' + required: 'optional' continue-on-error: ${{ matrix.required == 'optional' }} steps: From 3eb9a69251609db63e43b5e0ffdc264091fb50f1 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Thu, 3 Aug 2023 10:13:51 -0400 Subject: [PATCH 072/130] ci: only make dev package release on manual dispatch --- .github/workflows/devpackpublish.yml | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/.github/workflows/devpackpublish.yml b/.github/workflows/devpackpublish.yml index 775829df7..0ae25a497 100644 --- a/.github/workflows/devpackpublish.yml +++ b/.github/workflows/devpackpublish.yml @@ -1,16 +1,6 @@ name: Publish dev package to npm -on: - push: - branches: - - develop - paths: - - '**/*.ts' - - 'package.json' - - '**/package.json' - - '!**/*.spec.ts' - - '!**/__integrationtests__' - - '!**/__mocks__' - - '!docs/**' +on: workflow_dispatch + jobs: build: runs-on: ubuntu-latest From c77b345ba4b0562fe61603d84ba7817a1bdad04f Mon Sep 17 00:00:00 2001 From: Albrecht Date: Wed, 9 Aug 2023 22:01:32 +0200 Subject: [PATCH 073/130] refactor!: remove messages (#781) * refactor!: remove messages * refactor!: remove quotes * test: fix/remove affected tests --------- Co-authored-by: Adel Golghalyani --- packages/core/src/index.ts | 1 - packages/core/src/quote/Quote.spec.ts | 266 ---- packages/core/src/quote/Quote.ts | 198 --- packages/core/src/quote/QuoteSchema.ts | 56 - packages/core/src/quote/index.ts | 9 - packages/messaging/README.md | 24 - packages/messaging/package.json | 43 - packages/messaging/src/Message.spec.ts | 1336 ----------------- packages/messaging/src/Message.ts | 452 ------ packages/messaging/src/index.ts | 19 - packages/messaging/tsconfig.build.json | 17 - packages/messaging/tsconfig.esm.json | 7 - packages/sdk-js/package.json | 1 - packages/sdk-js/src/index.ts | 1 - packages/types/src/Message.ts | 269 ---- packages/types/src/Quote.ts | 33 - packages/types/src/Terms.ts | 20 - packages/types/src/index.ts | 3 - tests/breakingChanges/BreakingChanges.spec.ts | 176 +-- tests/bundle/bundle-test.ts | 63 - tests/bundle/bundle.spec.ts | 2 + tsconfig.json | 3 +- yarn.lock | 15 - 23 files changed, 4 insertions(+), 3010 deletions(-) delete mode 100644 packages/core/src/quote/Quote.spec.ts delete mode 100644 packages/core/src/quote/Quote.ts delete mode 100644 packages/core/src/quote/QuoteSchema.ts delete mode 100644 packages/core/src/quote/index.ts delete mode 100644 packages/messaging/README.md delete mode 100644 packages/messaging/package.json delete mode 100644 packages/messaging/src/Message.spec.ts delete mode 100644 packages/messaging/src/Message.ts delete mode 100644 packages/messaging/src/index.ts delete mode 100644 packages/messaging/tsconfig.build.json delete mode 100644 packages/messaging/tsconfig.esm.json delete mode 100644 packages/types/src/Message.ts delete mode 100644 packages/types/src/Quote.ts delete mode 100644 packages/types/src/Terms.ts diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 755b92e6d..306f9914b 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -16,7 +16,6 @@ export * as Claim from './claim/index.js' export * as CType from './ctype/index.js' export { DelegationNode, DelegationNodeUtils } from './delegation/index.js' export * as PublicCredential from './publicCredential/index.js' -export * as Quote from './quote/index.js' export { connect, disconnect, init } from './kilt/index.js' export { SDKErrors } from '@kiltprotocol/utils' diff --git a/packages/core/src/quote/Quote.spec.ts b/packages/core/src/quote/Quote.spec.ts deleted file mode 100644 index 8c5701a71..000000000 --- a/packages/core/src/quote/Quote.spec.ts +++ /dev/null @@ -1,266 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import * as Did from '@kiltprotocol/did' -import type { - DidDocument, - DidResourceUri, - ICType, - IClaim, - ICostBreakdown, - ICredential, - IQuote, - IQuoteAgreement, - IQuoteAttesterSigned, - ResolvedDidKey, -} from '@kiltprotocol/types' -import { Crypto, SDKErrors } from '@kiltprotocol/utils' - -import { - createLocalDemoFullDidFromKeypair, - makeSigningKeyTool, -} from '../../../../tests/testUtils' -import * as Credential from '../credential' -import * as CType from '../ctype' -import * as Quote from './Quote' -import { QuoteSchema } from './QuoteSchema' - -describe('Quote', () => { - let claimerIdentity: DidDocument - const claimer = makeSigningKeyTool('ed25519') - - let attesterIdentity: DidDocument - const attester = makeSigningKeyTool('ed25519') - - let invalidCost: ICostBreakdown - let date: string - let testCType: ICType - let claim: IClaim - let credential: ICredential - let invalidCostQuoteData: IQuote - let invalidPropertiesQuoteData: IQuote - let validQuoteData: IQuote - let validAttesterSignedQuote: IQuoteAttesterSigned - let quoteBothAgreed: IQuoteAgreement - let invalidPropertiesQuote: IQuote - let invalidCostQuote: IQuote - - async function mockResolveKey( - keyUri: DidResourceUri - ): Promise { - const { did } = Did.parse(keyUri) - const document = [claimerIdentity, attesterIdentity].find( - ({ uri }) => uri === did - ) - if (!document) throw new Error('Cannot resolve mocked DID') - return Did.keyToResolvedKey(document.authentication[0], did) - } - - beforeAll(async () => { - claimerIdentity = await createLocalDemoFullDidFromKeypair(claimer.keypair) - - attesterIdentity = await createLocalDemoFullDidFromKeypair(attester.keypair) - - invalidCost = { - gross: 233, - tax: { vat: 3.3 }, - } as unknown as ICostBreakdown - date = new Date(2019, 11, 10).toISOString() - - testCType = CType.fromProperties('Quote Information', { - name: { type: 'string' }, - }) - - claim = { - cTypeHash: CType.idToHash(testCType.$id), - contents: {}, - owner: claimerIdentity.uri, - } - - // build credential with legitimations - credential = Credential.fromClaim(claim) - - // @ts-ignore - invalidCostQuoteData = { - cTypeHash: '0x12345678', - cost: invalidCost, - currency: 'Euro', - timeframe: date, - termsAndConditions: 'Lots of these', - } as IQuote - - invalidPropertiesQuoteData = { - cTypeHash: '0x12345678', - cost: { - gross: 233, - net: 23.3, - tax: { vat: 3.3 }, - }, - timeframe: date, - currency: 'Euro', - termsAndConditions: 'Lots of these', - } as unknown as IQuote - - validQuoteData = { - attesterDid: attesterIdentity.uri, - cTypeHash: '0x12345678', - cost: { - gross: 233, - net: 23.3, - tax: { vat: 3.3 }, - }, - currency: 'Euro', - timeframe: new Date('12-04-2020').toISOString(), - termsAndConditions: 'Lots of these', - } - validAttesterSignedQuote = await Quote.createAttesterSignedQuote( - validQuoteData, - attester.getSignCallback(attesterIdentity) - ) - quoteBothAgreed = await Quote.createQuoteAgreement( - validAttesterSignedQuote, - credential.rootHash, - claimer.getSignCallback(claimerIdentity), - claimerIdentity.uri, - { - didResolveKey: mockResolveKey, - } - ) - invalidPropertiesQuote = invalidPropertiesQuoteData - invalidCostQuote = invalidCostQuoteData - }) - - it('tests created quote data against given data', async () => { - expect(validQuoteData.attesterDid).toEqual(attesterIdentity.uri) - const sign = claimer.getSignCallback(claimerIdentity) - const signature = Did.signatureToJson( - await sign({ - data: Crypto.hash( - Crypto.encodeObjectAsStr({ - ...validAttesterSignedQuote, - claimerDid: claimerIdentity.uri, - rootHash: credential.rootHash, - }) - ), - did: claimerIdentity.uri, - keyRelationship: 'authentication', - }) - ) - expect(signature).toEqual(quoteBothAgreed.claimerSignature) - - const { fragment: attesterKeyId } = Did.parse( - validAttesterSignedQuote.attesterSignature.keyUri - ) - - expect(() => - Crypto.verify( - Crypto.hashStr( - Crypto.encodeObjectAsStr({ - attesterDid: validQuoteData.attesterDid, - cTypeHash: validQuoteData.cTypeHash, - cost: validQuoteData.cost, - currency: validQuoteData.currency, - timeframe: validQuoteData.timeframe, - termsAndConditions: validQuoteData.termsAndConditions, - }) - ), - validAttesterSignedQuote.attesterSignature.signature, - Did.getKey(attesterIdentity, attesterKeyId!)?.publicKey || - new Uint8Array() - ) - ).not.toThrow() - await expect( - Quote.verifyAttesterSignedQuote(validAttesterSignedQuote, { - didResolveKey: mockResolveKey, - }) - ).resolves.not.toThrow() - await expect( - Quote.verifyQuoteAgreement(quoteBothAgreed, { - didResolveKey: mockResolveKey, - }) - ).resolves.not.toThrow() - expect( - await Quote.createAttesterSignedQuote( - validQuoteData, - attester.getSignCallback(attesterIdentity) - ) - ).toEqual(validAttesterSignedQuote) - }) - it('validates created quotes against QuoteSchema', () => { - expect(Quote.validateQuoteSchema(QuoteSchema, validQuoteData)).toBe(true) - expect(Quote.validateQuoteSchema(QuoteSchema, invalidCostQuote)).toBe(false) - expect(Quote.validateQuoteSchema(QuoteSchema, invalidPropertiesQuote)).toBe( - false - ) - }) - - it('detects tampering', async () => { - const messedWithCurrency: IQuoteAttesterSigned = { - ...validAttesterSignedQuote, - currency: 'Bananas', - } - await expect( - Quote.verifyAttesterSignedQuote(messedWithCurrency, { - didResolveKey: mockResolveKey, - }) - ).rejects.toThrow(SDKErrors.SignatureUnverifiableError) - const messedWithRootHash: IQuoteAgreement = { - ...quoteBothAgreed, - rootHash: '0x1234', - } - await expect( - Quote.verifyQuoteAgreement(messedWithRootHash, { - didResolveKey: mockResolveKey, - }) - ).rejects.toThrow(SDKErrors.SignatureUnverifiableError) - }) - - it('complains if attesterDid does not match attester signature', async () => { - const sign = claimer.getSignCallback(claimerIdentity) - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { attesterSignature, ...attesterSignedQuote } = - validAttesterSignedQuote - const wrongSignerAttester: IQuoteAttesterSigned = { - ...attesterSignedQuote, - attesterSignature: Did.signatureToJson( - await sign({ - data: Crypto.hash(Crypto.encodeObjectAsStr(attesterSignedQuote)), - did: claimerIdentity.uri, - keyRelationship: 'authentication', - }) - ), - } - - await expect( - Quote.verifyAttesterSignedQuote(wrongSignerAttester, { - didResolveKey: mockResolveKey, - }) - ).rejects.toThrow(SDKErrors.DidSubjectMismatchError) - }) - - it('complains if claimerDid does not match claimer signature', async () => { - const sign = attester.getSignCallback(attesterIdentity) - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { claimerSignature, ...restQuote } = quoteBothAgreed - const wrongSignerClaimer: IQuoteAgreement = { - ...restQuote, - claimerSignature: Did.signatureToJson( - await sign({ - data: Crypto.hash(Crypto.encodeObjectAsStr(restQuote)), - did: attesterIdentity.uri, - keyRelationship: 'authentication', - }) - ), - } - - await expect( - Quote.verifyQuoteAgreement(wrongSignerClaimer, { - didResolveKey: mockResolveKey, - }) - ).rejects.toThrow(SDKErrors.DidSubjectMismatchError) - }) -}) diff --git a/packages/core/src/quote/Quote.ts b/packages/core/src/quote/Quote.ts deleted file mode 100644 index 3fdbd7752..000000000 --- a/packages/core/src/quote/Quote.ts +++ /dev/null @@ -1,198 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -/** - * [[Quote]] constructs a framework for Attesters to make an offer for building a [[Claim]] on a [[CType]] in which it includes a price and other terms & conditions upon which a claimer can agree. - * - * A [[Quote]] object represents a legal **offer** for the closure of a contract attesting a [[Claim]] from the [[CType]] specified within the offer. - * - * A [[Quote]] comes with a versionable spec, allowing different [[Quote]] specs to exist over time and tracks under which [[Quote]] a contract was closed. - * - * @packageDocumentation - */ - -import type { - IQuote, - IQuoteAgreement, - IQuoteAttesterSigned, - ICredential, - SignCallback, - DidResolveKey, - DidUri, -} from '@kiltprotocol/types' -import { Crypto, JsonSchema, SDKErrors } from '@kiltprotocol/utils' -import { - resolveKey, - verifyDidSignature, - signatureToJson, - signatureFromJson, -} from '@kiltprotocol/did' -import { QuoteSchema } from './QuoteSchema.js' - -/** - * Validates the quote against the meta schema and quote data against the provided schema. - * - * @param schema A [[Quote]] schema object. - * @param validate [[Quote]] data to be validated against the provided schema. - * @param messages The errors messages are listed in an array. - * - * @returns Whether the quote schema is valid. - */ -export function validateQuoteSchema( - schema: JsonSchema.Schema, - validate: unknown, - messages?: string[] -): boolean { - const validator = new JsonSchema.Validator(schema) - if (schema.$id !== QuoteSchema.$id) { - validator.addSchema(QuoteSchema) - } - const result = validator.validate(validate) - if (!result.valid && messages) { - result.errors.forEach((error) => { - messages.push(error.error) - }) - } - return result.valid -} - -// TODO: should have a "create quote" function. - -/** - * Signs a [[Quote]] object as an Attester. - * - * @param quoteInput A [[Quote]] object. - * @param sign The callback to sign with the private key. - * @returns A signed [[Quote]] object. - */ -export async function createAttesterSignedQuote( - quoteInput: IQuote, - sign: SignCallback -): Promise { - if (!validateQuoteSchema(QuoteSchema, quoteInput)) { - throw new SDKErrors.QuoteUnverifiableError() - } - - const signature = await sign({ - data: Crypto.hash(Crypto.encodeObjectAsStr(quoteInput)), - did: quoteInput.attesterDid, - keyRelationship: 'authentication', - }) - return { - ...quoteInput, - attesterSignature: signatureToJson(signature), - } -} - -/** - * Verifies a [[IQuoteAttesterSigned]] object. - * - * @param quote The object which to be verified. - * @param options Optional settings. - * @param options.didResolveKey Resolve function used in the process of verifying the attester signature. - */ -export async function verifyAttesterSignedQuote( - quote: IQuoteAttesterSigned, - { - didResolveKey = resolveKey, - }: { - didResolveKey?: DidResolveKey - } = {} -): Promise { - const { attesterSignature, ...basicQuote } = quote - await verifyDidSignature({ - ...signatureFromJson(attesterSignature), - message: Crypto.hashStr(Crypto.encodeObjectAsStr(basicQuote)), - expectedSigner: basicQuote.attesterDid, - expectedVerificationMethod: 'authentication', - didResolveKey, - }) - - const messages: string[] = [] - if (!validateQuoteSchema(QuoteSchema, basicQuote, messages)) { - throw new SDKErrors.QuoteUnverifiableError() - } -} - -/** - * Creates a [[Quote]] signed by the Attester and the Claimer. - * - * @param attesterSignedQuote A [[Quote]] object signed by an Attester. - * @param credentialRootHash A root hash of the entire object. - * @param sign The callback to sign with the private key. - * @param claimerDid The DID of the Claimer, who has to sign. - * @param options Optional settings. - * @param options.didResolveKey Resolve function used in the process of verifying the attester signature. - * @returns A [[Quote]] agreement signed by both the Attester and Claimer. - */ -export async function createQuoteAgreement( - attesterSignedQuote: IQuoteAttesterSigned, - credentialRootHash: ICredential['rootHash'], - sign: SignCallback, - claimerDid: DidUri, - { - didResolveKey = resolveKey, - }: { - didResolveKey?: DidResolveKey - } = {} -): Promise { - const { attesterSignature, ...basicQuote } = attesterSignedQuote - - await verifyDidSignature({ - ...signatureFromJson(attesterSignature), - message: Crypto.hashStr(Crypto.encodeObjectAsStr(basicQuote)), - expectedVerificationMethod: 'authentication', - didResolveKey, - }) - - const quoteAgreement = { - ...attesterSignedQuote, - rootHash: credentialRootHash, - claimerDid, - } - const signature = await sign({ - data: Crypto.hash(Crypto.encodeObjectAsStr(quoteAgreement)), - did: claimerDid, - keyRelationship: 'authentication', - }) - - return { - ...quoteAgreement, - claimerSignature: signatureToJson(signature), - } -} - -/** - * Verifies a [[IQuoteAgreement]] object. - * - * @param quote The object to be verified. - * @param options Optional settings. - * @param options.didResolveKey Resolve function used in the process of verifying the attester signature. - */ -export async function verifyQuoteAgreement( - quote: IQuoteAgreement, - { - didResolveKey = resolveKey, - }: { - didResolveKey?: DidResolveKey - } = {} -): Promise { - const { claimerSignature, claimerDid, rootHash, ...attesterSignedQuote } = - quote - // verify attester signature - await verifyAttesterSignedQuote(attesterSignedQuote, { didResolveKey }) - // verify claimer signature - await verifyDidSignature({ - ...signatureFromJson(claimerSignature), - message: Crypto.hashStr( - Crypto.encodeObjectAsStr({ ...attesterSignedQuote, claimerDid, rootHash }) - ), - expectedSigner: claimerDid, - expectedVerificationMethod: 'authentication', - didResolveKey, - }) -} diff --git a/packages/core/src/quote/QuoteSchema.ts b/packages/core/src/quote/QuoteSchema.ts deleted file mode 100644 index d7d0d9394..000000000 --- a/packages/core/src/quote/QuoteSchema.ts +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import { JsonSchema } from '@kiltprotocol/utils' - -export const QuoteSchema: JsonSchema.Schema = { - $schema: 'http://json-schema.org/draft-07/schema#', - $id: 'kilt:quote:v1', - type: 'object', - title: 'Quote', - properties: { - attesterDid: { - type: 'string', - }, - cTypeHash: { - type: 'string', - }, - cost: { - type: 'object', - required: ['net', 'gross', 'tax'], - properties: { - net: { - type: 'number', - }, - gross: { - type: 'number', - }, - tax: { - type: 'object', - }, - }, - }, - currency: { - type: 'string', - }, - termsAndConditions: { - type: 'string', - }, - timeframe: { - type: 'string', - format: 'date-time', - }, - }, - required: [ - 'attesterDid', - 'cTypeHash', - 'cost', - 'currency', - 'termsAndConditions', - 'timeframe', - ], -} diff --git a/packages/core/src/quote/index.ts b/packages/core/src/quote/index.ts deleted file mode 100644 index 5f5d3cb2a..000000000 --- a/packages/core/src/quote/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -export * from './Quote.js' -export { QuoteSchema } from './QuoteSchema.js' diff --git a/packages/messaging/README.md b/packages/messaging/README.md deleted file mode 100644 index b87450174..000000000 --- a/packages/messaging/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![](https://user-images.githubusercontent.com/39338561/122415864-8d6a7c00-cf88-11eb-846f-a98a936f88da.png) -](https://kilt.io) - -![Lint and Test](https://github.com/KILTprotocol/sdk-js/workflows/Lint%20and%20Test/badge.svg) - -# KILT Messaging - -This package provides tools to create messages, encrypt, decrypt and verify them. - -For more information, please visit our [official SDK documentation](https://docs.kilt.io/docs/sdk/introduction). - -## Installation - -NPM: - -``` -npm install @kiltprotocol/messaging -``` - -YARN: - -``` -yarn add @kiltprotocol/messaging -``` diff --git a/packages/messaging/package.json b/packages/messaging/package.json deleted file mode 100644 index b041b5c95..000000000 --- a/packages/messaging/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "@kiltprotocol/messaging", - "version": "0.33.2-6", - "description": "", - "main": "./lib/cjs/index.js", - "module": "./lib/esm/index.js", - "types": "./lib/cjs/index.d.ts", - "exports": { - ".": { - "import": "./lib/esm/index.js", - "require": "./lib/cjs/index.js" - } - }, - "files": [ - "lib/**/*" - ], - "scripts": { - "clean": "rimraf ./lib", - "build": "yarn clean && yarn build:ts", - "build:ts": "yarn build:cjs && yarn build:esm", - "build:cjs": "tsc --declaration -p tsconfig.build.json && echo '{\"type\":\"commonjs\"}' > ./lib/cjs/package.json", - "build:esm": "tsc --declaration -p tsconfig.esm.json && echo '{\"type\":\"module\"}' > ./lib/esm/package.json" - }, - "repository": "github:kiltprotocol/sdk-js", - "engines": { - "node": ">=16.0" - }, - "author": "", - "license": "BSD-4-Clause", - "bugs": "https://github.com/KILTprotocol/sdk-js/issues", - "homepage": "https://github.com/KILTprotocol/sdk-js#readme", - "devDependencies": { - "rimraf": "^3.0.2", - "typescript": "^4.8.3" - }, - "dependencies": { - "@kiltprotocol/core": "workspace:*", - "@kiltprotocol/did": "workspace:*", - "@kiltprotocol/types": "workspace:*", - "@kiltprotocol/utils": "workspace:*", - "@polkadot/util": "^12.0.0" - } -} diff --git a/packages/messaging/src/Message.spec.ts b/packages/messaging/src/Message.spec.ts deleted file mode 100644 index ea26bbaa1..000000000 --- a/packages/messaging/src/Message.spec.ts +++ /dev/null @@ -1,1336 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import { u8aToHex } from '@polkadot/util' - -import { - Attestation, - CType, - Claim, - Credential, - Quote, -} from '@kiltprotocol/core' -import * as Did from '@kiltprotocol/did' -import type { - DidDocument, - DidResourceUri, - DidUri, - IAcceptCredential, - IAttestation, - ICType, - IClaim, - ICredential, - ICredentialPresentation, - IDelegationData, - IEncryptedMessage, - IInformCreateDelegation, - IInformDelegationCreation, - IMessage, - IQuote, - IQuoteAgreement, - IQuoteAttesterSigned, - IRejectAcceptDelegation, - IRejectAttestation, - IRejectCredential, - IRejectTerms, - IRequestAcceptDelegation, - IRequestAttestation, - IRequestAttestationContent, - IRequestCredential, - IRequestCredentialContent, - IRequestDelegationApproval, - IRequestTerms, - ISubmitAcceptDelegation, - ISubmitAttestation, - ISubmitAttestationContent, - ISubmitCredential, - ISubmitDelegationApproval, - ISubmitTerms, - ITerms, - MessageBody, - PartialClaim, - ResolvedDidKey, -} from '@kiltprotocol/types' -import { Crypto, SDKErrors } from '@kiltprotocol/utils' - -import { - KeyTool, - KeyToolSignCallback, - createLocalDemoFullDidFromKeypair, - createLocalDemoFullDidFromLightDid, - makeEncryptionKeyTool, - makeSigningKeyTool, -} from '../../../tests/testUtils' -import * as Message from './Message' - -describe('Messaging', () => { - let aliceLightDid: DidDocument - let aliceLightDidWithDetails: DidDocument - let aliceFullDid: DidDocument - let aliceSign: KeyToolSignCallback - const aliceEncKey = makeEncryptionKeyTool('Alice//enc') - - let bobLightDid: DidDocument - let bobLightDidWithDetails: DidDocument - let bobFullDid: DidDocument - let bobSign: KeyToolSignCallback - const bobEncKey = makeEncryptionKeyTool('Bob//enc') - - async function resolveKey( - keyUri: DidResourceUri, - keyRelationship = 'authentication' - ): Promise { - const { did } = Did.parse(keyUri) - const document = [ - aliceLightDidWithDetails, - aliceLightDid, - aliceFullDid, - bobLightDidWithDetails, - bobLightDid, - bobFullDid, - ].find(({ uri }) => uri === did) - if (!document) throw new Error('Cannot resolve mocked DID') - return Did.keyToResolvedKey(document[keyRelationship][0], did) - } - - beforeAll(async () => { - const aliceAuthKey = makeSigningKeyTool('ed25519') - aliceSign = aliceAuthKey.getSignCallback - aliceLightDid = Did.createLightDidDocument({ - authentication: aliceAuthKey.authentication, - keyAgreement: aliceEncKey.keyAgreement, - }) - aliceLightDidWithDetails = Did.createLightDidDocument({ - authentication: aliceAuthKey.authentication, - keyAgreement: aliceEncKey.keyAgreement, - service: [ - { id: '#id-1', type: ['type-1'], serviceEndpoint: ['x:url-1'] }, - ], - }) - aliceFullDid = await createLocalDemoFullDidFromLightDid(aliceLightDid) - - const bobAuthKey = makeSigningKeyTool('ed25519') - bobSign = bobAuthKey.getSignCallback - bobLightDid = Did.createLightDidDocument({ - authentication: bobAuthKey.authentication, - keyAgreement: bobEncKey.keyAgreement, - }) - bobLightDidWithDetails = Did.createLightDidDocument({ - authentication: bobAuthKey.authentication, - keyAgreement: bobEncKey.keyAgreement, - service: [ - { id: '#id-1', type: ['type-1'], serviceEndpoint: ['x:url-1'] }, - ], - }) - bobFullDid = await createLocalDemoFullDidFromLightDid(bobLightDid) - }) - it('verify message encryption and signing', async () => { - const message = Message.fromBody( - { - type: 'request-credential', - content: { - cTypes: [{ cTypeHash: `${Crypto.hashStr('0x12345678')}` }], - }, - }, - aliceLightDid.uri, - bobLightDid.uri - ) - const encryptedMessage = await Message.encrypt( - message, - aliceEncKey.encrypt(aliceLightDid), - `${bobLightDid.uri}#encryption`, - { resolveKey } - ) - - const decryptedMessage = await Message.decrypt( - encryptedMessage, - bobEncKey.decrypt, - { resolveKey } - ) - expect(JSON.stringify(message.body)).toEqual( - JSON.stringify(decryptedMessage.body) - ) - - expect(() => Message.verify(decryptedMessage)).not.toThrow() - - const encryptedMessageWrongContent = JSON.parse( - JSON.stringify(encryptedMessage) - ) as IEncryptedMessage - const messedUpContent = Crypto.coToUInt8( - encryptedMessageWrongContent.ciphertext - ) - messedUpContent.set(Crypto.hash('1234'), 10) - encryptedMessageWrongContent.ciphertext = u8aToHex(messedUpContent) - - await expect(() => - Message.decrypt(encryptedMessageWrongContent, bobEncKey.decrypt, { - resolveKey, - }) - ).rejects.toThrowError(SDKErrors.DecodingMessageError) - - const encryptedWrongBody = await aliceEncKey.encrypt(aliceLightDid)({ - data: Crypto.coToUInt8('{ wrong JSON'), - peerPublicKey: bobLightDid.keyAgreement![0].publicKey, - did: aliceLightDid.uri, - }) - const encryptedMessageWrongBody: IEncryptedMessage = { - ciphertext: u8aToHex(encryptedWrongBody.data), - nonce: u8aToHex(encryptedWrongBody.nonce), - senderKeyUri: `${aliceLightDid.uri}${aliceLightDid.keyAgreement![0].id}`, - receiverKeyUri: `${bobLightDid.uri}${bobLightDid.keyAgreement![0].id}`, - } - await expect(() => - Message.decrypt(encryptedMessageWrongBody, bobEncKey.decrypt, { - resolveKey, - }) - ).rejects.toThrowError(SyntaxError) - }) - - it('verifies the message with sender is the owner (as full DID)', async () => { - const credential = Credential.fromClaim({ - cTypeHash: `${Crypto.hashStr('0x12345678')}`, - owner: aliceFullDid.uri, - contents: {}, - }) - - const presentation = await Credential.createPresentation({ - credential, - signCallback: aliceSign(aliceFullDid), - }) - - const date = new Date(2019, 11, 10).toISOString() - - const quoteData: IQuote = { - attesterDid: bobFullDid.uri, - cTypeHash: `${Crypto.hashStr('0x12345678')}`, - cost: { - tax: { vat: 3.3 }, - net: 23.4, - gross: 23.5, - }, - currency: 'Euro', - termsAndConditions: 'https://coolcompany.io/terms.pdf', - timeframe: date, - } - const quoteAttesterSigned = await Quote.createAttesterSignedQuote( - quoteData, - bobSign(bobFullDid) - ) - const bothSigned = await Quote.createQuoteAgreement( - quoteAttesterSigned, - credential.rootHash, - aliceSign(aliceFullDid), - aliceFullDid.uri, - { didResolveKey: resolveKey } - ) - const requestAttestationBody: IRequestAttestation = { - content: { - credential, - quote: bothSigned, - }, - type: 'request-attestation', - } - - // Should not throw if the owner and sender DID is the same. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - requestAttestationBody, - aliceFullDid.uri, - bobFullDid.uri - ) - ) - ).not.toThrow() - - // Should not throw if the sender is the light DID version of the owner. - // This is technically not to be allowed but message verification is not concerned with that. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - requestAttestationBody, - aliceLightDid.uri, - bobFullDid.uri - ) - ) - ).not.toThrow() - - // Should throw if the sender and the owner are two different entities. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - requestAttestationBody, - bobFullDid.uri, - aliceFullDid.uri - ) - ) - ).toThrowError(SDKErrors.IdentityMismatchError) - - const attestation = { - delegationId: null, - claimHash: requestAttestationBody.content.credential.rootHash, - cTypeHash: Crypto.hashStr('0x12345678'), - owner: bobFullDid.uri, - revoked: false, - } - - const submitAttestationBody: ISubmitAttestation = { - content: { - attestation, - }, - type: 'submit-attestation', - } - - // Should not throw if the owner and sender DID is the same. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitAttestationBody, - bobFullDid.uri, - aliceFullDid.uri - ) - ) - ).not.toThrow() - - // Should not throw if the sender is the light DID version of the owner. - // This is technically not to be allowed but message verification is not concerned with that. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitAttestationBody, - bobLightDid.uri, - aliceFullDid.uri - ) - ) - ).not.toThrow() - - // Should throw if the sender and the owner are two different entities. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitAttestationBody, - aliceFullDid.uri, - bobFullDid.uri - ) - ) - ).toThrowError(SDKErrors.IdentityMismatchError) - - const submitClaimsForCTypeBody: ISubmitCredential = { - content: [presentation], - type: 'submit-credential', - } - - // Should not throw if the owner and sender DID is the same. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitClaimsForCTypeBody, - aliceFullDid.uri, - bobFullDid.uri - ) - ) - ).not.toThrow() - - // Should not throw if the sender is the light DID version of the owner. - // This is technically not to be allowed but message verification is not concerned with that. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitClaimsForCTypeBody, - aliceLightDid.uri, - bobFullDid.uri - ) - ) - ).not.toThrow() - - // Should throw if the sender and the owner are two different entities. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitClaimsForCTypeBody, - bobFullDid.uri, - aliceFullDid.uri - ) - ) - ).toThrowError(SDKErrors.IdentityMismatchError) - }) - - it('verifies the message with sender is the owner (as light DID)', async () => { - // Create request for attestation to the light DID with no encoded details - const credential = Credential.fromClaim({ - cTypeHash: `${Crypto.hashStr('0x12345678')}`, - owner: aliceLightDid.uri, - contents: {}, - }) - - const presentation = await Credential.createPresentation({ - credential, - signCallback: aliceSign(aliceLightDid), - }) - - const date = new Date(2019, 11, 10).toISOString() - const quoteData: IQuote = { - attesterDid: bobLightDid.uri, - cTypeHash: `${Crypto.hashStr('0x12345678')}`, - cost: { - tax: { vat: 3.3 }, - net: 23.4, - gross: 23.5, - }, - currency: 'Euro', - termsAndConditions: 'https://coolcompany.io/terms.pdf', - timeframe: date, - } - const quoteAttesterSigned = await Quote.createAttesterSignedQuote( - quoteData, - bobSign(bobLightDid) - ) - const bothSigned = await Quote.createQuoteAgreement( - quoteAttesterSigned, - credential.rootHash, - aliceSign(aliceLightDid), - aliceLightDid.uri, - { didResolveKey: resolveKey } - ) - const requestAttestationBody: IRequestAttestation = { - content: { - credential, - quote: bothSigned, - }, - type: 'request-attestation', - } - - // Create request for attestation to the light DID with encoded details - const contentWithEncodedDetails = await Credential.createPresentation({ - credential: Credential.fromClaim({ - cTypeHash: `${Crypto.hashStr('0x12345678')}`, - owner: aliceLightDidWithDetails.uri, - contents: {}, - }), - signCallback: aliceSign(aliceLightDidWithDetails), - }) - - const quoteDataEncodedDetails: IQuote = { - attesterDid: bobLightDidWithDetails.uri, - cTypeHash: `${Crypto.hashStr('0x12345678')}`, - cost: { - tax: { vat: 3.3 }, - net: 23.4, - gross: 23.5, - }, - currency: 'Euro', - termsAndConditions: 'https://coolcompany.io/terms.pdf', - timeframe: date, - } - const quoteAttesterSignedEncodedDetails = - await Quote.createAttesterSignedQuote( - quoteDataEncodedDetails, - bobSign(bobLightDidWithDetails) - ) - const bothSignedEncodedDetails = await Quote.createQuoteAgreement( - quoteAttesterSignedEncodedDetails, - credential.rootHash, - aliceSign(aliceLightDidWithDetails), - aliceLightDidWithDetails.uri, - { didResolveKey: resolveKey } - ) - const requestAttestationBodyWithEncodedDetails: IRequestAttestation = { - content: { - credential: contentWithEncodedDetails, - quote: bothSignedEncodedDetails, - }, - type: 'request-attestation', - } - - // Should not throw if the owner and sender DID is the same. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - requestAttestationBody, - aliceLightDid.uri, - bobLightDid.uri - ) - ) - ).not.toThrow() - - // Should not throw if the owner has no additional details and the sender does. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - requestAttestationBodyWithEncodedDetails, - aliceLightDidWithDetails.uri, - bobLightDid.uri - ) - ) - ).not.toThrow() - - // Should not throw if the owner has additional details and the sender does not. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - requestAttestationBodyWithEncodedDetails, - aliceLightDid.uri, - bobLightDid.uri - ) - ) - ).not.toThrow() - - // Should not throw if the sender is the full DID version of the owner. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - requestAttestationBody, - aliceFullDid.uri, - bobLightDid.uri - ) - ) - ).not.toThrow() - - // Should throw if the sender and the owner are two different entities. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - requestAttestationBody, - bobLightDid.uri, - aliceLightDid.uri - ) - ) - ).toThrowError(SDKErrors.IdentityMismatchError) - - const attestation = { - delegationId: null, - claimHash: requestAttestationBody.content.credential.rootHash, - cTypeHash: Crypto.hashStr('0x12345678'), - owner: bobLightDid.uri, - revoked: false, - } - - const submitAttestationBody: ISubmitAttestation = { - content: { - attestation, - }, - type: 'submit-attestation', - } - - const attestationWithEncodedDetails = { - delegationId: null, - claimHash: requestAttestationBody.content.credential.rootHash, - cTypeHash: Crypto.hashStr('0x12345678'), - owner: bobLightDidWithDetails.uri, - revoked: false, - } - - const submitAttestationBodyWithEncodedDetails: ISubmitAttestation = { - content: { - attestation: attestationWithEncodedDetails, - }, - type: 'submit-attestation', - } - - // Should not throw if the owner and sender DID is the same. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitAttestationBody, - bobLightDid.uri, - aliceLightDid.uri - ) - ) - ).not.toThrow() - - // Should not throw if the owner has no additional details and the sender does. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitAttestationBody, - bobLightDidWithDetails.uri, - aliceLightDid.uri - ) - ) - ).not.toThrow() - - // Should not throw if the owner has additional details and the sender does not. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitAttestationBodyWithEncodedDetails, - bobLightDid.uri, - aliceLightDid.uri - ) - ) - ).not.toThrow() - - // Should not throw if the sender is the full DID version of the owner. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitAttestationBody, - bobFullDid.uri, - aliceLightDid.uri - ) - ) - ).not.toThrow() - - // Should throw if the sender and the owner are two different entities. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitAttestationBody, - aliceLightDid.uri, - bobLightDid.uri - ) - ) - ).toThrowError(SDKErrors.IdentityMismatchError) - - const submitClaimsForCTypeBody: ISubmitCredential = { - content: [presentation], - type: 'submit-credential', - } - - const submitClaimsForCTypeBodyWithEncodedDetails: ISubmitCredential = { - content: [contentWithEncodedDetails], - type: 'submit-credential', - } - - // Should not throw if the owner and sender DID is the same. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitClaimsForCTypeBody, - aliceLightDid.uri, - bobLightDid.uri - ) - ) - ).not.toThrow() - - // Should not throw if the owner has no additional details and the sender does. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitClaimsForCTypeBody, - aliceLightDidWithDetails.uri, - bobLightDid.uri - ) - ) - ).not.toThrow() - - // Should not throw if the owner has additional details and the sender does not. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitClaimsForCTypeBodyWithEncodedDetails, - aliceLightDid.uri, - bobLightDid.uri - ) - ) - ).not.toThrow() - - // Should not throw if the sender is the full DID version of the owner. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitClaimsForCTypeBody, - aliceFullDid.uri, - bobLightDid.uri - ) - ) - ).not.toThrow() - - // Should throw if the sender and the owner are two different entities. - expect(() => - Message.ensureOwnerIsSender( - Message.fromBody( - submitClaimsForCTypeBody, - bobLightDid.uri, - aliceLightDid.uri - ) - ) - ).toThrowError(SDKErrors.IdentityMismatchError) - }) -}) - -describe('Error checking / Verification', () => { - // TODO: Duplicated code, would be nice to have as a seperated test package with similar helpers - async function buildCredential( - claimerDid: DidUri, - attesterDid: DidUri, - contents: IClaim['contents'], - legitimations: ICredential[] - ): Promise<[ICredential, IAttestation]> { - // create claim - - const testCType = CType.fromProperties('Credential', { - name: { type: 'string' }, - }) - - const claim = Claim.fromCTypeAndClaimContents( - testCType, - contents, - claimerDid - ) - // build credential with legitimations - const credential = Credential.fromClaim(claim, { - legitimations, - }) - // build attestation - const testAttestation = Attestation.fromCredentialAndDid( - credential, - attesterDid - ) - return [credential, testAttestation] - } - - let identityAlice: DidDocument - let keyAlice: KeyTool - - let identityBob: DidDocument - let keyBob: KeyTool - - let date: string - let testCType: ICType - let testCTypeWithMultipleProperties: ICType - let claim: IClaim - let claimContents: IClaim['contents'] - let quoteData: IQuote - let quoteAttesterSigned: IQuoteAttesterSigned - let bothSigned: IQuoteAgreement - let legitimation: ICredential - let requestTermsBody: IRequestTerms - let requestTermsContent: PartialClaim - let submitTermsBody: ISubmitTerms - let submitTermsContent: ITerms - let rejectTermsBody: IRejectTerms - let rejectTermsContent: Pick< - ITerms, - 'claim' | 'legitimations' | 'delegationId' - > - let requestAttestationBody: IRequestAttestation - let requestAttestationContent: IRequestAttestationContent - let submitAttestationContent: ISubmitAttestationContent - let submitAttestationBody: ISubmitAttestation - let rejectAttestationForClaimBody: IRejectAttestation - let requestCredentialBody: IRequestCredential - let requestCredentialContent: IRequestCredentialContent - let submitCredentialBody: ISubmitCredential - let submitCredentialContent: ICredentialPresentation[] - let acceptCredentialBody: IAcceptCredential - let rejectCredentialBody: IRejectCredential - let requestAcceptDelegationBody: IRequestAcceptDelegation - let requestAcceptDelegationContent: IRequestDelegationApproval - let submitAcceptDelegationBody: ISubmitAcceptDelegation - let submitAcceptDelegationContent: ISubmitDelegationApproval - let rejectAcceptDelegationBody: IRejectAcceptDelegation - let rejectAcceptDelegationContent: IDelegationData - let informCreateDelegationBody: IInformCreateDelegation - let informCreateDelegationContent: IInformDelegationCreation - let messageRequestTerms: IMessage - let messageSubmitTerms: IMessage - let messageRejectTerms: IMessage - let messageRequestAttestationForClaim: IMessage - let messageSubmitAttestationForClaim: IMessage - let messageRequestCredential: IMessage - let messageRejectAttestationForClaim: IMessage - let messageSubmitCredential: IMessage - let messageAcceptCredential: IMessage - let messageRejectCredential: IMessage - let messageRequestAcceptDelegation: IMessage - let messageSubmitAcceptDelegation: IMessage - let messageRejectAcceptDelegation: IMessage - let messageInformCreateDelegation: IMessage - - beforeAll(async () => { - keyAlice = makeSigningKeyTool() - identityAlice = await createLocalDemoFullDidFromKeypair(keyAlice.keypair) - keyBob = makeSigningKeyTool() - identityBob = await createLocalDemoFullDidFromKeypair(keyBob.keypair) - - date = new Date(2019, 11, 10).toISOString() - claimContents = { - name: 'Bob', - } - - async function didResolveKey( - keyUri: DidResourceUri - ): Promise { - const { did } = Did.parse(keyUri) - const document = [identityAlice, identityBob].find( - ({ uri }) => uri === did - ) - if (!document) throw new Error('Cannot resolve mocked DID') - return Did.keyToResolvedKey(document.authentication[0], did) - } - - // CType - testCType = CType.fromProperties('ClaimCtype', { - name: { type: 'string' }, - }) - testCTypeWithMultipleProperties = CType.fromProperties( - 'Drivers license Claim', - { - name: { type: 'string' }, - id: { type: 'string' }, - age: { type: 'string' }, - } - ) - - // Claim - claim = Claim.fromCTypeAndClaimContents( - testCType, - claimContents, - identityAlice.uri - ) - // Legitimation - ;[legitimation] = await buildCredential( - identityAlice.uri, - identityBob.uri, - {}, - [] - ) - // Quote Data - quoteData = { - attesterDid: identityAlice.uri, - cTypeHash: claim.cTypeHash, - cost: { - tax: { vat: 3.3 }, - net: 23.4, - gross: 23.5, - }, - currency: 'Euro', - termsAndConditions: 'https://coolcompany.io/terms.pdf', - timeframe: date, - } - // Quote signed by attester - quoteAttesterSigned = await Quote.createAttesterSignedQuote( - quoteData, - keyAlice.getSignCallback(identityAlice) - ) - // Quote agreement - bothSigned = await Quote.createQuoteAgreement( - quoteAttesterSigned, - legitimation.rootHash, - keyBob.getSignCallback(identityBob), - identityBob.uri, - { didResolveKey } - ) - // Request Terms content - requestTermsContent = { - cTypeHash: claim.cTypeHash, - } - // Submit Terms content - submitTermsContent = { - claim: { - cTypeHash: claim.cTypeHash, - }, - legitimations: [legitimation], - delegationId: undefined, - quote: quoteAttesterSigned, - cTypes: undefined, - } - // Reject terms Content - rejectTermsContent = { - claim: { - cTypeHash: claim.cTypeHash, - }, - legitimations: [legitimation], - } - - // Request Attestation Content - requestAttestationContent = { - credential: legitimation, - quote: bothSigned, - } - - // Submit Attestation content - submitAttestationContent = { - attestation: { - delegationId: null, - claimHash: requestAttestationContent.credential.rootHash, - cTypeHash: claim.cTypeHash, - owner: identityBob.uri, - revoked: false, - }, - } - - // Request Credential content - requestCredentialContent = { - cTypes: [ - { - cTypeHash: claim.cTypeHash, - trustedAttesters: [identityAlice.uri], - requiredProperties: ['id', 'name'], - }, - ], - challenge: '1234', - } - // Submit Credential content - submitCredentialContent = [ - { - ...legitimation, - claimerSignature: { - signature: '0x1234', - keyUri: `${legitimation.claim.owner}#0x1234`, - }, - }, - ] - // Request Accept delegation content - requestAcceptDelegationContent = { - delegationData: { - account: identityAlice.uri, - id: Crypto.hashStr('0x12345678'), - parentId: Crypto.hashStr('0x12345678'), - permissions: [1], - isPCR: false, - }, - metaData: {}, - signatures: { - inviter: Did.signatureToJson( - await keyAlice.getSignCallback(identityAlice)({ - data: Crypto.coToUInt8('signature'), - did: identityAlice.uri, - keyRelationship: 'authentication', - }) - ), - }, - } - // Submit Accept delegation content - submitAcceptDelegationContent = { - delegationData: { - account: identityAlice.uri, - id: Crypto.hashStr('0x12345678'), - parentId: Crypto.hashStr('0x12345678'), - permissions: [1], - isPCR: false, - }, - signatures: { - inviter: Did.signatureToJson( - await keyAlice.getSignCallback(identityAlice)({ - data: Crypto.coToUInt8('signature'), - did: identityAlice.uri, - keyRelationship: 'authentication', - }) - ), - invitee: Did.signatureToJson( - await keyBob.getSignCallback(identityBob)({ - data: Crypto.coToUInt8('signature'), - did: identityBob.uri, - keyRelationship: 'authentication', - }) - ), - }, - } - // Reject Accept Delegation content - rejectAcceptDelegationContent = { - account: identityAlice.uri, - id: Crypto.hashStr('0x12345678'), - parentId: Crypto.hashStr('0x12345678'), - permissions: [1], - isPCR: false, - } - - informCreateDelegationContent = { - delegationId: Crypto.hashStr('0x12345678'), - isPCR: false, - } - - requestTermsBody = { - content: requestTermsContent, - type: 'request-terms', - } - - submitTermsBody = { - content: submitTermsContent, - type: 'submit-terms', - } - - rejectTermsBody = { - content: rejectTermsContent, - type: 'reject-terms', - } - - requestAttestationBody = { - content: requestAttestationContent, - type: 'request-attestation', - } - - submitAttestationBody = { - content: submitAttestationContent, - type: 'submit-attestation', - } - - rejectAttestationForClaimBody = { - content: requestAttestationContent.credential.rootHash, - type: 'reject-attestation', - } - requestCredentialBody = { - content: requestCredentialContent, - type: 'request-credential', - } - - submitCredentialBody = { - content: submitCredentialContent, - type: 'submit-credential', - } - - acceptCredentialBody = { - content: [claim.cTypeHash], - type: 'accept-credential', - } - - rejectCredentialBody = { - content: [claim.cTypeHash], - type: 'reject-credential', - } - - requestAcceptDelegationBody = { - content: requestAcceptDelegationContent, - type: 'request-accept-delegation', - } - - submitAcceptDelegationBody = { - content: submitAcceptDelegationContent, - type: 'submit-accept-delegation', - } - - rejectAcceptDelegationBody = { - content: rejectAcceptDelegationContent, - type: 'reject-accept-delegation', - } - - informCreateDelegationBody = { - content: informCreateDelegationContent, - type: 'inform-create-delegation', - } - }) - - it('Checking required properties for given CType', () => { - expect(() => - Message.verifyRequiredCTypeProperties(['id', 'name'], testCType) - ).toThrowError(SDKErrors.CTypeUnknownPropertiesError) - - expect(() => - Message.verifyRequiredCTypeProperties( - ['id', 'name'], - testCTypeWithMultipleProperties - ) - ).not.toThrowError(SDKErrors.CTypeUnknownPropertiesError) - - expect(() => - Message.verifyRequiredCTypeProperties( - ['id', 'name'], - testCTypeWithMultipleProperties - ) - ).not.toThrowError() - }) - - beforeAll(async () => { - messageRequestTerms = Message.fromBody( - requestTermsBody, - identityAlice.uri, - identityBob.uri - ) - messageSubmitTerms = Message.fromBody( - submitTermsBody, - identityAlice.uri, - identityBob.uri - ) - messageRejectTerms = Message.fromBody( - rejectTermsBody, - identityAlice.uri, - identityBob.uri - ) - messageRequestAttestationForClaim = Message.fromBody( - requestAttestationBody, - identityAlice.uri, - identityBob.uri - ) - messageSubmitAttestationForClaim = Message.fromBody( - submitAttestationBody, - identityAlice.uri, - identityBob.uri - ) - - messageRejectAttestationForClaim = Message.fromBody( - rejectAttestationForClaimBody, - identityAlice.uri, - identityBob.uri - ) - messageRequestCredential = Message.fromBody( - requestCredentialBody, - identityAlice.uri, - identityBob.uri - ) - messageSubmitCredential = Message.fromBody( - submitCredentialBody, - identityAlice.uri, - identityBob.uri - ) - messageAcceptCredential = Message.fromBody( - acceptCredentialBody, - identityAlice.uri, - identityBob.uri - ) - messageRejectCredential = Message.fromBody( - rejectCredentialBody, - identityAlice.uri, - identityBob.uri - ) - messageRequestAcceptDelegation = Message.fromBody( - requestAcceptDelegationBody, - identityAlice.uri, - identityBob.uri - ) - messageSubmitAcceptDelegation = Message.fromBody( - submitAcceptDelegationBody, - identityAlice.uri, - identityBob.uri - ) - messageRejectAcceptDelegation = Message.fromBody( - rejectAcceptDelegationBody, - identityAlice.uri, - identityBob.uri - ) - messageInformCreateDelegation = Message.fromBody( - informCreateDelegationBody, - identityAlice.uri, - identityBob.uri - ) - }) - it('message body verifier should not throw errors on correct bodies', () => { - expect(() => Message.verifyMessageBody(requestTermsBody)).not.toThrowError() - expect(() => Message.verifyMessageBody(submitTermsBody)).not.toThrowError() - expect(() => Message.verifyMessageBody(rejectTermsBody)).not.toThrowError() - expect(() => - Message.verifyMessageBody(requestAttestationBody) - ).not.toThrowError() - expect(() => - Message.verifyMessageBody(submitAttestationBody) - ).not.toThrowError() - expect(() => - Message.verifyMessageBody(rejectAttestationForClaimBody) - ).not.toThrowError() - expect(() => - Message.verifyMessageBody(requestCredentialBody) - ).not.toThrowError() - expect(() => - Message.verifyMessageBody(submitCredentialBody) - ).not.toThrowError() - expect(() => - Message.verifyMessageBody(acceptCredentialBody) - ).not.toThrowError() - expect(() => - Message.verifyMessageBody(rejectCredentialBody) - ).not.toThrowError() - expect(() => - Message.verifyMessageBody(requestAcceptDelegationBody) - ).not.toThrowError() - expect(() => - Message.verifyMessageBody(submitAcceptDelegationBody) - ).not.toThrowError() - expect(() => - Message.verifyMessageBody(rejectAcceptDelegationBody) - ).not.toThrowError() - expect(() => - Message.verifyMessageBody(informCreateDelegationBody) - ).not.toThrowError() - }) - it('message envelope verifier should not throw errors on correct envelopes', () => { - expect(() => - Message.verifyMessageEnvelope(messageRequestTerms) - ).not.toThrowError() - expect(() => - Message.verifyMessageEnvelope(messageSubmitTerms) - ).not.toThrowError() - expect(() => - Message.verifyMessageEnvelope(messageRejectTerms) - ).not.toThrowError() - expect(() => - Message.verifyMessageEnvelope(messageRequestAttestationForClaim) - ).not.toThrowError() - expect(() => - Message.verifyMessageEnvelope(messageSubmitAttestationForClaim) - ).not.toThrowError() - expect(() => - Message.verifyMessageEnvelope(messageRejectAttestationForClaim) - ).not.toThrowError() - expect(() => - Message.verifyMessageEnvelope(messageRequestCredential) - ).not.toThrowError() - expect(() => - Message.verifyMessageEnvelope(messageSubmitCredential) - ).not.toThrowError() - expect(() => - Message.verifyMessageEnvelope(messageAcceptCredential) - ).not.toThrowError() - expect(() => - Message.verifyMessageEnvelope(messageRejectCredential) - ).not.toThrowError() - expect(() => - Message.verifyMessageEnvelope(messageRequestAcceptDelegation) - ).not.toThrowError() - expect(() => - Message.verifyMessageEnvelope(messageSubmitAcceptDelegation) - ).not.toThrowError() - expect(() => - Message.verifyMessageEnvelope(messageRejectAcceptDelegation) - ).not.toThrowError() - expect(() => - Message.verifyMessageEnvelope(messageInformCreateDelegation) - ).not.toThrowError() - }) - it('message envelope verifier should throw errors on faulty envelopes', () => { - messageRequestTerms.receiver = - 'did:kilt:thisisnotareceiveraddress' as DidUri - expect(() => - Message.verifyMessageEnvelope(messageRequestTerms) - ).toThrowError(SDKErrors.InvalidDidFormatError) - // @ts-ignore - messageSubmitTerms.sender = 'this is not a sender did' - expect(() => - Message.verifyMessageEnvelope(messageSubmitTerms) - ).toThrowError(SDKErrors.InvalidDidFormatError) - // @ts-ignore - messageRejectTerms.sender = 'this is not a sender address' - expect(() => - Message.verifyMessageEnvelope(messageRejectTerms) - ).toThrowError(SDKErrors.InvalidDidFormatError) - // @ts-ignore - messageRequestAttestationForClaim.messageId = 12 - expect(() => - Message.verifyMessageEnvelope(messageRequestAttestationForClaim) - ).toThrowError(TypeError) - // @ts-ignore - messageSubmitAttestationForClaim.createdAt = '123456' - expect(() => - Message.verifyMessageEnvelope(messageSubmitAttestationForClaim) - ).toThrowError(TypeError) - // @ts-ignore - messageRejectAttestationForClaim.receivedAt = '123456' - expect(() => - Message.verifyMessageEnvelope(messageRejectAttestationForClaim) - ).toThrowError(TypeError) - // @ts-ignore - messageRequestCredential.inReplyTo = 123 - expect(() => - Message.verifyMessageEnvelope(messageRequestCredential) - ).toThrowError(TypeError) - }) - it('message body verifier should throw errors on faulty bodies', () => { - // @ts-ignore - requestTermsBody.content.cTypeHash = 'this is not a ctype hash' - expect(() => Message.verifyMessageBody(requestTermsBody)).toThrowError( - SDKErrors.HashMalformedError - ) - submitTermsBody.content.delegationId = 'this is not a delegation id' - expect(() => Message.verifyMessageBody(submitTermsBody)).toThrowError( - SDKErrors.HashMalformedError - ) - - rejectTermsBody.content.delegationId = 'this is not a delegation id' - expect(() => Message.verifyMessageBody(rejectTermsBody)).toThrowError( - SDKErrors.HashMalformedError - ) - // @ts-expect-error - delete rejectTermsBody.content.claim.cTypeHash - expect(() => Message.verifyMessageBody(rejectTermsBody)).toThrowError( - SDKErrors.CTypeHashMissingError - ) - submitCredentialBody.content[0].claimerSignature = { - signature: 'this is not the claimers signature', - // @ts-ignore - keyUri: 'this is not a key id', - } - expect(() => Message.verifyMessageBody(submitCredentialBody)).toThrowError() - // @ts-ignore - submitAttestationBody.content.attestation.claimHash = - 'this is not the claim hash' - expect(() => Message.verifyMessageBody(submitAttestationBody)).toThrowError( - SDKErrors.HashMalformedError - ) - // @ts-ignore - rejectAttestationForClaimBody.content = 'this is not the root hash' - expect(() => - Message.verifyMessageBody(rejectAttestationForClaimBody) - ).toThrowError(SDKErrors.HashMalformedError) - // @ts-ignore - requestCredentialBody.content.cTypes[0].cTypeHash = - 'this is not a cTypeHash' - expect(() => Message.verifyMessageBody(requestCredentialBody)).toThrowError( - SDKErrors.HashMalformedError - ) - // @ts-ignore - acceptCredentialBody.content[0] = 'this is not a cTypeHash' - expect(() => Message.verifyMessageBody(acceptCredentialBody)).toThrowError( - SDKErrors.HashMalformedError - ) - // @ts-ignore - rejectCredentialBody.content[0] = 'this is not a cTypeHash' - expect(() => Message.verifyMessageBody(rejectCredentialBody)).toThrowError( - SDKErrors.HashMalformedError - ) - delete requestAcceptDelegationBody.content.metaData - expect(() => - Message.verifyMessageBody(requestAcceptDelegationBody) - ).toThrowError(SDKErrors.ObjectUnverifiableError) - requestAcceptDelegationBody.content.signatures.inviter.signature = - 'this is not a signature' - expect(() => - Message.verifyMessageBody(requestAcceptDelegationBody) - ).toThrowError(SDKErrors.SignatureMalformedError) - // @ts-ignore - submitAcceptDelegationBody.content.signatures.invitee.keyUri = - 'this is not a key id' - expect(() => - Message.verifyMessageBody(submitAcceptDelegationBody) - ).toThrowError(SDKErrors.SignatureMalformedError) - submitAcceptDelegationBody.content.delegationData.parentId = - 'this is not a parent id hash' - expect(() => - Message.verifyMessageBody(submitAcceptDelegationBody) - ).toThrowError(SDKErrors.DelegationIdTypeError) - // @ts-expect-error - delete rejectAcceptDelegationBody.content.account - expect(() => - Message.verifyMessageBody(rejectAcceptDelegationBody) - ).toThrowError(SDKErrors.OwnerMissingError) - informCreateDelegationBody.content.delegationId = - 'this is not a delegation id' - expect(() => - Message.verifyMessageBody(informCreateDelegationBody) - ).toThrowError(SDKErrors.HashMalformedError) - expect(() => Message.verifyMessageBody({} as MessageBody)).toThrowError( - SDKErrors.UnknownMessageBodyTypeError - ) - }) - it('delegation data structure verifier should throw on faulty delegation data', () => { - // @ts-expect-error - delete requestAcceptDelegationBody.content.delegationData.isPCR - expect(() => - Message.verifyDelegationStructure( - requestAcceptDelegationBody.content.delegationData - ) - ).toThrowError(TypeError('isPCR is expected to be a boolean')) - requestAcceptDelegationBody.content.delegationData.id = - 'this is not a delegation id' - expect(() => - Message.verifyDelegationStructure( - requestAcceptDelegationBody.content.delegationData - ) - ).toThrowError(SDKErrors.DelegationIdTypeError) - submitAcceptDelegationBody.content.delegationData.permissions = [] - expect(() => - Message.verifyDelegationStructure( - submitAcceptDelegationBody.content.delegationData - ) - ).toThrowError(SDKErrors.UnauthorizedError) - // @ts-expect-error - delete submitAcceptDelegationBody.content.delegationData.id - expect(() => - Message.verifyDelegationStructure( - submitAcceptDelegationBody.content.delegationData - ) - ).toThrowError(SDKErrors.DelegationIdMissingError) - }) -}) diff --git a/packages/messaging/src/Message.ts b/packages/messaging/src/Message.ts deleted file mode 100644 index ccf3eb3df..000000000 --- a/packages/messaging/src/Message.ts +++ /dev/null @@ -1,452 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import type { - DecryptCallback, - DidResolveKey, - DidResourceUri, - EncryptCallback, - IEncryptedMessage, - IEncryptedMessageContents, - ICType, - IDelegationData, - IMessage, - MessageBody, -} from '@kiltprotocol/types' -import { - Attestation, - Claim, - Credential, - CType, - Quote, -} from '@kiltprotocol/core' -import { DataUtils, SDKErrors, UUID } from '@kiltprotocol/utils' -import * as Did from '@kiltprotocol/did' -import { - hexToU8a, - stringToU8a, - u8aToHex, - u8aToString, - isHex, - isJsonObject, -} from '@polkadot/util' - -/** - * Checks if delegation data is well formed. - * - * @param delegationData Delegation data to check. - */ -export function verifyDelegationStructure( - delegationData: IDelegationData -): void { - const { permissions, id, parentId, isPCR, account } = delegationData - - if (!id) { - throw new SDKErrors.DelegationIdMissingError() - } else if (typeof id !== 'string' || !isHex(id)) { - throw new SDKErrors.DelegationIdTypeError() - } - - if (!account) { - throw new SDKErrors.OwnerMissingError() - } - Did.validateUri(account, 'Did') - - if (typeof isPCR !== 'boolean') { - throw new TypeError('isPCR is expected to be a boolean') - } - - if (permissions.length === 0 || permissions.length > 3) { - throw new SDKErrors.UnauthorizedError( - 'Must have at least one permission and no more then two' - ) - } - - if (parentId && (typeof parentId !== 'string' || !isHex(parentId))) { - throw new SDKErrors.DelegationIdTypeError() - } -} - -/** - * Checks if the message body is well-formed. - * - * @param body The message body. - */ -export function verifyMessageBody(body: MessageBody): void { - switch (body.type) { - case 'request-terms': { - Claim.verifyDataStructure(body.content) - break - } - case 'submit-terms': { - Claim.verifyDataStructure(body.content.claim) - body.content.legitimations.forEach((credential) => - Credential.verifyDataStructure(credential) - ) - if (body.content.delegationId) { - DataUtils.verifyIsHex(body.content.delegationId) - } - if (body.content.quote) { - Quote.validateQuoteSchema(Quote.QuoteSchema, body.content.quote) - } - if (body.content.cTypes) { - body.content.cTypes.forEach((val) => CType.verifyDataStructure(val)) - } - break - } - case 'reject-terms': { - Claim.verifyDataStructure(body.content.claim) - if (body.content.delegationId) { - DataUtils.verifyIsHex(body.content.delegationId) - } - body.content.legitimations.forEach((val) => - Credential.verifyDataStructure(val) - ) - break - } - case 'request-attestation': { - Credential.verifyDataStructure(body.content.credential) - if (body.content.quote) { - Quote.validateQuoteSchema(Quote.QuoteSchema, body.content.quote) - } - break - } - case 'submit-attestation': { - Attestation.verifyDataStructure(body.content.attestation) - break - } - case 'reject-attestation': { - if (!isHex(body.content)) { - throw new SDKErrors.HashMalformedError() - } - break - } - case 'request-credential': { - body.content.cTypes.forEach( - ({ cTypeHash, trustedAttesters, requiredProperties }): void => { - DataUtils.verifyIsHex(cTypeHash) - trustedAttesters?.forEach((did) => Did.validateUri(did, 'Did')) - requiredProperties?.forEach((requiredProps) => { - if (typeof requiredProps !== 'string') - throw new TypeError( - 'Required properties is expected to be a string' - ) - }) - } - ) - break - } - case 'submit-credential': { - body.content.forEach((presentation) => { - Credential.verifyDataStructure(presentation) - if (!Did.isDidSignature(presentation.claimerSignature)) { - throw new SDKErrors.SignatureMalformedError() - } - }) - break - } - case 'accept-credential': { - body.content.forEach((cTypeHash) => DataUtils.verifyIsHex(cTypeHash)) - break - } - case 'reject-credential': { - body.content.forEach((cTypeHash) => DataUtils.verifyIsHex(cTypeHash)) - break - } - case 'request-accept-delegation': { - verifyDelegationStructure(body.content.delegationData) - if (!Did.isDidSignature(body.content.signatures.inviter)) { - throw new SDKErrors.SignatureMalformedError() - } - if (!isJsonObject(body.content.metaData)) { - throw new SDKErrors.ObjectUnverifiableError() - } - break - } - case 'submit-accept-delegation': { - verifyDelegationStructure(body.content.delegationData) - if ( - !Did.isDidSignature(body.content.signatures.inviter) || - !Did.isDidSignature(body.content.signatures.invitee) - ) { - throw new SDKErrors.SignatureMalformedError() - } - break - } - - case 'reject-accept-delegation': { - verifyDelegationStructure(body.content) - break - } - case 'inform-create-delegation': { - DataUtils.verifyIsHex(body.content.delegationId) - break - } - - default: - throw new SDKErrors.UnknownMessageBodyTypeError() - } -} - -/** - * Checks if the message object is well-formed. - * - * @param message The message object. - */ -export function verifyMessageEnvelope(message: IMessage): void { - const { messageId, createdAt, receiver, sender, receivedAt, inReplyTo } = - message - if (messageId !== undefined && typeof messageId !== 'string') { - throw new TypeError('Message id is expected to be a string') - } - if (createdAt !== undefined && typeof createdAt !== 'number') { - throw new TypeError('Created at is expected to be a number') - } - if (receivedAt !== undefined && typeof receivedAt !== 'number') { - throw new TypeError('Received at is expected to be a number') - } - Did.validateUri(sender, 'Did') - Did.validateUri(receiver, 'Did') - if (inReplyTo && typeof inReplyTo !== 'string') { - throw new TypeError('In reply to is expected to be a string') - } -} - -/** - * Verifies required properties for a given [[CType]] before sending or receiving a message. - * - * @param requiredProperties The list of required properties that need to be verified against a [[CType]]. - * @param cType A [[CType]] used to verify the properties. - */ -export function verifyRequiredCTypeProperties( - requiredProperties: string[], - cType: ICType -): void { - CType.verifyDataStructure(cType as ICType) - - const unknownProperties = requiredProperties.find( - (property) => !(property in cType.properties) - ) - if (unknownProperties) { - throw new SDKErrors.CTypeUnknownPropertiesError() - } -} - -/** - * Verifies that the sender of a [[Message]] is also the owner of it, e.g the owner's and sender's DIDs refer to the same subject. - * - * @param message The [[Message]] object which needs to be decrypted. - * @param message.body The body of the [[Message]] which depends on the [[BodyType]]. - * @param message.sender The sender's DID taken from the [[IMessage]]. - */ -export function ensureOwnerIsSender({ body, sender }: IMessage): void { - switch (body.type) { - case 'request-attestation': - { - const requestAttestation = body - if ( - !Did.isSameSubject( - requestAttestation.content.credential.claim.owner, - sender - ) - ) { - throw new SDKErrors.IdentityMismatchError('Claim', 'Sender') - } - } - break - case 'submit-attestation': - { - const submitAttestation = body - if ( - !Did.isSameSubject( - submitAttestation.content.attestation.owner, - sender - ) - ) { - throw new SDKErrors.IdentityMismatchError('Attestation', 'Sender') - } - } - break - case 'submit-credential': - { - const submitClaimsForCtype = body - submitClaimsForCtype.content.forEach((presentation) => { - if (!Did.isSameSubject(presentation.claim.owner, sender)) { - throw new SDKErrors.IdentityMismatchError('Claims', 'Sender') - } - }) - } - break - default: - } -} - -/** - * Symmetrically decrypts the result of [[encrypt]]. - * - * @param encrypted The encrypted message. - * @param decryptCallback The callback to decrypt with the secret key. - * @param decryptionOptions Options to perform the decryption operation. - * @param decryptionOptions.resolveKey The DID key resolver to use. - * @returns The original [[Message]]. - */ -export async function decrypt( - encrypted: IEncryptedMessage, - decryptCallback: DecryptCallback, - { - resolveKey = Did.resolveKey, - }: { - resolveKey?: DidResolveKey - } = {} -): Promise { - const { senderKeyUri, receiverKeyUri, ciphertext, nonce, receivedAt } = - encrypted - - const senderKeyDetails = await resolveKey(senderKeyUri, 'keyAgreement') - - const { fragment } = Did.parse(receiverKeyUri) - if (!fragment) { - throw new SDKErrors.DidError( - `No fragment for the receiver key ID "${receiverKeyUri}"` - ) - } - - let data: Uint8Array - try { - data = ( - await decryptCallback({ - peerPublicKey: senderKeyDetails.publicKey, - data: hexToU8a(ciphertext), - nonce: hexToU8a(nonce), - keyUri: receiverKeyUri, - }) - ).data - } catch (cause) { - throw new SDKErrors.DecodingMessageError(undefined, { - cause: cause as Error, - }) - } - - const decoded = u8aToString(data) - - const { - body, - createdAt, - messageId, - inReplyTo, - references, - sender, - receiver, - } = JSON.parse(decoded) as IEncryptedMessageContents - const decrypted: IMessage = { - receiver, - sender, - createdAt, - body, - messageId, - receivedAt, - inReplyTo, - references, - } - - if (sender !== senderKeyDetails.controller) { - throw new SDKErrors.IdentityMismatchError('Encryption key', 'Sender') - } - - return decrypted -} - -/** - * Checks the message structure and body contents (e.g. Hashes match, ensures the owner is the sender). - * Throws, if a check fails. - * - * @param decryptedMessage The decrypted message to check. - */ -export function verify(decryptedMessage: IMessage): void { - verifyMessageBody(decryptedMessage.body) - verifyMessageEnvelope(decryptedMessage) - ensureOwnerIsSender(decryptedMessage) -} - -/** - * Constructs a message from a message body. - * This should be encrypted with [[encrypt]] before sending to the receiver. - * - * @param body The body of the message. - * @param sender The DID of the sender. - * @param receiver The DID of the receiver. - * @returns The message created. - */ -export function fromBody( - body: MessageBody, - sender: IMessage['sender'], - receiver: IMessage['receiver'] -): IMessage { - return { - body, - createdAt: Date.now(), - receiver, - sender, - messageId: UUID.generate(), - } -} - -/** - * Encrypts the [[Message]] as a string. This can be reversed with [[decrypt]]. - * - * @param message The message to encrypt. - * @param encryptCallback The callback to encrypt with the secret key. - * @param receiverKeyUri The key URI of the receiver. - * @param encryptionOptions Options to perform the encryption operation. - * @param encryptionOptions.resolveKey The DID key resolver to use. - * - * @returns The encrypted version of the original [[Message]], see [[IEncryptedMessage]]. - */ -export async function encrypt( - message: IMessage, - encryptCallback: EncryptCallback, - receiverKeyUri: DidResourceUri, - { - resolveKey = Did.resolveKey, - }: { - resolveKey?: DidResolveKey - } = {} -): Promise { - const receiverKey = await resolveKey(receiverKeyUri, 'keyAgreement') - if (message.receiver !== receiverKey.controller) { - throw new SDKErrors.IdentityMismatchError('receiver public key', 'receiver') - } - - const toEncrypt: IEncryptedMessageContents = { - body: message.body, - createdAt: message.createdAt, - sender: message.sender, - receiver: message.receiver, - messageId: message.messageId, - inReplyTo: message.inReplyTo, - references: message.references, - } - - const serialized = stringToU8a(JSON.stringify(toEncrypt)) - - const encrypted = await encryptCallback({ - did: message.sender, - data: serialized, - peerPublicKey: receiverKey.publicKey, - }) - - const ciphertext = u8aToHex(encrypted.data) - const nonce = u8aToHex(encrypted.nonce) - - return { - receivedAt: message.receivedAt, - ciphertext, - nonce, - senderKeyUri: encrypted.keyUri, - receiverKeyUri: receiverKey.id, - } -} diff --git a/packages/messaging/src/index.ts b/packages/messaging/src/index.ts deleted file mode 100644 index fc34fe781..000000000 --- a/packages/messaging/src/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -/** - * KILT participants can communicate via a 1:1 messaging system. - * - * All messages are **encrypted** with the encryption keys of the involved identities. - * Messages are encrypted using authenticated encryption: the two parties authenticate to each other, but the message authentication provides repudiation possibilities. - * - * The [[Message]] class exposes methods to construct and verify messages. - * - * @module @kiltprotocol/messaging - */ - -export * from './Message.js' diff --git a/packages/messaging/tsconfig.build.json b/packages/messaging/tsconfig.build.json deleted file mode 100644 index ab24dae00..000000000 --- a/packages/messaging/tsconfig.build.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - - "compilerOptions": { - "module": "CommonJS", - "outDir": "./lib/cjs" - }, - - "include": [ - "src/**/*.ts", "src/**/*.js" - ], - - "exclude": [ - "coverage", - "**/*.spec.ts", - ] -} diff --git a/packages/messaging/tsconfig.esm.json b/packages/messaging/tsconfig.esm.json deleted file mode 100644 index e1f3b73b6..000000000 --- a/packages/messaging/tsconfig.esm.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.build.json", - "compilerOptions": { - "module": "ES6", - "outDir": "./lib/esm" - } -} diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index e7ee8f930..3e6bcbf88 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -43,7 +43,6 @@ "@kiltprotocol/config": "workspace:*", "@kiltprotocol/core": "workspace:*", "@kiltprotocol/did": "workspace:*", - "@kiltprotocol/messaging": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*" } diff --git a/packages/sdk-js/src/index.ts b/packages/sdk-js/src/index.ts index dfc83c64d..d4266c502 100644 --- a/packages/sdk-js/src/index.ts +++ b/packages/sdk-js/src/index.ts @@ -11,7 +11,6 @@ export * from '@kiltprotocol/core' export { ConfigService } from '@kiltprotocol/config' -export * as Message from '@kiltprotocol/messaging' export { Blockchain } from '@kiltprotocol/chain-helpers' export * as ChainHelpers from '@kiltprotocol/chain-helpers' export * as Did from '@kiltprotocol/did' diff --git a/packages/types/src/Message.ts b/packages/types/src/Message.ts deleted file mode 100644 index b4264dc76..000000000 --- a/packages/types/src/Message.ts +++ /dev/null @@ -1,269 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import type { AnyJson } from './Imported' -import type { DidResourceUri, DidSignature, DidUri } from './DidDocument.js' -import type { IAttestation } from './Attestation.js' -import type { PartialClaim } from './Claim.js' -import type { IDelegationNode } from './Delegation.js' -import type { IQuoteAgreement } from './Quote.js' -import type { ICredential, ICredentialPresentation } from './Credential.js' -import type { ITerms } from './Terms.js' -import type { CTypeHash } from './CType.js' - -export type MessageBodyType = - | 'error' - | 'reject' - | 'request-terms' - | 'submit-terms' - | 'reject-terms' - | 'request-attestation' - | 'submit-attestation' - | 'reject-attestation' - | 'request-payment' - | 'confirm-payment' - | 'request-credential' - | 'submit-credential' - | 'accept-credential' - | 'reject-credential' - | 'request-accept-delegation' - | 'submit-accept-delegation' - | 'reject-accept-delegation' - | 'inform-create-delegation' - -interface IMessageBodyBase { - content: any - type: MessageBodyType -} - -export interface IError extends IMessageBodyBase { - content: { - /** Optional machine-readable type of the error. */ - name?: string - /** Optional human-readable description of the error. */ - message?: string - } - type: 'error' -} - -export interface IReject extends IMessageBodyBase { - content: { - /** Optional machine-readable type of the rejection. */ - name?: string - /** Optional human-readable description of the rejection. */ - message?: string - } - type: 'reject' -} - -export interface IRequestTerms extends IMessageBodyBase { - content: PartialClaim - type: 'request-terms' -} - -export interface ISubmitTerms extends IMessageBodyBase { - content: ITerms - type: 'submit-terms' -} - -export interface IRejectTerms extends IMessageBodyBase { - content: { - claim: PartialClaim - legitimations: ICredential[] - delegationId?: IDelegationNode['id'] - } - type: 'reject-terms' -} - -export interface ISubmitCredential extends IMessageBodyBase { - content: ICredentialPresentation[] - type: 'submit-credential' -} - -export interface IAcceptCredential extends IMessageBodyBase { - content: CTypeHash[] - type: 'accept-credential' -} - -export interface IRejectCredential extends IMessageBodyBase { - content: CTypeHash[] - type: 'reject-credential' -} - -export interface IRequestAttestationContent { - credential: ICredential - quote?: IQuoteAgreement -} - -export interface IRequestAttestation extends IMessageBodyBase { - content: IRequestAttestationContent - type: 'request-attestation' -} - -export interface ISubmitAttestationContent { - attestation: IAttestation -} - -export interface ISubmitAttestation extends IMessageBodyBase { - content: ISubmitAttestationContent - type: 'submit-attestation' -} - -export interface IRejectAttestation extends IMessageBodyBase { - content: ICredential['rootHash'] - type: 'reject-attestation' -} - -export interface IRequestPaymentContent { - // Same as the `rootHash` value of the `'request-attestation'` message */ - claimHash: string -} - -export interface IConfirmPaymentContent { - // Same as the `rootHash` value of the `'request-attestation'` message - claimHash: string - // Hash of the payment transaction */ - txHash: string - // hash of the block which includes the payment transaction - blockHash: string -} - -export interface IConfirmPayment extends IMessageBodyBase { - content: IConfirmPaymentContent - type: 'confirm-payment' -} - -export interface IRequestCredentialContent { - cTypes: Array<{ - cTypeHash: CTypeHash - trustedAttesters?: DidUri[] - requiredProperties?: string[] - }> - challenge?: string -} - -export interface IRequestCredential extends IMessageBodyBase { - content: IRequestCredentialContent - type: 'request-credential' -} - -export interface IRequestPayment extends IMessageBodyBase { - content: IRequestPaymentContent - type: 'request-payment' -} - -export interface IDelegationData { - account: IDelegationNode['account'] - id: IDelegationNode['id'] - parentId: IDelegationNode['id'] - permissions: IDelegationNode['permissions'] - isPCR: boolean -} - -export interface IRejectAcceptDelegation extends IMessageBodyBase { - content: IDelegationData - type: 'reject-accept-delegation' -} - -export interface IRequestDelegationApproval { - delegationData: IDelegationData - metaData?: AnyJson - signatures: { - inviter: DidSignature - } -} - -export interface IRequestAcceptDelegation extends IMessageBodyBase { - content: IRequestDelegationApproval - type: 'request-accept-delegation' -} - -export interface ISubmitDelegationApproval { - delegationData: IDelegationData - signatures: { - inviter: DidSignature - invitee: DidSignature - } -} - -export interface ISubmitAcceptDelegation extends IMessageBodyBase { - content: ISubmitDelegationApproval - type: 'submit-accept-delegation' -} - -export interface IInformDelegationCreation { - delegationId: IDelegationNode['id'] - isPCR: boolean -} - -export interface IInformCreateDelegation extends IMessageBodyBase { - content: IInformDelegationCreation - type: 'inform-create-delegation' -} - -export type MessageBody = - | IError - | IReject - // - | IRequestTerms - | ISubmitTerms - | IRejectTerms - // - | IRequestAttestation - | ISubmitAttestation - | IRejectAttestation - // - | IRequestCredential - | ISubmitCredential - | IAcceptCredential - | IRejectCredential - // - | IRequestAcceptDelegation - | ISubmitAcceptDelegation - | IRejectAcceptDelegation - | IInformCreateDelegation - -/** - * - `body` - The body of the message, see [[MessageBody]]. - * - `createdAt` - The timestamp of the message construction. - * - `sender` - The DID of the sender. - * - `receiver` - The DID of the receiver. - * - `messageId` - The message id. - * - `receivedAt` - The timestamp of the message reception. - * - `inReplyTo` - The id of the parent-message. - * - `references` - The references or the in-reply-to of the parent-message followed by the message-id of the parent-message. - */ -export interface IMessage { - body: MessageBody - createdAt: number - sender: DidUri - receiver: DidUri - messageId?: string - receivedAt?: number - inReplyTo?: IMessage['messageId'] - references?: Array -} - -/** - * Everything which is part of the encrypted and protected part of the [[IMessage]]. - */ -export type IEncryptedMessageContents = Omit - -/** - * Removes the plaintext [[IEncryptedMessageContents]] from an [[IMessage]] and instead includes them in encrypted form. - * This adds the following fields: - * - `ciphertext` - The encrypted message content. - * - `nonce` - The encryption nonce. - * - `receiverKeyUri` - The URI of the receiver's encryption key. - * - `senderKeyUri` - The URI of the sender's encryption key. - */ -export type IEncryptedMessage = Pick & { - receiverKeyUri: DidResourceUri - senderKeyUri: DidResourceUri - ciphertext: string - nonce: string -} diff --git a/packages/types/src/Quote.ts b/packages/types/src/Quote.ts deleted file mode 100644 index 2a3f0ed6d..000000000 --- a/packages/types/src/Quote.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import type { DidSignature, DidUri } from './DidDocument' -import type { ICredential } from './Credential' -import type { CTypeHash } from './CType' - -export interface ICostBreakdown { - tax: Record - net: number - gross: number -} -export interface IQuote { - attesterDid: DidUri - cTypeHash: CTypeHash - cost: ICostBreakdown - currency: string - timeframe: string - termsAndConditions: string -} -export interface IQuoteAttesterSigned extends IQuote { - attesterSignature: DidSignature -} - -export interface IQuoteAgreement extends IQuoteAttesterSigned { - rootHash: ICredential['rootHash'] - claimerDid: DidUri - claimerSignature: DidSignature -} diff --git a/packages/types/src/Terms.ts b/packages/types/src/Terms.ts deleted file mode 100644 index e4578aae8..000000000 --- a/packages/types/src/Terms.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import type { ICType } from './CType' -import type { IDelegationNode } from './Delegation' -import type { IQuoteAttesterSigned } from './Quote' -import type { PartialClaim } from './Claim' -import type { ICredential } from './Credential' - -export interface ITerms { - claim: PartialClaim - legitimations: ICredential[] - delegationId?: IDelegationNode['id'] - quote?: IQuoteAttesterSigned - cTypes?: ICType[] -} diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 16c6bf418..be510ee7a 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -20,10 +20,7 @@ export * from './Claim.js' export * from './Deposit.js' export * from './Delegation.js' export * from './Address.js' -export * from './Message.js' -export * from './Quote.js' export * from './Credential.js' -export * from './Terms.js' export * from './DidDocument.js' export * from './CryptoCallbacks.js' export * from './DidResolver.js' diff --git a/tests/breakingChanges/BreakingChanges.spec.ts b/tests/breakingChanges/BreakingChanges.spec.ts index 2c73a6772..0f97a6025 100644 --- a/tests/breakingChanges/BreakingChanges.spec.ts +++ b/tests/breakingChanges/BreakingChanges.spec.ts @@ -5,21 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { - Attestation, - Claim, - Credential, - CType, - Did, - DidDocument, - DidKey, - DidResourceUri, - ICType, - Message, - MessageBody, - ResolvedDidKey, - Utils, -} from '@kiltprotocol/sdk-js' +import { Did, Utils } from '@kiltprotocol/sdk-js' import nacl from 'tweetnacl' import { v4 } from 'uuid' @@ -52,21 +38,6 @@ function makeLightDidFromSeed(seed: string) { return { did, encrypt, decrypt } } -function makeResolveKey(document: DidDocument) { - return async function resolveKey( - keyUri: DidResourceUri - ): Promise { - const { fragment } = Did.parse(keyUri) - const key = Did.getKey(document, fragment!) as DidKey - return { - controller: document!.uri, - id: keyUri!, - publicKey: key.publicKey, - type: key.type, - } - } -} - describe('Breaking Changes', () => { describe('Light DID', () => { it('does not break the light did uri generation', () => { @@ -85,149 +56,4 @@ describe('Breaking Changes', () => { ).toMatchSnapshot() }) }) - describe('Messages', () => { - it('does not break Message & EncryptedMessage structure', async () => { - const { did: aliceDid, encrypt } = makeLightDidFromSeed( - '0xdc6f4d21a91848eeeac1811c73a2323060ef2d8d4a07ece2f216d5b8f977520b' - ) - const { did: bobDid, decrypt } = makeLightDidFromSeed( - '0xa748f38e896ddc52b6e5cc5baa754f7f841381ef32bf1d86d51026857c6c05dc' - ) - - // Mock Date object for message.createdAt property - jest.useFakeTimers().setSystemTime(1657727664899) - - const message = Message.fromBody( - { - type: 'request-terms', - content: { - cTypeHash: '0x1234', - }, - }, - aliceDid.uri, - bobDid.uri - ) - - expect(message).toMatchSnapshot() - - const encrypted = await Message.encrypt( - message, - encrypt(aliceDid), - `${bobDid.uri}#encryption`, - { - resolveKey: makeResolveKey(bobDid), - } - ) - - expect(encrypted).toMatchSnapshot() - - const decrypted = await Message.decrypt(encrypted, decrypt, { - resolveKey: makeResolveKey(aliceDid), - }) - - expect(decrypted).toMatchObject(message) - }) - - it('does not break for attestation flow', async () => { - // attestation flow - - const attester = makeLightDidFromSeed( - '0xdc6f4d21a91848eeeac1811c73a2323060ef2d8d4a07ece2f216d5b8f977520b' - ) - const user = makeLightDidFromSeed( - '0xa748f38e896ddc52b6e5cc5baa754f7f841381ef32bf1d86d51026857c6c05dc' - ) - - const cType: ICType = { - $id: 'kilt:ctype:0xd5301762c62114f6455e0b373cccce20631c2a717004a98f8953e738e17c5d3c', - $schema: 'http://kilt-protocol.org/draft-01/ctype#', - title: 'CtypeModel 2', - properties: { - name: { type: 'string' }, - }, - type: 'object', - } - - const requestTerms: MessageBody = { - type: 'request-terms', - content: { - cTypeHash: CType.idToHash(cType.$id), - }, - } - expect(requestTerms).toMatchSnapshot('request-terms') - - const claim = Claim.fromCTypeAndClaimContents( - cType, - { name: 'Bob' }, - attester.did.uri - ) - expect(claim).toMatchSnapshot('claim') - - const submitTerms: MessageBody = { - type: 'submit-terms', - content: { - claim, - legitimations: [], - }, - } - expect(submitTerms).toMatchSnapshot('submit-terms') - - claim.owner = user.did.uri - const credential = Credential.fromClaim(claim, { legitimations: [] }) - expect(credential).toMatchSnapshot('credential') - - const requestAttestation: MessageBody = { - type: 'request-attestation', - content: { credential }, - } - expect(requestAttestation).toMatchSnapshot('request-attestation') - - const attestation = Attestation.fromCredentialAndDid( - credential, - attester.did.uri - ) - expect(attestation).toMatchSnapshot('attestation') - - const submitAttestation: MessageBody = { - type: 'submit-attestation', - content: { attestation }, - } - expect(submitAttestation).toMatchSnapshot('submit-attestation') - - // verification flow - - const challenge = '0xCAFE' - const requestCredential: MessageBody = { - type: 'request-credential', - content: { - cTypes: [ - { - cTypeHash: CType.idToHash(cType.$id), - requiredProperties: ['name'], - trustedAttesters: [attester.did.uri], - }, - ], - challenge, - }, - } - expect(requestCredential).toMatchSnapshot('request-credential') - - const presentation = await Credential.createPresentation({ - credential, - challenge, - signCallback: async () => ({ - signature: new Uint8Array(32).fill(0), - keyUri: `${user.did.uri}${user.did.authentication[0].id}`, - keyType: user.did.authentication[0].type, - }), - }) - expect(presentation).toMatchSnapshot('presentation') - - const submitCredential: MessageBody = { - type: 'submit-credential', - content: [presentation], - } - expect(submitCredential).toMatchSnapshot('submit-credential') - }) - }) }) diff --git a/tests/bundle/bundle-test.ts b/tests/bundle/bundle-test.ts index df39e0397..5e0c00cb9 100644 --- a/tests/bundle/bundle-test.ts +++ b/tests/bundle/bundle-test.ts @@ -8,9 +8,7 @@ /// import type { - DecryptCallback, DidDocument, - EncryptCallback, KeyringPair, KiltEncryptionKeypair, KiltKeyringPair, @@ -29,7 +27,6 @@ const { Did, Blockchain, Utils: { Crypto, ss58Format }, - Message, BalanceUtils, } = kilt @@ -95,39 +92,6 @@ function makeEncryptionKeypair(seed: string): KiltEncryptionKeypair { } } -function makeEncryptCallback({ - secretKey, -}: KiltEncryptionKeypair): (didDocument: DidDocument) => EncryptCallback { - return (didDocument) => { - return async function encryptCallback({ data, peerPublicKey }) { - const keyId = didDocument.keyAgreement?.[0].id - if (!keyId) { - throw new Error(`Encryption key not found in did "${didDocument.uri}"`) - } - const { box, nonce } = Crypto.encryptAsymmetric( - data, - peerPublicKey, - secretKey - ) - return { nonce, data: box, keyUri: `${didDocument.uri}${keyId}` } - } - } -} - -function makeDecryptCallback({ - secretKey, -}: KiltEncryptionKeypair): DecryptCallback { - return async function decryptCallback({ data, nonce, peerPublicKey }) { - const decrypted = Crypto.decryptAsymmetric( - { box: data, nonce }, - peerPublicKey, - secretKey - ) - if (decrypted === false) throw new Error('Decryption failed') - return { data: decrypted } - } -} - async function createFullDidFromKeypair( payer: KiltKeyringPair, keypair: KiltKeyringPair, @@ -168,7 +132,6 @@ async function runAll() { const { keypair: aliceKeypair, getSignCallback: aliceSign } = makeSigningKeypair('//Alice') const aliceEncryptionKey = makeEncryptionKeypair('//Alice//enc') - const aliceDecryptCallback = makeDecryptCallback(aliceEncryptionKey) const alice = await createFullDidFromKeypair( payer, aliceKeypair, @@ -181,7 +144,6 @@ async function runAll() { const { keypair: bobKeypair, getSignCallback: bobSign } = makeSigningKeypair('//Bob') const bobEncryptionKey = makeEncryptionKeypair('//Bob//enc') - const bobEncryptCallback = makeEncryptCallback(bobEncryptionKey) const bob = await createFullDidFromKeypair( payer, bobKeypair, @@ -303,31 +265,6 @@ async function runAll() { await Credential.verifySignature(presentation) console.info('Presentation signature verified') - console.log('Test Messaging with encryption + decryption') - const message = Message.fromBody( - { - content: { - credential, - }, - type: 'request-attestation', - }, - bob.uri, - alice.uri - ) - const encryptedMessage = await Message.encrypt( - message, - bobEncryptCallback(bob), - `${alice.uri}${alice.keyAgreement[0].id}` - ) - - const decryptedMessage = await Message.decrypt( - encryptedMessage, - aliceDecryptCallback - ) - if (JSON.stringify(message.body) !== JSON.stringify(decryptedMessage.body)) { - throw new Error('Original and decrypted message are not the same') - } - const attestation = Attestation.fromCredentialAndDid(credential, alice.uri) Attestation.verifyAgainstCredential(attestation, credential) console.info('Attestation Data verified') diff --git a/tests/bundle/bundle.spec.ts b/tests/bundle/bundle.spec.ts index 88da2475f..3ced1769f 100644 --- a/tests/bundle/bundle.spec.ts +++ b/tests/bundle/bundle.spec.ts @@ -37,10 +37,12 @@ test('html bundle integration test', async ({ page }) => { const fileUrl = url.pathToFileURL( path.join(__dirname, 'bundle-test.html') ).href + page.on('pageerror', (exception) => { console.error(exception) throw new Error('-1') }) + page.on('console', async (msg) => { console.log(msg.text()) }) diff --git a/tsconfig.json b/tsconfig.json index a447ff164..7faeabab6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,7 +8,6 @@ "@kiltprotocol/chain-helpers": ["chain-helpers/src"], "@kiltprotocol/config": ["config/src"], "@kiltprotocol/core": ["core/src"], - "@kiltprotocol/messaging": ["messaging/src"], "@kiltprotocol/sdk-js": ["sdk-js/src"], "@kiltprotocol/types": ["types/src"], "@kiltprotocol/utils": ["utils/src"], @@ -21,4 +20,4 @@ "@kiltprotocol/type-definitions": ["type-definitions/src"], } }, -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index db034755f..6682b1f48 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2019,20 +2019,6 @@ __metadata: languageName: unknown linkType: soft -"@kiltprotocol/messaging@workspace:*, @kiltprotocol/messaging@workspace:packages/messaging": - version: 0.0.0-use.local - resolution: "@kiltprotocol/messaging@workspace:packages/messaging" - dependencies: - "@kiltprotocol/core": "workspace:*" - "@kiltprotocol/did": "workspace:*" - "@kiltprotocol/types": "workspace:*" - "@kiltprotocol/utils": "workspace:*" - "@polkadot/util": ^12.0.0 - rimraf: ^3.0.2 - typescript: ^4.8.3 - languageName: unknown - linkType: soft - "@kiltprotocol/sdk-js@workspace:packages/sdk-js": version: 0.0.0-use.local resolution: "@kiltprotocol/sdk-js@workspace:packages/sdk-js" @@ -2041,7 +2027,6 @@ __metadata: "@kiltprotocol/config": "workspace:*" "@kiltprotocol/core": "workspace:*" "@kiltprotocol/did": "workspace:*" - "@kiltprotocol/messaging": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" rimraf: ^3.0.2 From 5473696216a40eda0d597340d9f21e693faaa662 Mon Sep 17 00:00:00 2001 From: Antonio Date: Thu, 10 Aug 2023 19:59:27 +0200 Subject: [PATCH 074/130] chore: create new asset-credentials package (#787) * renames the asset-did package to asset-credentials * move PublicCredentials module from core to asset-credentials * move extrinsic flattening helpers to utils package --------- Co-authored-by: Raphael Flechtner --- jest.config.js | 2 +- package.json | 1 + .../README.md | 11 +- .../package.json | 11 +- .../credentials}/PublicCredential.chain.ts | 18 +-- .../src/credentials}/PublicCredential.spec.ts | 13 +- .../src/credentials}/PublicCredential.ts | 6 +- .../src/credentials}/index.ts | 0 .../src/dids/index.ts} | 0 .../src/index.ts | 7 +- .../tsconfig.build.json | 0 .../tsconfig.esm.json | 0 packages/augment-api/package.json | 1 + packages/core/package.json | 1 - packages/core/src/ctype/CType.chain.ts | 16 ++- packages/core/src/index.ts | 1 - packages/utils/package.json | 1 + .../{core/src/utils.ts => utils/src/Chain.ts} | 14 +- packages/utils/src/index.ts | 1 + tests/integration/PublicCredentials.spec.ts | 96 +++++++------ tsconfig.docs.json | 2 +- tsconfig.json | 2 +- yarn.lock | 132 ++++++++++-------- 23 files changed, 182 insertions(+), 154 deletions(-) rename packages/{asset-did => asset-credentials}/README.md (59%) rename packages/{asset-did => asset-credentials}/package.json (74%) rename packages/{core/src/publicCredential => asset-credentials/src/credentials}/PublicCredential.chain.ts (94%) rename packages/{core/src/publicCredential => asset-credentials/src/credentials}/PublicCredential.spec.ts (92%) rename packages/{core/src/publicCredential => asset-credentials/src/credentials}/PublicCredential.ts (97%) rename packages/{core/src/publicCredential => asset-credentials/src/credentials}/index.ts (100%) rename packages/{asset-did/src/AssetDid.ts => asset-credentials/src/dids/index.ts} (100%) rename packages/{asset-did => asset-credentials}/src/index.ts (56%) rename packages/{asset-did => asset-credentials}/tsconfig.build.json (100%) rename packages/{asset-did => asset-credentials}/tsconfig.esm.json (100%) rename packages/{core/src/utils.ts => utils/src/Chain.ts} (85%) diff --git a/jest.config.js b/jest.config.js index 217a73a31..6eaca784e 100644 --- a/jest.config.js +++ b/jest.config.js @@ -39,7 +39,7 @@ const common = { '.chain.ts', 'SDKErrors.ts', 'Did.rpc.ts', - 'packages/core/src/utils.ts', + 'packages/utils/src/Chain.ts', // third party code copied to this repo 'packages/utils/src/json-schema/', 'jsonabc.ts', diff --git a/package.json b/package.json index 382204d5c..f5fcdeed3 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ ] }, "devDependencies": { + "@babel/core": "^7.22.10", "@babel/preset-env": "^7.20.2", "@commitlint/cli": "^9.0.1", "@commitlint/config-conventional": "^9.0.1", diff --git a/packages/asset-did/README.md b/packages/asset-credentials/README.md similarity index 59% rename from packages/asset-did/README.md rename to packages/asset-credentials/README.md index 565ef2068..1d334b1f0 100644 --- a/packages/asset-did/README.md +++ b/packages/asset-credentials/README.md @@ -2,10 +2,15 @@ ![Lint and Test](https://github.com/KILTprotocol/sdk-js/workflows/Lint%20and%20Test/badge.svg) -# Asset DIDs +# Asset Credentials + +A package for dealing with Asset DIDs and credentials. An Asset DID is a string uniquely identifying an asset regardless of the blochain they live on. +An Asset credential is a Verifiable Credential that can be issued by anyone, and that refers to an Asset. +It is publicly stored on the KILT blockchain and can be accessed by anyone. + For more information about Asset DIDs, please visit our [official documentation](https://github.com/KILTprotocol/spec-asset-did). ## Installation @@ -13,11 +18,11 @@ For more information about Asset DIDs, please visit our [official documentation] NPM: ``` -npm install @kiltprotocol/asset-did +npm install @kiltprotocol/asset-credentials ``` YARN: ``` -yarn add @kiltprotocol/asset-did +yarn add @kiltprotocol/asset-credentials ``` diff --git a/packages/asset-did/package.json b/packages/asset-credentials/package.json similarity index 74% rename from packages/asset-did/package.json rename to packages/asset-credentials/package.json index 0e18ba727..c363ed750 100644 --- a/packages/asset-did/package.json +++ b/packages/asset-credentials/package.json @@ -1,5 +1,5 @@ { - "name": "@kiltprotocol/asset-did", + "name": "@kiltprotocol/asset-credentials", "version": "0.33.2-6", "description": "", "main": "./lib/cjs/index.js", @@ -30,7 +30,14 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "dependencies": { + "@kiltprotocol/config": "workspace:*", + "@kiltprotocol/core": "workspace:*", + "@kiltprotocol/did": "workspace:*", "@kiltprotocol/types": "workspace:*", - "@kiltprotocol/utils": "workspace:*" + "@kiltprotocol/utils": "workspace:*", + "@polkadot/api": "^10.4.0", + "@polkadot/types": "^10.4.0", + "@polkadot/util": "^12.0.0", + "@polkadot/util-crypto": "^12.0.0" } } diff --git a/packages/core/src/publicCredential/PublicCredential.chain.ts b/packages/asset-credentials/src/credentials/PublicCredential.chain.ts similarity index 94% rename from packages/core/src/publicCredential/PublicCredential.chain.ts rename to packages/asset-credentials/src/credentials/PublicCredential.chain.ts index 3ffa1f196..d4d3db615 100644 --- a/packages/core/src/publicCredential/PublicCredential.chain.ts +++ b/packages/asset-credentials/src/credentials/PublicCredential.chain.ts @@ -25,11 +25,10 @@ import type { import { ConfigService } from '@kiltprotocol/config' import { fromChain as didFromChain } from '@kiltprotocol/did' -import { validateUri } from '@kiltprotocol/asset-did' -import { SDKErrors, cbor } from '@kiltprotocol/utils' +import { Chain as ChainUtils, SDKErrors, cbor } from '@kiltprotocol/utils' import { getIdForCredential } from './PublicCredential.js' -import { flattenCalls, isBatch, retrieveExtrinsicFromBlock } from '../utils.js' +import { validateUri } from '../dids/index.js' export interface EncodedPublicCredential { ctypeHash: CTypeHash @@ -130,7 +129,7 @@ function extractPublicCredentialCreationCallsFromDidCall( api: ApiPromise, call: Call ): Array> { - const extrinsicCalls = flattenCalls(api, call) + const extrinsicCalls = ChainUtils.flattenCalls(api, call) return extrinsicCalls.filter( (c): c is GenericCall => api.tx.publicCredentials.add.is(c) @@ -142,7 +141,7 @@ function extractDidCallsFromBatchCall( api: ApiPromise, call: Call ): Array> { - const extrinsicCalls = flattenCalls(api, call) + const extrinsicCalls = ChainUtils.flattenCalls(api, call) return extrinsicCalls.filter( (c): c is GenericCall => api.tx.did.submitDidCall.is(c) @@ -167,7 +166,7 @@ export async function fetchCredentialFromChain( ) const { blockNumber, revoked } = publicCredentialEntry.unwrap() - const extrinsic = await retrieveExtrinsicFromBlock( + const extrinsic = await ChainUtils.retrieveExtrinsicFromBlock( api, blockNumber, ({ events }) => @@ -184,7 +183,10 @@ export async function fetchCredentialFromChain( ) } - if (!isBatch(api, extrinsic) && !api.tx.did.submitDidCall.is(extrinsic)) { + if ( + !ChainUtils.isBatch(api, extrinsic) && + !api.tx.did.submitDidCall.is(extrinsic) + ) { throw new SDKErrors.PublicCredentialError( 'Extrinsic should be either a `did.submitDidCall` extrinsic or a batch with at least a `did.submitDidCall` extrinsic' ) @@ -192,7 +194,7 @@ export async function fetchCredentialFromChain( // If we're dealing with a batch, flatten any nested `submit_did_call` calls, // otherwise the extrinsic is itself a submit_did_call, so just take it. - const didCalls = isBatch(api, extrinsic) + const didCalls = ChainUtils.isBatch(api, extrinsic) ? extrinsic.args[0].flatMap((batchCall) => extractDidCallsFromBatchCall(api, batchCall) ) diff --git a/packages/core/src/publicCredential/PublicCredential.spec.ts b/packages/asset-credentials/src/credentials/PublicCredential.spec.ts similarity index 92% rename from packages/core/src/publicCredential/PublicCredential.spec.ts rename to packages/asset-credentials/src/credentials/PublicCredential.spec.ts index dca0722c6..29f3d53e9 100644 --- a/packages/core/src/publicCredential/PublicCredential.spec.ts +++ b/packages/asset-credentials/src/credentials/PublicCredential.spec.ts @@ -8,6 +8,7 @@ import { BN } from '@polkadot/util' import { ConfigService } from '@kiltprotocol/config' +import { CType } from '@kiltprotocol/core' import * as Did from '@kiltprotocol/did' import type { AssetDidUri, @@ -19,9 +20,7 @@ import type { import { Crypto } from '@kiltprotocol/utils' import { ApiMocks } from '../../../../tests/testUtils' -import * as CType from '../ctype' -import * as PublicCredential from '../publicCredential' -import { verifyAgainstCType } from './PublicCredential' +import * as PublicCredential from './PublicCredential.js' const devAlice = Crypto.makeKeypairFromUri('//Alice') const nftNameCType = CType.fromProperties('NFT collection name', { @@ -64,9 +63,13 @@ describe('Public credential fromClaim', () => { const builtCredential = buildCredential(assetIdentifier, { name: 'test-name', }) - expect(() => verifyAgainstCType(builtCredential, testCType)).not.toThrow() + expect(() => + PublicCredential.verifyAgainstCType(builtCredential, testCType) + ).not.toThrow() builtCredential.claims.name = 123 - expect(() => verifyAgainstCType(builtCredential, testCType)).toThrow() + expect(() => + PublicCredential.verifyAgainstCType(builtCredential, testCType) + ).toThrow() }) it('should fail to build a credential from missing claim contents', async () => { diff --git a/packages/core/src/publicCredential/PublicCredential.ts b/packages/asset-credentials/src/credentials/PublicCredential.ts similarity index 97% rename from packages/core/src/publicCredential/PublicCredential.ts rename to packages/asset-credentials/src/credentials/PublicCredential.ts index 51e39482c..9972b5aaa 100644 --- a/packages/core/src/publicCredential/PublicCredential.ts +++ b/packages/asset-credentials/src/credentials/PublicCredential.ts @@ -18,13 +18,13 @@ import type { PartialAssetClaim, } from '@kiltprotocol/types' +import { CType } from '@kiltprotocol/core' import { blake2AsHex } from '@polkadot/util-crypto' import { ConfigService } from '@kiltprotocol/config' -import * as AssetDid from '@kiltprotocol/asset-did' import * as Did from '@kiltprotocol/did' import { DataUtils, SDKErrors } from '@kiltprotocol/utils' -import { verifyClaimAgainstSchema } from '../ctype/CType.js' +import * as AssetDid from '../dids/index.js' import { toChain as publicCredentialToChain } from './PublicCredential.chain.js' /** @@ -110,7 +110,7 @@ export function verifyAgainstCType( credential: IPublicCredential, cType: ICType ): void { - verifyClaimAgainstSchema(credential.claims, cType) + CType.verifyClaimAgainstSchema(credential.claims, cType) } type VerifyOptions = { diff --git a/packages/core/src/publicCredential/index.ts b/packages/asset-credentials/src/credentials/index.ts similarity index 100% rename from packages/core/src/publicCredential/index.ts rename to packages/asset-credentials/src/credentials/index.ts diff --git a/packages/asset-did/src/AssetDid.ts b/packages/asset-credentials/src/dids/index.ts similarity index 100% rename from packages/asset-did/src/AssetDid.ts rename to packages/asset-credentials/src/dids/index.ts diff --git a/packages/asset-did/src/index.ts b/packages/asset-credentials/src/index.ts similarity index 56% rename from packages/asset-did/src/index.ts rename to packages/asset-credentials/src/index.ts index 9b1404adc..e9d8be7c3 100644 --- a/packages/asset-did/src/index.ts +++ b/packages/asset-credentials/src/index.ts @@ -5,4 +5,9 @@ * found in the LICENSE file in the root directory of this source tree. */ -export * from './AssetDid.js' +/** + * @module @kiltprotocol/asset-credentials + */ + +export * as AssetDids from './dids/index.js' +export * as PublicCredentials from './credentials/index.js' diff --git a/packages/asset-did/tsconfig.build.json b/packages/asset-credentials/tsconfig.build.json similarity index 100% rename from packages/asset-did/tsconfig.build.json rename to packages/asset-credentials/tsconfig.build.json diff --git a/packages/asset-did/tsconfig.esm.json b/packages/asset-credentials/tsconfig.esm.json similarity index 100% rename from packages/asset-did/tsconfig.esm.json rename to packages/asset-credentials/tsconfig.esm.json diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 706100457..c1b9149a2 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -42,6 +42,7 @@ "devDependencies": { "@polkadot/api": "^10.4.0", "@polkadot/typegen": "^10.4.0", + "@types/node": "^16.11.7", "glob": "^7.1.1", "rimraf": "^3.0.2", "ts-node": "^10.4.0", diff --git a/packages/core/package.json b/packages/core/package.json index aa0c0a8d1..24f4c0b16 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -36,7 +36,6 @@ "typescript": "^4.8.3" }, "dependencies": { - "@kiltprotocol/asset-did": "workspace:*", "@kiltprotocol/augment-api": "workspace:*", "@kiltprotocol/chain-helpers": "workspace:*", "@kiltprotocol/config": "workspace:*", diff --git a/packages/core/src/ctype/CType.chain.ts b/packages/core/src/ctype/CType.chain.ts index a765333eb..e46137a4c 100644 --- a/packages/core/src/ctype/CType.chain.ts +++ b/packages/core/src/ctype/CType.chain.ts @@ -15,7 +15,7 @@ import type { CTypeHash, DidUri, ICType } from '@kiltprotocol/types' import { ConfigService } from '@kiltprotocol/config' import * as Did from '@kiltprotocol/did' -import { SDKErrors } from '@kiltprotocol/utils' +import { Chain as ChainUtils, SDKErrors } from '@kiltprotocol/utils' import { getHashForSchema, @@ -24,7 +24,6 @@ import { serializeForHash, verifyDataStructure, } from './CType.js' -import { flattenCalls, isBatch, retrieveExtrinsicFromBlock } from '../utils.js' /** * Encodes the provided CType for use in `api.tx.ctype.add()`. @@ -123,7 +122,7 @@ function extractCTypeCreationCallsFromDidCall( api: ApiPromise, call: Call ): Array> { - const extrinsicCalls = flattenCalls(api, call) + const extrinsicCalls = ChainUtils.flattenCalls(api, call) return extrinsicCalls.filter( (c): c is GenericCall => api.tx.ctype.add.is(c) @@ -135,7 +134,7 @@ function extractDidCallsFromBatchCall( api: ApiPromise, call: Call ): Array> { - const extrinsicCalls = flattenCalls(api, call) + const extrinsicCalls = ChainUtils.flattenCalls(api, call) return extrinsicCalls.filter( (c): c is GenericCall => api.tx.did.submitDidCall.is(c) @@ -162,7 +161,7 @@ export async function fetchFromChain( 'Cannot fetch CType definitions on a chain that does not store the createdAt block' ) - const extrinsic = await retrieveExtrinsicFromBlock( + const extrinsic = await ChainUtils.retrieveExtrinsicFromBlock( api, createdAt, ({ events }) => @@ -179,7 +178,10 @@ export async function fetchFromChain( ) } - if (!isBatch(api, extrinsic) && !api.tx.did.submitDidCall.is(extrinsic)) { + if ( + !ChainUtils.isBatch(api, extrinsic) && + !api.tx.did.submitDidCall.is(extrinsic) + ) { throw new SDKErrors.PublicCredentialError( 'Extrinsic should be either a `did.submitDidCall` extrinsic or a batch with at least a `did.submitDidCall` extrinsic' ) @@ -187,7 +189,7 @@ export async function fetchFromChain( // If we're dealing with a batch, flatten any nested `submit_did_call` calls, // otherwise the extrinsic is itself a submit_did_call, so just take it. - const didCalls = isBatch(api, extrinsic) + const didCalls = ChainUtils.isBatch(api, extrinsic) ? extrinsic.args[0].flatMap((batchCall) => extractDidCallsFromBatchCall(api, batchCall) ) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 306f9914b..8eec5151d 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -15,7 +15,6 @@ export { BalanceUtils } from './balance/index.js' export * as Claim from './claim/index.js' export * as CType from './ctype/index.js' export { DelegationNode, DelegationNodeUtils } from './delegation/index.js' -export * as PublicCredential from './publicCredential/index.js' export { connect, disconnect, init } from './kilt/index.js' export { SDKErrors } from '@kiltprotocol/utils' diff --git a/packages/utils/package.json b/packages/utils/package.json index 988c3bf87..746b80e6a 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -37,6 +37,7 @@ "@kiltprotocol/types": "workspace:*", "@polkadot/api": "^10.4.0", "@polkadot/keyring": "^12.0.0", + "@polkadot/types": "^10.4.0", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0", "cbor-web": "^9.0.0", diff --git a/packages/core/src/utils.ts b/packages/utils/src/Chain.ts similarity index 85% rename from packages/core/src/utils.ts rename to packages/utils/src/Chain.ts index 12d3a420d..d4f135b13 100644 --- a/packages/core/src/utils.ts +++ b/packages/utils/src/Chain.ts @@ -7,7 +7,7 @@ import type { ApiPromise } from '@polkadot/api' import type { TxWithEvent } from '@polkadot/api-derive/types' -import type { GenericCall, GenericExtrinsic } from '@polkadot/types' +import type { GenericCall, GenericExtrinsic, Vec } from '@polkadot/types' import type { Call, Extrinsic } from '@polkadot/types/interfaces' import type { BN } from '@polkadot/util' @@ -22,17 +22,7 @@ import type { BN } from '@polkadot/util' export function isBatch( api: ApiPromise, extrinsic: Extrinsic | Call -): extrinsic is - | GenericExtrinsic< - | typeof api.tx.utility.batch.args - | typeof api.tx.utility.batchAll.args - | typeof api.tx.utility.forceBatch.args - > - | GenericCall< - | typeof api.tx.utility.batch.args - | typeof api.tx.utility.batchAll.args - | typeof api.tx.utility.forceBatch.args - > { +): extrinsic is GenericExtrinsic<[Vec]> | GenericCall<[Vec]> { return ( api.tx.utility.batch.is(extrinsic) || api.tx.utility.batchAll.is(extrinsic) || diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 30cbd3b3e..51051e9a9 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -11,6 +11,7 @@ export * as jsonabc from './jsonabc.js' +export * as Chain from './Chain.js' export * as Crypto from './Crypto.js' export * as UUID from './UUID.js' export * as DataUtils from './DataUtils.js' diff --git a/tests/integration/PublicCredentials.spec.ts b/tests/integration/PublicCredentials.spec.ts index f28799855..b6c93c949 100644 --- a/tests/integration/PublicCredentials.spec.ts +++ b/tests/integration/PublicCredentials.spec.ts @@ -17,7 +17,8 @@ import type { ApiPromise } from '@polkadot/api' import { BN } from '@polkadot/util' import { randomAsHex } from '@polkadot/util-crypto' -import { CType, disconnect, PublicCredential } from '@kiltprotocol/core' +import { PublicCredentials } from '@kiltprotocol/asset-credentials' +import { CType, disconnect } from '@kiltprotocol/core' import * as Did from '@kiltprotocol/did' import { UUID } from '@kiltprotocol/utils' @@ -49,7 +50,7 @@ async function issueCredential( ): Promise { const authorizedStoreTx = await Did.authorizeTx( attester.uri, - api.tx.publicCredentials.add(PublicCredential.toChain(credential)), + api.tx.publicCredentials.add(PublicCredentials.toChain(credential)), attesterKey.getSignCallback(attester), tokenHolder.address ) @@ -84,7 +85,7 @@ describe('When there is an attester and ctype NFT name', () => { subject: assetId, } await issueCredential(latestCredential) - const credentialId = PublicCredential.getIdForCredential( + const credentialId = PublicCredentials.getIdForCredential( latestCredential, attester.uri ) @@ -94,7 +95,7 @@ describe('When there is an attester and ctype NFT name', () => { ) expect(publicCredentialEntry.isSome).toBe(true) - const completeCredential = await PublicCredential.fetchCredentialFromChain( + const completeCredential = await PublicCredentials.fetchCredentialFromChain( credentialId ) @@ -120,7 +121,7 @@ describe('When there is an attester and ctype NFT name', () => { } await issueCredential(latestCredential) - const assetCredentials = await PublicCredential.fetchCredentialsFromChain( + const assetCredentials = await PublicCredentials.fetchCredentialsFromChain( assetId ) @@ -140,7 +141,8 @@ describe('When there is an attester and ctype NFT name', () => { delegationId: null, subject: assetId, } - const encodedPublicCredential = PublicCredential.toChain(latestCredential) + const encodedPublicCredential = + PublicCredentials.toChain(latestCredential) return api.tx.publicCredentials.add(encodedPublicCredential) }) const authorizedBatch = await Did.authorizeBatch({ @@ -152,7 +154,7 @@ describe('When there is an attester and ctype NFT name', () => { }) await submitTx(authorizedBatch, tokenHolder) - const assetCredentials = await PublicCredential.fetchCredentialsFromChain( + const assetCredentials = await PublicCredentials.fetchCredentialsFromChain( assetId ) @@ -161,15 +163,15 @@ describe('When there is an attester and ctype NFT name', () => { }) it('should be possible to revoke a credential', async () => { - const credentialId = PublicCredential.getIdForCredential( + const credentialId = PublicCredentials.getIdForCredential( latestCredential, attester.uri ) - let assetCredential = await PublicCredential.fetchCredentialFromChain( + let assetCredential = await PublicCredentials.fetchCredentialFromChain( credentialId ) const allAssetCredentialsBeforeRevocation = - await PublicCredential.fetchCredentialsFromChain(assetId) + await PublicCredentials.fetchCredentialsFromChain(assetId) // Verify that credential was not revoked before revocation expect(assetCredential.revoked).toBe(false) const revocationTx = api.tx.publicCredentials.revoke(credentialId, null) @@ -181,11 +183,11 @@ describe('When there is an attester and ctype NFT name', () => { ) await submitTx(authorizedTx, tokenHolder) - assetCredential = await PublicCredential.fetchCredentialFromChain( + assetCredential = await PublicCredentials.fetchCredentialFromChain( credentialId ) const allAssetCredentialsAfterRevocation = - await PublicCredential.fetchCredentialsFromChain(assetId) + await PublicCredentials.fetchCredentialsFromChain(assetId) expect(assetCredential.revoked).toBe(true) // Verify the number of credentials has not changed after revocation @@ -195,15 +197,15 @@ describe('When there is an attester and ctype NFT name', () => { }, 60_000) it('should be possible to unrevoke a credential', async () => { - const credentialId = PublicCredential.getIdForCredential( + const credentialId = PublicCredentials.getIdForCredential( latestCredential, attester.uri ) - let assetCredential = await PublicCredential.fetchCredentialFromChain( + let assetCredential = await PublicCredentials.fetchCredentialFromChain( credentialId ) const allAssetCredentialsBeforeRevocation = - await PublicCredential.fetchCredentialsFromChain(assetId) + await PublicCredentials.fetchCredentialsFromChain(assetId) // Verify that credential was revoked before un-revocation expect(assetCredential.revoked).toBe(true) @@ -215,11 +217,11 @@ describe('When there is an attester and ctype NFT name', () => { tokenHolder.address ) await submitTx(authorizedTx, tokenHolder) - assetCredential = await PublicCredential.fetchCredentialFromChain( + assetCredential = await PublicCredentials.fetchCredentialFromChain( credentialId ) const allAssetCredentialsAfterRevocation = - await PublicCredential.fetchCredentialsFromChain(assetId) + await PublicCredentials.fetchCredentialsFromChain(assetId) // Verify it is now not revoked anymore expect(assetCredential.revoked).toBe(false) @@ -230,7 +232,7 @@ describe('When there is an attester and ctype NFT name', () => { }, 60_000) it('should be possible to remove a credential', async () => { - const credentialId = PublicCredential.getIdForCredential( + const credentialId = PublicCredentials.getIdForCredential( latestCredential, attester.uri ) @@ -238,7 +240,7 @@ describe('When there is an attester and ctype NFT name', () => { credentialId ) const allAssetCredentialsBeforeRevocation = - await PublicCredential.fetchCredentialsFromChain(assetId) + await PublicCredentials.fetchCredentialsFromChain(assetId) // Verify that credential existed before removal expect(encodedAssetCredential.isNone).toBe(false) @@ -255,7 +257,7 @@ describe('When there is an attester and ctype NFT name', () => { credentialId ) const allAssetCredentialsAfterRevocation = - await PublicCredential.fetchCredentialsFromChain(assetId) + await PublicCredentials.fetchCredentialsFromChain(assetId) // Verify it is now removed expect(encodedAssetCredential.isNone).toBe(true) @@ -280,16 +282,16 @@ describe('When there is an issued public credential', () => { } await issueCredential(latestCredential) - const credentialId = PublicCredential.getIdForCredential( + const credentialId = PublicCredentials.getIdForCredential( latestCredential, attester.uri ) - credential = await PublicCredential.fetchCredentialFromChain(credentialId) + credential = await PublicCredentials.fetchCredentialFromChain(credentialId) }) it('should be successfully verified when another party receives it', async () => { await expect( - PublicCredential.verifyCredential(credential) + PublicCredentials.verifyCredential(credential) ).resolves.not.toThrow() }) @@ -297,7 +299,7 @@ describe('When there is an issued public credential', () => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { id, ...credentialWithoutId } = credential await expect( - PublicCredential.verifyCredential(credentialWithoutId as any) + PublicCredentials.verifyCredential(credentialWithoutId as any) ).rejects.toThrow() }) @@ -305,7 +307,7 @@ describe('When there is an issued public credential', () => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { cTypeHash, ...credentialWithoutCTypeHash } = credential await expect( - PublicCredential.verifyCredential(credentialWithoutCTypeHash as any) + PublicCredentials.verifyCredential(credentialWithoutCTypeHash as any) ).rejects.toThrow() }) @@ -316,7 +318,7 @@ describe('When there is an issued public credential', () => { '0x1122334455667788112233445566778811223344556677881122334455667788' as HexString, } await expect( - PublicCredential.verifyCredential(credentialWithDifferentCTypeHash) + PublicCredentials.verifyCredential(credentialWithDifferentCTypeHash) ).rejects.toThrow() }) @@ -327,7 +329,7 @@ describe('When there is an issued public credential', () => { '0x1122334455667788112233445566778811223344556677881122334455667788' as HexString, } await expect( - PublicCredential.verifyCredential(credentialWithDifferentDelegationId) + PublicCredentials.verifyCredential(credentialWithDifferentDelegationId) ).rejects.toThrow() }) @@ -335,7 +337,7 @@ describe('When there is an issued public credential', () => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { subject, ...credentialWithoutSubject } = credential await expect( - PublicCredential.verifyCredential(credentialWithoutSubject as any) + PublicCredentials.verifyCredential(credentialWithoutSubject as any) ).rejects.toThrow() }) @@ -346,7 +348,7 @@ describe('When there is an issued public credential', () => { 'did:asset:eip155:1.erc721:0x6d19295A5E47199D823D8793942b21a256ef1A4d' as AssetDidUri, } await expect( - PublicCredential.verifyCredential(credentialWithDifferentSubject) + PublicCredentials.verifyCredential(credentialWithDifferentSubject) ).rejects.toThrow() }) @@ -354,7 +356,7 @@ describe('When there is an issued public credential', () => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { claims, ...credentialWithoutClaims } = credential await expect( - PublicCredential.verifyCredential(credentialWithoutClaims as any) + PublicCredentials.verifyCredential(credentialWithoutClaims as any) ).rejects.toThrow() }) @@ -366,7 +368,7 @@ describe('When there is an issued public credential', () => { }, } await expect( - PublicCredential.verifyCredential(credentialWithDifferentSubject) + PublicCredentials.verifyCredential(credentialWithDifferentSubject) ).rejects.toThrow() }) @@ -374,7 +376,7 @@ describe('When there is an issued public credential', () => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { attester: att, ...credentialWithoutAttester } = credential await expect( - PublicCredential.verifyCredential(credentialWithoutAttester as any) + PublicCredentials.verifyCredential(credentialWithoutAttester as any) ).rejects.toThrow() }) @@ -384,14 +386,14 @@ describe('When there is an issued public credential', () => { attester: Did.getFullDidUri(devAlice.address), } await expect( - PublicCredential.verifyCredential(credentialWithDifferentAttester) + PublicCredentials.verifyCredential(credentialWithDifferentAttester) ).rejects.toThrow() }) // CType verification is actually broken it.skip('should not be verified when another party receives it if it does not match a provided ctype', async () => { await expect( - PublicCredential.verifyCredential(credential, { + PublicCredentials.verifyCredential(credential, { cType: CType.fromProperties('Test CType', { name: { type: 'string', @@ -405,7 +407,7 @@ describe('When there is an issued public credential', () => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { blockNumber, ...credentialWithoutBlockNumber } = credential await expect( - PublicCredential.verifyCredential(credentialWithoutBlockNumber as any) + PublicCredentials.verifyCredential(credentialWithoutBlockNumber as any) ).rejects.toThrow() }) @@ -415,7 +417,7 @@ describe('When there is an issued public credential', () => { blockNumber: new BN(99999), } await expect( - PublicCredential.verifyCredential(credentialWithDifferentBlockNumber) + PublicCredentials.verifyCredential(credentialWithDifferentBlockNumber) ).rejects.toThrow() }) @@ -423,7 +425,7 @@ describe('When there is an issued public credential', () => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { revoked, ...credentialWithoutRevocationInfo } = credential await expect( - PublicCredential.verifyCredential(credentialWithoutRevocationInfo as any) + PublicCredentials.verifyCredential(credentialWithoutRevocationInfo as any) ).rejects.toThrow() }) @@ -440,13 +442,13 @@ describe('When there is an issued public credential', () => { // credential has revoked: false, but it is now true await expect( - PublicCredential.verifyCredential(credential) + PublicCredentials.verifyCredential(credential) ).rejects.toThrow() }) it('should be successfully verified if the credential content is authentic even if the credential has been revoked', async () => { await expect( - PublicCredential.verifyCredential({ + PublicCredentials.verifyCredential({ ...credential, revoked: true, }) @@ -488,7 +490,7 @@ describe('When there is a batch which contains a credential creation', () => { const batchTx = api.tx.utility.batchAll([ await Did.authorizeTx( attester.uri, - api.tx.publicCredentials.add(PublicCredential.toChain(credential1)), + api.tx.publicCredentials.add(PublicCredentials.toChain(credential1)), attesterKey.getSignCallback(attester), tokenHolder.address, { txCounter: currentAttesterNonce.addn(1) } @@ -496,7 +498,7 @@ describe('When there is a batch which contains a credential creation', () => { api.tx.utility.batch([ await Did.authorizeTx( attester.uri, - api.tx.publicCredentials.add(PublicCredential.toChain(credential2)), + api.tx.publicCredentials.add(PublicCredentials.toChain(credential2)), attesterKey.getSignCallback(attester), tokenHolder.address, { txCounter: currentAttesterNonce.addn(2) } @@ -504,7 +506,9 @@ describe('When there is a batch which contains a credential creation', () => { api.tx.utility.forceBatch([ await Did.authorizeTx( attester.uri, - api.tx.publicCredentials.add(PublicCredential.toChain(credential3)), + api.tx.publicCredentials.add( + PublicCredentials.toChain(credential3) + ), attesterKey.getSignCallback(attester), tokenHolder.address, { txCounter: currentAttesterNonce.addn(3) } @@ -517,16 +521,16 @@ describe('When there is a batch which contains a credential creation', () => { it('should correctly parse the block and retrieve the original credentials', async () => { const retrievedCredentials = - await PublicCredential.fetchCredentialsFromChain(assetId) + await PublicCredentials.fetchCredentialsFromChain(assetId) expect(retrievedCredentials.length).toEqual(3) await expect( - PublicCredential.verifyCredential(retrievedCredentials[0]) + PublicCredentials.verifyCredential(retrievedCredentials[0]) ).resolves.not.toThrow() await expect( - PublicCredential.verifyCredential(retrievedCredentials[1]) + PublicCredentials.verifyCredential(retrievedCredentials[1]) ).resolves.not.toThrow() await expect( - PublicCredential.verifyCredential(retrievedCredentials[2]) + PublicCredentials.verifyCredential(retrievedCredentials[2]) ).resolves.not.toThrow() }) }) diff --git a/tsconfig.docs.json b/tsconfig.docs.json index 1a9740e2f..6dd82a73b 100644 --- a/tsconfig.docs.json +++ b/tsconfig.docs.json @@ -7,7 +7,7 @@ "packages/types/src/index.ts", "packages/augment-api/src/index.ts", "packages/utils/src/index.ts", - "packages/asset-did/src/index.ts", + "packages/asset-credentials/src/index.ts", "packages/config/src/index.ts", "packages/chain-helpers/src/index.ts", "packages/did/src/index.ts", diff --git a/tsconfig.json b/tsconfig.json index 7faeabab6..186eb2f1b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,6 +5,7 @@ "baseUrl": "./packages", "sourceMap": true, "paths": { + "@kiltprotocol/asset-credentials": ["asset-credentials/src"], "@kiltprotocol/chain-helpers": ["chain-helpers/src"], "@kiltprotocol/config": ["config/src"], "@kiltprotocol/core": ["core/src"], @@ -13,7 +14,6 @@ "@kiltprotocol/utils": ["utils/src"], "@kiltprotocol/vc-export": ["vc-export/src"], "@kiltprotocol/did": ["did/src"], - "@kiltprotocol/asset-did": ["asset-did/src"], "@kiltprotocol/docs": ["docs/src"], "@kiltprotocol/augment-api": ["augment-api/src"], "@kiltprotocol/augment-api/extraDefs": ["augment-api/src/interfaces/extraDefs"], diff --git a/yarn.lock b/yarn.lock index 6682b1f48..6f538c0ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,12 +24,13 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/code-frame@npm:7.22.5" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.10, @babel/code-frame@npm:^7.22.5": + version: 7.22.10 + resolution: "@babel/code-frame@npm:7.22.10" dependencies: - "@babel/highlight": ^7.22.5 - checksum: cfe804f518f53faaf9a1d3e0f9f74127ab9a004912c3a16fda07fb6a633393ecb9918a053cb71804204c1b7ec3d49e1699604715e2cfb0c9f7bc4933d324ebb6 + "@babel/highlight": ^7.22.10 + chalk: ^2.4.2 + checksum: 89a06534ad19759da6203a71bad120b1d7b2ddc016c8e07d4c56b35dea25e7396c6da60a754e8532a86733092b131ae7f661dbe6ba5d165ea777555daa2ed3c9 languageName: node linkType: hard @@ -40,38 +41,38 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": - version: 7.22.9 - resolution: "@babel/core@npm:7.22.9" +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/core@npm:7.22.10" dependencies: "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.22.5 - "@babel/generator": ^7.22.9 - "@babel/helper-compilation-targets": ^7.22.9 + "@babel/code-frame": ^7.22.10 + "@babel/generator": ^7.22.10 + "@babel/helper-compilation-targets": ^7.22.10 "@babel/helper-module-transforms": ^7.22.9 - "@babel/helpers": ^7.22.6 - "@babel/parser": ^7.22.7 + "@babel/helpers": ^7.22.10 + "@babel/parser": ^7.22.10 "@babel/template": ^7.22.5 - "@babel/traverse": ^7.22.8 - "@babel/types": ^7.22.5 + "@babel/traverse": ^7.22.10 + "@babel/types": ^7.22.10 convert-source-map: ^1.7.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.2 semver: ^6.3.1 - checksum: 7bf069aeceb417902c4efdaefab1f7b94adb7dea694a9aed1bda2edf4135348a080820529b1a300c6f8605740a00ca00c19b2d5e74b5dd489d99d8c11d5e56d1 + checksum: cc4efa09209fe1f733cf512e9e4bb50870b191ab2dee8014e34cd6e731f204e48476cc53b4bbd0825d4d342304d577ae43ff5fd8ab3896080673c343321acb32 languageName: node linkType: hard -"@babel/generator@npm:^7.22.7, @babel/generator@npm:^7.22.9, @babel/generator@npm:^7.7.2": - version: 7.22.9 - resolution: "@babel/generator@npm:7.22.9" +"@babel/generator@npm:^7.22.10, @babel/generator@npm:^7.7.2": + version: 7.22.10 + resolution: "@babel/generator@npm:7.22.10" dependencies: - "@babel/types": ^7.22.5 + "@babel/types": ^7.22.10 "@jridgewell/gen-mapping": ^0.3.2 "@jridgewell/trace-mapping": ^0.3.17 jsesc: ^2.5.1 - checksum: 7c9d2c58b8d5ac5e047421a6ab03ec2ff5d9a5ff2c2212130a0055e063ac349e0b19d435537d6886c999771aef394832e4f54cd9fc810100a7f23d982f6af06b + checksum: 59a79730abdff9070692834bd3af179e7a9413fa2ff7f83dff3eb888765aeaeb2bfc7b0238a49613ed56e1af05956eff303cc139f2407eda8df974813e486074 languageName: node linkType: hard @@ -94,18 +95,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.0, @babel/helper-compilation-targets@npm:^7.22.9": - version: 7.22.9 - resolution: "@babel/helper-compilation-targets@npm:7.22.9" +"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.0, @babel/helper-compilation-targets@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/helper-compilation-targets@npm:7.22.10" dependencies: "@babel/compat-data": ^7.22.9 "@babel/helper-validator-option": ^7.22.5 browserslist: ^4.21.9 lru-cache: ^5.1.1 semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: ea0006c6a93759025f4a35a25228ae260538c9f15023e8aac2a6d45ca68aef4cf86cfc429b19af9a402cbdd54d5de74ad3fbcf6baa7e48184dc079f1a791e178 + checksum: f6f1896816392bcff671bbe6e277307729aee53befb4a66ea126e2a91eda78d819a70d06fa384c74ef46c1595544b94dca50bef6c78438d9ffd31776dafbd435 languageName: node linkType: hard @@ -325,34 +324,34 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.22.6": - version: 7.22.6 - resolution: "@babel/helpers@npm:7.22.6" +"@babel/helpers@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/helpers@npm:7.22.10" dependencies: "@babel/template": ^7.22.5 - "@babel/traverse": ^7.22.6 - "@babel/types": ^7.22.5 - checksum: 5c1f33241fe7bf7709868c2105134a0a86dca26a0fbd508af10a89312b1f77ca38ebae43e50be3b208613c5eacca1559618af4ca236f0abc55d294800faeff30 + "@babel/traverse": ^7.22.10 + "@babel/types": ^7.22.10 + checksum: 3b1219e362df390b6c5d94b75a53fc1c2eb42927ced0b8022d6a29b833a839696206b9bdad45b4805d05591df49fc16b6fb7db758c9c2ecfe99e3e94cb13020f languageName: node linkType: hard -"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/highlight@npm:7.22.5" +"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/highlight@npm:7.22.10" dependencies: "@babel/helper-validator-identifier": ^7.22.5 - chalk: ^2.0.0 + chalk: ^2.4.2 js-tokens: ^4.0.0 - checksum: f61ae6de6ee0ea8d9b5bcf2a532faec5ab0a1dc0f7c640e5047fc61630a0edb88b18d8c92eb06566d30da7a27db841aca11820ecd3ebe9ce514c9350fbed39c4 + checksum: f714a1e1a72dd9d72f6383f4f30fd342e21a8df32d984a4ea8f5eab691bb6ba6db2f8823d4b4cf135d98869e7a98925b81306aa32ee3c429f8cfa52c75889e1b languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.22.5, @babel/parser@npm:^7.22.7": - version: 7.22.7 - resolution: "@babel/parser@npm:7.22.7" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.22.10, @babel/parser@npm:^7.22.5": + version: 7.22.10 + resolution: "@babel/parser@npm:7.22.10" bin: parser: ./bin/babel-parser.js - checksum: 02209ddbd445831ee8bf966fdf7c29d189ed4b14343a68eb2479d940e7e3846340d7cc6bd654a5f3d87d19dc84f49f50a58cf9363bee249dc5409ff3ba3dab54 + checksum: af51567b7d3cdf523bc608eae057397486c7fa6c2e5753027c01fe5c36f0767b2d01ce3049b222841326cc5b8c7fda1d810ac1a01af0a97bb04679e2ef9f7049 languageName: node linkType: hard @@ -1276,32 +1275,32 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.19.0, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.22.6, @babel/traverse@npm:^7.22.8": - version: 7.22.8 - resolution: "@babel/traverse@npm:7.22.8" +"@babel/traverse@npm:^7.19.0, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.22.10": + version: 7.22.10 + resolution: "@babel/traverse@npm:7.22.10" dependencies: - "@babel/code-frame": ^7.22.5 - "@babel/generator": ^7.22.7 + "@babel/code-frame": ^7.22.10 + "@babel/generator": ^7.22.10 "@babel/helper-environment-visitor": ^7.22.5 "@babel/helper-function-name": ^7.22.5 "@babel/helper-hoist-variables": ^7.22.5 "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/parser": ^7.22.7 - "@babel/types": ^7.22.5 + "@babel/parser": ^7.22.10 + "@babel/types": ^7.22.10 debug: ^4.1.0 globals: ^11.1.0 - checksum: a381369bc3eedfd13ed5fef7b884657f1c29024ea7388198149f0edc34bd69ce3966e9f40188d15f56490a5e12ba250ccc485f2882b53d41b054fccefb233e33 + checksum: 9f7b358563bfb0f57ac4ed639f50e5c29a36b821a1ce1eea0c7db084f5b925e3275846d0de63bde01ca407c85d9804e0efbe370d92cd2baaafde3bd13b0f4cdb languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.22.5, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.22.5 - resolution: "@babel/types@npm:7.22.5" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.5, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.22.10 + resolution: "@babel/types@npm:7.22.10" dependencies: "@babel/helper-string-parser": ^7.22.5 "@babel/helper-validator-identifier": ^7.22.5 to-fast-properties: ^2.0.0 - checksum: c13a9c1dc7d2d1a241a2f8363540cb9af1d66e978e8984b400a20c4f38ba38ca29f06e26a0f2d49a70bad9e57615dac09c35accfddf1bb90d23cd3e0a0bab892 + checksum: 095c4f4b7503fa816e4094113f0ec2351ef96ff32012010b771693066ff628c7c664b21c6bd3fb93aeb46fe7c61f6b3a3c9e4ed0034d6a2481201c417371c8af languageName: node linkType: hard @@ -1924,12 +1923,19 @@ __metadata: languageName: node linkType: hard -"@kiltprotocol/asset-did@workspace:*, @kiltprotocol/asset-did@workspace:packages/asset-did": +"@kiltprotocol/asset-credentials@workspace:packages/asset-credentials": version: 0.0.0-use.local - resolution: "@kiltprotocol/asset-did@workspace:packages/asset-did" + resolution: "@kiltprotocol/asset-credentials@workspace:packages/asset-credentials" dependencies: + "@kiltprotocol/config": "workspace:*" + "@kiltprotocol/core": "workspace:*" + "@kiltprotocol/did": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" + "@polkadot/api": ^10.4.0 + "@polkadot/types": ^10.4.0 + "@polkadot/util": ^12.0.0 + "@polkadot/util-crypto": ^12.0.0 languageName: unknown linkType: soft @@ -1940,6 +1946,7 @@ __metadata: "@kiltprotocol/type-definitions": "workspace:*" "@polkadot/api": ^10.4.0 "@polkadot/typegen": ^10.4.0 + "@types/node": ^16.11.7 glob: ^7.1.1 rimraf: ^3.0.2 ts-node: ^10.4.0 @@ -1979,7 +1986,6 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/core@workspace:packages/core" dependencies: - "@kiltprotocol/asset-did": "workspace:*" "@kiltprotocol/augment-api": "workspace:*" "@kiltprotocol/chain-helpers": "workspace:*" "@kiltprotocol/config": "workspace:*" @@ -2067,6 +2073,7 @@ __metadata: "@kiltprotocol/types": "workspace:*" "@polkadot/api": ^10.4.0 "@polkadot/keyring": ^12.0.0 + "@polkadot/types": ^10.4.0 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 cbor-web: ^9.0.0 @@ -3000,10 +3007,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*": - version: 17.0.22 - resolution: "@types/node@npm:17.0.22" - checksum: 72d1fc8bdc37f0c18b1160e7207b52fb569d0e2b459ac9a4cbd3ca40e478ffe1455efc2c6a253c81e0a7a7c7a899716535d9970cd9521f87d6050b7de04b9ba3 +"@types/node@npm:*, @types/node@npm:^16.11.7": + version: 16.18.40 + resolution: "@types/node@npm:16.18.40" + checksum: a683930491b4fd7cb2dc7684e32bbeedc4a83fb1949a7b15ea724fbfaa9988cec59091f169a3f1090cb91992caba8c1a7d50315b2c67c6e2579a3788bb09eec4 languageName: node linkType: hard @@ -4128,7 +4135,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^2.0.0": +"chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -8291,6 +8298,7 @@ fsevents@^2.3.2: version: 0.0.0-use.local resolution: "root-workspace-0b6124@workspace:." dependencies: + "@babel/core": ^7.22.10 "@babel/preset-env": ^7.20.2 "@commitlint/cli": ^9.0.1 "@commitlint/config-conventional": ^9.0.1 From 2f06e2f6d539ccebca44b6df7308ade420db3785 Mon Sep 17 00:00:00 2001 From: Adel Golghalyani <48685760+Ad96el@users.noreply.github.com> Date: Mon, 21 Aug 2023 14:37:37 +0200 Subject: [PATCH 075/130] refactor!: remove error types (#789) refactor: remove error types --- packages/utils/src/SDKErrors.ts | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/packages/utils/src/SDKErrors.ts b/packages/utils/src/SDKErrors.ts index 32dcb7814..205b96875 100644 --- a/packages/utils/src/SDKErrors.ts +++ b/packages/utils/src/SDKErrors.ts @@ -35,8 +35,6 @@ export class CTypeIdMismatchError extends SDKError { } } -export class CTypeUnknownPropertiesError extends SDKError {} - export class UnsupportedKeyError extends SDKError { constructor(keyType: string) { super(`The provided key type "${keyType}" is currently not supported`) @@ -103,8 +101,6 @@ export class ClaimContentsMalformedError extends SDKError {} export class ObjectUnverifiableError extends SDKError {} -export class QuoteUnverifiableError extends SDKError {} - export class ClaimNonceMapMalformedError extends SDKError { constructor(statement?: string) { if (statement) { @@ -115,8 +111,6 @@ export class ClaimNonceMapMalformedError extends SDKError { } } -export class UnknownMessageBodyTypeError extends SDKError {} - export class SignatureMalformedError extends SDKError {} export class DidSubjectMismatchError extends SDKError { @@ -159,18 +153,6 @@ export class CredentialUnverifiableError extends SDKError {} export class ClaimUnverifiableError extends SDKError {} -export class IdentityMismatchError extends SDKError { - constructor(context?: string, type?: string) { - if (type && context) { - super(`${type} is not owner of the ${context}`) - } else if (context) { - super(`Identity is not owner of the ${context}`) - } else { - super('Addresses expected to be equal mismatched') - } - } -} - export class SubscriptionsNotSupportedError extends SDKError { constructor(options?: ErrorOptions) { super( @@ -182,8 +164,6 @@ export class SubscriptionsNotSupportedError extends SDKError { export class RootHashUnverifiableError extends SDKError {} -export class DecodingMessageError extends SDKError {} - export class TimeoutError extends SDKError {} export class InvalidProofForStatementError extends SDKError { From 26751e61a5b101bfb95e6364e57e584d3b83b06a Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Tue, 22 Aug 2023 07:31:42 -0400 Subject: [PATCH 076/130] test: make tests work with new kilt node cli (#796) * test: make tests work with new kilt node cli * test: re-use integration test utils in bundle tests * test: bump runtime version in integration test switch condition --- tests/bundle/bundle.spec.ts | 11 ++--- tests/integration/ErrorHandler.spec.ts | 2 +- tests/integration/utils.ts | 56 +++++++++++++++++--------- 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/tests/bundle/bundle.spec.ts b/tests/bundle/bundle.spec.ts index 3ced1769f..76ca8a0e5 100644 --- a/tests/bundle/bundle.spec.ts +++ b/tests/bundle/bundle.spec.ts @@ -7,10 +7,11 @@ /// -import { GenericContainer, Wait, StartedTestContainer } from 'testcontainers' +import type { StartedTestContainer } from 'testcontainers' import { test, expect } from '@playwright/test' import url from 'url' import path from 'path' +import { getStartedTestContainer } from '../integration/utils.js' declare global { interface Window { @@ -24,13 +25,7 @@ const WS_PORT = 9944 test.beforeAll(async () => { // start dev node with testcontainers - testcontainer = await new GenericContainer( - process.env.TESTCONTAINERS_NODE_IMG || 'kiltprotocol/mashnet-node:latest' - ) - .withCommand(['--dev', `--ws-port=${WS_PORT}`, '--ws-external']) - .withExposedPorts({ container: WS_PORT, host: WS_PORT }) - .withWaitStrategy(Wait.forLogMessage(`:${WS_PORT}`)) - .start() + testcontainer = await getStartedTestContainer(WS_PORT) }) test('html bundle integration test', async ({ page }) => { diff --git a/tests/integration/ErrorHandler.spec.ts b/tests/integration/ErrorHandler.spec.ts index 611179e15..26f7a6e9e 100644 --- a/tests/integration/ErrorHandler.spec.ts +++ b/tests/integration/ErrorHandler.spec.ts @@ -46,7 +46,7 @@ beforeAll(async () => { it('records an extrinsic error when transferring less than the existential amount to new identity', async () => { const transferTx = api.tx.balances.transfer(addressFromRandom(), 1) const promise = submitTx(transferTx, paymentAccount) - if (api.runtimeVersion.specVersion.toBigInt() > 11_000n) { + if (api.runtimeVersion.specVersion.toBigInt() >= 11_200n) { await expect(promise).rejects.toMatchInlineSnapshot(` { "token": "BelowMinimum", diff --git a/tests/integration/utils.ts b/tests/integration/utils.ts index 3fa379a89..21f557358 100644 --- a/tests/integration/utils.ts +++ b/tests/integration/utils.ts @@ -26,30 +26,50 @@ import type { } from '@kiltprotocol/types' import { Crypto } from '@kiltprotocol/utils' -import { makeSigningKeyTool } from '../testUtils/index.js' +import { makeSigningKeyTool } from '../testUtils/TestUtils.js' export const EXISTENTIAL_DEPOSIT = new BN(10 ** 13) const ENDOWMENT = EXISTENTIAL_DEPOSIT.muln(10000) const WS_PORT = 9944 -async function getStartedTestContainer(): Promise { - try { - const image = - process.env.TESTCONTAINERS_NODE_IMG || 'kiltprotocol/mashnet-node' - console.log(`using testcontainer with image ${image}`) - const testcontainer = new GenericContainer(image) - .withCommand(['--dev', `--ws-port=${WS_PORT}`, '--ws-external']) - .withExposedPorts(WS_PORT) - .withWaitStrategy(Wait.forLogMessage(`:${WS_PORT}`)) - const started = await testcontainer.start() - return started - } catch (error) { - console.error( - 'Could not start the docker container via testcontainers, run with DEBUG=testcontainers* to debug' - ) - throw error +export async function getStartedTestContainer( + hostPort?: number +): Promise { + const image = + process.env.TESTCONTAINERS_NODE_IMG || 'kiltprotocol/mashnet-node' + console.log(`using testcontainer with image ${image}`) + const strategies = [ + ['--dev', '--ws-external', `--ws-port=${WS_PORT}`], + ['--dev', '--rpc-external', `--rpc-port=${WS_PORT}`], + ] + // eslint-disable-next-line no-restricted-syntax + for (const args of strategies) { + console.log(`attempting to launch container with arguments ${args}`) + try { + const testcontainer = new GenericContainer(image) + .withCommand(args) + .withExposedPorts( + typeof hostPort === 'number' + ? { host: hostPort, container: WS_PORT } + : WS_PORT + ) + .withWaitStrategy(Wait.forLogMessage(`:${WS_PORT}`)) + // eslint-disable-next-line no-await-in-loop + const started = await testcontainer.start() + console.log('container started and ready') + return started + } catch (error) { + console.warn( + 'Failed to start container due to the following error:\n', + error + ) + } } + console.error( + 'Could not start the docker container via testcontainers, run with DEBUG=testcontainers* to debug' + ) + throw new Error('CONTAINER LAUNCH ERROR') } async function buildConnection(wsEndpoint: string): Promise { @@ -69,7 +89,7 @@ export async function initializeApi(): Promise { return buildConnection(TEST_WS_ADDRESS) } const started = await getStartedTestContainer() - const port = started.getMappedPort(9944) + const port = started.getMappedPort(WS_PORT) const host = started.getHost() const WS_ADDRESS = `ws://${host}:${port}` console.log(`connecting to test container at ${WS_ADDRESS}`) From e130e0d08c1dfdb78dd4320dc1ffceb869e82e0d Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Tue, 22 Aug 2023 14:59:18 -0400 Subject: [PATCH 077/130] chore: merge release-0.34.0 back to develop (#797) --- .eslintrc.js | 2 +- jest.config.js | 2 +- package.json | 2 +- packages/asset-credentials/package.json | 6 +- packages/augment-api/metadata/spiritnet.json | 2 +- packages/augment-api/package.json | 2 +- .../src/interfaces/augment-api-consts.ts | 33 +- .../src/interfaces/augment-api-errors.ts | 28 +- .../src/interfaces/augment-api-events.ts | 46 +- .../src/interfaces/augment-api-query.ts | 16 +- .../src/interfaces/augment-api-runtime.ts | 12 +- .../src/interfaces/augment-api-tx.ts | 162 ++-- packages/augment-api/src/interfaces/lookup.ts | 841 +++++++++++------- .../augment-api/src/interfaces/registry.ts | 24 +- .../src/interfaces/types-lookup.ts | 782 +++++++++------- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/core/package.json | 2 +- packages/core/src/ctype/CType.chain.ts | 10 +- .../core/src/ctype/CType.metadata.spec.ts | 14 +- packages/core/src/ctype/CType.spec.ts | 10 +- packages/core/src/ctype/CType.ts | 12 +- packages/did/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- packages/vc-export/package.json | 2 +- packages/vc-export/src/KiltCredentialV1.ts | 2 +- tests/integration/Ctypes.spec.ts | 28 +- tests/integration/Did.spec.ts | 28 +- tests/integration/utils.ts | 4 +- yarn.lock | 2 + 33 files changed, 1270 insertions(+), 818 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index ab424d1f9..9952fe2a0 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -159,7 +159,7 @@ module.exports = { }, }, { - files: ['tests/**/*', 'packages/testing/**/*'], + files: ['tests/**/*'], rules: { 'import/extensions': 'off', 'jsdoc/require-jsdoc': 'off', diff --git a/jest.config.js b/jest.config.js index 6eaca784e..750171f1b 100644 --- a/jest.config.js +++ b/jest.config.js @@ -61,4 +61,4 @@ module.exports = { roots: ['/tests/breakingChanges'], }, ] -} \ No newline at end of file +} diff --git a/package.json b/package.json index f5fcdeed3..f9eda9b39 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,6 @@ "typedoc": "^0.23.0", "typescript": "^4.8.3" }, - "version": "0.33.2-6", + "version": "0.34.0", "packageManager": "yarn@3.3.1" } diff --git a/packages/asset-credentials/package.json b/packages/asset-credentials/package.json index c363ed750..ddb5bc0bf 100644 --- a/packages/asset-credentials/package.json +++ b/packages/asset-credentials/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/asset-credentials", - "version": "0.33.2-6", + "version": "0.34.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", @@ -29,6 +29,10 @@ "license": "BSD-4-Clause", "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", + "devDependencies": { + "rimraf": "^3.0.2", + "typescript": "^4.8.3" + }, "dependencies": { "@kiltprotocol/config": "workspace:*", "@kiltprotocol/core": "workspace:*", diff --git a/packages/augment-api/metadata/spiritnet.json b/packages/augment-api/metadata/spiritnet.json index cfe20b4e9..1d741a4cb 100644 --- a/packages/augment-api/metadata/spiritnet.json +++ b/packages/augment-api/metadata/spiritnet.json @@ -1 +1 @@ -{"result":"0x6d6574610ead07000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d6572731c0120526566436f756e7400012470726f7669646572731c0120526566436f756e7400012c73756666696369656e74731c0120526566436f756e740001106461746114012c4163636f756e7444617461000010000005060014083c70616c6c65745f62616c616e6365732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500012c6d6973635f66726f7a656e18011c42616c616e63650001286665655f66726f7a656e18011c42616c616e636500001800000507001c0000050500200c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540124000c01186e6f726d616c2401045400012c6f7065726174696f6e616c240104540001246d616e6461746f7279240104540000240c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6528010c75363400012870726f6f665f73697a6528010c75363400002800000610002c083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000030000002080034102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677338013c5665633c4469676573744974656d3e0000380000023c003c102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e00060024436f6e73656e7375730800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000400105365616c0800400144436f6e73656e737573456e67696e654964000030011c5665633c75383e000500144f74686572040030011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000400000030400000008004400000248004808306672616d655f73797374656d2c4576656e745265636f7264080445014c0454012c000c011470686173658902011450686173650001146576656e744c010445000118746f706963738d0201185665633c543e00004c08447370697269746e65745f72756e74696d653052756e74696d654576656e7400017c1853797374656d04005001706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c496e6469636573040074017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e0005002042616c616e636573040078017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000600485472616e73616374696f6e5061796d656e7404008001a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0007001c53657373696f6e040084015470616c6c65745f73657373696f6e3a3a4576656e740016004050617261636861696e5374616b696e67040088018470617261636861696e5f7374616b696e673a3a4576656e743c52756e74696d653e0015002444656d6f6372616379040090018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e001e001c436f756e63696c0400a401fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400b401fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020004c546563686e6963616c4d656d626572736869700400b801fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365313e0022002054726561737572790400bc017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0023001c5574696c6974790400c0015470616c6c65745f7574696c6974793a3a4576656e740028001c56657374696e670400c4017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e002900245363686564756c65720400c8018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e002a001450726f78790400d4017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002b0020507265696d6167650400e0017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e002c0038546970734d656d626572736869700400e401fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365323e002d0010546970730400e8016c70616c6c65745f746970733a3a4576656e743c52756e74696d653e002e00204d756c74697369670400ec017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e002f001443747970650400f4015463747970653a3a4576656e743c52756e74696d653e003d002c4174746573746174696f6e0400f8016c6174746573746174696f6e3a3a4576656e743c52756e74696d653e003e002844656c65676174696f6e04000501016864656c65676174696f6e3a3a4576656e743c52756e74696d653e003f000c44696404000d01014c6469643a3a4576656e743c52756e74696d653e004000244469644c6f6f6b757004001101018470616c6c65745f6469645f6c6f6f6b75703a3a4576656e743c52756e74696d653e00430024576562334e616d657304002101018470616c6c65745f776562335f6e616d65733a3a4576656e743c52756e74696d653e004400445075626c696343726564656e7469616c7304002d0101887075626c69635f63726564656e7469616c733a3a4576656e743c52756e74696d653e0045003c50617261636861696e53797374656d04009d0101bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0050002458636d7051756575650400a10101a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e0052002c506f6c6b61646f7458636d0400ad01016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e0053002843756d756c757358636d04008102018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e00540020446d7051756575650400850201a063756d756c75735f70616c6c65745f646d705f71756575653a3a4576656e743c52756e74696d653e00550000500c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5401304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7260013444697370617463684572726f7200013464697370617463685f696e666f5401304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e744964000110686173682c011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e540c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874240118576569676874000114636c6173735801344469737061746368436c617373000120706179735f6665655c0110506179730000580c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f7279000200005c0c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000060082873705f72756e74696d653444697370617463684572726f72000134144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040064012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400680128546f6b656e4572726f720007002841726974686d6574696304006c013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007001485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c000064082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7240018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000068082873705f72756e74696d6528546f6b656e4572726f7200011c1c4e6f46756e647300000020576f756c644469650001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f72746564000600006c083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000070082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000740c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909780c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001281c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e63655365740c010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e63650001207265736572766564180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475737c01185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909097c14346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000800c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909840c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e6465781c013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909880c4470617261636861696e5f7374616b696e671870616c6c6574144576656e74040454000154204e6577526f756e640800100138543a3a426c6f636b4e756d62657200001c013053657373696f6e496e6465780000088041206e6577207374616b696e6720726f756e642068617320737461727465642e785c5b626c6f636b206e756d6265722c20726f756e64206e756d6265725c5d50456e7465726564546f7043616e646964617465730400000130543a3a4163636f756e744964000108cc41206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d444c656674546f7043616e646964617465730400000130543a3a4163636f756e744964000208d8416e206163636f756e74207761732072656d6f7665642066726f6d2074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d604a6f696e6564436f6c6c61746f7243616e646964617465730800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000308e041206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620636f6c6c61746f722063616e646964617465732ebc5c5b6163636f756e742c20616d6f756e74207374616b656420627920746865206e65772063616e6469646174655c5d48436f6c6c61746f725374616b65644d6f72650c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00040801014120636f6c6c61746f722063616e6469646174652068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d48436f6c6c61746f725374616b65644c6573730c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00050801014120636f6c6c61746f722063616e64696461746520686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d54436f6c6c61746f725363686564756c6564457869740c001c013053657373696f6e496e6465780000000130543a3a4163636f756e74496400001c013053657373696f6e496e64657800061001014120636f6c6c61746f722063616e646964617465206861732073746172746564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e646964617465732e205c5b726f756e64206e756d6265722c20636f6c6c61746f722773206163636f756e742c20726f756e64206e756d626572207768656ee074686520636f6c6c61746f722077696c6c206265206566666563746976656c792072656d6f7665642066726f6d2074686520736574206f663063616e646964617465735c5d50436f6c6c61746f7243616e63656c6564457869740400000130543a3a4163636f756e74496400070c05014120636f6c6c61746f722063616e646964617465206861732063616e63656c6564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e6469646174657320616e6420776173206164646564206261636b20746f207468652063616e64696461746520706f6f6c2e205c5b636f6c6c61746f722773246163636f756e745c5d3443616e6469646174654c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000808cc416e206163636f756e7420686173206c6566742074686520736574206f6620636f6c6c61746f722063616e646964617465732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d3c436f6c6c61746f7252656d6f7665640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000908e4416e206163636f756e742077617320666f726365646c792072656d6f7665642066726f6d207468652020736574206f6620636f6c6c61746f72c863616e646964617465732e205c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d604d617843616e6469646174655374616b654368616e676564040018013042616c616e63654f663c543e000a08b4546865206d6178696d756d2063616e646964617465207374616b6520686173206265656e206368616e6765642e485c5b6e6577206d617820616d6f756e745c5d4c44656c656761746f725374616b65644d6f72651000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000b0cf0412064656c656761746f722068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d4c44656c656761746f725374616b65644c6573731000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000c0cf0412064656c656761746f7220686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d3444656c656761746f724c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000d08a8416e206163636f756e7420686173206c6566742074686520736574206f662064656c656761746f72732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d2844656c65676174696f6e1000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000e0cc8416e206163636f756e74206861732064656c6567617465642061206e657720636f6c6c61746f722063616e6469646174652e11015c5b6163636f756e742c20616d6f756e74206f662066756e6473207374616b65642c20746f74616c20616d6f756e74206f662064656c656761746f7273272066756e64738c7374616b656420666f722074686520636f6c6c61746f722063616e6469646174655c5d4844656c65676174696f6e5265706c616365641800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000f180d0141206e65772064656c65676174696f6e20686173207265706c6163656420616e206578697374696e67206f6e6520696e2074686520736574206f66206f6e676f696e67010164656c65676174696f6e7320666f72206120636f6c6c61746f722063616e6469646174652e205c5b6e65772064656c656761746f722773206163636f756e742c0901616d6f756e74206f662066756e6473207374616b656420696e20746865206e65772064656c65676174696f6e2c207265706c616365642064656c656761746f7227730d016163636f756e742c20616d6f756e74206f662066756e6473207374616b656420696e20746865207265706c6163652064656c65676174696f6e2c20636f6c6c61746f72050163616e6469646174652773206163636f756e742c206e657720746f74616c20616d6f756e74206f662064656c656761746f7273272066756e6473207374616b656470666f722074686520636f6c6c61746f722063616e6469646174655c5d5444656c656761746f724c656674436f6c6c61746f721000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00100cdc416e206163636f756e74206861732073746f707065642064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e09015c5b6163636f756e742c20636f6c6c61746f722063616e6469646174652773206163636f756e742c206f6c6420616d6f756e74206f662064656c656761746f727327d866756e6473207374616b65642c206e657720616d6f756e74206f662064656c656761746f7273272066756e6473207374616b65645c5d2052657761726465640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e001108c04120636f6c6c61746f72206f7220612064656c656761746f72206861732072656365697665642061207265776172642e745c5b6163636f756e742c20616d6f756e74206f66207265776172645c5d44526f756e64496e666c6174696f6e53657410008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00008c012c5065727175696e74696c6c00120c0501496e666c6174696f6e20636f6e66696775726174696f6e20666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e09015c5b6d6178696d756d20636f6c6c61746f722773207374616b696e6720726174652c206d6178696d756d20636f6c6c61746f7227732072657761726420726174652c0d016d6178696d756d2064656c656761746f722773207374616b696e6720726174652c206d6178696d756d2064656c656761746f7227732072657761726420726174655c5d604d617853656c656374656443616e6469646174657353657408001c010c75333200001c010c753332001308f0546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c656374656420696e20667574757265dc76616c69646174696f6e20726f756e647320686173206368616e6765642e205c5b6f6c642076616c75652c206e65772076616c75655c5d44426c6f636b73506572526f756e6453657410001c013053657373696f6e496e6465780000100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d62657200140cf8546865206c656e67746820696e20626c6f636b7320666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e01015c5b726f756e64206e756d6265722c20666972737420626c6f636b20696e207468652063757272656e7420726f756e642c206f6c642076616c75652c206e65771c76616c75655c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098c0c3473705f61726974686d65746963287065725f7468696e67732c5065727175696e74696c6c0000040010010c7536340000900c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001442050726f706f73656408013870726f706f73616c5f696e6465781c012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e6465781c012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e6465781c013c5265666572656e64756d496e6465780001247468726573686f6c64940134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e6465781c013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e6465781c013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e6465781c013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011048323536000114756e74696c100138543a3a426c6f636b4e756d62657200090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f686173682c011048323536000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e6465781c013c5265666572656e64756d496e646578000110766f74659801644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e6465781c012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e6465781c012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e2c4d657461646174615365740801146f776e6572a001344d657461646174614f776e6572043c4d65746164617461206f776e65722e0110686173682c0130507265696d616765486173680438507265696d61676520686173682e0e04d44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c65617265640801146f776e6572a001344d657461646174614f776e6572043c4d65746164617461206f776e65722e0110686173682c0130507265696d616765486173680438507265696d61676520686173682e0f04e44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e20636c65617265642e4c4d657461646174615472616e736665727265640c0128707265765f6f776e6572a001344d657461646174614f776e6572046050726576696f7573206d65746164617461206f776e65722e01146f776e6572a001344d657461646174614f776e6572044c4e6577206d65746164617461206f776e65722e0110686173682c0130507265696d616765486173680438507265696d61676520686173682e1004ac4d6574616461746120686173206265656e207472616e7366657272656420746f206e6577206f776e65722e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909940c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f7269747900020000980c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f74659c0110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e6365000100009c0c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000a00c4070616c6c65745f64656d6f6372616379147479706573344d657461646174614f776e657200010c2045787465726e616c0000002050726f706f73616c04001c012450726f70496e646578000100285265666572656e64756d04001c013c5265666572656e64756d496e64657800020000a40c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800013470726f706f73616c5f686173682c011c543a3a486173680001247468726573686f6c641c012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011c543a3a48617368000114766f746564a80110626f6f6c00010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74ac01384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74ac01384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f686173682c011c543a3a4861736800010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a80000050000ac0418526573756c7408045401b0044501600108084f6b0400b0000000000c4572720400600000010000b00000040000b40c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800013470726f706f73616c5f686173682c011c543a3a486173680001247468726573686f6c641c012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f686173682c011c543a3a48617368000114766f746564a80110626f6f6c00010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f686173682c011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74ac01384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f686173682c011c543a3a48617368000118726573756c74ac01384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f686173682c011c543a3a4861736800010c7965731c012c4d656d626572436f756e740001086e6f1c012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b80c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909bc0c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001242050726f706f73656404013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e6465781c013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e6465781c013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c00c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e6465781c010c7533320001146572726f7260013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7260013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74ac01384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c40c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c80c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736bcc016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d001404f7074696f6e3c5461736b4e616d653e000118726573756c74ac01384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736bcc016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d001404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736bcc016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d001404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736bcc016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d001404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652ecc00000408101c00d004184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000d40c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74ac01384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065d80130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e646578dc010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f686173682c013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200040450412070726f7879207761732072656d6f7665642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d808447370697269746e65745f72756e74696d652450726f7879547970650001180c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e63650002004050617261636861696e5374616b696e670003002c43616e63656c50726f7879000400484e6f6e4465706f736974436c61696d696e6700050000dc0000050400e00c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f746564040110686173682c011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e24526571756573746564040110686173682c011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c6561726564040110686173682c011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e40c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e80c2c70616c6c65745f746970731870616c6c6574144576656e74080454000449000114184e65775469700401207469705f686173682c011c543a3a486173680000049441206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e28546970436c6f73696e670401207469705f686173682c011c543a3a48617368000104d841207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e24546970436c6f7365640c01207469705f686173682c011c543a3a4861736800010c77686f000130543a3a4163636f756e7449640001187061796f757418013c42616c616e63654f663c542c20493e0002048441207469702073756767657374696f6e20686173206265656e20636c6f7365642e305469705265747261637465640401207469705f686173682c011c543a3a486173680003049041207469702073756767657374696f6e20686173206265656e207265747261637465642e28546970536c61736865640c01207469705f686173682c011c543a3a4861736800011866696e646572000130543a3a4163636f756e74496400011c6465706f73697418013c42616c616e63654f663c542c20493e0004048841207469702073756767657374696f6e20686173206265656e20736c61736865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ec0c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f0016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f0016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c74ac01384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e74f0016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f0083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e6465781c010c7533320000f40c1463747970651870616c6c6574144576656e74040454000108304354797065437265617465640800000144437479706543726561746f724f663c543e00002c01384374797065486173684f663c543e0000087441206e657720435479706520686173206265656e20637265617465642e885c5b63726561746f72206964656e7469666965722c20435479706520686173685c5d3043547970655570646174656404002c01384374797065486173684f663c543e000108ac496e666f726d6174696f6e2061626f7574206120435479706520686173206265656e20757064617465642e385c5b435479706520686173685c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f80c2c6174746573746174696f6e1870616c6c6574144576656e74040454000110484174746573746174696f6e43726561746564100000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00002c01384374797065486173684f663c543e0000fc01704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e0000088c41206e6577206174746573746174696f6e20686173206265656e20637265617465642e05015c5b61747465737465722049442c20636c61696d20686173682c20435479706520686173682c20286f7074696f6e616c292064656c65676174696f6e2049445c5d484174746573746174696f6e5265766f6b6564080000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00010880416e206174746573746174696f6e20686173206265656e207265766f6b65642e685c5b6163636f756e742069642c20636c61696d20686173685c5d484174746573746174696f6e52656d6f766564080000013441747465737465724f663c543e00002c0138436c61696d486173684f663c543e00020880416e206174746573746174696f6e20686173206265656e2072656d6f7665642e685c5b6163636f756e742069642c20636c61696d20686173685c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e00002c0138436c61696d486173684f663c543e0003080501546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e2e685c5b6163636f756e742069642c20636c61696d20686173685c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909fc04184f7074696f6e0404540101010108104e6f6e6500000010536f6d6504000101000001000001010c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c417574686f72697a6174696f6e4964043044656c65676174696f6e4964012c01042844656c65676174696f6e04002c013044656c65676174696f6e49640000000005010c2864656c65676174696f6e1870616c6c6574144576656e7404045400011c40486965726172636879437265617465640c0000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c01384374797065486173684f663c543e0000088441206e65772068696572617263687920686173206265656e20637265617465642ea05c5b63726561746f722049442c20726f6f74206e6f64652049442c20435459504520686173685c5d404869657261726368795265766f6b6564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00010874412068696572617263687920686173206265656e207265766f6b65642e705c5b7265766f6b65722049442c20726f6f74206e6f64652049445c5d4048696572617263687952656d6f766564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000208dc412068696572617263687920686173206265656e2072656d6f7665642066726f6d207468652073746f72616765206f6e20636861696e2e705c5b72656d6f7665722049442c20726f6f74206e6f64652049445c5d4444656c65676174696f6e43726561746564180000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000000014044656c656761746f7249644f663c543e00000901012c5065726d697373696f6e7300030c8841206e65772064656c65676174696f6e20686173206265656e20637265617465642efc5c5b63726561746f722049442c20726f6f74206e6f64652049442c2064656c65676174696f6e206e6f64652049442c20706172656e74206e6f64652049442c6864656c65676174652049442c207065726d697373696f6e735c5d4444656c65676174696f6e5265766f6b6564080000014044656c656761746f7249644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00040878412064656c65676174696f6e20686173206265656e207265766f6b65642e885c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d4444656c65676174696f6e52656d6f76656408000001384163636f756e7449644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e00050878412064656c65676174696f6e20686173206265656e2072656d6f7665642e885c5b72656d6f7665722049442c2064656c65676174696f6e206e6f64652049445c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e00002c015444656c65676174696f6e4e6f646549644f663c543e000608f8546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720612064656c65676174696f6eac737562747265652e205c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090909010c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368792c5065726d697373696f6e730000040110626974731c010c75333200000d010c0c6469641870616c6c6574144576656e74040454000110284469644372656174656408000001384163636f756e7449644f663c543e00000001484469644964656e7469666965724f663c543e0000086c41206e65772044494420686173206265656e20637265617465642e985c5b7472616e73616374696f6e207369676e65722c20444944206964656e7469666965725c5d284469645570646174656404000001484469644964656e7469666965724f663c543e0001085c412044494420686173206265656e20757064617465642e485c5b444944206964656e7469666965725c5d2844696444656c6574656404000001484469644964656e7469666965724f663c543e0002085c412044494420686173206265656e2064656c657465642e485c5b444944206964656e7469666965725c5d4444696443616c6c4469737061746368656408000001484469644964656e7469666965724f663c543e0000ac01384469737061746368526573756c74000308a041204449442d617574686f72697365642063616c6c20686173206265656e2065786563757465642e7c5c5b4449442063616c6c65722c20646973706174636820726573756c745c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090911010c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144576656e74040454000110584173736f63696174696f6e45737461626c69736865640800150101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000004f841206e6577206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e742049442077617320637265617465642e484173736f63696174696f6e52656d6f7665640800150101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000104ec416e206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e74204944207761732072656d6f7665642e444d6967726174696f6e50726f6772657373000204c454686572652077617320736f6d652070726f677265737320696e20746865206d6967726174696f6e2070726f636573732e484d6967726174696f6e436f6d706c65746564000304dc416c6c204163636f756e744964732068617665206265656e206d6967726174656420746f204c696e6b61626c654163636f756e7449642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090915010c4470616c6c65745f6469645f6c6f6f6b7570406c696e6b61626c655f6163636f756e74444c696e6b61626c654163636f756e7449640001082c4163636f756e744964323004001901012c4163636f756e74496432300000002c4163636f756e7449643332040000012c4163636f756e74496433320001000019010c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e742c4163636f756e7449643230000004001d0101205b75383b2032305d00001d0100000314000000080021010c4470616c6c65745f776562335f6e616d65731870616c6c6574144576656e740404540001103c576562334e616d65436c61696d65640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6525010134576562334e616d654f663c543e0000047041206e6577206e616d6520686173206265656e20636c61696d65642e40576562334e616d6552656c65617365640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6525010134576562334e616d654f663c543e0001046441206e616d6520686173206265656e2072656c65617365642e38576562334e616d6542616e6e65640401106e616d6525010134576562334e616d654f663c543e0002045c41206e616d6520686173206265656e2062616e6e65642e40576562334e616d65556e62616e6e65640401106e616d6525010134576562334e616d654f663c543e0003046441206e616d6520686173206265656e20756e62616e6e65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090925010c4470616c6c65745f776562335f6e616d657324776562335f6e616d65344173636969576562334e616d650404540000040029010180426f756e6465645665633c75382c20543a3a4d61784e616d654c656e6774683e000029010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00002d010c487075626c69635f63726564656e7469616c731870616c6c6574144576656e740404540001104043726564656e7469616c53746f7265640801287375626a6563745f696431010130543a3a5375626a65637449640488546865207375626a656374206f6620746865206e65772063726564656e7469616c2e013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0474546865206964206f6620746865206e65772063726564656e7469616c2e0004a041206e6577207075626c69632063726564656e7469616c20686173206265656e206973737565642e4443726564656e7469616c52656d6f7665640801287375626a6563745f696431010130543a3a5375626a65637449640498546865207375626a656374206f66207468652072656d6f7665642063726564656e7469616c2e013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0484546865206964206f66207468652072656d6f7665642063726564656e7469616c2e01049841207075626c69632063726564656e7469616c7320686173206265656e2072656d6f7665642e4443726564656e7469616c5265766f6b656404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e0484546865206964206f6620746865207265766f6b65642063726564656e7469616c2e02049441207075626c69632063726564656e7469616c20686173206265656e207265766f6b65642e4c43726564656e7469616c556e7265766f6b656404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e048c546865206964206f662074686520756e7265766f6b65642063726564656e7469616c2e03049c41207075626c69632063726564656e7469616c20686173206265656e20756e7265766f6b65642e0490546865206576656e74732067656e65726174656420627920746869732070616c6c65742e31010c3872756e74696d655f636f6d6d6f6e18617373657473204173736574446964000004003501013c41737365744964656e746966696572000035010c3c6b696c745f61737365745f646964730876312041737365744469640000080120636861696e5f69643901011c436861696e496400012061737365745f69646101011c4173736574496400003901103c6b696c745f61737365745f6469647314636861696e0876311c436861696e49640001141845697031353504003d01013c4569703135355265666572656e63650000001842697031323204004101016447656e657369734865784861736833325265666572656e63650001001c446f7473616d6104004101016447656e657369734865784861736833325265666572656e636500020018536f6c616e6104004901017047656e657369734261736535384861736833325265666572656e63650003001c47656e6572696304005101013847656e65726963436861696e4964000400003d01103c6b696c745f61737365745f6469647314636861696e0876313c4569703135355265666572656e6365000004001801107531323800004101103c6b696c745f61737365745f6469647314636861696e0876316447656e657369734865784861736833325265666572656e636500000400450101205b75383b2031365d000045010000031000000008004901103c6b696c745f61737365745f6469647314636861696e0876317047656e657369734261736535384861736833325265666572656e6365000004004d010170426f756e6465645665633c75382c20436f6e73745533323c33323e3e00004d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00005101103c6b696c745f61737365745f6469647314636861696e0876313847656e65726963436861696e496400000801246e616d6573706163655501015447656e65726963436861696e4e616d6573706163650001247265666572656e63655d01015447656e65726963436861696e5265666572656e636500005501103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e4e616d65737061636500000400590101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f434841494e5f4e414d4553504143455f4c454e4754485f5533323e3e000059010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00005d01103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e5265666572656e6365000004004d0101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f434841494e5f5245464552454e43455f4c454e4754485f5533323e3e00006101103c6b696c745f61737365745f646964731461737365740876311c4173736574496400011418536c6970343404006501013c536c697034345265666572656e636500000014457263323004007101018445766d536d617274436f6e747261637446756e6769626c655265666572656e63650001001845726337323104007501019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650002001c4572633131353504007501019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650003001c47656e6572696304008501013847656e6572696341737365744964000400006501103c6b696c745f61737365745f646964731461737365740876313c536c697034345265666572656e636500000400690101105532353600006901083c7072696d69746976655f74797065731055323536000004006d0101205b7536343b20345d00006d010000030400000010007101103c6b696c745f61737365745f646964731461737365740876318445766d536d617274436f6e747261637446756e6769626c655265666572656e6365000004001d0101205b75383b2032305d00007501103c6b696c745f61737365745f646964731461737365740876319045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e6365000008007101018445766d536d617274436f6e747261637446756e6769626c655265666572656e63650000790101b44f7074696f6e3c45766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e7469666965723e0000790104184f7074696f6e040454017d010108104e6f6e6500000010536f6d6504007d0100000100007d01103c6b696c745f61737365745f646964731461737365740876319445766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e74696669657200000400810101f4426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4944454e5449464945525f4c454e4754485f5533323e3e000081010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e00008501103c6b696c745f61737365745f646964731461737365740876313847656e657269634173736574496400000c01246e616d6573706163658901015447656e6572696341737365744e616d6573706163650001247265666572656e63658d01015447656e6572696341737365745265666572656e63650001086964950101784f7074696f6e3c47656e6572696341737365744964656e7469666965723e00008901103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365744e616d65737061636500000400590101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4e414d4553504143455f4c454e4754485f5533323e3e00008d01103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365745265666572656e636500000400910101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f5245464552454e43455f4c454e4754485f5533323e3e000091010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000950104184f7074696f6e0404540199010108104e6f6e6500000010536f6d650400990100000100009901103c6b696c745f61737365745f646964731461737365740876315847656e6572696341737365744964656e74696669657200000400810101f4426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4944454e5449464945525f4c454e4754485f5533323e3e00009d010c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e7404045400011c6056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d1c015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e4455706772616465417574686f72697a6564040124636f64655f686173682c011c543a3a486173680003047c416e207570677261646520686173206265656e20617574686f72697a65642e60446f776e776172644d657373616765735265636569766564040114636f756e741c010c7533320004040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564240118576569676874000120646d715f686561642c014472656c61795f636861696e3a3a48617368000504e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f68617368d0013c4f7074696f6e3c58636d486173683e000604b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a1010c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e7404045400011c1c537563636573730801306d6573736167655f68617368d0013c4f7074696f6e3c58636d486173683e00011877656967687424011857656967687400000464536f6d652058434d20776173206578656375746564206f6b2e104661696c0c01306d6573736167655f68617368d0013c4f7074696f6e3c58636d486173683e0001146572726f72a501012058636d4572726f7200011877656967687424011857656967687400010440536f6d652058434d206661696c65642e2842616456657273696f6e0401306d6573736167655f68617368d0013c4f7074696f6e3c58636d486173683e000204544261642058434d2076657273696f6e20757365642e24426164466f726d61740401306d6573736167655f68617368d0013c4f7074696f6e3c58636d486173683e000304504261642058434d20666f726d617420757365642e3c58636d704d65737361676553656e740401306d6573736167655f68617368d0013c4f7074696f6e3c58636d486173683e000404c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e484f766572776569676874456e71756575656410011873656e646572a901011850617261496400011c73656e745f61741c014052656c6179426c6f636b4e756d626572000114696e64657810013c4f766572776569676874496e6465780001207265717569726564240118576569676874000504d4416e2058434d2065786365656465642074686520696e646976696475616c206d65737361676520776569676874206275646765742e484f7665727765696768745365727669636564080114696e64657810013c4f766572776569676874496e646578000110757365642401185765696768740006044101416e2058434d2066726f6d20746865206f7665727765696768742071756575652077617320657865637574656420776974682074686520676976656e2061637475616c2077656967687420757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a501100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002401185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d697400270000a9010c48706f6c6b61646f745f70617261636861696e287072696d697469766573084964000004001c010c7533320000ad010c2870616c6c65745f78636d1870616c6c6574144576656e7404045400015c24417474656d707465640400b101015078636d3a3a6c61746573743a3a4f7574636f6d6500000ca8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e00345c5b206f7574636f6d65205c5d1053656e740c00b50101344d756c74694c6f636174696f6e0000b50101344d756c74694c6f636174696f6e0000d901011c58636d3c28293e00010c5c412058434d206d657373616765207761732073656e742e00885c5b206f726967696e2c2064657374696e6174696f6e2c206d657373616765205c5d48556e6578706563746564526573706f6e73650800b50101344d756c74694c6f636174696f6e000010011c517565727949640002145901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e73655265616479080010011c51756572794964000001020120526573706f6e73650003105d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e00485c5b2069642c20726573706f6e7365205c5d204e6f7469666965640c0010011c5175657279496400000801087538000008010875380004105901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d404e6f746966794f766572776569676874140010011c517565727949640000080108753800000801087538000024011857656967687400002401185765696768740005146101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20636f756c6441016e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e0019015c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e6465782c2061637475616c207765696768742c206d617820627564676574656420776569676874205c5d4c4e6f7469667944697370617463684572726f720c0010011c5175657279496400000801087538000008010875380006105501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d484e6f746966794465636f64654661696c65640c0010011c5175657279496400000801087538000008010875380007145101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d40496e76616c6964526573706f6e6465720c00b50101344d756c74694c6f636174696f6e000010011c517565727949640000250201544f7074696f6e3c4d756c74694c6f636174696f6e3e0008145901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e00b05c5b206f726967696e206c6f636174696f6e2c2069642c206578706563746564206c6f636174696f6e205c5d5c496e76616c6964526573706f6e64657256657273696f6e0800b50101344d756c74694c6f636174696f6e000010011c517565727949640009245101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e736554616b656e040010011c51756572794964000a0cc8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e00205c5b206964205c5d34417373657473547261707065640c002c0110483235360000b50101344d756c74694c6f636174696f6e00004502015056657273696f6e65644d756c7469417373657473000b0cb8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e00685c5b20686173682c206f726967696e2c20617373657473205c5d5456657273696f6e4368616e67654e6f7469666965640c00b50101344d756c74694c6f636174696f6e00001c012858636d56657273696f6e0000e501012c4d756c7469417373657473000c142501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e007c5c5b2064657374696e6174696f6e2c20726573756c742c20636f7374205c5d5c537570706f7274656456657273696f6e4368616e6765640800b50101344d756c74694c6f636174696f6e00001c012858636d56657273696f6e000d10390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e006c5c5b206c6f636174696f6e2c2058434d2076657273696f6e205c5d504e6f7469667954617267657453656e644661696c0c00b50101344d756c74694c6f636174696f6e000010011c517565727949640000a501012058636d4572726f72000e1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e007c5c5b206c6f636174696f6e2c2071756572792049442c206572726f72205c5d644e6f746966795461726765744d6967726174696f6e4661696c08007d02015856657273696f6e65644d756c74694c6f636174696f6e000010011c51756572794964000f1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e00605c5b206c6f636174696f6e2c207175657279204944205c5d54496e76616c69645175657269657256657273696f6e0800b50101344d756c74694c6f636174696f6e000010011c517565727949640010245501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d38496e76616c6964517565726965721000b50101344d756c74694c6f636174696f6e000010011c517565727949640000b50101344d756c74694c6f636174696f6e0000250201544f7074696f6e3c4d756c74694c6f636174696f6e3e0011145d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e0005015c5b206f726967696e206c6f636174696f6e2c2069642c20657870656374656420717565726965722c206d617962652061637475616c2071756572696572205c5d5056657273696f6e4e6f74696679537461727465640800b50101344d756c74694c6f636174696f6e0000e501012c4d756c74694173736574730012105901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d5856657273696f6e4e6f746966795265717565737465640800b50101344d756c74694c6f636174696f6e0000e501012c4d756c746941737365747300130c41015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e64732075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d6056657273696f6e4e6f74696679556e7265717565737465640800b50101344d756c74694c6f636174696f6e0000e501012c4d756c746941737365747300140c61015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d2046656573506169640800b50101344d756c74694c6f636174696f6e0000e501012c4d756c746941737365747300150c310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e006c5c5b20706179696e67206c6f636174696f6e2c2066656573205c5d34417373657473436c61696d65640c002c0110483235360000b50101344d756c74694c6f636174696f6e00004502015056657273696f6e65644d756c746941737365747300160cc0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e206173736574207472617000685c5b20686173682c206f726967696e2c20617373657473205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b101100c78636d087633187472616974731c4f7574636f6d6500010c20436f6d706c657465040024011857656967687400000028496e636f6d706c65746508002401185765696768740000a50101144572726f72000100144572726f720400a50101144572726f7200020000b501100c78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72b90101244a756e6374696f6e730000b901100c78636d087633246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400bd0101204a756e6374696f6e0001000858320800bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0002000858330c00bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0003000858341000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0004000858351400bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0005000858361800bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0006000858371c00bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0007000858382000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e0000bd0101204a756e6374696f6e00080000bd01100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400c101010c7533320000002c4163636f756e744964333208011c6e6574776f726bc50101444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bc50101444f7074696f6e3c4e6574776f726b49643e000114696e64657828010c753634000200304163636f756e744b6579323008011c6e6574776f726bc50101444f7074696f6e3c4e6574776f726b49643e00010c6b65791d0101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400cd010110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964d1010118426f6479496400011070617274d5010120426f6479506172740008003c476c6f62616c436f6e73656e7375730400c90101244e6574776f726b496400090000c1010000061c00c50104184f7074696f6e04045401c9010108104e6f6e6500000010536f6d650400c9010000010000c901100c78636d087633206a756e6374696f6e244e6574776f726b496400012824427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657210010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f696428010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090000cd010000061800d101100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040040011c5b75383b20345d00010014496e6465780400c101010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000d501100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74c101010c753332000100204672616374696f6e08010c6e6f6dc101010c75333200011464656e6f6dc101010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dc101010c75333200011464656e6f6dc101010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dc101010c75333200011464656e6f6dc101010c75333200040000d9010c0c78636d0876330c58636d041043616c6c00000400dd0101585665633c496e737472756374696f6e3c43616c6c3e3e0000dd01000002e10100e1010c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400e501012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400e501012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400e501012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f696428011c51756572794964000120726573706f6e736501020120526573706f6e73650001286d61785f77656967687424011857656967687400011c71756572696572250201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473e501012c4d756c746941737365747300012c62656e6566696369617279b50101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473e501012c4d756c746941737365747300011064657374b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64290201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737424011857656967687400011063616c6c2d02014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c101010c7533320001406d61785f6d6573736167655f73697a65c101010c7533320001306d61785f6361706163697479c101010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c101010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c101010c75333200011873656e646572c101010c753332000124726563697069656e74c101010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400b9010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400310201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473350201404d756c7469417373657446696c74657200012c62656e6566696369617279b50101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473350201404d756c7469417373657446696c74657200011064657374b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e000e003445786368616e676541737365740c011067697665350201404d756c7469417373657446696c74657200011077616e74e501012c4d756c746941737365747300011c6d6178696d616ca80110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473350201404d756c7469417373657446696c74657200011c72657365727665b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473350201404d756c7469417373657446696c74657200011064657374b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f310201445175657279526573706f6e7365496e666f000118617373657473350201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573ed0101284d756c746941737365740001307765696768745f6c696d69744102012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400d901012458636d3c43616c6c3e0015002c536574417070656e6469780400d901012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473e501012c4d756c74694173736574730001187469636b6574b50101344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f776569676874240118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400e501012c4d756c7469417373657473001c002c45787065637441737365740400e501012c4d756c7469417373657473001d00304578706563744f726967696e0400250201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400050201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304001d0201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6530011c5665633c75383e000134726573706f6e73655f696e666f310201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578c101010c7533320001106e616d6530011c5665633c75383e00012c6d6f64756c655f6e616d6530011c5665633c75383e00012c63726174655f6d616a6f72c101010c75333200013c6d696e5f63726174655f6d696e6f72c101010c753332002200505265706f72745472616e736163745374617475730400310201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400bd0101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bc90101244e6574776f726b496400012c64657374696e6174696f6eb9010154496e746572696f724d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e002600244c6f636b41737365740801146173736574ed0101284d756c74694173736574000120756e6c6f636b6572b50101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574ed0101284d756c74694173736574000118746172676574b50101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574ed0101284d756c746941737365740001146f776e6572b50101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574ed0101284d756c746941737365740001186c6f636b6572b50101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177a80110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400b50101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69744102012c5765696768744c696d6974000130636865636b5f6f726967696e250201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000e501100c78636d087633286d756c746961737365742c4d756c746941737365747300000400e901013c5665633c4d756c746941737365743e0000e901000002ed0100ed01100c78636d087633286d756c74696173736574284d756c7469417373657400000801086964f101011c4173736574496400010c66756ef501012c46756e676962696c6974790000f101100c78636d087633286d756c746961737365741c4173736574496400010820436f6e63726574650400b50101344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d00010000f501100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400cd010110753132380000002c4e6f6e46756e6769626c650400f90101344173736574496e7374616e636500010000f901100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400cd0101107531323800010018417272617934040040011c5b75383b20345d000200184172726179380400fd01011c5b75383b20385d0003001c417272617931360400450101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000fd0100000308000000080001020c0c78636d08763320526573706f6e7365000118104e756c6c000000184173736574730400e501012c4d756c74694173736574730001003c457865637574696f6e526573756c740400050201504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e04001c013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f04000d020198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c7404001d0201384d617962654572726f72436f646500050000050204184f7074696f6e0404540109020108104e6f6e6500000010536f6d650400090200000100000902000004081ca501000d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011102045300000400190201185665633c543e000011020c0c78636d0876332850616c6c6574496e666f0000180114696e646578c101010c7533320001106e616d6515020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d6515020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72c101010c7533320001146d696e6f72c101010c7533320001147061746368c101010c753332000015020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000019020000021102001d020c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f7204002102018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000100385472756e63617465644572726f7204002102018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e0002000021020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000250204184f7074696f6e04045401b5010108104e6f6e6500000010536f6d650400b501000001000029020c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d000300002d020c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656430011c5665633c75383e000031020c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6eb50101344d756c74694c6f636174696f6e00012071756572795f696428011c517565727949640001286d61785f77656967687424011857656967687400003502100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e6974650400e501012c4d756c74694173736574730000001057696c6404003902013857696c644d756c74694173736574000100003902100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f660801086964f101011c4173736574496400010c66756e3d02013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400c101010c75333200020030416c6c4f66436f756e7465640c01086964f101011c4173736574496400010c66756e3d02013c57696c6446756e676962696c697479000114636f756e74c101010c753332000300003d02100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000041020c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400240118576569676874000100004502080c78636d5056657273696f6e65644d756c746941737365747300010808563204004902013c76323a3a4d756c74694173736574730001000856330400e501013c76333a3a4d756c7469417373657473000300004902100c78636d087632286d756c746961737365742c4d756c7469417373657473000004004d02013c5665633c4d756c746941737365743e00004d020000025102005102100c78636d087632286d756c74696173736574284d756c74694173736574000008010869645502011c4173736574496400010c66756e7502012c46756e676962696c69747900005502100c78636d087632286d756c746961737365741c4173736574496400010820436f6e63726574650400590201344d756c74694c6f636174696f6e000000204162737472616374040030011c5665633c75383e000100005902100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f725d0201244a756e6374696f6e7300005d02100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e7300012410486572650000000858310400610201204a756e6374696f6e0001000858320800610201204a756e6374696f6e0000610201204a756e6374696f6e0002000858330c00610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0003000858341000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0004000858351400610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0005000858361800610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0006000858371c00610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0007000858382000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e0000610201204a756e6374696f6e000800006102100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400c101010c7533320000002c4163636f756e744964333208011c6e6574776f726b650201244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b650201244e6574776f726b4964000114696e64657828010c753634000200304163636f756e744b6579323008011c6e6574776f726b650201244e6574776f726b496400010c6b65791d0101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400cd010110753132380005002847656e6572616c4b65790400690201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c69747908010869646d020118426f647949640001107061727471020120426f6479506172740008000065020c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d65640400690201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d610003000069020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003001185665633c543e00006d020c0c78636d08763218426f6479496400012810556e6974000000144e616d65640400690201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400c101010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e0008002054726561737572790009000071020c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74c101010c753332000100204672616374696f6e08010c6e6f6dc101010c75333200011464656e6f6dc101010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dc101010c75333200011464656e6f6dc101010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dc101010c75333200011464656e6f6dc101010c753332000400007502100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400cd010110753132380000002c4e6f6e46756e6769626c650400790201344173736574496e7374616e6365000100007902100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400cd0101107531323800010018417272617934040040011c5b75383b20345d000200184172726179380400fd01011c5b75383b20385d0003001c417272617931360400450101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040030011c5665633c75383e000600007d02080c78636d5856657273696f6e65644d756c74694c6f636174696f6e00010808563204005902014476323a3a4d756c74694c6f636174696f6e0001000856330400b501014476333a3a4d756c74694c6f636174696f6e0003000081020c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d0000b101011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090985020c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144576656e7404045400011c34496e76616c6964466f726d61740401286d6573736167655f69640401244d657373616765496400000480446f776e77617264206d65737361676520697320696e76616c69642058434d2e48556e737570706f7274656456657273696f6e0401286d6573736167655f69640401244d6573736167654964000104bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e404578656375746564446f776e776172640801286d6573736167655f69640401244d657373616765496400011c6f7574636f6d65b101011c4f7574636f6d65000204c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e3c5765696768744578686175737465640c01286d6573736167655f69640401244d657373616765496400014072656d61696e696e675f77656967687424011857656967687400013c72657175697265645f776569676874240118576569676874000304f054686520776569676874206c696d697420666f722068616e646c696e6720646f776e77617264206d657373616765732077617320726561636865642e484f766572776569676874456e7175657565640c01286d6573736167655f69640401244d65737361676549640001406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800013c72657175697265645f7765696768742401185765696768740004041901446f776e77617264206d657373616765206973206f76657277656967687420616e642077617320706c6163656420696e20746865206f7665727765696768742071756575652e484f76657277656967687453657276696365640801406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800012c7765696768745f75736564240118576569676874000504e0446f776e77617264206d6573736167652066726f6d20746865206f766572776569676874207175657565207761732065786563757465642e504d61784d657373616765734578686175737465640401286d6573736167655f69640401244d6573736167654964000604b0546865206d6178696d756d206e756d626572206f6620646f776e77617264206d65737361676573207761732e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909890208306672616d655f73797374656d14506861736500010c384170706c7945787472696e73696304001c010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e000200008d020000022c009102000002cc00950208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ec101014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d659902016473705f72756e74696d653a3a52756e74696d65537472696e670000990200000502009d020c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b30011c5665633c75383e000010684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e0034232320436f6d706c6578697479202d20604f28312960387365745f686561705f7061676573040114706167657310010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646530011c5665633c75383e0002106453657420746865206e65772072756e74696d6520636f64652e0034232320436f6d706c657869747931012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f6465605c7365745f636f64655f776974686f75745f636865636b73040110636f646530011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0034232320436f6d706c65786974798c2d20604f2843296020776865726520604360206c656e677468206f662060636f6465602c7365745f73746f726167650401146974656d73a10201345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973a90201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697830010c4b657900011c7375626b6579731c010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b30011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea102000002a50200a50200000408303000a9020000023000ad020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2401185765696768740001246d61785f626c6f636b2401185765696768740001247065725f636c617373b10201845065724469737061746368436c6173733c57656967687473506572436c6173733e0000b1020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401b502000c01186e6f726d616cb50201045400012c6f7065726174696f6e616cb5020104540001246d616e6461746f7279b5020104540000b5020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632401185765696768740001346d61785f65787472696e736963b90201384f7074696f6e3c5765696768743e0001246d61785f746f74616cb90201384f7074696f6e3c5765696768743e0001207265736572766564b90201384f7074696f6e3c5765696768743e0000b90204184f7074696f6e04045401240108104e6f6e6500000010536f6d650400240000010000bd020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178c10201545065724469737061746368436c6173733c7533323e0000c1020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454011c000c01186e6f726d616c1c01045400012c6f7065726174696f6e616c1c0104540001246d616e6461746f72791c0104540000c502082873705f776569676874733c52756e74696d65446257656967687400000801107265616410010c753634000114777269746510010c7536340000c902082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d659902013452756e74696d65537472696e67000124696d706c5f6e616d659902013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e1c010c753332000130737065635f76657273696f6e1c010c753332000130696d706c5f76657273696f6e1c010c75333200011061706973cd02011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e1c010c75333200013473746174655f76657273696f6e08010875380000cd02040c436f7704045401d102000400d102000000d102000002d50200d50200000408fd011c00d9020c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c6574dd020c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77280124543a3a4d6f6d656e7400003c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee1020000040c0018a800e5020c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e6465780000309841737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e00dc5061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00f02d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e207472616e7366657208010c6e6577e90201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e6465780001305d0141737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6eb86973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0025012d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e1066726565040114696e64657810013c543a3a4163636f756e74496e646578000230944672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e005d015061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e000d012d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e0084456d6974732060496e646578467265656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e38666f7263655f7472616e736665720c010c6e6577e90201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65a80110626f6f6c0003345501466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c7265616479e868656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00a42d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e41012d2060667265657a65603a2069662073657420746f206074727565602c2077696c6c20667265657a652074686520696e64657820736f2069742063616e6e6f74206265207472616e736665727265642e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004304101467265657a6520616e20696e64657820736f2069742077696c6c20616c7761797320706f696e7420746f207468652073656e646572206163636f756e742e205468697320636f6e73756d657320746865206465706f7369742e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d757374206861766520616c6e6f6e2d66726f7a656e206163636f756e742060696e646578602e00ac2d2060696e646578603a2074686520696e64657820746f2062652066726f7a656e20696e20706c6163652e0088456d6974732060496e64657846726f7a656e60206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee9020c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801b0011408496404000001244163636f756e74496400000014496e6465780400ed0201304163636f756e74496e6465780001000c526177040030011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d0003002441646472657373323004001d0101205b75383b2032305d00040000ed02000006b000f1020c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909f5020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401f902045300000400010301185665633c543e0000f902083c70616c6c65745f62616c616e6365732c42616c616e63654c6f636b041c42616c616e63650118000c01086964fd0101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73fd02011c526561736f6e730000fd02083c70616c6c65745f62616c616e6365731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c000200000103000002f9020005030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540109030453000004000d0301185665633c543e00000903083c70616c6c65745f62616c616e6365732c52657365727665446174610844526573657276654964656e74696669657201fd011c42616c616e63650118000801086964fd010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e636500000d0300000209030011030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000118207472616e7366657208011064657374e90201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565cd010128543a3a42616c616e6365000058d45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e000501607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e0034232320436f6d706c657869747961012d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f7220696e70757420636f6e66696794202074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e31012d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c6578382020636f6d7075746174696f6e2e004852656c617465642066756e6374696f6e733a004d0120202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e290120202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c206361757365cc2020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e5d0120202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e5d0120202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c20636865636bdc202020207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e2c7365745f62616c616e63650c010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565cd010128543a3a42616c616e63650001306e65775f7265736572766564cd010128543a3a42616c616e636500012090536574207468652062616c616e636573206f66206120676976656e206163636f756e742e001d01546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c3101616c736f20616c7465722074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e6365602920617070726f7072696174656c792e1501496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742cfc69742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e38666f7263655f7472616e736665720c0118736f75726365e90201504163636f756e7449644c6f6f6b75704f663c543e00011064657374e90201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565cd010128543a3a42616c616e63650002144d0145786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265287370656369666965642e34232320436f6d706c65786974794d012d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e74206973206e6f747c2020617373756d656420746f20626520696e20746865206f7665726c61792e4c7472616e736665725f6b6565705f616c69766508011064657374e90201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565cd010128543a3a42616c616e63650003184d0153616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c207468653c6f726967696e206163636f756e742e00b8393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e00c05b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374e90201504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665a80110626f6f6c00044005015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746fd420206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e20232320436f6d706c657869747939012d204f2831292e204a757374206c696b65207472616e736665722c206275742072656164696e672074686520757365722773207472616e7366657261626c652062616c616e63652066697273742e3c666f7263655f756e7265736572766508010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e15030c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001203856657374696e6742616c616e63650000049856657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565544c69717569646974795265737472696374696f6e73000104c44163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304e856616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f736974244b656570416c6976650004048c5472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e745c4578697374696e6756657374696e675363686564756c65000504c8412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742c446561644163636f756e740006048842656e6566696369617279206163636f756e74206d757374207072652d65786973743c546f6f4d616e795265736572766573000704ac4e756d626572206f66206e616d656420726573657276657320657863656564204d6178526573657276657304b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090919030c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800001d03086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e740000000856320001000021030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540125030453000004002d0301185665633c543e00002503104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c6963000004002903013c737232353531393a3a5075626c6963000029030c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d00002d030000022503003103084873705f636f6e73656e7375735f736c6f747310536c6f740000040010010c75363400003503000002000039030000023d03003d030000040800410300410308447370697269746e65745f72756e74696d652c53657373696f6e4b657973000004011061757261250301c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c6963000045030000021c004903000004084d0330004d030c1c73705f636f72651863727970746f244b65795479706549640000040040011c5b75383b20345d000051030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579734103011c543a3a4b65797300011470726f6f6630011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e55030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e59030c4470617261636861696e5f7374616b696e6714747970657324526f756e64496e666f042c426c6f636b4e756d6265720110000c011c63757272656e741c013053657373696f6e496e646578000114666972737410012c426c6f636b4e756d6265720001186c656e67746810012c426c6f636b4e756d62657200005d030c4470617261636861696e5f7374616b696e671474797065734444656c65676174696f6e436f756e7465720000080114726f756e641c013053657373696f6e496e64657800011c636f756e7465721c010c753332000061030c4470617261636861696e5f7374616b696e67147479706573145374616b6508244163636f756e74496401001c42616c616e63650118000801146f776e65720001244163636f756e744964000118616d6f756e7418011c42616c616e6365000065030c4470617261636861696e5f7374616b696e671474797065732443616e6469646174650c244163636f756e74496401001c42616c616e63650118644d617844656c656761746f727350657243616e646964617465000014010869640001244163636f756e7449640001147374616b6518011c42616c616e636500012864656c656761746f727369030101014f7264657265645365743c5374616b653c4163636f756e7449642c2042616c616e63653e2c204d617844656c656761746f727350657243616e6469646174653e000114746f74616c18011c42616c616e63650001187374617475737503013c43616e646964617465537461747573000069030c4470617261636861696e5f7374616b696e670c736574284f7264657265645365740804540161030453000004006d030140426f756e6465645665633c542c20533e00006d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016103045300000400710301185665633c543e0000710300000261030075030c4470617261636861696e5f7374616b696e671474797065733c43616e646964617465537461747573000108184163746976650000001c4c656176696e6704001c013053657373696f6e496e6465780001000079030c4470617261636861696e5f7374616b696e6714747970657328546f74616c5374616b65041c42616c616e6365011800080124636f6c6c61746f727318011c42616c616e636500012864656c656761746f727318011c42616c616e636500007d030c4470617261636861696e5f7374616b696e670c736574284f72646572656453657408045401610304530000040081030140426f756e6465645665633c542c20533e000081030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016103045300000400710301185665633c543e000085030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e34496e666c6174696f6e496e666f0000080120636f6c6c61746f728903012c5374616b696e67496e666f00012464656c656761746f728903012c5374616b696e67496e666f000089030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e2c5374616b696e67496e666f00000801206d61785f726174658c012c5065727175696e74696c6c00012c7265776172645f726174658d0301285265776172645261746500008d030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e28526577617264526174650000080118616e6e75616c8c012c5065727175696e74696c6c0001247065725f626c6f636b8c012c5065727175696e74696c6c000091030c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601180453000004009503013842547265654d61703c4b2c20563e00009503042042547265654d617008044b011004560118000400990300000099030000029d03009d0300000408101800a1030c4470617261636861696e5f7374616b696e671870616c6c65741043616c6c0404540001543c666f7263655f6e65775f726f756e64000018d0466f7263657320746865207374617274206f6620746865206e657720726f756e6420696e20746865206e65787420626c6f636b2e00a0546865206e657720726f756e642077696c6c20626520656e666f7263656420766961203c54206173a453686f756c64456e6453657373696f6e3c5f3e3e3a3a73686f756c645f656e645f73657373696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e347365745f696e666c6174696f6e100170636f6c6c61746f725f6d61785f726174655f70657263656e746167658c012c5065727175696e74696c6c000198636f6c6c61746f725f616e6e75616c5f7265776172645f726174655f70657263656e746167658c012c5065727175696e74696c6c00017464656c656761746f725f6d61785f726174655f70657263656e746167658c012c5065727175696e74696c6c00019c64656c656761746f725f616e6e75616c5f7265776172645f726174655f70657263656e746167658c012c5065727175696e74696c6c00013cf05365742074686520616e6e75616c20696e666c6174696f6e207261746520746f20646572697665207065722d726f756e6420696e666c6174696f6e2e00110154686520696e666c6174696f6e2064657461696c732061726520636f6e736964657265642076616c69642069662074686520616e6e75616c207265776172642072617465f0697320617070726f78696d6174656c7920746865207065722d626c6f636b207265776172642072617465206d756c7469706c69656420627920746865ac657374696d617465642a20746f74616c206e756d626572206f6620626c6f636b732070657220796561722e00cc54686520657374696d61746564206176657261676520626c6f636b2074696d65206973207477656c7665207365636f6e64732e000d014e4f54453a204974657261746573206f7665722043616e646964617465506f6f6c20616e6420666f7220656163682063616e646964617465206f766572207468656972090164656c656761746f727320746f207570646174652074686569722072657761726473206265666f72652074686520726577617264207261746573206368616e67652ee04e6565647320746f20626520696d70726f766564207768656e207363616c696e6720757020604d6178546f7043616e64696461746573602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0068456d6974732060526f756e64496e666c6174696f6e536574602e6c7365745f6d61785f73656c65637465645f63616e6469646174657304010c6e65771c010c75333200022c090153657420746865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e6469646174657320746861742063616e2062652073656c6563746564a861742074686520626567696e6e696e67206f6620656163682076616c69646174696f6e20726f756e642e00e84368616e67657320617265206e6f74206170706c69656420756e74696c20746865207374617274206f6620746865206e65787420726f756e642e000d01546865206e65772076616c7565206d75737420626520686967686572207468616e20746865206d696e696d756d20616c6c6f7765642061732073657420696e207468655c70616c6c6574277320636f6e66696775726174696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0084456d69747320604d617853656c656374656443616e64696461746573536574602e507365745f626c6f636b735f7065725f726f756e6404010c6e6577100138543a3a426c6f636b4e756d62657200032cd453657420746865206e756d626572206f6620626c6f636b7320656163682076616c69646174696f6e20726f756e64206c617374732e000901496620746865206e65772076616c7565206973206c657373207468616e20746865206c656e677468206f66207468652063757272656e7420726f756e642c20746865050173797374656d2077696c6c20696d6d6564696174656c79206d6f766520746f20746865206e65787420726f756e6420696e20746865206e65787420626c6f636b2e000d01546865206e65772076616c7565206d75737420626520686967686572207468616e20746865206d696e696d756d20616c6c6f7765642061732073657420696e207468655c70616c6c6574277320636f6e66696775726174696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0068456d6974732060426c6f636b73506572526f756e64536574602e5c7365745f6d61785f63616e6469646174655f7374616b6504010c6e657718013042616c616e63654f663c543e000418110153657420746865206d6178696d616c20616d6f756e74206120636f6c6c61746f722063616e207374616b652e204578697374696e67207374616b657320617265206e6f74206368616e6765642e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0084456d69747320604d617843616e6469646174655374616b654368616e676564602e58666f7263655f72656d6f76655f63616e646964617465040120636f6c6c61746f72e902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650005300101466f726365646c792072656d6f766573206120636f6c6c61746f722063616e6469646174652066726f6d2074686520546f7043616e6469646174657320616e64e4636c6561727320616c6c206173736f6369617465642073746f7261676520666f72207468652063616e64696461746520616e642074686569722c64656c656761746f72732e00fc507265706172657320756e7374616b696e67206f66207468652063616e6469646174657320616e642074686569722064656c656761746f7273207374616b65f077686963682063616e20626520756e6c6f636b6564207669612060756e6c6f636b5f756e7374616b6564602061667465722077616974696e6720617409016c6561737420605374616b654475726174696f6e60206d616e7920626c6f636b732e20416c736f20696e6372656d656e7473207265776172647320666f722074686578636f6c6c61746f7220616e642074686569722064656c656761746f72732e00d4496e6372656d656e74732072657761726473206f662063616e64696461746520616e642074686569722064656c656761746f72732e0064456d697473206043616e64696461746552656d6f766564602e3c6a6f696e5f63616e646964617465730401147374616b6518013042616c616e63654f663c543e000644904a6f696e2074686520736574206f6620636f6c6c61746f722063616e646964617465732e00f8496e20746865206e65787420626c6f636b732c2069662074686520636f6c6c61746f722063616e6469646174652068617320656e6f7567682066756e6473fc7374616b656420746f20626520696e636c7564656420696e20616e79206f662074686520746f7020604d617853656c656374656443616e64696461746573600d01706f736974696f6e732c2069742077696c6c20626520696e636c7564656420696e2074686520736574206f6620706f74656e7469616c20617574686f72732074686174050177696c6c2062652073656c656374656420627920746865207374616b652d77656967687465642072616e646f6d2073656c656374696f6e2066756e6374696f6e2e00fc546865207374616b65642066756e6473206f6620746865206e657720636f6c6c61746f722063616e6469646174652061726520616464656420746f2074686568746f74616c207374616b65206f66207468652073797374656d2e00110154686520746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e2074686520616c6c6f7765642072616e67652061738873657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e00f0546865206469737061746368206f726967696e206d757374206e6f7420626520616c72656164792070617274206f662074686520636f6c6c61746f729463616e64696461746573206e6f72206f66207468652064656c656761746f7273207365742e0084456d69747320604a6f696e6564436f6c6c61746f7243616e64696461746573602e54696e69745f6c656176655f63616e6469646174657300076cc05265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e0005014f6e20737563636573732c20746865206163636f756e7420697320696d6d6564696174656c792072656d6f7665642066726f6d207468652063616e6469646174651101706f6f6c20746f2070726576656e742073656c656374696f6e206173206120636f6c6c61746f7220696e206675747572652076616c69646174696f6e20726f756e64732cd862757420756e7374616b696e67206f66207468652066756e6473206973206578656375746564207769746820612064656c6179206f665c605374616b654475726174696f6e6020626c6f636b732e00ac546865206578697420726571756573742063616e2062652072657665727365642062792063616c6c696e67686063616e63656c5f6c656176655f63616e64696461746573602e00f454686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e204974206973110175706461746564206576656e2074686f756768207468652066756e6473206f66207468652063616e6469646174652077686f207369676e616c656420746f206c65617665fc617265207374696c6c206c6f636b656420666f7220604578697444656c617960202b20605374616b654475726174696f6e60206d6f726520626c6f636b732e000d014e4f544520313a2055706f6e207374617274696e672061206e65772073657373696f6e5f6920696e20606e65775f73657373696f6e602c207468652063757272656e741101746f702063616e64696461746573206172652073656c656374656420746f20626520626c6f636b20617574686f727320666f722073657373696f6e5f692b312e20416e7905016368616e67657320746f2074686520746f702063616e64696461746573206166746572776172647320646f206e6f74206566666563742074686520736574206f6660617574686f727320666f722073657373696f6e5f692b312ed8546875732c207765206861766520746f206d616b652073757265206e6f6e65206f6620746865736520636f6c6c61746f72732063616ebc6c65617665206265666f72652073657373696f6e5f692b3120656e64732062792064656c6179696e67207468656972846578697420666f7220604578697444656c617960206d616e7920626c6f636b732e00f04e4f544520323a20576520646f206e6f7420696e6372656d656e74207265776172647320696e20746869732065787472696e73696320617320746865110163616e64696461746520636f756c64207374696c6c20617574686f7220626c6f636b732c20616e64207468757320626520656c696769626c6520746f2072656365697665ac726577617264732c20756e74696c2074686520656e64206f6620746865206e6578742073657373696f6e2e0078456d6974732060436f6c6c61746f725363686564756c656445786974602e60657865637574655f6c656176655f63616e64696461746573040120636f6c6c61746f72e902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500084405014578656375746520746865206e6574776f726b2065786974206f6620612063616e6469646174652077686f2072657175657374656420746f206c65617665206174f06c65617374206045786974517565756544656c61796020726f756e64732061676f2e20507265706172657320756e7374616b696e67206f6620746865fc63616e6469646174657320616e642074686569722064656c656761746f7273207374616b652077686963682063616e20626520756e6c6f636b656420766961f460756e6c6f636b5f756e7374616b6564602061667465722077616974696e67206174206c6561737420605374616b654475726174696f6e60206d616e791c626c6f636b732e00c05265717569726573207468652063616e64696461746520746f2070726576696f75736c7920686176652063616c6c65646060696e69745f6c656176655f63616e64696461746573602e00ac546865206578697420726571756573742063616e2062652072657665727365642062792063616c6c696e67686063616e63656c5f6c656176655f63616e64696461746573602e00fc4e4f54453a204974657261746573206f7665722043616e646964617465506f6f6c20666f7220656163682063616e646964617465206f766572207468656972fc64656c656761746f727320746f2073657420726577617264732e204e6565647320746f20626520696d70726f766564207768656e207363616c696e672075704c604d6178546f7043616e64696461746573602e0054456d6974732060436f6c6c61746f724c656674602e5c63616e63656c5f6c656176655f63616e646964617465730009200501526576657274207468652070726576696f75736c79207265717565737465642065786974206f6620746865206e6574776f726b206f66206120636f6c6c61746f720d0163616e6469646174652e204f6e20737563636573732c2061646473206261636b207468652063616e64696461746520746f2074686520546f7043616e6469646174657368616e6420757064617465732074686520636f6c6c61746f72732e00c05265717569726573207468652063616e64696461746520746f2070726576696f75736c7920686176652063616c6c65646060696e69745f6c656176655f63616e64696461746573602e0074456d6974732060436f6c6c61746f7243616e63656c656445786974602e5063616e6469646174655f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000a30a85374616b65206d6f72652066756e647320666f72206120636f6c6c61746f722063616e6469646174652e0001014966206e6f7420696e2074686520736574206f662063616e646964617465732c207374616b696e6720656e6f7567682066756e647320616c6c6f77732074686505016163636f756e7420746f20626520616464656420746f2069742e20546865206c617267657220616d6f756e74206f662066756e64732c2074686520686967686572dc6368616e63657320746f2062652073656c65637465642061732074686520617574686f72206f6620746865206e65787420626c6f636b2e00dc54686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e006c456d6974732060436f6c6c61746f725374616b65644d6f7265602e5063616e6469646174655f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000b3ca85374616b65206c6573732066756e647320666f72206120636f6c6c61746f722063616e6469646174652e000501496620746865206e657720616d6f756e74206f66207374616b65642066756e64206973206e6f74206c6172676520656e6f7567682c20746865206163636f756e74fc636f756c642062652072656d6f7665642066726f6d2074686520736574206f6620636f6c6c61746f722063616e6469646174657320616e64206e6f74206265a4636f6e7369646572656420666f7220617574686f72696e6720746865206e65787420626c6f636b732e00dc54686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e000d0154686520756e7374616b65642066756e647320617265206e6f742072656c656173656420696d6d6564696174656c7920746f20746865206163636f756e742c20627574d0746865792077696c6c20626520617661696c61626c6520616674657220605374616b654475726174696f6e6020626c6f636b732e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e006c456d6974732060436f6c6c61746f725374616b65644c657373602e3c6a6f696e5f64656c656761746f7273080120636f6c6c61746f72e902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e7418013042616c616e63654f663c543e000c5805014a6f696e2074686520736574206f662064656c656761746f72732062792064656c65676174696e6720746f206120636f6c6c61746f722063616e6469646174652e000501546865206163636f756e7420746861742077616e747320746f2064656c65676174652063616e6e6f742062652070617274206f662074686520636f6c6c61746f725c63616e64696461746573207365742061732077656c6c2e0009015468652063616c6c6572206d757374205f6e6f745f206861766520612064656c65676174696f6e2e20496620746861742069732074686520636173652c2074686579b061726520726571756972656420746f2066697273742072656d6f7665207468652064656c65676174696f6e2e00110154686520616d6f756e74207374616b6564206d757374206265206c6172676572207468616e20746865206d696e696d756d20726571756972656420746f206265636f6d65c4612064656c656761746f722061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e0009014173206f6e6c7920604d617844656c656761746f7273506572436f6c6c61746f72602061726520616c6c6f77656420746f2064656c6567617465206120676976656e0501636f6c6c61746f722c2074686520616d6f756e74207374616b6564206d757374206265206c6172676572207468616e20746865206c6f77657374206f6e6520696e01017468652063757272656e7420736574206f662064656c656761746f7220666f7220746865206f7065726174696f6e20746f206265206d65616e696e6766756c2e00090154686520636f6c6c61746f72277320746f74616c207374616b652061732077656c6c206173207468652070616c6c6574277320746f74616c207374616b652061726558696e63726561736564206163636f7264696e676c792e004c456d697473206044656c65676174696f6e602ebc456d697473206044656c65676174696f6e5265706c6163656460206966207468652063616e64696461746520686173f8604d617844656c656761746f7273506572436f6c6c61746f7260206d616e792064656c65676174696f6e732062757420746869732064656c656761746f72fc7374616b6564206d6f7265207468616e206f6e65206f6620746865206f746865722064656c656761746f7273206f6620746869732063616e6469646174652e406c656176655f64656c656761746f7273000d400d014c656176652074686520736574206f662064656c656761746f727320616e642c20627920696d706c69636174696f6e2c207265766f6b6520746865206f6e676f696e672c64656c65676174696f6e2e001101416c6c207374616b65642066756e647320617265206e6f7420756e6c6f636b656420696d6d6564696174656c792c2062757420746865792061726520616464656420746f0101746865207175657565206f662070656e64696e6720756e7374616b696e672c20616e642077696c6c206566666563746976656c792062652072656c65617365640901616674657220605374616b654475726174696f6e6020626c6f636b732066726f6d20746865206d6f6d656e74207468652064656c656761746f72206c65617665732e000d0154686973206f7065726174696f6e20726564756365732074686520746f74616c207374616b65206f66207468652070616c6c65742061732077656c6c2061732074686509017374616b6573206f6620616c6c20636f6c6c61746f7273207468617420776572652064656c6567617465642c20706f74656e7469616c6c7920616666656374696e6705017468656972206368616e63657320746f20626520696e636c7564656420696e2074686520736574206f662063616e6469646174657320696e20746865206e6578741c726f756e64732e0005014175746f6d61746963616c6c7920696e6372656d656e74732074686520616363756d756c617465642072657761726473206f6620746865206f726967696e206f665c7468652063757272656e742064656c65676174696f6e2e0058456d697473206044656c656761746f724c656674602e5064656c656761746f725f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000e18dc496e63726561736520746865207374616b6520666f722064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e0001014966206e6f7420696e2074686520736574206f662063616e646964617465732c207374616b696e6720656e6f7567682066756e647320616c6c6f77732074686594636f6c6c61746f722063616e64696461746520746f20626520616464656420746f2069742e0070456d697473206044656c656761746f725374616b65644d6f7265602e5064656c656761746f725f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000f40d452656475636520746865207374616b6520666f722064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e000901496620746865206e657720616d6f756e74206f66207374616b65642066756e64206973206e6f74206c6172676520656e6f7567682c2074686520636f6c6c61746f72fc636f756c642062652072656d6f7665642066726f6d2074686520736574206f6620636f6c6c61746f722063616e6469646174657320616e64206e6f74206265a4636f6e7369646572656420666f7220617574686f72696e6720746865206e65787420626c6f636b732e00090154686520756e7374616b65642066756e647320617265206e6f742072656c6561736520696d6d6564696174656c7920746f20746865206163636f756e742c20627574d0746865792077696c6c20626520617661696c61626c6520616674657220605374616b654475726174696f6e6020626c6f636b732e0001015468652072656d61696e696e67207374616b65642066756e6473206d757374207374696c6c206265206c6172676572207468616e20746865206d696e696d756df0726571756972656420627920746869732070616c6c657420746f206d61696e7461696e2074686520737461747573206f662064656c656761746f722e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e0070456d697473206044656c656761746f725374616b65644c657373602e3c756e6c6f636b5f756e7374616b6564040118746172676574e902018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365001028f4556e6c6f636b20616c6c2070726576696f75736c79207374616b65642066756e6473207468617420617265206e6f7720617661696c61626c6520666f720501756e6c6f636b696e6720627920746865206f726967696e206163636f756e7420616674657220605374616b654475726174696f6e6020626c6f636b73206861766520656c61707365642e00fc5765696768743a204f285529207768657265205520697320746865206e756d626572206f66206c6f636b656420756e7374616b696e6720726571756573747380626f756e64656420627920604d6178556e7374616b655265717565737473602eac2d2052656164733a205b4f726967696e204163636f756e745d2c20556e7374616b696e672c204c6f636b73682d205772697465733a20556e7374616b696e672c204c6f636b73e82d204b696c6c733a20556e7374616b696e672026204c6f636b73206966206e6f2062616c616e6365206973206c6f636b656420616e796d6f72652c23203c2f7765696768743e34636c61696d5f7265776172647300113cd4436c61696d20626c6f636b20617574686f72696e67207265776172647320666f72207468652074617267657420616464726573732e00090152657175697265732060526577617264736020746f20626520736574206265666f726568616e642c2077686963682063616e2062792074726967676572656420627970616e79206f662074686520666f6c6c6f77696e67206f7074696f6e73e82a2043616c6c696e6720696e6372656d656e745f7b636f6c6c61746f722c2064656c656761746f727d5f72657761726473202861637469766529782a20416c746572696e6720796f7572207374616b65202861637469766529b02a204c656176696e6720746865206e6574776f726b206173206120636f6c6c61746f72202861637469766529bc2a205265766f6b696e6720612064656c65676174696f6e20617320612064656c656761746f7220286163746976652909012a204265696e6720612064656c656761746f722077686f736520636f6c6c61746f72206c65667420746865206e6574776f726b2c20616c7465726564207468656972a020207374616b65206f7220696e6372656d656e746564207265776172647320287061737369766529000501546865206469737061746368206f726967696e2063616e20626520616e79207369676e6564206f6e652c20652e672e2c20616e796f6e652063616e20636c61696d2c666f7220616e796f6e652e0044456d69747320605265776172646564602e68696e6372656d656e745f636f6c6c61746f725f72657761726473001218b44163746976656c7920696e6372656d656e74207468652072657761726473206f66206120636f6c6c61746f722e0005015468652073616d652065666665637420697320747269676765726564206279206368616e67696e6720746865207374616b65206f72206c656176696e6720746865206e6574776f726b2e009c546865206469737061746368206f726967696e206d757374206265206120636f6c6c61746f722e6c696e6372656d656e745f64656c656761746f725f72657761726473001318b84163746976656c7920696e6372656d656e74207468652072657761726473206f6620612064656c656761746f722e00f85468652073616d652065666665637420697320747269676765726564206279206368616e67696e6720746865207374616b65206f72207265766f6b696e673064656c65676174696f6e732e00a0546865206469737061746368206f726967696e206d75737420626520612064656c656761746f722e7c657865637574655f7363686564756c65645f7265776172645f6368616e67650014280d0145786563757465732074686520616e6e75616c20726564756374696f6e206f66207468652072657761726420726174657320666f7220636f6c6c61746f727320616e642c64656c656761746f72732e00dc4d6f72656f7665722c2073657473207265776172647320666f7220616c6c20636f6c6c61746f727320616e642064656c656761746f72737c6265666f72652061646a757374696e672074686520696e666c6174696f6e2e000d01546865206469737061746368206f726967696e2063616e20626520616e79207369676e6564206f6e652062656361757365207765206261696c2069662063616c6c656428746f6f206561726c792e0068456d6974732060526f756e64496e666c6174696f6e536574602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea5030c4470617261636861696e5f7374616b696e671870616c6c6574144572726f7204045400017c4444656c656761746f724e6f74466f756e64000004b8546865206163636f756e74206973206e6f742070617274206f66207468652064656c656761746f7273207365742e4443616e6469646174654e6f74466f756e64000104dc546865206163636f756e74206973206e6f742070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3c44656c656761746f72457869737473000204c8546865206163636f756e7420697320616c72656164792070617274206f66207468652064656c656761746f7273207365742e3c43616e646964617465457869737473000304ec546865206163636f756e7420697320616c72656164792070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3056616c5374616b655a65726f000404e4546865206163636f756e7420747269656420746f207374616b65206d6f7265206f72206c657373207769746820616d6f756e74207a65726f2e4056616c5374616b6542656c6f774d696e0005080d01546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f20626520616464656420746f2074686520636f6c6c61746f723c63616e64696461746573207365742e4056616c5374616b6541626f76654d61780006041101546865206163636f756e742068617320616c7265616479207374616b656420746865206d6178696d756d20616d6f756e74206f662066756e647320706f737369626c652e4844656c65676174696f6e42656c6f774d696e000708f8546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f2064656c6567617465206120636f6c6c61746f722863616e6469646174652e38416c72656164794c656176696e670008080d0154686520636f6c6c61746f722063616e6469646174652068617320616c72656164792074726967676572207468652070726f6365737320746f206c65617665207468656c736574206f6620636f6c6c61746f722063616e646964617465732e284e6f744c656176696e67000908f454686520636f6c6c61746f722063616e6469646174652077616e74656420746f20657865637574652074686520657869742062757420686173206e6f74f472657175657374656420746f206c65617665206265666f72652062792063616c6c696e672060696e69745f6c656176655f63616e64696461746573602e3843616e6e6f744c65617665596574000a08dc54686520636f6c6c61746f7220747269656420746f206c65617665206265666f72652077616974696e67206174206c6561737420666f72746045786974517565756544656c617960206d616e7920726f756e64732e6443616e6e6f744a6f696e4265666f7265556e6c6f636b696e67000b10f8546865206163636f756e742068617320612066756c6c206c697374206f6620756e7374616b696e6720726571756573747320616e64206e6565647320746ffc756e6c6f636b206174206c65617374206f6e65206f66207468657365206265666f7265206265696e672061626c6520746f206a6f696e2028616761696e292edc4e4f54453a2043616e206f6e6c792068617070656e20696620746865206163636f756e742077617320612063616e646964617465206f72f464656c656761746f72206265666f726520616e642065697468657220676f74206b69636b6564206f722065786974656420766f6c756e746172696c792e44416c726561647944656c65676174696e67000c04e4546865206163636f756e7420697320616c72656164792064656c65676174696e672074686520636f6c6c61746f722063616e6469646174652e404e6f7459657444656c65676174696e67000d080901546865206163636f756e7420686173206e6f742064656c65676174656420616e7920636f6c6c61746f722063616e646964617465207965742c2068656e6365206974806973206e6f7420696e2074686520736574206f662064656c656761746f72732e6c44656c65676174696f6e73506572526f756e644578636565646564000e1811015468652064656c656761746f722068617320657863656564656420746865206e756d626572206f662064656c65676174696f6e732070657220726f756e6420776869636894697320657175616c20746f204d617844656c656761746f7273506572436f6c6c61746f722e000901546869732070726f746563747320616761696e73742061747461636b7320696e20776869636820612064656c656761746f722063616e2072652d64656c6567617465010166726f6d206120636f6c6c61746f722077686f2068617320616c726561647920617574686f726564206120626c6f636b2c20746f20616e6f74686572206f6e6570776869636820686173206e6f7420696e207468697320726f756e642e44546f6f4d616e7944656c656761746f7273000f14010154686520636f6c6c61746f722063616e6469646174652068617320616c7265616479207265616368656420746865206d6178696d756d206e756d626572206f662c64656c656761746f72732e00050154686973206572726f722069732067656e65726174656420696e20636173652061206e65772064656c65676174696f6e207265717565737420646f6573206e6f74f47374616b6520656e6f7567682066756e647320746f207265706c61636520736f6d65206f74686572206578697374696e672064656c65676174696f6e2e60546f6f466577436f6c6c61746f7243616e64696461746573001008110154686520736574206f6620636f6c6c61746f722063616e6469646174657320776f756c642066616c6c2062656c6f7720746865207265717569726564206d696e696d756d5469662074686520636f6c6c61746f72206c6566742e5043616e6e6f745374616b6549664c656176696e67001108f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66010163616e6469646174657320616e642063616e6e6f7420706572666f726d20616e79206f7468657220616374696f6e7320696e20746865206d65616e74696d652e5c43616e6e6f7444656c656761746549664c656176696e67001208f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66ac63616e6469646174657320616e6420746875732063616e6e6f742062652064656c65676174656420746f2e804d6178436f6c6c61746f727350657244656c656761746f72457863656564656400130811015468652064656c656761746f722068617320616c72656164792064656c65676174656420746865206d6178696d756d206e756d626572206f662063616e6469646174657320616c6c6f7765642e60416c726561647944656c656761746564436f6c6c61746f72001408ec5468652064656c656761746f722068617320616c72656164792070726576696f75736c792064656c6567617465642074686520636f6c6c61746f722863616e6469646174652e4844656c65676174696f6e4e6f74466f756e64001504f854686520676976656e2064656c65676174696f6e20646f6573206e6f7420657869737420696e2074686520736574206f662064656c65676174696f6e732e24556e646572666c6f77001608050154686520636f6c6c61746f722064656c6567617465206f72207468652064656c656761746f7220697320747279696e6720746f20756e2d7374616b65206d6f72658066756e64732074686174206172652063757272656e746c79207374616b65642e4443616e6e6f7453657441626f76654d6178001708d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738061626f766520746865206d6178696d756d2076616c756520616c6c6f7765642e4443616e6e6f7453657442656c6f774d696e001808d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738062656c6f7720746865206d696e696d756d2076616c756520616c6c6f7765642e3c496e76616c69645363686564756c65001904dc416e20696e76616c696420696e666c6174696f6e20636f6e66696775726174696f6e20697320747279696e6720746f206265207365742e3c4e6f4d6f7265556e7374616b696e67001a08c4546865207374616b696e6720726577617264206265696e6720756e6c6f636b656420646f6573206e6f742065786973742e7c4d617820756e6c6f636b696e6720726571756573747320726561636865642e20546f6f4561726c79001b0801015468652072657761726420726174652063616e6e6f742062652061646a75737465642079657420617320616e20656e74697265207965617220686173206e6f741c7061737365642e345374616b654e6f74466f756e64001c04d850726f7669646564207374616b65642076616c7565206973207a65726f2e2053686f756c64206e65766572206265207468726f776e2e40556e7374616b696e674973456d707479001d049443616e6e6f7420756e6c6f636b207768656e20556e7374616b656420697320656d7074792e3c526577617264734e6f74466f756e64001e047843616e6e6f7420636c61696d207265776172647320696620656d7074792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a9030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ad03045300000400750501185665633c543e0000ad030000040c1cb1030000b10310346672616d655f737570706f72741874726169747324707265696d616765731c426f756e64656404045401b503010c184c6567616379040110686173682c01104861736800000018496e6c696e65040091010134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173682c01104861736800010c6c656e1c010c75333200020000b50308447370697269746e65745f72756e74696d652c52756e74696d6543616c6c0001781853797374656d04009d0201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400dd0201b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c496e64696365730400e50201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e0005002042616c616e6365730400110301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0006001c53657373696f6e0400510301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0016004050617261636861696e5374616b696e670400a10301d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e5374616b696e672c2052756e74696d653e0015002444656d6f63726163790400b90301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e001e001c436f756e63696c0400c90301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e001f0048546563686e6963616c436f6d6d69747465650400d90301dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465652c2052756e74696d653e0020004c546563686e6963616c4d656d626572736869700400dd0301e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c4d656d626572736869702c2052756e74696d653e0022002054726561737572790400e10301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e0023001c5574696c6974790400e50301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e0028001c56657374696e6704000d0401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e002900245363686564756c65720400150401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e002a001450726f787904001d0401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002b0020507265696d6167650400250401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e002c0038546970734d656d626572736869700400290401cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970734d656d626572736869702c2052756e74696d653e002d00105469707304002d0401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970732c2052756e74696d653e002e00204d756c74697369670400310401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e002f001443747970650400390401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43747970652c2052756e74696d653e003d002c4174746573746174696f6e04003d0401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4174746573746174696f6e2c2052756e74696d653e003e002844656c65676174696f6e0400510401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656c65676174696f6e2c2052756e74696d653e003f000c44696404006d0401a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469642c2052756e74696d653e004000244469644c6f6f6b75700400c10401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469644c6f6f6b75702c2052756e74696d653e00430024576562334e616d65730400d10401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c576562334e616d65732c2052756e74696d653e004400445075626c696343726564656e7469616c730400d50401d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5075626c696343726564656e7469616c732c2052756e74696d653e0045003c50617261636861696e53797374656d0400e50401d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0050002458636d7051756575650400190501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e0052002c506f6c6b61646f7458636d04001d0501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e00530020446d7051756575650400710501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446d7051756575652c2052756e74696d653e00550000b9030c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c04045400014c1c70726f706f736508012070726f706f73616cb1030140426f756e64656443616c6c4f663c543e00011476616c7565cd01013042616c616e63654f663c543e0000249c50726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e001501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737480686176652066756e647320746f20636f76657220746865206465706f7369742e00d42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e15012d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e0044456d697473206050726f706f736564602e187365636f6e6404012070726f706f73616cc101012450726f70496e646578000118b45369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e64657211016d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e00c82d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e10766f74650801247265665f696e646578c101013c5265666572656e64756d496e646578000110766f74659801644163636f756e74566f74653c42616c616e63654f663c543e3e00021c3101566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3bb86f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00dc2d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e842d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e40656d657267656e63795f63616e63656c0401247265665f696e6465781c013c5265666572656e64756d496e6465780003204d015363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d652c7265666572656e64756d2e00f8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e00d02d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e003c5765696768743a20604f283129602e4065787465726e616c5f70726f706f736504012070726f706f73616cb1030140426f756e64656443616c6c4f663c543e0004182d015363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c2c7265666572656e64756d2e00e8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616cb1030140426f756e64656443616c6c4f663c543e00052c55015363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c655c616e2065787465726e616c207265666572656e64756d2e00ec546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f283129606065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616cb1030140426f756e64656443616c6c4f663c543e00062c45015363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f807363686564756c6520616e2065787465726e616c207265666572656e64756d2e00e8546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f2831296028666173745f747261636b0c013470726f706f73616c5f686173682c011048323536000134766f74696e675f706572696f64100138543a3a426c6f636b4e756d62657200011464656c6179100138543a3a426c6f636b4e756d6265720007404d015363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c65646101696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e65e8627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e00d0546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e00f42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e5d012d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f88094d75737420626520616c776179732067726561746572207468616e207a65726f2e350109466f72206046617374547261636b4f726967696e60206d75737420626520657175616c206f722067726561746572207468616e206046617374547261636b566f74696e67506572696f64602e51012d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265b82020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e0040456d697473206053746172746564602e00385765696768743a20604f28312960347665746f5f65787465726e616c04013470726f706f73616c5f686173682c011048323536000824b85665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e00d8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e002d012d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e003c456d69747320605665746f6564602e00fc5765696768743a20604f2856202b206c6f6728562929602077686572652056206973206e756d626572206f6620606578697374696e67207665746f657273604463616e63656c5f7265666572656e64756d0401247265665f696e646578c101013c5265666572656e64756d496e64657800091c5052656d6f76652061207265666572656e64756d2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e00d42d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e004423205765696768743a20604f283129602e2064656c65676174650c0108746fe90201504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6ebd030128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a50390144656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e742e0055015468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f7220746865c874696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a7420202d2062652064656c65676174696e6720616c72656164793b206f72590120202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f7665642f636f6e736f6c69646174656494202020207468726f7567682060726561705f766f746560206f722060756e766f746560292e0045012d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e55012d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e20746865410120206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e61012d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d757374206e6f74b420206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e0048456d697473206044656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e28756e64656c6567617465000b30cc556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e742e005d01546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f64dc6f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e20776173206973737565642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062655463757272656e746c792064656c65676174696e672e0050456d6974732060556e64656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e58636c6561725f7075626c69635f70726f706f73616c73000c1470436c6561727320616c6c207075626c69632070726f706f73616c732e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e003c5765696768743a20604f283129602e18756e6c6f636b040118746172676574e90201504163636f756e7449644c6f6f6b75704f663c543e000d1ca0556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00b82d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e00bc5765696768743a20604f2852296020776974682052206e756d626572206f6620766f7465206f66207461726765742e2c72656d6f76655f766f7465040114696e6465781c013c5265666572656e64756d496e646578000e6c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e000c49663a882d20746865207265666572656e64756d207761732063616e63656c6c65642c206f727c2d20746865207265666572656e64756d206973206f6e676f696e672c206f72902d20746865207265666572656e64756d2068617320656e64656420737563682074686174fc20202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f72d420202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f728420202d20746865206163636f756e74206d61646520612073706c697420766f74655d012e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72655866756e6473206265696e6720617661696c61626c652e00a849662c20686f77657665722c20746865207265666572656e64756d2068617320656e64656420616e643aec2d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64dc2d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64bc2d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f76657259012e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c766559012a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756de46f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e004901546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465887265676973746572656420666f72207265666572656e64756d2060696e646578602e00f42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e4472656d6f76655f6f746865725f766f7465080118746172676574e90201504163636f756e7449644c6f6f6b75704f663c543e000114696e6465781c013c5265666572656e64756d496e646578000f3c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e004d0149662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f2d016072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c5501656974686572206265636175736520746865207265666572656e64756d207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f737420746865207265666572656e64756d206f7298626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e004d012d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f725420207265666572656e64756d2060696e646578602ef42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e24626c61636b6c69737408013470726f706f73616c5f686173682c01104832353600013c6d617962655f7265665f696e646578c103015c4f7074696f6e3c5265666572656e64756d496e6465783e00103c45015065726d616e656e746c7920706c61636520612070726f706f73616c20696e746f2074686520626c61636b6c6973742e20546869732070726576656e74732069742066726f6d2065766572206265696e673c70726f706f73656420616761696e2e00510149662063616c6c6564206f6e206120717565756564207075626c6963206f722065787465726e616c2070726f706f73616c2c207468656e20746869732077696c6c20726573756c7420696e206974206265696e67510172656d6f7665642e2049662074686520607265665f696e6465786020737570706c69656420697320616e20616374697665207265666572656e64756d2077697468207468652070726f706f73616c20686173682c687468656e2069742077696c6c2062652063616e63656c6c65642e00ec546865206469737061746368206f726967696e206f6620746869732063616c6c206d7573742062652060426c61636b6c6973744f726967696e602e00f82d206070726f706f73616c5f68617368603a205468652070726f706f73616c206861736820746f20626c61636b6c697374207065726d616e656e746c792e45012d20607265665f696e646578603a20416e206f6e676f696e67207265666572656e64756d2077686f73652068617368206973206070726f706f73616c5f68617368602c2077686963682077696c6c2062652863616e63656c6c65642e0041015765696768743a20604f28702960202874686f756768206173207468697320697320616e20686967682d70726976696c6567652064697370617463682c20776520617373756d65206974206861732061502020726561736f6e61626c652076616c7565292e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578c101012450726f70496e64657800111c4852656d6f766520612070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c50726f706f73616c4f726967696e602e00d02d206070726f705f696e646578603a2054686520696e646578206f66207468652070726f706f73616c20746f2063616e63656c2e00e45765696768743a20604f28702960207768657265206070203d205075626c696350726f70733a3a3c543e3a3a6465636f64655f6c656e282960307365745f6d657461646174610801146f776e6572a001344d657461646174614f776e65720001286d617962655f68617368c50301504f7074696f6e3c507265696d616765486173683e00123cd8536574206f7220636c6561722061206d65746164617461206f6620612070726f706f73616c206f722061207265666572656e64756d2e002c506172616d65746572733acc2d20606f726967696e603a204d75737420636f72726573706f6e6420746f2074686520604d657461646174614f776e6572602e3d01202020202d206045787465726e616c4f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053757065724d616a6f72697479417070726f766560402020202020207468726573686f6c642e5901202020202d206045787465726e616c44656661756c744f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053757065724d616a6f72697479416761696e737460402020202020207468726573686f6c642e4501202020202d206045787465726e616c4d616a6f726974794f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053696d706c654d616a6f7269747960402020202020207468726573686f6c642ec8202020202d20605369676e65646020627920612063726561746f7220666f722061207075626c69632070726f706f73616c2ef4202020202d20605369676e65646020746f20636c6561722061206d6574616461746120666f7220612066696e6973686564207265666572656e64756d2ee4202020202d2060526f6f746020746f207365742061206d6574616461746120666f7220616e206f6e676f696e67207265666572656e64756d2eb42d20606f776e6572603a20616e206964656e746966696572206f662061206d65746164617461206f776e65722e51012d20606d617962655f68617368603a205468652068617368206f6620616e206f6e2d636861696e2073746f72656420707265696d6167652e20604e6f6e656020746f20636c6561722061206d657461646174612e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ebd030c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000c10304184f7074696f6e040454011c0108104e6f6e6500000010536f6d6504001c0000010000c50304184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c0000010000c9030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c08045400044900011c2c7365745f6d656d626572730c012c6e65775f6d656d62657273350301445665633c543a3a4163636f756e7449643e0001147072696d65cd0301504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e741c012c4d656d626572436f756e74000060805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e00d4546865206469737061746368206f6620746869732063616c6c206d75737420626520605365744d656d626572734f726967696e602e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e0038232320436f6d706c65786974793a502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564291c6578656375746508012070726f706f73616cb503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c101010c753332000124f0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e0038232320436f6d706c65786974793a5c2d20604f2842202b204d202b205029602077686572653ad82d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429882d20604d60206d656d626572732d636f756e742028636f64652d626f756e64656429a82d2060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c601c70726f706f73650c01247468726573686f6c64c101012c4d656d626572436f756e7400012070726f706f73616cb503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c101010c753332000238f84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e0034232320436f6d706c6578697479ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d2032602910766f74650c012070726f706f73616c2c011c543a3a48617368000114696e646578c101013450726f706f73616c496e64657800011c617070726f7665a80110626f6f6c000324f041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e34232320436f6d706c657869747909012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e6465642940636c6f73655f6f6c645f77656967687410013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578c101013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e64d10301244f6c645765696768740001306c656e6774685f626f756e64c101010c7533320004604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e646564294c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f686173682c011c543a3a486173680005285901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e0034232320436f6d706c6578697479ac4f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c7314636c6f736510013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578c101013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64c101010c7533320006604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ecd0304184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000d103000006d50300d503082873705f77656967687473244f6c645765696768740000040010010c7536340000d9030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c08045400044900011c2c7365745f6d656d626572730c012c6e65775f6d656d62657273350301445665633c543a3a4163636f756e7449643e0001147072696d65cd0301504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e741c012c4d656d626572436f756e74000060805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e00d4546865206469737061746368206f6620746869732063616c6c206d75737420626520605365744d656d626572734f726967696e602e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e0038232320436f6d706c65786974793a502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564291c6578656375746508012070726f706f73616cb503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c101010c753332000124f0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e0038232320436f6d706c65786974793a5c2d20604f2842202b204d202b205029602077686572653ad82d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429882d20604d60206d656d626572732d636f756e742028636f64652d626f756e64656429a82d2060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c601c70726f706f73650c01247468726573686f6c64c101012c4d656d626572436f756e7400012070726f706f73616cb503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c101010c753332000238f84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e0034232320436f6d706c6578697479ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d2032602910766f74650c012070726f706f73616c2c011c543a3a48617368000114696e646578c101013450726f706f73616c496e64657800011c617070726f7665a80110626f6f6c000324f041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e34232320436f6d706c657869747909012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e6465642940636c6f73655f6f6c645f77656967687410013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578c101013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e64d10301244f6c645765696768740001306c656e6774685f626f756e64c101010c7533320004604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e646564294c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f686173682c011c543a3a486173680005285901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e0034232320436f6d706c6578697479ac4f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c7314636c6f736510013470726f706f73616c5f686173682c011c543a3a48617368000114696e646578c101013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642401185765696768740001306c656e6774685f626f756e64c101010c7533320006604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632edd030c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665e90201504163636f756e7449644c6f6f6b75704f663c543e00010c616464e90201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d62657273350301445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577e90201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee1030c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001143470726f706f73655f7370656e6408011476616c7565cd01013c42616c616e63654f663c542c20493e00012c62656e6566696369617279e90201504163636f756e7449644c6f6f6b75704f663c543e000018290150757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c75653101697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e6365207468655070726f706f73616c20697320617761726465642e0034232320436f6d706c6578697479182d204f2831293c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964c101013450726f706f73616c496e646578000118f852656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e0034232320436f6d706c6578697479182d204f28312940617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964c101013450726f706f73616c496e64657800021c5901417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e6566696369617279a8616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e00ac4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a417070726f76654f726967696e602e0034232320436f6d706c657869747920202d204f2831292e147370656e64080118616d6f756e74cd01013c42616c616e63654f663c542c20493e00012c62656e6566696369617279e90201504163636f756e7449644c6f6f6b75704f663c543e000320b850726f706f736520616e6420617070726f76652061207370656e64206f662074726561737572792066756e64732e004d012d20606f726967696e603a204d75737420626520605370656e644f726967696e60207769746820746865206053756363657373602076616c7565206265696e67206174206c656173742060616d6f756e74602e41012d2060616d6f756e74603a2054686520616d6f756e7420746f206265207472616e736665727265642066726f6d2074686520747265617375727920746f20746865206062656e6566696369617279602ee82d206062656e6566696369617279603a205468652064657374696e6174696f6e206163636f756e7420666f7220746865207472616e736665722e0045014e4f54453a20466f72207265636f72642d6b656570696e6720707572706f7365732c207468652070726f706f736572206973206465656d656420746f206265206571756976616c656e7420746f207468653062656e65666963696172792e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964c101013450726f706f73616c496e6465780004342d01466f72636520612070726576696f75736c7920617070726f7665642070726f706f73616c20746f2062652072656d6f7665642066726f6d2074686520617070726f76616c2071756575652ec0546865206f726967696e616c206465706f7369742077696c6c206e6f206c6f6e6765722062652072657475726e65642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602ea02d206070726f706f73616c5f6964603a2054686520696e646578206f6620612070726f706f73616c0034232320436f6d706c6578697479ac2d204f2841292077686572652060416020697320746865206e756d626572206f6620617070726f76616c73001c4572726f72733a61012d206050726f706f73616c4e6f74417070726f766564603a20546865206070726f706f73616c5f69646020737570706c69656420776173206e6f7420666f756e6420696e2074686520617070726f76616c2071756575652c5101692e652e2c207468652070726f706f73616c20686173206e6f74206265656e20617070726f7665642e205468697320636f756c6420616c736f206d65616e207468652070726f706f73616c20646f6573206e6f745901657869737420616c746f6765746865722c2074687573207468657265206973206e6f2077617920697420776f756c642068617665206265656e20617070726f76656420696e2074686520666972737420706c6163652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee5030c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c73e903017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e646578dc010c75313600011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c73e903017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696eed030154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c73e903017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874240118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee903000002b50300ed0308447370697269746e65745f72756e74696d65304f726967696e43616c6c657200011c1873797374656d0400f10301746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c0400f50301010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400f90301010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020000c4469640400fd0301506469643a3a4f726967696e3c52756e74696d653e0040002c506f6c6b61646f7458636d04000104014870616c6c65745f78636d3a3a4f726967696e0053002843756d756c757358636d04000504016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e00540010566f69640400090401110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f696400060000f1030c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e6500020000f503084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d6265727308001c012c4d656d626572436f756e7400001c012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d00020000f903084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d6265727308001c012c4d656d626572436f756e7400001c012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d00020000fd030c0c646964186f726967696e304469645261774f726967696e08344469644964656e7469666965720100244163636f756e74496401000008010869640001344469644964656e7469666965720001247375626d69747465720001244163636f756e744964000001040c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400b50101344d756c74694c6f636174696f6e00000020526573706f6e73650400b50101344d756c74694c6f636174696f6e0001000005040c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e0400a9010118506172614964000100000904081c73705f636f726510566f6964000100000d040c3870616c6c65745f76657374696e671870616c6c65741043616c6c0404540001141076657374000024b8556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e005d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e28766573745f6f74686572040118746172676574e90201504163636f756e7449644c6f6f6b75704f663c543e00012cb8556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051012d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e3c7665737465645f7472616e73666572080118746172676574e90201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65110401a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00023464437265617465206120766573746564207472616e736665722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d2060746172676574603a20546865206163636f756e7420726563656976696e6720746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e54666f7263655f7665737465645f7472616e736665720c0118736f75726365e90201504163636f756e7449644c6f6f6b75704f663c543e000118746172676574e90201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65110401a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00033860466f726365206120766573746564207472616e736665722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00e82d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e11012d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e6465781c010c75333200013c7363686564756c65325f696e6465781c010c7533320004545d014d657267652074776f2076657374696e67207363686564756c657320746f6765746865722c206372656174696e672061206e65772076657374696e67207363686564756c65207468617420756e6c6f636b73206f7665725501746865206869676865737420706f737369626c6520737461727420616e6420656e6420626c6f636b732e20496620626f7468207363686564756c6573206861766520616c7265616479207374617274656420746865590163757272656e7420626c6f636b2077696c6c206265207573656420617320746865207363686564756c652073746172743b207769746820746865206361766561742074686174206966206f6e65207363686564756c655d0169732066696e6973686564206279207468652063757272656e7420626c6f636b2c20746865206f746865722077696c6c206265207472656174656420617320746865206e6577206d6572676564207363686564756c652c2c756e6d6f6469666965642e00f84e4f54453a20496620607363686564756c65315f696e646578203d3d207363686564756c65325f696e6465786020746869732069732061206e6f2d6f702e41014e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b207072696f7220746f206d657267696e672e61014e4f54453a20496620626f7468207363686564756c6573206861766520656e646564206279207468652063757272656e7420626c6f636b2c206e6f206e6577207363686564756c652077696c6c206265206372656174656464616e6420626f74682077696c6c2062652072656d6f7665642e006c4d6572676564207363686564756c6520617474726962757465733a35012d20607374617274696e675f626c6f636b603a20604d4158287363686564756c65312e7374617274696e675f626c6f636b2c207363686564756c6564322e7374617274696e675f626c6f636b2c48202063757272656e745f626c6f636b29602e21012d2060656e64696e675f626c6f636b603a20604d4158287363686564756c65312e656e64696e675f626c6f636b2c207363686564756c65322e656e64696e675f626c6f636b29602e59012d20606c6f636b6564603a20607363686564756c65312e6c6f636b65645f61742863757272656e745f626c6f636b29202b207363686564756c65322e6c6f636b65645f61742863757272656e745f626c6f636b29602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00e82d20607363686564756c65315f696e646578603a20696e646578206f6620746865206669727374207363686564756c6520746f206d657267652eec2d20607363686564756c65325f696e646578603a20696e646578206f6620746865207365636f6e64207363686564756c6520746f206d657267652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e11040c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d626572000015040c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963190401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100138543a3a426c6f636b4e756d626572000114696e6465781c010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963190401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963190401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000404a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963190401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000504905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e190404184f7074696f6e04045401cc0108104e6f6e6500000010536f6d650400cc00000100001d040c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616ce90201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065210401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465e90201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d6265720001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465e90201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065d80130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d626572000114696e646578dc010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572e90201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065d80130543a3a50726f787954797065000114696e646578dc010c753136000118686569676874280138543a3a426c6f636b4e756d6265720001246578745f696e646578c101010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616ce90201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616ce90201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465e90201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f686173682c013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465e90201504163636f756e7449644c6f6f6b75704f663c543e0001107265616ce90201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065210401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e210404184f7074696f6e04045401d80108104e6f6e6500000010536f6d650400d8000001000025040c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657330011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d616765040110686173682c011c543a3a48617368000118dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e00fc496620606c656e602069732070726f76696465642c207468656e2069742077696c6c2062652061206d7563682063686561706572206f7065726174696f6e2e0001012d206068617368603a205468652068617368206f662074686520707265696d61676520746f2062652072656d6f7665642066726f6d207468652073746f72652eb82d20606c656e603a20546865206c656e677468206f662074686520707265696d616765206f66206068617368602e40726571756573745f707265696d616765040110686173682c011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d616765040110686173682c011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e29040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665e90201504163636f756e7449644c6f6f6b75704f663c543e00010c616464e90201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d62657273350301445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577e90201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2d040c2c70616c6c65745f746970731870616c6c65741043616c6c080454000449000118387265706f72745f617765736f6d65080118726561736f6e30011c5665633c75383e00010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e00004059015265706f727420736f6d657468696e672060726561736f6e60207468617420646573657276657320612074697020616e6420636c61696d20616e79206576656e7475616c207468652066696e6465722773206665652e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051015061796d656e743a20605469705265706f72744465706f73697442617365602077696c6c2062652072657365727665642066726f6d20746865206f726967696e206163636f756e742c2061732077656c6c206173bc60446174614465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e0074456d69747320604e657754697060206966207375636365737366756c2e0034232320436f6d706c6578697479982d20604f2852296020776865726520605260206c656e677468206f662060726561736f6e602e9020202d20656e636f64696e6720616e642068617368696e67206f662027726561736f6e272c726574726163745f746970040110686173682c011c543a3a486173680001405101526574726163742061207072696f72207469702d7265706f72742066726f6d20607265706f72745f617765736f6d65602c20616e642063616e63656c207468652070726f63657373206f662074697070696e672e00dc4966207375636365737366756c2c20746865206f726967696e616c206465706f7369742077696c6c20626520756e72657365727665642e004d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642074686520746970206964656e7469666965642062792060686173686041016d7573742068617665206265656e207265706f7274656420627920746865207369676e696e67206163636f756e74207468726f75676820607265706f72745f617765736f6d65602028616e64206e6f744c7468726f75676820607469705f6e657760292e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e008c456d697473206054697052657472616374656460206966207375636365737366756c2e0034232320436f6d706c6578697479202d20604f28312960d820202d20446570656e6473206f6e20746865206c656e677468206f662060543a3a48617368602077686963682069732066697865642e1c7469705f6e65770c0118726561736f6e30011c5665633c75383e00010c77686fe90201504163636f756e7449644c6f6f6b75704f663c543e0001247469705f76616c7565cd01013c42616c616e63654f663c542c20493e00024cf04769766520612074697020666f7220736f6d657468696e67206e65773b206e6f2066696e6465722773206665652077696c6c2062652074616b656e2e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e0074456d69747320604e657754697060206966207375636365737366756c2e0034232320436f6d706c657869747921012d20604f2852202b2054296020776865726520605260206c656e677468206f662060726561736f6e602c2060546020697320746865206e756d626572206f6620746970706572732e5d0120202d20604f285429603a206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792d012020202060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f66442020202060543a3a54697070657273602ee020202d20604f285229603a2068617368696e6720616e6420656e636f64696e67206f6620726561736f6e206f66206c656e677468206052600c746970080110686173682c011c543a3a486173680001247469705f76616c7565cd01013c42616c616e63654f663c542c20493e000354b04465636c6172652061207469702076616c756520666f7220616e20616c72656164792d6f70656e207469702e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f66207468652068617368206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e65666963696172793420206163636f756e742049442e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e006101456d6974732060546970436c6f73696e676020696620746865207468726573686f6c64206f66207469707065727320686173206265656e207265616368656420616e642074686520636f756e74646f776e20706572696f643068617320737461727465642e0034232320436f6d706c657869747961012d20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e677468206054602c20696e736572745901202074697020616e6420636865636b20636c6f73696e672c20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e010120205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e005d01202041637475616c6c792077656967687420636f756c64206265206c6f77657220617320697420646570656e6473206f6e20686f77206d616e7920746970732061726520696e20604f70656e5469706020627574206974d02020697320776569676874656420617320696620616c6d6f73742066756c6c20692e65206f66206c656e6774682060542d31602e24636c6f73655f746970040110686173682c011c543a3a486173680004345c436c6f736520616e64207061796f75742061207469702e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00150154686520746970206964656e74696669656420627920606861736860206d75737420686176652066696e69736865642069747320636f756e74646f776e20706572696f642e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e0034232320436f6d706c65786974795d012d203a20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e20605460590120206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e94202074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e24736c6173685f746970040110686173682c011c543a3a486173680005289452656d6f766520616e6420736c61736820616e20616c72656164792d6f70656e207469702e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e00f44173206120726573756c742c207468652066696e64657220697320736c617368656420616e6420746865206465706f7369747320617265206c6f73742e0084456d6974732060546970536c617368656460206966207375636365737366756c2e0034232320436f6d706c65786974791c2d204f2831292e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e31040c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573350301445665633c543a3a4163636f756e7449643e00011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000305101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e0034232320436f6d706c657869747919014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e2061735f6d756c74691401247468726573686f6c64dc010c7531360001446f746865725f7369676e61746f72696573350301445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74350401844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00011063616c6cb503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687424011857656967687400019c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e0034232320436f6d706c6578697479502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e40617070726f76655f61735f6d756c74691401247468726573686f6c64dc010c7531360001446f746865725f7369676e61746f72696573350301445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74350401844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f7765696768742401185765696768740002785501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e3c63616e63656c5f61735f6d756c74691001247468726573686f6c64dc010c7531360001446f746865725f7369676e61746f72696573350301445665633c543a3a4163636f756e7449643e00012474696d65706f696e74f0016454696d65706f696e743c543a3a426c6f636b4e756d6265723e00012463616c6c5f686173680401205b75383b2033325d000354550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e350404184f7074696f6e04045401f00108104e6f6e6500000010536f6d650400f0000001000039040c1463747970651870616c6c65741043616c6c0404540001080c616464040114637479706530011c5665633c75383e00003009014372656174652061206e65772043547970652066726f6d2074686520676976656e20756e69717565204354797065206861736820616e64206173736f6369617465735069742077697468206974732063726561746f722e00dc412043547970652077697468207468652073616d652068617368206d757374206e6f742062652073746f726564206f6e20636861696e2e0054456d6974732060435479706543726561746564602e002823203c7765696768743e305765696768743a204f283129602d2052656164733a204374797065732c2042616c616e6365642d205772697465733a204374797065732c2042616c616e63652c23203c2f7765696768743e407365745f626c6f636b5f6e756d62657208012863747970655f686173682c01384374797065486173684f663c543e000130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e00010ce853657420746865206372656174696f6e20626c6f636b206e756d62657220666f72206120676976656e2043547970652c20696620666f756e642e0054456d6974732060435479706555706461746564602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e3d040c2c6174746573746174696f6e1870616c6c65741043616c6c0404540001180c6164640c0128636c61696d5f686173682c0138436c61696d486173684f663c543e00012863747970655f686173682c01384374797065486173684f663c543e000134617574686f72697a6174696f6e410401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000054644372656174652061206e6577206174746573746174696f6e2e00f85468652061747465737465722063616e206f7074696f6e616c6c792070726f766964652061207265666572656e636520746f20616e206578697374696e67090164656c65676174696f6e20746861742077696c6c20626520736176656420616c6f6e67207769746820746865206174746573746174696f6e20697473656c6620696e8c74686520666f726d206f6620616e2061747465737465642064656c65676174696f6e2e00ec546865207265666572656e6365642043547970652068617368206d75737420616c72656164792062652070726573656e74206f6e20636861696e2e000901496620616e206f7074696f6e616c2064656c65676174696f6e2069642069732070726f76696465642c20746865206469737061746368206f726967696e206d757374e8626520746865206f776e6572206f66207468652064656c65676174696f6e2e204f74686572776973652c20697420636f756c6420626520616e79546044656c65676174696f6e456e746974794964602e006c456d69747320604174746573746174696f6e43726561746564602e002823203c7765696768743e305765696768743a204f283129b82d2052656164733a205b4f726967696e204163636f756e745d2c2043747970652c204174746573746174696f6e73e42d2052656164732069662064656c65676174696f6e2069642069732070726f76696465643a2044656c65676174696f6e732c20526f6f74732c5c202044656c6567617465644174746573746174696f6e73bc2d205772697465733a204174746573746174696f6e732c202844656c6567617465644174746573746174696f6e73292c23203c2f7765696768743e187265766f6b65080128636c61696d5f686173682c0138436c61696d486173684f663c543e000134617574686f72697a6174696f6e410401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0001447c5265766f6b6520616e206578697374696e67206174746573746174696f6e2e00fc546865207265766f6b6572206d75737420626520656974686572207468652063726561746f72206f6620746865206174746573746174696f6e206265696e6709017265766f6b6564206f7220616e20656e74697479207468617420696e207468652064656c65676174696f6e207472656520697320616e20616e636573746f72206f6609017468652061747465737465722c20692e652e2c2069742077617320656974686572207468652064656c656761746f72206f6620746865206174746573746572206f7250616e20616e636573746f722074686572656f662e006c456d69747320604174746573746174696f6e5265766f6b6564602e002823203c7765696768743e0d015765696768743a204f285029207768657265205020697320746865206e756d626572206f6620737465707320726571756972656420746f2076657269667920746861740901746865206469737061746368204f726967696e20636f6e74726f6c73207468652064656c65676174696f6e20656e7469746c656420746f207265766f6b6520746865c86174746573746174696f6e2e20497420697320626f756e64656420627920606d61785f706172656e745f636865636b73602ee82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2064656c65676174696f6e3a3a526f6f7473d82d205265616473207065722064656c65676174696f6e207374657020503a2064656c65676174696f6e3a3a44656c65676174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e1872656d6f7665080128636c61696d5f686173682c0138436c61696d486173684f663c543e000134617574686f72697a6174696f6e410401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0002445852656d6f766520616e206174746573746174696f6e2e00f8546865206f726967696e206d75737420626520656974686572207468652063726561746f72206f6620746865206174746573746174696f6e206f7220616e0d01656e7469747920776869636820697320616e20616e636573746f72206f662074686520617474657374657220696e207468652064656c65676174696f6e20747265652c0101692e652e2c2069742077617320656974686572207468652064656c656761746f72206f6620746865206174746573746572206f7220616e20616e636573746f722074686572656f662e006c456d69747320604174746573746174696f6e52656d6f766564602e002823203c7765696768743e0d015765696768743a204f285029207768657265205020697320746865206e756d626572206f6620737465707320726571756972656420746f2076657269667920746861740901746865206469737061746368204f726967696e20636f6e74726f6c73207468652064656c65676174696f6e20656e7469746c656420746f207265766f6b6520746865c86174746573746174696f6e2e20497420697320626f756e64656420627920606d61785f706172656e745f636865636b73602ee82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2064656c65676174696f6e3a3a526f6f7473d82d205265616473207065722064656c65676174696f6e207374657020503a2064656c65676174696f6e3a3a44656c65676174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e3c7265636c61696d5f6465706f736974040128636c61696d5f686173682c0138436c61696d486173684f663c543e000324d05265636c61696d20612073746f72616765206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e0064456d69747320604465706f7369745265636c61696d6564602e002823203c7765696768743e305765696768743a204f283129f82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e6572040128636c61696d5f686173682c0138436c61696d486173684f663c543e00041c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00ec546865207375626a656374206f66207468652063616c6c206d757374206265207468652061747465737465722077686f206973737565732074686509016174746573746174696f6e2e205468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f736974040128636c61696d5f686173682c0138436c61696d486173684f663c543e00050cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e410404184f7074696f6e0404540145040108104e6f6e6500000010536f6d6504004504000001000045040c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c50616c6c6574417574686f72697a65043044656c65676174696f6e416301490401042844656c65676174696f6e04004904013044656c65676174696f6e41630000000049040c2864656c65676174696f6e386163636573735f636f6e74726f6c3044656c65676174696f6e4163040454014d040008013c7375626a6563745f6e6f64655f69642c015444656c65676174696f6e4e6f646549644f663c543e0001286d61785f636865636b731c010c75333200004d0408447370697269746e65745f72756e74696d651c52756e74696d650000000051040c2864656c65676174696f6e1870616c6c65741043616c6c04045400011c406372656174655f686965726172636879080130726f6f745f6e6f64655f69642c015444656c65676174696f6e4e6f646549644f663c543e00012863747970655f686173682c01384374797065486173684f663c543e00006401014372656174652061206e65772064656c65676174696f6e20726f6f74206173736f6369617465642077697468206120676976656e20435479706520686173682e00f8546865206e657720726f6f742077696c6c20616c6c6f772061206e65772074727573742068696572617263687920746f2062652063726561746564206279a0616464696e67206368696c6472656e2064656c65676174696f6e7320746f2074686520726f6f742e000d015468657265206d757374206265206e6f2064656c65676174696f6e2077697468207468652073616d652049442073746f726564206f6e20636861696e2c207768696c65fc7468657265206d75737420626520616c7265616479206120435479706520776974682074686520676976656e20686173682073746f72656420696e207468653443547970652070616c6c65742e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e000d015265717569726573207468652073656e646572206f6620746865207472616e73616374696f6e20746f206861766520612072657365727661626c652062616c616e6365886f66206174206c6561737420604465706f73697460206d616e7920746f6b656e732e0050456d6974732060526f6f7443726561746564602e002823203c7765696768743e305765696768743a204f283129a02d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c204354797065733c2d205772697465733a20526f6f74732c23203c2f7765696768743e386164645f64656c65676174696f6e14013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e000124706172656e745f69642c015444656c65676174696f6e4e6f646549644f663c543e00012064656c656761746500014044656c656761746f7249644f663c543e00012c7065726d697373696f6e730901012c5065726d697373696f6e7300014864656c65676174655f7369676e61747572655504016844656c65676174655369676e6174757265547970654f663c543e000180744372656174652061206e65772064656c65676174696f6e206e6f64652e00f4546865206e65772064656c65676174696f6e206e6f646520726570726573656e74732061206e65772074727573742068696572617263687920746861740d01636f6e73696465727320746865206e6577206e6f64652061732069747320726f6f742e20546865206f776e6572206f662074686973206e6f6465206861732066756c6ce0636f6e74726f6c206f76657220616e79206f66206974732064697265637420616e6420696e6469726563742064657363656e64616e74732e00fc466f7220746865206372656174696f6e20746f20737563636565642c207468652064656c656761746565206d7573742070726f7669646520612076616c696411017369676e6174757265206f766572207468652028626c616b65323536292068617368206f6620746865206372656174696f6e206f7065726174696f6e2064657461696c731101776869636820696e636c7564652028696e206f72646572292064656c65676174696f6e2069642c20726f6f74206e6f64652069642c20706172656e742069642c20616e64707065726d697373696f6e73206f6620746865206e6577206e6f64652e00f45468657265206d757374206265206e6f2064656c65676174696f6e2077697468207468652073616d652069642073746f726564206f6e20636861696e2e0501467572746865726d6f72652c20746865207265666572656e63656420726f6f7420616e6420706172656e74206e6f646573206d75737420616c7265616479206265050170726573656e74206f6e20636861696e20616e6420636f6e7461696e207468652076616c6964207065726d697373696f6e7320616e64207265766f636174696f6e6c7374617475732028692e652e2c206e6f74207265766f6b6564292e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e000d015265717569726573207468652073656e646572206f6620746865207472616e73616374696f6e20746f206861766520612072657365727661626c652062616c616e6365886f66206174206c6561737420604465706f73697460206d616e7920746f6b656e732e0068456d697473206044656c65676174696f6e43726561746564602e002823203c7765696768743e305765696768743a204f283129b42d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2044656c65676174696f6e73542d205772697465733a2044656c65676174696f6e732c23203c2f7765696768743e447265766f6b655f64656c65676174696f6e0c013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001446d61785f706172656e745f636865636b731c010c75333200013c6d61785f7265766f636174696f6e731c010c753332000274f85265766f6b6520612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74206e6f64652920616e6420616c6c20697473246368696c6472656e2e00fc446f6573206e6f7420726566756e64207468652064656c65676174696f6e206261636b20746f20746865206465706f736974206f776e657220617320746865f06e6f6465206973207374696c6c2073746f726564206f6e20636861696e2e20526571756972657320746f206164646974696f6e616c6c792063616c6cb46072656d6f76655f64656c65676174696f6e6020746f20756e7265736572766520746865206465706f7369742e0009015265766f6b696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67090166726f6d2074686520676976656e206e6f6465206265696e67207265766f6b65642e204e657665727468656c6573732c207265766f636174696f6e20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f6465206973207265766f6b65642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e73696465726564207265766f6b65642e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e0078456d6974732043202a206044656c65676174696f6e5265766f6b6564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f6368696c6472656e602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e802d205772697465733a20526f6f74732c2043202a2044656c65676174696f6e732c23203c2f7765696768743e4472656d6f76655f64656c65676174696f6e08013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c731c010c753332000370f852656d6f766520612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74206e6f64652920616e6420616c6c20697473246368696c6472656e2e00f052657475726e73207468652064656c65676174696f6e206465706f73697420746f20746865206465706f736974206f776e657220666f722065616368a472656d6f7665642044656c65676174696f6e4e6f646520627920756e726573657276696e672069742e00090152656d6f76696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67fc66726f6d2074686520676976656e206e6f6465206265696e672072656d6f7665642e204e657665727468656c6573732c2072656d6f76616c20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f64652069732072656d6f7665642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e736964657265642072656d6f7665642e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e0078456d6974732043202a206044656c65676174696f6e52656d6f766564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f6368696c6472656e602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e902d205772697465733a20526f6f74732c2032202a2043202a2044656c65676174696f6e732c23203c2f7765696768743e3c7265636c61696d5f6465706f73697408013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c731c010c753332000460f45265636c61696d20746865206465706f73697420666f7220612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74b86e6f6465292c2072656d6f76696e6720746865206e6f646520616e6420616c6c20697473206368696c6472656e2e00f052657475726e73207468652064656c65676174696f6e206465706f73697420746f20746865206465706f736974206f776e657220666f722065616368a472656d6f7665642044656c65676174696f6e4e6f646520627920756e726573657276696e672069742e00090152656d6f76696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67fc66726f6d2074686520676976656e206e6f6465206265696e672072656d6f7665642e204e657665727468656c6573732c2072656d6f76616c20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f64652069732072656d6f7665642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e736964657265642072656d6f7665642e000d01546865206469737061746368206f726967696e206d757374206265207369676e6564206279207468652064656c65676174696f6e206465706f736974206f776e65722e004c604465706f7369745265636c61696d6564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f72656d6f76616c73602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e902d205772697465733a20526f6f74732c2032202a2043202a2044656c65676174696f6e732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657204013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e00051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e000501546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f66207468652064656c65676174696f6e206e6f64652ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404013464656c65676174696f6e5f69642c015444656c65676174696f6e4e6f646549644f663c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e55040c0c6469642c6469645f64657461696c73304469645369676e617475726500010c1c45643235353139040059040148656432353531393a3a5369676e61747572650000001c53723235353139040061040148737232353531393a3a5369676e617475726500010014456364736104006504014065636473613a3a5369676e61747572650002000059040c1c73705f636f72651c65643235353139245369676e6174757265000004005d0401205b75383b2036345d00005d0400000340000000080061040c1c73705f636f72651c73723235353139245369676e6174757265000004005d0401205b75383b2036345d000065040c1c73705f636f7265146563647361245369676e617475726500000400690401205b75383b2036355d000069040000034100000008006d040c0c6469641870616c6c65741043616c6c04045400013c1863726561746508011c64657461696c7371040168426f783c4469644372656174696f6e44657461696c733c543e3e0001247369676e6174757265550401304469645369676e617475726500007cec53746f72652061206e657720444944206f6e20636861696e2c20616674657220766572696679696e67207468617420746865206372656174696f6e05016f7065726174696f6e20686173206265656e207369676e656420627920746865204b494c54206163636f756e74206173736f63696174656420776974682074686501016964656e746966696572206f662074686520444944206265696e67206372656174656420616e6420746861742061204449442077697468207468652073616d6511016964656e74696669657220686173206e6f742070726576696f75736c792065786973746564206f6e2028616e64207468656e2064656c657465642066726f6d292074686518636861696e2e000d015468657265206d757374206265206e6f2044494420696e666f726d6174696f6e2073746f726564206f6e20636861696e20756e646572207468652073616d65204449442c6964656e7469666965722e00fc546865206e6577206b65797320616464656420776974682074686973206f7065726174696f6e206172652073746f72656420756e646572207468652044494405016964656e74696669657220616c6f6e6720776974682074686520626c6f636b206e756d62657220696e20776869636820746865206f7065726174696f6e207761732465786563757465642e000101546865206469737061746368206f726967696e2063616e20626520616e79204b494c54206163636f756e74207769746820656e6f7567682066756e647320746f0d0165786563757465207468652065787472696e73696320616e6420697420646f6573206e6f74206861766520746f206265207469656420696e20616e792077617920746fb4746865204b494c54206163636f756e74206964656e74696679696e672074686520444944207375626a6563742e004c456d697473206044696443726561746564602e002823203c7765696768743e0d012d20546865207472616e73616374696f6e277320636f6d706c6578697479206973206d61696e6c7920646570656e64656e74206f6e20746865206e756d626572206f66010120206e6577206b65792061677265656d656e74206b65797320616e6420746865206e756d626572206f66206e6577207365727669636520656e64706f696e7473702020696e636c7564656420696e20746865206f7065726174696f6e2e242d2d2d2d2d2d2d2d2df85765696768743a204f284b29202b204f284e29207768657265204b20697320746865206e756d626572206f66206e6577206b65792061677265656d656e7409016b65797320626f756e64656420627920604d61784e65774b657941677265656d656e744b657973602c207768696c65204e20697320746865206e756d626572206f66f46e6577207365727669636520656e64706f696e747320626f756e64656420627920604d61784e756d6265724f665365727669636573506572446964602eb02d2052656164733a205b4f726967696e204163636f756e745d2c204469642c20446964426c61636b6c697374fc2d205772697465733a20446964202877697468204b206e6577206b65792061677265656d656e74206b657973292c2053657276696365456e64706f696e7473cc20202877697468204e206e6577207365727669636520656e64706f696e7473292c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e587365745f61757468656e7469636174696f6e5f6b657904011c6e65775f6b657989040148446964566572696669636174696f6e4b65790001408855706461746520746865204449442061757468656e7469636174696f6e206b65792e00ec546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696620697420697309016e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f207468654c736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e487365745f64656c65676174696f6e5f6b657904011c6e65775f6b657989040148446964566572696669636174696f6e4b657900024094536574206f722075706461746520746865204449442064656c65676174696f6e206b65792e000d01496620616e206f6c64206b657920657869737465642c2069742069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696611016974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f5c74686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e5472656d6f76655f64656c65676174696f6e5f6b657900033c7852656d6f766520746865204449442064656c65676174696f6e206b65792e00d4546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b657973206966b06974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e4c7365745f6174746573746174696f6e5f6b657904011c6e65775f6b657989040148446964566572696669636174696f6e4b657900044098536574206f72207570646174652074686520444944206174746573746174696f6e206b65792e000d01496620616e206f6c64206b657920657869737465642c2069742069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696611016974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f5c74686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e5872656d6f76655f6174746573746174696f6e5f6b657900053c7c52656d6f76652074686520444944206174746573746174696f6e206b65792e00d4546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b657973206966b06974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e546164645f6b65795f61677265656d656e745f6b657904011c6e65775f6b657979040140446964456e6372797074696f6e4b6579000638b841646420612073696e676c65206e6577206b65792061677265656d656e74206b657920746f20746865204449442e00bc546865206e6577206b657920697320616464656420746f2074686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e6072656d6f76655f6b65795f61677265656d656e745f6b65790401186b65795f69642c01284b657949644f663c543e000734050152656d6f7665206120444944206b65792061677265656d656e74206b65792066726f6d20626f74682069747320736574206f66206b65792061677265656d656e74906b65797320616e642061732077656c6c20617320697473207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e506164645f736572766963655f656e64706f696e74040140736572766963655f656e64706f696e749d040138446964456e64706f696e743c543e000830bc4164642061206e6577207365727669636520656e64706f696e7420756e6465722074686520676976656e204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f2831290d012d2052656164733a205b4f726967696e204163636f756e745d2c204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e74c82d205772697465733a204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e5c72656d6f76655f736572766963655f656e64706f696e74040128736572766963655f6964a104015053657276696365456e64706f696e7449643c543e000930d452656d6f76652074686520736572766963652077697468207468652070726f76696465642049442066726f6d20746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129f82d2052656164733a205b4f726967696e204163636f756e745d2c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e74c82d205772697465733a204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e1864656c65746504014c656e64706f696e74735f746f5f72656d6f76651c010c753332000a600d0144656c6574652061204449442066726f6d2074686520636861696e20616e6420616c6c20696e666f726d6174696f6e206173736f63696174656420776974682069742c1101616674657220766572696679696e672074686174207468652064656c657465206f7065726174696f6e20686173206265656e207369676e65642062792074686520444944fc7375626a656374207573696e67207468652061757468656e7469636174696f6e206b65792063757272656e746c792073746f726564206f6e20636861696e2e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f7265207468657864656c657465206f7065726174696f6e206973206576616c75617465642e00f441667465722069742069732064656c657465642c2061204449442077697468207468652073616d65206964656e7469666965722063616e6e6f742062655872652d63726561746564206576657220616761696e2e00010141732074686520726573756c74206f66207468652064656c6574696f6e2c20616c6c20747261636573206f662074686520444944206172652072656d6f766564e866726f6d207468652073746f726167652c20776869636820726573756c747320696e2074686520696e76616c69646174696f6e206f6620616c6c9c6174746573746174696f6e73206973737565642062792074686520444944207375626a6563742e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696444656c65746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964cc2d204b696c6c733a2044696420656e747279206173736f63696174656420746f2074686520444944206964656e7469666965722c23203c2f7765696768743e3c7265636c61696d5f6465706f73697408012c6469645f7375626a6563740001484469644964656e7469666965724f663c543e00014c656e64706f696e74735f746f5f72656d6f76651c010c753332000b54f45265636c61696d2061206465706f73697420666f722061204449442e20546869732077696c6c2064656c657465207468652044494420616e6420616c6c0901696e666f726d6174696f6e206173736f63696174656420776974682069742c20616674657220766572696679696e672074686174207468652063616c6c657220697364746865206f776e6572206f6620746865206465706f7369742e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f7265207468657864656c657465206f7065726174696f6e206973206576616c75617465642e00f441667465722069742069732064656c657465642c2061204449442077697468207468652073616d65206964656e7469666965722063616e6e6f742062655872652d63726561746564206576657220616761696e2e00010141732074686520726573756c74206f66207468652064656c6574696f6e2c20616c6c20747261636573206f662074686520444944206172652072656d6f766564e866726f6d207468652073746f726167652c20776869636820726573756c747320696e2074686520696e76616c69646174696f6e206f6620616c6c9c6174746573746174696f6e73206973737565642062792074686520444944207375626a6563742e004c456d697473206044696444656c65746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964cc2d204b696c6c733a2044696420656e747279206173736f63696174656420746f2074686520444944206964656e7469666965722c23203c2f7765696768743e3c7375626d69745f6469645f63616c6c0801206469645f63616c6cbd040188426f783c446964417574686f72697a656443616c6c4f7065726174696f6e3c543e3e0001247369676e6174757265550401304469645369676e6174757265000c8cec50726f7879206120646973706174636861626c652063616c6c206f6620616e6f746865722072756e74696d652065787472696e736963207468617458737570706f727473206120444944206f726967696e2e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f726520746865606f7065726174696f6e20697320646973706174636865642e00fc412063616c6c207375626d6974746564207468726f75676820746869732065787472696e736963206d757374206265207369676e65642077697468207468650901726967687420444944206b65792c20646570656e64696e67206f6e207468652063616c6c2e205468697320696e666f726d6174696f6e2069732070726f766964656409016279207468652060446964417574686f72697a656443616c6c4f7065726174696f6e6020706172616d657465722c20776869636820737065636966696573207468650901444944207375626a65637420616374696e6720617320746865206f726967696e206f66207468652063616c6c2c2074686520444944277320747820636f756e7465720101286e6f6e6365292c2074686520646973706174636861626c6520746f2063616c6c20696e2063617365207369676e617475726520766572696669636174696f6ef073756363656564732c207468652074797065206f6620444944206b657920746f2075736520746f2076657269667920746865206f7065726174696f6efc7369676e61747572652c20616e642074686520626c6f636b206e756d62657220746865206f7065726174696f6e2077617320746172676574696e6720666f72a8696e636c7573696f6e2c207768656e20697420776173206372656174656420616e64207369676e65642e00fc496e206361736520746865207369676e617475726520697320696e636f72726563742c20746865206e6f6e6365206973206e6f742076616c69642c20746865fc7265717569726564206b6579206973206e6f742070726573656e7420666f722074686520737065636966696564204449442c206f722074686520626c6f636bfc73706563696669656420697320746f6f206f6c642074686520766572696669636174696f6e206661696c7320616e64207468652063616c6c206973206e6f74f4646973706174636865642e204f74686572776973652c207468652063616c6c2069732070726f7065726c79206469737061746368656420776974682061b8604469644f726967696e60206f726967696e20696e6469636174696e672074686520444944207375626a6563742e00110141207375636365737366756c206469737061746368206f7065726174696f6e20726573756c747320696e2074686520747820636f756e746572206173736f6369617465640501776974682074686520676976656e2044494420746f20626520696e6372656d656e7465642c20746f206d69746967617465207265706c61792061747461636b732e000101546865206469737061746368206f726967696e2063616e20626520616e79204b494c54206163636f756e74207769746820656e6f7567682066756e647320746f0d0165786563757465207468652065787472696e73696320616e6420697420646f6573206e6f74206861766520746f206265207469656420696e20616e792077617920746fb4746865204b494c54206163636f756e74206964656e74696679696e672074686520444944207375626a6563742e0068456d697473206044696443616c6c44697370617463686564602e002823203c7765696768743eb05765696768743a204f283129202b20776569676874206f662074686520646973706174636865642063616c6c782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e6572000d1c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00b8546865207375626a656374206f66207468652063616c6c206d7573742062652074686520646964206f776e65722ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404010c6469640001484469644964656e7469666965724f663c543e000e0cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e71040c0c6469642c6469645f64657461696c73484469644372656174696f6e44657461696c73040454000018010c6469640001484469644964656e7469666965724f663c543e0001247375626d69747465720001384163636f756e7449644f663c543e0001586e65775f6b65795f61677265656d656e745f6b6579737504016c4469644e65774b657941677265656d656e744b65795365743c543e00014c6e65775f6174746573746174696f6e5f6b6579850401684f7074696f6e3c446964566572696669636174696f6e4b65793e0001486e65775f64656c65676174696f6e5f6b6579850401684f7074696f6e3c446964566572696669636174696f6e4b65793e00014c6e65775f736572766963655f64657461696c739904014c5665633c446964456e64706f696e743c543e3e000075040c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540179040453000004007d04012c42547265655365743c543e000079040c0c6469642c6469645f64657461696c7340446964456e6372797074696f6e4b65790001041858323535313904000401205b75383b2033325d000000007d040420425472656553657404045401790400040081040000008104000002790400850404184f7074696f6e0404540189040108104e6f6e6500000010536f6d6504008904000001000089040c0c6469642c6469645f64657461696c7348446964566572696669636174696f6e4b657900010c1c4564323535313904008d04013c656432353531393a3a5075626c69630000001c5372323535313904002903013c737232353531393a3a5075626c696300010014456364736104009104013465636473613a3a5075626c6963000200008d040c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d000091040c1c73705f636f7265146563647361185075626c696300000400950401205b75383b2033335d0000950400000321000000080099040000029d04009d040c0c64696444736572766963655f656e64706f696e74732c446964456e64706f696e7404045400000c01086964a104015053657276696365456e64706f696e7449643c543e000134736572766963655f7479706573a504017453657276696365456e64706f696e7454797065456e74726965733c543e00011075726c73b104017053657276696365456e64706f696e7455726c456e74726965733c543e0000a1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000a5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a904045300000400ad0401185665633c543e0000a9040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000ad04000002a90400b1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b504045300000400b90401185665633c543e0000b5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000b904000002b50400bd040c0c6469642c6469645f64657461696c7368446964417574686f72697a656443616c6c4f7065726174696f6e040454000014010c6469640001484469644964656e7469666965724f663c543e00012874785f636f756e74657210010c75363400011063616c6cb503014044696443616c6c61626c654f663c543e000130626c6f636b5f6e756d626572100140426c6f636b4e756d6265724f663c543e0001247375626d69747465720001384163636f756e7449644f663c543e0000c1040c4470616c6c65745f6469645f6c6f6f6b75701870616c6c65741043616c6c04045400011c446173736f63696174655f6163636f756e7408010c726571c504015c4173736f63696174654163636f756e745265717565737400012865787069726174696f6e1001a03c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a426c6f636b4e756d62657200004405014173736f63696174652074686520676976656e206163636f756e7420746f2074686520444944207468617420617574686f72697a656420746869732063616c6c2e000501546865206163636f756e742068617320746f207369676e207468652044494420616e64206120626c6f636b6e756d62657220616674657220776869636820746865e07369676e6174757265206578706972657320696e206f7264657220746f20617574686f72697a6520746865206173736f63696174696f6e2e001101546865207369676e61747572652077696c6c20626520636865636b656420616761696e737420746865207363616c6520656e636f646564207475706c65206f66207468650d016d6574686f64207370656369666963206964206f662074686520646964206964656e74696669657220616e642074686520626c6f636b206e756d626572206166746572bc776869636820746865207369676e61747572652073686f756c6420626520726567617264656420696e76616c69642e001101456d69747320604173736f63696174696f6e45737461626c69736865646020616e642c206f7074696f6e616c6c792c20604173736f63696174696f6e52656d6f76656460d069662074686572652077617320612070726576696f7573206173736f63696174696f6e20666f7220746865206163636f756e742e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e406173736f63696174655f73656e64657200012c01014173736f6369617465207468652073656e646572206f66207468652063616c6c20746f2074686520444944207468617420617574686f72697a656420746869731463616c6c2e001101456d69747320604173736f63696174696f6e45737461626c69736865646020616e642c206f7074696f6e616c6c792c20604173736f63696174696f6e52656d6f76656460d069662074686572652077617320612070726576696f7573206173736f63696174696f6e20666f7220746865206163636f756e742e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e6472656d6f76655f73656e6465725f6173736f63696174696f6e000228fc52656d6f766520746865206173736f63696174696f6e206f66207468652073656e646572206163636f756e742e20546869732063616c6c20646f65736e27740d01726571756972652074686520617574686f72697a6174696f6e206f6620746865204449442c206275742072657175697265732061207369676e6564206f726967696e2e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e6872656d6f76655f6163636f756e745f6173736f63696174696f6e04011c6163636f756e74150101444c696e6b61626c654163636f756e74496400032c110152656d6f766520746865206173736f63696174696f6e206f66207468652070726f7669646564206163636f756e742049442e20546869732063616c6c20646f65736e27740d01726571756972652074686520617574686f72697a6174696f6e206f6620746865206163636f756e742049442c2062757420746865206173736f63696174656420444944c46e6565647320746f206d617463682074686520444944207468617420617574686f72697a656420746869732063616c6c2e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e3c7265636c61696d5f6465706f73697404011c6163636f756e74150101444c696e6b61626c654163636f756e74496400042c090152656d6f766520746865206173736f63696174696f6e206f66207468652070726f7669646564206163636f756e742e20546869732063616c6c2063616e206f6e6c79f862652063616c6c65642066726f6d20746865206465706f736974206f776e65722e20546865207265736572766564206465706f7369742077696c6c2062651866726565642e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129582d2052656164733a20436f6e6e6563746564446964735c2d205772697465733a20436f6e6e6563746564446964732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657204011c6163636f756e74150101444c696e6b61626c654163636f756e74496400051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00d8546865207375626a656374206f66207468652063616c6c206d757374206265206c696e6b656420746f20746865206163636f756e742ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404011c6163636f756e74150101444c696e6b61626c654163636f756e74496400060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ec5040c4470616c6c65745f6469645f6c6f6f6b7570646173736f63696174655f6163636f756e745f726571756573745c4173736f63696174654163636f756e745265717565737400010820506f6c6b61646f74080000012c4163636f756e74496433320000c90401384d756c74695369676e617475726500000020457468657265756d08001901012c4163636f756e74496432300000cd040144457468657265756d5369676e617475726500010000c904082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040059040148656432353531393a3a5369676e61747572650000001c53723235353139040061040148737232353531393a3a5369676e617475726500010014456364736104006504014065636473613a3a5369676e617475726500020000cd040c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e7444457468657265756d5369676e6174757265000004006504014065636473613a3a5369676e61747572650000d1040c4470616c6c65745f776562335f6e616d65731870616c6c65741043616c6c04045400011c14636c61696d0401106e616d6529010140576562334e616d65496e7075743c543e00003ce841737369676e2074686520737065636966696564206e616d6520746f20746865206f776e65722061732073706563696669656420696e207468651c6f726967696e2e000d01546865206e616d65206d757374206e6f74206861766520616c7265616479206265656e20636c61696d656420627920736f6d656f6e6520656c736520616e6420746865a06f776e6572206d757374206e6f7420616c7265616479206f776e20616e6f74686572206e616d652e00dc456d6974732060576562334e616d65436c61696d65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f28312909012d2052656164733a204e616d65732c204f776e65722c2042616e6e65642073746f7261676520656e7472696573202b20617661696c61626c652063757272656e6379582020636865636b202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f73697420726573657276652c23203c2f7765696768743e4072656c656173655f62795f6f776e6572000130a452656c65617365207468652070726f7669646564206e616d652066726f6d20697473206f776e65722e00cc546865206f726967696e206d75737420626520746865206f776e6572206f662074686520737065636966696564206e616d652e00e0456d6974732060576562334e616d6552656c65617365646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129ac2d2052656164733a204e616d65732073746f7261676520656e747279202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f7369742072656c656173652c23203c2f7765696768743e3c7265636c61696d5f6465706f7369740401106e616d6529010140576562334e616d65496e7075743c543e000230a452656c65617365207468652070726f7669646564206e616d652066726f6d20697473206f776e65722e000101546865206f726967696e206d75737420626520746865206163636f756e742074686174207061696420666f7220746865206e616d652773206465706f7369742e00e0456d6974732060576562334e616d6552656c65617365646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129ac2d2052656164733a204f776e65722073746f7261676520656e747279202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f7369742072656c656173652c23203c2f7765696768743e0c62616e0401106e616d6529010140576562334e616d65496e7075743c543e0003402c42616e2061206e616d652e00f4412062616e6e6564206e616d652063616e6e6f7420626520636c61696d656420627920616e796f6e652e20546865206e616d652773206465706f7369748869732072657475726e656420746f20746865206f726967696e616c2070617965722e0088546865206f726967696e206d757374206265207468652062616e206f726967696e2e00d8456d6974732060576562334e616d6542616e6e65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129f02d2052656164733a2042616e6e65642c204f776e65722c204e616d65732073746f7261676520656e7472696573202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722c2042616e6e65642073746f7261676520656e7472696573202b2063757272656e6379206465706f73697424202072656c656173652c23203c2f7765696768743e14756e62616e0401106e616d6529010140576562334e616d65496e7075743c543e00043834556e62616e2061206e616d652e00704d616b652061206e616d6520636c61696d61626c6520616761696e2e0088546865206f726967696e206d757374206265207468652062616e206f726967696e2e00e0456d6974732060576562334e616d65556e62616e6e65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129b02d2052656164733a2042616e6e65642073746f7261676520656e747279202b206f726967696e20636865636bb82d205772697465733a2042616e6e65642073746f7261676520656e747279206465706f7369742072656c656173652c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657200051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00e8546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f662074686520776562336e616d652ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f7369740401286e616d655f696e70757429010140576562334e616d65496e7075743c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed5040c487075626c69635f63726564656e7469616c731870616c6c65741043616c6c04045400011c0c61646404012863726564656e7469616cd9040164426f783c496e70757443726564656e7469616c4f663c543e3e000018a852656769737465722061206e6577207075626c69632063726564656e7469616c206f6e20636861696e2e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c2077697468207468652073616d65206964656e74696669657220616c72656164798465786973747320666f722074686520737065636966696564207375626a6563742e0064456d697473206043726564656e7469616c53746f726564602e187265766f6b6508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e410401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000120705265766f6b65732061207075626c69632063726564656e7469616c2e001101496620612063726564656e7469616c2077617320616c7265616479207265766f6b65642c20746869732066756e6374696f6e20646f6573206e6f74206661696c206275746473696d706c7920726573756c747320696e2061206e6f6f702e000101546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f207265766f6b65207468652063726564656e7469616c2e0068456d697473206043726564656e7469616c5265766f6b6564602e20756e7265766f6b6508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e410401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e00022478556e7265766f6b65732061207075626c69632063726564656e7469616c2e000101496620612063726564656e7469616c20776173206e6f74207265766f6b65642c20746869732066756e6374696f6e20646f6573206e6f74206661696c206275746473696d706c7920726573756c747320696e2061206e6f6f702e00d8546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f20756e7265766f6b65207468652c63726564656e7469616c2e0070456d697473206043726564656e7469616c556e7265766f6b6564602e1872656d6f766508013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e410401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000344fc52656d6f7665732074686520696e666f726d6174696f6e207065727461696e696e672061207075626c69632063726564656e7469616c2066726f6d2074686518636861696e2e0009015468652072656d6f76616c206f66207468652063726564656e7469616c20646f6573206e6f742064656c65746520697420656e746972656c792066726f6d207468650501626c6f636b636861696e20686973746f72792c20627574206f6e6c7920697473206c696e6b202a66726f6d2a2074686520626c6f636b636861696e2073746174659c2a746f2a2074686520626c6f636b636861696e20686973746f72792069732072656d6f7665642e00cc436c69656e74732070617273696e67207075626c69632063726564656e7469616c732073686f756c6420696e746572707265740101746865206c61636b206f6620737563682061206c696e6b2061732074686520666163742074686174207468652063726564656e7469616c20686173206265656eb872656d6f7665642062792069747320617474657374657220736f6d652074696d6520696e2074686520706173742e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c20616c72656164792065786973747320666f722074686520737065636966696564207375626a6563742e000101546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f2072656d6f7665207468652063726564656e7469616c2e0068456d697473206043726564656e7469616c52656d6f766564602e3c7265636c61696d5f6465706f73697404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e000448fc52656d6f7665732074686520696e666f726d6174696f6e207065727461696e696e672061207075626c69632063726564656e7469616c2066726f6d20746865ac636861696e20616e642072657475726e7320746865206465706f73697420746f206974732070617965722e0009015468652072656d6f76616c206f66207468652063726564656e7469616c20646f6573206e6f742064656c65746520697420656e746972656c792066726f6d207468650501626c6f636b636861696e20686973746f72792c20627574206f6e6c7920697473206c696e6b202a66726f6d2a2074686520626c6f636b636861696e2073746174659c2a746f2a2074686520626c6f636b636861696e20686973746f72792069732072656d6f7665642e00cc436c69656e74732070617273696e67207075626c69632063726564656e7469616c732073686f756c6420696e746572707265740101746865206c61636b206f6620737563682061206c696e6b2061732074686520666163742074686174207468652063726564656e7469616c20686173206265656eb872656d6f7665642062792069747320617474657374657220736f6d652074696d6520696e2074686520706173742e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c20616c72656164792065786973747320666f722074686520737065636966696564207375626a6563742e000d01546865206469737061746368206f726967696e206d75737420626520746865206f776e6572206f6620746865206465706f7369742c2068656e6365206e6f74207468655863726564656e7469616c27732061747465737465722e0068456d697473206043726564656e7469616c52656d6f766564602e506368616e67655f6465706f7369745f6f776e657204013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e00051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00f0546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f66207468652063726564656e7469616c2ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404013463726564656e7469616c5f69642c014443726564656e7469616c49644f663c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ed9040c487075626c69635f63726564656e7469616c732c63726564656e7469616c732843726564656e7469616c1024437479706548617368012c445375626a6563744964656e74696669657201dd0418436c61696d7301e10434416363657373436f6e74726f6c0145040010012863747970655f686173682c012443747970654861736800011c7375626a656374dd0401445375626a6563744964656e746966696572000118636c61696d73e1040118436c61696d73000134617574686f72697a6174696f6e410401544f7074696f6e3c416363657373436f6e74726f6c3e0000dd040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000e1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e0000e5040c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f6461746104011064617461e904015450617261636861696e496e686572656e744461746100002480536574207468652063757272656e742076616c69646174696f6e20646174612e004101546869732073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e887068617365206966207468652063616c6c20776173206e6f7420696e766f6b65642e00d0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e7460002101417320612073696465206566666563742c20746869732066756e6374696f6e207570677261646573207468652063757272656e742076616c69646174696f6e2066756e6374696f6e8469662074686520617070726f7072696174652074696d652068617320636f6d652e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653001345570776172644d65737361676500010044617574686f72697a655f75706772616465080124636f64655f686173682c011c543a3a48617368000134636865636b5f76657273696f6ea80110626f6f6c0002206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015468652060636865636b5f76657273696f6e6020706172616d657465722073657473206120626f6f6c65616e20666c616720666f722077686574686572206f72206e6f74207468652072756e74696d6527732073706563610176657273696f6e20616e64206e616d652073686f756c64206265207665726966696564206f6e20757067726164652e2053696e63652074686520617574686f72697a6174696f6e206f6e6c7920686173206120686173682cb069742063616e6e6f742061637475616c6c7920706572666f726d2074686520766572696669636174696f6e2e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e60656e6163745f617574686f72697a65645f75706772616465040110636f646530011c5665633c75383e000324550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005d014e6f7465207468617420746869732066756e6374696f6e2077696c6c206e6f74206170706c7920746865206e65772060636f6465602c20627574206f6e6c7920617474656d707420746f207363686564756c652074686574757067726164652077697468207468652052656c617920436861696e2e0060416c6c206f726967696e732061726520616c6c6f7765642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee904089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f64617461ed04015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f7374617465f504015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d65737361676573fd04016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573050501a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e0000ed040c4c706f6c6b61646f745f7072696d6974697665730876325c50657273697374656456616c69646174696f6e44617461080448012c044e011c0010012c706172656e745f68656164f1040120486561644461746100014c72656c61795f706172656e745f6e756d6265721c01044e00016472656c61795f706172656e745f73746f726167655f726f6f742c0104480001306d61785f706f765f73697a651c010c7533320000f1040c48706f6c6b61646f745f70617261636861696e287072696d6974697665732048656164446174610000040030011c5665633c75383e0000f5040c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f646573f904014442547265655365743c5665633c75383e3e0000f904042042547265655365740404540130000400a902000000fd0400000201050001050860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d626572011c0008011c73656e745f61741c012c426c6f636b4e756d62657200010c6d736730013c446f776e776172644d65737361676500000505042042547265654d617008044b01a9010456010905000400110500000009050000020d05000d050860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d626572011c0008011c73656e745f61741c012c426c6f636b4e756d6265720001106461746130015073705f7374643a3a7665633a3a5665633c75383e00001105000002150500150500000408a90109050019050c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c04045400012448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d697424011857656967687400003484536572766963657320612073696e676c65206f7665727765696768742058434d2e00c02d20606f726967696e603a204d75737420706173732060457865637574654f7665727765696768744f726967696e602ed42d2060696e646578603a2054686520696e646578206f6620746865206f7665727765696768742058434d20746f20736572766963650d012d20607765696768745f6c696d6974603a2054686520616d6f756e74206f662077656967687420746861742058434d20657865637574696f6e206d61792074616b652e001c4572726f72733a5d012d20604261644f766572776569676874496e646578603a2058434d20756e6465722060696e64657860206973206e6f7420666f756e6420696e2074686520604f766572776569676874602073746f72616765206d61702e45012d206042616458636d603a2058434d20756e6465722060696e646578602063616e6e6f742062652070726f7065726c79206465636f64656420696e746f20612076616c69642058434d20666f726d61742e09012d20605765696768744f7665724c696d6974603a2058434d20657865637574696f6e206d617920757365206772656174657220607765696768745f6c696d6974602e001c4576656e74733a8c2d20604f7665727765696768745365727669636564603a204f6e20737563636573732e5473757370656e645f78636d5f657865637574696f6e00010c490153757370656e647320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652c207265676172646c657373206f66207468652073656e6465722773206f726967696e2e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e50726573756d655f78636d5f657865637574696f6e000214b8526573756d657320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652e003d014e6f7465207468617420746869732066756e6374696f6e20646f65736e2774206368616e67652074686520737461747573206f662074686520696e2f6f757420626f756e64206368616e6e656c732e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e607570646174655f73757370656e645f7468726573686f6c6404010c6e65771c010c75333200031499014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e2074686520717565756520666f7220746865206f74686572207369646520746f20626520746f6c6420746f5873757370656e642074686569722073656e64696e672e00742d20606f726967696e603a204d75737420706173732060526f6f74602ee82d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e73757370656e645f76616c756560547570646174655f64726f705f7468726573686f6c6404010c6e65771c010c75333200041495014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e207468652071756575652061667465722077686963682077652064726f7020616e792066757274686572686d657373616765732066726f6d20746865206368616e6e656c2e00742d20606f726967696e603a204d75737420706173732060526f6f74602eec2d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e64726f705f7468726573686f6c64605c7570646174655f726573756d655f7468726573686f6c6404010c6e65771c010c75333200051491014f76657277726974657320746865206e756d626572206f66207061676573206f66206d6573736167657320776869636820746865207175657565206d757374206265207265647563656420746f206265666f7265206974207369676e616c732074686174ec6d6573736167652073656e64696e67206d6179207265636f6d6d656e636520616674657220697420686173206265656e2073757370656e6465642e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e726573756d655f7468726573686f6c64605c7570646174655f7468726573686f6c645f77656967687404010c6e657724011857656967687400061049014f7665727772697465732074686520616d6f756e74206f662072656d61696e696e672077656967687420756e6465722077686963682077652073746f702070726f63657373696e67206d657373616765732e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7468726573686f6c645f77656967687460707570646174655f7765696768745f72657374726963745f646563617904010c6e657724011857656967687400071445014f7665727772697465732074686520737065656420746f2077686963682074686520617661696c61626c652077656967687420617070726f616368657320746865206d6178696d756d207765696768742ea50141206c6f776572206e756d62657220726573756c747320696e2061206661737465722070726f6772657373696f6e2e20412076616c7565206f662031206d616b65732074686520656e746972652077656967687420617661696c61626c6520696e697469616c6c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e0d012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7765696768745f72657374726963745f6465636179602e847570646174655f78636d705f6d61785f696e646976696475616c5f77656967687404010c6e657724011857656967687400081429014f766572777269746520746865206d6178696d756d20616d6f756e74206f662077656967687420616e7920696e646976696475616c206d657373616765206d617920636f6e73756d652e71014d657373616765732061626f766520746869732077656967687420676f20696e746f20746865206f76657277656967687420717565756520616e64206d6179206f6e6c79206265207365727669636564206578706c696369746c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e21012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e78636d705f6d61785f696e646976696475616c5f776569676874602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e1d050c2870616c6c65745f78636d1870616c6c65741043616c6c0404540001281073656e64080110646573747d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011c6d65737361676521050154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f617373657473100110646573747d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172797d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747345020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c75333200013c110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f617373657473100110646573747d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172797d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747345020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320002404d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d657373616765510501c0426f783c56657273696f6e656458636d3c3c5420617320537973436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f77656967687424011857656967687400032cd04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e006d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e2074686559016d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f20657865637574696f6e54617474656d70742077696c6c206265206d6164652e006d014e4f54453a2041207375636365737366756c2072657475726e20746f207468697320646f6573202a6e6f742a20696d706c7920746861742074686520606d73676020776173206578656375746564207375636365737366756c6c79cc746f20636f6d706c6574696f6e3b206f6e6c792074686174202a736f6d652a206f66206974207761732065786563757465642e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6eb5010148426f783c4d756c74694c6f636174696f6e3e00012c78636d5f76657273696f6e1c012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00642d20606f726967696e603a204d75737420626520526f6f742ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6ec10301484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00642d20606f726967696e603a204d75737420626520526f6f742e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e7d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00642d20606f726967696e603a204d75737420626520526f6f742e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e7d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00642d20606f726967696e603a204d75737420626520526f6f742e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f617373657473140110646573747d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172797d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747345020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320001307765696768745f6c696d69744102012c5765696768744c696d69740008484d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f617373657473140110646573747d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172797d02016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747345020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d1c010c7533320001307765696768745f6c696d69744102012c5765696768744c696d6974000944110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2105080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204002505015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400d901015076333a3a58636d3c52756e74696d6543616c6c3e0003000025050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400290501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e000029050000022d05002d050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404004902012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404004902012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404004902012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f696428011c51756572794964000120726573706f6e736531050120526573706f6e73650001286d61785f77656967687428010c753634000300345472616e7366657241737365740801186173736574734902012c4d756c746941737365747300012c62656e6566696369617279590201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574734902012c4d756c746941737365747300011064657374590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065290201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c2d020168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c101010c7533320001406d61785f6d6573736167655f73697a65c101010c7533320001306d61785f6361706163697479c101010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c101010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c101010c75333200011873656e646572c101010c753332000124726563697069656e74c101010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e04005d020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f696428011c5175657279496400011064657374590201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f77656967687428010c753634000c00304465706f73697441737365740c0118617373657473410501404d756c7469417373657446696c7465720001286d61785f617373657473c101010c75333200012c62656e6566696369617279590201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473410501404d756c7469417373657446696c7465720001286d61785f617373657473c101010c75333200011064657374590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e000e003445786368616e6765417373657408011067697665410501404d756c7469417373657446696c74657200011c726563656976654902012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473410501404d756c7469417373657446696c74657200011c72657365727665590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473410501404d756c7469417373657446696c74657200011064657374590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f696428011c5175657279496400011064657374590201344d756c74694c6f636174696f6e000118617373657473410501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f77656967687428010c75363400120030427579457865637574696f6e08011066656573510201284d756c746941737365740001307765696768745f6c696d69744d05012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204002505014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804002505014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574734902012c4d756c74694173736574730001187469636b6574590201344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f77656967687428010c753634001a0048556e73756273637269626556657273696f6e001b000031050c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304004902012c4d756c74694173736574730001003c457865637574696f6e526573756c740400350501504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e04001c013873757065723a3a56657273696f6e00030000350504184f7074696f6e0404540139050108104e6f6e6500000010536f6d650400390500000100003905000004081c3d05003d05100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404001001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c65001900004105100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504004902012c4d756c74694173736574730000001057696c6404004505013857696c644d756c74694173736574000100004505100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869645502011c4173736574496400010c66756e4905013c57696c6446756e676962696c697479000100004905100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c65000100004d050c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d69746564040028010c753634000100005105080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204005505015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304006505015076333a3a58636d3c52756e74696d6543616c6c3e0003000055050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400590501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e000059050000025d05005d050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404004902012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404004902012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404004902012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f696428011c51756572794964000120726573706f6e736531050120526573706f6e73650001286d61785f77656967687428010c753634000300345472616e7366657241737365740801186173736574734902012c4d756c746941737365747300012c62656e6566696369617279590201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574734902012c4d756c746941737365747300011064657374590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065290201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428010c75363400011063616c6c61050168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c101010c7533320001406d61785f6d6573736167655f73697a65c101010c7533320001306d61785f6361706163697479c101010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c101010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c101010c75333200011873656e646572c101010c753332000124726563697069656e74c101010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e04005d020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f696428011c5175657279496400011064657374590201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f77656967687428010c753634000c00304465706f73697441737365740c0118617373657473410501404d756c7469417373657446696c7465720001286d61785f617373657473c101010c75333200012c62656e6566696369617279590201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473410501404d756c7469417373657446696c7465720001286d61785f617373657473c101010c75333200011064657374590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e000e003445786368616e6765417373657408011067697665410501404d756c7469417373657446696c74657200011c726563656976654902012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473410501404d756c7469417373657446696c74657200011c72657365727665590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473410501404d756c7469417373657446696c74657200011064657374590201344d756c74694c6f636174696f6e00010c78636d2505011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f696428011c5175657279496400011064657374590201344d756c74694c6f636174696f6e000118617373657473410501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f77656967687428010c75363400120030427579457865637574696f6e08011066656573510201284d756c746941737365740001307765696768745f6c696d69744d05012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204005505014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804005505014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574734902012c4d756c74694173736574730001187469636b6574590201344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f77656967687428010c753634001a0048556e73756273637269626556657273696f6e001b000061050c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656430011c5665633c75383e000065050c0c78636d0876330c58636d041043616c6c00000400690501585665633c496e737472756374696f6e3c43616c6c3e3e000069050000026d05006d050c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400e501012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400e501012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400e501012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f696428011c51756572794964000120726573706f6e736501020120526573706f6e73650001286d61785f77656967687424011857656967687400011c71756572696572250201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473e501012c4d756c746941737365747300012c62656e6566696369617279b50101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473e501012c4d756c746941737365747300011064657374b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64290201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737424011857656967687400011063616c6c6105014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c101010c7533320001406d61785f6d6573736167655f73697a65c101010c7533320001306d61785f6361706163697479c101010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c101010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c101010c75333200011873656e646572c101010c753332000124726563697069656e74c101010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400b9010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400310201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473350201404d756c7469417373657446696c74657200012c62656e6566696369617279b50101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473350201404d756c7469417373657446696c74657200011064657374b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e000e003445786368616e676541737365740c011067697665350201404d756c7469417373657446696c74657200011077616e74e501012c4d756c746941737365747300011c6d6178696d616ca80110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473350201404d756c7469417373657446696c74657200011c72657365727665b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473350201404d756c7469417373657446696c74657200011064657374b50101344d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f310201445175657279526573706f6e7365496e666f000118617373657473350201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573ed0101284d756c746941737365740001307765696768745f6c696d69744102012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204006505012458636d3c43616c6c3e0015002c536574417070656e64697804006505012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473e501012c4d756c74694173736574730001187469636b6574b50101344d756c74694c6f636174696f6e0018001054726170040028010c7536340019004053756273637269626556657273696f6e08012071756572795f696428011c5175657279496400014c6d61785f726573706f6e73655f776569676874240118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400e501012c4d756c7469417373657473001c002c45787065637441737365740400e501012c4d756c7469417373657473001d00304578706563744f726967696e0400250201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400050201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e7361637453746174757304001d0201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6530011c5665633c75383e000134726573706f6e73655f696e666f310201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578c101010c7533320001106e616d6530011c5665633c75383e00012c6d6f64756c655f6e616d6530011c5665633c75383e00012c63726174655f6d616a6f72c101010c75333200013c6d696e5f63726174655f6d696e6f72c101010c753332002200505265706f72745472616e736163745374617475730400310201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400bd0101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bc90101244e6574776f726b496400012c64657374696e6174696f6eb9010154496e746572696f724d756c74694c6f636174696f6e00010c78636dd901011c58636d3c28293e002600244c6f636b41737365740801146173736574ed0101284d756c74694173736574000120756e6c6f636b6572b50101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574ed0101284d756c74694173736574000118746172676574b50101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574ed0101284d756c746941737365740001146f776e6572b50101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574ed0101284d756c746941737365740001186c6f636b6572b50101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177a80110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400b50101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69744102012c5765696768744c696d6974000130636865636b5f6f726967696e250201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f000071050c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c65741043616c6c04045400010448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d6974240118576569676874000004905365727669636520612073696e676c65206f766572776569676874206d6573736167652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7505000002ad03007905000004087d0518007d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400350301185665633c543e000081050c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d62657201102050726f706f73616c01b1031c42616c616e6365011801081c4f6e676f696e670400850501c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564a80110626f6f6c00010c656e6410012c426c6f636b4e756d6265720001000085050c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d62657201102050726f706f73616c01b1031c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200012070726f706f73616cb103012050726f706f73616c0001247468726573686f6c64940134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c798905013854616c6c793c42616c616e63653e000089050c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e636500008d050c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f746573000108184469726563740c0114766f746573910501f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e739d05015044656c65676174696f6e733c42616c616e63653e0001147072696f72a105017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6ebd030128436f6e76696374696f6e00012c64656c65676174696f6e739d05015044656c65676174696f6e733c42616c616e63653e0001147072696f72a105017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0001000091050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019505045300000400990501185665633c543e00009505000004081c980099050000029505009d050c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e63650000a1050c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e63650000a50500000408b1039400a90500000408107d0500ad050c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f720404540001602056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7740507265696d6167654e6f7445786973740017047054686520707265696d61676520646f6573206e6f742065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012c0453000004008d0201185665633c543e0000b505084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e6465781c013450726f706f73616c496e6465780001247468726573686f6c641c012c4d656d626572436f756e7400011061796573350301385665633c4163636f756e7449643e0001106e617973350301385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d6265720000b9050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909bd050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012c0453000004008d0201185665633c543e0000c1050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909c5050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400350301185665633c543e0000c9050c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909cd05083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e63650000d1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011c045300000400450301185665633c543e0000d5050c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c000004001c010c7533320000d90504184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000dd0508346672616d655f737570706f72742050616c6c6574496400000400fd01011c5b75383b20385d0000e1050c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900011470496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e04784572726f7220666f72207468652074726561737572792070616c6c65742ee5050c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011104045300000400ed0501185665633c543e0000ed05000002110400f105083870616c6c65745f76657374696e672052656c656173657300010808563000000008563100010000f5050c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742ef9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401fd05045300000400050601185665633c543e0000fd0504184f7074696f6e0404540101060108104e6f6e6500000010536f6d650400010600000100000106084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c01b1032c426c6f636b4e756d62657201103450616c6c6574734f726967696e01ed03244163636f756e7449640100001401206d617962655f6964d001304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cb103011043616c6c0001386d617962655f706572696f646963190401944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696eed03013450616c6c6574734f726967696e00000506000002fd050009060c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909090d06000004081106180011060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011506045300000400190601185665633c543e00001506083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501d82c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065d8012450726f78795479706500011464656c617910012c426c6f636b4e756d626572000019060000021506001d06000004082106180021060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012506045300000400290601185665633c543e00002506083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e74496401001048617368012c2c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173682c01104861736800011868656967687410012c426c6f636b4e756d626572000029060000022506002d060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909093106083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f73697435060150284163636f756e7449642c2042616c616e63652900010c6c656e1c010c753332000000245265717565737465640c011c6465706f736974390601704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e741c010c75333200010c6c656ec103012c4f7074696f6e3c7533323e00010000350600000408001800390604184f7074696f6e0404540135060108104e6f6e6500000010536f6d650400350600000100003d06000004082c1c0041060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003001185665633c543e000045060c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090949060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400350301185665633c543e00004d060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909095106082c70616c6c65745f746970731c4f70656e54697010244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d62657201101048617368012c001c0118726561736f6e2c01104861736800010c77686f0001244163636f756e74496400011866696e6465720001244163636f756e74496400011c6465706f73697418011c42616c616e6365000118636c6f7365735506014c4f7074696f6e3c426c6f636b4e756d6265723e00011074697073590601645665633c284163636f756e7449642c2042616c616e6365293e00012c66696e646572735f666565a80110626f6f6c0000550604184f7074696f6e04045401100108104e6f6e6500000010536f6d65040010000001000059060000023506005d060c3473705f61726974686d65746963287065725f7468696e67731c50657263656e74000004000801087538000061060c2c70616c6c65745f746970731870616c6c6574144572726f7208045400044900011830526561736f6e546f6f4269670000048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e30416c72656164794b6e6f776e00010488546865207469702077617320616c726561647920666f756e642f737461727465642e28556e6b6e6f776e5469700002046054686520746970206861736820697320756e6b6e6f776e2e244e6f7446696e6465720003041d01546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e245374696c6c4f70656e0004042901546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e245072656d61747572650005043101546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909096506000004080004006906083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656ef0015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c736d06018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e00006d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400350301185665633c543e000071060c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090975060c1463747970652c63747970655f656e747279284374797065456e747279081c43726561746f7201002c426c6f636b4e756d62657201100008011c63726561746f7200011c43726561746f72000128637265617465645f617410012c426c6f636b4e756d626572000079060c1463747970651870616c6c6574144572726f7204045400010c204e6f74466f756e64000004985468657265206973206e6f20435479706520776974682074686520676976656e20686173682e34416c72656164794578697374730001046454686520435479706520616c7265616479206578697374732e3c556e61626c65546f506179466565730002040d0154686520706179696e67206163636f756e742077617320756e61626c6520746f2070617920746865206665657320666f72206372656174696e6720612063747970652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909097d060c2c6174746573746174696f6e306174746573746174696f6e73484174746573746174696f6e44657461696c73040454000014012863747970655f686173682c01384374797065486173684f663c543e000120617474657374657200013441747465737465724f663c543e000140617574686f72697a6174696f6e5f6964fc01704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e00011c7265766f6b6564a80110626f6f6c00011c6465706f736974810601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e000081060c306b696c745f737570706f72741c6465706f7369741c4465706f736974081c4163636f756e7401001c42616c616e63650118000801146f776e657200011c4163636f756e74000118616d6f756e7418011c42616c616e6365000085060000040801012c0089060c2c6174746573746174696f6e1870616c6c6574144572726f720404540001183c416c726561647941747465737465640000080901546865726520697320616c726561647920616e206174746573746174696f6e2077697468207468652073616d6520636c61696d20686173682073746f726564206f6e18636861696e2e38416c72656164795265766f6b6564000104a4546865206174746573746174696f6e2068617320616c7265616479206265656e207265766f6b65642e204e6f74466f756e64000204c04e6f206174746573746174696f6e206f6e20636861696e206d61746368696e672074686520636c61696d20686173682e3443547970654d69736d61746368000308fc546865206174746573746174696f6e20435479706520646f6573206e6f74206d61746368207468652043547970652073706563696669656420696e207468656864656c65676174696f6e2068696572617263687920726f6f742e344e6f74417574686f72697a6564000404f05468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f206368616e676520746865206174746573746174696f6e2e804d617844656c6567617465644174746573746174696f6e73457863656564656400050cf4546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732068617320616c7265616479206265656e05017265616368656420666f722074686520636f72726573706f6e64696e672064656c65676174696f6e2069642073756368207468617420616e6f74686572206f6e654063616e6e6f742062652061646465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909098d060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368793844656c65676174696f6e4e6f646504045400001401446869657261726368795f726f6f745f69642c015444656c65676174696f6e4e6f646549644f663c543e000118706172656e74c50301744f7074696f6e3c44656c65676174696f6e4e6f646549644f663c543e3e0001206368696c6472656e910601d8426f756e64656442547265655365743c44656c65676174696f6e4e6f646549644f663c543e2c20543a3a4d61784368696c6472656e3e00011c64657461696c739906015044656c65676174696f6e44657461696c733c543e00011c6465706f736974810601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e000091060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454012c0453000004009506012c42547265655365743c543e0000950604204254726565536574040454012c0004008d0200000099060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368794444656c65676174696f6e44657461696c7304045400000c01146f776e657200014044656c656761746f7249644f663c543e00011c7265766f6b6564a80110626f6f6c00012c7065726d697373696f6e730901012c5065726d697373696f6e7300009d060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368796844656c65676174696f6e48696572617263687944657461696c73040454000004012863747970655f686173682c01384374797065486173684f663c543e0000a1060c2864656c65676174696f6e1870616c6c6574144572726f720404540001585c44656c65676174696f6e416c72656164794578697374730000041101546865726520697320616c726561647920612064656c65676174696f6e206e6f64652077697468207468652073616d652049442073746f726564206f6e20636861696e2e60496e76616c696444656c65676174655369676e617475726500010805015468652064656c65676174652773207369676e617475726520666f72207468652064656c65676174696f6e206372656174696f6e206f7065726174696f6e20697320696e76616c69642e4844656c65676174696f6e4e6f74466f756e64000204c04e6f2064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e4044656c65676174654e6f74466f756e64000304b84e6f2064656c656761746520776974682074686520676976656e2049442073746f726564206f6e20636861696e2e58486965726172636879416c7265616479457869737473000404f8546865726520697320616c72656164792061206869657261726368792077697468207468652073616d652049442073746f726564206f6e20636861696e2e444869657261726368794e6f74466f756e64000504bc4e6f2068696572617263687920776974682074686520676976656e2049442073746f726564206f6e20636861696e2e544d617853656172636844657074685265616368656400060409014d6178206e756d626572206f66206e6f64657320636865636b656420776974686f757420766572696679696e672074686520676976656e20636f6e646974696f6e2e684e6f744f776e65724f66506172656e7444656c65676174696f6e000708f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6ef462656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20706172656e74206e6f64652e744e6f744f776e65724f6644656c65676174696f6e486965726172636879000808f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6eec62656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20726f6f74206e6f64652e60506172656e7444656c65676174696f6e4e6f74466f756e64000904dc4e6f20706172656e742064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e5c506172656e7444656c65676174696f6e5265766f6b6564000a04c854686520706172656e742064656c65676174696f6e206861732070726576696f75736c79206265656e207265766f6b65642e58556e617574686f72697a65645265766f636174696f6e000b04fc5468652064656c65676174696f6e207265766f6b6572206973206e6f7420616c6c6f77656420746f207265766f6b65207468652064656c65676174696f6e2e4c556e617574686f72697a656452656d6f76616c000c04ec5468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f2072656d6f7665207468652064656c65676174696f6e2e58556e617574686f72697a656444656c65676174696f6e000d04fc5468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f20637265617465207468652064656c65676174696f6e2e3041636365737344656e696564000e04f0546865206f7065726174696f6e207761736e277420616c6c6f7765642062656361757365206f6620696e73756666696369656e74207269676874732e6045786365656465645265766f636174696f6e426f756e6473000f080d014d6178206e756d626572206f66207265766f636174696f6e7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7238746865206f7065726174696f6e2e54457863656564656452656d6f76616c426f756e647300100811014d6178206e756d626572206f662072656d6f76616c7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7220746865286f7065726174696f6e2e584d61785265766f636174696f6e73546f6f4c61726765001104f8546865206d6178206e756d626572206f66207265766f636174696f6e206578636565647320746865206c696d697420666f72207468652070616c6c65742e4c4d617852656d6f76616c73546f6f4c61726765001204f0546865206d6178206e756d626572206f662072656d6f76616c73206578636565647320746865206c696d697420666f72207468652070616c6c65742e5c4d6178506172656e74436865636b73546f6f4c617267650013040501546865206d6178206e756d626572206f6620706172656e7420636865636b73206578636565647320746865206c696d697420666f72207468652070616c6c65742e20496e7465726e616c001404f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e4c4d61784368696c6472656e4578636565646564001508dc546865206d6178206e756d626572206f6620616c6c206368696c6472656e20686173206265656e207265616368656420666f722074686578636f72726573706f6e64696e672064656c65676174696f6e206e6f64652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a5060c0c6469642c6469645f64657461696c732844696444657461696c7304045400001c014861757468656e7469636174696f6e5f6b65792c01284b657949644f663c543e0001486b65795f61677265656d656e745f6b657973a90601604469644b657941677265656d656e744b65795365743c543e00013864656c65676174696f6e5f6b6579c50301484f7074696f6e3c4b657949644f663c543e3e00013c6174746573746174696f6e5f6b6579c50301484f7074696f6e3c4b657949644f663c543e3e00012c7075626c69635f6b657973ad0601484469645075626c69634b65794d61703c543e00013c6c6173745f74785f636f756e74657210010c75363400011c6465706f736974810601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e0000a9060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e6465644254726565536574080454012c0453000004009506012c42547265655365743c543e0000ad060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b012c045601b106045300000400b906013842547265654d61703c4b2c20563e0000b1060c0c6469642c6469645f64657461696c734c4469645075626c69634b657944657461696c73042c426c6f636b4e756d62657201100008010c6b6579b50601304469645075626c69634b6579000130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720000b5060c0c6469642c6469645f64657461696c73304469645075626c69634b6579000108545075626c6963566572696669636174696f6e4b6579040089040148446964566572696669636174696f6e4b65790000004c5075626c6963456e6372797074696f6e4b6579040079040140446964456e6372797074696f6e4b657900010000b906042042547265654d617008044b012c045601b106000400bd06000000bd06000002c10600c106000004082cb10600c5060000040800a10400c9060c0c6469641870616c6c6574144572726f7204045400016c58496e76616c69645369676e6174757265466f726d6174000008050154686520444944206f7065726174696f6e207369676e6174757265206973206e6f7420696e2074686520666f726d61742074686520766572696669636174696f6e306b657920657870656374732e40496e76616c69645369676e6174757265000108f854686520444944206f7065726174696f6e207369676e617475726520697320696e76616c696420666f7220746865207061796c6f616420616e642074686568766572696669636174696f6e206b65792070726f76696465642e34416c7265616479457869737473000204f85468652044494420776974682074686520676976656e206964656e74696669657220697320616c72656164792070726573656e74206f6e20636861696e2e204e6f74466f756e64000304d44e6f2044494420776974682074686520676976656e206964656e7469666965722069732070726573656e74206f6e20636861696e2e5c566572696669636174696f6e4b65794e6f74466f756e6400040809014f6e65206f72206d6f726520766572696669636174696f6e206b657973207265666572656e63656420617265206e6f742073746f72656420696e2074686520736574546f6620766572696669636174696f6e206b6579732e30496e76616c69644e6f6e6365000504090154686520444944206f7065726174696f6e206e6f6e6365206973206e6f7420657175616c20746f207468652063757272656e7420444944206e6f6e6365202b20312e7c556e737570706f72746564446964417574686f72697a6174696f6e43616c6c000604e05468652063616c6c65642065787472696e73696320646f6573206e6f7420737570706f72742044494420617574686f7269736174696f6e2e6c496e76616c6964446964417574686f72697a6174696f6e43616c6c000708dc5468652063616c6c2068616420706172616d6574657273207468617420636f6e666c696374656420776974682065616368206f74686572406f72207765726520696e76616c69642e8c4d61784e65774b657941677265656d656e744b6579734c696d697445786365656465640008080d0141206e756d626572206f66206e6577206b65792061677265656d656e74206b6579732067726561746572207468616e20746865206d6178696d756d20616c6c6f77656448686173206265656e2070726f76696465642e544d61785075626c69634b65797345786365656465640009080501546865206d6178696d756d206e756d626572206f66207075626c6963206b65797320666f72207468697320444944206b6579206964656e74696669657220686173346265656e20726561636865642e6c4d61784b657941677265656d656e744b6579734578636565646564000a080501546865206d6178696d756d206e756d626572206f66206b65792061677265656d656e747320686173206265656e207265616368656420666f722074686520444944207375626a6563742e304261644469644f726967696e000b04bc546865204449442063616c6c20776173207375626d6974746564206279207468652077726f6e67206163636f756e74485472616e73616374696f6e45787069726564000c040d0154686520626c6f636b206e756d6265722070726f766964656420696e2061204449442d617574686f72697a6564206f7065726174696f6e20697320696e76616c69642e38416c726561647944656c65746564000d04b0546865204449442068617320616c7265616479206265656e2070726576696f75736c792064656c657465642e444e6f744f776e65724f664465706f736974000e04fc4f6e6c7920746865206f776e6572206f6620746865206465706f7369742063616e207265636c61696d206974732072657365727665642062616c616e63652e3c556e61626c65546f50617946656573000f04f0546865206f726967696e20697320756e61626c6520746f207265736572766520746865206465706f73697420616e642070617920746865206665652e6c4d61784e756d6265724f66536572766963657345786365656465640010041101546865206d6178696d756d206e756d626572206f66207365727669636520656e64706f696e747320666f7220612044494420686173206265656e2065786365656465642e684d61785365727669636549644c656e6774684578636565646564001104f0546865207365727669636520656e64706f696e7420494420657863656564656420746865206d6178696d756d20616c6c6f776564206c656e6774682e704d617853657276696365547970654c656e6774684578636565646564001208f84f6e65206f6620746865207365727669636520656e64706f696e7420747970657320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e884d61784e756d6265724f665479706573506572536572766963654578636565646564001308ec546865206d6178696d756d206e756d626572206f6620747970657320666f722061207365727669636520656e64706f696e7420686173206265656e2465786365656465642e6c4d61785365727669636555726c4c656e6774684578636565646564001408f44f6e65206f6620746865207365727669636520656e64706f696e742055524c7320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e844d61784e756d6265724f6655726c735065725365727669636545786365656465640015041101546865206d6178696d756d206e756d626572206f662055524c7320666f722061207365727669636520656e64706f696e7420686173206265656e2065786365656465642e5053657276696365416c726561647945786973747300160411014120736572766963652077697468207468652070726f766964656420494420697320616c72656164792070726573656e7420666f722074686520676976656e204449442e3c536572766963654e6f74466f756e6400170409014120736572766963652077697468207468652070726f7669646564204944206973206e6f742070726573656e7420756e6465722074686520676976656e204449442e58496e76616c696453657276696365456e636f64696e6700180409014f6e65206f6620746865207365727669636520656e64706f696e742064657461696c7320636f6e7461696e73206e6f6e2d415343494920636861726163746572732e7c4d617853746f726564456e64706f696e7473436f756e7445786365656465640019080d01546865206e756d626572206f66207365727669636520656e64706f696e74732073746f72656420756e6465722074686520444944206973206c6172676572207468616e88746865206e756d626572206f6620656e64706f696e747320746f2064656c6574652e20496e7465726e616c001a04f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909cd060c4470616c6c65745f6469645f6c6f6f6b757044636f6e6e656374696f6e5f7265636f726440436f6e6e656374696f6e5265636f72640c344469644964656e74696669657201001c4163636f756e7401001c42616c616e636501180008010c6469640001344469644964656e74696669657200011c6465706f736974810601644465706f7369743c4163636f756e742c2042616c616e63653e0000d1060000040800150100d5060c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144572726f72040454000114204e6f74466f756e640000047c546865206173736f63696174696f6e20646f6573206e6f742065786973742e344e6f74417574686f72697a65640001081101546865206f726967696e20776173206e6f7420616c6c6f77656420746f206d616e61676520746865206173736f63696174696f6e206265747765656e20746865204449444c616e6420746865206163636f756e742049442e344f7574646174656450726f6f66000204b454686520737570706c6965642070726f6f66206f66206f776e65727368697020776173206f757464617465642e44496e73756666696369656e7446756e64730003081101546865206163636f756e742068617320696e73756666696369656e742066756e647320616e642063616e277420706179207468652066656573206f72207265736572766530746865206465706f7369742e244d6967726174696f6e00040c010154686520436f6e6e65637465644163636f756e747320616e6420436f6e6e6563746564446964732073746f7261676520617265206f7574206f662073796e632e0011014e4f54453a20746869732077696c6c206f6e6c792062652072657475726e6564206966207468652073746f726167652068617320696e636f6e73697374656e636965732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909d9060c4470616c6c65745f776562335f6e616d657324776562335f6e616d6544576562334e616d654f776e6572736869700c144f776e657201001c4465706f7369740181062c426c6f636b4e756d6265720110000c01146f776e65720001144f776e6572000128636c61696d65645f617410012c426c6f636b4e756d62657200011c6465706f7369748106011c4465706f7369740000dd060c4470616c6c65745f776562335f6e616d65731870616c6c6574144572726f7204045400013044496e73756666696369656e7446756e64730000040d01546865207478207375626d697474657220646f6573206e6f74206861766520656e6f7567682066756e647320746f2070617920666f7220746865206465706f7369742e34416c7265616479457869737473000104dc54686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c7920636c61696d65642e204e6f74466f756e640002048854686520737065636966696564206e616d6520646f6573206e6f742065786973742e484f776e6572416c7265616479457869737473000304a054686520737065636966696564206f776e657220616c7265616479206f776e732061206e616d652e344f776e65724e6f74466f756e64000404ac54686520737065636966696564206f776e657220646f6573206e6f74206f776e20616e79206e616d65732e1842616e6e6564000508ec54686520737065636966696564206e616d6520686173206265656e2062616e6e656420616e642063616e6e6f7420626520696e746572616374656414776974682e244e6f7442616e6e6564000604ac54686520737065636966696564206e616d65206973206e6f742063757272656e746c792062616e6e65642e34416c726561647942616e6e6564000704d854686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c792062616e6e65642e344e6f74417574686f72697a6564000804cc546865206163746f722063616e6e6f7420706572666f726d65642074686520737065636966696564206f7065726174696f6e2e20546f6f53686f7274000904a841206e616d65207468617420697320746f6f2073686f7274206973206265696e6720636c61696d65642e1c546f6f4c6f6e67000a04a441206e616d65207468617420697320746f6f206c6f6e67206973206265696e6720636c61696d65642e40496e76616c6964436861726163746572000b04f441206e616d65207468617420636f6e7461696e73206e6f7420616c6c6f7765642063686172616374657273206973206265696e6720636c61696d65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e1060000040831012c00e5060c487075626c69635f63726564656e7469616c732c63726564656e7469616c733c43726564656e7469616c456e7472791824435479706548617368012c20417474657374657201002c426c6f636b4e756d6265720110244163636f756e74496401001c42616c616e636501183c417574686f72697a6174696f6e49640101010018012863747970655f686173682c01244354797065486173680001206174746573746572000120417474657374657200011c7265766f6b6564a80110626f6f6c000130626c6f636b5f6e756d62657210012c426c6f636b4e756d62657200011c6465706f7369748106016c4465706f7369743c4163636f756e7449642c2042616c616e63653e000140617574686f72697a6174696f6e5f6964fc015c4f7074696f6e3c417574686f72697a6174696f6e49643e0000e9060c487075626c69635f63726564656e7469616c731870616c6c6574144572726f720404540001183c416c72656164794174746573746564000008f8412063726564656e7469616c2077697468207468652073616d6520726f6f7420686173682068617320616c72656164792069737375656420746f2074686548737065636966696564207375626a6563742e204e6f74466f756e6400010805014e6f2063726564656e7469616c2077697468207468652073706563696669656420726f6f74206861736820686173206265656e2069737375656420746f2074686548737065636966696564207375626a6563742e3c556e61626c65546f50617946656573000204d44e6f7420656e6f75676820746f6b656e7320746f2070617920666f72207468652066656573206f7220746865206465706f7369742e30496e76616c6964496e707574000304805468652063726564656e7469616c20696e70757420697320696e76616c69642e344e6f74417574686f72697a6564000404e05468652063616c6c6572206973206e6f7420617574686f72697a656420746f20706572666f726d656420746865206f7065726174696f6e2e20496e7465726e616c000508f443617463682d616c6c20666f7220616e79206f74686572206572726f727320746861742073686f756c64206e6f742068617070656e2c207965742069742468617070656e65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909ed0604184f7074696f6e04045401f1060108104e6f6e6500000010536f6d650400f1060000010000f1060c4c706f6c6b61646f745f7072696d69746976657308763248557067726164655265737472696374696f6e0001041c50726573656e7400000000f5060c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f686561642c014472656c61795f636861696e3a3a4861736800016472656c61795f64697370617463685f71756575655f73697a65f9060128287533322c2075333229000140696e67726573735f6368616e6e656c73fd0601885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c73fd0601885665633c285061726149642c20416272696467656448726d704368616e6e656c293e0000f906000004081c1c00fd06000002010700010700000408a90105070005070c4c706f6c6b61646f745f7072696d6974697665730876324c416272696467656448726d704368616e6e656c00001801306d61785f63617061636974791c010c7533320001386d61785f746f74616c5f73697a651c010c7533320001406d61785f6d6573736167655f73697a651c010c7533320001246d73675f636f756e741c010c753332000128746f74616c5f73697a651c010c7533320001206d71635f68656164c50301304f7074696f6e3c486173683e000009070c4c706f6c6b61646f745f7072696d697469766573087632644162726964676564486f7374436f6e66696775726174696f6e00002401346d61785f636f64655f73697a651c010c7533320001486d61785f686561645f646174615f73697a651c010c7533320001586d61785f7570776172645f71756575655f636f756e741c010c7533320001546d61785f7570776172645f71756575655f73697a651c010c75333200015c6d61785f7570776172645f6d6573736167655f73697a651c010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e6469646174651c010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e6469646174651c010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e1c012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c61791c012c426c6f636b4e756d62657200000d07089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e000004002c012452656c61794861736800001107042042547265654d617008044b01a9010456010d0700040015070000001507000002190700190700000408a9010d07001d0700000221070021070860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401a90100080124726563697069656e74a901010849640001106461746130015073705f7374643a3a7665633a3a5665633c75383e00002507087c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f686173682c011c543a3a48617368000134636865636b5f76657273696f6ea80110626f6f6c000029070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041901417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e672e5050726f686962697465644279506f6c6b61646f740001044d01506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e2e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733c77696c6c696e6720746f2072756e2e6856616c69646174696f6e446174614e6f74417661696c61626c650003041d0154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b2e74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404290154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b2e304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909092d070000023107003107086463756d756c75735f70616c6c65745f78636d705f717565756554496e626f756e644368616e6e656c44657461696c7300000c011873656e646572a9010118506172614964000114737461746535070130496e626f756e6453746174650001406d6573736167655f6d65746164617461390701a85665633c2852656c6179426c6f636b4e756d6265722c2058636d704d657373616765466f726d6174293e00003507086463756d756c75735f70616c6c65745f78636d705f717565756530496e626f756e645374617465000108084f6b0000002453757370656e6465640001000039070000023d07003d07000004081c41070041070c48706f6c6b61646f745f70617261636861696e287072696d6974697665734458636d704d657373616765466f726d617400010c60436f6e636174656e6174656456657273696f6e656458636d0000005c436f6e636174656e61746564456e636f646564426c6f620001001c5369676e616c7300020000450700000408a9011c0049070000024d07004d07086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74a90101185061726149640001147374617465510701344f7574626f756e6453746174650001347369676e616c735f6578697374a80110626f6f6c00012c66697273745f696e646578dc010c7531360001286c6173745f696e646578dc010c75313600005107086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000550700000408a901dc005907086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e66696744617461000018014473757370656e645f7468726573686f6c641c010c75333200013864726f705f7468726573686f6c641c010c753332000140726573756d655f7468726573686f6c641c010c7533320001407468726573686f6c645f7765696768742401185765696768740001547765696768745f72657374726963745f646563617924011857656967687400016878636d705f6d61785f696e646976696475616c5f77656967687424011857656967687400005d070000040ca9011c300061070c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f72040454000114304661696c6564546f53656e640000046c4661696c656420746f2073656e642058434d206d6573736167652e3042616458636d4f726967696e0001043c4261642058434d206f726967696e2e1842616458636d000204344261642058434d20646174612e484261644f766572776569676874496e64657800030454426164206f76657277656967687420696e6465782e3c5765696768744f7665724c696d6974000404f850726f76696465642077656967687420697320706f737369626c79206e6f7420656e6f75676820746f206578656375746520746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090965070c2870616c6c65745f78636d1870616c6c6574144572726f720404540001502c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108610154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652e2050657268617073a861206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e30496e76616c69644173736574000d0480496e76616c696420617373657420666f7220746865206f7065726174696f6e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304390154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c207573657273206f6620746865206c6f636b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090969070c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144572726f7204045400010004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909096d07086063756d756c75735f70616c6c65745f646d705f717565756528436f6e6669674461746100000401386d61785f696e646976696475616c24011857656967687400007107086063756d756c75735f70616c6c65745f646d705f71756575653450616765496e6465784461746100000c0128626567696e5f757365641c012c50616765436f756e746572000120656e645f757365641c012c50616765436f756e7465720001406f7665727765696768745f636f756e7410013c4f766572776569676874496e646578000075070000027907007907000004081c30007d070c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144572726f720404540001081c556e6b6e6f776e0000048c546865206d65737361676520696e64657820676976656e20697320756e6b6e6f776e2e244f7665724c696d6974000104310154686520616d6f756e74206f662077656967687420676976656e20697320706f737369626c79206e6f7420656e6f75676820666f7220657865637574696e6720746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909098107102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301e9021043616c6c01b503245369676e617475726501c9041445787472610185070004003000000085070000042089078d07910795079907a107a507a90700890710306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e646572040454000000008d0710306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000910710306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000950710306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000990710306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004009d07010c45726100009d07102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000a10710306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e636504045400000400280120543a3a496e6465780000a50710306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000a907086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400cd01013042616c616e63654f663c543e0000941853797374656d011853797374656d401c4163636f756e7401010402000c510100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e7400001c040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010020180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e00001c040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b4861736801010405102c8000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e73696344617461010104051c300400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d626572010010200000000000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801002c80000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010034040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004404001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e7401001c100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104022c91020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000950204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100a80400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100a80400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500008902040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e019d0201501830426c6f636b57656967687473ad026d01624fd75a00070088526a740200400102c0cd1700010700028fa54b0200d000010700e6bd4f570200f00001000002c0cd1700010700a423c0680200200101070088526a7402004001010700a2941a1d0200500002c0cd170000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468bd023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e7410206009000000000000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874c50240089d26020000000000dce704000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6ec9026103386b696c742d7370697269746e6574386b696c742d7370697269746e6574010000005c2b00000000000038df6acb689907609b0400000037e397fc7c91f5e401000000bc9d89904f5b923f0100000037c8bb1350a9a2a803000000f3ff14d5ab5270590300000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000dd718d5cc53262d401000000ea93e3f16f3d69620200000026609555c065660302000000a47b7d544994c99b0100000045bfba51a310b2230100000006000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e2853533538507265666978dc08260014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01d902002454696d657374616d70012454696d657374616d70080c4e6f7701001020000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100a8040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f01dd020004344d696e696d756d506572696f6410207017000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00021c496e6469636573011c496e646963657304204163636f756e74730001040210e1020400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e01e5020174041c4465706f736974184000b47cf328350000000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e01f102052042616c616e636573012042616c616e6365731434546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200f502040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e20526573657276657301010402000503040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e01110301780c484578697374656e7469616c4465706f736974184000a0724e18090000000000000000000004d420546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d61784c6f636b731c103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d617852657365727665731c1032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e01150306485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100190340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e01001d0304000000018004604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00071041757261011041757261082c417574686f726974696573010021030400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f74010031032000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000171c53657373696f6e011c53657373696f6e1c2856616c696461746f7273010035030400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e64657801001c100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e6765640100a8040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010039030400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010045030400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050041030400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405490300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e015103018400015503164050617261636861696e5374616b696e67014050617261636861696e5374616b696e6740544d617853656c656374656443616e6469646174657301001c100000000004090120546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c6563746564206174206561636820726f756e642e14526f756e640100590350000000000000000000000000140000000000000004e82043757272656e7420726f756e64206e756d62657220616e64206e65787420726f756e64207363686564756c6564207472616e736974696f6e2e384c61737444656c65676174696f6e01010405005d03200000000000000000140d012044656c65676174696f6e20696e666f726d6174696f6e20666f7220746865206c61746573742073657373696f6e20696e20776869636820612064656c656761746f722c2064656c6567617465642e000501204974206d6170732066726f6d20616e206163636f756e7420746f20746865206e756d626572206f662064656c65676174696f6e7320696e20746865206c617374982073657373696f6e20696e2077686963682074686579202872652d2964656c6567617465642e3844656c656761746f7253746174650001040500610304000c802044656c65676174696f6e207374616b696e6720696e666f726d6174696f6e2e00cc204974206d6170732066726f6d20616e206163636f756e7420746f206974732064656c65676174696f6e2064657461696c732e3443616e646964617465506f6f6c00010405006503040010a420546865207374616b696e6720696e666f726d6174696f6e20666f7220612063616e6469646174652e00b0204974206d6170732066726f6d20616e206163636f756e7420746f2069747320696e666f726d6174696f6e2eb8204d6f72656f7665722c20697420636f756e747320746865206e756d626572206f662063616e646964617465732e5c436f756e746572466f7243616e646964617465506f6f6c01001c100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617048546f74616c436f6c6c61746f725374616b650100790380000000000000000000000000000000000000000000000000000000000000000014f420546f74616c2066756e6473206c6f636b656420746f206261636b207468652063757272656e746c792073656c656374656420636f6c6c61746f72732ed0205468652073756d206f6620616c6c20636f6c6c61746f7220616e642074686569722064656c656761746f72207374616b65732e002101204e6f74653a20546865726520617265206d6f72652066756e6473206c6f636b656420627920746869732070616c6c65742c2073696e636520746865206261636b696e6720666f720901206e6f6e20636f6c6c6174696e672063616e64696461746573206973206e6f7420696e636c7564656420696e205b546f74616c436f6c6c61746f725374616b655d2e34546f7043616e6469646174657301007d03040028e82054686520636f6c6c61746f722063616e64696461746573207769746820746865206869676865737420616d6f756e74206f66207374616b652e00190120456163682074696d6520746865207374616b65206f66206120636f6c6c61746f7220697320696e637265617365642c20697420697320636865636b65642077686574686572050120746869732070757368657320616e6f746865722063616e646964617465206f7574206f6620746865206c6973742e205768656e20746865207374616b652069732101207265647563656420686f77657665722c206974206973206e6f7420636865636b656420696620616e6f746865722063616e64696461746520686173206d6f7265207374616b652c11012073696e6365207468697320776f756c64207265717569726520697465726174696e67206f7665722074686520656e74697265205b43616e646964617465506f6f6c5d2e001501205468657265206d75737420616c77617973206265206d6f72652063616e64696461746573207468616e205b4d617853656c656374656443616e646964617465735d20736f0d012074686174206120636f6c6c61746f722063616e2064726f70206f7574206f662074686520636f6c6c61746f7220736574206279207265647563696e672074686569721c207374616b652e3c496e666c6174696f6e436f6e66696701008503c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046420496e666c6174696f6e20636f6e66696775726174696f6e2e24556e7374616b696e670101040500910304001088205468652066756e64732077616974696e6720746f20626520756e7374616b65642e001d01204974206d6170732066726f6d206163636f756e747320746f20616c6c207468652066756e64732061646472657373656420746f207468656d20696e20746865206675747572652020626c6f636b732e644d6178436f6c6c61746f7243616e6469646174655374616b65010018400000000000000000000000000000000004cc20546865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e6469646174652063616e207374616b652e4c4c617374526577617264526564756374696f6e010010200000000000000000140d0120546865207965617220696e20776869636820746865206c617374206175746f6d6174696320726564756374696f6e206f66207468652072657761726420726174657328206f636375727265642e00250120497420737461727473206174207a65726f2061742067656e6573697320616e6420696e6372656d656e7473206279206f6e6520657665727920424c4f434b535f5045525f5945415234206d616e7920626c6f636b732e38426c6f636b73417574686f726564010104050010200000000000000000080d0120546865206e756d626572206f6620617574686f72656420626c6f636b7320666f7220636f6c6c61746f72732e20497420697320757064617465642076696120746865b020606e6f74655f617574686f726020686f6f6b207768656e20617574686f72696e67206120626c6f636b202e38426c6f636b73526577617264656401010405001020000000000000000024210120546865206e756d626572206f6620626c6f636b7320666f7220776869636820726577617264732068617665206265656e20636c61696d656420627920616e20616464726573732e00190120466f7220636f6c6c61746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f7265642e2049742069732075706461746564207768656ecc20696e6372656d656e74696e6720636f6c6c61746f7220726577617264732c20656974686572207768656e2063616c6c696e67e02060696e635f636f6c6c61746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e00250120466f722064656c656761746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f726564206f662074686520636f6c6c61746f722e497420697305012075706461746564207768656e20696e6372656d656e74696e672064656c656761746f7220726577617264732c20656974686572207768656e2063616c6c696e67e42060696e635f64656c656761746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e1c5265776172647301010405001840000000000000000000000000000000000c01012054686520616363756d756c61746564207265776172647320666f7220636f6c6c61746f722063616e6469646174657320616e642064656c656761746f72732e001101204974206d6170732066726f6d206163636f756e747320746f20746865697220746f74616c20726577617264732073696e636520746865206c617374207061796f75742e34466f7263654e6577526f756e640100a804000001a10301883c444d696e426c6f636b73506572526f756e6410202c0100000000000004d4204d696e696d756d206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e64732063616e206c6173742e5444656661756c74426c6f636b73506572526f756e641020580200000000000008fc2044656661756c74206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e6473206c6173742c2061732073657420696e207468655c2067656e6573697320636f6e66696775726174696f6e2e345374616b654475726174696f6e1020e0c40000000000000c0501204e756d626572206f6620626c6f636b7320666f7220776869636820756e7374616b65642062616c616e63652077696c6c207374696c6c206265206c6f636b6564f0206265666f72652069742063616e20626520756e6c6f636b6564206279206163746976656c792063616c6c696e67207468652065787472696e7369634c2060756e6c6f636b5f756e7374616b6564602e3845786974517565756544656c61791c1002000000080901204e756d626572206f6620726f756e6473206120636f6c6c61746f722068617320746f207374617920616374697665206166746572207375626d697474696e672061c4207265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e304d696e436f6c6c61746f72731c1010000000080d01204d696e696d756d206e756d626572206f6620636f6c6c61746f72732073656c65637465642066726f6d2074686520736574206f662063616e64696461746573206174602065766572792076616c69646174696f6e20726f756e642e504d696e5265717569726564436f6c6c61746f72731c1004000000081101204d696e696d756d206e756d626572206f6620636f6c6c61746f72732077686963682063616e6e6f74206c6561766520746865206e6574776f726b2069662074686572653c20617265206e6f206f74686572732e584d617844656c65676174696f6e73506572526f756e641c1001000000140101204d6178696d756d206e756d626572206f662064656c65676174696f6e732077686963682063616e206265206d6164652077697468696e207468652073616d651c20726f756e642e000d01204e4f54453a20546f2070726576656e742072652d64656c65676174696f6e2d7265776172642061747461636b732c2077652073686f756c64206b65657020746869732c20746f206265206f6e652e604d617844656c656761746f7273506572436f6c6c61746f721c102300000004e4204d6178696d756d206e756d626572206f662064656c656761746f727320612073696e676c6520636f6c6c61746f722063616e20686176652e404d6178546f7043616e646964617465731c104b00000004a0204d6178696d756d2073697a65206f662074686520746f702063616e64696461746573207365742e404d696e436f6c6c61746f725374616b6518400000e8890423c78a0000000000000000080901204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520656c65637465642061732076616c696461746f723420666f72206120726f756e642e644d696e436f6c6c61746f7243616e6469646174655374616b6518400000e8890423c78a0000000000000000080501204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520616464656420746f2074686520736574206f66302063616e646964617465732e444d696e44656c656761746f725374616b651840000082dfe40d4700000000000000000004f8204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f206265636f6d6520612064656c656761746f722e484d6178556e7374616b6552657175657374731c100a00000028e8204d6178206e756d626572206f6620636f6e63757272656e742061637469766520756e7374616b696e67207265717565737473206265666f72652c20756e6c6f636b696e672e001501204e4f54453a20546f2070726f7465637420616761696e737420697272656d6f766162696c697479206f6620612063616e646964617465206f722064656c656761746f722cf4207765206f6e6c7920616c6c6f7720666f72204d6178556e7374616b655265717565737473202d2031206d616e79206d616e75616c20756e7374616b6501012072657175657374732e20546865206c617374206f6e6520736572766573206173206120706c616365686f6c64657220666f7220746865206361736573206f66f02063616c6c696e672065697468657220606b69636b5f64656c656761746f72602c20666f7263655f72656d6f76655f63616e64696461746560206f7209012060657865637574655f6c656176655f63616e64696461746573602e204f74686572776973652c2061207573657220636f756c64206d6178206f75742074686569720d0120756e7374616b6520726571756573747320616e642070726576656e74207468656d73656c7665732066726f6d206265696e67206b69636b65642066726f6d20746865f020736574206f662063616e646964617465732f64656c656761746f727320756e74696c207468657920756e6c6f636b2074686569722066756e64732e484e6574776f726b5265776172645374617274102048a3c800000000000c110120546865207374617274696e6720626c6f636b206e756d62657220666f7220746865206e6574776f726b20726577617264732e204f6e6365207468652063757272656e74090120626c6f636b206e756d626572206578636565647320746869732073746172742c207468652062656e65666963696172792077696c6c2072656365697665207468658420636f6e666967757265642072657761726420696e206561636820626c6f636b2e444e6574776f726b526577617264526174658c2000008a5d784563010c0d0120546865207261746520696e2070657263656e7420666f7220746865206e6574776f726b207265776172647320776869636820617265206261736564206f6e207468650901206d6178696d756d206e756d626572206f6620636f6c6c61746f727320616e6420746865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e1c207374616b652e01a5031528417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000141c41757261457874011c41757261457874042c417574686f72697469657301002103040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c790120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c20616c77617973f0206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e00000000182444656d6f6372616379012444656d6f6372616379303c5075626c696350726f70436f756e7401001c100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f70730100a903040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f66000104051c790504000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e7401001c100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b656401001c100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f66000104051c810504000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f6601010405008d05e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100a80400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c0000a505040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c697374000104062ca90504000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e73010104062ca80400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e284d657461646174614f6600010402a02c040018ec2047656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720616e792070726f706f73616c206f72207265666572656e64756d2e6901205468652060507265696d61676548617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e01b9030190303c456e6163746d656e74506572696f641020201c00000000000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f641020e0c400000000000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f641020e0c400000000000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f641020e0c4000000000000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400080c6a47e8d0300000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f776564a804010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f641020840300000000000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f641020e0c400000000000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f7465731c106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c731c1064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f736974731c1064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c69737465641c106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e01ad051e1c436f756e63696c011c436f756e63696c182450726f706f73616c730100b105040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062cb503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e67000104062cb505040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e7401001c100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010035030400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01c90301a40001b9051f48546563686e6963616c436f6d6d69747465650148546563686e6963616c436f6d6d6974746565182450726f706f73616c730100bd05040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f66000104062cb503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e67000104062cb505040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e7401001c100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010035030400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01d90301b40001c105204c546563686e6963616c4d656d62657273686970014c546563686e6963616c4d656d62657273686970081c4d656d626572730100c505040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01dd0301b80001c9052220547265617375727901205472656173757279103450726f706f73616c436f756e7401001c100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c73000104051ccd050400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c730100d105040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e01e10301bc1c3050726f706f73616c426f6e64d5051050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d1840000082dfe40d47000000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756dd9050400044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f641020c0a8000000000000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726ed50510000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c65744964dd05206b696c742f7473790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c731c10640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e01e105231c5574696c6974790001e50301c0044c626174636865645f63616c6c735f6c696d69741c10aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e01e505281c56657374696e67011c56657374696e67081c56657374696e670001040200e905040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100f10504000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e010d0401c408444d696e5665737465645472616e73666572184000407a10f35a0000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c65731c101c0000000001f50529245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e64610101040510f9050400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b75700001040504cc040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01150401c808344d6178696d756d57656967687424280700a0db215d0200000104290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b1c1032000000041d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0109062a1450726f7879011450726f7879081c50726f7869657301010405000d064400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e747301010405001d0644000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e011d0401d4184050726f78794465706f7369744261736518400020f7a54b330000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f72184000f4a92b80010000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f786965731c100a00000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e671c100a00000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f7369744261736518400020f7a54b330000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72184000e8535700030000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e012d062b20507265696d6167650120507265696d6167650824537461747573466f72000104062c31060400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f72000104063d06410604000001250401e0000145062c38546970734d656d626572736869700138546970734d656d62657273686970081c4d656d6265727301004906040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01290401e400014d062d1054697073011054697073081054697073000104052c510604000c650120546970734d6170207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e3d012054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c7265616479802067756172616e7465656420746f20626520612073656375726520686173682e1c526561736f6e73000104062c3004000849012053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e610120696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e012d0401e8144c4d6178696d756d526561736f6e4c656e6774681c10004000000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756548446174614465706f73697450657242797465184000743ba40b00000000000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e30546970436f756e74646f776e1020201c0000000000000445012054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e3454697046696e646572734665655d060400043501205468652070657263656e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e505469705265706f72744465706f73697442617365184000f45628fa320000000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e0161062e204d756c746973696701204d756c746973696704244d756c746973696773000108050265066906040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01310401ec0c2c4465706f73697442617365184000801b84ee320000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f72184000743ba40b00000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f726965731c104000000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e0171062f144374797065011443747970650418437479706573000104022c750604001060204354797065732073746f726564206f6e20636861696e2e001901204974206d6170732066726f6d2061204354797065206861736820746f206974732063726561746f7220616e6420626c6f636b206e756d62657220696e207768696368206974342077617320637265617465642e01390401f4000179063d2c4174746573746174696f6e012c4174746573746174696f6e08304174746573746174696f6e73000104022c7d0604000c78204174746573746174696f6e732073746f726564206f6e20636861696e2e00cc204974206d6170732066726f6d206120636c61696d206861736820746f207468652066756c6c206174746573746174696f6e2e5045787465726e616c4174746573746174696f6e7301010805028506a804000ca02044656c656761746564206174746573746174696f6e732073746f726564206f6e20636861696e2e00e8204974206d6170732066726f6d20612064656c65676174696f6e20494420746f206120766563746f72206f6620636c61696d206861736865732e013d0401f8081c4465706f7369741840001cc9dd006e0000000000000000000004e420546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720616e206174746573746174696f6e2e604d617844656c6567617465644174746573746174696f6e731c10e803000008090120546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732077686963682063616e206265206d61646520627954207468652073616d652064656c65676174696f6e2e0189063e2844656c65676174696f6e012844656c65676174696f6e083c44656c65676174696f6e4e6f646573000104022c8d0604000c882044656c65676174696f6e206e6f6465732073746f726564206f6e20636861696e2e00b0204974206d6170732066726f6d2061206e6f646520494420746f20746865206e6f64652064657461696c732e5444656c65676174696f6e4869657261726368696573000104022c9d0604000ca02044656c65676174696f6e2068696572617263686965732073746f726564206f6e20636861696e2e00dc204974206d61707320666f7220612028726f6f7429206e6f646520494420746f20746865206869657261726368792064657461696c732e015104010501181c4465706f73697418400080c6a47e8d0300000000000000000004dc20546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720612064656c65676174696f6e2e584d61785369676e6174757265427974654c656e677468dc08400000384d61785265766f636174696f6e731c1005000000047c204d6178696d756d206e756d626572206f66207265766f636174696f6e732e2c4d617852656d6f76616c731c100500000004f4204d6178696d756d206e756d626572206f662072656d6f76616c732e2053686f756c642062652073616d65206173204d61785265766f636174696f6e733c4d6178506172656e74436865636b731c1005000000080d01204d6178696d756d206e756d626572206f6620757077617264732074726176657273616c73206f66207468652064656c65676174696f6e20747265652066726f6d2061f0206e6f646520746f2074686520726f6f7420616e64207468757320746865206465707468206f66207468652064656c65676174696f6e20747265652e2c4d61784368696c6472656e1c10e80300000c0d01204d6178696d756d206e756d626572206f6620616c6c206368696c6472656e20666f7220612064656c65676174696f6e206e6f64652e20466f7220612062696e617279fc20747265652c20746869732073686f756c6420626520747769636520746865206d6178696d756d206465707468206f662074686520747265652c20692e652e5c206032205e204d6178506172656e74436865636b73602e01a1063f0c446964010c446964100c4469640001040200a50604000c5820444944732073746f726564206f6e20636861696e2e00c8204974206d6170732066726f6d206120444944206964656e74696669657220746f20746865204449442064657461696c732e4053657276696365456e64706f696e74730001080502c5069d0404000ca0205365727669636520656e64706f696e7473206173736f636961746564207769746820444944732e000901204974206d6170732066726f6d2028444944206964656e7469666965722c20736572766963652049442920746f2074686520736572766963652064657461696c732e44446964456e64706f696e7473436f756e7401010402001c10000000000cac20436f756e746572206f66207365727669636520656e64706f696e747320666f722065616368204449442e00cc204974206d6170732066726f6d2028444944206964656e7469666965722920746f20612033322d62697420636f756e7465722e30446964426c61636b6c6973740001040200b00400141d012054686520736574206f66204449447320746861742068617665206265656e2064656c6574656420616e642063616e6e6f74207468657265666f726520626520637265617465647020616761696e20666f7220736563757269747920726561736f6e732e002101204974206d6170732066726f6d206120444944206964656e74696669657220746f206120756e6974207475706c652c20666f72207468652073616b65206f6620747261636b696e674420444944206964656e746966696572732e016d04010d01382c426173654465706f736974184000008d49fd1a07000000000000000000100d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974f820746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f73697473fc20696e6372656173652062792074686520616d6f756e74206f662075736564206b65797320616e64207365727669636520656e64706f696e74732e20546865c8206465706f7369742063616e206265207265636c61696d6564207768656e20746865204449442069732064656c657465642e5853657276696365456e64706f696e744465706f736974184000b0156a084a00000000000000000000100d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368207365727669636520656e64706f696e7409012061732061206465706f73697420746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e205468651501206465706f7369742063616e206265207265636c61696d6564207768656e20746865207365727669636520656e64706f696e742069732072656d6f766564206f722074686534204449442064656c657465642e284b65794465706f736974184000dc20749701000000000000000000000805012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368206164646564206b65792061732061e4206465706f73697420746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e0c466565184000203d88792d000000000000000000000c09012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f7220656163682044494420617320612066656520746f0d0120696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206665652077696c6c206e6f74206765748820726566756e646564207768656e20746865204449442069732064656c657465642e4c4d61785075626c69634b6579735065724469641c10140000000c1101204d6178696d756d206e756d626572206f6620746f74616c207075626c6963206b6579732077686963682063616e2062652073746f7265642070657220444944206b6579d8206964656e7469666965722e205468697320696e636c7564657320746865206f6e65732063757272656e746c79207573656420666f72f02061757468656e7469636174696f6e2c206b65792061677265656d656e742c206174746573746174696f6e2c20616e642064656c65676174696f6e2e584d61784e65774b657941677265656d656e744b6579731c100a000000081501204d6178696d756d206e756d626572206f66206b65792061677265656d656e74206b65797320746861742063616e20626520616464656420696e2061206372656174696f6e2c206f7065726174696f6e2e604d6178546f74616c4b657941677265656d656e744b6579731c1013000000101101204d6178696d756d206e756d626572206f6620746f74616c206b65792061677265656d656e74206b65797320746861742063616e2062652073746f72656420666f7220613420444944207375626a6563742e00c42053686f756c642062652067726561746572207468616e20604d61784e65774b657941677265656d656e744b657973602e4c4d6178426c6f636b73547856616c696469747910202c0100000000000008ec20546865206d6178696d756d206e756d626572206f6620626c6f636b732061204449442d617574686f72697a6564206f7065726174696f6e2069739420636f6e736964657265642076616c696420616674657220697473206372656174696f6e2e644d61784e756d6265724f6653657276696365735065724469641c101900000004fc20546865206d6178696d756d206e756d626572206f6620736572766963657320746861742063616e2062652073746f72656420756e6465722061204449442e484d61785365727669636549644c656e6774681c1032000000049020546865206d6178696d756d206c656e677468206f66206120736572766963652049442e504d617853657276696365547970654c656e6774681c103200000004c820546865206d6178696d756d206c656e677468206f66206120736572766963652074797065206465736372697074696f6e2e684d61784e756d6265724f665479706573506572536572766963651c100100000004090120546865206d6178696d756d206e756d626572206f662061207479706573206465736372697074696f6e20666f722061207365727669636520656e64706f696e742e4c4d61785365727669636555726c4c656e6774681c10c8000000049420546865206d6178696d756d206c656e677468206f66206120736572766963652055524c2e644d61784e756d6265724f6655726c73506572536572766963651c100200000004d420546865206d6178696d756d206e756d626572206f6620612055524c7320666f722061207365727669636520656e64706f696e742e01c9064024496e666c6174696f6e000000084c496e697469616c506572696f644c656e677468102048a3c800000000000c050120546865206c656e677468206f662074686520696e697469616c20706572696f6420696e2077686963682074686520636f6e7374616e74207265776172642069731101206d696e7465642e204f6e6365207468652063757272656e7420626c6f636b206578636565647320746869732c207265776172647320617265206e6f206675727468657220206973737565642e4c496e697469616c506572696f64526577617264184036f539fdaeb30200000000000000000008fc2054686520616d6f756e74206f66206e65776c792069737375656420746f6b656e732070657220626c6f636b20647572696e672074686520696e697469616c2020706572696f642e0042244469644c6f6f6b757001244469644c6f6f6b75700834436f6e6e656374656444696473000104021501cd06040004a8204d617070696e672066726f6d206163636f756e74206964656e7469666965727320746f20444944732e44436f6e6e65637465644163636f756e74730001080202d106b004000cbc204d617070696e672066726f6d2028444944202b206163636f756e74206964656e74696669657229202d3e2028292e0d012054686520656d707479207475706c65206973207573656420617320612073656e74696e656c2076616c756520746f2073696d706c7920696e64696361746520746865982070726573656e6365206f66206120676976656e207475706c6520696e20746865206d61702e01c104011101041c4465706f736974184000c0afd69136000000000000000000000c0d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974110120746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f7369742063616e2062658c207265636c61696d6564207768656e20746865204449442069732064656c657465642e01d5064324576562334e616d65730124576562334e616d65730c144f776e6572000104022501d90604000488204d6170206f66206e616d65202d3e206f776e6572736869702064657461696c732e144e616d65730001040200250104000458204d6170206f66206f776e6572202d3e206e616d652e1842616e6e6564000104022501b004000c4c204d6170206f66206e616d65202d3e2028292e00e02049662061206e616d65206b65792069732070726573656e742c20746865206e616d652069732063757272656e746c792062616e6e65642e01d1040121010c1c4465706f736974184000d450a85d6b0000000000000000000004bc2054686520616d6f756e74206f66204b494c5420746f206465706f73697420746f20636c61696d2061206e616d652e344d696e4e616d654c656e6774681c1003000000048820546865206d696e20656e636f646564206c656e677468206f662061206e616d652e344d61784e616d654c656e6774681c1020000000048820546865206d617820656e636f646564206c656e677468206f662061206e616d652e01dd0644445075626c696343726564656e7469616c7301445075626c696343726564656e7469616c73082c43726564656e7469616c730001080502e106e50604000cc020546865206d6170206f66207075626c69632063726564656e7469616c7320616c72656164792061747465737465642ef0204974206d6170732066726f6d206120287375626a656374206964202b2063726564656e7469616c20696429202d3e20746865206372656174696f6e6c2064657461696c73206f66207468652063726564656e7469616c2e4843726564656e7469616c5375626a65637473000104022c310104001025012041207265766572736520696e646578206d617070696e672066726f6d2063726564656e7469616c20494420746f20746865207375626a656374207468652063726564656e7469616c3c207761732069737375656420746f2e001901204974206974207573656420746f20706572666f726d20656666696369656e74206c6f6f6b7570206f662063726564656e7469616c7320676976656e2074686569722049442e01d504012d010c1c4465706f7369741840005c6a51fc45000000000000000000000411012054686520616d6f756e74206f6620746f6b656e7320746f2072657365727665207768656e20617474657374696e672061207075626c69632063726564656e7469616c2e584d6178456e636f646564436c61696d734c656e6774681c10a0860100040d0120546865206d6178696d756d206c656e67746820696e206279746573206f662074686520656e636f64656420636c61696d73206f6620612063726564656e7469616c2e484d61785375626a65637449644c656e6774681c100c01000008e820546865206d6178696d756d206c656e67746820696e206279746573206f6620746865207261772063726564656e7469616c207375626a65637430206964656e7469666965722e01e906453c50617261636861696e53797374656d013c50617261636861696e53797374656d545450656e64696e6756616c69646174696f6e436f64650100300400187d0120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f206265206170706c6965642e00c10120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f766572777269746520746865205b603a636f6465605d5b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455dad012077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f63657373207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e000501205b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d3a2073705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f4445444e657756616c69646174696f6e436f64650000300400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000ed0404000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f64650100a8040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d62657201001c1000000000041d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e60557067726164655265737472696374696f6e5369676e616c0100ed0604001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f660000f504040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000f50604001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e000009070400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d71634865616401000d0780000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d7163486561647301001107040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301001c10000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01001c10000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d6573736167657301001d0704000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d657373616765730100a90204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d657373616765730100a902040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e84416e6e6f756e63656448726d704d6573736167657350657243616e64696461746501001c100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000240400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000240400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e44417574686f72697a65645570677261646500002507040004b820546865206e65787420617574686f72697a656420757067726164652c206966207468657265206973206f6e652e60437573746f6d56616c69646174696f6e486561644461746100003004000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00190120536565205b6050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f64617461605d20666f72206d6f726520696e666f726d6174696f6e2e01e504019d0100012907503450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100a90110640000000000000000512458636d705175657565012458636d7051756575652844496e626f756e6458636d7053746174757301002d070400049420537461747573206f662074686520696e626f756e642058434d50206368616e6e656c732e4c496e626f756e6458636d704d657373616765730101080205450730040004190120496e626f756e64206167677265676174652058434d50206d657373616765732e2049742063616e206f6e6c79206265206f6e6520706572205061726149642f626c6f636b2e484f7574626f756e6458636d70537461747573010049070400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205550730040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402a90130040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e6669670100590774020000000500000001000000821a06000008000700c817a804020004000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e284f76657277656967687400010405105d07040010050120546865206d657373616765732074686174206578636565646564206d617820696e646976696475616c206d65737361676520776569676874206275646765742e003901205468657365206d657373616765207374617920696e20746869732073746f72616765206d617020756e74696c207468657920617265206d616e75616c6c79206469737061746368656420766961582060736572766963655f6f766572776569676874602e50436f756e746572466f724f76657277656967687401001c100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c4f766572776569676874436f756e7401001020000000000000000008690120546865206e756d626572206f66206f766572776569676874206d657373616765732065766572207265636f7264656420696e20604f766572776569676874602e20416c736f20646f75626c657320617320746865206e6578748420617661696c61626c652066726565206f76657277656967687420696e6465782e38517565756553757370656e6465640100a804000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e01190501a10100016107522c506f6c6b61646f7458636d00011d0501ad0100016507532843756d756c757358636d0000018102000169075420446d7051756575650120446d7051756575651434436f6e66696775726174696f6e01006d07280700e40b540202000400044c2054686520636f6e66696775726174696f6e2e2450616765496e646578010071074000000000000000000000000000000000044020546865207061676520696e6465782e145061676573010104021c750704000444205468652071756575652070616765732e284f766572776569676874000104021079070400046420546865206f766572776569676874206d657373616765732e50436f756e746572466f724f76657277656967687401001c100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617001710501850200017d07558107042048436865636b4e6f6e5a65726f53656e6465728907b040436865636b5370656356657273696f6e8d071c38436865636b547856657273696f6e91071c30436865636b47656e6573697395072c38436865636b4d6f7274616c69747999072c28436865636b4e6f6e6365a107b02c436865636b576569676874a507b0604368617267655472616e73616374696f6e5061796d656e74a907b04d04"} \ No newline at end of file +{"result":"0x6d6574610eed07000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273200120526566436f756e7400012470726f766964657273200120526566436f756e7400012c73756666696369656e7473200120526566436f756e740001106461746114012c4163636f756e74446174610000100000050600140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200000050500240c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540128000c01186e6f726d616c2801045400012c6f7065726174696f6e616c280104540001246d616e6461746f7279280104540000280c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d652c010c75363400012870726f6f665f73697a652c010c75363400002c000006100030083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000034000002080038102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f67733c013c5665633c4469676573744974656d3e00003c000002400040102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e00060024436f6e73656e7375730800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000400105365616c0800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000500144f74686572040034011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e74557064617465640008000044000003040000000800480000024c004c08306672616d655f73797374656d2c4576656e745265636f7264080445015004540130000c011470686173658d02011450686173650001146576656e7450010445000118746f70696373910201185665633c543e00005008447370697269746e65745f72756e74696d653052756e74696d654576656e7400017c1853797374656d04005401706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c496e6469636573040078017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e0005002042616c616e63657304007c017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000600485472616e73616374696f6e5061796d656e7404008401a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0007001c53657373696f6e040088015470616c6c65745f73657373696f6e3a3a4576656e740016004050617261636861696e5374616b696e6704008c018470617261636861696e5f7374616b696e673a3a4576656e743c52756e74696d653e0015002444656d6f6372616379040094018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e001e001c436f756e63696c0400a801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400b801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020004c546563686e6963616c4d656d626572736869700400bc01fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365313e0022002054726561737572790400c0017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0023001c5574696c6974790400c4015470616c6c65745f7574696c6974793a3a4576656e740028001c56657374696e670400c8017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e002900245363686564756c65720400cc018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e002a001450726f78790400d8017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002b0020507265696d6167650400e4017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e002c0038546970734d656d626572736869700400e801fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365323e002d0010546970730400ec016c70616c6c65745f746970733a3a4576656e743c52756e74696d653e002e00204d756c74697369670400f0017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e002f001443747970650400f8015463747970653a3a4576656e743c52756e74696d653e003d002c4174746573746174696f6e0400fc016c6174746573746174696f6e3a3a4576656e743c52756e74696d653e003e002844656c65676174696f6e04000901016864656c65676174696f6e3a3a4576656e743c52756e74696d653e003f000c44696404001101014c6469643a3a4576656e743c52756e74696d653e004000244469644c6f6f6b757004001501018470616c6c65745f6469645f6c6f6f6b75703a3a4576656e743c52756e74696d653e00430024576562334e616d657304002501018470616c6c65745f776562335f6e616d65733a3a4576656e743c52756e74696d653e004400445075626c696343726564656e7469616c730400310101887075626c69635f63726564656e7469616c733a3a4576656e743c52756e74696d653e0045003c50617261636861696e53797374656d0400a10101bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0050002458636d7051756575650400a50101a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e0052002c506f6c6b61646f7458636d0400b101016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e0053002843756d756c757358636d04008502018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e00540020446d7051756575650400890201a063756d756c75735f70616c6c65745f646d705f71756575653a3a4576656e743c52756e74696d653e00550000540c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5801304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7264013444697370617463684572726f7200013464697370617463685f696e666f5801304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736830011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e580c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874280118576569676874000114636c6173735c01344469737061746368436c617373000120706179735f6665656001105061797300005c0c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000600c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000064082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040068012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e04006c0128546f6b656e4572726f720007002841726974686d65746963040070013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007401485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d000068082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7244018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d00006c082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000070083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000074082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000780c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909097c0c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001541c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738001185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098014346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000840c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909880c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657820013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098c0c4470617261636861696e5f7374616b696e671870616c6c6574144576656e74040454000154204e6577526f756e640800100138543a3a426c6f636b4e756d626572000020013053657373696f6e496e6465780000088041206e6577207374616b696e6720726f756e642068617320737461727465642e785c5b626c6f636b206e756d6265722c20726f756e64206e756d6265725c5d50456e7465726564546f7043616e646964617465730400000130543a3a4163636f756e744964000108cc41206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d444c656674546f7043616e646964617465730400000130543a3a4163636f756e744964000208d8416e206163636f756e74207761732072656d6f7665642066726f6d2074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d604a6f696e6564436f6c6c61746f7243616e646964617465730800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000308e041206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620636f6c6c61746f722063616e646964617465732ebc5c5b6163636f756e742c20616d6f756e74207374616b656420627920746865206e65772063616e6469646174655c5d48436f6c6c61746f725374616b65644d6f72650c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00040801014120636f6c6c61746f722063616e6469646174652068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d48436f6c6c61746f725374616b65644c6573730c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00050801014120636f6c6c61746f722063616e64696461746520686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d54436f6c6c61746f725363686564756c6564457869740c0020013053657373696f6e496e6465780000000130543a3a4163636f756e744964000020013053657373696f6e496e64657800061001014120636f6c6c61746f722063616e646964617465206861732073746172746564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e646964617465732e205c5b726f756e64206e756d6265722c20636f6c6c61746f722773206163636f756e742c20726f756e64206e756d626572207768656ee074686520636f6c6c61746f722077696c6c206265206566666563746976656c792072656d6f7665642066726f6d2074686520736574206f663063616e646964617465735c5d50436f6c6c61746f7243616e63656c6564457869740400000130543a3a4163636f756e74496400070c05014120636f6c6c61746f722063616e646964617465206861732063616e63656c6564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e6469646174657320616e6420776173206164646564206261636b20746f207468652063616e64696461746520706f6f6c2e205c5b636f6c6c61746f722773246163636f756e745c5d3443616e6469646174654c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000808cc416e206163636f756e7420686173206c6566742074686520736574206f6620636f6c6c61746f722063616e646964617465732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d3c436f6c6c61746f7252656d6f7665640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000908e4416e206163636f756e742077617320666f726365646c792072656d6f7665642066726f6d207468652020736574206f6620636f6c6c61746f72c863616e646964617465732e205c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d604d617843616e6469646174655374616b654368616e676564040018013042616c616e63654f663c543e000a08b4546865206d6178696d756d2063616e646964617465207374616b6520686173206265656e206368616e6765642e485c5b6e6577206d617820616d6f756e745c5d4c44656c656761746f725374616b65644d6f72651000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000b0cf0412064656c656761746f722068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d4c44656c656761746f725374616b65644c6573731000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000c0cf0412064656c656761746f7220686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d3444656c656761746f724c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000d08a8416e206163636f756e7420686173206c6566742074686520736574206f662064656c656761746f72732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d2844656c65676174696f6e1000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000e0cc8416e206163636f756e74206861732064656c6567617465642061206e657720636f6c6c61746f722063616e6469646174652e11015c5b6163636f756e742c20616d6f756e74206f662066756e6473207374616b65642c20746f74616c20616d6f756e74206f662064656c656761746f7273272066756e64738c7374616b656420666f722074686520636f6c6c61746f722063616e6469646174655c5d4844656c65676174696f6e5265706c616365641800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000f180d0141206e65772064656c65676174696f6e20686173207265706c6163656420616e206578697374696e67206f6e6520696e2074686520736574206f66206f6e676f696e67010164656c65676174696f6e7320666f72206120636f6c6c61746f722063616e6469646174652e205c5b6e65772064656c656761746f722773206163636f756e742c0901616d6f756e74206f662066756e6473207374616b656420696e20746865206e65772064656c65676174696f6e2c207265706c616365642064656c656761746f7227730d016163636f756e742c20616d6f756e74206f662066756e6473207374616b656420696e20746865207265706c6163652064656c65676174696f6e2c20636f6c6c61746f72050163616e6469646174652773206163636f756e742c206e657720746f74616c20616d6f756e74206f662064656c656761746f7273272066756e6473207374616b656470666f722074686520636f6c6c61746f722063616e6469646174655c5d5444656c656761746f724c656674436f6c6c61746f721000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00100cdc416e206163636f756e74206861732073746f707065642064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e09015c5b6163636f756e742c20636f6c6c61746f722063616e6469646174652773206163636f756e742c206f6c6420616d6f756e74206f662064656c656761746f727327d866756e6473207374616b65642c206e657720616d6f756e74206f662064656c656761746f7273272066756e6473207374616b65645c5d2052657761726465640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e001108c04120636f6c6c61746f72206f7220612064656c656761746f72206861732072656365697665642061207265776172642e745c5b6163636f756e742c20616d6f756e74206f66207265776172645c5d44526f756e64496e666c6174696f6e536574100090012c5065727175696e74696c6c000090012c5065727175696e74696c6c000090012c5065727175696e74696c6c000090012c5065727175696e74696c6c00120c0501496e666c6174696f6e20636f6e66696775726174696f6e20666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e09015c5b6d6178696d756d20636f6c6c61746f722773207374616b696e6720726174652c206d6178696d756d20636f6c6c61746f7227732072657761726420726174652c0d016d6178696d756d2064656c656761746f722773207374616b696e6720726174652c206d6178696d756d2064656c656761746f7227732072657761726420726174655c5d604d617853656c656374656443616e64696461746573536574080020010c753332000020010c753332001308f0546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c656374656420696e20667574757265dc76616c69646174696f6e20726f756e647320686173206368616e6765642e205c5b6f6c642076616c75652c206e65772076616c75655c5d44426c6f636b73506572526f756e64536574100020013053657373696f6e496e6465780000100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d62657200140cf8546865206c656e67746820696e20626c6f636b7320666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e01015c5b726f756e64206e756d6265722c20666972737420626c6f636b20696e207468652063757272656e7420726f756e642c206f6c642076616c75652c206e65771c76616c75655c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909900c3473705f61726974686d65746963287065725f7468696e67732c5065727175696e74696c6c0000040010010c7536340000940c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001442050726f706f73656408013870726f706f73616c5f696e64657820012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e64657820012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e64657820013c5265666572656e64756d496e6465780001247468726573686f6c64980134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e64657820013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e64657820013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e64657820013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011048323536000114756e74696c100138543a3a426c6f636b4e756d62657200090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f6861736830011048323536000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e64657820013c5265666572656e64756d496e646578000110766f74659c01644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e64657820012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e64657820012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e2c4d657461646174615365740801146f776e6572a401344d657461646174614f776e6572043c4d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e0e04d44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c65617265640801146f776e6572a401344d657461646174614f776e6572043c4d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e0f04e44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e20636c65617265642e4c4d657461646174615472616e736665727265640c0128707265765f6f776e6572a401344d657461646174614f776e6572046050726576696f7573206d65746164617461206f776e65722e01146f776e6572a401344d657461646174614f776e6572044c4e6577206d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e1004ac4d6574616461746120686173206265656e207472616e7366657272656420746f206e6577206f776e65722e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909980c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f72697479000200009c0c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f7465a00110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e636500010000a00c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000a40c4070616c6c65745f64656d6f6372616379147479706573344d657461646174614f776e657200010c2045787465726e616c0000002050726f706f73616c040020012450726f70496e646578000100285265666572656e64756d040020013c5265666572656e64756d496e64657800020000a80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6420012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f746564ac0110626f6f6c00010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ac0000050000b00418526573756c7408045401b4044501640108084f6b0400b4000000000c4572720400640000010000b40000040000b80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6420012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f746564ac0110626f6f6c00010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909bc0c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c00c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001242050726f706f73656404013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c40c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657820010c7533320001146572726f7264013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7264013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74b001384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c80c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909cc0c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657820010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657820010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736bd0016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d401404f7074696f6e3c5461736b4e616d653e000118726573756c74b001384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736bd0016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d401404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736bd0016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d401404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736bd0016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d401404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652ed000000408102000d404184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000d80c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74b001384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e646578e0010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736830013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200040450412070726f7879207761732072656d6f7665642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909dc08447370697269746e65745f72756e74696d652450726f7879547970650001180c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e63650002004050617261636861696e5374616b696e670003002c43616e63656c50726f7879000400484e6f6e4465706f736974436c61696d696e6700050000e00000050400e40c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f7465640401106861736830011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e245265717565737465640401106861736830011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c65617265640401106861736830011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e80c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ec0c2c70616c6c65745f746970731870616c6c6574144576656e74080454000449000114184e65775469700401207469705f6861736830011c543a3a486173680000049441206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e28546970436c6f73696e670401207469705f6861736830011c543a3a48617368000104d841207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e24546970436c6f7365640c01207469705f6861736830011c543a3a4861736800010c77686f000130543a3a4163636f756e7449640001187061796f757418013c42616c616e63654f663c542c20493e0002048441207469702073756767657374696f6e20686173206265656e20636c6f7365642e305469705265747261637465640401207469705f6861736830011c543a3a486173680003049041207469702073756767657374696f6e20686173206265656e207265747261637465642e28546970536c61736865640c01207469705f6861736830011c543a3a4861736800011866696e646572000130543a3a4163636f756e74496400011c6465706f73697418013c42616c616e63654f663c542c20493e0004048841207469702073756767657374696f6e20686173206265656e20736c61736865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f00c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c74b001384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f4083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657820010c7533320000f80c1463747970651870616c6c6574144576656e74040454000108304354797065437265617465640800000144437479706543726561746f724f663c543e00003001384374797065486173684f663c543e0000087441206e657720435479706520686173206265656e20637265617465642e885c5b63726561746f72206964656e7469666965722c20435479706520686173685c5d3043547970655570646174656404003001384374797065486173684f663c543e000108ac496e666f726d6174696f6e2061626f7574206120435479706520686173206265656e20757064617465642e385c5b435479706520686173685c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909fc0c2c6174746573746174696f6e1870616c6c6574144576656e74040454000110484174746573746174696f6e43726561746564100000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00003001384374797065486173684f663c543e0000010101704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e0000088c41206e6577206174746573746174696f6e20686173206265656e20637265617465642e05015c5b61747465737465722049442c20636c61696d20686173682c20435479706520686173682c20286f7074696f6e616c292064656c65676174696f6e2049445c5d484174746573746174696f6e5265766f6b6564080000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00010880416e206174746573746174696f6e20686173206265656e207265766f6b65642e685c5b6163636f756e742069642c20636c61696d20686173685c5d484174746573746174696f6e52656d6f766564080000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00020880416e206174746573746174696f6e20686173206265656e2072656d6f7665642e685c5b6163636f756e742069642c20636c61696d20686173685c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e0000300138436c61696d486173684f663c543e0003080501546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e2e685c5b6163636f756e742069642c20636c61696d20686173685c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909010104184f7074696f6e0404540105010108104e6f6e6500000010536f6d6504000501000001000005010c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c417574686f72697a6174696f6e4964043044656c65676174696f6e4964013001042844656c65676174696f6e040030013044656c65676174696f6e49640000000009010c2864656c65676174696f6e1870616c6c6574144576656e7404045400011c40486965726172636879437265617465640c0000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00003001384374797065486173684f663c543e0000088441206e65772068696572617263687920686173206265656e20637265617465642ea05c5b63726561746f722049442c20726f6f74206e6f64652049442c20435459504520686173685c5d404869657261726368795265766f6b6564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00010874412068696572617263687920686173206265656e207265766f6b65642e705c5b7265766f6b65722049442c20726f6f74206e6f64652049445c5d4048696572617263687952656d6f766564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000208dc412068696572617263687920686173206265656e2072656d6f7665642066726f6d207468652073746f72616765206f6e20636861696e2e705c5b72656d6f7665722049442c20726f6f74206e6f64652049445c5d4444656c65676174696f6e43726561746564180000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000000014044656c656761746f7249644f663c543e00000d01012c5065726d697373696f6e7300030c8841206e65772064656c65676174696f6e20686173206265656e20637265617465642efc5c5b63726561746f722049442c20726f6f74206e6f64652049442c2064656c65676174696f6e206e6f64652049442c20706172656e74206e6f64652049442c6864656c65676174652049442c207065726d697373696f6e735c5d4444656c65676174696f6e5265766f6b6564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00040878412064656c65676174696f6e20686173206265656e207265766f6b65642e885c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d4444656c65676174696f6e52656d6f76656408000001384163636f756e7449644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00050878412064656c65676174696f6e20686173206265656e2072656d6f7665642e885c5b72656d6f7665722049442c2064656c65676174696f6e206e6f64652049445c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000608f8546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720612064656c65676174696f6eac737562747265652e205c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909090d010c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368792c5065726d697373696f6e7300000401106269747320010c753332000011010c0c6469641870616c6c6574144576656e74040454000110284469644372656174656408000001384163636f756e7449644f663c543e00000001484469644964656e7469666965724f663c543e0000086c41206e65772044494420686173206265656e20637265617465642e985c5b7472616e73616374696f6e207369676e65722c20444944206964656e7469666965725c5d284469645570646174656404000001484469644964656e7469666965724f663c543e0001085c412044494420686173206265656e20757064617465642e485c5b444944206964656e7469666965725c5d2844696444656c6574656404000001484469644964656e7469666965724f663c543e0002085c412044494420686173206265656e2064656c657465642e485c5b444944206964656e7469666965725c5d4444696443616c6c4469737061746368656408000001484469644964656e7469666965724f663c543e0000b001384469737061746368526573756c74000308a041204449442d617574686f72697365642063616c6c20686173206265656e2065786563757465642e7c5c5b4449442063616c6c65722c20646973706174636820726573756c745c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090915010c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144576656e74040454000110584173736f63696174696f6e45737461626c69736865640800190101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000004f841206e6577206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e742049442077617320637265617465642e484173736f63696174696f6e52656d6f7665640800190101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000104ec416e206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e74204944207761732072656d6f7665642e444d6967726174696f6e50726f6772657373000204c454686572652077617320736f6d652070726f677265737320696e20746865206d6967726174696f6e2070726f636573732e484d6967726174696f6e436f6d706c65746564000304dc416c6c204163636f756e744964732068617665206265656e206d6967726174656420746f204c696e6b61626c654163636f756e7449642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090919010c4470616c6c65745f6469645f6c6f6f6b7570406c696e6b61626c655f6163636f756e74444c696e6b61626c654163636f756e7449640001082c4163636f756e744964323004001d01012c4163636f756e74496432300000002c4163636f756e7449643332040000012c4163636f756e7449643332000100001d010c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e742c4163636f756e744964323000000400210101205b75383b2032305d0000210100000314000000080025010c4470616c6c65745f776562335f6e616d65731870616c6c6574144576656e740404540001103c576562334e616d65436c61696d65640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6529010134576562334e616d654f663c543e0000047041206e6577206e616d6520686173206265656e20636c61696d65642e40576562334e616d6552656c65617365640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6529010134576562334e616d654f663c543e0001046441206e616d6520686173206265656e2072656c65617365642e38576562334e616d6542616e6e65640401106e616d6529010134576562334e616d654f663c543e0002045c41206e616d6520686173206265656e2062616e6e65642e40576562334e616d65556e62616e6e65640401106e616d6529010134576562334e616d654f663c543e0003046441206e616d6520686173206265656e20756e62616e6e65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090929010c4470616c6c65745f776562335f6e616d657324776562335f6e616d65344173636969576562334e616d65040454000004002d010180426f756e6465645665633c75382c20543a3a4d61784e616d654c656e6774683e00002d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000031010c487075626c69635f63726564656e7469616c731870616c6c6574144576656e740404540001104043726564656e7469616c53746f7265640801287375626a6563745f696435010130543a3a5375626a65637449640488546865207375626a656374206f6620746865206e65772063726564656e7469616c2e013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0474546865206964206f6620746865206e65772063726564656e7469616c2e0004a041206e6577207075626c69632063726564656e7469616c20686173206265656e206973737565642e4443726564656e7469616c52656d6f7665640801287375626a6563745f696435010130543a3a5375626a65637449640498546865207375626a656374206f66207468652072656d6f7665642063726564656e7469616c2e013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0484546865206964206f66207468652072656d6f7665642063726564656e7469616c2e01049841207075626c69632063726564656e7469616c7320686173206265656e2072656d6f7665642e4443726564656e7469616c5265766f6b656404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0484546865206964206f6620746865207265766f6b65642063726564656e7469616c2e02049441207075626c69632063726564656e7469616c20686173206265656e207265766f6b65642e4c43726564656e7469616c556e7265766f6b656404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e048c546865206964206f662074686520756e7265766f6b65642063726564656e7469616c2e03049c41207075626c69632063726564656e7469616c20686173206265656e20756e7265766f6b65642e0490546865206576656e74732067656e65726174656420627920746869732070616c6c65742e35010c3872756e74696d655f636f6d6d6f6e18617373657473204173736574446964000004003901013c41737365744964656e746966696572000039010c3c6b696c745f61737365745f646964730876312041737365744469640000080120636861696e5f69643d01011c436861696e496400012061737365745f69646501011c4173736574496400003d01103c6b696c745f61737365745f6469647314636861696e0876311c436861696e49640001141845697031353504004101013c4569703135355265666572656e63650000001842697031323204004501016447656e657369734865784861736833325265666572656e63650001001c446f7473616d6104004501016447656e657369734865784861736833325265666572656e636500020018536f6c616e6104004d01017047656e657369734261736535384861736833325265666572656e63650003001c47656e6572696304005501013847656e65726963436861696e4964000400004101103c6b696c745f61737365745f6469647314636861696e0876313c4569703135355265666572656e6365000004001801107531323800004501103c6b696c745f61737365745f6469647314636861696e0876316447656e657369734865784861736833325265666572656e636500000400490101205b75383b2031365d000049010000031000000008004d01103c6b696c745f61737365745f6469647314636861696e0876317047656e657369734261736535384861736833325265666572656e63650000040051010170426f756e6465645665633c75382c20436f6e73745533323c33323e3e000051010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00005501103c6b696c745f61737365745f6469647314636861696e0876313847656e65726963436861696e496400000801246e616d6573706163655901015447656e65726963436861696e4e616d6573706163650001247265666572656e63656101015447656e65726963436861696e5265666572656e636500005901103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e4e616d657370616365000004005d0101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f434841494e5f4e414d4553504143455f4c454e4754485f5533323e3e00005d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00006101103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e5265666572656e636500000400510101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f434841494e5f5245464552454e43455f4c454e4754485f5533323e3e00006501103c6b696c745f61737365745f646964731461737365740876311c4173736574496400011418536c6970343404006901013c536c697034345265666572656e636500000014457263323004007501018445766d536d617274436f6e747261637446756e6769626c655265666572656e63650001001845726337323104007901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650002001c4572633131353504007901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650003001c47656e6572696304008901013847656e6572696341737365744964000400006901103c6b696c745f61737365745f646964731461737365740876313c536c697034345265666572656e6365000004006d0101105532353600006d01083c7072696d69746976655f7479706573105532353600000400710101205b7536343b20345d000071010000030400000010007501103c6b696c745f61737365745f646964731461737365740876318445766d536d617274436f6e747261637446756e6769626c655265666572656e636500000400210101205b75383b2032305d00007901103c6b696c745f61737365745f646964731461737365740876319045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e6365000008007501018445766d536d617274436f6e747261637446756e6769626c655265666572656e636500007d0101b44f7074696f6e3c45766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e7469666965723e00007d0104184f7074696f6e0404540181010108104e6f6e6500000010536f6d650400810100000100008101103c6b696c745f61737365745f646964731461737365740876319445766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e74696669657200000400850101f4426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4944454e5449464945525f4c454e4754485f5533323e3e000085010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00008901103c6b696c745f61737365745f646964731461737365740876313847656e657269634173736574496400000c01246e616d6573706163658d01015447656e6572696341737365744e616d6573706163650001247265666572656e63659101015447656e6572696341737365745265666572656e63650001086964990101784f7074696f6e3c47656e6572696341737365744964656e7469666965723e00008d01103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365744e616d657370616365000004005d0101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4e414d4553504143455f4c454e4754485f5533323e3e00009101103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365745265666572656e636500000400950101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f5245464552454e43455f4c454e4754485f5533323e3e000095010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000990104184f7074696f6e040454019d010108104e6f6e6500000010536f6d6504009d0100000100009d01103c6b696c745f61737365745f646964731461737365740876315847656e6572696341737365744964656e74696669657200000400850101f4426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4944454e5449464945525f4c454e4754485f5533323e3e0000a1010c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e7404045400011c6056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d20015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e4455706772616465417574686f72697a6564040124636f64655f6861736830011c543a3a486173680003047c416e207570677261646520686173206265656e20617574686f72697a65642e60446f776e776172644d657373616765735265636569766564040114636f756e7420010c7533320004040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564280118576569676874000120646d715f6865616430014472656c61795f636861696e3a3a48617368000504e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e000604b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a5010c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e7404045400011c1c537563636573730801306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e00011877656967687428011857656967687400000464536f6d652058434d20776173206578656375746564206f6b2e104661696c0c01306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e0001146572726f72a901012058636d4572726f7200011877656967687428011857656967687400010440536f6d652058434d206661696c65642e2842616456657273696f6e0401306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e000204544261642058434d2076657273696f6e20757365642e24426164466f726d61740401306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e000304504261642058434d20666f726d617420757365642e3c58636d704d65737361676553656e740401306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e000404c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e484f766572776569676874456e71756575656410011873656e646572ad01011850617261496400011c73656e745f617420014052656c6179426c6f636b4e756d626572000114696e64657810013c4f766572776569676874496e6465780001207265717569726564280118576569676874000504d4416e2058434d2065786365656465642074686520696e646976696475616c206d65737361676520776569676874206275646765742e484f7665727765696768745365727669636564080114696e64657810013c4f766572776569676874496e646578000110757365642801185765696768740006044101416e2058434d2066726f6d20746865206f7665727765696768742071756575652077617320657865637574656420776974682074686520676976656e2061637475616c2077656967687420757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a901100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002801185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d697400270000ad010c48706f6c6b61646f745f70617261636861696e287072696d6974697665730849640000040020010c7533320000b1010c2870616c6c65745f78636d1870616c6c6574144576656e7404045400015c24417474656d707465640400b501015078636d3a3a6c61746573743a3a4f7574636f6d6500000ca8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e00345c5b206f7574636f6d65205c5d1053656e740c00b90101344d756c74694c6f636174696f6e0000b90101344d756c74694c6f636174696f6e0000dd01011c58636d3c28293e00010c5c412058434d206d657373616765207761732073656e742e00885c5b206f726967696e2c2064657374696e6174696f6e2c206d657373616765205c5d48556e6578706563746564526573706f6e73650800b90101344d756c74694c6f636174696f6e000010011c517565727949640002145901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e73655265616479080010011c51756572794964000005020120526573706f6e73650003105d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e00485c5b2069642c20726573706f6e7365205c5d204e6f7469666965640c0010011c5175657279496400000801087538000008010875380004105901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d404e6f746966794f766572776569676874140010011c517565727949640000080108753800000801087538000028011857656967687400002801185765696768740005146101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20636f756c6441016e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e0019015c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e6465782c2061637475616c207765696768742c206d617820627564676574656420776569676874205c5d4c4e6f7469667944697370617463684572726f720c0010011c5175657279496400000801087538000008010875380006105501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d484e6f746966794465636f64654661696c65640c0010011c5175657279496400000801087538000008010875380007145101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d40496e76616c6964526573706f6e6465720c00b90101344d756c74694c6f636174696f6e000010011c517565727949640000290201544f7074696f6e3c4d756c74694c6f636174696f6e3e0008145901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e00b05c5b206f726967696e206c6f636174696f6e2c2069642c206578706563746564206c6f636174696f6e205c5d5c496e76616c6964526573706f6e64657256657273696f6e0800b90101344d756c74694c6f636174696f6e000010011c517565727949640009245101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e736554616b656e040010011c51756572794964000a0cc8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e00205c5b206964205c5d34417373657473547261707065640c00300110483235360000b90101344d756c74694c6f636174696f6e00004902015056657273696f6e65644d756c7469417373657473000b0cb8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e00685c5b20686173682c206f726967696e2c20617373657473205c5d5456657273696f6e4368616e67654e6f7469666965640c00b90101344d756c74694c6f636174696f6e000020012858636d56657273696f6e0000e901012c4d756c7469417373657473000c142501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e007c5c5b2064657374696e6174696f6e2c20726573756c742c20636f7374205c5d5c537570706f7274656456657273696f6e4368616e6765640800b90101344d756c74694c6f636174696f6e000020012858636d56657273696f6e000d10390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e006c5c5b206c6f636174696f6e2c2058434d2076657273696f6e205c5d504e6f7469667954617267657453656e644661696c0c00b90101344d756c74694c6f636174696f6e000010011c517565727949640000a901012058636d4572726f72000e1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e007c5c5b206c6f636174696f6e2c2071756572792049442c206572726f72205c5d644e6f746966795461726765744d6967726174696f6e4661696c08008102015856657273696f6e65644d756c74694c6f636174696f6e000010011c51756572794964000f1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e00605c5b206c6f636174696f6e2c207175657279204944205c5d54496e76616c69645175657269657256657273696f6e0800b90101344d756c74694c6f636174696f6e000010011c517565727949640010245501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d38496e76616c6964517565726965721000b90101344d756c74694c6f636174696f6e000010011c517565727949640000b90101344d756c74694c6f636174696f6e0000290201544f7074696f6e3c4d756c74694c6f636174696f6e3e0011145d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e0005015c5b206f726967696e206c6f636174696f6e2c2069642c20657870656374656420717565726965722c206d617962652061637475616c2071756572696572205c5d5056657273696f6e4e6f74696679537461727465640800b90101344d756c74694c6f636174696f6e0000e901012c4d756c74694173736574730012105901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d5856657273696f6e4e6f746966795265717565737465640800b90101344d756c74694c6f636174696f6e0000e901012c4d756c746941737365747300130c41015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e64732075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d6056657273696f6e4e6f74696679556e7265717565737465640800b90101344d756c74694c6f636174696f6e0000e901012c4d756c746941737365747300140c61015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d2046656573506169640800b90101344d756c74694c6f636174696f6e0000e901012c4d756c746941737365747300150c310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e006c5c5b20706179696e67206c6f636174696f6e2c2066656573205c5d34417373657473436c61696d65640c00300110483235360000b90101344d756c74694c6f636174696f6e00004902015056657273696f6e65644d756c746941737365747300160cc0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e206173736574207472617000685c5b20686173682c206f726967696e2c20617373657473205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b501100c78636d087633187472616974731c4f7574636f6d6500010c20436f6d706c657465040028011857656967687400000028496e636f6d706c65746508002801185765696768740000a90101144572726f72000100144572726f720400a90101144572726f7200020000b901100c78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72bd0101244a756e6374696f6e730000bd01100c78636d087633246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400c10101204a756e6374696f6e0001000858320800c10101204a756e6374696f6e0000c10101204a756e6374696f6e0002000858330c00c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0003000858341000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0004000858351400c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0005000858361800c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0006000858371c00c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0007000858382000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e00080000c101100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400c501010c7533320000002c4163636f756e744964333208011c6e6574776f726bc90101444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bc90101444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726bc90101444f7074696f6e3c4e6574776f726b49643e00010c6b6579210101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400d1010110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964d5010118426f6479496400011070617274d9010120426f6479506172740008003c476c6f62616c436f6e73656e7375730400cd0101244e6574776f726b496400090000c5010000062000c90104184f7074696f6e04045401cd010108104e6f6e6500000010536f6d650400cd010000010000cd01100c78636d087633206a756e6374696f6e244e6574776f726b496400012824427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657210010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090000d1010000061800d501100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040044011c5b75383b20345d00010014496e6465780400c501010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000d901100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74c501010c753332000100204672616374696f6e08010c6e6f6dc501010c75333200011464656e6f6dc501010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dc501010c75333200011464656e6f6dc501010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dc501010c75333200011464656e6f6dc501010c75333200040000dd010c0c78636d0876330c58636d041043616c6c00000400e10101585665633c496e737472756374696f6e3c43616c6c3e3e0000e101000002e50100e5010c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400e901012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400e901012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400e901012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736505020120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572290201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473e901012c4d756c746941737365747300012c62656e6566696369617279b90101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473e901012c4d756c746941737365747300011064657374b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e642d0201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c3102014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c501010c7533320001406d61785f6d6573736167655f73697a65c501010c7533320001306d61785f6361706163697479c501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c501010c75333200011873656e646572c501010c753332000124726563697069656e74c501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400bd010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400350201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473390201404d756c7469417373657446696c74657200012c62656e6566696369617279b90101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473390201404d756c7469417373657446696c74657200011064657374b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e000e003445786368616e676541737365740c011067697665390201404d756c7469417373657446696c74657200011077616e74e901012c4d756c746941737365747300011c6d6178696d616cac0110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473390201404d756c7469417373657446696c74657200011c72657365727665b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473390201404d756c7469417373657446696c74657200011064657374b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f350201445175657279526573706f6e7365496e666f000118617373657473390201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573f10101284d756c746941737365740001307765696768745f6c696d69744502012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400dd01012458636d3c43616c6c3e0015002c536574417070656e6469780400dd01012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473e901012c4d756c74694173736574730001187469636b6574b90101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400e901012c4d756c7469417373657473001c002c45787065637441737365740400e901012c4d756c7469417373657473001d00304578706563744f726967696e0400290201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400090201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400210201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6534011c5665633c75383e000134726573706f6e73655f696e666f350201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578c501010c7533320001106e616d6534011c5665633c75383e00012c6d6f64756c655f6e616d6534011c5665633c75383e00012c63726174655f6d616a6f72c501010c75333200013c6d696e5f63726174655f6d696e6f72c501010c753332002200505265706f72745472616e736163745374617475730400350201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400c10101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bcd0101244e6574776f726b496400012c64657374696e6174696f6ebd010154496e746572696f724d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e002600244c6f636b41737365740801146173736574f10101284d756c74694173736574000120756e6c6f636b6572b90101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574f10101284d756c74694173736574000118746172676574b90101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574f10101284d756c746941737365740001146f776e6572b90101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574f10101284d756c746941737365740001186c6f636b6572b90101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177ac0110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400b90101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69744502012c5765696768744c696d6974000130636865636b5f6f726967696e290201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000e901100c78636d087633286d756c746961737365742c4d756c746941737365747300000400ed01013c5665633c4d756c746941737365743e0000ed01000002f10100f101100c78636d087633286d756c74696173736574284d756c7469417373657400000801086964f501011c4173736574496400010c66756ef901012c46756e676962696c6974790000f501100c78636d087633286d756c746961737365741c4173736574496400010820436f6e63726574650400b90101344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d00010000f901100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400d1010110753132380000002c4e6f6e46756e6769626c650400fd0101344173736574496e7374616e636500010000fd01100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400d10101107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804000102011c5b75383b20385d0003001c417272617931360400490101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000010200000308000000080005020c0c78636d08763320526573706f6e7365000118104e756c6c000000184173736574730400e901012c4d756c74694173736574730001003c457865637574696f6e526573756c740400090201504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040020013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f040011020198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c740400210201384d617962654572726f72436f646500050000090204184f7074696f6e040454010d020108104e6f6e6500000010536f6d6504000d0200000100000d020000040820a9010011020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540115020453000004001d0201185665633c543e000015020c0c78636d0876332850616c6c6574496e666f0000180114696e646578c501010c7533320001106e616d6519020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d6519020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72c501010c7533320001146d696e6f72c501010c7533320001147061746368c501010c753332000019020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00001d0200000215020021020c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f7204002502018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000100385472756e63617465644572726f7204002502018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e0002000025020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000290204184f7074696f6e04045401b9010108104e6f6e6500000010536f6d650400b90100000100002d020c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d0003000031020c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656434011c5665633c75383e000035020c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6eb90101344d756c74694c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f77656967687428011857656967687400003902100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e6974650400e901012c4d756c74694173736574730000001057696c6404003d02013857696c644d756c74694173736574000100003d02100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f660801086964f501011c4173736574496400010c66756e4102013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400c501010c75333200020030416c6c4f66436f756e7465640c01086964f501011c4173736574496400010c66756e4102013c57696c6446756e676962696c697479000114636f756e74c501010c753332000300004102100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000045020c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400280118576569676874000100004902080c78636d5056657273696f6e65644d756c746941737365747300010808563204004d02013c76323a3a4d756c74694173736574730001000856330400e901013c76333a3a4d756c7469417373657473000300004d02100c78636d087632286d756c746961737365742c4d756c7469417373657473000004005102013c5665633c4d756c746941737365743e000051020000025502005502100c78636d087632286d756c74696173736574284d756c74694173736574000008010869645902011c4173736574496400010c66756e7902012c46756e676962696c69747900005902100c78636d087632286d756c746961737365741c4173736574496400010820436f6e637265746504005d0201344d756c74694c6f636174696f6e000000204162737472616374040034011c5665633c75383e000100005d02100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72610201244a756e6374696f6e7300006102100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e7300012410486572650000000858310400650201204a756e6374696f6e0001000858320800650201204a756e6374696f6e0000650201204a756e6374696f6e0002000858330c00650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0003000858341000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0004000858351400650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0005000858361800650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0006000858371c00650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0007000858382000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e000800006502100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400c501010c7533320000002c4163636f756e744964333208011c6e6574776f726b690201244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b690201244e6574776f726b4964000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726b690201244e6574776f726b496400010c6b6579210101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400d1010110753132380005002847656e6572616c4b657904006d0201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c697479080108696471020118426f647949640001107061727475020120426f6479506172740008000069020c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d656404006d0201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d61000300006d020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003401185665633c543e000071020c0c78636d08763218426f6479496400012810556e6974000000144e616d656404006d0201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400c501010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e0008002054726561737572790009000075020c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74c501010c753332000100204672616374696f6e08010c6e6f6dc501010c75333200011464656e6f6dc501010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dc501010c75333200011464656e6f6dc501010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dc501010c75333200011464656e6f6dc501010c753332000400007902100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400d1010110753132380000002c4e6f6e46756e6769626c6504007d0201344173736574496e7374616e6365000100007d02100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400d10101107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804000102011c5b75383b20385d0003001c417272617931360400490101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040034011c5665633c75383e000600008102080c78636d5856657273696f6e65644d756c74694c6f636174696f6e00010808563204005d02014476323a3a4d756c74694c6f636174696f6e0001000856330400b901014476333a3a4d756c74694c6f636174696f6e0003000085020c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d0000b501011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090989020c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144576656e7404045400011c34496e76616c6964466f726d61740401286d6573736167655f69640401244d657373616765496400000480446f776e77617264206d65737361676520697320696e76616c69642058434d2e48556e737570706f7274656456657273696f6e0401286d6573736167655f69640401244d6573736167654964000104bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e404578656375746564446f776e776172640801286d6573736167655f69640401244d657373616765496400011c6f7574636f6d65b501011c4f7574636f6d65000204c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e3c5765696768744578686175737465640c01286d6573736167655f69640401244d657373616765496400014072656d61696e696e675f77656967687428011857656967687400013c72657175697265645f776569676874280118576569676874000304f054686520776569676874206c696d697420666f722068616e646c696e6720646f776e77617264206d657373616765732077617320726561636865642e484f766572776569676874456e7175657565640c01286d6573736167655f69640401244d65737361676549640001406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800013c72657175697265645f7765696768742801185765696768740004041901446f776e77617264206d657373616765206973206f76657277656967687420616e642077617320706c6163656420696e20746865206f7665727765696768742071756575652e484f76657277656967687453657276696365640801406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800012c7765696768745f75736564280118576569676874000504e0446f776e77617264206d6573736167652066726f6d20746865206f766572776569676874207175657565207761732065786563757465642e504d61784d657373616765734578686175737465640401286d6573736167655f69640401244d6573736167654964000604b0546865206d6178696d756d206e756d626572206f6620646f776e77617264206d65737361676573207761732e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098d0208306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040020010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000910200000230009502000002d000990208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ec501014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d659d02016473705f72756e74696d653a3a52756e74696d65537472696e6700009d020000050200a1020c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b34011c5665633c75383e00000c684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e00202d20604f28312960387365745f686561705f7061676573040114706167657310010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646534011c5665633c75383e0002046453657420746865206e65772072756e74696d6520636f64652e5c7365745f636f64655f776974686f75745f636865636b73040110636f646534011c5665633c75383e000304190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e2c7365745f73746f726167650401146974656d73a50201345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973ad0201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697834010c4b657900011c7375626b65797320010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b34011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea502000002a90200a90200000408343400ad020000023400b1020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2801185765696768740001246d61785f626c6f636b2801185765696768740001247065725f636c617373b50201845065724469737061746368436c6173733c57656967687473506572436c6173733e0000b5020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401b902000c01186e6f726d616cb90201045400012c6f7065726174696f6e616cb9020104540001246d616e6461746f7279b9020104540000b9020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632801185765696768740001346d61785f65787472696e736963bd0201384f7074696f6e3c5765696768743e0001246d61785f746f74616cbd0201384f7074696f6e3c5765696768743e0001207265736572766564bd0201384f7074696f6e3c5765696768743e0000bd0204184f7074696f6e04045401280108104e6f6e6500000010536f6d650400280000010000c1020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178c50201545065724469737061746368436c6173733c7533323e0000c5020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f7279200104540000c902082873705f776569676874733c52756e74696d65446257656967687400000801107265616410010c753634000114777269746510010c7536340000cd02082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d659d02013452756e74696d65537472696e67000124696d706c5f6e616d659d02013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e20010c753332000130737065635f76657273696f6e20010c753332000130696d706c5f76657273696f6e20010c75333200011061706973d102011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e20010c75333200013473746174655f76657273696f6e08010875380000d102040c436f7704045401d502000400d502000000d502000002d90200d9020000040801022000dd020c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c6574e1020c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f772c0124543a3a4d6f6d656e7400003c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee5020000040c0018ac00e9020c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e6465780000309841737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e00dc5061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00f02d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e207472616e7366657208010c6e6577ed0201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e6465780001305d0141737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6eb86973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0025012d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e1066726565040114696e64657810013c543a3a4163636f756e74496e646578000230944672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e005d015061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e000d012d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e0084456d6974732060496e646578467265656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e38666f7263655f7472616e736665720c010c6e6577ed0201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65ac0110626f6f6c0003345501466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c7265616479e868656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00a42d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e41012d2060667265657a65603a2069662073657420746f206074727565602c2077696c6c20667265657a652074686520696e64657820736f2069742063616e6e6f74206265207472616e736665727265642e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004304101467265657a6520616e20696e64657820736f2069742077696c6c20616c7761797320706f696e7420746f207468652073656e646572206163636f756e742e205468697320636f6e73756d657320746865206465706f7369742e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d757374206861766520616c6e6f6e2d66726f7a656e206163636f756e742060696e646578602e00ac2d2060696e646578603a2074686520696e64657820746f2062652066726f7a656e20696e20706c6163652e0088456d6974732060496e64657846726f7a656e60206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eed020c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801b4011408496404000001244163636f756e74496400000014496e6465780400f10201304163636f756e74496e6465780001000c526177040034011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400210101205b75383b2032305d00040000f102000006b400f5020c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909f9020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401fd02045300000400050301185665633c543e0000fd020c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964010201384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e730103011c526561736f6e73000001030c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c000200000503000002fd020009030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010d03045300000400110301185665633c543e00000d030c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e7469666965720101021c42616c616e6365011800080108696401020144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e6365000011030000020d030015030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011903045300000400390301185665633c543e000019030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e7408084964011d031c42616c616e636501180008010869641d0301084964000118616d6f756e7418011c42616c616e636500001d0308447370697269746e65745f72756e74696d654452756e74696d65486f6c64526561736f6e0001182c4174746573746174696f6e04002103015c6174746573746174696f6e3a3a486f6c64526561736f6e003e002844656c65676174696f6e04002503015864656c65676174696f6e3a3a486f6c64526561736f6e003f000c44696404002903013c6469643a3a486f6c64526561736f6e004000244469644c6f6f6b757004002d03017470616c6c65745f6469645f6c6f6f6b75703a3a486f6c64526561736f6e00430024576562334e616d657304003103017470616c6c65745f776562335f6e616d65733a3a486f6c64526561736f6e004400445075626c696343726564656e7469616c730400350301787075626c69635f63726564656e7469616c733a3a486f6c64526561736f6e0045000021030c2c6174746573746174696f6e1870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000025030c2864656c65676174696f6e1870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000029030c0c6469641870616c6c657428486f6c64526561736f6e0001041c4465706f736974000000002d030c4470616c6c65745f6469645f6c6f6f6b75701870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000031030c4470616c6c65745f776562335f6e616d65731870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000035030c487075626c69635f63726564656e7469616c731870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000039030000021903003d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540141030453000004004d0301185665633c543e000041030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640145031c42616c616e63650118000801086964450301084964000118616d6f756e7418011c42616c616e63650000450308447370697269746e65745f72756e74696d654c52756e74696d65467265657a65526561736f6e0001044050617261636861696e5374616b696e6704004903017c70617261636861696e5f7374616b696e673a3a467265657a65526561736f6e0015000049030c4470617261636861696e5f7374616b696e671870616c6c657430467265657a65526561736f6e0001041c5374616b696e67000000004d0300000241030051030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000124507472616e736665725f616c6c6f775f646561746808011064657374ed0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565d1010128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e587365745f62616c616e63655f646570726563617465640c010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565d1010128543a3a42616c616e63650001306f6c645f7265736572766564d1010128543a3a42616c616e636500011855015365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e743b20697420616c736f2074616b657320612072657365727665642062616c616e6365206275742074686973ec6d757374206265207468652073616d6520617320746865206163636f756e7427732063757272656e742072657365727665642062616c616e63652e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e0009015741524e494e473a20546869732063616c6c206973204445505245434154454421205573652060666f7263655f7365745f62616c616e63656020696e73746561642e38666f7263655f7472616e736665720c0118736f75726365ed0201504163636f756e7449644c6f6f6b75704f663c543e00011064657374ed0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565d1010128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374ed0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565d1010128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374ed0201504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665ac0110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686f550301445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f72207468655c706f73736962696c696c7479206f6620636875726e292e207472616e7366657208011064657374ed0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565d1010128543a3a42616c616e636500070c3101416c69617320666f7220607472616e736665725f616c6c6f775f6465617468602c2070726f7669646564206f6e6c7920666f72206e616d652d7769736520636f6d7061746962696c6974792e0001015741524e494e473a2044455052454341544544212057696c6c2062652072656c656173656420696e20617070726f78696d6174656c792033206d6f6e7468732e44666f7263655f7365745f62616c616e636508010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565d1010128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e5503000002000059030c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001283856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804884e756d626572206f6620686f6c64732065786365656420604d6178486f6c6473602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909095d030c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800006103086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e740000000856320001000065030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016903045300000400710301185665633c543e00006903104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c6963000004006d03013c737232353531393a3a5075626c696300006d030c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d000071030000026903007503084873705f636f6e73656e7375735f736c6f747310536c6f740000040010010c753634000079030000027d03007d030000040800810300810308447370697269746e65745f72756e74696d652c53657373696f6e4b657973000004011061757261690301c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c69630000850300000220008903000004088d0334008d030c1c73705f636f72651863727970746f244b65795479706549640000040044011c5b75383b20345d000091030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579738103011c543a3a4b65797300011470726f6f6634011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e95030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e99030c4470617261636861696e5f7374616b696e6714747970657324526f756e64496e666f042c426c6f636b4e756d6265720110000c011c63757272656e7420013053657373696f6e496e646578000114666972737410012c426c6f636b4e756d6265720001186c656e67746810012c426c6f636b4e756d62657200009d030c4470617261636861696e5f7374616b696e671474797065734444656c65676174696f6e436f756e7465720000080114726f756e6420013053657373696f6e496e64657800011c636f756e74657220010c7533320000a1030c4470617261636861696e5f7374616b696e67147479706573145374616b6508244163636f756e74496401001c42616c616e63650118000801146f776e65720001244163636f756e744964000118616d6f756e7418011c42616c616e63650000a5030c4470617261636861696e5f7374616b696e671474797065732443616e6469646174650c244163636f756e74496401001c42616c616e63650118644d617844656c656761746f727350657243616e646964617465000014010869640001244163636f756e7449640001147374616b6518011c42616c616e636500012864656c656761746f7273a9030101014f7264657265645365743c5374616b653c4163636f756e7449642c2042616c616e63653e2c204d617844656c656761746f727350657243616e6469646174653e000114746f74616c18011c42616c616e6365000118737461747573b503013c43616e6469646174655374617475730000a9030c4470617261636861696e5f7374616b696e670c736574284f72646572656453657408045401a103045300000400ad030140426f756e6465645665633c542c20533e0000ad030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a103045300000400b10301185665633c543e0000b103000002a10300b5030c4470617261636861696e5f7374616b696e671474797065733c43616e646964617465537461747573000108184163746976650000001c4c656176696e67040020013053657373696f6e496e64657800010000b9030c4470617261636861696e5f7374616b696e6714747970657328546f74616c5374616b65041c42616c616e6365011800080124636f6c6c61746f727318011c42616c616e636500012864656c656761746f727318011c42616c616e63650000bd030c4470617261636861696e5f7374616b696e670c736574284f72646572656453657408045401a103045300000400c1030140426f756e6465645665633c542c20533e0000c1030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a103045300000400b10301185665633c543e0000c5030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e34496e666c6174696f6e496e666f0000080120636f6c6c61746f72c903012c5374616b696e67496e666f00012464656c656761746f72c903012c5374616b696e67496e666f0000c9030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e2c5374616b696e67496e666f00000801206d61785f7261746590012c5065727175696e74696c6c00012c7265776172645f72617465cd030128526577617264526174650000cd030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e28526577617264526174650000080118616e6e75616c90012c5065727175696e74696c6c0001247065725f626c6f636b90012c5065727175696e74696c6c0000d1030c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b011004560118045300000400d503013842547265654d61703c4b2c20563e0000d503042042547265654d617008044b011004560118000400d903000000d903000002dd0300dd0300000408101800e1030c4470617261636861696e5f7374616b696e671870616c6c65741043616c6c0404540001543c666f7263655f6e65775f726f756e64000018d0466f7263657320746865207374617274206f6620746865206e657720726f756e6420696e20746865206e65787420626c6f636b2e00a0546865206e657720726f756e642077696c6c20626520656e666f7263656420766961203c54206173a453686f756c64456e6453657373696f6e3c5f3e3e3a3a73686f756c645f656e645f73657373696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e347365745f696e666c6174696f6e100170636f6c6c61746f725f6d61785f726174655f70657263656e7461676590012c5065727175696e74696c6c000198636f6c6c61746f725f616e6e75616c5f7265776172645f726174655f70657263656e7461676590012c5065727175696e74696c6c00017464656c656761746f725f6d61785f726174655f70657263656e7461676590012c5065727175696e74696c6c00019c64656c656761746f725f616e6e75616c5f7265776172645f726174655f70657263656e7461676590012c5065727175696e74696c6c00013cf05365742074686520616e6e75616c20696e666c6174696f6e207261746520746f20646572697665207065722d726f756e6420696e666c6174696f6e2e00110154686520696e666c6174696f6e2064657461696c732061726520636f6e736964657265642076616c69642069662074686520616e6e75616c207265776172642072617465f0697320617070726f78696d6174656c7920746865207065722d626c6f636b207265776172642072617465206d756c7469706c69656420627920746865ac657374696d617465642a20746f74616c206e756d626572206f6620626c6f636b732070657220796561722e00cc54686520657374696d61746564206176657261676520626c6f636b2074696d65206973207477656c7665207365636f6e64732e000d014e4f54453a204974657261746573206f7665722043616e646964617465506f6f6c20616e6420666f7220656163682063616e646964617465206f766572207468656972090164656c656761746f727320746f207570646174652074686569722072657761726473206265666f72652074686520726577617264207261746573206368616e67652ee04e6565647320746f20626520696d70726f766564207768656e207363616c696e6720757020604d6178546f7043616e64696461746573602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0068456d6974732060526f756e64496e666c6174696f6e536574602e6c7365745f6d61785f73656c65637465645f63616e6469646174657304010c6e657720010c75333200022c090153657420746865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e6469646174657320746861742063616e2062652073656c6563746564a861742074686520626567696e6e696e67206f6620656163682076616c69646174696f6e20726f756e642e00e84368616e67657320617265206e6f74206170706c69656420756e74696c20746865207374617274206f6620746865206e65787420726f756e642e000d01546865206e65772076616c7565206d75737420626520686967686572207468616e20746865206d696e696d756d20616c6c6f7765642061732073657420696e207468655c70616c6c6574277320636f6e66696775726174696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0084456d69747320604d617853656c656374656443616e64696461746573536574602e507365745f626c6f636b735f7065725f726f756e6404010c6e6577100138543a3a426c6f636b4e756d62657200032cd453657420746865206e756d626572206f6620626c6f636b7320656163682076616c69646174696f6e20726f756e64206c617374732e000901496620746865206e65772076616c7565206973206c657373207468616e20746865206c656e677468206f66207468652063757272656e7420726f756e642c20746865050173797374656d2077696c6c20696d6d6564696174656c79206d6f766520746f20746865206e65787420726f756e6420696e20746865206e65787420626c6f636b2e000d01546865206e65772076616c7565206d75737420626520686967686572207468616e20746865206d696e696d756d20616c6c6f7765642061732073657420696e207468655c70616c6c6574277320636f6e66696775726174696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0068456d6974732060426c6f636b73506572526f756e64536574602e5c7365745f6d61785f63616e6469646174655f7374616b6504010c6e657718013042616c616e63654f663c543e000418110153657420746865206d6178696d616c20616d6f756e74206120636f6c6c61746f722063616e207374616b652e204578697374696e67207374616b657320617265206e6f74206368616e6765642e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0084456d69747320604d617843616e6469646174655374616b654368616e676564602e58666f7263655f72656d6f76655f63616e646964617465040120636f6c6c61746f72ed02018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650005300101466f726365646c792072656d6f766573206120636f6c6c61746f722063616e6469646174652066726f6d2074686520546f7043616e6469646174657320616e64e4636c6561727320616c6c206173736f6369617465642073746f7261676520666f72207468652063616e64696461746520616e642074686569722c64656c656761746f72732e00fc507265706172657320756e7374616b696e67206f66207468652063616e6469646174657320616e642074686569722064656c656761746f7273207374616b65f477686963682063616e20626520756e667265657a6564207669612060756e6c6f636b5f756e7374616b6564602061667465722077616974696e6720617409016c6561737420605374616b654475726174696f6e60206d616e7920626c6f636b732e20416c736f20696e6372656d656e7473207265776172647320666f722074686578636f6c6c61746f7220616e642074686569722064656c656761746f72732e00d4496e6372656d656e74732072657761726473206f662063616e64696461746520616e642074686569722064656c656761746f72732e0064456d697473206043616e64696461746552656d6f766564602e3c6a6f696e5f63616e646964617465730401147374616b6518013042616c616e63654f663c543e000644904a6f696e2074686520736574206f6620636f6c6c61746f722063616e646964617465732e00f8496e20746865206e65787420626c6f636b732c2069662074686520636f6c6c61746f722063616e6469646174652068617320656e6f7567682066756e6473fc7374616b656420746f20626520696e636c7564656420696e20616e79206f662074686520746f7020604d617853656c656374656443616e64696461746573600d01706f736974696f6e732c2069742077696c6c20626520696e636c7564656420696e2074686520736574206f6620706f74656e7469616c20617574686f72732074686174050177696c6c2062652073656c656374656420627920746865207374616b652d77656967687465642072616e646f6d2073656c656374696f6e2066756e6374696f6e2e00fc546865207374616b65642066756e6473206f6620746865206e657720636f6c6c61746f722063616e6469646174652061726520616464656420746f2074686568746f74616c207374616b65206f66207468652073797374656d2e00110154686520746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e2074686520616c6c6f7765642072616e67652061738873657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e00f0546865206469737061746368206f726967696e206d757374206e6f7420626520616c72656164792070617274206f662074686520636f6c6c61746f729463616e64696461746573206e6f72206f66207468652064656c656761746f7273207365742e0084456d69747320604a6f696e6564436f6c6c61746f7243616e64696461746573602e54696e69745f6c656176655f63616e6469646174657300076cc05265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e0005014f6e20737563636573732c20746865206163636f756e7420697320696d6d6564696174656c792072656d6f7665642066726f6d207468652063616e6469646174651101706f6f6c20746f2070726576656e742073656c656374696f6e206173206120636f6c6c61746f7220696e206675747572652076616c69646174696f6e20726f756e64732cd862757420756e7374616b696e67206f66207468652066756e6473206973206578656375746564207769746820612064656c6179206f665c605374616b654475726174696f6e6020626c6f636b732e00ac546865206578697420726571756573742063616e2062652072657665727365642062792063616c6c696e67686063616e63656c5f6c656176655f63616e64696461746573602e00f454686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e204974206973110175706461746564206576656e2074686f756768207468652066756e6473206f66207468652063616e6469646174652077686f207369676e616c656420746f206c65617665fc617265207374696c6c206c6f636b656420666f7220604578697444656c617960202b20605374616b654475726174696f6e60206d6f726520626c6f636b732e000d014e4f544520313a2055706f6e207374617274696e672061206e65772073657373696f6e5f6920696e20606e65775f73657373696f6e602c207468652063757272656e741101746f702063616e64696461746573206172652073656c656374656420746f20626520626c6f636b20617574686f727320666f722073657373696f6e5f692b312e20416e7905016368616e67657320746f2074686520746f702063616e64696461746573206166746572776172647320646f206e6f74206566666563742074686520736574206f6660617574686f727320666f722073657373696f6e5f692b312ed8546875732c207765206861766520746f206d616b652073757265206e6f6e65206f6620746865736520636f6c6c61746f72732063616ebc6c65617665206265666f72652073657373696f6e5f692b3120656e64732062792064656c6179696e67207468656972846578697420666f7220604578697444656c617960206d616e7920626c6f636b732e00f04e4f544520323a20576520646f206e6f7420696e6372656d656e74207265776172647320696e20746869732065787472696e73696320617320746865110163616e64696461746520636f756c64207374696c6c20617574686f7220626c6f636b732c20616e64207468757320626520656c696769626c6520746f2072656365697665ac726577617264732c20756e74696c2074686520656e64206f6620746865206e6578742073657373696f6e2e0078456d6974732060436f6c6c61746f725363686564756c656445786974602e60657865637574655f6c656176655f63616e64696461746573040120636f6c6c61746f72ed02018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500084405014578656375746520746865206e6574776f726b2065786974206f6620612063616e6469646174652077686f2072657175657374656420746f206c65617665206174f06c65617374206045786974517565756544656c61796020726f756e64732061676f2e20507265706172657320756e7374616b696e67206f6620746865010163616e6469646174657320616e642074686569722064656c656761746f7273207374616b652077686963682063616e20626520756e667265657a656420766961f460756e6c6f636b5f756e7374616b6564602061667465722077616974696e67206174206c6561737420605374616b654475726174696f6e60206d616e791c626c6f636b732e00c05265717569726573207468652063616e64696461746520746f2070726576696f75736c7920686176652063616c6c65646060696e69745f6c656176655f63616e64696461746573602e00ac546865206578697420726571756573742063616e2062652072657665727365642062792063616c6c696e67686063616e63656c5f6c656176655f63616e64696461746573602e00fc4e4f54453a204974657261746573206f7665722043616e646964617465506f6f6c20666f7220656163682063616e646964617465206f766572207468656972fc64656c656761746f727320746f2073657420726577617264732e204e6565647320746f20626520696d70726f766564207768656e207363616c696e672075704c604d6178546f7043616e64696461746573602e0054456d6974732060436f6c6c61746f724c656674602e5c63616e63656c5f6c656176655f63616e646964617465730009200501526576657274207468652070726576696f75736c79207265717565737465642065786974206f6620746865206e6574776f726b206f66206120636f6c6c61746f720d0163616e6469646174652e204f6e20737563636573732c2061646473206261636b207468652063616e64696461746520746f2074686520546f7043616e6469646174657368616e6420757064617465732074686520636f6c6c61746f72732e00c05265717569726573207468652063616e64696461746520746f2070726576696f75736c7920686176652063616c6c65646060696e69745f6c656176655f63616e64696461746573602e0074456d6974732060436f6c6c61746f7243616e63656c656445786974602e5063616e6469646174655f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000a30a85374616b65206d6f72652066756e647320666f72206120636f6c6c61746f722063616e6469646174652e0001014966206e6f7420696e2074686520736574206f662063616e646964617465732c207374616b696e6720656e6f7567682066756e647320616c6c6f77732074686505016163636f756e7420746f20626520616464656420746f2069742e20546865206c617267657220616d6f756e74206f662066756e64732c2074686520686967686572dc6368616e63657320746f2062652073656c65637465642061732074686520617574686f72206f6620746865206e65787420626c6f636b2e00dc54686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e006c456d6974732060436f6c6c61746f725374616b65644d6f7265602e5063616e6469646174655f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000b3ca85374616b65206c6573732066756e647320666f72206120636f6c6c61746f722063616e6469646174652e000501496620746865206e657720616d6f756e74206f66207374616b65642066756e64206973206e6f74206c6172676520656e6f7567682c20746865206163636f756e74fc636f756c642062652072656d6f7665642066726f6d2074686520736574206f6620636f6c6c61746f722063616e6469646174657320616e64206e6f74206265a4636f6e7369646572656420666f7220617574686f72696e6720746865206e65787420626c6f636b732e00dc54686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e000d0154686520756e7374616b65642066756e647320617265206e6f742072656c656173656420696d6d6564696174656c7920746f20746865206163636f756e742c20627574d0746865792077696c6c20626520617661696c61626c6520616674657220605374616b654475726174696f6e6020626c6f636b732e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e006c456d6974732060436f6c6c61746f725374616b65644c657373602e3c6a6f696e5f64656c656761746f7273080120636f6c6c61746f72ed02018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e7418013042616c616e63654f663c543e000c5805014a6f696e2074686520736574206f662064656c656761746f72732062792064656c65676174696e6720746f206120636f6c6c61746f722063616e6469646174652e000501546865206163636f756e7420746861742077616e747320746f2064656c65676174652063616e6e6f742062652070617274206f662074686520636f6c6c61746f725c63616e64696461746573207365742061732077656c6c2e0009015468652063616c6c6572206d757374205f6e6f745f206861766520612064656c65676174696f6e2e20496620746861742069732074686520636173652c2074686579b061726520726571756972656420746f2066697273742072656d6f7665207468652064656c65676174696f6e2e00110154686520616d6f756e74207374616b6564206d757374206265206c6172676572207468616e20746865206d696e696d756d20726571756972656420746f206265636f6d65c4612064656c656761746f722061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e0009014173206f6e6c7920604d617844656c656761746f7273506572436f6c6c61746f72602061726520616c6c6f77656420746f2064656c6567617465206120676976656e0501636f6c6c61746f722c2074686520616d6f756e74207374616b6564206d757374206265206c6172676572207468616e20746865206c6f77657374206f6e6520696e01017468652063757272656e7420736574206f662064656c656761746f7220666f7220746865206f7065726174696f6e20746f206265206d65616e696e6766756c2e00090154686520636f6c6c61746f72277320746f74616c207374616b652061732077656c6c206173207468652070616c6c6574277320746f74616c207374616b652061726558696e63726561736564206163636f7264696e676c792e004c456d697473206044656c65676174696f6e602ebc456d697473206044656c65676174696f6e5265706c6163656460206966207468652063616e64696461746520686173f8604d617844656c656761746f7273506572436f6c6c61746f7260206d616e792064656c65676174696f6e732062757420746869732064656c656761746f72fc7374616b6564206d6f7265207468616e206f6e65206f6620746865206f746865722064656c656761746f7273206f6620746869732063616e6469646174652e406c656176655f64656c656761746f7273000d400d014c656176652074686520736574206f662064656c656761746f727320616e642c20627920696d706c69636174696f6e2c207265766f6b6520746865206f6e676f696e672c64656c65676174696f6e2e001101416c6c207374616b65642066756e647320617265206e6f7420756e6c6f636b656420696d6d6564696174656c792c2062757420746865792061726520616464656420746f0101746865207175657565206f662070656e64696e6720756e7374616b696e672c20616e642077696c6c206566666563746976656c792062652072656c65617365640901616674657220605374616b654475726174696f6e6020626c6f636b732066726f6d20746865206d6f6d656e74207468652064656c656761746f72206c65617665732e000d0154686973206f7065726174696f6e20726564756365732074686520746f74616c207374616b65206f66207468652070616c6c65742061732077656c6c2061732074686509017374616b6573206f6620616c6c20636f6c6c61746f7273207468617420776572652064656c6567617465642c20706f74656e7469616c6c7920616666656374696e6705017468656972206368616e63657320746f20626520696e636c7564656420696e2074686520736574206f662063616e6469646174657320696e20746865206e6578741c726f756e64732e0005014175746f6d61746963616c6c7920696e6372656d656e74732074686520616363756d756c617465642072657761726473206f6620746865206f726967696e206f665c7468652063757272656e742064656c65676174696f6e2e0058456d697473206044656c656761746f724c656674602e5064656c656761746f725f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000e18dc496e63726561736520746865207374616b6520666f722064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e0001014966206e6f7420696e2074686520736574206f662063616e646964617465732c207374616b696e6720656e6f7567682066756e647320616c6c6f77732074686594636f6c6c61746f722063616e64696461746520746f20626520616464656420746f2069742e0070456d697473206044656c656761746f725374616b65644d6f7265602e5064656c656761746f725f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000f40d452656475636520746865207374616b6520666f722064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e000901496620746865206e657720616d6f756e74206f66207374616b65642066756e64206973206e6f74206c6172676520656e6f7567682c2074686520636f6c6c61746f72fc636f756c642062652072656d6f7665642066726f6d2074686520736574206f6620636f6c6c61746f722063616e6469646174657320616e64206e6f74206265a4636f6e7369646572656420666f7220617574686f72696e6720746865206e65787420626c6f636b732e00090154686520756e7374616b65642066756e647320617265206e6f742072656c6561736520696d6d6564696174656c7920746f20746865206163636f756e742c20627574d0746865792077696c6c20626520617661696c61626c6520616674657220605374616b654475726174696f6e6020626c6f636b732e0001015468652072656d61696e696e67207374616b65642066756e6473206d757374207374696c6c206265206c6172676572207468616e20746865206d696e696d756df0726571756972656420627920746869732070616c6c657420746f206d61696e7461696e2074686520737461747573206f662064656c656761746f722e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e0070456d697473206044656c656761746f725374616b65644c657373602e3c756e6c6f636b5f756e7374616b6564040118746172676574ed02018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365001028f4556e6c6f636b20616c6c2070726576696f75736c79207374616b65642066756e6473207468617420617265206e6f7720617661696c61626c6520666f720501756e6c6f636b696e6720627920746865206f726967696e206163636f756e7420616674657220605374616b654475726174696f6e6020626c6f636b73206861766520656c61707365642e00fc5765696768743a204f285529207768657265205520697320746865206e756d626572206f66206c6f636b656420756e7374616b696e6720726571756573747380626f756e64656420627920604d6178556e7374616b655265717565737473602eb42d2052656164733a205b4f726967696e204163636f756e745d2c20556e7374616b696e672c20467265657a6573702d205772697465733a20556e7374616b696e672c20467265657a6573f02d204b696c6c733a20556e7374616b696e67202620467265657a6573206966206e6f2062616c616e6365206973206c6f636b656420616e796d6f72652c23203c2f7765696768743e34636c61696d5f7265776172647300113cd4436c61696d20626c6f636b20617574686f72696e67207265776172647320666f72207468652074617267657420616464726573732e00090152657175697265732060526577617264736020746f20626520736574206265666f726568616e642c2077686963682063616e2062792074726967676572656420627970616e79206f662074686520666f6c6c6f77696e67206f7074696f6e73e82a2043616c6c696e6720696e6372656d656e745f7b636f6c6c61746f722c2064656c656761746f727d5f72657761726473202861637469766529782a20416c746572696e6720796f7572207374616b65202861637469766529b02a204c656176696e6720746865206e6574776f726b206173206120636f6c6c61746f72202861637469766529bc2a205265766f6b696e6720612064656c65676174696f6e20617320612064656c656761746f7220286163746976652909012a204265696e6720612064656c656761746f722077686f736520636f6c6c61746f72206c65667420746865206e6574776f726b2c20616c7465726564207468656972a020207374616b65206f7220696e6372656d656e746564207265776172647320287061737369766529000501546865206469737061746368206f726967696e2063616e20626520616e79207369676e6564206f6e652c20652e672e2c20616e796f6e652063616e20636c61696d2c666f7220616e796f6e652e0044456d69747320605265776172646564602e68696e6372656d656e745f636f6c6c61746f725f72657761726473001218b44163746976656c7920696e6372656d656e74207468652072657761726473206f66206120636f6c6c61746f722e0005015468652073616d652065666665637420697320747269676765726564206279206368616e67696e6720746865207374616b65206f72206c656176696e6720746865206e6574776f726b2e009c546865206469737061746368206f726967696e206d757374206265206120636f6c6c61746f722e6c696e6372656d656e745f64656c656761746f725f72657761726473001318b84163746976656c7920696e6372656d656e74207468652072657761726473206f6620612064656c656761746f722e00f85468652073616d652065666665637420697320747269676765726564206279206368616e67696e6720746865207374616b65206f72207265766f6b696e673064656c65676174696f6e732e00a0546865206469737061746368206f726967696e206d75737420626520612064656c656761746f722e7c657865637574655f7363686564756c65645f7265776172645f6368616e67650014280d0145786563757465732074686520616e6e75616c20726564756374696f6e206f66207468652072657761726420726174657320666f7220636f6c6c61746f727320616e642c64656c656761746f72732e00dc4d6f72656f7665722c2073657473207265776172647320666f7220616c6c20636f6c6c61746f727320616e642064656c656761746f72737c6265666f72652061646a757374696e672074686520696e666c6174696f6e2e000d01546865206469737061746368206f726967696e2063616e20626520616e79207369676e6564206f6e652062656361757365207765206261696c2069662063616c6c656428746f6f206561726c792e0068456d6974732060526f756e64496e666c6174696f6e536574602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee5030c4470617261636861696e5f7374616b696e671870616c6c6574144572726f7204045400017c4444656c656761746f724e6f74466f756e64000004b8546865206163636f756e74206973206e6f742070617274206f66207468652064656c656761746f7273207365742e4443616e6469646174654e6f74466f756e64000104dc546865206163636f756e74206973206e6f742070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3c44656c656761746f72457869737473000204c8546865206163636f756e7420697320616c72656164792070617274206f66207468652064656c656761746f7273207365742e3c43616e646964617465457869737473000304ec546865206163636f756e7420697320616c72656164792070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3056616c5374616b655a65726f000404e4546865206163636f756e7420747269656420746f207374616b65206d6f7265206f72206c657373207769746820616d6f756e74207a65726f2e4056616c5374616b6542656c6f774d696e0005080d01546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f20626520616464656420746f2074686520636f6c6c61746f723c63616e64696461746573207365742e4056616c5374616b6541626f76654d61780006041101546865206163636f756e742068617320616c7265616479207374616b656420746865206d6178696d756d20616d6f756e74206f662066756e647320706f737369626c652e4844656c65676174696f6e42656c6f774d696e000708f8546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f2064656c6567617465206120636f6c6c61746f722863616e6469646174652e38416c72656164794c656176696e670008080d0154686520636f6c6c61746f722063616e6469646174652068617320616c72656164792074726967676572207468652070726f6365737320746f206c65617665207468656c736574206f6620636f6c6c61746f722063616e646964617465732e284e6f744c656176696e67000908f454686520636f6c6c61746f722063616e6469646174652077616e74656420746f20657865637574652074686520657869742062757420686173206e6f74f472657175657374656420746f206c65617665206265666f72652062792063616c6c696e672060696e69745f6c656176655f63616e64696461746573602e3843616e6e6f744c65617665596574000a08dc54686520636f6c6c61746f7220747269656420746f206c65617665206265666f72652077616974696e67206174206c6561737420666f72746045786974517565756544656c617960206d616e7920726f756e64732e6443616e6e6f744a6f696e4265666f7265556e6c6f636b696e67000b10f8546865206163636f756e742068617320612066756c6c206c697374206f6620756e7374616b696e6720726571756573747320616e64206e6565647320746ffc756e6c6f636b206174206c65617374206f6e65206f66207468657365206265666f7265206265696e672061626c6520746f206a6f696e2028616761696e292edc4e4f54453a2043616e206f6e6c792068617070656e20696620746865206163636f756e742077617320612063616e646964617465206f72f464656c656761746f72206265666f726520616e642065697468657220676f74206b69636b6564206f722065786974656420766f6c756e746172696c792e44416c726561647944656c65676174696e67000c04e4546865206163636f756e7420697320616c72656164792064656c65676174696e672074686520636f6c6c61746f722063616e6469646174652e404e6f7459657444656c65676174696e67000d080901546865206163636f756e7420686173206e6f742064656c65676174656420616e7920636f6c6c61746f722063616e646964617465207965742c2068656e6365206974806973206e6f7420696e2074686520736574206f662064656c656761746f72732e6c44656c65676174696f6e73506572526f756e644578636565646564000e1811015468652064656c656761746f722068617320657863656564656420746865206e756d626572206f662064656c65676174696f6e732070657220726f756e6420776869636894697320657175616c20746f204d617844656c656761746f7273506572436f6c6c61746f722e000901546869732070726f746563747320616761696e73742061747461636b7320696e20776869636820612064656c656761746f722063616e2072652d64656c6567617465010166726f6d206120636f6c6c61746f722077686f2068617320616c726561647920617574686f726564206120626c6f636b2c20746f20616e6f74686572206f6e6570776869636820686173206e6f7420696e207468697320726f756e642e44546f6f4d616e7944656c656761746f7273000f14010154686520636f6c6c61746f722063616e6469646174652068617320616c7265616479207265616368656420746865206d6178696d756d206e756d626572206f662c64656c656761746f72732e00050154686973206572726f722069732067656e65726174656420696e20636173652061206e65772064656c65676174696f6e207265717565737420646f6573206e6f74f47374616b6520656e6f7567682066756e647320746f207265706c61636520736f6d65206f74686572206578697374696e672064656c65676174696f6e2e60546f6f466577436f6c6c61746f7243616e64696461746573001008110154686520736574206f6620636f6c6c61746f722063616e6469646174657320776f756c642066616c6c2062656c6f7720746865207265717569726564206d696e696d756d5469662074686520636f6c6c61746f72206c6566742e5043616e6e6f745374616b6549664c656176696e67001108f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66010163616e6469646174657320616e642063616e6e6f7420706572666f726d20616e79206f7468657220616374696f6e7320696e20746865206d65616e74696d652e5c43616e6e6f7444656c656761746549664c656176696e67001208f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66ac63616e6469646174657320616e6420746875732063616e6e6f742062652064656c65676174656420746f2e804d6178436f6c6c61746f727350657244656c656761746f72457863656564656400130811015468652064656c656761746f722068617320616c72656164792064656c65676174656420746865206d6178696d756d206e756d626572206f662063616e6469646174657320616c6c6f7765642e60416c726561647944656c656761746564436f6c6c61746f72001408ec5468652064656c656761746f722068617320616c72656164792070726576696f75736c792064656c6567617465642074686520636f6c6c61746f722863616e6469646174652e4844656c65676174696f6e4e6f74466f756e64001504f854686520676976656e2064656c65676174696f6e20646f6573206e6f7420657869737420696e2074686520736574206f662064656c65676174696f6e732e24556e646572666c6f77001608050154686520636f6c6c61746f722064656c6567617465206f72207468652064656c656761746f7220697320747279696e6720746f20756e2d7374616b65206d6f72658066756e64732074686174206172652063757272656e746c79207374616b65642e4443616e6e6f7453657441626f76654d6178001708d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738061626f766520746865206d6178696d756d2076616c756520616c6c6f7765642e4443616e6e6f7453657442656c6f774d696e001808d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738062656c6f7720746865206d696e696d756d2076616c756520616c6c6f7765642e3c496e76616c69645363686564756c65001904dc416e20696e76616c696420696e666c6174696f6e20636f6e66696775726174696f6e20697320747279696e6720746f206265207365742e3c4e6f4d6f7265556e7374616b696e67001a08c4546865207374616b696e6720726577617264206265696e6720756e6c6f636b656420646f6573206e6f742065786973742e7c4d617820756e6c6f636b696e6720726571756573747320726561636865642e20546f6f4561726c79001b0801015468652072657761726420726174652063616e6e6f742062652061646a75737465642079657420617320616e20656e74697265207965617220686173206e6f741c7061737365642e345374616b654e6f74466f756e64001c04d850726f7669646564207374616b65642076616c7565206973207a65726f2e2053686f756c64206e65766572206265207468726f776e2e40556e7374616b696e674973456d707479001d049443616e6e6f7420756e6c6f636b207768656e20556e7374616b656420697320656d7074792e3c526577617264734e6f74466f756e64001e047843616e6e6f7420636c61696d207265776172647320696620656d7074792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e9030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ed03045300000400b10501185665633c543e0000ed030000040c20f1030000f10310346672616d655f737570706f72741874726169747324707265696d616765731c426f756e64656404045401f503010c184c6567616379040110686173683001104861736800000018496e6c696e65040095010134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173683001104861736800010c6c656e20010c75333200020000f50308447370697269746e65745f72756e74696d652c52756e74696d6543616c6c0001781853797374656d0400a10201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400e10201b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c496e64696365730400e90201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e0005002042616c616e6365730400510301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0006001c53657373696f6e0400910301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0016004050617261636861696e5374616b696e670400e10301d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e5374616b696e672c2052756e74696d653e0015002444656d6f63726163790400f90301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e001e001c436f756e63696c0400090401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e001f0048546563686e6963616c436f6d6d69747465650400110401dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465652c2052756e74696d653e0020004c546563686e6963616c4d656d626572736869700400150401e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c4d656d626572736869702c2052756e74696d653e0022002054726561737572790400190401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e0023001c5574696c69747904001d0401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e0028001c56657374696e670400450401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e002900245363686564756c657204004d0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e002a001450726f78790400550401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002b0020507265696d61676504005d0401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e002c0038546970734d656d626572736869700400610401cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970734d656d626572736869702c2052756e74696d653e002d0010546970730400650401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970732c2052756e74696d653e002e00204d756c74697369670400690401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e002f001443747970650400710401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43747970652c2052756e74696d653e003d002c4174746573746174696f6e0400750401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4174746573746174696f6e2c2052756e74696d653e003e002844656c65676174696f6e0400890401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656c65676174696f6e2c2052756e74696d653e003f000c4469640400a50401a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469642c2052756e74696d653e004000244469644c6f6f6b75700400fd0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469644c6f6f6b75702c2052756e74696d653e00430024576562334e616d657304000d0501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c576562334e616d65732c2052756e74696d653e004400445075626c696343726564656e7469616c730400110501d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5075626c696343726564656e7469616c732c2052756e74696d653e0045003c50617261636861696e53797374656d0400210501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0050002458636d7051756575650400550501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e0052002c506f6c6b61646f7458636d0400590501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e00530020446d7051756575650400ad0501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446d7051756575652c2052756e74696d653e00550000f9030c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c04045400014c1c70726f706f736508012070726f706f73616cf1030140426f756e64656443616c6c4f663c543e00011476616c7565d101013042616c616e63654f663c543e0000249c50726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e001501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737480686176652066756e647320746f20636f76657220746865206465706f7369742e00d42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e15012d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e0044456d697473206050726f706f736564602e187365636f6e6404012070726f706f73616cc501012450726f70496e646578000118b45369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e64657211016d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e00c82d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e10766f74650801247265665f696e646578c501013c5265666572656e64756d496e646578000110766f74659c01644163636f756e74566f74653c42616c616e63654f663c543e3e00021c3101566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3bb86f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00dc2d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e842d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e40656d657267656e63795f63616e63656c0401247265665f696e64657820013c5265666572656e64756d496e6465780003204d015363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d652c7265666572656e64756d2e00f8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e00d02d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e003c5765696768743a20604f283129602e4065787465726e616c5f70726f706f736504012070726f706f73616cf1030140426f756e64656443616c6c4f663c543e0004182d015363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c2c7265666572656e64756d2e00e8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616cf1030140426f756e64656443616c6c4f663c543e00052c55015363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c655c616e2065787465726e616c207265666572656e64756d2e00ec546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f283129606065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616cf1030140426f756e64656443616c6c4f663c543e00062c45015363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f807363686564756c6520616e2065787465726e616c207265666572656e64756d2e00e8546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f2831296028666173745f747261636b0c013470726f706f73616c5f6861736830011048323536000134766f74696e675f706572696f64100138543a3a426c6f636b4e756d62657200011464656c6179100138543a3a426c6f636b4e756d6265720007404d015363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c65646101696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e65e8627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e00d0546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e00f42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e5d012d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f88094d75737420626520616c776179732067726561746572207468616e207a65726f2e350109466f72206046617374547261636b4f726967696e60206d75737420626520657175616c206f722067726561746572207468616e206046617374547261636b566f74696e67506572696f64602e51012d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265b82020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e0040456d697473206053746172746564602e00385765696768743a20604f28312960347665746f5f65787465726e616c04013470726f706f73616c5f6861736830011048323536000824b85665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e00d8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e002d012d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e003c456d69747320605665746f6564602e00fc5765696768743a20604f2856202b206c6f6728562929602077686572652056206973206e756d626572206f6620606578697374696e67207665746f657273604463616e63656c5f7265666572656e64756d0401247265665f696e646578c501013c5265666572656e64756d496e64657800091c5052656d6f76652061207265666572656e64756d2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e00d42d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e004423205765696768743a20604f283129602e2064656c65676174650c0108746fed0201504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6efd030128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a50390144656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e742e0055015468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f7220746865c874696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a7420202d2062652064656c65676174696e6720616c72656164793b206f72590120202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f7665642f636f6e736f6c69646174656494202020207468726f7567682060726561705f766f746560206f722060756e766f746560292e0045012d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e55012d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e20746865410120206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e61012d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d757374206e6f74b420206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e0048456d697473206044656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e28756e64656c6567617465000b30cc556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e742e005d01546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f64dc6f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e20776173206973737565642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062655463757272656e746c792064656c65676174696e672e0050456d6974732060556e64656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e58636c6561725f7075626c69635f70726f706f73616c73000c1470436c6561727320616c6c207075626c69632070726f706f73616c732e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e003c5765696768743a20604f283129602e18756e6c6f636b040118746172676574ed0201504163636f756e7449644c6f6f6b75704f663c543e000d1ca0556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00b82d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e00bc5765696768743a20604f2852296020776974682052206e756d626572206f6620766f7465206f66207461726765742e2c72656d6f76655f766f7465040114696e64657820013c5265666572656e64756d496e646578000e6c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e000c49663a882d20746865207265666572656e64756d207761732063616e63656c6c65642c206f727c2d20746865207265666572656e64756d206973206f6e676f696e672c206f72902d20746865207265666572656e64756d2068617320656e64656420737563682074686174fc20202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f72d420202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f728420202d20746865206163636f756e74206d61646520612073706c697420766f74655d012e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72655866756e6473206265696e6720617661696c61626c652e00a849662c20686f77657665722c20746865207265666572656e64756d2068617320656e64656420616e643aec2d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64dc2d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64bc2d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f76657259012e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c766559012a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756de46f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e004901546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465887265676973746572656420666f72207265666572656e64756d2060696e646578602e00f42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e4472656d6f76655f6f746865725f766f7465080118746172676574ed0201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657820013c5265666572656e64756d496e646578000f3c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e004d0149662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f2d016072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c5501656974686572206265636175736520746865207265666572656e64756d207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f737420746865207265666572656e64756d206f7298626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e004d012d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f725420207265666572656e64756d2060696e646578602ef42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e24626c61636b6c69737408013470726f706f73616c5f686173683001104832353600013c6d617962655f7265665f696e6465780104015c4f7074696f6e3c5265666572656e64756d496e6465783e00103c45015065726d616e656e746c7920706c61636520612070726f706f73616c20696e746f2074686520626c61636b6c6973742e20546869732070726576656e74732069742066726f6d2065766572206265696e673c70726f706f73656420616761696e2e00510149662063616c6c6564206f6e206120717565756564207075626c6963206f722065787465726e616c2070726f706f73616c2c207468656e20746869732077696c6c20726573756c7420696e206974206265696e67510172656d6f7665642e2049662074686520607265665f696e6465786020737570706c69656420697320616e20616374697665207265666572656e64756d2077697468207468652070726f706f73616c20686173682c687468656e2069742077696c6c2062652063616e63656c6c65642e00ec546865206469737061746368206f726967696e206f6620746869732063616c6c206d7573742062652060426c61636b6c6973744f726967696e602e00f82d206070726f706f73616c5f68617368603a205468652070726f706f73616c206861736820746f20626c61636b6c697374207065726d616e656e746c792e45012d20607265665f696e646578603a20416e206f6e676f696e67207265666572656e64756d2077686f73652068617368206973206070726f706f73616c5f68617368602c2077686963682077696c6c2062652863616e63656c6c65642e0041015765696768743a20604f28702960202874686f756768206173207468697320697320616e20686967682d70726976696c6567652064697370617463682c20776520617373756d65206974206861732061502020726561736f6e61626c652076616c7565292e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578c501012450726f70496e64657800111c4852656d6f766520612070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c50726f706f73616c4f726967696e602e00d02d206070726f705f696e646578603a2054686520696e646578206f66207468652070726f706f73616c20746f2063616e63656c2e00e45765696768743a20604f28702960207768657265206070203d205075626c696350726f70733a3a3c543e3a3a6465636f64655f6c656e282960307365745f6d657461646174610801146f776e6572a401344d657461646174614f776e65720001286d617962655f68617368050401504f7074696f6e3c507265696d616765486173683e00123cd8536574206f7220636c6561722061206d65746164617461206f6620612070726f706f73616c206f722061207265666572656e64756d2e002c506172616d65746572733acc2d20606f726967696e603a204d75737420636f72726573706f6e6420746f2074686520604d657461646174614f776e6572602e3d01202020202d206045787465726e616c4f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053757065724d616a6f72697479417070726f766560402020202020207468726573686f6c642e5901202020202d206045787465726e616c44656661756c744f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053757065724d616a6f72697479416761696e737460402020202020207468726573686f6c642e4501202020202d206045787465726e616c4d616a6f726974794f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053696d706c654d616a6f7269747960402020202020207468726573686f6c642ec8202020202d20605369676e65646020627920612063726561746f7220666f722061207075626c69632070726f706f73616c2ef4202020202d20605369676e65646020746f20636c6561722061206d6574616461746120666f7220612066696e6973686564207265666572656e64756d2ee4202020202d2060526f6f746020746f207365742061206d6574616461746120666f7220616e206f6e676f696e67207265666572656e64756d2eb42d20606f776e6572603a20616e206964656e746966696572206f662061206d65746164617461206f776e65722e51012d20606d617962655f68617368603a205468652068617368206f6620616e206f6e2d636861696e2073746f72656420707265696d6167652e20604e6f6e656020746f20636c6561722061206d657461646174612e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632efd030c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000010404184f7074696f6e04045401200108104e6f6e6500000010536f6d650400200000010000050404184f7074696f6e04045401300108104e6f6e6500000010536f6d65040030000001000009040c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273550301445665633c543a3a4163636f756e7449643e0001147072696d650d0401504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7420012c4d656d626572436f756e74000060805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e00d4546865206469737061746368206f6620746869732063616c6c206d75737420626520605365744d656d626572734f726967696e602e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e0038232320436f6d706c65786974793a502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564291c6578656375746508012070726f706f73616cf503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c501010c753332000124f0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e0038232320436f6d706c65786974793a5c2d20604f2842202b204d202b205029602077686572653ad82d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429882d20604d60206d656d626572732d636f756e742028636f64652d626f756e64656429a82d2060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c601c70726f706f73650c01247468726573686f6c64c501012c4d656d626572436f756e7400012070726f706f73616cf503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c501010c753332000238f84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e0034232320436f6d706c6578697479ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d2032602910766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578c501013450726f706f73616c496e64657800011c617070726f7665ac0110626f6f6c000324f041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e34232320436f6d706c657869747909012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564294c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a486173680005285901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e0034232320436f6d706c6578697479ac4f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c7314636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578c501013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642801185765696768740001306c656e6774685f626f756e64c501010c7533320006604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e0d0404184f7074696f6e04045401000108104e6f6e6500000010536f6d65040000000001000011040c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273550301445665633c543a3a4163636f756e7449643e0001147072696d650d0401504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7420012c4d656d626572436f756e74000060805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e00d4546865206469737061746368206f6620746869732063616c6c206d75737420626520605365744d656d626572734f726967696e602e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e0038232320436f6d706c65786974793a502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564291c6578656375746508012070726f706f73616cf503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c501010c753332000124f0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e0038232320436f6d706c65786974793a5c2d20604f2842202b204d202b205029602077686572653ad82d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429882d20604d60206d656d626572732d636f756e742028636f64652d626f756e64656429a82d2060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c601c70726f706f73650c01247468726573686f6c64c501012c4d656d626572436f756e7400012070726f706f73616cf503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c501010c753332000238f84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e0034232320436f6d706c6578697479ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d2032602910766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578c501013450726f706f73616c496e64657800011c617070726f7665ac0110626f6f6c000324f041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e34232320436f6d706c657869747909012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564294c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a486173680005285901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e0034232320436f6d706c6578697479ac4f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c7314636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578c501013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642801185765696768740001306c656e6774685f626f756e64c501010c7533320006604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e15040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665ed0201504163636f756e7449644c6f6f6b75704f663c543e00010c616464ed0201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d62657273550301445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577ed0201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e19040c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001143470726f706f73655f7370656e6408011476616c7565d101013c42616c616e63654f663c542c20493e00012c62656e6566696369617279ed0201504163636f756e7449644c6f6f6b75704f663c543e000018290150757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c75653101697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e6365207468655070726f706f73616c20697320617761726465642e0034232320436f6d706c6578697479182d204f2831293c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964c501013450726f706f73616c496e646578000118f852656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e0034232320436f6d706c6578697479182d204f28312940617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964c501013450726f706f73616c496e64657800021c5901417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e6566696369617279a8616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e00ac4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a417070726f76654f726967696e602e0034232320436f6d706c657869747920202d204f2831292e147370656e64080118616d6f756e74d101013c42616c616e63654f663c542c20493e00012c62656e6566696369617279ed0201504163636f756e7449644c6f6f6b75704f663c543e000320b850726f706f736520616e6420617070726f76652061207370656e64206f662074726561737572792066756e64732e004d012d20606f726967696e603a204d75737420626520605370656e644f726967696e60207769746820746865206053756363657373602076616c7565206265696e67206174206c656173742060616d6f756e74602e41012d2060616d6f756e74603a2054686520616d6f756e7420746f206265207472616e736665727265642066726f6d2074686520747265617375727920746f20746865206062656e6566696369617279602ee82d206062656e6566696369617279603a205468652064657374696e6174696f6e206163636f756e7420666f7220746865207472616e736665722e0045014e4f54453a20466f72207265636f72642d6b656570696e6720707572706f7365732c207468652070726f706f736572206973206465656d656420746f206265206571756976616c656e7420746f207468653062656e65666963696172792e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964c501013450726f706f73616c496e6465780004342d01466f72636520612070726576696f75736c7920617070726f7665642070726f706f73616c20746f2062652072656d6f7665642066726f6d2074686520617070726f76616c2071756575652ec0546865206f726967696e616c206465706f7369742077696c6c206e6f206c6f6e6765722062652072657475726e65642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602ea02d206070726f706f73616c5f6964603a2054686520696e646578206f6620612070726f706f73616c0034232320436f6d706c6578697479ac2d204f2841292077686572652060416020697320746865206e756d626572206f6620617070726f76616c73001c4572726f72733a61012d206050726f706f73616c4e6f74417070726f766564603a20546865206070726f706f73616c5f69646020737570706c69656420776173206e6f7420666f756e6420696e2074686520617070726f76616c2071756575652c5101692e652e2c207468652070726f706f73616c20686173206e6f74206265656e20617070726f7665642e205468697320636f756c6420616c736f206d65616e207468652070726f706f73616c20646f6573206e6f745901657869737420616c746f6765746865722c2074687573207468657265206973206e6f2077617920697420776f756c642068617665206265656e20617070726f76656420696e2074686520666972737420706c6163652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e1d040c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c732104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e646578e0010c75313600011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c732104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696e25040154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c732104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874280118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2104000002f50300250408447370697269746e65745f72756e74696d65304f726967696e43616c6c657200011c1873797374656d0400290401746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c04002d0401010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400310401010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020000c4469640400350401506469643a3a4f726967696e3c52756e74696d653e0040002c506f6c6b61646f7458636d04003904014870616c6c65745f78636d3a3a4f726967696e0053002843756d756c757358636d04003d04016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e00540010566f69640400410401110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f69640006000029040c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200002d04084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080020012c4d656d626572436f756e74000020012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d000200003104084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080020012c4d656d626572436f756e74000020012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d0002000035040c0c646964186f726967696e304469645261774f726967696e08344469644964656e7469666965720100244163636f756e74496401000008010869640001344469644964656e7469666965720001247375626d69747465720001244163636f756e744964000039040c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400b90101344d756c74694c6f636174696f6e00000020526573706f6e73650400b90101344d756c74694c6f636174696f6e000100003d040c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e0400ad010118506172614964000100004104081c73705f636f726510566f69640001000045040c3870616c6c65745f76657374696e671870616c6c65741043616c6c0404540001141076657374000024b8556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e005d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e28766573745f6f74686572040118746172676574ed0201504163636f756e7449644c6f6f6b75704f663c543e00012cb8556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051012d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e3c7665737465645f7472616e73666572080118746172676574ed0201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65490401a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00023464437265617465206120766573746564207472616e736665722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d2060746172676574603a20546865206163636f756e7420726563656976696e6720746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e54666f7263655f7665737465645f7472616e736665720c0118736f75726365ed0201504163636f756e7449644c6f6f6b75704f663c543e000118746172676574ed0201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65490401a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00033860466f726365206120766573746564207472616e736665722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00e82d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e11012d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657820010c75333200013c7363686564756c65325f696e64657820010c7533320004545d014d657267652074776f2076657374696e67207363686564756c657320746f6765746865722c206372656174696e672061206e65772076657374696e67207363686564756c65207468617420756e6c6f636b73206f7665725501746865206869676865737420706f737369626c6520737461727420616e6420656e6420626c6f636b732e20496620626f7468207363686564756c6573206861766520616c7265616479207374617274656420746865590163757272656e7420626c6f636b2077696c6c206265207573656420617320746865207363686564756c652073746172743b207769746820746865206361766561742074686174206966206f6e65207363686564756c655d0169732066696e6973686564206279207468652063757272656e7420626c6f636b2c20746865206f746865722077696c6c206265207472656174656420617320746865206e6577206d6572676564207363686564756c652c2c756e6d6f6469666965642e00f84e4f54453a20496620607363686564756c65315f696e646578203d3d207363686564756c65325f696e6465786020746869732069732061206e6f2d6f702e41014e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b207072696f7220746f206d657267696e672e61014e4f54453a20496620626f7468207363686564756c6573206861766520656e646564206279207468652063757272656e7420626c6f636b2c206e6f206e6577207363686564756c652077696c6c206265206372656174656464616e6420626f74682077696c6c2062652072656d6f7665642e006c4d6572676564207363686564756c6520617474726962757465733a35012d20607374617274696e675f626c6f636b603a20604d4158287363686564756c65312e7374617274696e675f626c6f636b2c207363686564756c6564322e7374617274696e675f626c6f636b2c48202063757272656e745f626c6f636b29602e21012d2060656e64696e675f626c6f636b603a20604d4158287363686564756c65312e656e64696e675f626c6f636b2c207363686564756c65322e656e64696e675f626c6f636b29602e59012d20606c6f636b6564603a20607363686564756c65312e6c6f636b65645f61742863757272656e745f626c6f636b29202b207363686564756c65322e6c6f636b65645f61742863757272656e745f626c6f636b29602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00e82d20607363686564756c65315f696e646578603a20696e646578206f6620746865206669727374207363686564756c6520746f206d657267652eec2d20607363686564756c65325f696e646578603a20696e646578206f6620746865207365636f6e64207363686564756c6520746f206d657267652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e49040c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d62657200004d040c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963510401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100138543a3a426c6f636b4e756d626572000114696e64657820010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963510401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963510401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000404a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963510401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000504905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e510404184f7074696f6e04045401d00108104e6f6e6500000010536f6d650400d0000001000055040c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616ced0201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065590401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465ed0201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d6265720001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465ed0201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d626572000114696e646578e0010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572ed0201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f787954797065000114696e646578e0010c7531360001186865696768742c0138543a3a426c6f636b4e756d6265720001246578745f696e646578c501010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616ced0201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616ced0201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465ed0201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465ed0201504163636f756e7449644c6f6f6b75704f663c543e0001107265616ced0201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065590401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e590404184f7074696f6e04045401dc0108104e6f6e6500000010536f6d650400dc00000100005d040c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657334011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d6167650401106861736830011c543a3a48617368000118dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e00fc496620606c656e602069732070726f76696465642c207468656e2069742077696c6c2062652061206d7563682063686561706572206f7065726174696f6e2e0001012d206068617368603a205468652068617368206f662074686520707265696d61676520746f2062652072656d6f7665642066726f6d207468652073746f72652eb82d20606c656e603a20546865206c656e677468206f662074686520707265696d616765206f66206068617368602e40726571756573745f707265696d6167650401106861736830011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d6167650401106861736830011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e61040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665ed0201504163636f756e7449644c6f6f6b75704f663c543e00010c616464ed0201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d62657273550301445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577ed0201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e65040c2c70616c6c65745f746970731870616c6c65741043616c6c080454000449000118387265706f72745f617765736f6d65080118726561736f6e34011c5665633c75383e00010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e00004059015265706f727420736f6d657468696e672060726561736f6e60207468617420646573657276657320612074697020616e6420636c61696d20616e79206576656e7475616c207468652066696e6465722773206665652e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051015061796d656e743a20605469705265706f72744465706f73697442617365602077696c6c2062652072657365727665642066726f6d20746865206f726967696e206163636f756e742c2061732077656c6c206173bc60446174614465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e0074456d69747320604e657754697060206966207375636365737366756c2e0034232320436f6d706c6578697479982d20604f2852296020776865726520605260206c656e677468206f662060726561736f6e602e9020202d20656e636f64696e6720616e642068617368696e67206f662027726561736f6e272c726574726163745f7469700401106861736830011c543a3a486173680001405101526574726163742061207072696f72207469702d7265706f72742066726f6d20607265706f72745f617765736f6d65602c20616e642063616e63656c207468652070726f63657373206f662074697070696e672e00dc4966207375636365737366756c2c20746865206f726967696e616c206465706f7369742077696c6c20626520756e72657365727665642e004d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642074686520746970206964656e7469666965642062792060686173686041016d7573742068617665206265656e207265706f7274656420627920746865207369676e696e67206163636f756e74207468726f75676820607265706f72745f617765736f6d65602028616e64206e6f744c7468726f75676820607469705f6e657760292e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e008c456d697473206054697052657472616374656460206966207375636365737366756c2e0034232320436f6d706c6578697479202d20604f28312960d820202d20446570656e6473206f6e20746865206c656e677468206f662060543a3a48617368602077686963682069732066697865642e1c7469705f6e65770c0118726561736f6e34011c5665633c75383e00010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e0001247469705f76616c7565d101013c42616c616e63654f663c542c20493e00024cf04769766520612074697020666f7220736f6d657468696e67206e65773b206e6f2066696e6465722773206665652077696c6c2062652074616b656e2e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e0074456d69747320604e657754697060206966207375636365737366756c2e0034232320436f6d706c657869747921012d20604f2852202b2054296020776865726520605260206c656e677468206f662060726561736f6e602c2060546020697320746865206e756d626572206f6620746970706572732e5d0120202d20604f285429603a206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792d012020202060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f66442020202060543a3a54697070657273602ee020202d20604f285229603a2068617368696e6720616e6420656e636f64696e67206f6620726561736f6e206f66206c656e677468206052600c7469700801106861736830011c543a3a486173680001247469705f76616c7565d101013c42616c616e63654f663c542c20493e000354b04465636c6172652061207469702076616c756520666f7220616e20616c72656164792d6f70656e207469702e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f66207468652068617368206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e65666963696172793420206163636f756e742049442e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e006101456d6974732060546970436c6f73696e676020696620746865207468726573686f6c64206f66207469707065727320686173206265656e207265616368656420616e642074686520636f756e74646f776e20706572696f643068617320737461727465642e0034232320436f6d706c657869747961012d20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e677468206054602c20696e736572745901202074697020616e6420636865636b20636c6f73696e672c20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e010120205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e005d01202041637475616c6c792077656967687420636f756c64206265206c6f77657220617320697420646570656e6473206f6e20686f77206d616e7920746970732061726520696e20604f70656e5469706020627574206974d02020697320776569676874656420617320696620616c6d6f73742066756c6c20692e65206f66206c656e6774682060542d31602e24636c6f73655f7469700401106861736830011c543a3a486173680004345c436c6f736520616e64207061796f75742061207469702e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00150154686520746970206964656e74696669656420627920606861736860206d75737420686176652066696e69736865642069747320636f756e74646f776e20706572696f642e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e0034232320436f6d706c65786974795d012d203a20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e20605460590120206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e94202074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e24736c6173685f7469700401106861736830011c543a3a486173680005289452656d6f766520616e6420736c61736820616e20616c72656164792d6f70656e207469702e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e00f44173206120726573756c742c207468652066696e64657220697320736c617368656420616e6420746865206465706f7369747320617265206c6f73742e0084456d6974732060546970536c617368656460206966207375636365737366756c2e0034232320436f6d706c65786974791c2d204f2831292e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e69040c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573550301445665633c543a3a4163636f756e7449643e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000305101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e0034232320436f6d706c657869747919014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e2061735f6d756c74691401247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573550301445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e746d0401844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687428011857656967687400019c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e0034232320436f6d706c6578697479502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e40617070726f76655f61735f6d756c74691401247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573550301445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e746d0401844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f7765696768742801185765696768740002785501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e3c63616e63656c5f61735f6d756c74691001247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573550301445665633c543a3a4163636f756e7449643e00012474696d65706f696e74f4016454696d65706f696e743c543a3a426c6f636b4e756d6265723e00012463616c6c5f686173680401205b75383b2033325d000354550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e6d0404184f7074696f6e04045401f40108104e6f6e6500000010536f6d650400f4000001000071040c1463747970651870616c6c65741043616c6c0404540001080c616464040114637479706534011c5665633c75383e00003009014372656174652061206e65772043547970652066726f6d2074686520676976656e20756e69717565204354797065206861736820616e64206173736f6369617465735069742077697468206974732063726561746f722e00dc412043547970652077697468207468652073616d652068617368206d757374206e6f742062652073746f726564206f6e20636861696e2e0054456d6974732060435479706543726561746564602e002823203c7765696768743e305765696768743a204f283129602d2052656164733a204374797065732c2042616c616e6365642d205772697465733a204374797065732c2042616c616e63652c23203c2f7765696768743e407365745f626c6f636b5f6e756d62657208012863747970655f686173683001384374797065486173684f663c543e000130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e00010ce853657420746865206372656174696f6e20626c6f636b206e756d62657220666f72206120676976656e2043547970652c20696620666f756e642e0054456d6974732060435479706555706461746564602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e75040c2c6174746573746174696f6e1870616c6c65741043616c6c0404540001180c6164640c0128636c61696d5f68617368300138436c61696d486173684f663c543e00012863747970655f686173683001384374797065486173684f663c543e000134617574686f72697a6174696f6e790401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000054644372656174652061206e6577206174746573746174696f6e2e00f85468652061747465737465722063616e206f7074696f6e616c6c792070726f766964652061207265666572656e636520746f20616e206578697374696e67090164656c65676174696f6e20746861742077696c6c20626520736176656420616c6f6e67207769746820746865206174746573746174696f6e20697473656c6620696e8c74686520666f726d206f6620616e2061747465737465642064656c65676174696f6e2e00ec546865207265666572656e6365642043547970652068617368206d75737420616c72656164792062652070726573656e74206f6e20636861696e2e000901496620616e206f7074696f6e616c2064656c65676174696f6e2069642069732070726f76696465642c20746865206469737061746368206f726967696e206d757374e8626520746865206f776e6572206f66207468652064656c65676174696f6e2e204f74686572776973652c20697420636f756c6420626520616e79546044656c65676174696f6e456e746974794964602e006c456d69747320604174746573746174696f6e43726561746564602e002823203c7765696768743e305765696768743a204f283129b82d2052656164733a205b4f726967696e204163636f756e745d2c2043747970652c204174746573746174696f6e73e42d2052656164732069662064656c65676174696f6e2069642069732070726f76696465643a2044656c65676174696f6e732c20526f6f74732c5c202044656c6567617465644174746573746174696f6e73bc2d205772697465733a204174746573746174696f6e732c202844656c6567617465644174746573746174696f6e73292c23203c2f7765696768743e187265766f6b65080128636c61696d5f68617368300138436c61696d486173684f663c543e000134617574686f72697a6174696f6e790401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0001447c5265766f6b6520616e206578697374696e67206174746573746174696f6e2e00fc546865207265766f6b6572206d75737420626520656974686572207468652063726561746f72206f6620746865206174746573746174696f6e206265696e6709017265766f6b6564206f7220616e20656e74697479207468617420696e207468652064656c65676174696f6e207472656520697320616e20616e636573746f72206f6609017468652061747465737465722c20692e652e2c2069742077617320656974686572207468652064656c656761746f72206f6620746865206174746573746572206f7250616e20616e636573746f722074686572656f662e006c456d69747320604174746573746174696f6e5265766f6b6564602e002823203c7765696768743e0d015765696768743a204f285029207768657265205020697320746865206e756d626572206f6620737465707320726571756972656420746f2076657269667920746861740901746865206469737061746368204f726967696e20636f6e74726f6c73207468652064656c65676174696f6e20656e7469746c656420746f207265766f6b6520746865c86174746573746174696f6e2e20497420697320626f756e64656420627920606d61785f706172656e745f636865636b73602ee82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2064656c65676174696f6e3a3a526f6f7473d82d205265616473207065722064656c65676174696f6e207374657020503a2064656c65676174696f6e3a3a44656c65676174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e1872656d6f7665080128636c61696d5f68617368300138436c61696d486173684f663c543e000134617574686f72697a6174696f6e790401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0002445852656d6f766520616e206174746573746174696f6e2e00f8546865206f726967696e206d75737420626520656974686572207468652063726561746f72206f6620746865206174746573746174696f6e206f7220616e0d01656e7469747920776869636820697320616e20616e636573746f72206f662074686520617474657374657220696e207468652064656c65676174696f6e20747265652c0101692e652e2c2069742077617320656974686572207468652064656c656761746f72206f6620746865206174746573746572206f7220616e20616e636573746f722074686572656f662e006c456d69747320604174746573746174696f6e52656d6f766564602e002823203c7765696768743e0d015765696768743a204f285029207768657265205020697320746865206e756d626572206f6620737465707320726571756972656420746f2076657269667920746861740901746865206469737061746368204f726967696e20636f6e74726f6c73207468652064656c65676174696f6e20656e7469746c656420746f207265766f6b6520746865c86174746573746174696f6e2e20497420697320626f756e64656420627920606d61785f706172656e745f636865636b73602ee82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2064656c65676174696f6e3a3a526f6f7473d82d205265616473207065722064656c65676174696f6e207374657020503a2064656c65676174696f6e3a3a44656c65676174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e3c7265636c61696d5f6465706f736974040128636c61696d5f68617368300138436c61696d486173684f663c543e000324d05265636c61696d20612073746f72616765206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e0064456d69747320604465706f7369745265636c61696d6564602e002823203c7765696768743e305765696768743a204f283129f82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e6572040128636c61696d5f68617368300138436c61696d486173684f663c543e00041c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00ec546865207375626a656374206f66207468652063616c6c206d757374206265207468652061747465737465722077686f206973737565732074686509016174746573746174696f6e2e205468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f736974040128636c61696d5f68617368300138436c61696d486173684f663c543e00050cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e790404184f7074696f6e040454017d040108104e6f6e6500000010536f6d6504007d0400000100007d040c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c50616c6c6574417574686f72697a65043044656c65676174696f6e416301810401042844656c65676174696f6e04008104013044656c65676174696f6e41630000000081040c2864656c65676174696f6e386163636573735f636f6e74726f6c3044656c65676174696f6e41630404540185040008013c7375626a6563745f6e6f64655f696430015444656c65676174696f6e4e6f646549644f663c543e0001286d61785f636865636b7320010c7533320000850408447370697269746e65745f72756e74696d651c52756e74696d650000000089040c2864656c65676174696f6e1870616c6c65741043616c6c04045400011c406372656174655f686965726172636879080130726f6f745f6e6f64655f696430015444656c65676174696f6e4e6f646549644f663c543e00012863747970655f686173683001384374797065486173684f663c543e00006401014372656174652061206e65772064656c65676174696f6e20726f6f74206173736f6369617465642077697468206120676976656e20435479706520686173682e00f8546865206e657720726f6f742077696c6c20616c6c6f772061206e65772074727573742068696572617263687920746f2062652063726561746564206279a0616464696e67206368696c6472656e2064656c65676174696f6e7320746f2074686520726f6f742e000d015468657265206d757374206265206e6f2064656c65676174696f6e2077697468207468652073616d652049442073746f726564206f6e20636861696e2c207768696c65fc7468657265206d75737420626520616c7265616479206120435479706520776974682074686520676976656e20686173682073746f72656420696e207468653443547970652070616c6c65742e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e000d015265717569726573207468652073656e646572206f6620746865207472616e73616374696f6e20746f206861766520612072657365727661626c652062616c616e6365886f66206174206c6561737420604465706f73697460206d616e7920746f6b656e732e0050456d6974732060526f6f7443726561746564602e002823203c7765696768743e305765696768743a204f283129a02d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c204354797065733c2d205772697465733a20526f6f74732c23203c2f7765696768743e386164645f64656c65676174696f6e14013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e000124706172656e745f696430015444656c65676174696f6e4e6f646549644f663c543e00012064656c656761746500014044656c656761746f7249644f663c543e00012c7065726d697373696f6e730d01012c5065726d697373696f6e7300014864656c65676174655f7369676e61747572658d04016844656c65676174655369676e6174757265547970654f663c543e000180744372656174652061206e65772064656c65676174696f6e206e6f64652e00f4546865206e65772064656c65676174696f6e206e6f646520726570726573656e74732061206e65772074727573742068696572617263687920746861740d01636f6e73696465727320746865206e6577206e6f64652061732069747320726f6f742e20546865206f776e6572206f662074686973206e6f6465206861732066756c6ce0636f6e74726f6c206f76657220616e79206f66206974732064697265637420616e6420696e6469726563742064657363656e64616e74732e00fc466f7220746865206372656174696f6e20746f20737563636565642c207468652064656c656761746565206d7573742070726f7669646520612076616c696411017369676e6174757265206f766572207468652028626c616b65323536292068617368206f6620746865206372656174696f6e206f7065726174696f6e2064657461696c731101776869636820696e636c7564652028696e206f72646572292064656c65676174696f6e2069642c20726f6f74206e6f64652069642c20706172656e742069642c20616e64707065726d697373696f6e73206f6620746865206e6577206e6f64652e00f45468657265206d757374206265206e6f2064656c65676174696f6e2077697468207468652073616d652069642073746f726564206f6e20636861696e2e0501467572746865726d6f72652c20746865207265666572656e63656420726f6f7420616e6420706172656e74206e6f646573206d75737420616c7265616479206265050170726573656e74206f6e20636861696e20616e6420636f6e7461696e207468652076616c6964207065726d697373696f6e7320616e64207265766f636174696f6e6c7374617475732028692e652e2c206e6f74207265766f6b6564292e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e000d015265717569726573207468652073656e646572206f6620746865207472616e73616374696f6e20746f206861766520612072657365727661626c652062616c616e6365886f66206174206c6561737420604465706f73697460206d616e7920746f6b656e732e0068456d697473206044656c65676174696f6e43726561746564602e002823203c7765696768743e305765696768743a204f283129b42d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2044656c65676174696f6e73542d205772697465733a2044656c65676174696f6e732c23203c2f7765696768743e447265766f6b655f64656c65676174696f6e0c013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001446d61785f706172656e745f636865636b7320010c75333200013c6d61785f7265766f636174696f6e7320010c753332000274f85265766f6b6520612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74206e6f64652920616e6420616c6c20697473246368696c6472656e2e00fc446f6573206e6f7420726566756e64207468652064656c65676174696f6e206261636b20746f20746865206465706f736974206f776e657220617320746865f06e6f6465206973207374696c6c2073746f726564206f6e20636861696e2e20526571756972657320746f206164646974696f6e616c6c792063616c6cb46072656d6f76655f64656c65676174696f6e6020746f20756e7265736572766520746865206465706f7369742e0009015265766f6b696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67090166726f6d2074686520676976656e206e6f6465206265696e67207265766f6b65642e204e657665727468656c6573732c207265766f636174696f6e20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f6465206973207265766f6b65642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e73696465726564207265766f6b65642e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e0078456d6974732043202a206044656c65676174696f6e5265766f6b6564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f6368696c6472656e602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e802d205772697465733a20526f6f74732c2043202a2044656c65676174696f6e732c23203c2f7765696768743e4472656d6f76655f64656c65676174696f6e08013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c7320010c753332000370f852656d6f766520612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74206e6f64652920616e6420616c6c20697473246368696c6472656e2e00f052657475726e73207468652064656c65676174696f6e206465706f73697420746f20746865206465706f736974206f776e657220666f722065616368a472656d6f7665642044656c65676174696f6e4e6f646520627920756e726573657276696e672069742e00090152656d6f76696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67fc66726f6d2074686520676976656e206e6f6465206265696e672072656d6f7665642e204e657665727468656c6573732c2072656d6f76616c20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f64652069732072656d6f7665642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e736964657265642072656d6f7665642e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e0078456d6974732043202a206044656c65676174696f6e52656d6f766564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f6368696c6472656e602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e902d205772697465733a20526f6f74732c2032202a2043202a2044656c65676174696f6e732c23203c2f7765696768743e3c7265636c61696d5f6465706f73697408013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c7320010c753332000460f45265636c61696d20746865206465706f73697420666f7220612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74b86e6f6465292c2072656d6f76696e6720746865206e6f646520616e6420616c6c20697473206368696c6472656e2e00f052657475726e73207468652064656c65676174696f6e206465706f73697420746f20746865206465706f736974206f776e657220666f722065616368a472656d6f7665642044656c65676174696f6e4e6f646520627920756e726573657276696e672069742e00090152656d6f76696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67fc66726f6d2074686520676976656e206e6f6465206265696e672072656d6f7665642e204e657665727468656c6573732c2072656d6f76616c20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f64652069732072656d6f7665642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e736964657265642072656d6f7665642e000d01546865206469737061746368206f726967696e206d757374206265207369676e6564206279207468652064656c65676174696f6e206465706f736974206f776e65722e004c604465706f7369745265636c61696d6564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f72656d6f76616c73602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e902d205772697465733a20526f6f74732c2032202a2043202a2044656c65676174696f6e732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657204013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e00051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e000501546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f66207468652064656c65676174696f6e206e6f64652ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8d040c0c6469642c6469645f64657461696c73304469645369676e617475726500010c1c45643235353139040091040148656432353531393a3a5369676e61747572650000001c53723235353139040099040148737232353531393a3a5369676e617475726500010014456364736104009d04014065636473613a3a5369676e61747572650002000091040c1c73705f636f72651c65643235353139245369676e617475726500000400950401205b75383b2036345d0000950400000340000000080099040c1c73705f636f72651c73723235353139245369676e617475726500000400950401205b75383b2036345d00009d040c1c73705f636f7265146563647361245369676e617475726500000400a10401205b75383b2036355d0000a104000003410000000800a5040c0c6469641870616c6c65741043616c6c04045400013c1863726561746508011c64657461696c73a9040170426f783c4469644372656174696f6e44657461696c734f663c543e3e0001247369676e61747572658d0401304469645369676e617475726500007cec53746f72652061206e657720444944206f6e20636861696e2c20616674657220766572696679696e67207468617420746865206372656174696f6e05016f7065726174696f6e20686173206265656e207369676e656420627920746865204b494c54206163636f756e74206173736f63696174656420776974682074686501016964656e746966696572206f662074686520444944206265696e67206372656174656420616e6420746861742061204449442077697468207468652073616d6511016964656e74696669657220686173206e6f742070726576696f75736c792065786973746564206f6e2028616e64207468656e2064656c657465642066726f6d292074686518636861696e2e000d015468657265206d757374206265206e6f2044494420696e666f726d6174696f6e2073746f726564206f6e20636861696e20756e646572207468652073616d65204449442c6964656e7469666965722e00fc546865206e6577206b65797320616464656420776974682074686973206f7065726174696f6e206172652073746f72656420756e646572207468652044494405016964656e74696669657220616c6f6e6720776974682074686520626c6f636b206e756d62657220696e20776869636820746865206f7065726174696f6e207761732465786563757465642e000101546865206469737061746368206f726967696e2063616e20626520616e79204b494c54206163636f756e74207769746820656e6f7567682066756e647320746f0d0165786563757465207468652065787472696e73696320616e6420697420646f6573206e6f74206861766520746f206265207469656420696e20616e792077617920746fb4746865204b494c54206163636f756e74206964656e74696679696e672074686520444944207375626a6563742e004c456d697473206044696443726561746564602e002823203c7765696768743e0d012d20546865207472616e73616374696f6e277320636f6d706c6578697479206973206d61696e6c7920646570656e64656e74206f6e20746865206e756d626572206f66010120206e6577206b65792061677265656d656e74206b65797320616e6420746865206e756d626572206f66206e6577207365727669636520656e64706f696e7473702020696e636c7564656420696e20746865206f7065726174696f6e2e242d2d2d2d2d2d2d2d2df85765696768743a204f284b29202b204f284e29207768657265204b20697320746865206e756d626572206f66206e6577206b65792061677265656d656e7409016b65797320626f756e64656420627920604d61784e65774b657941677265656d656e744b657973602c207768696c65204e20697320746865206e756d626572206f66f46e6577207365727669636520656e64706f696e747320626f756e64656420627920604d61784e756d6265724f665365727669636573506572446964602eb02d2052656164733a205b4f726967696e204163636f756e745d2c204469642c20446964426c61636b6c697374fc2d205772697465733a20446964202877697468204b206e6577206b65792061677265656d656e74206b657973292c2053657276696365456e64706f696e7473cc20202877697468204e206e6577207365727669636520656e64706f696e7473292c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e587365745f61757468656e7469636174696f6e5f6b657904011c6e65775f6b6579e5040148446964566572696669636174696f6e4b65790001408855706461746520746865204449442061757468656e7469636174696f6e206b65792e00ec546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696620697420697309016e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f207468654c736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e487365745f64656c65676174696f6e5f6b657904011c6e65775f6b6579e5040148446964566572696669636174696f6e4b657900024094536574206f722075706461746520746865204449442064656c65676174696f6e206b65792e000d01496620616e206f6c64206b657920657869737465642c2069742069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696611016974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f5c74686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e5472656d6f76655f64656c65676174696f6e5f6b657900033c7852656d6f766520746865204449442064656c65676174696f6e206b65792e00d4546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b657973206966b06974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e4c7365745f6174746573746174696f6e5f6b657904011c6e65775f6b6579e5040148446964566572696669636174696f6e4b657900044098536574206f72207570646174652074686520444944206174746573746174696f6e206b65792e000d01496620616e206f6c64206b657920657869737465642c2069742069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696611016974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f5c74686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e5872656d6f76655f6174746573746174696f6e5f6b657900053c7c52656d6f76652074686520444944206174746573746174696f6e206b65792e00d4546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b657973206966b06974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e546164645f6b65795f61677265656d656e745f6b657904011c6e65775f6b6579d5040140446964456e6372797074696f6e4b6579000638b841646420612073696e676c65206e6577206b65792061677265656d656e74206b657920746f20746865204449442e00bc546865206e6577206b657920697320616464656420746f2074686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e6072656d6f76655f6b65795f61677265656d656e745f6b65790401186b65795f69643001284b657949644f663c543e000734050152656d6f7665206120444944206b65792061677265656d656e74206b65792066726f6d20626f74682069747320736574206f66206b65792061677265656d656e74906b65797320616e642061732077656c6c20617320697473207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e506164645f736572766963655f656e64706f696e74040140736572766963655f656e64706f696e74b1040138446964456e64706f696e743c543e000830bc4164642061206e6577207365727669636520656e64706f696e7420756e6465722074686520676976656e204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f2831290d012d2052656164733a205b4f726967696e204163636f756e745d2c204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e74c82d205772697465733a204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e5c72656d6f76655f736572766963655f656e64706f696e74040128736572766963655f6964b504015053657276696365456e64706f696e7449643c543e000930d452656d6f76652074686520736572766963652077697468207468652070726f76696465642049442066726f6d20746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129f82d2052656164733a205b4f726967696e204163636f756e745d2c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e74c82d205772697465733a204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e1864656c65746504014c656e64706f696e74735f746f5f72656d6f766520010c753332000a600d0144656c6574652061204449442066726f6d2074686520636861696e20616e6420616c6c20696e666f726d6174696f6e206173736f63696174656420776974682069742c1101616674657220766572696679696e672074686174207468652064656c657465206f7065726174696f6e20686173206265656e207369676e65642062792074686520444944fc7375626a656374207573696e67207468652061757468656e7469636174696f6e206b65792063757272656e746c792073746f726564206f6e20636861696e2e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f7265207468657864656c657465206f7065726174696f6e206973206576616c75617465642e00f441667465722069742069732064656c657465642c2061204449442077697468207468652073616d65206964656e7469666965722063616e6e6f742062655872652d63726561746564206576657220616761696e2e00010141732074686520726573756c74206f66207468652064656c6574696f6e2c20616c6c20747261636573206f662074686520444944206172652072656d6f766564e866726f6d207468652073746f726167652c20776869636820726573756c747320696e2074686520696e76616c69646174696f6e206f6620616c6c9c6174746573746174696f6e73206973737565642062792074686520444944207375626a6563742e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696444656c65746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964cc2d204b696c6c733a2044696420656e747279206173736f63696174656420746f2074686520444944206964656e7469666965722c23203c2f7765696768743e3c7265636c61696d5f6465706f73697408012c6469645f7375626a6563740001484469644964656e7469666965724f663c543e00014c656e64706f696e74735f746f5f72656d6f766520010c753332000b54f45265636c61696d2061206465706f73697420666f722061204449442e20546869732077696c6c2064656c657465207468652044494420616e6420616c6c0901696e666f726d6174696f6e206173736f63696174656420776974682069742c20616674657220766572696679696e672074686174207468652063616c6c657220697364746865206f776e6572206f6620746865206465706f7369742e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f7265207468657864656c657465206f7065726174696f6e206973206576616c75617465642e00f441667465722069742069732064656c657465642c2061204449442077697468207468652073616d65206964656e7469666965722063616e6e6f742062655872652d63726561746564206576657220616761696e2e00010141732074686520726573756c74206f66207468652064656c6574696f6e2c20616c6c20747261636573206f662074686520444944206172652072656d6f766564e866726f6d207468652073746f726167652c20776869636820726573756c747320696e2074686520696e76616c69646174696f6e206f6620616c6c9c6174746573746174696f6e73206973737565642062792074686520444944207375626a6563742e004c456d697473206044696444656c65746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964cc2d204b696c6c733a2044696420656e747279206173736f63696174656420746f2074686520444944206964656e7469666965722c23203c2f7765696768743e3c7375626d69745f6469645f63616c6c0801206469645f63616c6cf9040190426f783c446964417574686f72697a656443616c6c4f7065726174696f6e4f663c543e3e0001247369676e61747572658d0401304469645369676e6174757265000c8cec50726f7879206120646973706174636861626c652063616c6c206f6620616e6f746865722072756e74696d652065787472696e736963207468617458737570706f727473206120444944206f726967696e2e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f726520746865606f7065726174696f6e20697320646973706174636865642e00fc412063616c6c207375626d6974746564207468726f75676820746869732065787472696e736963206d757374206265207369676e65642077697468207468650901726967687420444944206b65792c20646570656e64696e67206f6e207468652063616c6c2e205468697320696e666f726d6174696f6e2069732070726f766964656409016279207468652060446964417574686f72697a656443616c6c4f7065726174696f6e6020706172616d657465722c20776869636820737065636966696573207468650901444944207375626a65637420616374696e6720617320746865206f726967696e206f66207468652063616c6c2c2074686520444944277320747820636f756e7465720101286e6f6e6365292c2074686520646973706174636861626c6520746f2063616c6c20696e2063617365207369676e617475726520766572696669636174696f6ef073756363656564732c207468652074797065206f6620444944206b657920746f2075736520746f2076657269667920746865206f7065726174696f6efc7369676e61747572652c20616e642074686520626c6f636b206e756d62657220746865206f7065726174696f6e2077617320746172676574696e6720666f72a8696e636c7573696f6e2c207768656e20697420776173206372656174656420616e64207369676e65642e00fc496e206361736520746865207369676e617475726520697320696e636f72726563742c20746865206e6f6e6365206973206e6f742076616c69642c20746865fc7265717569726564206b6579206973206e6f742070726573656e7420666f722074686520737065636966696564204449442c206f722074686520626c6f636bfc73706563696669656420697320746f6f206f6c642074686520766572696669636174696f6e206661696c7320616e64207468652063616c6c206973206e6f74f4646973706174636865642e204f74686572776973652c207468652063616c6c2069732070726f7065726c79206469737061746368656420776974682061b8604469644f726967696e60206f726967696e20696e6469636174696e672074686520444944207375626a6563742e00110141207375636365737366756c206469737061746368206f7065726174696f6e20726573756c747320696e2074686520747820636f756e746572206173736f6369617465640501776974682074686520676976656e2044494420746f20626520696e6372656d656e7465642c20746f206d69746967617465207265706c61792061747461636b732e000101546865206469737061746368206f726967696e2063616e20626520616e79204b494c54206163636f756e74207769746820656e6f7567682066756e647320746f0d0165786563757465207468652065787472696e73696320616e6420697420646f6573206e6f74206861766520746f206265207469656420696e20616e792077617920746fb4746865204b494c54206163636f756e74206964656e74696679696e672074686520444944207375626a6563742e0068456d697473206044696443616c6c44697370617463686564602e002823203c7765696768743eb05765696768743a204f283129202b20776569676874206f662074686520646973706174636865642063616c6c782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e6572000d1c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00b8546865207375626a656374206f66207468652063616c6c206d7573742062652074686520646964206f776e65722ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404010c6469640001484469644964656e7469666965724f663c543e000e0cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea9040c0c6469642c6469645f64657461696c73484469644372656174696f6e44657461696c7310344469644964656e7469666965720100244163636f756e7449640100584d61784e65774b657941677265656d656e744b65797301ad042c446964456e64706f696e7401b1040018010c6469640001344469644964656e7469666965720001247375626d69747465720001244163636f756e7449640001586e65775f6b65795f61677265656d656e745f6b657973d10401c04469644e65774b657941677265656d656e744b65795365743c4d61784e65774b657941677265656d656e744b6579733e00014c6e65775f6174746573746174696f6e5f6b6579e10401684f7074696f6e3c446964566572696669636174696f6e4b65793e0001486e65775f64656c65676174696f6e5f6b6579e10401684f7074696f6e3c446964566572696669636174696f6e4b65793e00014c6e65775f736572766963655f64657461696c73f50401405665633c446964456e64706f696e743e0000ad04103872756e74696d655f636f6d6d6f6e24636f6e7374616e74730c646964584d61784e65774b657941677265656d656e744b65797300000000b1040c0c64696444736572766963655f656e64706f696e74732c446964456e64706f696e7404045400000c01086964b504015053657276696365456e64706f696e7449643c543e000134736572766963655f7479706573b904017453657276696365456e64706f696e7454797065456e74726965733c543e00011075726c73c504017053657276696365456e64706f696e7455726c456e74726965733c543e0000b5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000b9040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401bd04045300000400c10401185665633c543e0000bd040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000c104000002bd0400c5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c904045300000400cd0401185665633c543e0000c9040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000cd04000002c90400d1040c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401d504045300000400d904012c42547265655365743c543e0000d5040c0c6469642c6469645f64657461696c7340446964456e6372797074696f6e4b65790001041858323535313904000401205b75383b2033325d00000000d9040420425472656553657404045401d504000400dd04000000dd04000002d50400e10404184f7074696f6e04045401e5040108104e6f6e6500000010536f6d650400e5040000010000e5040c0c6469642c6469645f64657461696c7348446964566572696669636174696f6e4b657900010c1c456432353531390400e904013c656432353531393a3a5075626c69630000001c5372323535313904006d03013c737232353531393a3a5075626c69630001001445636473610400ed04013465636473613a3a5075626c696300020000e9040c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000ed040c1c73705f636f7265146563647361185075626c696300000400f10401205b75383b2033335d0000f104000003210000000800f504000002b10400f9040c0c6469642c6469645f64657461696c7368446964417574686f72697a656443616c6c4f7065726174696f6e14344469644964656e74696669657201002c44696443616c6c61626c6501f5032c426c6f636b4e756d6265720110244163636f756e7449640100245478436f756e74657201100014010c6469640001344469644964656e74696669657200012874785f636f756e7465721001245478436f756e74657200011063616c6cf503012c44696443616c6c61626c65000130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720001247375626d69747465720001244163636f756e7449640000fd040c4470616c6c65745f6469645f6c6f6f6b75701870616c6c65741043616c6c04045400011c446173736f63696174655f6163636f756e7408010c7265710105015c4173736f63696174654163636f756e745265717565737400012865787069726174696f6e1001a03c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a426c6f636b4e756d62657200004405014173736f63696174652074686520676976656e206163636f756e7420746f2074686520444944207468617420617574686f72697a656420746869732063616c6c2e000501546865206163636f756e742068617320746f207369676e207468652044494420616e64206120626c6f636b6e756d62657220616674657220776869636820746865e07369676e6174757265206578706972657320696e206f7264657220746f20617574686f72697a6520746865206173736f63696174696f6e2e001101546865207369676e61747572652077696c6c20626520636865636b656420616761696e737420746865207363616c6520656e636f646564207475706c65206f66207468650d016d6574686f64207370656369666963206964206f662074686520646964206964656e74696669657220616e642074686520626c6f636b206e756d626572206166746572bc776869636820746865207369676e61747572652073686f756c6420626520726567617264656420696e76616c69642e001101456d69747320604173736f63696174696f6e45737461626c69736865646020616e642c206f7074696f6e616c6c792c20604173736f63696174696f6e52656d6f76656460d069662074686572652077617320612070726576696f7573206173736f63696174696f6e20666f7220746865206163636f756e742e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e406173736f63696174655f73656e64657200012c01014173736f6369617465207468652073656e646572206f66207468652063616c6c20746f2074686520444944207468617420617574686f72697a656420746869731463616c6c2e001101456d69747320604173736f63696174696f6e45737461626c69736865646020616e642c206f7074696f6e616c6c792c20604173736f63696174696f6e52656d6f76656460d069662074686572652077617320612070726576696f7573206173736f63696174696f6e20666f7220746865206163636f756e742e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e6472656d6f76655f73656e6465725f6173736f63696174696f6e000228fc52656d6f766520746865206173736f63696174696f6e206f66207468652073656e646572206163636f756e742e20546869732063616c6c20646f65736e27740d01726571756972652074686520617574686f72697a6174696f6e206f6620746865204449442c206275742072657175697265732061207369676e6564206f726967696e2e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e6872656d6f76655f6163636f756e745f6173736f63696174696f6e04011c6163636f756e74190101444c696e6b61626c654163636f756e74496400032c110152656d6f766520746865206173736f63696174696f6e206f66207468652070726f7669646564206163636f756e742049442e20546869732063616c6c20646f65736e27740d01726571756972652074686520617574686f72697a6174696f6e206f6620746865206163636f756e742049442c2062757420746865206173736f63696174656420444944c46e6565647320746f206d617463682074686520444944207468617420617574686f72697a656420746869732063616c6c2e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e3c7265636c61696d5f6465706f73697404011c6163636f756e74190101444c696e6b61626c654163636f756e74496400042c090152656d6f766520746865206173736f63696174696f6e206f66207468652070726f7669646564206163636f756e742e20546869732063616c6c2063616e206f6e6c79f862652063616c6c65642066726f6d20746865206465706f736974206f776e65722e20546865207265736572766564206465706f7369742077696c6c2062651866726565642e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129582d2052656164733a20436f6e6e6563746564446964735c2d205772697465733a20436f6e6e6563746564446964732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657204011c6163636f756e74190101444c696e6b61626c654163636f756e74496400051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00d8546865207375626a656374206f66207468652063616c6c206d757374206265206c696e6b656420746f20746865206163636f756e742ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404011c6163636f756e74190101444c696e6b61626c654163636f756e74496400060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e01050c4470616c6c65745f6469645f6c6f6f6b7570646173736f63696174655f6163636f756e745f726571756573745c4173736f63696174654163636f756e745265717565737400010820506f6c6b61646f74080000012c4163636f756e74496433320000050501384d756c74695369676e617475726500000020457468657265756d08001d01012c4163636f756e7449643230000009050144457468657265756d5369676e6174757265000100000505082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040091040148656432353531393a3a5369676e61747572650000001c53723235353139040099040148737232353531393a3a5369676e617475726500010014456364736104009d04014065636473613a3a5369676e61747572650002000009050c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e7444457468657265756d5369676e6174757265000004009d04014065636473613a3a5369676e617475726500000d050c4470616c6c65745f776562335f6e616d65731870616c6c65741043616c6c04045400011c14636c61696d0401106e616d652d010140576562334e616d65496e7075743c543e00003ce841737369676e2074686520737065636966696564206e616d6520746f20746865206f776e65722061732073706563696669656420696e207468651c6f726967696e2e000d01546865206e616d65206d757374206e6f74206861766520616c7265616479206265656e20636c61696d656420627920736f6d656f6e6520656c736520616e6420746865a06f776e6572206d757374206e6f7420616c7265616479206f776e20616e6f74686572206e616d652e00dc456d6974732060576562334e616d65436c61696d65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f28312909012d2052656164733a204e616d65732c204f776e65722c2042616e6e65642073746f7261676520656e7472696573202b20617661696c61626c652063757272656e6379582020636865636b202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f73697420726573657276652c23203c2f7765696768743e4072656c656173655f62795f6f776e6572000130a452656c65617365207468652070726f7669646564206e616d652066726f6d20697473206f776e65722e00cc546865206f726967696e206d75737420626520746865206f776e6572206f662074686520737065636966696564206e616d652e00e0456d6974732060576562334e616d6552656c65617365646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129ac2d2052656164733a204e616d65732073746f7261676520656e747279202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f7369742072656c656173652c23203c2f7765696768743e3c7265636c61696d5f6465706f7369740401106e616d652d010140576562334e616d65496e7075743c543e000230a452656c65617365207468652070726f7669646564206e616d652066726f6d20697473206f776e65722e000101546865206f726967696e206d75737420626520746865206163636f756e742074686174207061696420666f7220746865206e616d652773206465706f7369742e00e0456d6974732060576562334e616d6552656c65617365646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129ac2d2052656164733a204f776e65722073746f7261676520656e747279202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f7369742072656c656173652c23203c2f7765696768743e0c62616e0401106e616d652d010140576562334e616d65496e7075743c543e0003402c42616e2061206e616d652e00f4412062616e6e6564206e616d652063616e6e6f7420626520636c61696d656420627920616e796f6e652e20546865206e616d652773206465706f7369748869732072657475726e656420746f20746865206f726967696e616c2070617965722e0088546865206f726967696e206d757374206265207468652062616e206f726967696e2e00d8456d6974732060576562334e616d6542616e6e65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129f02d2052656164733a2042616e6e65642c204f776e65722c204e616d65732073746f7261676520656e7472696573202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722c2042616e6e65642073746f7261676520656e7472696573202b2063757272656e6379206465706f73697424202072656c656173652c23203c2f7765696768743e14756e62616e0401106e616d652d010140576562334e616d65496e7075743c543e00043834556e62616e2061206e616d652e00704d616b652061206e616d6520636c61696d61626c6520616761696e2e0088546865206f726967696e206d757374206265207468652062616e206f726967696e2e00e0456d6974732060576562334e616d65556e62616e6e65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129b02d2052656164733a2042616e6e65642073746f7261676520656e747279202b206f726967696e20636865636bb82d205772697465733a2042616e6e65642073746f7261676520656e747279206465706f7369742072656c656173652c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657200051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00e8546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f662074686520776562336e616d652ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f7369740401286e616d655f696e7075742d010140576562334e616d65496e7075743c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e11050c487075626c69635f63726564656e7469616c731870616c6c65741043616c6c04045400011c0c61646404012863726564656e7469616c15050164426f783c496e70757443726564656e7469616c4f663c543e3e000018a852656769737465722061206e6577207075626c69632063726564656e7469616c206f6e20636861696e2e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c2077697468207468652073616d65206964656e74696669657220616c72656164798465786973747320666f722074686520737065636966696564207375626a6563742e0064456d697473206043726564656e7469616c53746f726564602e187265766f6b6508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e790401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000120705265766f6b65732061207075626c69632063726564656e7469616c2e001101496620612063726564656e7469616c2077617320616c7265616479207265766f6b65642c20746869732066756e6374696f6e20646f6573206e6f74206661696c206275746473696d706c7920726573756c747320696e2061206e6f6f702e000101546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f207265766f6b65207468652063726564656e7469616c2e0068456d697473206043726564656e7469616c5265766f6b6564602e20756e7265766f6b6508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e790401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e00022478556e7265766f6b65732061207075626c69632063726564656e7469616c2e000101496620612063726564656e7469616c20776173206e6f74207265766f6b65642c20746869732066756e6374696f6e20646f6573206e6f74206661696c206275746473696d706c7920726573756c747320696e2061206e6f6f702e00d8546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f20756e7265766f6b65207468652c63726564656e7469616c2e0070456d697473206043726564656e7469616c556e7265766f6b6564602e1872656d6f766508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e790401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000344fc52656d6f7665732074686520696e666f726d6174696f6e207065727461696e696e672061207075626c69632063726564656e7469616c2066726f6d2074686518636861696e2e0009015468652072656d6f76616c206f66207468652063726564656e7469616c20646f6573206e6f742064656c65746520697420656e746972656c792066726f6d207468650501626c6f636b636861696e20686973746f72792c20627574206f6e6c7920697473206c696e6b202a66726f6d2a2074686520626c6f636b636861696e2073746174659c2a746f2a2074686520626c6f636b636861696e20686973746f72792069732072656d6f7665642e00cc436c69656e74732070617273696e67207075626c69632063726564656e7469616c732073686f756c6420696e746572707265740101746865206c61636b206f6620737563682061206c696e6b2061732074686520666163742074686174207468652063726564656e7469616c20686173206265656eb872656d6f7665642062792069747320617474657374657220736f6d652074696d6520696e2074686520706173742e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c20616c72656164792065786973747320666f722074686520737065636966696564207375626a6563742e000101546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f2072656d6f7665207468652063726564656e7469616c2e0068456d697473206043726564656e7469616c52656d6f766564602e3c7265636c61696d5f6465706f73697404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000448fc52656d6f7665732074686520696e666f726d6174696f6e207065727461696e696e672061207075626c69632063726564656e7469616c2066726f6d20746865ac636861696e20616e642072657475726e7320746865206465706f73697420746f206974732070617965722e0009015468652072656d6f76616c206f66207468652063726564656e7469616c20646f6573206e6f742064656c65746520697420656e746972656c792066726f6d207468650501626c6f636b636861696e20686973746f72792c20627574206f6e6c7920697473206c696e6b202a66726f6d2a2074686520626c6f636b636861696e2073746174659c2a746f2a2074686520626c6f636b636861696e20686973746f72792069732072656d6f7665642e00cc436c69656e74732070617273696e67207075626c69632063726564656e7469616c732073686f756c6420696e746572707265740101746865206c61636b206f6620737563682061206c696e6b2061732074686520666163742074686174207468652063726564656e7469616c20686173206265656eb872656d6f7665642062792069747320617474657374657220736f6d652074696d6520696e2074686520706173742e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c20616c72656164792065786973747320666f722074686520737065636966696564207375626a6563742e000d01546865206469737061746368206f726967696e206d75737420626520746865206f776e6572206f6620746865206465706f7369742c2068656e6365206e6f74207468655863726564656e7469616c27732061747465737465722e0068456d697473206043726564656e7469616c52656d6f766564602e506368616e67655f6465706f7369745f6f776e657204013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e00051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00f0546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f66207468652063726564656e7469616c2ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e15050c487075626c69635f63726564656e7469616c732c63726564656e7469616c732843726564656e7469616c10244374797065486173680130445375626a6563744964656e74696669657201190518436c61696d73011d0534416363657373436f6e74726f6c017d040010012863747970655f6861736830012443747970654861736800011c7375626a656374190501445375626a6563744964656e746966696572000118636c61696d731d050118436c61696d73000134617574686f72697a6174696f6e790401544f7074696f6e3c416363657373436f6e74726f6c3e000019050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00001d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000021050c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f64617461040110646174612505015450617261636861696e496e686572656e744461746100002480536574207468652063757272656e742076616c69646174696f6e20646174612e004101546869732073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e887068617365206966207468652063616c6c20776173206e6f7420696e766f6b65642e00d0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e7460002101417320612073696465206566666563742c20746869732066756e6374696f6e207570677261646573207468652063757272656e742076616c69646174696f6e2066756e6374696f6e8469662074686520617070726f7072696174652074696d652068617320636f6d652e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653401345570776172644d65737361676500010044617574686f72697a655f75706772616465080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6eac0110626f6f6c0002206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015468652060636865636b5f76657273696f6e6020706172616d657465722073657473206120626f6f6c65616e20666c616720666f722077686574686572206f72206e6f74207468652072756e74696d6527732073706563610176657273696f6e20616e64206e616d652073686f756c64206265207665726966696564206f6e20757067726164652e2053696e63652074686520617574686f72697a6174696f6e206f6e6c7920686173206120686173682cb069742063616e6e6f742061637475616c6c7920706572666f726d2074686520766572696669636174696f6e2e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e60656e6163745f617574686f72697a65645f75706772616465040110636f646534011c5665633c75383e000324550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005d014e6f7465207468617420746869732066756e6374696f6e2077696c6c206e6f74206170706c7920746865206e65772060636f6465602c20627574206f6e6c7920617474656d707420746f207363686564756c652074686574757067726164652077697468207468652052656c617920436861696e2e0060416c6c206f726967696e732061726520616c6c6f7765642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2505089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f646174612905015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f73746174653105015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d657373616765733905016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573410501a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e000029050c4c706f6c6b61646f745f7072696d6974697665730876345c50657273697374656456616c69646174696f6e446174610804480130044e01200010012c706172656e745f686561642d050120486561644461746100014c72656c61795f706172656e745f6e756d6265722001044e00016472656c61795f706172656e745f73746f726167655f726f6f74300104480001306d61785f706f765f73697a6520010c75333200002d050c48706f6c6b61646f745f70617261636861696e287072696d6974697665732048656164446174610000040034011c5665633c75383e000031050c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f6465733505014442547265655365743c5665633c75383e3e00003505042042547265655365740404540134000400ad0200000039050000023d05003d050860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d62657201200008011c73656e745f617420012c426c6f636b4e756d62657200010c6d736734013c446f776e776172644d65737361676500004105042042547265654d617008044b01ad0104560145050004004d05000000450500000249050049050860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d62657201200008011c73656e745f617420012c426c6f636b4e756d6265720001106461746134015073705f7374643a3a7665633a3a5665633c75383e00004d05000002510500510500000408ad0145050055050c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c04045400012448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d697428011857656967687400003484536572766963657320612073696e676c65206f7665727765696768742058434d2e00c02d20606f726967696e603a204d75737420706173732060457865637574654f7665727765696768744f726967696e602ed42d2060696e646578603a2054686520696e646578206f6620746865206f7665727765696768742058434d20746f20736572766963650d012d20607765696768745f6c696d6974603a2054686520616d6f756e74206f662077656967687420746861742058434d20657865637574696f6e206d61792074616b652e001c4572726f72733a5d012d20604261644f766572776569676874496e646578603a2058434d20756e6465722060696e64657860206973206e6f7420666f756e6420696e2074686520604f766572776569676874602073746f72616765206d61702e45012d206042616458636d603a2058434d20756e6465722060696e646578602063616e6e6f742062652070726f7065726c79206465636f64656420696e746f20612076616c69642058434d20666f726d61742e09012d20605765696768744f7665724c696d6974603a2058434d20657865637574696f6e206d617920757365206772656174657220607765696768745f6c696d6974602e001c4576656e74733a8c2d20604f7665727765696768745365727669636564603a204f6e20737563636573732e5473757370656e645f78636d5f657865637574696f6e00010c490153757370656e647320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652c207265676172646c657373206f66207468652073656e6465722773206f726967696e2e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e50726573756d655f78636d5f657865637574696f6e000214b8526573756d657320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652e003d014e6f7465207468617420746869732066756e6374696f6e20646f65736e2774206368616e67652074686520737461747573206f662074686520696e2f6f757420626f756e64206368616e6e656c732e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e607570646174655f73757370656e645f7468726573686f6c6404010c6e657720010c75333200031499014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e2074686520717565756520666f7220746865206f74686572207369646520746f20626520746f6c6420746f5873757370656e642074686569722073656e64696e672e00742d20606f726967696e603a204d75737420706173732060526f6f74602ee82d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e73757370656e645f76616c756560547570646174655f64726f705f7468726573686f6c6404010c6e657720010c75333200041495014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e207468652071756575652061667465722077686963682077652064726f7020616e792066757274686572686d657373616765732066726f6d20746865206368616e6e656c2e00742d20606f726967696e603a204d75737420706173732060526f6f74602eec2d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e64726f705f7468726573686f6c64605c7570646174655f726573756d655f7468726573686f6c6404010c6e657720010c75333200051491014f76657277726974657320746865206e756d626572206f66207061676573206f66206d6573736167657320776869636820746865207175657565206d757374206265207265647563656420746f206265666f7265206974207369676e616c732074686174ec6d6573736167652073656e64696e67206d6179207265636f6d6d656e636520616674657220697420686173206265656e2073757370656e6465642e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e726573756d655f7468726573686f6c64605c7570646174655f7468726573686f6c645f77656967687404010c6e657728011857656967687400061049014f7665727772697465732074686520616d6f756e74206f662072656d61696e696e672077656967687420756e6465722077686963682077652073746f702070726f63657373696e67206d657373616765732e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7468726573686f6c645f77656967687460707570646174655f7765696768745f72657374726963745f646563617904010c6e657728011857656967687400071445014f7665727772697465732074686520737065656420746f2077686963682074686520617661696c61626c652077656967687420617070726f616368657320746865206d6178696d756d207765696768742ea50141206c6f776572206e756d62657220726573756c747320696e2061206661737465722070726f6772657373696f6e2e20412076616c7565206f662031206d616b65732074686520656e746972652077656967687420617661696c61626c6520696e697469616c6c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e0d012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7765696768745f72657374726963745f6465636179602e847570646174655f78636d705f6d61785f696e646976696475616c5f77656967687404010c6e657728011857656967687400081429014f766572777269746520746865206d6178696d756d20616d6f756e74206f662077656967687420616e7920696e646976696475616c206d657373616765206d617920636f6e73756d652e71014d657373616765732061626f766520746869732077656967687420676f20696e746f20746865206f76657277656967687420717565756520616e64206d6179206f6e6c79206265207365727669636564206578706c696369746c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e21012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e78636d705f6d61785f696e646976696475616c5f776569676874602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e59050c2870616c6c65745f78636d1870616c6c65741043616c6c04045400012c1073656e64080110646573748102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011c6d6573736167655d050154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f617373657473100110646573748102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172798102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747349020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c75333200013c110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f617373657473100110646573748102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172798102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747349020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c7533320002404d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d6573736167658d0501c0426f783c56657273696f6e656458636d3c3c5420617320537973436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f77656967687428011857656967687400032cd04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e006d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e2074686559016d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f20657865637574696f6e54617474656d70742077696c6c206265206d6164652e006d014e4f54453a2041207375636365737366756c2072657475726e20746f207468697320646f6573202a6e6f742a20696d706c7920746861742074686520606d73676020776173206578656375746564207375636365737366756c6c79cc746f20636f6d706c6574696f6e3b206f6e6c792074686174202a736f6d652a206f66206974207761732065786563757465642e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6eb9010148426f783c4d756c74694c6f636174696f6e3e00012c78636d5f76657273696f6e20012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6e010401484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e8102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e8102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f617373657473140110646573748102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172798102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747349020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c7533320001307765696768745f6c696d69744502012c5765696768744c696d69740008484d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f617373657473140110646573748102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172798102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747349020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c7533320001307765696768745f6c696d69744502012c5765696768744c696d6974000944110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e40666f7263655f73757370656e73696f6e04012473757370656e646564ac0110626f6f6c000a10f4536574206f7220756e7365742074686520676c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed02d206073757370656e646564603a2060747275656020746f2073757370656e642c206066616c73656020746f20726573756d652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e5d05080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204006105015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400dd01015076333a3a58636d3c52756e74696d6543616c6c3e0003000061050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400650501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000650500000269050069050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404004d02012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404004d02012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404004d02012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e73656d050120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574734d02012c4d756c746941737365747300012c62656e65666963696172795d0201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574734d02012c4d756c7469417373657473000110646573745d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f747970652d0201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c31020168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c501010c7533320001406d61785f6d6573736167655f73697a65c501010c7533320001306d61785f6361706163697479c501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c501010c75333200011873656e646572c501010c753332000124726563697069656e74c501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040061020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c51756572794964000110646573745d0201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c01186173736574737d0501404d756c7469417373657446696c7465720001286d61785f617373657473c501010c75333200012c62656e65666963696172795d0201344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365741001186173736574737d0501404d756c7469417373657446696c7465720001286d61785f617373657473c501010c753332000110646573745d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e000e003445786368616e67654173736574080110676976657d0501404d756c7469417373657446696c74657200011c726563656976654d02012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c01186173736574737d0501404d756c7469417373657446696c74657200011c726573657276655d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574737d0501404d756c7469417373657446696c746572000110646573745d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c51756572794964000110646573745d0201344d756c74694c6f636174696f6e0001186173736574737d0501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573550201284d756c746941737365740001307765696768745f6c696d69748905012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204006105014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804006105014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574734d02012c4d756c74694173736574730001187469636b65745d0201344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b00006d050c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304004d02012c4d756c74694173736574730001003c457865637574696f6e526573756c740400710501504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040020013873757065723a3a56657273696f6e00030000710504184f7074696f6e0404540175050108104e6f6e6500000010536f6d65040075050000010000750500000408207905007905100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404001001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c65001900007d05100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504004d02012c4d756c74694173736574730000001057696c6404008105013857696c644d756c74694173736574000100008105100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869645902011c4173736574496400010c66756e8505013c57696c6446756e676962696c697479000100008505100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000089050c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d6974656404002c010c753634000100008d05080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204009105015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400a105015076333a3a58636d3c52756e74696d6543616c6c3e0003000091050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400950501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000950500000299050099050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404004d02012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404004d02012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404004d02012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e73656d050120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574734d02012c4d756c746941737365747300012c62656e65666963696172795d0201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574734d02012c4d756c7469417373657473000110646573745d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f747970652d0201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c9d050168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c501010c7533320001406d61785f6d6573736167655f73697a65c501010c7533320001306d61785f6361706163697479c501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c501010c75333200011873656e646572c501010c753332000124726563697069656e74c501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040061020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c51756572794964000110646573745d0201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c01186173736574737d0501404d756c7469417373657446696c7465720001286d61785f617373657473c501010c75333200012c62656e65666963696172795d0201344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365741001186173736574737d0501404d756c7469417373657446696c7465720001286d61785f617373657473c501010c753332000110646573745d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e000e003445786368616e67654173736574080110676976657d0501404d756c7469417373657446696c74657200011c726563656976654d02012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c01186173736574737d0501404d756c7469417373657446696c74657200011c726573657276655d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574737d0501404d756c7469417373657446696c746572000110646573745d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c51756572794964000110646573745d0201344d756c74694c6f636174696f6e0001186173736574737d0501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573550201284d756c746941737365740001307765696768745f6c696d69748905012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204009105014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804009105014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574734d02012c4d756c74694173736574730001187469636b65745d0201344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b00009d050c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656434011c5665633c75383e0000a1050c0c78636d0876330c58636d041043616c6c00000400a50501585665633c496e737472756374696f6e3c43616c6c3e3e0000a505000002a90500a9050c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400e901012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400e901012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400e901012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736505020120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572290201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473e901012c4d756c746941737365747300012c62656e6566696369617279b90101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473e901012c4d756c746941737365747300011064657374b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e642d0201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c9d05014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c501010c7533320001406d61785f6d6573736167655f73697a65c501010c7533320001306d61785f6361706163697479c501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c501010c75333200011873656e646572c501010c753332000124726563697069656e74c501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400bd010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400350201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473390201404d756c7469417373657446696c74657200012c62656e6566696369617279b90101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473390201404d756c7469417373657446696c74657200011064657374b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e000e003445786368616e676541737365740c011067697665390201404d756c7469417373657446696c74657200011077616e74e901012c4d756c746941737365747300011c6d6178696d616cac0110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473390201404d756c7469417373657446696c74657200011c72657365727665b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473390201404d756c7469417373657446696c74657200011064657374b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f350201445175657279526573706f6e7365496e666f000118617373657473390201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573f10101284d756c746941737365740001307765696768745f6c696d69744502012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400a105012458636d3c43616c6c3e0015002c536574417070656e6469780400a105012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473e901012c4d756c74694173736574730001187469636b6574b90101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400e901012c4d756c7469417373657473001c002c45787065637441737365740400e901012c4d756c7469417373657473001d00304578706563744f726967696e0400290201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400090201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400210201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6534011c5665633c75383e000134726573706f6e73655f696e666f350201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578c501010c7533320001106e616d6534011c5665633c75383e00012c6d6f64756c655f6e616d6534011c5665633c75383e00012c63726174655f6d616a6f72c501010c75333200013c6d696e5f63726174655f6d696e6f72c501010c753332002200505265706f72745472616e736163745374617475730400350201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400c10101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bcd0101244e6574776f726b496400012c64657374696e6174696f6ebd010154496e746572696f724d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e002600244c6f636b41737365740801146173736574f10101284d756c74694173736574000120756e6c6f636b6572b90101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574f10101284d756c74694173736574000118746172676574b90101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574f10101284d756c746941737365740001146f776e6572b90101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574f10101284d756c746941737365740001186c6f636b6572b90101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177ac0110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400b90101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69744502012c5765696768744c696d6974000130636865636b5f6f726967696e290201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000ad050c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c65741043616c6c04045400010448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d6974280118576569676874000004905365727669636520612073696e676c65206f766572776569676874206d6573736167652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb105000002ed0300b50500000408b9051800b9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400550301185665633c543e0000bd050c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d62657201102050726f706f73616c01f1031c42616c616e6365011801081c4f6e676f696e670400c10501c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564ac0110626f6f6c00010c656e6410012c426c6f636b4e756d62657200010000c1050c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d62657201102050726f706f73616c01f1031c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200012070726f706f73616cf103012050726f706f73616c0001247468726573686f6c64980134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c79c505013854616c6c793c42616c616e63653e0000c5050c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e63650000c9050c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f746573000108184469726563740c0114766f746573cd0501f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e73d905015044656c65676174696f6e733c42616c616e63653e0001147072696f72dd05017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6efd030128436f6e76696374696f6e00012c64656c65676174696f6e73d905015044656c65676174696f6e733c42616c616e63653e0001147072696f72dd05017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e00010000cd050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d105045300000400d50501185665633c543e0000d10500000408209c00d505000002d10500d9050c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e63650000dd050c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e63650000e10500000408f1039800e5050000040810b90500e9050c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f720404540001602056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7740507265696d6167654e6f7445786973740017047054686520707265696d61676520646f6573206e6f742065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909ed050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400910201185665633c543e0000f105084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e64657820013450726f706f73616c496e6465780001247468726573686f6c6420012c4d656d626572436f756e7400011061796573550301385665633c4163636f756e7449643e0001106e617973550301385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d6265720000f5050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909f9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400910201185665633c543e0000fd050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090901060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400550301185665633c543e000005060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909090906083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e636500000d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540120045300000400850301185665633c543e000011060c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040020010c7533320000150604184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000190608346672616d655f737570706f72742050616c6c65744964000004000102011c5b75383b20385d00001d060c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900011470496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e04784572726f7220666f72207468652074726561737572792070616c6c65742e21060c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090925060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014904045300000400290601185665633c543e000029060000024904002d06083870616c6c65745f76657374696e672052656c65617365730001080856300000000856310001000031060c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742e35060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454013906045300000400410601185665633c543e0000390604184f7074696f6e040454013d060108104e6f6e6500000010536f6d6504003d0600000100003d06084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c01f1032c426c6f636b4e756d62657201103450616c6c6574734f726967696e012504244163636f756e7449640100001401206d617962655f6964d401304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf103011043616c6c0001386d617962655f706572696f646963510401944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e2504013450616c6c6574734f726967696e0000410600000239060045060c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909094906000004084d0618004d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015106045300000400550601185665633c543e00005106083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501dc2c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065dc012450726f78795479706500011464656c617910012c426c6f636b4e756d626572000055060000025106005906000004085d0618005d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016106045300000400650601185665633c543e00006106083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801302c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173683001104861736800011868656967687410012c426c6f636b4e756d6265720000650600000261060069060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909096d06083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f73697471060150284163636f756e7449642c2042616c616e63652900010c6c656e20010c753332000000245265717565737465640c011c6465706f736974750601704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7420010c75333200010c6c656e0104012c4f7074696f6e3c7533323e00010000710600000408001800750604184f7074696f6e0404540171060108104e6f6e6500000010536f6d650400710600000100007906000004083020007d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000081060c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090985060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400550301185665633c543e000089060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909098d06082c70616c6c65745f746970731c4f70656e54697010244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572011010486173680130001c0118726561736f6e3001104861736800010c77686f0001244163636f756e74496400011866696e6465720001244163636f756e74496400011c6465706f73697418011c42616c616e6365000118636c6f7365739106014c4f7074696f6e3c426c6f636b4e756d6265723e00011074697073950601645665633c284163636f756e7449642c2042616c616e6365293e00012c66696e646572735f666565ac0110626f6f6c0000910604184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000950600000271060099060c3473705f61726974686d65746963287065725f7468696e67731c50657263656e7400000400080108753800009d060c2c70616c6c65745f746970731870616c6c6574144572726f7208045400044900011830526561736f6e546f6f4269670000048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e30416c72656164794b6e6f776e00010488546865207469702077617320616c726561647920666f756e642f737461727465642e28556e6b6e6f776e5469700002046054686520746970206861736820697320756e6b6e6f776e2e244e6f7446696e6465720003041d01546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e245374696c6c4f70656e0004042901546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e245072656d61747572650005043101546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a10600000408000400a506083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656ef4015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c73a906018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e0000a9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400550301185665633c543e0000ad060c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b1060c1463747970652c63747970655f656e747279284374797065456e747279081c43726561746f7201002c426c6f636b4e756d62657201100008011c63726561746f7200011c43726561746f72000128637265617465645f617410012c426c6f636b4e756d6265720000b5060c1463747970651870616c6c6574144572726f7204045400010c204e6f74466f756e64000004985468657265206973206e6f20435479706520776974682074686520676976656e20686173682e34416c72656164794578697374730001046454686520435479706520616c7265616479206578697374732e3c556e61626c65546f506179466565730002040d0154686520706179696e67206163636f756e742077617320756e61626c6520746f2070617920746865206665657320666f72206372656174696e6720612063747970652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b9060c2c6174746573746174696f6e306174746573746174696f6e73484174746573746174696f6e44657461696c7314244374797065486173680130284174746573746572496401003c417574686f72697a6174696f6e4964010501244163636f756e74496401001c42616c616e636501180014012863747970655f68617368300124437479706548617368000120617474657374657200012841747465737465724964000140617574686f72697a6174696f6e5f69640101015c4f7074696f6e3c417574686f72697a6174696f6e49643e00011c7265766f6b6564ac0110626f6f6c00011c6465706f736974bd06016c4465706f7369743c4163636f756e7449642c2042616c616e63653e0000bd060c306b696c745f737570706f72741c6465706f7369741c4465706f736974081c4163636f756e7401001c42616c616e63650118000801146f776e657200011c4163636f756e74000118616d6f756e7418011c42616c616e63650000c1060000040805013000c5060c2c6174746573746174696f6e1870616c6c6574144572726f720404540001183c416c726561647941747465737465640000080901546865726520697320616c726561647920616e206174746573746174696f6e2077697468207468652073616d6520636c61696d20686173682073746f726564206f6e18636861696e2e38416c72656164795265766f6b6564000104a4546865206174746573746174696f6e2068617320616c7265616479206265656e207265766f6b65642e204e6f74466f756e64000204c04e6f206174746573746174696f6e206f6e20636861696e206d61746368696e672074686520636c61696d20686173682e3443547970654d69736d61746368000308fc546865206174746573746174696f6e20435479706520646f6573206e6f74206d61746368207468652043547970652073706563696669656420696e207468656864656c65676174696f6e2068696572617263687920726f6f742e344e6f74417574686f72697a6564000404f05468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f206368616e676520746865206174746573746174696f6e2e804d617844656c6567617465644174746573746174696f6e73457863656564656400050cf4546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732068617320616c7265616479206265656e05017265616368656420666f722074686520636f72726573706f6e64696e672064656c65676174696f6e2069642073756368207468617420616e6f74686572206f6e654063616e6e6f742062652061646465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909c9060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368793844656c65676174696f6e4e6f6465144044656c65676174696f6e4e6f6465496401302c4d61784368696c6472656e01cd064444656c65676174696f6e44657461696c7301d106244163636f756e74496401001c42616c616e63650118001401446869657261726368795f726f6f745f696430014044656c65676174696f6e4e6f64654964000118706172656e74050401604f7074696f6e3c44656c65676174696f6e4e6f646549643e0001206368696c6472656ed50601b8426f756e64656442547265655365743c44656c65676174696f6e4e6f646549642c204d61784368696c6472656e3e00011c64657461696c73d106014444656c65676174696f6e44657461696c7300011c6465706f736974bd06016c4465706f7369743c4163636f756e7449642c2042616c616e63653e0000cd06103872756e74696d655f636f6d6d6f6e24636f6e7374616e74732864656c65676174696f6e2c4d61784368696c6472656e00000000d1060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368794444656c65676174696f6e44657461696c73042c44656c656761746f7249640100000c01146f776e657200012c44656c656761746f72496400011c7265766f6b6564ac0110626f6f6c00012c7065726d697373696f6e730d01012c5065726d697373696f6e730000d5060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540130045300000400d906012c42547265655365743c543e0000d9060420425472656553657404045401300004009102000000dd060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368796844656c65676174696f6e48696572617263687944657461696c73042443747970654861736801300004012863747970655f686173683001244374797065486173680000e1060c2864656c65676174696f6e1870616c6c6574144572726f720404540001585c44656c65676174696f6e416c72656164794578697374730000041101546865726520697320616c726561647920612064656c65676174696f6e206e6f64652077697468207468652073616d652049442073746f726564206f6e20636861696e2e60496e76616c696444656c65676174655369676e617475726500010805015468652064656c65676174652773207369676e617475726520666f72207468652064656c65676174696f6e206372656174696f6e206f7065726174696f6e20697320696e76616c69642e4844656c65676174696f6e4e6f74466f756e64000204c04e6f2064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e4044656c65676174654e6f74466f756e64000304b84e6f2064656c656761746520776974682074686520676976656e2049442073746f726564206f6e20636861696e2e58486965726172636879416c7265616479457869737473000404f8546865726520697320616c72656164792061206869657261726368792077697468207468652073616d652049442073746f726564206f6e20636861696e2e444869657261726368794e6f74466f756e64000504bc4e6f2068696572617263687920776974682074686520676976656e2049442073746f726564206f6e20636861696e2e544d617853656172636844657074685265616368656400060409014d6178206e756d626572206f66206e6f64657320636865636b656420776974686f757420766572696679696e672074686520676976656e20636f6e646974696f6e2e684e6f744f776e65724f66506172656e7444656c65676174696f6e000708f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6ef462656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20706172656e74206e6f64652e744e6f744f776e65724f6644656c65676174696f6e486965726172636879000808f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6eec62656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20726f6f74206e6f64652e60506172656e7444656c65676174696f6e4e6f74466f756e64000904dc4e6f20706172656e742064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e5c506172656e7444656c65676174696f6e5265766f6b6564000a04c854686520706172656e742064656c65676174696f6e206861732070726576696f75736c79206265656e207265766f6b65642e58556e617574686f72697a65645265766f636174696f6e000b04fc5468652064656c65676174696f6e207265766f6b6572206973206e6f7420616c6c6f77656420746f207265766f6b65207468652064656c65676174696f6e2e4c556e617574686f72697a656452656d6f76616c000c04ec5468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f2072656d6f7665207468652064656c65676174696f6e2e58556e617574686f72697a656444656c65676174696f6e000d04fc5468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f20637265617465207468652064656c65676174696f6e2e3041636365737344656e696564000e04f0546865206f7065726174696f6e207761736e277420616c6c6f7765642062656361757365206f6620696e73756666696369656e74207269676874732e6045786365656465645265766f636174696f6e426f756e6473000f080d014d6178206e756d626572206f66207265766f636174696f6e7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7238746865206f7065726174696f6e2e54457863656564656452656d6f76616c426f756e647300100811014d6178206e756d626572206f662072656d6f76616c7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7220746865286f7065726174696f6e2e584d61785265766f636174696f6e73546f6f4c61726765001104f8546865206d6178206e756d626572206f66207265766f636174696f6e206578636565647320746865206c696d697420666f72207468652070616c6c65742e4c4d617852656d6f76616c73546f6f4c61726765001204f0546865206d6178206e756d626572206f662072656d6f76616c73206578636565647320746865206c696d697420666f72207468652070616c6c65742e5c4d6178506172656e74436865636b73546f6f4c617267650013040501546865206d6178206e756d626572206f6620706172656e7420636865636b73206578636565647320746865206c696d697420666f72207468652070616c6c65742e20496e7465726e616c001404f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e4c4d61784368696c6472656e4578636565646564001508dc546865206d6178206e756d626572206f6620616c6c206368696c6472656e20686173206265656e207265616368656420666f722074686578636f72726573706f6e64696e672064656c65676174696f6e206e6f64652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e5060c0c6469642c6469645f64657461696c732844696444657461696c7304045400001c014861757468656e7469636174696f6e5f6b65793001284b657949644f663c543e0001486b65795f61677265656d656e745f6b657973e90601684469644b657941677265656d656e744b65795365744f663c543e00013864656c65676174696f6e5f6b6579050401484f7074696f6e3c4b657949644f663c543e3e00013c6174746573746174696f6e5f6b6579050401484f7074696f6e3c4b657949644f663c543e3e00012c7075626c69635f6b657973ed0601504469645075626c69634b65794d61704f663c543e00013c6c6173745f74785f636f756e74657210010c75363400011c6465706f736974bd0601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e0000e9060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540130045300000400d906012c42547265655365743c543e0000ed060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0130045601f106045300000400f906013842547265654d61703c4b2c20563e0000f1060c0c6469642c6469645f64657461696c734c4469645075626c69634b657944657461696c73042c426c6f636b4e756d62657201100008010c6b6579f50601304469645075626c69634b6579000130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720000f5060c0c6469642c6469645f64657461696c73304469645075626c69634b6579000108545075626c6963566572696669636174696f6e4b65790400e5040148446964566572696669636174696f6e4b65790000004c5075626c6963456e6372797074696f6e4b65790400d5040140446964456e6372797074696f6e4b657900010000f906042042547265654d617008044b0130045601f106000400fd06000000fd0600000201070001070000040830f1060005070000040800b5040009070c0c6469641870616c6c6574144572726f7204045400016c58496e76616c69645369676e6174757265466f726d6174000008050154686520444944206f7065726174696f6e207369676e6174757265206973206e6f7420696e2074686520666f726d61742074686520766572696669636174696f6e306b657920657870656374732e40496e76616c69645369676e6174757265000108f854686520444944206f7065726174696f6e207369676e617475726520697320696e76616c696420666f7220746865207061796c6f616420616e642074686568766572696669636174696f6e206b65792070726f76696465642e34416c7265616479457869737473000204f85468652044494420776974682074686520676976656e206964656e74696669657220697320616c72656164792070726573656e74206f6e20636861696e2e204e6f74466f756e64000304d44e6f2044494420776974682074686520676976656e206964656e7469666965722069732070726573656e74206f6e20636861696e2e5c566572696669636174696f6e4b65794e6f74466f756e6400040809014f6e65206f72206d6f726520766572696669636174696f6e206b657973207265666572656e63656420617265206e6f742073746f72656420696e2074686520736574546f6620766572696669636174696f6e206b6579732e30496e76616c69644e6f6e6365000504090154686520444944206f7065726174696f6e206e6f6e6365206973206e6f7420657175616c20746f207468652063757272656e7420444944206e6f6e6365202b20312e7c556e737570706f72746564446964417574686f72697a6174696f6e43616c6c000604e05468652063616c6c65642065787472696e73696320646f6573206e6f7420737570706f72742044494420617574686f7269736174696f6e2e6c496e76616c6964446964417574686f72697a6174696f6e43616c6c000708dc5468652063616c6c2068616420706172616d6574657273207468617420636f6e666c696374656420776974682065616368206f74686572406f72207765726520696e76616c69642e8c4d61784e65774b657941677265656d656e744b6579734c696d697445786365656465640008080d0141206e756d626572206f66206e6577206b65792061677265656d656e74206b6579732067726561746572207468616e20746865206d6178696d756d20616c6c6f77656448686173206265656e2070726f76696465642e544d61785075626c69634b65797345786365656465640009080501546865206d6178696d756d206e756d626572206f66207075626c6963206b65797320666f72207468697320444944206b6579206964656e74696669657220686173346265656e20726561636865642e6c4d61784b657941677265656d656e744b6579734578636565646564000a080501546865206d6178696d756d206e756d626572206f66206b65792061677265656d656e747320686173206265656e207265616368656420666f722074686520444944207375626a6563742e304261644469644f726967696e000b04bc546865204449442063616c6c20776173207375626d6974746564206279207468652077726f6e67206163636f756e74485472616e73616374696f6e45787069726564000c040d0154686520626c6f636b206e756d6265722070726f766964656420696e2061204449442d617574686f72697a6564206f7065726174696f6e20697320696e76616c69642e38416c726561647944656c65746564000d04b0546865204449442068617320616c7265616479206265656e2070726576696f75736c792064656c657465642e444e6f744f776e65724f664465706f736974000e04fc4f6e6c7920746865206f776e6572206f6620746865206465706f7369742063616e207265636c61696d206974732072657365727665642062616c616e63652e3c556e61626c65546f50617946656573000f04f0546865206f726967696e20697320756e61626c6520746f207265736572766520746865206465706f73697420616e642070617920746865206665652e6c4d61784e756d6265724f66536572766963657345786365656465640010041101546865206d6178696d756d206e756d626572206f66207365727669636520656e64706f696e747320666f7220612044494420686173206265656e2065786365656465642e684d61785365727669636549644c656e6774684578636565646564001104f0546865207365727669636520656e64706f696e7420494420657863656564656420746865206d6178696d756d20616c6c6f776564206c656e6774682e704d617853657276696365547970654c656e6774684578636565646564001208f84f6e65206f6620746865207365727669636520656e64706f696e7420747970657320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e884d61784e756d6265724f665479706573506572536572766963654578636565646564001308ec546865206d6178696d756d206e756d626572206f6620747970657320666f722061207365727669636520656e64706f696e7420686173206265656e2465786365656465642e6c4d61785365727669636555726c4c656e6774684578636565646564001408f44f6e65206f6620746865207365727669636520656e64706f696e742055524c7320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e844d61784e756d6265724f6655726c735065725365727669636545786365656465640015041101546865206d6178696d756d206e756d626572206f662055524c7320666f722061207365727669636520656e64706f696e7420686173206265656e2065786365656465642e5053657276696365416c726561647945786973747300160411014120736572766963652077697468207468652070726f766964656420494420697320616c72656164792070726573656e7420666f722074686520676976656e204449442e3c536572766963654e6f74466f756e6400170409014120736572766963652077697468207468652070726f7669646564204944206973206e6f742070726573656e7420756e6465722074686520676976656e204449442e58496e76616c696453657276696365456e636f64696e6700180409014f6e65206f6620746865207365727669636520656e64706f696e742064657461696c7320636f6e7461696e73206e6f6e2d415343494920636861726163746572732e7c4d617853746f726564456e64706f696e7473436f756e7445786365656465640019080d01546865206e756d626572206f66207365727669636520656e64706f696e74732073746f72656420756e6465722074686520444944206973206c6172676572207468616e88746865206e756d626572206f6620656e64706f696e747320746f2064656c6574652e20496e7465726e616c001a04f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909090d070c4470616c6c65745f6469645f6c6f6f6b757044636f6e6e656374696f6e5f7265636f726440436f6e6e656374696f6e5265636f72640c344469644964656e74696669657201001c4163636f756e7401001c42616c616e636501180008010c6469640001344469644964656e74696669657200011c6465706f736974bd0601644465706f7369743c4163636f756e742c2042616c616e63653e00001107000004080019010015070c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144572726f72040454000114204e6f74466f756e640000047c546865206173736f63696174696f6e20646f6573206e6f742065786973742e344e6f74417574686f72697a65640001081101546865206f726967696e20776173206e6f7420616c6c6f77656420746f206d616e61676520746865206173736f63696174696f6e206265747765656e20746865204449444c616e6420746865206163636f756e742049442e344f7574646174656450726f6f66000204b454686520737570706c6965642070726f6f66206f66206f776e65727368697020776173206f757464617465642e44496e73756666696369656e7446756e64730003081101546865206163636f756e742068617320696e73756666696369656e742066756e647320616e642063616e277420706179207468652066656573206f72207265736572766530746865206465706f7369742e244d6967726174696f6e00040c010154686520436f6e6e65637465644163636f756e747320616e6420436f6e6e6563746564446964732073746f7261676520617265206f7574206f662073796e632e0011014e4f54453a20746869732077696c6c206f6e6c792062652072657475726e6564206966207468652073746f726167652068617320696e636f6e73697374656e636965732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090919070c4470616c6c65745f776562335f6e616d657324776562335f6e616d6544576562334e616d654f776e6572736869700c144f776e657201001c4465706f73697401bd062c426c6f636b4e756d6265720110000c01146f776e65720001144f776e6572000128636c61696d65645f617410012c426c6f636b4e756d62657200011c6465706f736974bd06011c4465706f73697400001d070c4470616c6c65745f776562335f6e616d65731870616c6c6574144572726f7204045400013044496e73756666696369656e7446756e64730000040d01546865207478207375626d697474657220646f6573206e6f74206861766520656e6f7567682066756e647320746f2070617920666f7220746865206465706f7369742e34416c7265616479457869737473000104dc54686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c7920636c61696d65642e204e6f74466f756e640002048854686520737065636966696564206e616d6520646f6573206e6f742065786973742e484f776e6572416c7265616479457869737473000304a054686520737065636966696564206f776e657220616c7265616479206f776e732061206e616d652e344f776e65724e6f74466f756e64000404ac54686520737065636966696564206f776e657220646f6573206e6f74206f776e20616e79206e616d65732e1842616e6e6564000508ec54686520737065636966696564206e616d6520686173206265656e2062616e6e656420616e642063616e6e6f7420626520696e746572616374656414776974682e244e6f7442616e6e6564000604ac54686520737065636966696564206e616d65206973206e6f742063757272656e746c792062616e6e65642e34416c726561647942616e6e6564000704d854686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c792062616e6e65642e344e6f74417574686f72697a6564000804cc546865206163746f722063616e6e6f7420706572666f726d65642074686520737065636966696564206f7065726174696f6e2e20546f6f53686f7274000904a841206e616d65207468617420697320746f6f2073686f7274206973206265696e6720636c61696d65642e1c546f6f4c6f6e67000a04a441206e616d65207468617420697320746f6f206c6f6e67206973206265696e6720636c61696d65642e40496e76616c6964436861726163746572000b04f441206e616d65207468617420636f6e7461696e73206e6f7420616c6c6f7765642063686172616374657273206973206265696e6720636c61696d65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909092107000004083501300025070c487075626c69635f63726564656e7469616c732c63726564656e7469616c733c43726564656e7469616c456e7472791824435479706548617368013020417474657374657201002c426c6f636b4e756d6265720110244163636f756e74496401001c42616c616e636501183c417574686f72697a6174696f6e49640105010018012863747970655f686173683001244354797065486173680001206174746573746572000120417474657374657200011c7265766f6b6564ac0110626f6f6c000130626c6f636b5f6e756d62657210012c426c6f636b4e756d62657200011c6465706f736974bd06016c4465706f7369743c4163636f756e7449642c2042616c616e63653e000140617574686f72697a6174696f6e5f69640101015c4f7074696f6e3c417574686f72697a6174696f6e49643e000029070c487075626c69635f63726564656e7469616c731870616c6c6574144572726f720404540001183c416c72656164794174746573746564000008f8412063726564656e7469616c2077697468207468652073616d6520726f6f7420686173682068617320616c72656164792069737375656420746f2074686548737065636966696564207375626a6563742e204e6f74466f756e6400010805014e6f2063726564656e7469616c2077697468207468652073706563696669656420726f6f74206861736820686173206265656e2069737375656420746f2074686548737065636966696564207375626a6563742e3c556e61626c65546f50617946656573000204d44e6f7420656e6f75676820746f6b656e7320746f2070617920666f72207468652066656573206f7220746865206465706f7369742e30496e76616c6964496e707574000304805468652063726564656e7469616c20696e70757420697320696e76616c69642e344e6f74417574686f72697a6564000404e05468652063616c6c6572206973206e6f7420617574686f72697a656420746f20706572666f726d656420746865206f7065726174696f6e2e20496e7465726e616c000508f443617463682d616c6c20666f7220616e79206f74686572206572726f727320746861742073686f756c64206e6f742068617070656e2c207965742069742468617070656e65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909092d0704184f7074696f6e0404540131070108104e6f6e6500000010536f6d6504003107000001000031070c4c706f6c6b61646f745f7072696d69746976657308763448557067726164655265737472696374696f6e0001041c50726573656e740000000035070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f6865616430014472656c61795f636861696e3a3a4861736800016472656c61795f64697370617463685f71756575655f73697a653907015452656c617944697370616368517565756553697a65000140696e67726573735f6368616e6e656c733d0701885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c733d0701885665633c285061726149642c20416272696467656448726d704368616e6e656c293e000039070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f745452656c617944697370616368517565756553697a65000008013c72656d61696e696e675f636f756e7420010c75333200013872656d61696e696e675f73697a6520010c75333200003d07000002410700410700000408ad0145070045070c4c706f6c6b61646f745f7072696d6974697665730876344c416272696467656448726d704368616e6e656c00001801306d61785f636170616369747920010c7533320001386d61785f746f74616c5f73697a6520010c7533320001406d61785f6d6573736167655f73697a6520010c7533320001246d73675f636f756e7420010c753332000128746f74616c5f73697a6520010c7533320001206d71635f68656164050401304f7074696f6e3c486173683e000049070c4c706f6c6b61646f745f7072696d697469766573087634644162726964676564486f7374436f6e66696775726174696f6e00002401346d61785f636f64655f73697a6520010c7533320001486d61785f686561645f646174615f73697a6520010c7533320001586d61785f7570776172645f71756575655f636f756e7420010c7533320001546d61785f7570776172645f71756575655f73697a6520010c75333200015c6d61785f7570776172645f6d6573736167655f73697a6520010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746520010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746520010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e20012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c617920012c426c6f636b4e756d62657200004d07089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e0000040030012452656c61794861736800005107042042547265654d617008044b01ad010456014d0700040055070000005507000002590700590700000408ad014d07005d0700000261070061070860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401ad0100080124726563697069656e74ad01010849640001106461746134015073705f7374643a3a7665633a3a5665633c75383e00006507087c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6eac0110626f6f6c000069070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041901417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e672e5050726f686962697465644279506f6c6b61646f740001044d01506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e2e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733c77696c6c696e6720746f2072756e2e6856616c69646174696f6e446174614e6f74417661696c61626c650003041d0154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b2e74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404290154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b2e304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909096d070000027107007107086463756d756c75735f70616c6c65745f78636d705f717565756554496e626f756e644368616e6e656c44657461696c7300000c011873656e646572ad010118506172614964000114737461746575070130496e626f756e6453746174650001406d6573736167655f6d65746164617461790701a85665633c2852656c6179426c6f636b4e756d6265722c2058636d704d657373616765466f726d6174293e00007507086463756d756c75735f70616c6c65745f78636d705f717565756530496e626f756e645374617465000108084f6b0000002453757370656e6465640001000079070000027d07007d07000004082081070081070c48706f6c6b61646f745f70617261636861696e287072696d6974697665734458636d704d657373616765466f726d617400010c60436f6e636174656e6174656456657273696f6e656458636d0000005c436f6e636174656e61746564456e636f646564426c6f620001001c5369676e616c7300020000850700000408ad01200089070000028d07008d07086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74ad0101185061726149640001147374617465910701344f7574626f756e6453746174650001347369676e616c735f6578697374ac0110626f6f6c00012c66697273745f696e646578e0010c7531360001286c6173745f696e646578e0010c75313600009107086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000950700000408ad01e0009907086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e66696744617461000018014473757370656e645f7468726573686f6c6420010c75333200013864726f705f7468726573686f6c6420010c753332000140726573756d655f7468726573686f6c6420010c7533320001407468726573686f6c645f7765696768742801185765696768740001547765696768745f72657374726963745f646563617928011857656967687400016878636d705f6d61785f696e646976696475616c5f77656967687428011857656967687400009d070000040cad01203400a1070c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f72040454000114304661696c6564546f53656e640000046c4661696c656420746f2073656e642058434d206d6573736167652e3042616458636d4f726967696e0001043c4261642058434d206f726967696e2e1842616458636d000204344261642058434d20646174612e484261644f766572776569676874496e64657800030454426164206f76657277656967687420696e6465782e3c5765696768744f7665724c696d6974000404f850726f76696465642077656967687420697320706f737369626c79206e6f7420656e6f75676820746f206578656375746520746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a5070c2870616c6c65745f78636d1870616c6c6574144572726f720404540001502c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108610154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652e2050657268617073a861206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e30496e76616c69644173736574000d0480496e76616c696420617373657420666f7220746865206f7065726174696f6e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304490154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c20636f6e73756d657273206f6620746865206c6f636b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a9070c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144572726f7204045400010004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909ad07086063756d756c75735f70616c6c65745f646d705f717565756528436f6e6669674461746100000401386d61785f696e646976696475616c2801185765696768740000b107086063756d756c75735f70616c6c65745f646d705f71756575653450616765496e6465784461746100000c0128626567696e5f7573656420012c50616765436f756e746572000120656e645f7573656420012c50616765436f756e7465720001406f7665727765696768745f636f756e7410013c4f766572776569676874496e6465780000b507000002b90700b90700000408203400bd070c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144572726f720404540001081c556e6b6e6f776e0000048c546865206d65737361676520696e64657820676976656e20697320756e6b6e6f776e2e244f7665724c696d6974000104310154686520616d6f756e74206f662077656967687420676976656e20697320706f737369626c79206e6f7420656e6f75676820666f7220657865637574696e6720746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909c107102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301ed021043616c6c01f503245369676e617475726501050514457874726101c50700040034000000c50700000420c907cd07d107d507d907e107e507e90700c90710306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000cd0710306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000d10710306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000d50710306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000d90710306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400dd07010c4572610000dd07102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000e10710306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e6365040454000004002c0120543a3a496e6465780000e50710306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000e907086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400d101013042616c616e63654f663c543e0000941853797374656d011853797374656d401c4163636f756e7401010402000c510100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000020040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010024180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000020040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510308000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040520340400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d626572010010200000000000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003080000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010038040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004804001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010020100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104023095020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000990204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100ac0400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100ac0400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500008d02040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01a10201541830426c6f636b57656967687473b1026d010203815d00070088526a7402004001c2e9171b0001079077bca44b0200d000010700e6bd4f570200f000010000c2e9171b000107901951bf680200200101070088526a7402004001010700a2941a1d02005000c2e9171b0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468c1023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e7410206009000000000000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874c90240089d26020000000000dce704000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6ecd026103386b696c742d7370697269746e6574386b696c742d7370697269746e657401000000c02b00000000000038df6acb689907609b0400000037e397fc7c91f5e402000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000f3ff14d5ab5270590300000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000dd718d5cc53262d401000000ea93e3f16f3d69620200000026609555c065660302000000a47b7d544994c99b0100000045bfba51a310b2230100000006000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e2853533538507265666978e008260014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01dd02002454696d657374616d70012454696d657374616d70080c4e6f7701001020000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100ac040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f01e1020004344d696e696d756d506572696f6410207017000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00021c496e6469636573011c496e646963657304204163636f756e74730001040210e5020400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e01e9020178041c4465706f736974184000b47cf328350000000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e01f502052042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200f902040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e20526573657276657301010402000903040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e14486f6c6473010104020015030400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a657301010402003d030400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e015103017c14484578697374656e7469616c4465706f736974184000a0724e18090000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7320103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573201032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e204d6178486f6c647320103200000004190120546865206d6178696d756d206e756d626572206f6620686f6c647320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e284d6178467265657a657320103200000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01590306485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c69657201005d0340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100610304000000018404604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00071041757261011041757261082c417574686f726974696573010065030400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f74010075032000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000171c53657373696f6e011c53657373696f6e1c2856616c696461746f7273010055030400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010020100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e6765640100ac040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010079030400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010085030400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050081030400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405890300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e019103018800019503164050617261636861696e5374616b696e67014050617261636861696e5374616b696e6740544d617853656c656374656443616e64696461746573010020100000000004090120546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c6563746564206174206561636820726f756e642e14526f756e640100990350000000000000000000000000140000000000000004e82043757272656e7420726f756e64206e756d62657220616e64206e65787420726f756e64207363686564756c6564207472616e736974696f6e2e384c61737444656c65676174696f6e01010405009d03200000000000000000140d012044656c65676174696f6e20696e666f726d6174696f6e20666f7220746865206c61746573742073657373696f6e20696e20776869636820612064656c656761746f722c2064656c6567617465642e000501204974206d6170732066726f6d20616e206163636f756e7420746f20746865206e756d626572206f662064656c65676174696f6e7320696e20746865206c617374982073657373696f6e20696e2077686963682074686579202872652d2964656c6567617465642e3844656c656761746f7253746174650001040500a10304000c802044656c65676174696f6e207374616b696e6720696e666f726d6174696f6e2e00cc204974206d6170732066726f6d20616e206163636f756e7420746f206974732064656c65676174696f6e2064657461696c732e3443616e646964617465506f6f6c0001040500a503040010a420546865207374616b696e6720696e666f726d6174696f6e20666f7220612063616e6469646174652e00b0204974206d6170732066726f6d20616e206163636f756e7420746f2069747320696e666f726d6174696f6e2eb8204d6f72656f7665722c20697420636f756e747320746865206e756d626572206f662063616e646964617465732e5c436f756e746572466f7243616e646964617465506f6f6c010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617048546f74616c436f6c6c61746f725374616b650100b90380000000000000000000000000000000000000000000000000000000000000000014f420546f74616c2066756e6473206c6f636b656420746f206261636b207468652063757272656e746c792073656c656374656420636f6c6c61746f72732ed0205468652073756d206f6620616c6c20636f6c6c61746f7220616e642074686569722064656c656761746f72207374616b65732e002101204e6f74653a20546865726520617265206d6f72652066756e6473206c6f636b656420627920746869732070616c6c65742c2073696e636520746865206261636b696e6720666f720901206e6f6e20636f6c6c6174696e672063616e64696461746573206973206e6f7420696e636c7564656420696e205b546f74616c436f6c6c61746f725374616b655d2e34546f7043616e646964617465730100bd03040028e82054686520636f6c6c61746f722063616e64696461746573207769746820746865206869676865737420616d6f756e74206f66207374616b652e00190120456163682074696d6520746865207374616b65206f66206120636f6c6c61746f7220697320696e637265617365642c20697420697320636865636b65642077686574686572050120746869732070757368657320616e6f746865722063616e646964617465206f7574206f6620746865206c6973742e205768656e20746865207374616b652069732101207265647563656420686f77657665722c206974206973206e6f7420636865636b656420696620616e6f746865722063616e64696461746520686173206d6f7265207374616b652c11012073696e6365207468697320776f756c64207265717569726520697465726174696e67206f7665722074686520656e74697265205b43616e646964617465506f6f6c5d2e001501205468657265206d75737420616c77617973206265206d6f72652063616e64696461746573207468616e205b4d617853656c656374656443616e646964617465735d20736f0d012074686174206120636f6c6c61746f722063616e2064726f70206f7574206f662074686520636f6c6c61746f7220736574206279207265647563696e672074686569721c207374616b652e3c496e666c6174696f6e436f6e6669670100c503c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046420496e666c6174696f6e20636f6e66696775726174696f6e2e24556e7374616b696e670101040500d10304001088205468652066756e64732077616974696e6720746f20626520756e7374616b65642e001d01204974206d6170732066726f6d206163636f756e747320746f20616c6c207468652066756e64732061646472657373656420746f207468656d20696e20746865206675747572652020626c6f636b732e644d6178436f6c6c61746f7243616e6469646174655374616b65010018400000000000000000000000000000000004cc20546865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e6469646174652063616e207374616b652e4c4c617374526577617264526564756374696f6e010010200000000000000000140d0120546865207965617220696e20776869636820746865206c617374206175746f6d6174696320726564756374696f6e206f66207468652072657761726420726174657328206f636375727265642e00250120497420737461727473206174207a65726f2061742067656e6573697320616e6420696e6372656d656e7473206279206f6e6520657665727920424c4f434b535f5045525f5945415234206d616e7920626c6f636b732e38426c6f636b73417574686f726564010104050010200000000000000000080d0120546865206e756d626572206f6620617574686f72656420626c6f636b7320666f7220636f6c6c61746f72732e20497420697320757064617465642076696120746865b020606e6f74655f617574686f726020686f6f6b207768656e20617574686f72696e67206120626c6f636b202e38426c6f636b73526577617264656401010405001020000000000000000024210120546865206e756d626572206f6620626c6f636b7320666f7220776869636820726577617264732068617665206265656e20636c61696d656420627920616e20616464726573732e00190120466f7220636f6c6c61746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f7265642e2049742069732075706461746564207768656ecc20696e6372656d656e74696e6720636f6c6c61746f7220726577617264732c20656974686572207768656e2063616c6c696e67e02060696e635f636f6c6c61746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e00250120466f722064656c656761746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f726564206f662074686520636f6c6c61746f722e497420697305012075706461746564207768656e20696e6372656d656e74696e672064656c656761746f7220726577617264732c20656974686572207768656e2063616c6c696e67e42060696e635f64656c656761746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e1c5265776172647301010405001840000000000000000000000000000000000c01012054686520616363756d756c61746564207265776172647320666f7220636f6c6c61746f722063616e6469646174657320616e642064656c656761746f72732e001101204974206d6170732066726f6d206163636f756e747320746f20746865697220746f74616c20726577617264732073696e636520746865206c617374207061796f75742e34466f7263654e6577526f756e640100ac04000001e103018c3c444d696e426c6f636b73506572526f756e6410202c0100000000000004d4204d696e696d756d206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e64732063616e206c6173742e5444656661756c74426c6f636b73506572526f756e641020580200000000000008fc2044656661756c74206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e6473206c6173742c2061732073657420696e207468655c2067656e6573697320636f6e66696775726174696f6e2e345374616b654475726174696f6e1020e0c40000000000000c0501204e756d626572206f6620626c6f636b7320666f7220776869636820756e7374616b65642062616c616e63652077696c6c207374696c6c206265206c6f636b6564f0206265666f72652069742063616e20626520756e6c6f636b6564206279206163746976656c792063616c6c696e67207468652065787472696e7369634c2060756e6c6f636b5f756e7374616b6564602e3845786974517565756544656c6179201002000000080901204e756d626572206f6620726f756e6473206120636f6c6c61746f722068617320746f207374617920616374697665206166746572207375626d697474696e672061c4207265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e304d696e436f6c6c61746f7273201010000000080d01204d696e696d756d206e756d626572206f6620636f6c6c61746f72732073656c65637465642066726f6d2074686520736574206f662063616e64696461746573206174602065766572792076616c69646174696f6e20726f756e642e504d696e5265717569726564436f6c6c61746f7273201004000000081101204d696e696d756d206e756d626572206f6620636f6c6c61746f72732077686963682063616e6e6f74206c6561766520746865206e6574776f726b2069662074686572653c20617265206e6f206f74686572732e584d617844656c65676174696f6e73506572526f756e64201001000000140101204d6178696d756d206e756d626572206f662064656c65676174696f6e732077686963682063616e206265206d6164652077697468696e207468652073616d651c20726f756e642e000d01204e4f54453a20546f2070726576656e742072652d64656c65676174696f6e2d7265776172642061747461636b732c2077652073686f756c64206b65657020746869732c20746f206265206f6e652e604d617844656c656761746f7273506572436f6c6c61746f7220102300000004e4204d6178696d756d206e756d626572206f662064656c656761746f727320612073696e676c6520636f6c6c61746f722063616e20686176652e404d6178546f7043616e6469646174657320104b00000004a0204d6178696d756d2073697a65206f662074686520746f702063616e64696461746573207365742e404d696e436f6c6c61746f725374616b6518400000e8890423c78a0000000000000000080901204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520656c65637465642061732076616c696461746f723420666f72206120726f756e642e644d696e436f6c6c61746f7243616e6469646174655374616b6518400000e8890423c78a0000000000000000080501204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520616464656420746f2074686520736574206f66302063616e646964617465732e444d696e44656c656761746f725374616b651840000082dfe40d4700000000000000000004f8204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f206265636f6d6520612064656c656761746f722e484d6178556e7374616b65526571756573747320100a00000028e8204d6178206e756d626572206f6620636f6e63757272656e742061637469766520756e7374616b696e67207265717565737473206265666f72652c20756e6c6f636b696e672e001501204e4f54453a20546f2070726f7465637420616761696e737420697272656d6f766162696c697479206f6620612063616e646964617465206f722064656c656761746f722cf4207765206f6e6c7920616c6c6f7720666f72204d6178556e7374616b655265717565737473202d2031206d616e79206d616e75616c20756e7374616b6501012072657175657374732e20546865206c617374206f6e6520736572766573206173206120706c616365686f6c64657220666f7220746865206361736573206f66f02063616c6c696e672065697468657220606b69636b5f64656c656761746f72602c20666f7263655f72656d6f76655f63616e64696461746560206f7209012060657865637574655f6c656176655f63616e64696461746573602e204f74686572776973652c2061207573657220636f756c64206d6178206f75742074686569720d0120756e7374616b6520726571756573747320616e642070726576656e74207468656d73656c7665732066726f6d206265696e67206b69636b65642066726f6d20746865f020736574206f662063616e646964617465732f64656c656761746f727320756e74696c207468657920756e6c6f636b2074686569722066756e64732e484e6574776f726b5265776172645374617274102048a3c800000000000c110120546865207374617274696e6720626c6f636b206e756d62657220666f7220746865206e6574776f726b20726577617264732e204f6e6365207468652063757272656e74090120626c6f636b206e756d626572206578636565647320746869732073746172742c207468652062656e65666963696172792077696c6c2072656365697665207468658420636f6e666967757265642072657761726420696e206561636820626c6f636b2e444e6574776f726b52657761726452617465902000008a5d784563010c0d0120546865207261746520696e2070657263656e7420666f7220746865206e6574776f726b207265776172647320776869636820617265206261736564206f6e207468650901206d6178696d756d206e756d626572206f6620636f6c6c61746f727320616e6420746865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e1c207374616b652e01e5031528417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000141c41757261457874011c41757261457874042c417574686f72697469657301006503040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c790120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c20616c77617973f0206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e00000000182444656d6f6372616379012444656d6f6372616379303c5075626c696350726f70436f756e74010020100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f70730100e903040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f660001040520b50504000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e74010020100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b6564010020100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f660001040520bd0504000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f660101040500c905e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100ac0400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c0000e105040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c6973740001040630e50504000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e730101040630ac0400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e284d657461646174614f6600010402a430040018ec2047656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720616e792070726f706f73616c206f72207265666572656e64756d2e6901205468652060507265696d61676548617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e01f9030194303c456e6163746d656e74506572696f641020201c00000000000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f641020e0c400000000000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f641020e0c400000000000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f641020e0c4000000000000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400080c6a47e8d0300000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f776564ac04010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f641020840300000000000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f641020e0c400000000000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f74657320106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c73201064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f73697473201064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c697374656420106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e01e9051e1c436f756e63696c011c436f756e63696c182450726f706f73616c730100ed05040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f660001040630f503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e670001040630f105040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010020100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010055030400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01090401a804444d617850726f706f73616c576569676874282807004429353a0200a00004250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e01f5051f48546563686e6963616c436f6d6d69747465650148546563686e6963616c436f6d6d6974746565182450726f706f73616c730100f905040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f660001040630f503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e670001040630f105040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010020100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010055030400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01110401b804444d617850726f706f73616c576569676874282807004429353a0200a00004250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e01fd05204c546563686e6963616c4d656d62657273686970014c546563686e6963616c4d656d62657273686970081c4d656d6265727301000106040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01150401bc000105062220547265617375727901205472656173757279103450726f706f73616c436f756e74010020100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c73000104052009060400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c7301000d06040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e01190401c01c3050726f706f73616c426f6e6411061050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d1840000082dfe40d47000000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756d15060400044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f641020c0a8000000000000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726e110610000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c657449641906206b696c742f7473790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c732010640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e011d06231c5574696c69747900011d0401c4044c626174636865645f63616c6c735f6c696d69742010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e012106281c56657374696e67011c56657374696e67081c56657374696e6700010402002506040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e01002d0604000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01450401c808444d696e5665737465645472616e73666572184000407a10f35a0000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657320101c0000000001310629245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e6461010104051035060400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b75700001040504d0040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e014d0401cc08344d6178696d756d57656967687428280700a0db215d0200000104290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b201032000000141d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0018204e4f54453a5101202b20446570656e64656e742070616c6c657473272062656e63686d61726b73206d696768742072657175697265206120686967686572206c696d697420666f72207468652073657474696e672e205365742061c420686967686572206c696d697420756e646572206072756e74696d652d62656e63686d61726b736020666561747572652e0145062a1450726f7879011450726f7879081c50726f78696573010104050049064400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500590644000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01550401d8184050726f78794465706f7369744261736518400020f7a54b330000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f72184000f4a92b80010000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657320100a00000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6720100a00000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f7369744261736518400020f7a54b330000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72184000e8535700030000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e0169062b20507265696d6167650120507265696d6167650824537461747573466f7200010406306d060400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f720001040679067d06040000015d0401e4000181062c38546970734d656d626572736869700138546970734d656d62657273686970081c4d656d6265727301008506040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01610401e8000189062d105469707301105469707308105469707300010405308d0604000c650120546970734d6170207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e3d012054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c7265616479802067756172616e7465656420746f20626520612073656375726520686173682e1c526561736f6e7300010406303404000849012053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e610120696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e01650401ec144c4d6178696d756d526561736f6e4c656e6774682010004000000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756548446174614465706f73697450657242797465184000743ba40b00000000000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e30546970436f756e74646f776e1020201c0000000000000445012054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e3454697046696e6465727346656599060400043501205468652070657263656e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e505469705265706f72744465706f73697442617365184000f45628fa320000000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e019d062e204d756c746973696701204d756c746973696704244d756c7469736967730001080502a106a506040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01690401f00c2c4465706f73697442617365184000801b84ee320000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f72184000743ba40b00000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657320104000000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e01ad062f1443747970650114437479706504184374797065730001040230b10604001060204354797065732073746f726564206f6e20636861696e2e001901204974206d6170732066726f6d2061204354797065206861736820746f206974732063726561746f7220616e6420626c6f636b206e756d62657220696e207768696368206974342077617320637265617465642e01710401f80001b5063d2c4174746573746174696f6e012c4174746573746174696f6e08304174746573746174696f6e730001040230b90604000c78204174746573746174696f6e732073746f726564206f6e20636861696e2e00cc204974206d6170732066726f6d206120636c61696d206861736820746f207468652066756c6c206174746573746174696f6e2e5045787465726e616c4174746573746174696f6e730101080502c106ac04000ca02044656c656761746564206174746573746174696f6e732073746f726564206f6e20636861696e2e00e8204974206d6170732066726f6d20612064656c65676174696f6e20494420746f206120766563746f72206f6620636c61696d206861736865732e01750401fc081c4465706f7369741840001cc9dd006e0000000000000000000004e420546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720616e206174746573746174696f6e2e604d617844656c6567617465644174746573746174696f6e732010e803000008090120546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732077686963682063616e206265206d61646520627954207468652073616d652064656c65676174696f6e2e01c5063e2844656c65676174696f6e012844656c65676174696f6e083c44656c65676174696f6e4e6f6465730001040230c90604000c882044656c65676174696f6e206e6f6465732073746f726564206f6e20636861696e2e00b0204974206d6170732066726f6d2061206e6f646520494420746f20746865206e6f64652064657461696c732e5444656c65676174696f6e48696572617263686965730001040230dd0604000ca02044656c65676174696f6e2068696572617263686965732073746f726564206f6e20636861696e2e00dc204974206d61707320666f7220612028726f6f7429206e6f646520494420746f20746865206869657261726368792064657461696c732e018904010901181c4465706f73697418400080c6a47e8d0300000000000000000004dc20546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720612064656c65676174696f6e2e584d61785369676e6174757265427974654c656e677468e008400000384d61785265766f636174696f6e73201005000000047c204d6178696d756d206e756d626572206f66207265766f636174696f6e732e2c4d617852656d6f76616c7320100500000004f4204d6178696d756d206e756d626572206f662072656d6f76616c732e2053686f756c642062652073616d65206173204d61785265766f636174696f6e733c4d6178506172656e74436865636b73201005000000080d01204d6178696d756d206e756d626572206f6620757077617264732074726176657273616c73206f66207468652064656c65676174696f6e20747265652066726f6d2061f0206e6f646520746f2074686520726f6f7420616e64207468757320746865206465707468206f66207468652064656c65676174696f6e20747265652e2c4d61784368696c6472656e2010e80300000c0d01204d6178696d756d206e756d626572206f6620616c6c206368696c6472656e20666f7220612064656c65676174696f6e206e6f64652e20466f7220612062696e617279fc20747265652c20746869732073686f756c6420626520747769636520746865206d6178696d756d206465707468206f662074686520747265652c20692e652e5c206032205e204d6178506172656e74436865636b73602e01e1063f0c446964010c446964100c4469640001040200e50604000c5820444944732073746f726564206f6e20636861696e2e00c8204974206d6170732066726f6d206120444944206964656e74696669657220746f20746865204449442064657461696c732e4053657276696365456e64706f696e747300010805020507b10404000ca0205365727669636520656e64706f696e7473206173736f636961746564207769746820444944732e000901204974206d6170732066726f6d2028444944206964656e7469666965722c20736572766963652049442920746f2074686520736572766963652064657461696c732e44446964456e64706f696e7473436f756e7401010402002010000000000cac20436f756e746572206f66207365727669636520656e64706f696e747320666f722065616368204449442e00cc204974206d6170732066726f6d2028444944206964656e7469666965722920746f20612033322d62697420636f756e7465722e30446964426c61636b6c6973740001040200b40400141d012054686520736574206f66204449447320746861742068617665206265656e2064656c6574656420616e642063616e6e6f74207468657265666f726520626520637265617465647020616761696e20666f7220736563757269747920726561736f6e732e002101204974206d6170732066726f6d206120444944206964656e74696669657220746f206120756e6974207475706c652c20666f72207468652073616b65206f6620747261636b696e674420444944206964656e746966696572732e01a504011101382c426173654465706f736974184000008d49fd1a07000000000000000000100d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974f820746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f73697473fc20696e6372656173652062792074686520616d6f756e74206f662075736564206b65797320616e64207365727669636520656e64706f696e74732e20546865c8206465706f7369742063616e206265207265636c61696d6564207768656e20746865204449442069732064656c657465642e5853657276696365456e64706f696e744465706f736974184000b0156a084a00000000000000000000100d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368207365727669636520656e64706f696e7409012061732061206465706f73697420746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e205468651501206465706f7369742063616e206265207265636c61696d6564207768656e20746865207365727669636520656e64706f696e742069732072656d6f766564206f722074686534204449442064656c657465642e284b65794465706f736974184000dc20749701000000000000000000000805012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368206164646564206b65792061732061e4206465706f73697420746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e0c466565184000203d88792d000000000000000000000c09012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f7220656163682044494420617320612066656520746f0d0120696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206665652077696c6c206e6f74206765748820726566756e646564207768656e20746865204449442069732064656c657465642e4c4d61785075626c69634b6579735065724469642010140000000c1101204d6178696d756d206e756d626572206f6620746f74616c207075626c6963206b6579732077686963682063616e2062652073746f7265642070657220444944206b6579d8206964656e7469666965722e205468697320696e636c7564657320746865206f6e65732063757272656e746c79207573656420666f72f02061757468656e7469636174696f6e2c206b65792061677265656d656e742c206174746573746174696f6e2c20616e642064656c65676174696f6e2e584d61784e65774b657941677265656d656e744b65797320100a000000081501204d6178696d756d206e756d626572206f66206b65792061677265656d656e74206b65797320746861742063616e20626520616464656420696e2061206372656174696f6e2c206f7065726174696f6e2e604d6178546f74616c4b657941677265656d656e744b657973201013000000101101204d6178696d756d206e756d626572206f6620746f74616c206b65792061677265656d656e74206b65797320746861742063616e2062652073746f72656420666f7220613420444944207375626a6563742e00c42053686f756c642062652067726561746572207468616e20604d61784e65774b657941677265656d656e744b657973602e4c4d6178426c6f636b73547856616c696469747910202c0100000000000008ec20546865206d6178696d756d206e756d626572206f6620626c6f636b732061204449442d617574686f72697a6564206f7065726174696f6e2069739420636f6e736964657265642076616c696420616674657220697473206372656174696f6e2e644d61784e756d6265724f66536572766963657350657244696420101900000004fc20546865206d6178696d756d206e756d626572206f6620736572766963657320746861742063616e2062652073746f72656420756e6465722061204449442e484d61785365727669636549644c656e677468201032000000049020546865206d6178696d756d206c656e677468206f66206120736572766963652049442e504d617853657276696365547970654c656e67746820103200000004c820546865206d6178696d756d206c656e677468206f66206120736572766963652074797065206465736372697074696f6e2e684d61784e756d6265724f6654797065735065725365727669636520100100000004090120546865206d6178696d756d206e756d626572206f662061207479706573206465736372697074696f6e20666f722061207365727669636520656e64706f696e742e4c4d61785365727669636555726c4c656e6774682010c8000000049420546865206d6178696d756d206c656e677468206f66206120736572766963652055524c2e644d61784e756d6265724f6655726c735065725365727669636520100200000004d420546865206d6178696d756d206e756d626572206f6620612055524c7320666f722061207365727669636520656e64706f696e742e0109074024496e666c6174696f6e000000084c496e697469616c506572696f644c656e677468102048a3c800000000000c050120546865206c656e677468206f662074686520696e697469616c20706572696f6420696e2077686963682074686520636f6e7374616e74207265776172642069731101206d696e7465642e204f6e6365207468652063757272656e7420626c6f636b206578636565647320746869732c207265776172647320617265206e6f206675727468657220206973737565642e4c496e697469616c506572696f64526577617264184036f539fdaeb30200000000000000000008fc2054686520616d6f756e74206f66206e65776c792069737375656420746f6b656e732070657220626c6f636b20647572696e672074686520696e697469616c2020706572696f642e0042244469644c6f6f6b757001244469644c6f6f6b75700834436f6e6e6563746564446964730001040219010d07040004a8204d617070696e672066726f6d206163636f756e74206964656e7469666965727320746f20444944732e44436f6e6e65637465644163636f756e747300010802021107b404000cbc204d617070696e672066726f6d2028444944202b206163636f756e74206964656e74696669657229202d3e2028292e0d012054686520656d707479207475706c65206973207573656420617320612073656e74696e656c2076616c756520746f2073696d706c7920696e64696361746520746865982070726573656e6365206f66206120676976656e207475706c6520696e20746865206d61702e01fd04011501041c4465706f736974184000c0afd69136000000000000000000000c0d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974110120746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f7369742063616e2062658c207265636c61696d6564207768656e20746865204449442069732064656c657465642e0115074324576562334e616d65730124576562334e616d65730c144f776e6572000104022901190704000488204d6170206f66206e616d65202d3e206f776e6572736869702064657461696c732e144e616d65730001040200290104000458204d6170206f66206f776e6572202d3e206e616d652e1842616e6e6564000104022901b404000c4c204d6170206f66206e616d65202d3e2028292e00e02049662061206e616d65206b65792069732070726573656e742c20746865206e616d652069732063757272656e746c792062616e6e65642e010d050125010c1c4465706f736974184000d450a85d6b0000000000000000000004bc2054686520616d6f756e74206f66204b494c5420746f206465706f73697420746f20636c61696d2061206e616d652e344d696e4e616d654c656e677468201003000000048820546865206d696e20656e636f646564206c656e677468206f662061206e616d652e344d61784e616d654c656e677468201020000000048820546865206d617820656e636f646564206c656e677468206f662061206e616d652e011d0744445075626c696343726564656e7469616c7301445075626c696343726564656e7469616c73082c43726564656e7469616c7300010805022107250704000cc020546865206d6170206f66207075626c69632063726564656e7469616c7320616c72656164792061747465737465642ef0204974206d6170732066726f6d206120287375626a656374206964202b2063726564656e7469616c20696429202d3e20746865206372656174696f6e6c2064657461696c73206f66207468652063726564656e7469616c2e4843726564656e7469616c5375626a656374730001040230350104001025012041207265766572736520696e646578206d617070696e672066726f6d2063726564656e7469616c20494420746f20746865207375626a656374207468652063726564656e7469616c3c207761732069737375656420746f2e001901204974206974207573656420746f20706572666f726d20656666696369656e74206c6f6f6b7570206f662063726564656e7469616c7320676976656e2074686569722049442e0111050131010c1c4465706f7369741840005c6a51fc45000000000000000000000411012054686520616d6f756e74206f6620746f6b656e7320746f2072657365727665207768656e20617474657374696e672061207075626c69632063726564656e7469616c2e584d6178456e636f646564436c61696d734c656e6774682010a0860100040d0120546865206d6178696d756d206c656e67746820696e206279746573206f662074686520656e636f64656420636c61696d73206f6620612063726564656e7469616c2e484d61785375626a65637449644c656e67746820100c01000008e820546865206d6178696d756d206c656e67746820696e206279746573206f6620746865207261772063726564656e7469616c207375626a65637430206964656e7469666965722e012907453c50617261636861696e53797374656d013c50617261636861696e53797374656d545450656e64696e6756616c69646174696f6e436f64650100340400187d0120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f206265206170706c6965642e00c10120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f766572777269746520746865205b603a636f6465605d5b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455dad012077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f63657373207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e000501205b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d3a2073705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f4445444e657756616c69646174696f6e436f64650000340400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000290504000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f64650100ac040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d6265720100201000000000041d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e60557067726164655265737472696374696f6e5369676e616c01002d0704001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f6600003105040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000350704001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e000049070400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d71634865616401004d0780000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d7163486561647301005107040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301002010000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01002010000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d6573736167657301005d0704000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d657373616765730100ad0204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d657373616765730100ad02040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e84416e6e6f756e63656448726d704d6573736167657350657243616e646964617465010020100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000280400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000280400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e44417574686f72697a65645570677261646500006507040004b820546865206e65787420617574686f72697a656420757067726164652c206966207468657265206973206f6e652e60437573746f6d56616c69646174696f6e486561644461746100003404000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00190120536565205b6050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f64617461605d20666f72206d6f726520696e666f726d6174696f6e2e01210501a10100016907503450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100ad0110640000000000000000512458636d705175657565012458636d7051756575652844496e626f756e6458636d7053746174757301006d070400049420537461747573206f662074686520696e626f756e642058434d50206368616e6e656c732e4c496e626f756e6458636d704d657373616765730101080205850734040004190120496e626f756e64206167677265676174652058434d50206d657373616765732e2049742063616e206f6e6c79206265206f6e6520706572205061726149642f626c6f636b2e484f7574626f756e6458636d70537461747573010089070400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205950734040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402ad0134040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e6669670100990774020000000500000001000000821a06000008000700c817a804020004000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e284f76657277656967687400010405109d07040010050120546865206d657373616765732074686174206578636565646564206d617820696e646976696475616c206d65737361676520776569676874206275646765742e003901205468657365206d657373616765207374617920696e20746869732073746f72616765206d617020756e74696c207468657920617265206d616e75616c6c79206469737061746368656420766961582060736572766963655f6f766572776569676874602e50436f756e746572466f724f766572776569676874010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c4f766572776569676874436f756e7401001020000000000000000008690120546865206e756d626572206f66206f766572776569676874206d657373616765732065766572207265636f7264656420696e20604f766572776569676874602e20416c736f20646f75626c657320617320746865206e6578748420617661696c61626c652066726565206f76657277656967687420696e6465782e38517565756553757370656e6465640100ac04000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e01550501a5010001a107522c506f6c6b61646f7458636d0001590501b1010001a507532843756d756c757358636d00000185020001a9075420446d7051756575650120446d7051756575651434436f6e66696775726174696f6e0100ad07280700e40b540202000400044c2054686520636f6e66696775726174696f6e2e2450616765496e6465780100b1074000000000000000000000000000000000044020546865207061676520696e6465782e1450616765730101040220b50704000444205468652071756575652070616765732e284f7665727765696768740001040210b9070400046420546865206f766572776569676874206d657373616765732e50436f756e746572466f724f766572776569676874010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617001ad050189020001bd0755c107042048436865636b4e6f6e5a65726f53656e646572c907b440436865636b5370656356657273696f6ecd072038436865636b547856657273696f6ed1072030436865636b47656e65736973d5073038436865636b4d6f7274616c697479d9073028436865636b4e6f6e6365e107b42c436865636b576569676874e507b4604368617267655472616e73616374696f6e5061796d656e74e907b48504"} \ No newline at end of file diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index c1b9149a2..4a5b4be59 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/augment-api", - "version": "0.33.2-6", + "version": "0.34.0", "description": "", "types": "./lib/index.d.ts", "type": "module", diff --git a/packages/augment-api/src/interfaces/augment-api-consts.ts b/packages/augment-api/src/interfaces/augment-api-consts.ts index 499d4e269..0e7b78351 100644 --- a/packages/augment-api/src/interfaces/augment-api-consts.ts +++ b/packages/augment-api/src/interfaces/augment-api-consts.ts @@ -27,9 +27,24 @@ declare module '@polkadot/api-base/types/consts' { }; balances: { /** - * The minimum amount required to keep an account open. + * The minimum amount required to keep an account open. MUST BE GREATER THAN ZERO! + * + * If you *really* need it to be zero, you can enable the feature `insecure_zero_ed` for + * this pallet. However, you do so at your own risk: this will open up a major DoS vector. + * In case you have multiple sources of provider references, you may also get unexpected + * behaviour if you set this to zero. + * + * Bottom line: Do yourself a favour and make it at least one! **/ existentialDeposit: u128 & AugmentedConst; + /** + * The maximum number of individual freeze locks that can exist on an account at any time. + **/ + maxFreezes: u32 & AugmentedConst; + /** + * The maximum number of holds that can exist on an account at any time. + **/ + maxHolds: u32 & AugmentedConst; /** * The maximum number of locks that should exist on an account. * Not strictly enforced, but used for weight estimation. @@ -40,6 +55,12 @@ declare module '@polkadot/api-base/types/consts' { **/ maxReserves: u32 & AugmentedConst; }; + council: { + /** + * The maximum weight of a dispatch call that can be proposed and executed. + **/ + maxProposalWeight: SpWeightsWeightV2Weight & AugmentedConst; + }; delegation: { /** * The deposit that is required for storing a delegation. @@ -398,6 +419,10 @@ declare module '@polkadot/api-base/types/consts' { maximumWeight: SpWeightsWeightV2Weight & AugmentedConst; /** * The maximum number of scheduled calls in the queue for a single block. + * + * NOTE: + * + Dependent pallets' benchmarks might require a higher limit for the setting. Set a + * higher limit under `runtime-benchmarks` feature. **/ maxScheduledPerBlock: u32 & AugmentedConst; }; @@ -431,6 +456,12 @@ declare module '@polkadot/api-base/types/consts' { **/ version: SpVersionRuntimeVersion & AugmentedConst; }; + technicalCommittee: { + /** + * The maximum weight of a dispatch call that can be proposed and executed. + **/ + maxProposalWeight: SpWeightsWeightV2Weight & AugmentedConst; + }; timestamp: { /** * The minimum period between blocks. Beware that this is different to the *expected* diff --git a/packages/augment-api/src/interfaces/augment-api-errors.ts b/packages/augment-api/src/interfaces/augment-api-errors.ts index e61f6f75f..f5e44f400 100644 --- a/packages/augment-api/src/interfaces/augment-api-errors.ts +++ b/packages/augment-api/src/interfaces/augment-api-errors.ts @@ -43,35 +43,43 @@ declare module '@polkadot/api-base/types/errors' { }; balances: { /** - * Beneficiary account must pre-exist + * Beneficiary account must pre-exist. **/ DeadAccount: AugmentedError; /** - * Value too low to create account due to existential deposit + * Value too low to create account due to existential deposit. **/ ExistentialDeposit: AugmentedError; /** - * A vesting schedule already exists for this account + * A vesting schedule already exists for this account. **/ ExistingVestingSchedule: AugmentedError; + /** + * Transfer/payment would kill account. + **/ + Expendability: AugmentedError; /** * Balance too low to send value. **/ InsufficientBalance: AugmentedError; /** - * Transfer/payment would kill account + * Account liquidity restrictions prevent withdrawal. + **/ + LiquidityRestrictions: AugmentedError; + /** + * Number of freezes exceed `MaxFreezes`. **/ - KeepAlive: AugmentedError; + TooManyFreezes: AugmentedError; /** - * Account liquidity restrictions prevent withdrawal + * Number of holds exceed `MaxHolds`. **/ - LiquidityRestrictions: AugmentedError; + TooManyHolds: AugmentedError; /** - * Number of named reserves exceed MaxReserves + * Number of named reserves exceed `MaxReserves`. **/ TooManyReserves: AugmentedError; /** - * Vesting balance too high to send value + * Vesting balance too high to send value. **/ VestingBalance: AugmentedError; }; @@ -793,7 +801,7 @@ declare module '@polkadot/api-base/types/errors' { **/ Filtered: AugmentedError; /** - * The unlock operation cannot succeed because there are still users of the lock. + * The unlock operation cannot succeed because there are still consumers of the lock. **/ InUse: AugmentedError; /** diff --git a/packages/augment-api/src/interfaces/augment-api-events.ts b/packages/augment-api/src/interfaces/augment-api-events.ts index 99a192737..30e69029c 100644 --- a/packages/augment-api/src/interfaces/augment-api-events.ts +++ b/packages/augment-api/src/interfaces/augment-api-events.ts @@ -41,7 +41,11 @@ declare module '@polkadot/api-base/types/events' { /** * A balance was set by root. **/ - BalanceSet: AugmentedEvent; + BalanceSet: AugmentedEvent; + /** + * Some amount was burned from an account. + **/ + Burned: AugmentedEvent; /** * Some amount was deposited (e.g. for transaction fees). **/ @@ -55,6 +59,26 @@ declare module '@polkadot/api-base/types/events' { * An account was created with some free balance. **/ Endowed: AugmentedEvent; + /** + * Some balance was frozen. + **/ + Frozen: AugmentedEvent; + /** + * Total issuance was increased by `amount`, creating a credit to be balanced. + **/ + Issued: AugmentedEvent; + /** + * Some balance was locked. + **/ + Locked: AugmentedEvent; + /** + * Some amount was minted into an account. + **/ + Minted: AugmentedEvent; + /** + * Total issuance was decreased by `amount`, creating a debt to be balanced. + **/ + Rescinded: AugmentedEvent; /** * Some balance was reserved (moved from free to reserved). **/ @@ -64,18 +88,38 @@ declare module '@polkadot/api-base/types/events' { * Final argument indicates the destination balance type. **/ ReserveRepatriated: AugmentedEvent; + /** + * Some amount was restored into an account. + **/ + Restored: AugmentedEvent; /** * Some amount was removed from the account (e.g. for misbehavior). **/ Slashed: AugmentedEvent; + /** + * Some amount was suspended from an account (it can be restored later). + **/ + Suspended: AugmentedEvent; + /** + * Some balance was thawed. + **/ + Thawed: AugmentedEvent; /** * Transfer succeeded. **/ Transfer: AugmentedEvent; + /** + * Some balance was unlocked. + **/ + Unlocked: AugmentedEvent; /** * Some balance was unreserved (moved from reserved to free). **/ Unreserved: AugmentedEvent; + /** + * An account was upgraded. + **/ + Upgraded: AugmentedEvent; /** * Some amount was withdrawn from the account (e.g. for transaction fees). **/ diff --git a/packages/augment-api/src/interfaces/augment-api-query.ts b/packages/augment-api/src/interfaces/augment-api-query.ts index 2c3b2e9cc..b2506c179 100644 --- a/packages/augment-api/src/interfaces/augment-api-query.ts +++ b/packages/augment-api/src/interfaces/augment-api-query.ts @@ -9,7 +9,7 @@ import type { ApiTypes, AugmentedQuery, QueryableStorageEntry } from '@polkadot/ import type { BTreeMap, Bytes, Null, Option, U8aFixed, Vec, bool, u128, u16, u32, u64 } from '@polkadot/types-codec'; import type { AnyNumber, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, Call, H256 } from '@polkadot/types/interfaces/runtime'; -import type { AttestationAttestationsAttestationDetails, CtypeCtypeEntry, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DidDidDetails, DidServiceEndpointsDidEndpoint, FrameSupportDispatchPerDispatchClassWeight, FrameSupportPreimagesBounded, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReserveData, PalletCollectiveVotes, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupConnectionRecord, PalletDidLookupLinkableAccountLinkableAccountId, PalletMultisigMultisig, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletSchedulerScheduled, PalletTipsOpenTip, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesWeb3NameWeb3NameOwnership, ParachainStakingCandidate, ParachainStakingDelegationCounter, ParachainStakingInflationInflationInfo, ParachainStakingRoundInfo, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, PublicCredentialsCredentialsCredentialEntry, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, SpiritnetRuntimeSessionKeys } from '@polkadot/types/lookup'; +import type { AttestationAttestationsAttestationDetails, CtypeCtypeEntry, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DidDidDetails, DidServiceEndpointsDidEndpoint, FrameSupportDispatchPerDispatchClassWeight, FrameSupportPreimagesBounded, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesIdAmountRuntimeFreezeReason, PalletBalancesIdAmountRuntimeHoldReason, PalletBalancesReserveData, PalletCollectiveVotes, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupConnectionRecord, PalletDidLookupLinkableAccountLinkableAccountId, PalletMultisigMultisig, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletSchedulerScheduled, PalletTipsOpenTip, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesWeb3NameWeb3NameOwnership, ParachainStakingCandidate, ParachainStakingDelegationCounter, ParachainStakingInflationInflationInfo, ParachainStakingRoundInfo, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV4AbridgedHostConfiguration, PolkadotPrimitivesV4PersistedValidationData, PolkadotPrimitivesV4UpgradeRestriction, PublicCredentialsCredentialsCredentialEntry, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, SpiritnetRuntimeSessionKeys } from '@polkadot/types/lookup'; import type { Observable } from '@polkadot/types/types'; export type __AugmentedQuery = AugmentedQuery unknown>; @@ -87,6 +87,14 @@ declare module '@polkadot/api-base/types/storage' { * NOTE: This is only used in the case that this pallet is used to store balances. **/ account: AugmentedQuery Observable, [AccountId32]>; + /** + * Freeze locks on account balances. + **/ + freezes: AugmentedQuery Observable>, [AccountId32]>; + /** + * Holds on account balances. + **/ + holds: AugmentedQuery Observable>, [AccountId32]>; /** * The total units of outstanding deactivated balance in the system. **/ @@ -430,7 +438,7 @@ declare module '@polkadot/api-base/types/storage' { * * This data is also absent from the genesis. **/ - hostConfiguration: AugmentedQuery Observable>, []>; + hostConfiguration: AugmentedQuery Observable>, []>; /** * HRMP messages that were sent in a block. * @@ -526,7 +534,7 @@ declare module '@polkadot/api-base/types/storage' { * relay-chain. This value is ephemeral which means it doesn't hit the storage. This value is * set after the inherent. **/ - upgradeRestrictionSignal: AugmentedQuery Observable>, []>; + upgradeRestrictionSignal: AugmentedQuery Observable>, []>; /** * Upward messages that were sent in a block. * @@ -538,7 +546,7 @@ declare module '@polkadot/api-base/types/storage' { * This value is expected to be set only once per block and it's never stored * in the trie. **/ - validationData: AugmentedQuery Observable>, []>; + validationData: AugmentedQuery Observable>, []>; }; preimage: { preimageFor: AugmentedQuery | [H256 | string | Uint8Array, u32 | AnyNumber | Uint8Array]) => Observable>, [ITuple<[H256, u32]>]>; diff --git a/packages/augment-api/src/interfaces/augment-api-runtime.ts b/packages/augment-api/src/interfaces/augment-api-runtime.ts index 8dd92c730..9c5d8d675 100644 --- a/packages/augment-api/src/interfaces/augment-api-runtime.ts +++ b/packages/augment-api/src/interfaces/augment-api-runtime.ts @@ -102,12 +102,20 @@ declare module '@polkadot/api-base/types/calls' { **/ queryByWeb3Name: AugmentedCall Observable>>; }; - /** 0x37e397fc7c91f5e4/1 */ + /** 0x37e397fc7c91f5e4/2 */ metadata: { /** * Returns the metadata of a runtime **/ metadata: AugmentedCall Observable>; + /** + * Returns the metadata at a given version. + **/ + metadataAtVersion: AugmentedCall Observable>>; + /** + * Returns the supported metadata versions. + **/ + metadataVersions: AugmentedCall Observable>>; }; /** 0xf78b278be53f454c/2 */ offchainWorkerApi: { @@ -158,7 +166,7 @@ declare module '@polkadot/api-base/types/calls' { **/ validateTransaction: AugmentedCall Observable>; }; - /** 0x37c8bb1350a9a2a8/3 */ + /** 0x37c8bb1350a9a2a8/4 */ transactionPaymentApi: { /** * The transaction fee details diff --git a/packages/augment-api/src/interfaces/augment-api-tx.ts b/packages/augment-api/src/interfaces/augment-api-tx.ts index 63ab5404b..d41d2ff88 100644 --- a/packages/augment-api/src/interfaces/augment-api-tx.ts +++ b/packages/augment-api/src/interfaces/augment-api-tx.ts @@ -113,11 +113,14 @@ declare module '@polkadot/api-base/types/submittable' { }; balances: { /** - * Exactly as `transfer`, except the origin must be root and the source account may be - * specified. - * ## Complexity - * - Same as transfer, but additional read and write because the source account is not - * assumed to be in the overlay. + * Set the regular balance of a given account. + * + * The dispatch origin for this call is `root`. + **/ + forceSetBalance: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, newFree: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; + /** + * Exactly as `transfer_allow_death`, except the origin must be root and the source account + * may be specified. **/ forceTransfer: AugmentedSubmittable<(source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress, Compact]>; /** @@ -127,39 +130,18 @@ declare module '@polkadot/api-base/types/submittable' { **/ forceUnreserve: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u128]>; /** - * Set the balances of a given account. - * - * This will alter `FreeBalance` and `ReservedBalance` in storage. it will - * also alter the total issuance of the system (`TotalIssuance`) appropriately. - * If the new free or reserved balance is below the existential deposit, - * it will reset the account nonce (`frame_system::AccountNonce`). + * Set the regular balance of a given account; it also takes a reserved balance but this + * must be the same as the account's current reserved balance. * * The dispatch origin for this call is `root`. + * + * WARNING: This call is DEPRECATED! Use `force_set_balance` instead. **/ - setBalance: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, newFree: Compact | AnyNumber | Uint8Array, newReserved: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact, Compact]>; + setBalanceDeprecated: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, newFree: Compact | AnyNumber | Uint8Array, oldReserved: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact, Compact]>; /** - * Transfer some liquid free balance to another account. - * - * `transfer` will set the `FreeBalance` of the sender and receiver. - * If the sender's account is below the existential deposit as a result - * of the transfer, the account will be reaped. + * Alias for `transfer_allow_death`, provided only for name-wise compatibility. * - * The dispatch origin for this call must be `Signed` by the transactor. - * - * ## Complexity - * - Dependent on arguments but not critical, given proper implementations for input config - * types. See related functions below. - * - It contains a limited number of reads and writes internally and no complex - * computation. - * - * Related functions: - * - * - `ensure_can_withdraw` is always called internally but has a bounded complexity. - * - Transferring balances to accounts that did not exist before will cause - * `T::OnNewAccount::on_new_account` to be called. - * - Removing enough funds from an account will trigger `T::DustRemoval::on_unbalanced`. - * - `transfer_keep_alive` works the same way as `transfer`, but has an additional check - * that the transfer will not kill the origin account. + * WARNING: DEPRECATED! Will be released in approximately 3 months. **/ transfer: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; /** @@ -177,48 +159,41 @@ declare module '@polkadot/api-base/types/submittable' { * - `keep_alive`: A boolean to determine if the `transfer_all` operation should send all * of the funds the account has, causing the sender account to be killed (false), or * transfer everything except at least the existential deposit, which will guarantee to - * keep the sender account alive (true). ## Complexity - * - O(1). Just like transfer, but reading the user's transferable balance first. + * keep the sender account alive (true). **/ transferAll: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, keepAlive: bool | boolean | Uint8Array) => SubmittableExtrinsic, [MultiAddress, bool]>; /** - * Same as the [`transfer`] call, but with a check that the transfer will not kill the - * origin account. + * Transfer some liquid free balance to another account. * - * 99% of the time you want [`transfer`] instead. + * `transfer_allow_death` will set the `FreeBalance` of the sender and receiver. + * If the sender's account is below the existential deposit as a result + * of the transfer, the account will be reaped. * - * [`transfer`]: struct.Pallet.html#method.transfer + * The dispatch origin for this call must be `Signed` by the transactor. **/ - transferKeepAlive: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; - }; - council: { + transferAllowDeath: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; /** - * Close a vote that is either approved, disapproved or whose voting period has ended. + * Same as the [`transfer_allow_death`] call, but with a check that the transfer will not + * kill the origin account. * - * May be called by any signed account in order to finish voting and close the proposal. + * 99% of the time you want [`transfer_allow_death`] instead. * - * If called before the end of the voting period it will only close the vote if it is - * has enough votes to be approved or disapproved. - * - * If called after the end of the voting period abstentions are counted as rejections - * unless there is a prime member set and the prime member cast an approval. - * - * If the close operation completes successfully with disapproval, the transaction fee will - * be waived. Otherwise execution of the approved operation will be charged to the caller. + * [`transfer_allow_death`]: struct.Pallet.html#method.transfer + **/ + transferKeepAlive: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; + /** + * Upgrade a specified account. * - * + `proposal_weight_bound`: The maximum amount of weight consumed by executing the closed - * proposal. - * + `length_bound`: The upper bound for the length of the proposal in storage. Checked via - * `storage::read` so it is `size_of::() == 4` larger than the pure length. + * - `origin`: Must be `Signed`. + * - `who`: The account to be upgraded. * - * ## Complexity - * - `O(B + M + P1 + P2)` where: - * - `B` is `proposal` size in bytes (length-fee-bounded) - * - `M` is members-count (code- and governance-bounded) - * - `P1` is the complexity of `proposal` preimage. - * - `P2` is proposal-count (code-bounded) + * This will waive the transaction fee if at least all but 10% of the accounts needed to + * be upgraded. (We let some not have to be upgraded just in order to allow for the + * possibililty of churn). **/ - close: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, proposalWeightBound: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact, SpWeightsWeightV2Weight, Compact]>; + upgradeAccounts: AugmentedSubmittable<(who: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; + }; + council: { /** * Close a vote that is either approved, disapproved or whose voting period has ended. * @@ -245,7 +220,7 @@ declare module '@polkadot/api-base/types/submittable' { * - `P1` is the complexity of `proposal` preimage. * - `P2` is proposal-count (code-bounded) **/ - closeOldWeight: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, proposalWeightBound: Compact | AnyNumber | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact, Compact, Compact]>; + close: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, proposalWeightBound: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact, SpWeightsWeightV2Weight, Compact]>; /** * Disapprove a proposal, close, and remove it from the system, regardless of its current * state. @@ -1478,7 +1453,7 @@ declare module '@polkadot/api-base/types/submittable' { /** * Execute the network exit of a candidate who requested to leave at * least `ExitQueueDelay` rounds ago. Prepares unstaking of the - * candidates and their delegators stake which can be unlocked via + * candidates and their delegators stake which can be unfreezed via * `unlock_unstaked` after waiting at least `StakeDuration` many * blocks. * @@ -1523,7 +1498,7 @@ declare module '@polkadot/api-base/types/submittable' { * delegators. * * Prepares unstaking of the candidates and their delegators stake - * which can be unlocked via `unlock_unstaked` after waiting at + * which can be unfreezed via `unlock_unstaked` after waiting at * least `StakeDuration` many blocks. Also increments rewards for the * collator and their delegators. * @@ -1706,9 +1681,9 @@ declare module '@polkadot/api-base/types/submittable' { * * Weight: O(U) where U is the number of locked unstaking requests * bounded by `MaxUnstakeRequests`. - * - Reads: [Origin Account], Unstaking, Locks - * - Writes: Unstaking, Locks - * - Kills: Unstaking & Locks if no balance is locked anymore + * - Reads: [Origin Account], Unstaking, Freezes + * - Writes: Unstaking, Freezes + * - Kills: Unstaking & Freezes if no balance is locked anymore * # **/ unlockUnstaked: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; @@ -1770,22 +1745,29 @@ declare module '@polkadot/api-base/types/submittable' { * Set a safe XCM version (the version that XCM should be encoded with if the most recent * version a destination can accept is unknown). * - * - `origin`: Must be Root. + * - `origin`: Must be an origin specified by AdminOrigin. * - `maybe_xcm_version`: The default XCM encoding version, or `None` to disable. **/ forceDefaultXcmVersion: AugmentedSubmittable<(maybeXcmVersion: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [Option]>; /** * Ask a location to notify us regarding their XCM version and any changes to it. * - * - `origin`: Must be Root. + * - `origin`: Must be an origin specified by AdminOrigin. * - `location`: The location to which we should subscribe for XCM version notifications. **/ forceSubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation]>; + /** + * Set or unset the global suspension state of the XCM executor. + * + * - `origin`: Must be an origin specified by AdminOrigin. + * - `suspended`: `true` to suspend, `false` to resume. + **/ + forceSuspension: AugmentedSubmittable<(suspended: bool | boolean | Uint8Array) => SubmittableExtrinsic, [bool]>; /** * Require that a particular destination should no longer notify us regarding any XCM * version changes. * - * - `origin`: Must be Root. + * - `origin`: Must be an origin specified by AdminOrigin. * - `location`: The location to which we are currently subscribed for XCM version * notifications which we no longer desire. **/ @@ -1794,7 +1776,7 @@ declare module '@polkadot/api-base/types/submittable' { * Extoll that a particular destination can be communicated with through a particular * version of XCM. * - * - `origin`: Must be Root. + * - `origin`: Must be an origin specified by AdminOrigin. * - `location`: The destination that is being described. * - `xcm_version`: The latest version of XCM that `location` supports. **/ @@ -2214,7 +2196,6 @@ declare module '@polkadot/api-base/types/submittable' { /** * Make some on-chain remark. * - * ## Complexity * - `O(1)` **/ remark: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; @@ -2224,16 +2205,10 @@ declare module '@polkadot/api-base/types/submittable' { remarkWithEvent: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** * Set the new runtime code. - * - * ## Complexity - * - `O(C + S)` where `C` length of `code` and `S` complexity of `can_set_code` **/ setCode: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** * Set the new runtime code without doing any checks of the given `code`. - * - * ## Complexity - * - `O(C)` where `C` length of `code` **/ setCodeWithoutChecks: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** @@ -2273,33 +2248,6 @@ declare module '@polkadot/api-base/types/submittable' { * - `P2` is proposal-count (code-bounded) **/ close: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, proposalWeightBound: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact, SpWeightsWeightV2Weight, Compact]>; - /** - * Close a vote that is either approved, disapproved or whose voting period has ended. - * - * May be called by any signed account in order to finish voting and close the proposal. - * - * If called before the end of the voting period it will only close the vote if it is - * has enough votes to be approved or disapproved. - * - * If called after the end of the voting period abstentions are counted as rejections - * unless there is a prime member set and the prime member cast an approval. - * - * If the close operation completes successfully with disapproval, the transaction fee will - * be waived. Otherwise execution of the approved operation will be charged to the caller. - * - * + `proposal_weight_bound`: The maximum amount of weight consumed by executing the closed - * proposal. - * + `length_bound`: The upper bound for the length of the proposal in storage. Checked via - * `storage::read` so it is `size_of::() == 4` larger than the pure length. - * - * ## Complexity - * - `O(B + M + P1 + P2)` where: - * - `B` is `proposal` size in bytes (length-fee-bounded) - * - `M` is members-count (code- and governance-bounded) - * - `P1` is the complexity of `proposal` preimage. - * - `P2` is proposal-count (code-bounded) - **/ - closeOldWeight: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, proposalWeightBound: Compact | AnyNumber | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact, Compact, Compact]>; /** * Disapprove a proposal, close, and remove it from the system, regardless of its current * state. diff --git a/packages/augment-api/src/interfaces/lookup.ts b/packages/augment-api/src/interfaces/lookup.ts index 083ad3bac..6f37f496e 100644 --- a/packages/augment-api/src/interfaces/lookup.ts +++ b/packages/augment-api/src/interfaces/lookup.ts @@ -5,7 +5,7 @@ export default { /** - * Lookup3: frame_system::AccountInfo> + * Lookup3: frame_system::AccountInfo> **/ FrameSystemAccountInfo: { nonce: 'u64', @@ -15,16 +15,16 @@ export default { data: 'PalletBalancesAccountData' }, /** - * Lookup5: pallet_balances::AccountData + * Lookup5: pallet_balances::types::AccountData **/ PalletBalancesAccountData: { free: 'u128', reserved: 'u128', - miscFrozen: 'u128', - feeFrozen: 'u128' + frozen: 'u128', + flags: 'u128' }, /** - * Lookup8: frame_support::dispatch::PerDispatchClass + * Lookup9: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassWeight: { normal: 'SpWeightsWeightV2Weight', @@ -32,20 +32,20 @@ export default { mandatory: 'SpWeightsWeightV2Weight' }, /** - * Lookup9: sp_weights::weight_v2::Weight + * Lookup10: sp_weights::weight_v2::Weight **/ SpWeightsWeightV2Weight: { refTime: 'Compact', proofSize: 'Compact' }, /** - * Lookup13: sp_runtime::generic::digest::Digest + * Lookup14: sp_runtime::generic::digest::Digest **/ SpRuntimeDigest: { logs: 'Vec' }, /** - * Lookup15: sp_runtime::generic::digest::DigestItem + * Lookup16: sp_runtime::generic::digest::DigestItem **/ SpRuntimeDigestDigestItem: { _enum: { @@ -61,7 +61,7 @@ export default { } }, /** - * Lookup18: frame_system::EventRecord + * Lookup19: frame_system::EventRecord **/ FrameSystemEventRecord: { phase: 'FrameSystemPhase', @@ -69,7 +69,7 @@ export default { topics: 'Vec' }, /** - * Lookup20: frame_system::pallet::Event + * Lookup21: frame_system::pallet::Event **/ FrameSystemEvent: { _enum: { @@ -97,7 +97,7 @@ export default { } }, /** - * Lookup21: frame_support::dispatch::DispatchInfo + * Lookup22: frame_support::dispatch::DispatchInfo **/ FrameSupportDispatchDispatchInfo: { weight: 'SpWeightsWeightV2Weight', @@ -105,19 +105,19 @@ export default { paysFee: 'FrameSupportDispatchPays' }, /** - * Lookup22: frame_support::dispatch::DispatchClass + * Lookup23: frame_support::dispatch::DispatchClass **/ FrameSupportDispatchDispatchClass: { _enum: ['Normal', 'Operational', 'Mandatory'] }, /** - * Lookup23: frame_support::dispatch::Pays + * Lookup24: frame_support::dispatch::Pays **/ FrameSupportDispatchPays: { _enum: ['Yes', 'No'] }, /** - * Lookup24: sp_runtime::DispatchError + * Lookup25: sp_runtime::DispatchError **/ SpRuntimeDispatchError: { _enum: { @@ -133,36 +133,37 @@ export default { Transactional: 'SpRuntimeTransactionalError', Exhausted: 'Null', Corruption: 'Null', - Unavailable: 'Null' + Unavailable: 'Null', + RootNotAllowed: 'Null' } }, /** - * Lookup25: sp_runtime::ModuleError + * Lookup26: sp_runtime::ModuleError **/ SpRuntimeModuleError: { index: 'u8', error: '[u8;4]' }, /** - * Lookup26: sp_runtime::TokenError + * Lookup27: sp_runtime::TokenError **/ SpRuntimeTokenError: { - _enum: ['NoFunds', 'WouldDie', 'BelowMinimum', 'CannotCreate', 'UnknownAsset', 'Frozen', 'Unsupported'] + _enum: ['FundsUnavailable', 'OnlyProvider', 'BelowMinimum', 'CannotCreate', 'UnknownAsset', 'Frozen', 'Unsupported', 'CannotCreateHold', 'NotExpendable', 'Blocked'] }, /** - * Lookup27: sp_arithmetic::ArithmeticError + * Lookup28: sp_arithmetic::ArithmeticError **/ SpArithmeticArithmeticError: { _enum: ['Underflow', 'Overflow', 'DivisionByZero'] }, /** - * Lookup28: sp_runtime::TransactionalError + * Lookup29: sp_runtime::TransactionalError **/ SpRuntimeTransactionalError: { _enum: ['LimitReached', 'NoLayer'] }, /** - * Lookup29: pallet_indices::pallet::Event + * Lookup30: pallet_indices::pallet::Event **/ PalletIndicesEvent: { _enum: { @@ -180,7 +181,7 @@ export default { } }, /** - * Lookup30: pallet_balances::pallet::Event + * Lookup31: pallet_balances::pallet::Event **/ PalletBalancesEvent: { _enum: { @@ -200,7 +201,6 @@ export default { BalanceSet: { who: 'AccountId32', free: 'u128', - reserved: 'u128', }, Reserved: { who: 'AccountId32', @@ -225,19 +225,60 @@ export default { amount: 'u128', }, Slashed: { + who: 'AccountId32', + amount: 'u128', + }, + Minted: { + who: 'AccountId32', + amount: 'u128', + }, + Burned: { + who: 'AccountId32', + amount: 'u128', + }, + Suspended: { + who: 'AccountId32', + amount: 'u128', + }, + Restored: { + who: 'AccountId32', + amount: 'u128', + }, + Upgraded: { + who: 'AccountId32', + }, + Issued: { + amount: 'u128', + }, + Rescinded: { + amount: 'u128', + }, + Locked: { + who: 'AccountId32', + amount: 'u128', + }, + Unlocked: { + who: 'AccountId32', + amount: 'u128', + }, + Frozen: { + who: 'AccountId32', + amount: 'u128', + }, + Thawed: { who: 'AccountId32', amount: 'u128' } } }, /** - * Lookup31: frame_support::traits::tokens::misc::BalanceStatus + * Lookup32: frame_support::traits::tokens::misc::BalanceStatus **/ FrameSupportTokensMiscBalanceStatus: { _enum: ['Free', 'Reserved'] }, /** - * Lookup32: pallet_transaction_payment::pallet::Event + * Lookup33: pallet_transaction_payment::pallet::Event **/ PalletTransactionPaymentEvent: { _enum: { @@ -249,7 +290,7 @@ export default { } }, /** - * Lookup33: pallet_session::pallet::Event + * Lookup34: pallet_session::pallet::Event **/ PalletSessionEvent: { _enum: { @@ -259,7 +300,7 @@ export default { } }, /** - * Lookup34: parachain_staking::pallet::Event + * Lookup35: parachain_staking::pallet::Event **/ ParachainStakingEvent: { _enum: { @@ -287,7 +328,7 @@ export default { } }, /** - * Lookup36: pallet_democracy::pallet::Event + * Lookup37: pallet_democracy::pallet::Event **/ PalletDemocracyEvent: { _enum: { @@ -365,13 +406,13 @@ export default { } }, /** - * Lookup37: pallet_democracy::vote_threshold::VoteThreshold + * Lookup38: pallet_democracy::vote_threshold::VoteThreshold **/ PalletDemocracyVoteThreshold: { _enum: ['SuperMajorityApprove', 'SuperMajorityAgainst', 'SimpleMajority'] }, /** - * Lookup38: pallet_democracy::vote::AccountVote + * Lookup39: pallet_democracy::vote::AccountVote **/ PalletDemocracyVoteAccountVote: { _enum: { @@ -386,7 +427,7 @@ export default { } }, /** - * Lookup40: pallet_democracy::types::MetadataOwner + * Lookup41: pallet_democracy::types::MetadataOwner **/ PalletDemocracyMetadataOwner: { _enum: { @@ -396,7 +437,7 @@ export default { } }, /** - * Lookup41: pallet_collective::pallet::Event + * Lookup42: pallet_collective::pallet::Event **/ PalletCollectiveEvent: { _enum: { @@ -435,13 +476,13 @@ export default { } }, /** - * Lookup46: pallet_membership::pallet::Event + * Lookup47: pallet_membership::pallet::Event **/ PalletMembershipEvent: { _enum: ['MemberAdded', 'MemberRemoved', 'MembersSwapped', 'MembersReset', 'KeyChanged', 'Dummy'] }, /** - * Lookup47: pallet_treasury::pallet::Event + * Lookup48: pallet_treasury::pallet::Event **/ PalletTreasuryEvent: { _enum: { @@ -481,7 +522,7 @@ export default { } }, /** - * Lookup48: pallet_utility::pallet::Event + * Lookup49: pallet_utility::pallet::Event **/ PalletUtilityEvent: { _enum: { @@ -501,7 +542,7 @@ export default { } }, /** - * Lookup49: pallet_vesting::pallet::Event + * Lookup50: pallet_vesting::pallet::Event **/ PalletVestingEvent: { _enum: { @@ -515,7 +556,7 @@ export default { } }, /** - * Lookup50: pallet_scheduler::pallet::Event + * Lookup51: pallet_scheduler::pallet::Event **/ PalletSchedulerEvent: { _enum: { @@ -547,7 +588,7 @@ export default { } }, /** - * Lookup53: pallet_proxy::pallet::Event + * Lookup54: pallet_proxy::pallet::Event **/ PalletProxyEvent: { _enum: { @@ -580,13 +621,13 @@ export default { } }, /** - * Lookup54: spiritnet_runtime::ProxyType + * Lookup55: spiritnet_runtime::ProxyType **/ SpiritnetRuntimeProxyType: { _enum: ['Any', 'NonTransfer', 'Governance', 'ParachainStaking', 'CancelProxy', 'NonDepositClaiming'] }, /** - * Lookup56: pallet_preimage::pallet::Event + * Lookup57: pallet_preimage::pallet::Event **/ PalletPreimageEvent: { _enum: { @@ -611,7 +652,7 @@ export default { } }, /** - * Lookup58: pallet_tips::pallet::Event + * Lookup59: pallet_tips::pallet::Event **/ PalletTipsEvent: { _enum: { @@ -637,7 +678,7 @@ export default { } }, /** - * Lookup59: pallet_multisig::pallet::Event + * Lookup60: pallet_multisig::pallet::Event **/ PalletMultisigEvent: { _enum: { @@ -668,14 +709,14 @@ export default { } }, /** - * Lookup60: pallet_multisig::Timepoint + * Lookup61: pallet_multisig::Timepoint **/ PalletMultisigTimepoint: { height: 'u64', index: 'u32' }, /** - * Lookup61: ctype::pallet::Event + * Lookup62: ctype::pallet::Event **/ CtypeEvent: { _enum: { @@ -684,7 +725,7 @@ export default { } }, /** - * Lookup62: attestation::pallet::Event + * Lookup63: attestation::pallet::Event **/ AttestationEvent: { _enum: { @@ -695,7 +736,7 @@ export default { } }, /** - * Lookup64: runtime_common::authorization::AuthorizationId + * Lookup65: runtime_common::authorization::AuthorizationId **/ RuntimeCommonAuthorizationAuthorizationId: { _enum: { @@ -703,7 +744,7 @@ export default { } }, /** - * Lookup65: delegation::pallet::Event + * Lookup66: delegation::pallet::Event **/ DelegationEvent: { _enum: { @@ -717,13 +758,13 @@ export default { } }, /** - * Lookup66: delegation::delegation_hierarchy::Permissions + * Lookup67: delegation::delegation_hierarchy::Permissions **/ DelegationDelegationHierarchyPermissions: { bits: 'u32' }, /** - * Lookup67: did::pallet::Event + * Lookup68: did::pallet::Event **/ DidEvent: { _enum: { @@ -734,7 +775,7 @@ export default { } }, /** - * Lookup68: pallet_did_lookup::pallet::Event + * Lookup69: pallet_did_lookup::pallet::Event **/ PalletDidLookupEvent: { _enum: { @@ -745,7 +786,7 @@ export default { } }, /** - * Lookup69: pallet_did_lookup::linkable_account::LinkableAccountId + * Lookup70: pallet_did_lookup::linkable_account::LinkableAccountId **/ PalletDidLookupLinkableAccountLinkableAccountId: { _enum: { @@ -754,11 +795,11 @@ export default { } }, /** - * Lookup70: pallet_did_lookup::account::AccountId20 + * Lookup71: pallet_did_lookup::account::AccountId20 **/ PalletDidLookupAccountAccountId20: '[u8;20]', /** - * Lookup72: pallet_web3_names::pallet::Event + * Lookup73: pallet_web3_names::pallet::Event **/ PalletWeb3NamesEvent: { _enum: { @@ -779,7 +820,7 @@ export default { } }, /** - * Lookup75: public_credentials::pallet::Event + * Lookup76: public_credentials::pallet::Event **/ PublicCredentialsEvent: { _enum: { @@ -800,18 +841,18 @@ export default { } }, /** - * Lookup76: runtime_common::assets::AssetDid + * Lookup77: runtime_common::assets::AssetDid **/ RuntimeCommonAssetsAssetDid: 'KiltAssetDidsV1AssetDid', /** - * Lookup77: kilt_asset_dids::v1::AssetDid + * Lookup78: kilt_asset_dids::v1::AssetDid **/ KiltAssetDidsV1AssetDid: { chainId: 'KiltAssetDidsChainV1ChainId', assetId: 'KiltAssetDidsAssetV1AssetId' }, /** - * Lookup78: kilt_asset_dids::chain::v1::ChainId + * Lookup79: kilt_asset_dids::chain::v1::ChainId **/ KiltAssetDidsChainV1ChainId: { _enum: { @@ -823,18 +864,18 @@ export default { } }, /** - * Lookup80: kilt_asset_dids::chain::v1::GenesisHexHash32Reference + * Lookup81: kilt_asset_dids::chain::v1::GenesisHexHash32Reference **/ KiltAssetDidsChainV1GenesisHexHash32Reference: '[u8;16]', /** - * Lookup84: kilt_asset_dids::chain::v1::GenericChainId + * Lookup85: kilt_asset_dids::chain::v1::GenericChainId **/ KiltAssetDidsChainV1GenericChainId: { namespace: 'Bytes', reference: 'Bytes' }, /** - * Lookup88: kilt_asset_dids::asset::v1::AssetId + * Lookup89: kilt_asset_dids::asset::v1::AssetId **/ KiltAssetDidsAssetV1AssetId: { _enum: { @@ -846,15 +887,15 @@ export default { } }, /** - * Lookup92: kilt_asset_dids::asset::v1::EvmSmartContractFungibleReference + * Lookup93: kilt_asset_dids::asset::v1::EvmSmartContractFungibleReference **/ KiltAssetDidsAssetV1EvmSmartContractFungibleReference: '[u8;20]', /** - * Lookup93: kilt_asset_dids::asset::v1::EvmSmartContractNonFungibleReference + * Lookup94: kilt_asset_dids::asset::v1::EvmSmartContractNonFungibleReference **/ KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference: '(KiltAssetDidsAssetV1EvmSmartContractFungibleReference,Option)', /** - * Lookup97: kilt_asset_dids::asset::v1::GenericAssetId + * Lookup98: kilt_asset_dids::asset::v1::GenericAssetId **/ KiltAssetDidsAssetV1GenericAssetId: { namespace: 'Bytes', @@ -862,7 +903,7 @@ export default { id: 'Option' }, /** - * Lookup103: cumulus_pallet_parachain_system::pallet::Event + * Lookup104: cumulus_pallet_parachain_system::pallet::Event **/ CumulusPalletParachainSystemEvent: { _enum: { @@ -887,7 +928,7 @@ export default { } }, /** - * Lookup104: cumulus_pallet_xcmp_queue::pallet::Event + * Lookup105: cumulus_pallet_xcmp_queue::pallet::Event **/ CumulusPalletXcmpQueueEvent: { _enum: { @@ -922,7 +963,7 @@ export default { } }, /** - * Lookup105: xcm::v3::traits::Error + * Lookup106: xcm::v3::traits::Error **/ XcmV3TraitsError: { _enum: { @@ -969,7 +1010,7 @@ export default { } }, /** - * Lookup107: pallet_xcm::pallet::Event + * Lookup108: pallet_xcm::pallet::Event **/ PalletXcmEvent: { _enum: { @@ -999,7 +1040,7 @@ export default { } }, /** - * Lookup108: xcm::v3::traits::Outcome + * Lookup109: xcm::v3::traits::Outcome **/ XcmV3TraitsOutcome: { _enum: { @@ -1009,14 +1050,14 @@ export default { } }, /** - * Lookup109: xcm::v3::multilocation::MultiLocation + * Lookup110: xcm::v3::multilocation::MultiLocation **/ XcmV3MultiLocation: { parents: 'u8', interior: 'XcmV3Junctions' }, /** - * Lookup110: xcm::v3::junctions::Junctions + * Lookup111: xcm::v3::junctions::Junctions **/ XcmV3Junctions: { _enum: { @@ -1032,7 +1073,7 @@ export default { } }, /** - * Lookup111: xcm::v3::junction::Junction + * Lookup112: xcm::v3::junction::Junction **/ XcmV3Junction: { _enum: { @@ -1064,7 +1105,7 @@ export default { } }, /** - * Lookup114: xcm::v3::junction::NetworkId + * Lookup115: xcm::v3::junction::NetworkId **/ XcmV3JunctionNetworkId: { _enum: { @@ -1086,7 +1127,7 @@ export default { } }, /** - * Lookup116: xcm::v3::junction::BodyId + * Lookup117: xcm::v3::junction::BodyId **/ XcmV3JunctionBodyId: { _enum: { @@ -1103,7 +1144,7 @@ export default { } }, /** - * Lookup117: xcm::v3::junction::BodyPart + * Lookup118: xcm::v3::junction::BodyPart **/ XcmV3JunctionBodyPart: { _enum: { @@ -1126,11 +1167,11 @@ export default { } }, /** - * Lookup118: xcm::v3::Xcm + * Lookup119: xcm::v3::Xcm **/ XcmV3Xcm: 'Vec', /** - * Lookup120: xcm::v3::Instruction + * Lookup121: xcm::v3::Instruction **/ XcmV3Instruction: { _enum: { @@ -1272,18 +1313,18 @@ export default { } }, /** - * Lookup121: xcm::v3::multiasset::MultiAssets + * Lookup122: xcm::v3::multiasset::MultiAssets **/ XcmV3MultiassetMultiAssets: 'Vec', /** - * Lookup123: xcm::v3::multiasset::MultiAsset + * Lookup124: xcm::v3::multiasset::MultiAsset **/ XcmV3MultiAsset: { id: 'XcmV3MultiassetAssetId', fun: 'XcmV3MultiassetFungibility' }, /** - * Lookup124: xcm::v3::multiasset::AssetId + * Lookup125: xcm::v3::multiasset::AssetId **/ XcmV3MultiassetAssetId: { _enum: { @@ -1292,7 +1333,7 @@ export default { } }, /** - * Lookup125: xcm::v3::multiasset::Fungibility + * Lookup126: xcm::v3::multiasset::Fungibility **/ XcmV3MultiassetFungibility: { _enum: { @@ -1301,7 +1342,7 @@ export default { } }, /** - * Lookup126: xcm::v3::multiasset::AssetInstance + * Lookup127: xcm::v3::multiasset::AssetInstance **/ XcmV3MultiassetAssetInstance: { _enum: { @@ -1314,7 +1355,7 @@ export default { } }, /** - * Lookup128: xcm::v3::Response + * Lookup129: xcm::v3::Response **/ XcmV3Response: { _enum: { @@ -1327,7 +1368,7 @@ export default { } }, /** - * Lookup132: xcm::v3::PalletInfo + * Lookup133: xcm::v3::PalletInfo **/ XcmV3PalletInfo: { index: 'Compact', @@ -1338,7 +1379,7 @@ export default { patch: 'Compact' }, /** - * Lookup135: xcm::v3::MaybeErrorCode + * Lookup136: xcm::v3::MaybeErrorCode **/ XcmV3MaybeErrorCode: { _enum: { @@ -1348,19 +1389,19 @@ export default { } }, /** - * Lookup138: xcm::v2::OriginKind + * Lookup139: xcm::v2::OriginKind **/ XcmV2OriginKind: { _enum: ['Native', 'SovereignAccount', 'Superuser', 'Xcm'] }, /** - * Lookup139: xcm::double_encoded::DoubleEncoded + * Lookup140: xcm::double_encoded::DoubleEncoded **/ XcmDoubleEncoded: { encoded: 'Bytes' }, /** - * Lookup140: xcm::v3::QueryResponseInfo + * Lookup141: xcm::v3::QueryResponseInfo **/ XcmV3QueryResponseInfo: { destination: 'XcmV3MultiLocation', @@ -1368,7 +1409,7 @@ export default { maxWeight: 'SpWeightsWeightV2Weight' }, /** - * Lookup141: xcm::v3::multiasset::MultiAssetFilter + * Lookup142: xcm::v3::multiasset::MultiAssetFilter **/ XcmV3MultiassetMultiAssetFilter: { _enum: { @@ -1377,7 +1418,7 @@ export default { } }, /** - * Lookup142: xcm::v3::multiasset::WildMultiAsset + * Lookup143: xcm::v3::multiasset::WildMultiAsset **/ XcmV3MultiassetWildMultiAsset: { _enum: { @@ -1395,13 +1436,13 @@ export default { } }, /** - * Lookup143: xcm::v3::multiasset::WildFungibility + * Lookup144: xcm::v3::multiasset::WildFungibility **/ XcmV3MultiassetWildFungibility: { _enum: ['Fungible', 'NonFungible'] }, /** - * Lookup144: xcm::v3::WeightLimit + * Lookup145: xcm::v3::WeightLimit **/ XcmV3WeightLimit: { _enum: { @@ -1410,7 +1451,7 @@ export default { } }, /** - * Lookup145: xcm::VersionedMultiAssets + * Lookup146: xcm::VersionedMultiAssets **/ XcmVersionedMultiAssets: { _enum: { @@ -1421,18 +1462,18 @@ export default { } }, /** - * Lookup146: xcm::v2::multiasset::MultiAssets + * Lookup147: xcm::v2::multiasset::MultiAssets **/ XcmV2MultiassetMultiAssets: 'Vec', /** - * Lookup148: xcm::v2::multiasset::MultiAsset + * Lookup149: xcm::v2::multiasset::MultiAsset **/ XcmV2MultiAsset: { id: 'XcmV2MultiassetAssetId', fun: 'XcmV2MultiassetFungibility' }, /** - * Lookup149: xcm::v2::multiasset::AssetId + * Lookup150: xcm::v2::multiasset::AssetId **/ XcmV2MultiassetAssetId: { _enum: { @@ -1441,14 +1482,14 @@ export default { } }, /** - * Lookup150: xcm::v2::multilocation::MultiLocation + * Lookup151: xcm::v2::multilocation::MultiLocation **/ XcmV2MultiLocation: { parents: 'u8', interior: 'XcmV2MultilocationJunctions' }, /** - * Lookup151: xcm::v2::multilocation::Junctions + * Lookup152: xcm::v2::multilocation::Junctions **/ XcmV2MultilocationJunctions: { _enum: { @@ -1464,7 +1505,7 @@ export default { } }, /** - * Lookup152: xcm::v2::junction::Junction + * Lookup153: xcm::v2::junction::Junction **/ XcmV2Junction: { _enum: { @@ -1492,7 +1533,7 @@ export default { } }, /** - * Lookup153: xcm::v2::NetworkId + * Lookup154: xcm::v2::NetworkId **/ XcmV2NetworkId: { _enum: { @@ -1503,7 +1544,7 @@ export default { } }, /** - * Lookup155: xcm::v2::BodyId + * Lookup156: xcm::v2::BodyId **/ XcmV2BodyId: { _enum: { @@ -1520,7 +1561,7 @@ export default { } }, /** - * Lookup156: xcm::v2::BodyPart + * Lookup157: xcm::v2::BodyPart **/ XcmV2BodyPart: { _enum: { @@ -1543,7 +1584,7 @@ export default { } }, /** - * Lookup157: xcm::v2::multiasset::Fungibility + * Lookup158: xcm::v2::multiasset::Fungibility **/ XcmV2MultiassetFungibility: { _enum: { @@ -1552,7 +1593,7 @@ export default { } }, /** - * Lookup158: xcm::v2::multiasset::AssetInstance + * Lookup159: xcm::v2::multiasset::AssetInstance **/ XcmV2MultiassetAssetInstance: { _enum: { @@ -1566,7 +1607,7 @@ export default { } }, /** - * Lookup159: xcm::VersionedMultiLocation + * Lookup160: xcm::VersionedMultiLocation **/ XcmVersionedMultiLocation: { _enum: { @@ -1577,7 +1618,7 @@ export default { } }, /** - * Lookup160: cumulus_pallet_xcm::pallet::Event + * Lookup161: cumulus_pallet_xcm::pallet::Event **/ CumulusPalletXcmEvent: { _enum: { @@ -1587,7 +1628,7 @@ export default { } }, /** - * Lookup161: cumulus_pallet_dmp_queue::pallet::Event + * Lookup162: cumulus_pallet_dmp_queue::pallet::Event **/ CumulusPalletDmpQueueEvent: { _enum: { @@ -1621,7 +1662,7 @@ export default { } }, /** - * Lookup162: frame_system::Phase + * Lookup163: frame_system::Phase **/ FrameSystemPhase: { _enum: { @@ -1631,14 +1672,14 @@ export default { } }, /** - * Lookup165: frame_system::LastRuntimeUpgradeInfo + * Lookup166: frame_system::LastRuntimeUpgradeInfo **/ FrameSystemLastRuntimeUpgradeInfo: { specVersion: 'Compact', specName: 'Text' }, /** - * Lookup167: frame_system::pallet::Call + * Lookup168: frame_system::pallet::Call **/ FrameSystemCall: { _enum: { @@ -1673,7 +1714,7 @@ export default { } }, /** - * Lookup171: frame_system::limits::BlockWeights + * Lookup172: frame_system::limits::BlockWeights **/ FrameSystemLimitsBlockWeights: { baseBlock: 'SpWeightsWeightV2Weight', @@ -1681,7 +1722,7 @@ export default { perClass: 'FrameSupportDispatchPerDispatchClassWeightsPerClass' }, /** - * Lookup172: frame_support::dispatch::PerDispatchClass + * Lookup173: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassWeightsPerClass: { normal: 'FrameSystemLimitsWeightsPerClass', @@ -1689,7 +1730,7 @@ export default { mandatory: 'FrameSystemLimitsWeightsPerClass' }, /** - * Lookup173: frame_system::limits::WeightsPerClass + * Lookup174: frame_system::limits::WeightsPerClass **/ FrameSystemLimitsWeightsPerClass: { baseExtrinsic: 'SpWeightsWeightV2Weight', @@ -1698,13 +1739,13 @@ export default { reserved: 'Option' }, /** - * Lookup175: frame_system::limits::BlockLength + * Lookup176: frame_system::limits::BlockLength **/ FrameSystemLimitsBlockLength: { max: 'FrameSupportDispatchPerDispatchClassU32' }, /** - * Lookup176: frame_support::dispatch::PerDispatchClass + * Lookup177: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassU32: { normal: 'u32', @@ -1712,14 +1753,14 @@ export default { mandatory: 'u32' }, /** - * Lookup177: sp_weights::RuntimeDbWeight + * Lookup178: sp_weights::RuntimeDbWeight **/ SpWeightsRuntimeDbWeight: { read: 'u64', write: 'u64' }, /** - * Lookup178: sp_version::RuntimeVersion + * Lookup179: sp_version::RuntimeVersion **/ SpVersionRuntimeVersion: { specName: 'Text', @@ -1732,13 +1773,13 @@ export default { stateVersion: 'u8' }, /** - * Lookup182: frame_system::pallet::Error + * Lookup183: frame_system::pallet::Error **/ FrameSystemError: { _enum: ['InvalidSpecName', 'SpecVersionNeedsToIncrease', 'FailedToExtractRuntimeVersion', 'NonDefaultComposite', 'NonZeroRefCount', 'CallFiltered'] }, /** - * Lookup183: pallet_timestamp::pallet::Call + * Lookup184: pallet_timestamp::pallet::Call **/ PalletTimestampCall: { _enum: { @@ -1748,7 +1789,7 @@ export default { } }, /** - * Lookup185: pallet_indices::pallet::Call + * Lookup186: pallet_indices::pallet::Call **/ PalletIndicesCall: { _enum: { @@ -1779,13 +1820,13 @@ export default { } }, /** - * Lookup188: pallet_indices::pallet::Error + * Lookup189: pallet_indices::pallet::Error **/ PalletIndicesError: { _enum: ['NotAssigned', 'NotOwner', 'InUse', 'NotTransfer', 'Permanent'] }, /** - * Lookup190: pallet_balances::BalanceLock + * Lookup191: pallet_balances::types::BalanceLock **/ PalletBalancesBalanceLock: { id: '[u8;8]', @@ -1793,31 +1834,193 @@ export default { reasons: 'PalletBalancesReasons' }, /** - * Lookup191: pallet_balances::Reasons + * Lookup192: pallet_balances::types::Reasons **/ PalletBalancesReasons: { _enum: ['Fee', 'Misc', 'All'] }, /** - * Lookup194: pallet_balances::ReserveData + * Lookup195: pallet_balances::types::ReserveData **/ PalletBalancesReserveData: { id: '[u8;8]', amount: 'u128' }, /** - * Lookup196: pallet_balances::pallet::Call + * Lookup198: pallet_balances::types::IdAmount + **/ + PalletBalancesIdAmountRuntimeHoldReason: { + id: 'SpiritnetRuntimeRuntimeHoldReason', + amount: 'u128' + }, + /** + * Lookup199: spiritnet_runtime::RuntimeHoldReason + **/ + SpiritnetRuntimeRuntimeHoldReason: { + _enum: { + __Unused0: 'Null', + __Unused1: 'Null', + __Unused2: 'Null', + __Unused3: 'Null', + __Unused4: 'Null', + __Unused5: 'Null', + __Unused6: 'Null', + __Unused7: 'Null', + __Unused8: 'Null', + __Unused9: 'Null', + __Unused10: 'Null', + __Unused11: 'Null', + __Unused12: 'Null', + __Unused13: 'Null', + __Unused14: 'Null', + __Unused15: 'Null', + __Unused16: 'Null', + __Unused17: 'Null', + __Unused18: 'Null', + __Unused19: 'Null', + __Unused20: 'Null', + __Unused21: 'Null', + __Unused22: 'Null', + __Unused23: 'Null', + __Unused24: 'Null', + __Unused25: 'Null', + __Unused26: 'Null', + __Unused27: 'Null', + __Unused28: 'Null', + __Unused29: 'Null', + __Unused30: 'Null', + __Unused31: 'Null', + __Unused32: 'Null', + __Unused33: 'Null', + __Unused34: 'Null', + __Unused35: 'Null', + __Unused36: 'Null', + __Unused37: 'Null', + __Unused38: 'Null', + __Unused39: 'Null', + __Unused40: 'Null', + __Unused41: 'Null', + __Unused42: 'Null', + __Unused43: 'Null', + __Unused44: 'Null', + __Unused45: 'Null', + __Unused46: 'Null', + __Unused47: 'Null', + __Unused48: 'Null', + __Unused49: 'Null', + __Unused50: 'Null', + __Unused51: 'Null', + __Unused52: 'Null', + __Unused53: 'Null', + __Unused54: 'Null', + __Unused55: 'Null', + __Unused56: 'Null', + __Unused57: 'Null', + __Unused58: 'Null', + __Unused59: 'Null', + __Unused60: 'Null', + __Unused61: 'Null', + Attestation: 'AttestationHoldReason', + Delegation: 'DelegationHoldReason', + Did: 'DidHoldReason', + __Unused65: 'Null', + __Unused66: 'Null', + DidLookup: 'PalletDidLookupHoldReason', + Web3Names: 'PalletWeb3NamesHoldReason', + PublicCredentials: 'PublicCredentialsHoldReason' + } + }, + /** + * Lookup200: attestation::pallet::HoldReason + **/ + AttestationHoldReason: { + _enum: ['Deposit'] + }, + /** + * Lookup201: delegation::pallet::HoldReason + **/ + DelegationHoldReason: { + _enum: ['Deposit'] + }, + /** + * Lookup202: did::pallet::HoldReason + **/ + DidHoldReason: { + _enum: ['Deposit'] + }, + /** + * Lookup203: pallet_did_lookup::pallet::HoldReason + **/ + PalletDidLookupHoldReason: { + _enum: ['Deposit'] + }, + /** + * Lookup204: pallet_web3_names::pallet::HoldReason + **/ + PalletWeb3NamesHoldReason: { + _enum: ['Deposit'] + }, + /** + * Lookup205: public_credentials::pallet::HoldReason + **/ + PublicCredentialsHoldReason: { + _enum: ['Deposit'] + }, + /** + * Lookup208: pallet_balances::types::IdAmount + **/ + PalletBalancesIdAmountRuntimeFreezeReason: { + id: 'SpiritnetRuntimeRuntimeFreezeReason', + amount: 'u128' + }, + /** + * Lookup209: spiritnet_runtime::RuntimeFreezeReason + **/ + SpiritnetRuntimeRuntimeFreezeReason: { + _enum: { + __Unused0: 'Null', + __Unused1: 'Null', + __Unused2: 'Null', + __Unused3: 'Null', + __Unused4: 'Null', + __Unused5: 'Null', + __Unused6: 'Null', + __Unused7: 'Null', + __Unused8: 'Null', + __Unused9: 'Null', + __Unused10: 'Null', + __Unused11: 'Null', + __Unused12: 'Null', + __Unused13: 'Null', + __Unused14: 'Null', + __Unused15: 'Null', + __Unused16: 'Null', + __Unused17: 'Null', + __Unused18: 'Null', + __Unused19: 'Null', + __Unused20: 'Null', + ParachainStaking: 'ParachainStakingFreezeReason' + } + }, + /** + * Lookup210: parachain_staking::pallet::FreezeReason + **/ + ParachainStakingFreezeReason: { + _enum: ['Staking'] + }, + /** + * Lookup212: pallet_balances::pallet::Call **/ PalletBalancesCall: { _enum: { - transfer: { + transfer_allow_death: { dest: 'MultiAddress', value: 'Compact', }, - set_balance: { + set_balance_deprecated: { who: 'MultiAddress', newFree: 'Compact', - newReserved: 'Compact', + oldReserved: 'Compact', }, force_transfer: { source: 'MultiAddress', @@ -1834,42 +2037,53 @@ export default { }, force_unreserve: { who: 'MultiAddress', - amount: 'u128' + amount: 'u128', + }, + upgrade_accounts: { + who: 'Vec', + }, + transfer: { + dest: 'MultiAddress', + value: 'Compact', + }, + force_set_balance: { + who: 'MultiAddress', + newFree: 'Compact' } } }, /** - * Lookup197: pallet_balances::pallet::Error + * Lookup214: pallet_balances::pallet::Error **/ PalletBalancesError: { - _enum: ['VestingBalance', 'LiquidityRestrictions', 'InsufficientBalance', 'ExistentialDeposit', 'KeepAlive', 'ExistingVestingSchedule', 'DeadAccount', 'TooManyReserves'] + _enum: ['VestingBalance', 'LiquidityRestrictions', 'InsufficientBalance', 'ExistentialDeposit', 'Expendability', 'ExistingVestingSchedule', 'DeadAccount', 'TooManyReserves', 'TooManyHolds', 'TooManyFreezes'] }, /** - * Lookup199: pallet_transaction_payment::Releases + * Lookup216: pallet_transaction_payment::Releases **/ PalletTransactionPaymentReleases: { _enum: ['V1Ancient', 'V2'] }, /** - * Lookup201: sp_consensus_aura::sr25519::app_sr25519::Public + * Lookup218: sp_consensus_aura::sr25519::app_sr25519::Public **/ SpConsensusAuraSr25519AppSr25519Public: 'SpCoreSr25519Public', /** - * Lookup202: sp_core::sr25519::Public + * Lookup219: sp_core::sr25519::Public **/ SpCoreSr25519Public: '[u8;32]', /** - * Lookup208: spiritnet_runtime::SessionKeys + * Lookup224: spiritnet_runtime::SessionKeys **/ SpiritnetRuntimeSessionKeys: { aura: 'SpConsensusAuraSr25519AppSr25519Public' }, /** - * Lookup211: sp_core::crypto::KeyTypeId + * Lookup227: sp_core::crypto::KeyTypeId **/ SpCoreCryptoKeyTypeId: '[u8;4]', /** - * Lookup212: pallet_session::pallet::Call + * Lookup228: pallet_session::pallet::Call **/ PalletSessionCall: { _enum: { @@ -1884,13 +2098,13 @@ export default { } }, /** - * Lookup213: pallet_session::pallet::Error + * Lookup229: pallet_session::pallet::Error **/ PalletSessionError: { _enum: ['InvalidProof', 'NoAssociatedValidatorId', 'DuplicatedKey', 'NoKeys', 'NoAccount'] }, /** - * Lookup214: parachain_staking::types::RoundInfo + * Lookup230: parachain_staking::types::RoundInfo **/ ParachainStakingRoundInfo: { current: 'u32', @@ -1898,21 +2112,21 @@ export default { length: 'u64' }, /** - * Lookup215: parachain_staking::types::DelegationCounter + * Lookup231: parachain_staking::types::DelegationCounter **/ ParachainStakingDelegationCounter: { round: 'u32', counter: 'u32' }, /** - * Lookup216: parachain_staking::types::Stake + * Lookup232: parachain_staking::types::Stake **/ ParachainStakingStake: { owner: 'AccountId32', amount: 'u128' }, /** - * Lookup217: parachain_staking::types::Candidate + * Lookup233: parachain_staking::types::Candidate **/ ParachainStakingCandidate: { id: 'AccountId32', @@ -1922,11 +2136,11 @@ export default { status: 'ParachainStakingCandidateStatus' }, /** - * Lookup218: parachain_staking::set::OrderedSet, S> + * Lookup234: parachain_staking::set::OrderedSet, S> **/ ParachainStakingSetOrderedSet: 'Vec', /** - * Lookup221: parachain_staking::types::CandidateStatus + * Lookup237: parachain_staking::types::CandidateStatus **/ ParachainStakingCandidateStatus: { _enum: { @@ -1935,35 +2149,35 @@ export default { } }, /** - * Lookup222: parachain_staking::types::TotalStake + * Lookup238: parachain_staking::types::TotalStake **/ ParachainStakingTotalStake: { collators: 'u128', delegators: 'u128' }, /** - * Lookup225: parachain_staking::inflation::InflationInfo + * Lookup241: parachain_staking::inflation::InflationInfo **/ ParachainStakingInflationInflationInfo: { collator: 'ParachainStakingInflationStakingInfo', delegator: 'ParachainStakingInflationStakingInfo' }, /** - * Lookup226: parachain_staking::inflation::StakingInfo + * Lookup242: parachain_staking::inflation::StakingInfo **/ ParachainStakingInflationStakingInfo: { maxRate: 'Perquintill', rewardRate: 'ParachainStakingInflationRewardRate' }, /** - * Lookup227: parachain_staking::inflation::RewardRate + * Lookup243: parachain_staking::inflation::RewardRate **/ ParachainStakingInflationRewardRate: { annual: 'Perquintill', perBlock: 'Perquintill' }, /** - * Lookup232: parachain_staking::pallet::Call + * Lookup248: parachain_staking::pallet::Call **/ ParachainStakingCall: { _enum: { @@ -2030,13 +2244,13 @@ export default { } }, /** - * Lookup233: parachain_staking::pallet::Error + * Lookup249: parachain_staking::pallet::Error **/ ParachainStakingError: { _enum: ['DelegatorNotFound', 'CandidateNotFound', 'DelegatorExists', 'CandidateExists', 'ValStakeZero', 'ValStakeBelowMin', 'ValStakeAboveMax', 'DelegationBelowMin', 'AlreadyLeaving', 'NotLeaving', 'CannotLeaveYet', 'CannotJoinBeforeUnlocking', 'AlreadyDelegating', 'NotYetDelegating', 'DelegationsPerRoundExceeded', 'TooManyDelegators', 'TooFewCollatorCandidates', 'CannotStakeIfLeaving', 'CannotDelegateIfLeaving', 'MaxCollatorsPerDelegatorExceeded', 'AlreadyDelegatedCollator', 'DelegationNotFound', 'Underflow', 'CannotSetAboveMax', 'CannotSetBelowMin', 'InvalidSchedule', 'NoMoreUnstaking', 'TooEarly', 'StakeNotFound', 'UnstakingIsEmpty', 'RewardsNotFound'] }, /** - * Lookup236: frame_support::traits::preimages::Bounded + * Lookup252: frame_support::traits::preimages::Bounded **/ FrameSupportPreimagesBounded: { _enum: { @@ -2057,7 +2271,7 @@ export default { } }, /** - * Lookup238: pallet_democracy::pallet::Call + * Lookup254: pallet_democracy::pallet::Call **/ PalletDemocracyCall: { _enum: { @@ -2126,13 +2340,13 @@ export default { } }, /** - * Lookup239: pallet_democracy::conviction::Conviction + * Lookup255: pallet_democracy::conviction::Conviction **/ PalletDemocracyConviction: { _enum: ['None', 'Locked1x', 'Locked2x', 'Locked3x', 'Locked4x', 'Locked5x', 'Locked6x'] }, /** - * Lookup242: pallet_collective::pallet::Call + * Lookup258: pallet_collective::pallet::Call **/ PalletCollectiveCall: { _enum: { @@ -2155,12 +2369,7 @@ export default { index: 'Compact', approve: 'bool', }, - close_old_weight: { - proposalHash: 'H256', - index: 'Compact', - proposalWeightBound: 'Compact', - lengthBound: 'Compact', - }, + __Unused4: 'Null', disapprove_proposal: { proposalHash: 'H256', }, @@ -2173,7 +2382,7 @@ export default { } }, /** - * Lookup247: pallet_membership::pallet::Call + * Lookup261: pallet_membership::pallet::Call **/ PalletMembershipCall: { _enum: { @@ -2203,7 +2412,7 @@ export default { } }, /** - * Lookup248: pallet_treasury::pallet::Call + * Lookup262: pallet_treasury::pallet::Call **/ PalletTreasuryCall: { _enum: { @@ -2227,7 +2436,7 @@ export default { } }, /** - * Lookup249: pallet_utility::pallet::Call + * Lookup263: pallet_utility::pallet::Call **/ PalletUtilityCall: { _enum: { @@ -2255,7 +2464,7 @@ export default { } }, /** - * Lookup251: spiritnet_runtime::OriginCaller + * Lookup265: spiritnet_runtime::OriginCaller **/ SpiritnetRuntimeOriginCaller: { _enum: { @@ -2347,7 +2556,7 @@ export default { } }, /** - * Lookup252: frame_support::dispatch::RawOrigin + * Lookup266: frame_support::dispatch::RawOrigin **/ FrameSupportDispatchRawOrigin: { _enum: { @@ -2357,7 +2566,7 @@ export default { } }, /** - * Lookup253: pallet_collective::RawOrigin + * Lookup267: pallet_collective::RawOrigin **/ PalletCollectiveRawOrigin: { _enum: { @@ -2367,14 +2576,14 @@ export default { } }, /** - * Lookup255: did::origin::DidRawOrigin + * Lookup269: did::origin::DidRawOrigin **/ DidOriginDidRawOrigin: { id: 'AccountId32', submitter: 'AccountId32' }, /** - * Lookup256: pallet_xcm::pallet::Origin + * Lookup270: pallet_xcm::pallet::Origin **/ PalletXcmOrigin: { _enum: { @@ -2383,7 +2592,7 @@ export default { } }, /** - * Lookup257: cumulus_pallet_xcm::pallet::Origin + * Lookup271: cumulus_pallet_xcm::pallet::Origin **/ CumulusPalletXcmOrigin: { _enum: { @@ -2392,11 +2601,11 @@ export default { } }, /** - * Lookup258: sp_core::Void + * Lookup272: sp_core::Void **/ SpCoreVoid: 'Null', /** - * Lookup259: pallet_vesting::pallet::Call + * Lookup273: pallet_vesting::pallet::Call **/ PalletVestingCall: { _enum: { @@ -2420,7 +2629,7 @@ export default { } }, /** - * Lookup260: pallet_vesting::vesting_info::VestingInfo + * Lookup274: pallet_vesting::vesting_info::VestingInfo **/ PalletVestingVestingInfo: { locked: 'u128', @@ -2428,7 +2637,7 @@ export default { startingBlock: 'u64' }, /** - * Lookup261: pallet_scheduler::pallet::Call + * Lookup275: pallet_scheduler::pallet::Call **/ PalletSchedulerCall: { _enum: { @@ -2468,7 +2677,7 @@ export default { } }, /** - * Lookup263: pallet_proxy::pallet::Call + * Lookup277: pallet_proxy::pallet::Call **/ PalletProxyCall: { _enum: { @@ -2521,7 +2730,7 @@ export default { } }, /** - * Lookup265: pallet_preimage::pallet::Call + * Lookup279: pallet_preimage::pallet::Call **/ PalletPreimageCall: { _enum: { @@ -2549,7 +2758,7 @@ export default { } }, /** - * Lookup267: pallet_tips::pallet::Call + * Lookup281: pallet_tips::pallet::Call **/ PalletTipsCall: { _enum: { @@ -2590,7 +2799,7 @@ export default { } }, /** - * Lookup268: pallet_multisig::pallet::Call + * Lookup282: pallet_multisig::pallet::Call **/ PalletMultisigCall: { _enum: { @@ -2621,7 +2830,7 @@ export default { } }, /** - * Lookup270: ctype::pallet::Call + * Lookup284: ctype::pallet::Call **/ CtypeCall: { _enum: { @@ -2635,7 +2844,7 @@ export default { } }, /** - * Lookup271: attestation::pallet::Call + * Lookup285: attestation::pallet::Call **/ AttestationCall: { _enum: { @@ -2664,7 +2873,7 @@ export default { } }, /** - * Lookup273: runtime_common::authorization::PalletAuthorize> + * Lookup287: runtime_common::authorization::PalletAuthorize> **/ RuntimeCommonAuthorizationPalletAuthorize: { _enum: { @@ -2672,18 +2881,18 @@ export default { } }, /** - * Lookup274: delegation::access_control::DelegationAc + * Lookup288: delegation::access_control::DelegationAc **/ DelegationAccessControlDelegationAc: { subjectNodeId: 'H256', maxChecks: 'u32' }, /** - * Lookup275: spiritnet_runtime::Runtime + * Lookup289: spiritnet_runtime::Runtime **/ SpiritnetRuntimeRuntime: 'Null', /** - * Lookup276: delegation::pallet::Call + * Lookup290: delegation::pallet::Call **/ DelegationCall: { _enum: { @@ -2720,7 +2929,7 @@ export default { } }, /** - * Lookup277: did::did_details::DidSignature + * Lookup291: did::did_details::DidSignature **/ DidDidDetailsDidSignature: { _enum: { @@ -2730,19 +2939,19 @@ export default { } }, /** - * Lookup278: sp_core::ed25519::Signature + * Lookup292: sp_core::ed25519::Signature **/ SpCoreEd25519Signature: '[u8;64]', /** - * Lookup280: sp_core::sr25519::Signature + * Lookup294: sp_core::sr25519::Signature **/ SpCoreSr25519Signature: '[u8;64]', /** - * Lookup281: sp_core::ecdsa::Signature + * Lookup295: sp_core::ecdsa::Signature **/ SpCoreEcdsaSignature: '[u8;65]', /** - * Lookup283: did::pallet::Call + * Lookup297: did::pallet::Call **/ DidCall: { _enum: { @@ -2791,7 +3000,7 @@ export default { } }, /** - * Lookup284: did::did_details::DidCreationDetails + * Lookup298: did::did_details::DidCreationDetails> **/ DidDidDetailsDidCreationDetails: { did: 'AccountId32', @@ -2802,7 +3011,19 @@ export default { newServiceDetails: 'Vec' }, /** - * Lookup286: did::did_details::DidEncryptionKey + * Lookup299: runtime_common::constants::did::MaxNewKeyAgreementKeys + **/ + RuntimeCommonConstantsDidMaxNewKeyAgreementKeys: 'Null', + /** + * Lookup300: did::service_endpoints::DidEndpoint + **/ + DidServiceEndpointsDidEndpoint: { + id: 'Bytes', + serviceTypes: 'Vec', + urls: 'Vec' + }, + /** + * Lookup309: did::did_details::DidEncryptionKey **/ DidDidDetailsDidEncryptionKey: { _enum: { @@ -2810,7 +3031,7 @@ export default { } }, /** - * Lookup290: did::did_details::DidVerificationKey + * Lookup313: did::did_details::DidVerificationKey **/ DidDidDetailsDidVerificationKey: { _enum: { @@ -2820,23 +3041,15 @@ export default { } }, /** - * Lookup291: sp_core::ed25519::Public + * Lookup314: sp_core::ed25519::Public **/ SpCoreEd25519Public: '[u8;32]', /** - * Lookup292: sp_core::ecdsa::Public + * Lookup315: sp_core::ecdsa::Public **/ SpCoreEcdsaPublic: '[u8;33]', /** - * Lookup295: did::service_endpoints::DidEndpoint - **/ - DidServiceEndpointsDidEndpoint: { - id: 'Bytes', - serviceTypes: 'Vec', - urls: 'Vec' - }, - /** - * Lookup303: did::did_details::DidAuthorizedCallOperation + * Lookup318: did::did_details::DidAuthorizedCallOperation **/ DidDidDetailsDidAuthorizedCallOperation: { did: 'AccountId32', @@ -2846,7 +3059,7 @@ export default { submitter: 'AccountId32' }, /** - * Lookup304: pallet_did_lookup::pallet::Call + * Lookup319: pallet_did_lookup::pallet::Call **/ PalletDidLookupCall: { _enum: { @@ -2871,7 +3084,7 @@ export default { } }, /** - * Lookup305: pallet_did_lookup::associate_account_request::AssociateAccountRequest + * Lookup320: pallet_did_lookup::associate_account_request::AssociateAccountRequest **/ PalletDidLookupAssociateAccountRequest: { _enum: { @@ -2880,7 +3093,7 @@ export default { } }, /** - * Lookup306: sp_runtime::MultiSignature + * Lookup321: sp_runtime::MultiSignature **/ SpRuntimeMultiSignature: { _enum: { @@ -2890,11 +3103,11 @@ export default { } }, /** - * Lookup307: pallet_did_lookup::account::EthereumSignature + * Lookup322: pallet_did_lookup::account::EthereumSignature **/ PalletDidLookupAccountEthereumSignature: 'SpCoreEcdsaSignature', /** - * Lookup308: pallet_web3_names::pallet::Call + * Lookup323: pallet_web3_names::pallet::Call **/ PalletWeb3NamesCall: { _enum: { @@ -2918,7 +3131,7 @@ export default { } }, /** - * Lookup309: public_credentials::pallet::Call + * Lookup324: public_credentials::pallet::Call **/ PublicCredentialsCall: { _enum: { @@ -2949,7 +3162,7 @@ export default { } }, /** - * Lookup310: public_credentials::credentials::Credential, bounded_collections::bounded_vec::BoundedVec, runtime_common::authorization::PalletAuthorize>> + * Lookup325: public_credentials::credentials::Credential, bounded_collections::bounded_vec::BoundedVec, runtime_common::authorization::PalletAuthorize>> **/ PublicCredentialsCredentialsCredential: { ctypeHash: 'H256', @@ -2958,7 +3171,7 @@ export default { authorization: 'Option' }, /** - * Lookup313: cumulus_pallet_parachain_system::pallet::Call + * Lookup328: cumulus_pallet_parachain_system::pallet::Call **/ CumulusPalletParachainSystemCall: { _enum: { @@ -2978,45 +3191,45 @@ export default { } }, /** - * Lookup314: cumulus_primitives_parachain_inherent::ParachainInherentData + * Lookup329: cumulus_primitives_parachain_inherent::ParachainInherentData **/ CumulusPrimitivesParachainInherentParachainInherentData: { - validationData: 'PolkadotPrimitivesV2PersistedValidationData', + validationData: 'PolkadotPrimitivesV4PersistedValidationData', relayChainState: 'SpTrieStorageProof', downwardMessages: 'Vec', horizontalMessages: 'BTreeMap>' }, /** - * Lookup315: polkadot_primitives::v2::PersistedValidationData + * Lookup330: polkadot_primitives::v4::PersistedValidationData **/ - PolkadotPrimitivesV2PersistedValidationData: { + PolkadotPrimitivesV4PersistedValidationData: { parentHead: 'Bytes', relayParentNumber: 'u32', relayParentStorageRoot: 'H256', maxPovSize: 'u32' }, /** - * Lookup317: sp_trie::storage_proof::StorageProof + * Lookup332: sp_trie::storage_proof::StorageProof **/ SpTrieStorageProof: { trieNodes: 'BTreeSet' }, /** - * Lookup320: polkadot_core_primitives::InboundDownwardMessage + * Lookup335: polkadot_core_primitives::InboundDownwardMessage **/ PolkadotCorePrimitivesInboundDownwardMessage: { sentAt: 'u32', msg: 'Bytes' }, /** - * Lookup323: polkadot_core_primitives::InboundHrmpMessage + * Lookup338: polkadot_core_primitives::InboundHrmpMessage **/ PolkadotCorePrimitivesInboundHrmpMessage: { sentAt: 'u32', data: 'Bytes' }, /** - * Lookup326: cumulus_pallet_xcmp_queue::pallet::Call + * Lookup341: cumulus_pallet_xcmp_queue::pallet::Call **/ CumulusPalletXcmpQueueCall: { _enum: { @@ -3065,7 +3278,7 @@ export default { } }, /** - * Lookup327: pallet_xcm::pallet::Call + * Lookup342: pallet_xcm::pallet::Call **/ PalletXcmCall: { _enum: { @@ -3114,12 +3327,15 @@ export default { beneficiary: 'XcmVersionedMultiLocation', assets: 'XcmVersionedMultiAssets', feeAssetItem: 'u32', - weightLimit: 'XcmV3WeightLimit' + weightLimit: 'XcmV3WeightLimit', + }, + force_suspension: { + suspended: 'bool' } } }, /** - * Lookup328: xcm::VersionedXcm + * Lookup343: xcm::VersionedXcm **/ XcmVersionedXcm: { _enum: { @@ -3130,11 +3346,11 @@ export default { } }, /** - * Lookup329: xcm::v2::Xcm + * Lookup344: xcm::v2::Xcm **/ XcmV2Xcm: 'Vec', /** - * Lookup331: xcm::v2::Instruction + * Lookup346: xcm::v2::Instruction **/ XcmV2Instruction: { _enum: { @@ -3232,7 +3448,7 @@ export default { } }, /** - * Lookup332: xcm::v2::Response + * Lookup347: xcm::v2::Response **/ XcmV2Response: { _enum: { @@ -3243,7 +3459,7 @@ export default { } }, /** - * Lookup335: xcm::v2::traits::Error + * Lookup350: xcm::v2::traits::Error **/ XcmV2TraitsError: { _enum: { @@ -3276,7 +3492,7 @@ export default { } }, /** - * Lookup336: xcm::v2::multiasset::MultiAssetFilter + * Lookup351: xcm::v2::multiasset::MultiAssetFilter **/ XcmV2MultiassetMultiAssetFilter: { _enum: { @@ -3285,7 +3501,7 @@ export default { } }, /** - * Lookup337: xcm::v2::multiasset::WildMultiAsset + * Lookup352: xcm::v2::multiasset::WildMultiAsset **/ XcmV2MultiassetWildMultiAsset: { _enum: { @@ -3297,13 +3513,13 @@ export default { } }, /** - * Lookup338: xcm::v2::multiasset::WildFungibility + * Lookup353: xcm::v2::multiasset::WildFungibility **/ XcmV2MultiassetWildFungibility: { _enum: ['Fungible', 'NonFungible'] }, /** - * Lookup339: xcm::v2::WeightLimit + * Lookup354: xcm::v2::WeightLimit **/ XcmV2WeightLimit: { _enum: { @@ -3312,7 +3528,7 @@ export default { } }, /** - * Lookup348: cumulus_pallet_dmp_queue::pallet::Call + * Lookup363: cumulus_pallet_dmp_queue::pallet::Call **/ CumulusPalletDmpQueueCall: { _enum: { @@ -3323,7 +3539,7 @@ export default { } }, /** - * Lookup352: pallet_democracy::types::ReferendumInfo, Balance> + * Lookup367: pallet_democracy::types::ReferendumInfo, Balance> **/ PalletDemocracyReferendumInfo: { _enum: { @@ -3335,7 +3551,7 @@ export default { } }, /** - * Lookup353: pallet_democracy::types::ReferendumStatus, Balance> + * Lookup368: pallet_democracy::types::ReferendumStatus, Balance> **/ PalletDemocracyReferendumStatus: { end: 'u64', @@ -3345,7 +3561,7 @@ export default { tally: 'PalletDemocracyTally' }, /** - * Lookup354: pallet_democracy::types::Tally + * Lookup369: pallet_democracy::types::Tally **/ PalletDemocracyTally: { ayes: 'u128', @@ -3353,7 +3569,7 @@ export default { turnout: 'u128' }, /** - * Lookup355: pallet_democracy::vote::Voting + * Lookup370: pallet_democracy::vote::Voting **/ PalletDemocracyVoteVoting: { _enum: { @@ -3372,24 +3588,24 @@ export default { } }, /** - * Lookup359: pallet_democracy::types::Delegations + * Lookup374: pallet_democracy::types::Delegations **/ PalletDemocracyDelegations: { votes: 'u128', capital: 'u128' }, /** - * Lookup360: pallet_democracy::vote::PriorLock + * Lookup375: pallet_democracy::vote::PriorLock **/ PalletDemocracyVotePriorLock: '(u64,u128)', /** - * Lookup363: pallet_democracy::pallet::Error + * Lookup378: pallet_democracy::pallet::Error **/ PalletDemocracyError: { _enum: ['ValueLow', 'ProposalMissing', 'AlreadyCanceled', 'DuplicateProposal', 'ProposalBlacklisted', 'NotSimpleMajority', 'InvalidHash', 'NoProposal', 'AlreadyVetoed', 'ReferendumInvalid', 'NoneWaiting', 'NotVoter', 'NoPermission', 'AlreadyDelegating', 'InsufficientFunds', 'NotDelegating', 'VotesExist', 'InstantNotAllowed', 'Nonsense', 'WrongUpperBound', 'MaxVotesReached', 'TooMany', 'VotingPeriodLow', 'PreimageNotExist'] }, /** - * Lookup365: pallet_collective::Votes + * Lookup380: pallet_collective::Votes **/ PalletCollectiveVotes: { index: 'u32', @@ -3399,19 +3615,19 @@ export default { end: 'u64' }, /** - * Lookup366: pallet_collective::pallet::Error + * Lookup381: pallet_collective::pallet::Error **/ PalletCollectiveError: { _enum: ['NotMember', 'DuplicateProposal', 'ProposalMissing', 'WrongIndex', 'DuplicateVote', 'AlreadyInitialized', 'TooEarly', 'TooManyProposals', 'WrongProposalWeight', 'WrongProposalLength'] }, /** - * Lookup370: pallet_membership::pallet::Error + * Lookup385: pallet_membership::pallet::Error **/ PalletMembershipError: { _enum: ['AlreadyMember', 'NotMember', 'TooManyMembers'] }, /** - * Lookup371: pallet_treasury::Proposal + * Lookup386: pallet_treasury::Proposal **/ PalletTreasuryProposal: { proposer: 'AccountId32', @@ -3420,35 +3636,35 @@ export default { bond: 'u128' }, /** - * Lookup375: frame_support::PalletId + * Lookup390: frame_support::PalletId **/ FrameSupportPalletId: '[u8;8]', /** - * Lookup376: pallet_treasury::pallet::Error + * Lookup391: pallet_treasury::pallet::Error **/ PalletTreasuryError: { _enum: ['InsufficientProposersBalance', 'InvalidIndex', 'TooManyApprovals', 'InsufficientPermission', 'ProposalNotApproved'] }, /** - * Lookup377: pallet_utility::pallet::Error + * Lookup392: pallet_utility::pallet::Error **/ PalletUtilityError: { _enum: ['TooManyCalls'] }, /** - * Lookup380: pallet_vesting::Releases + * Lookup395: pallet_vesting::Releases **/ PalletVestingReleases: { _enum: ['V0', 'V1'] }, /** - * Lookup381: pallet_vesting::pallet::Error + * Lookup396: pallet_vesting::pallet::Error **/ PalletVestingError: { _enum: ['NotVesting', 'AtMaxVestingSchedules', 'AmountLow', 'ScheduleIndexOutOfBounds', 'InvalidScheduleParams'] }, /** - * Lookup384: pallet_scheduler::Scheduled, BlockNumber, spiritnet_runtime::OriginCaller, sp_core::crypto::AccountId32> + * Lookup399: pallet_scheduler::Scheduled, BlockNumber, spiritnet_runtime::OriginCaller, sp_core::crypto::AccountId32> **/ PalletSchedulerScheduled: { maybeId: 'Option<[u8;32]>', @@ -3458,13 +3674,13 @@ export default { origin: 'SpiritnetRuntimeOriginCaller' }, /** - * Lookup386: pallet_scheduler::pallet::Error + * Lookup401: pallet_scheduler::pallet::Error **/ PalletSchedulerError: { _enum: ['FailedToSchedule', 'NotFound', 'TargetBlockNumberInPast', 'RescheduleNoChange', 'Named'] }, /** - * Lookup389: pallet_proxy::ProxyDefinition + * Lookup404: pallet_proxy::ProxyDefinition **/ PalletProxyProxyDefinition: { delegate: 'AccountId32', @@ -3472,7 +3688,7 @@ export default { delay: 'u64' }, /** - * Lookup393: pallet_proxy::Announcement + * Lookup408: pallet_proxy::Announcement **/ PalletProxyAnnouncement: { real: 'AccountId32', @@ -3480,13 +3696,13 @@ export default { height: 'u64' }, /** - * Lookup395: pallet_proxy::pallet::Error + * Lookup410: pallet_proxy::pallet::Error **/ PalletProxyError: { _enum: ['TooMany', 'NotFound', 'NotProxy', 'Unproxyable', 'Duplicate', 'NoPermission', 'Unannounced', 'NoSelfProxy'] }, /** - * Lookup396: pallet_preimage::RequestStatus + * Lookup411: pallet_preimage::RequestStatus **/ PalletPreimageRequestStatus: { _enum: { @@ -3502,13 +3718,13 @@ export default { } }, /** - * Lookup401: pallet_preimage::pallet::Error + * Lookup416: pallet_preimage::pallet::Error **/ PalletPreimageError: { _enum: ['TooBig', 'AlreadyNoted', 'NotAuthorized', 'NotNoted', 'Requested', 'NotRequested'] }, /** - * Lookup404: pallet_tips::OpenTip + * Lookup419: pallet_tips::OpenTip **/ PalletTipsOpenTip: { reason: 'H256', @@ -3520,13 +3736,13 @@ export default { findersFee: 'bool' }, /** - * Lookup408: pallet_tips::pallet::Error + * Lookup423: pallet_tips::pallet::Error **/ PalletTipsError: { _enum: ['ReasonTooBig', 'AlreadyKnown', 'UnknownTip', 'NotFinder', 'StillOpen', 'Premature'] }, /** - * Lookup410: pallet_multisig::Multisig + * Lookup425: pallet_multisig::Multisig **/ PalletMultisigMultisig: { when: 'PalletMultisigTimepoint', @@ -3535,26 +3751,26 @@ export default { approvals: 'Vec' }, /** - * Lookup412: pallet_multisig::pallet::Error + * Lookup427: pallet_multisig::pallet::Error **/ PalletMultisigError: { _enum: ['MinimumThreshold', 'AlreadyApproved', 'NoApprovalsNeeded', 'TooFewSignatories', 'TooManySignatories', 'SignatoriesOutOfOrder', 'SenderInSignatories', 'NotFound', 'NotOwner', 'NoTimepoint', 'WrongTimepoint', 'UnexpectedTimepoint', 'MaxWeightTooLow', 'AlreadyStored'] }, /** - * Lookup413: ctype::ctype_entry::CtypeEntry + * Lookup428: ctype::ctype_entry::CtypeEntry **/ CtypeCtypeEntry: { creator: 'AccountId32', createdAt: 'u64' }, /** - * Lookup414: ctype::pallet::Error + * Lookup429: ctype::pallet::Error **/ CtypeError: { _enum: ['NotFound', 'AlreadyExists', 'UnableToPayFees'] }, /** - * Lookup415: attestation::attestations::AttestationDetails + * Lookup430: attestation::attestations::AttestationDetails, sp_core::crypto::AccountId32, Balance> **/ AttestationAttestationsAttestationDetails: { ctypeHash: 'H256', @@ -3564,20 +3780,20 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup416: kilt_support::deposit::Deposit + * Lookup431: kilt_support::deposit::Deposit **/ KiltSupportDeposit: { owner: 'AccountId32', amount: 'u128' }, /** - * Lookup418: attestation::pallet::Error + * Lookup433: attestation::pallet::Error **/ AttestationError: { _enum: ['AlreadyAttested', 'AlreadyRevoked', 'NotFound', 'CTypeMismatch', 'NotAuthorized', 'MaxDelegatedAttestationsExceeded'] }, /** - * Lookup419: delegation::delegation_hierarchy::DelegationNode + * Lookup434: delegation::delegation_hierarchy::DelegationNode, sp_core::crypto::AccountId32, Balance> **/ DelegationDelegationHierarchyDelegationNode: { hierarchyRootId: 'H256', @@ -3587,7 +3803,11 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup422: delegation::delegation_hierarchy::DelegationDetails + * Lookup435: runtime_common::constants::delegation::MaxChildren + **/ + RuntimeCommonConstantsDelegationMaxChildren: 'Null', + /** + * Lookup436: delegation::delegation_hierarchy::DelegationDetails **/ DelegationDelegationHierarchyDelegationDetails: { owner: 'AccountId32', @@ -3595,19 +3815,19 @@ export default { permissions: 'DelegationDelegationHierarchyPermissions' }, /** - * Lookup423: delegation::delegation_hierarchy::DelegationHierarchyDetails + * Lookup439: delegation::delegation_hierarchy::DelegationHierarchyDetails **/ DelegationDelegationHierarchyDelegationHierarchyDetails: { ctypeHash: 'H256' }, /** - * Lookup424: delegation::pallet::Error + * Lookup440: delegation::pallet::Error **/ DelegationError: { _enum: ['DelegationAlreadyExists', 'InvalidDelegateSignature', 'DelegationNotFound', 'DelegateNotFound', 'HierarchyAlreadyExists', 'HierarchyNotFound', 'MaxSearchDepthReached', 'NotOwnerOfParentDelegation', 'NotOwnerOfDelegationHierarchy', 'ParentDelegationNotFound', 'ParentDelegationRevoked', 'UnauthorizedRevocation', 'UnauthorizedRemoval', 'UnauthorizedDelegation', 'AccessDenied', 'ExceededRevocationBounds', 'ExceededRemovalBounds', 'MaxRevocationsTooLarge', 'MaxRemovalsTooLarge', 'MaxParentChecksTooLarge', 'Internal', 'MaxChildrenExceeded'] }, /** - * Lookup425: did::did_details::DidDetails + * Lookup441: did::did_details::DidDetails **/ DidDidDetails: { authenticationKey: 'H256', @@ -3619,14 +3839,14 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup428: did::did_details::DidPublicKeyDetails + * Lookup444: did::did_details::DidPublicKeyDetails **/ DidDidDetailsDidPublicKeyDetails: { key: 'DidDidDetailsDidPublicKey', blockNumber: 'u64' }, /** - * Lookup429: did::did_details::DidPublicKey + * Lookup445: did::did_details::DidPublicKey **/ DidDidDetailsDidPublicKey: { _enum: { @@ -3635,26 +3855,26 @@ export default { } }, /** - * Lookup434: did::pallet::Error + * Lookup450: did::pallet::Error **/ DidError: { _enum: ['InvalidSignatureFormat', 'InvalidSignature', 'AlreadyExists', 'NotFound', 'VerificationKeyNotFound', 'InvalidNonce', 'UnsupportedDidAuthorizationCall', 'InvalidDidAuthorizationCall', 'MaxNewKeyAgreementKeysLimitExceeded', 'MaxPublicKeysExceeded', 'MaxKeyAgreementKeysExceeded', 'BadDidOrigin', 'TransactionExpired', 'AlreadyDeleted', 'NotOwnerOfDeposit', 'UnableToPayFees', 'MaxNumberOfServicesExceeded', 'MaxServiceIdLengthExceeded', 'MaxServiceTypeLengthExceeded', 'MaxNumberOfTypesPerServiceExceeded', 'MaxServiceUrlLengthExceeded', 'MaxNumberOfUrlsPerServiceExceeded', 'ServiceAlreadyExists', 'ServiceNotFound', 'InvalidServiceEncoding', 'MaxStoredEndpointsCountExceeded', 'Internal'] }, /** - * Lookup435: pallet_did_lookup::connection_record::ConnectionRecord + * Lookup451: pallet_did_lookup::connection_record::ConnectionRecord **/ PalletDidLookupConnectionRecord: { did: 'AccountId32', deposit: 'KiltSupportDeposit' }, /** - * Lookup437: pallet_did_lookup::pallet::Error + * Lookup453: pallet_did_lookup::pallet::Error **/ PalletDidLookupError: { _enum: ['NotFound', 'NotAuthorized', 'OutdatedProof', 'InsufficientFunds', 'Migration'] }, /** - * Lookup438: pallet_web3_names::web3_name::Web3NameOwnership, BlockNumber> + * Lookup454: pallet_web3_names::web3_name::Web3NameOwnership, BlockNumber> **/ PalletWeb3NamesWeb3NameWeb3NameOwnership: { owner: 'AccountId32', @@ -3662,13 +3882,13 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup439: pallet_web3_names::pallet::Error + * Lookup455: pallet_web3_names::pallet::Error **/ PalletWeb3NamesError: { _enum: ['InsufficientFunds', 'AlreadyExists', 'NotFound', 'OwnerAlreadyExists', 'OwnerNotFound', 'Banned', 'NotBanned', 'AlreadyBanned', 'NotAuthorized', 'TooShort', 'TooLong', 'InvalidCharacter'] }, /** - * Lookup441: public_credentials::credentials::CredentialEntry> + * Lookup457: public_credentials::credentials::CredentialEntry> **/ PublicCredentialsCredentialsCredentialEntry: { ctypeHash: 'H256', @@ -3679,30 +3899,37 @@ export default { authorizationId: 'Option' }, /** - * Lookup442: public_credentials::pallet::Error + * Lookup458: public_credentials::pallet::Error **/ PublicCredentialsError: { _enum: ['AlreadyAttested', 'NotFound', 'UnableToPayFees', 'InvalidInput', 'NotAuthorized', 'Internal'] }, /** - * Lookup444: polkadot_primitives::v2::UpgradeRestriction + * Lookup460: polkadot_primitives::v4::UpgradeRestriction **/ - PolkadotPrimitivesV2UpgradeRestriction: { + PolkadotPrimitivesV4UpgradeRestriction: { _enum: ['Present'] }, /** - * Lookup445: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot + * Lookup461: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot **/ CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: { dmqMqcHead: 'H256', - relayDispatchQueueSize: '(u32,u32)', - ingressChannels: 'Vec<(u32,PolkadotPrimitivesV2AbridgedHrmpChannel)>', - egressChannels: 'Vec<(u32,PolkadotPrimitivesV2AbridgedHrmpChannel)>' + relayDispatchQueueSize: 'CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize', + ingressChannels: 'Vec<(u32,PolkadotPrimitivesV4AbridgedHrmpChannel)>', + egressChannels: 'Vec<(u32,PolkadotPrimitivesV4AbridgedHrmpChannel)>' + }, + /** + * Lookup462: cumulus_pallet_parachain_system::relay_state_snapshot::RelayDispachQueueSize + **/ + CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize: { + remainingCount: 'u32', + remainingSize: 'u32' }, /** - * Lookup449: polkadot_primitives::v2::AbridgedHrmpChannel + * Lookup465: polkadot_primitives::v4::AbridgedHrmpChannel **/ - PolkadotPrimitivesV2AbridgedHrmpChannel: { + PolkadotPrimitivesV4AbridgedHrmpChannel: { maxCapacity: 'u32', maxTotalSize: 'u32', maxMessageSize: 'u32', @@ -3711,9 +3938,9 @@ export default { mqcHead: 'Option' }, /** - * Lookup450: polkadot_primitives::v2::AbridgedHostConfiguration + * Lookup466: polkadot_primitives::v4::AbridgedHostConfiguration **/ - PolkadotPrimitivesV2AbridgedHostConfiguration: { + PolkadotPrimitivesV4AbridgedHostConfiguration: { maxCodeSize: 'u32', maxHeadDataSize: 'u32', maxUpwardQueueCount: 'u32', @@ -3725,27 +3952,27 @@ export default { validationUpgradeDelay: 'u32' }, /** - * Lookup456: polkadot_core_primitives::OutboundHrmpMessage + * Lookup472: polkadot_core_primitives::OutboundHrmpMessage **/ PolkadotCorePrimitivesOutboundHrmpMessage: { recipient: 'u32', data: 'Bytes' }, /** - * Lookup457: cumulus_pallet_parachain_system::CodeUpgradeAuthorization + * Lookup473: cumulus_pallet_parachain_system::CodeUpgradeAuthorization **/ CumulusPalletParachainSystemCodeUpgradeAuthorization: { codeHash: 'H256', checkVersion: 'bool' }, /** - * Lookup458: cumulus_pallet_parachain_system::pallet::Error + * Lookup474: cumulus_pallet_parachain_system::pallet::Error **/ CumulusPalletParachainSystemError: { _enum: ['OverlappingUpgrades', 'ProhibitedByPolkadot', 'TooBig', 'ValidationDataNotAvailable', 'HostConfigurationNotAvailable', 'NotScheduled', 'NothingAuthorized', 'Unauthorized'] }, /** - * Lookup460: cumulus_pallet_xcmp_queue::InboundChannelDetails + * Lookup476: cumulus_pallet_xcmp_queue::InboundChannelDetails **/ CumulusPalletXcmpQueueInboundChannelDetails: { sender: 'u32', @@ -3753,19 +3980,19 @@ export default { messageMetadata: 'Vec<(u32,PolkadotParachainPrimitivesXcmpMessageFormat)>' }, /** - * Lookup461: cumulus_pallet_xcmp_queue::InboundState + * Lookup477: cumulus_pallet_xcmp_queue::InboundState **/ CumulusPalletXcmpQueueInboundState: { _enum: ['Ok', 'Suspended'] }, /** - * Lookup464: polkadot_parachain::primitives::XcmpMessageFormat + * Lookup480: polkadot_parachain::primitives::XcmpMessageFormat **/ PolkadotParachainPrimitivesXcmpMessageFormat: { _enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals'] }, /** - * Lookup467: cumulus_pallet_xcmp_queue::OutboundChannelDetails + * Lookup483: cumulus_pallet_xcmp_queue::OutboundChannelDetails **/ CumulusPalletXcmpQueueOutboundChannelDetails: { recipient: 'u32', @@ -3775,13 +4002,13 @@ export default { lastIndex: 'u16' }, /** - * Lookup468: cumulus_pallet_xcmp_queue::OutboundState + * Lookup484: cumulus_pallet_xcmp_queue::OutboundState **/ CumulusPalletXcmpQueueOutboundState: { _enum: ['Ok', 'Suspended'] }, /** - * Lookup470: cumulus_pallet_xcmp_queue::QueueConfigData + * Lookup486: cumulus_pallet_xcmp_queue::QueueConfigData **/ CumulusPalletXcmpQueueQueueConfigData: { suspendThreshold: 'u32', @@ -3792,29 +4019,29 @@ export default { xcmpMaxIndividualWeight: 'SpWeightsWeightV2Weight' }, /** - * Lookup472: cumulus_pallet_xcmp_queue::pallet::Error + * Lookup488: cumulus_pallet_xcmp_queue::pallet::Error **/ CumulusPalletXcmpQueueError: { _enum: ['FailedToSend', 'BadXcmOrigin', 'BadXcm', 'BadOverweightIndex', 'WeightOverLimit'] }, /** - * Lookup473: pallet_xcm::pallet::Error + * Lookup489: pallet_xcm::pallet::Error **/ PalletXcmError: { _enum: ['Unreachable', 'SendFailure', 'Filtered', 'UnweighableMessage', 'DestinationNotInvertible', 'Empty', 'CannotReanchor', 'TooManyAssets', 'InvalidOrigin', 'BadVersion', 'BadLocation', 'NoSubscription', 'AlreadySubscribed', 'InvalidAsset', 'LowBalance', 'TooManyLocks', 'AccountNotSovereign', 'FeesNotMet', 'LockNotFound', 'InUse'] }, /** - * Lookup474: cumulus_pallet_xcm::pallet::Error + * Lookup490: cumulus_pallet_xcm::pallet::Error **/ CumulusPalletXcmError: 'Null', /** - * Lookup475: cumulus_pallet_dmp_queue::ConfigData + * Lookup491: cumulus_pallet_dmp_queue::ConfigData **/ CumulusPalletDmpQueueConfigData: { maxIndividual: 'SpWeightsWeightV2Weight' }, /** - * Lookup476: cumulus_pallet_dmp_queue::PageIndexData + * Lookup492: cumulus_pallet_dmp_queue::PageIndexData **/ CumulusPalletDmpQueuePageIndexData: { beginUsed: 'u32', @@ -3822,37 +4049,37 @@ export default { overweightCount: 'u64' }, /** - * Lookup479: cumulus_pallet_dmp_queue::pallet::Error + * Lookup495: cumulus_pallet_dmp_queue::pallet::Error **/ CumulusPalletDmpQueueError: { _enum: ['Unknown', 'OverLimit'] }, /** - * Lookup482: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender + * Lookup498: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender **/ FrameSystemExtensionsCheckNonZeroSender: 'Null', /** - * Lookup483: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup499: frame_system::extensions::check_spec_version::CheckSpecVersion **/ FrameSystemExtensionsCheckSpecVersion: 'Null', /** - * Lookup484: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup500: frame_system::extensions::check_tx_version::CheckTxVersion **/ FrameSystemExtensionsCheckTxVersion: 'Null', /** - * Lookup485: frame_system::extensions::check_genesis::CheckGenesis + * Lookup501: frame_system::extensions::check_genesis::CheckGenesis **/ FrameSystemExtensionsCheckGenesis: 'Null', /** - * Lookup488: frame_system::extensions::check_nonce::CheckNonce + * Lookup504: frame_system::extensions::check_nonce::CheckNonce **/ FrameSystemExtensionsCheckNonce: 'Compact', /** - * Lookup489: frame_system::extensions::check_weight::CheckWeight + * Lookup505: frame_system::extensions::check_weight::CheckWeight **/ FrameSystemExtensionsCheckWeight: 'Null', /** - * Lookup490: pallet_transaction_payment::ChargeTransactionPayment + * Lookup506: pallet_transaction_payment::ChargeTransactionPayment **/ PalletTransactionPaymentChargeTransactionPayment: 'Compact' }; diff --git a/packages/augment-api/src/interfaces/registry.ts b/packages/augment-api/src/interfaces/registry.ts index c934be065..d942cc164 100644 --- a/packages/augment-api/src/interfaces/registry.ts +++ b/packages/augment-api/src/interfaces/registry.ts @@ -5,7 +5,7 @@ // this is required to allow for ambient/previous definitions import '@polkadot/types/types/registry'; -import type { AttestationAttestationsAttestationDetails, AttestationCall, AttestationError, AttestationEvent, CtypeCall, CtypeCtypeEntry, CtypeError, CtypeEvent, CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, DelegationAccessControlDelegationAc, DelegationCall, DelegationDelegationHierarchyDelegationDetails, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DelegationDelegationHierarchyPermissions, DelegationError, DelegationEvent, DidCall, DidDidDetails, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidPublicKey, DidDidDetailsDidPublicKeyDetails, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidError, DidEvent, DidOriginDidRawOrigin, DidServiceEndpointsDidEndpoint, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportPreimagesBounded, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonZeroSender, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, KiltAssetDidsAssetV1AssetId, KiltAssetDidsAssetV1EvmSmartContractFungibleReference, KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference, KiltAssetDidsAssetV1GenericAssetId, KiltAssetDidsChainV1ChainId, KiltAssetDidsChainV1GenericChainId, KiltAssetDidsChainV1GenesisHexHash32Reference, KiltAssetDidsV1AssetDid, KiltSupportDeposit, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReserveData, PalletCollectiveCall, PalletCollectiveError, PalletCollectiveEvent, PalletCollectiveRawOrigin, PalletCollectiveVotes, PalletDemocracyCall, PalletDemocracyConviction, PalletDemocracyDelegations, PalletDemocracyError, PalletDemocracyEvent, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyReferendumStatus, PalletDemocracyTally, PalletDemocracyVoteAccountVote, PalletDemocracyVotePriorLock, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupAccountAccountId20, PalletDidLookupAccountEthereumSignature, PalletDidLookupAssociateAccountRequest, PalletDidLookupCall, PalletDidLookupConnectionRecord, PalletDidLookupError, PalletDidLookupEvent, PalletDidLookupLinkableAccountLinkableAccountId, PalletIndicesCall, PalletIndicesError, PalletIndicesEvent, PalletMembershipCall, PalletMembershipError, PalletMembershipEvent, PalletMultisigCall, PalletMultisigError, PalletMultisigEvent, PalletMultisigMultisig, PalletMultisigTimepoint, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyCall, PalletProxyError, PalletProxyEvent, PalletProxyProxyDefinition, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletTimestampCall, PalletTipsCall, PalletTipsError, PalletTipsEvent, PalletTipsOpenTip, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletVestingCall, PalletVestingError, PalletVestingEvent, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesCall, PalletWeb3NamesError, PalletWeb3NamesEvent, PalletWeb3NamesWeb3NameWeb3NameOwnership, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, ParachainStakingCall, ParachainStakingCandidate, ParachainStakingCandidateStatus, ParachainStakingDelegationCounter, ParachainStakingError, ParachainStakingEvent, ParachainStakingInflationInflationInfo, ParachainStakingInflationRewardRate, ParachainStakingInflationStakingInfo, ParachainStakingRoundInfo, ParachainStakingSetOrderedSet, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, PublicCredentialsCall, PublicCredentialsCredentialsCredential, PublicCredentialsCredentialsCredentialEntry, PublicCredentialsError, PublicCredentialsEvent, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, RuntimeCommonAuthorizationPalletAuthorize, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaPublic, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeRuntime, SpiritnetRuntimeSessionKeys, XcmDoubleEncoded, XcmV2BodyId, XcmV2BodyPart, XcmV2Instruction, XcmV2Junction, XcmV2MultiAsset, XcmV2MultiLocation, XcmV2MultiassetAssetId, XcmV2MultiassetAssetInstance, XcmV2MultiassetFungibility, XcmV2MultiassetMultiAssetFilter, XcmV2MultiassetMultiAssets, XcmV2MultiassetWildFungibility, XcmV2MultiassetWildMultiAsset, XcmV2MultilocationJunctions, XcmV2NetworkId, XcmV2OriginKind, XcmV2Response, XcmV2TraitsError, XcmV2WeightLimit, XcmV2Xcm, XcmV3Instruction, XcmV3Junction, XcmV3JunctionBodyId, XcmV3JunctionBodyPart, XcmV3JunctionNetworkId, XcmV3Junctions, XcmV3MaybeErrorCode, XcmV3MultiAsset, XcmV3MultiLocation, XcmV3MultiassetAssetId, XcmV3MultiassetAssetInstance, XcmV3MultiassetFungibility, XcmV3MultiassetMultiAssetFilter, XcmV3MultiassetMultiAssets, XcmV3MultiassetWildFungibility, XcmV3MultiassetWildMultiAsset, XcmV3PalletInfo, XcmV3QueryResponseInfo, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3WeightLimit, XcmV3Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; +import type { AttestationAttestationsAttestationDetails, AttestationCall, AttestationError, AttestationEvent, AttestationHoldReason, CtypeCall, CtypeCtypeEntry, CtypeError, CtypeEvent, CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, DelegationAccessControlDelegationAc, DelegationCall, DelegationDelegationHierarchyDelegationDetails, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DelegationDelegationHierarchyPermissions, DelegationError, DelegationEvent, DelegationHoldReason, DidCall, DidDidDetails, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidPublicKey, DidDidDetailsDidPublicKeyDetails, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidError, DidEvent, DidHoldReason, DidOriginDidRawOrigin, DidServiceEndpointsDidEndpoint, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportPreimagesBounded, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonZeroSender, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, KiltAssetDidsAssetV1AssetId, KiltAssetDidsAssetV1EvmSmartContractFungibleReference, KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference, KiltAssetDidsAssetV1GenericAssetId, KiltAssetDidsChainV1ChainId, KiltAssetDidsChainV1GenericChainId, KiltAssetDidsChainV1GenesisHexHash32Reference, KiltAssetDidsV1AssetDid, KiltSupportDeposit, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesIdAmountRuntimeFreezeReason, PalletBalancesIdAmountRuntimeHoldReason, PalletBalancesReasons, PalletBalancesReserveData, PalletCollectiveCall, PalletCollectiveError, PalletCollectiveEvent, PalletCollectiveRawOrigin, PalletCollectiveVotes, PalletDemocracyCall, PalletDemocracyConviction, PalletDemocracyDelegations, PalletDemocracyError, PalletDemocracyEvent, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyReferendumStatus, PalletDemocracyTally, PalletDemocracyVoteAccountVote, PalletDemocracyVotePriorLock, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupAccountAccountId20, PalletDidLookupAccountEthereumSignature, PalletDidLookupAssociateAccountRequest, PalletDidLookupCall, PalletDidLookupConnectionRecord, PalletDidLookupError, PalletDidLookupEvent, PalletDidLookupHoldReason, PalletDidLookupLinkableAccountLinkableAccountId, PalletIndicesCall, PalletIndicesError, PalletIndicesEvent, PalletMembershipCall, PalletMembershipError, PalletMembershipEvent, PalletMultisigCall, PalletMultisigError, PalletMultisigEvent, PalletMultisigMultisig, PalletMultisigTimepoint, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyCall, PalletProxyError, PalletProxyEvent, PalletProxyProxyDefinition, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletTimestampCall, PalletTipsCall, PalletTipsError, PalletTipsEvent, PalletTipsOpenTip, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletVestingCall, PalletVestingError, PalletVestingEvent, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesCall, PalletWeb3NamesError, PalletWeb3NamesEvent, PalletWeb3NamesHoldReason, PalletWeb3NamesWeb3NameWeb3NameOwnership, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, ParachainStakingCall, ParachainStakingCandidate, ParachainStakingCandidateStatus, ParachainStakingDelegationCounter, ParachainStakingError, ParachainStakingEvent, ParachainStakingFreezeReason, ParachainStakingInflationInflationInfo, ParachainStakingInflationRewardRate, ParachainStakingInflationStakingInfo, ParachainStakingRoundInfo, ParachainStakingSetOrderedSet, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV4AbridgedHostConfiguration, PolkadotPrimitivesV4AbridgedHrmpChannel, PolkadotPrimitivesV4PersistedValidationData, PolkadotPrimitivesV4UpgradeRestriction, PublicCredentialsCall, PublicCredentialsCredentialsCredential, PublicCredentialsCredentialsCredentialEntry, PublicCredentialsError, PublicCredentialsEvent, PublicCredentialsHoldReason, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, RuntimeCommonAuthorizationPalletAuthorize, RuntimeCommonConstantsDelegationMaxChildren, RuntimeCommonConstantsDidMaxNewKeyAgreementKeys, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaPublic, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeRuntime, SpiritnetRuntimeRuntimeFreezeReason, SpiritnetRuntimeRuntimeHoldReason, SpiritnetRuntimeSessionKeys, XcmDoubleEncoded, XcmV2BodyId, XcmV2BodyPart, XcmV2Instruction, XcmV2Junction, XcmV2MultiAsset, XcmV2MultiLocation, XcmV2MultiassetAssetId, XcmV2MultiassetAssetInstance, XcmV2MultiassetFungibility, XcmV2MultiassetMultiAssetFilter, XcmV2MultiassetMultiAssets, XcmV2MultiassetWildFungibility, XcmV2MultiassetWildMultiAsset, XcmV2MultilocationJunctions, XcmV2NetworkId, XcmV2OriginKind, XcmV2Response, XcmV2TraitsError, XcmV2WeightLimit, XcmV2Xcm, XcmV3Instruction, XcmV3Junction, XcmV3JunctionBodyId, XcmV3JunctionBodyPart, XcmV3JunctionNetworkId, XcmV3Junctions, XcmV3MaybeErrorCode, XcmV3MultiAsset, XcmV3MultiLocation, XcmV3MultiassetAssetId, XcmV3MultiassetAssetInstance, XcmV3MultiassetFungibility, XcmV3MultiassetMultiAssetFilter, XcmV3MultiassetMultiAssets, XcmV3MultiassetWildFungibility, XcmV3MultiassetWildMultiAsset, XcmV3PalletInfo, XcmV3QueryResponseInfo, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3WeightLimit, XcmV3Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; declare module '@polkadot/types/types/registry' { interface InterfaceTypes { @@ -13,6 +13,7 @@ declare module '@polkadot/types/types/registry' { AttestationCall: AttestationCall; AttestationError: AttestationError; AttestationEvent: AttestationEvent; + AttestationHoldReason: AttestationHoldReason; CtypeCall: CtypeCall; CtypeCtypeEntry: CtypeCtypeEntry; CtypeError: CtypeError; @@ -27,6 +28,7 @@ declare module '@polkadot/types/types/registry' { CumulusPalletParachainSystemError: CumulusPalletParachainSystemError; CumulusPalletParachainSystemEvent: CumulusPalletParachainSystemEvent; CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot; + CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize: CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize; CumulusPalletXcmError: CumulusPalletXcmError; CumulusPalletXcmEvent: CumulusPalletXcmEvent; CumulusPalletXcmOrigin: CumulusPalletXcmOrigin; @@ -47,6 +49,7 @@ declare module '@polkadot/types/types/registry' { DelegationDelegationHierarchyPermissions: DelegationDelegationHierarchyPermissions; DelegationError: DelegationError; DelegationEvent: DelegationEvent; + DelegationHoldReason: DelegationHoldReason; DidCall: DidCall; DidDidDetails: DidDidDetails; DidDidDetailsDidAuthorizedCallOperation: DidDidDetailsDidAuthorizedCallOperation; @@ -58,6 +61,7 @@ declare module '@polkadot/types/types/registry' { DidDidDetailsDidVerificationKey: DidDidDetailsDidVerificationKey; DidError: DidError; DidEvent: DidEvent; + DidHoldReason: DidHoldReason; DidOriginDidRawOrigin: DidOriginDidRawOrigin; DidServiceEndpointsDidEndpoint: DidServiceEndpointsDidEndpoint; FrameSupportDispatchDispatchClass: FrameSupportDispatchDispatchClass; @@ -100,6 +104,8 @@ declare module '@polkadot/types/types/registry' { PalletBalancesCall: PalletBalancesCall; PalletBalancesError: PalletBalancesError; PalletBalancesEvent: PalletBalancesEvent; + PalletBalancesIdAmountRuntimeFreezeReason: PalletBalancesIdAmountRuntimeFreezeReason; + PalletBalancesIdAmountRuntimeHoldReason: PalletBalancesIdAmountRuntimeHoldReason; PalletBalancesReasons: PalletBalancesReasons; PalletBalancesReserveData: PalletBalancesReserveData; PalletCollectiveCall: PalletCollectiveCall; @@ -127,6 +133,7 @@ declare module '@polkadot/types/types/registry' { PalletDidLookupConnectionRecord: PalletDidLookupConnectionRecord; PalletDidLookupError: PalletDidLookupError; PalletDidLookupEvent: PalletDidLookupEvent; + PalletDidLookupHoldReason: PalletDidLookupHoldReason; PalletDidLookupLinkableAccountLinkableAccountId: PalletDidLookupLinkableAccountLinkableAccountId; PalletIndicesCall: PalletIndicesCall; PalletIndicesError: PalletIndicesError; @@ -178,6 +185,7 @@ declare module '@polkadot/types/types/registry' { PalletWeb3NamesCall: PalletWeb3NamesCall; PalletWeb3NamesError: PalletWeb3NamesError; PalletWeb3NamesEvent: PalletWeb3NamesEvent; + PalletWeb3NamesHoldReason: PalletWeb3NamesHoldReason; PalletWeb3NamesWeb3NameWeb3NameOwnership: PalletWeb3NamesWeb3NameWeb3NameOwnership; PalletXcmCall: PalletXcmCall; PalletXcmError: PalletXcmError; @@ -189,6 +197,7 @@ declare module '@polkadot/types/types/registry' { ParachainStakingDelegationCounter: ParachainStakingDelegationCounter; ParachainStakingError: ParachainStakingError; ParachainStakingEvent: ParachainStakingEvent; + ParachainStakingFreezeReason: ParachainStakingFreezeReason; ParachainStakingInflationInflationInfo: ParachainStakingInflationInflationInfo; ParachainStakingInflationRewardRate: ParachainStakingInflationRewardRate; ParachainStakingInflationStakingInfo: ParachainStakingInflationStakingInfo; @@ -200,18 +209,21 @@ declare module '@polkadot/types/types/registry' { PolkadotCorePrimitivesInboundHrmpMessage: PolkadotCorePrimitivesInboundHrmpMessage; PolkadotCorePrimitivesOutboundHrmpMessage: PolkadotCorePrimitivesOutboundHrmpMessage; PolkadotParachainPrimitivesXcmpMessageFormat: PolkadotParachainPrimitivesXcmpMessageFormat; - PolkadotPrimitivesV2AbridgedHostConfiguration: PolkadotPrimitivesV2AbridgedHostConfiguration; - PolkadotPrimitivesV2AbridgedHrmpChannel: PolkadotPrimitivesV2AbridgedHrmpChannel; - PolkadotPrimitivesV2PersistedValidationData: PolkadotPrimitivesV2PersistedValidationData; - PolkadotPrimitivesV2UpgradeRestriction: PolkadotPrimitivesV2UpgradeRestriction; + PolkadotPrimitivesV4AbridgedHostConfiguration: PolkadotPrimitivesV4AbridgedHostConfiguration; + PolkadotPrimitivesV4AbridgedHrmpChannel: PolkadotPrimitivesV4AbridgedHrmpChannel; + PolkadotPrimitivesV4PersistedValidationData: PolkadotPrimitivesV4PersistedValidationData; + PolkadotPrimitivesV4UpgradeRestriction: PolkadotPrimitivesV4UpgradeRestriction; PublicCredentialsCall: PublicCredentialsCall; PublicCredentialsCredentialsCredential: PublicCredentialsCredentialsCredential; PublicCredentialsCredentialsCredentialEntry: PublicCredentialsCredentialsCredentialEntry; PublicCredentialsError: PublicCredentialsError; PublicCredentialsEvent: PublicCredentialsEvent; + PublicCredentialsHoldReason: PublicCredentialsHoldReason; RuntimeCommonAssetsAssetDid: RuntimeCommonAssetsAssetDid; RuntimeCommonAuthorizationAuthorizationId: RuntimeCommonAuthorizationAuthorizationId; RuntimeCommonAuthorizationPalletAuthorize: RuntimeCommonAuthorizationPalletAuthorize; + RuntimeCommonConstantsDelegationMaxChildren: RuntimeCommonConstantsDelegationMaxChildren; + RuntimeCommonConstantsDidMaxNewKeyAgreementKeys: RuntimeCommonConstantsDidMaxNewKeyAgreementKeys; SpArithmeticArithmeticError: SpArithmeticArithmeticError; SpConsensusAuraSr25519AppSr25519Public: SpConsensusAuraSr25519AppSr25519Public; SpCoreCryptoKeyTypeId: SpCoreCryptoKeyTypeId; @@ -236,6 +248,8 @@ declare module '@polkadot/types/types/registry' { SpiritnetRuntimeOriginCaller: SpiritnetRuntimeOriginCaller; SpiritnetRuntimeProxyType: SpiritnetRuntimeProxyType; SpiritnetRuntimeRuntime: SpiritnetRuntimeRuntime; + SpiritnetRuntimeRuntimeFreezeReason: SpiritnetRuntimeRuntimeFreezeReason; + SpiritnetRuntimeRuntimeHoldReason: SpiritnetRuntimeRuntimeHoldReason; SpiritnetRuntimeSessionKeys: SpiritnetRuntimeSessionKeys; XcmDoubleEncoded: XcmDoubleEncoded; XcmV2BodyId: XcmV2BodyId; diff --git a/packages/augment-api/src/interfaces/types-lookup.ts b/packages/augment-api/src/interfaces/types-lookup.ts index 30618f4ff..134b56e22 100644 --- a/packages/augment-api/src/interfaces/types-lookup.ts +++ b/packages/augment-api/src/interfaces/types-lookup.ts @@ -25,29 +25,29 @@ declare module '@polkadot/types/lookup' { interface PalletBalancesAccountData extends Struct { readonly free: u128; readonly reserved: u128; - readonly miscFrozen: u128; - readonly feeFrozen: u128; + readonly frozen: u128; + readonly flags: u128; } - /** @name FrameSupportDispatchPerDispatchClassWeight (8) */ + /** @name FrameSupportDispatchPerDispatchClassWeight (9) */ interface FrameSupportDispatchPerDispatchClassWeight extends Struct { readonly normal: SpWeightsWeightV2Weight; readonly operational: SpWeightsWeightV2Weight; readonly mandatory: SpWeightsWeightV2Weight; } - /** @name SpWeightsWeightV2Weight (9) */ + /** @name SpWeightsWeightV2Weight (10) */ interface SpWeightsWeightV2Weight extends Struct { readonly refTime: Compact; readonly proofSize: Compact; } - /** @name SpRuntimeDigest (13) */ + /** @name SpRuntimeDigest (14) */ interface SpRuntimeDigest extends Struct { readonly logs: Vec; } - /** @name SpRuntimeDigestDigestItem (15) */ + /** @name SpRuntimeDigestDigestItem (16) */ interface SpRuntimeDigestDigestItem extends Enum { readonly isOther: boolean; readonly asOther: Bytes; @@ -61,14 +61,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated'; } - /** @name FrameSystemEventRecord (18) */ + /** @name FrameSystemEventRecord (19) */ interface FrameSystemEventRecord extends Struct { readonly phase: FrameSystemPhase; readonly event: Event; readonly topics: Vec; } - /** @name FrameSystemEvent (20) */ + /** @name FrameSystemEvent (21) */ interface FrameSystemEvent extends Enum { readonly isExtrinsicSuccess: boolean; readonly asExtrinsicSuccess: { @@ -96,14 +96,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked'; } - /** @name FrameSupportDispatchDispatchInfo (21) */ + /** @name FrameSupportDispatchDispatchInfo (22) */ interface FrameSupportDispatchDispatchInfo extends Struct { readonly weight: SpWeightsWeightV2Weight; readonly class: FrameSupportDispatchDispatchClass; readonly paysFee: FrameSupportDispatchPays; } - /** @name FrameSupportDispatchDispatchClass (22) */ + /** @name FrameSupportDispatchDispatchClass (23) */ interface FrameSupportDispatchDispatchClass extends Enum { readonly isNormal: boolean; readonly isOperational: boolean; @@ -111,14 +111,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Normal' | 'Operational' | 'Mandatory'; } - /** @name FrameSupportDispatchPays (23) */ + /** @name FrameSupportDispatchPays (24) */ interface FrameSupportDispatchPays extends Enum { readonly isYes: boolean; readonly isNo: boolean; readonly type: 'Yes' | 'No'; } - /** @name SpRuntimeDispatchError (24) */ + /** @name SpRuntimeDispatchError (25) */ interface SpRuntimeDispatchError extends Enum { readonly isOther: boolean; readonly isCannotLookup: boolean; @@ -137,28 +137,32 @@ declare module '@polkadot/types/lookup' { readonly isExhausted: boolean; readonly isCorruption: boolean; readonly isUnavailable: boolean; - readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional' | 'Exhausted' | 'Corruption' | 'Unavailable'; + readonly isRootNotAllowed: boolean; + readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional' | 'Exhausted' | 'Corruption' | 'Unavailable' | 'RootNotAllowed'; } - /** @name SpRuntimeModuleError (25) */ + /** @name SpRuntimeModuleError (26) */ interface SpRuntimeModuleError extends Struct { readonly index: u8; readonly error: U8aFixed; } - /** @name SpRuntimeTokenError (26) */ + /** @name SpRuntimeTokenError (27) */ interface SpRuntimeTokenError extends Enum { - readonly isNoFunds: boolean; - readonly isWouldDie: boolean; + readonly isFundsUnavailable: boolean; + readonly isOnlyProvider: boolean; readonly isBelowMinimum: boolean; readonly isCannotCreate: boolean; readonly isUnknownAsset: boolean; readonly isFrozen: boolean; readonly isUnsupported: boolean; - readonly type: 'NoFunds' | 'WouldDie' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported'; + readonly isCannotCreateHold: boolean; + readonly isNotExpendable: boolean; + readonly isBlocked: boolean; + readonly type: 'FundsUnavailable' | 'OnlyProvider' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported' | 'CannotCreateHold' | 'NotExpendable' | 'Blocked'; } - /** @name SpArithmeticArithmeticError (27) */ + /** @name SpArithmeticArithmeticError (28) */ interface SpArithmeticArithmeticError extends Enum { readonly isUnderflow: boolean; readonly isOverflow: boolean; @@ -166,14 +170,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero'; } - /** @name SpRuntimeTransactionalError (28) */ + /** @name SpRuntimeTransactionalError (29) */ interface SpRuntimeTransactionalError extends Enum { readonly isLimitReached: boolean; readonly isNoLayer: boolean; readonly type: 'LimitReached' | 'NoLayer'; } - /** @name PalletIndicesEvent (29) */ + /** @name PalletIndicesEvent (30) */ interface PalletIndicesEvent extends Enum { readonly isIndexAssigned: boolean; readonly asIndexAssigned: { @@ -192,7 +196,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'IndexAssigned' | 'IndexFreed' | 'IndexFrozen'; } - /** @name PalletBalancesEvent (30) */ + /** @name PalletBalancesEvent (31) */ interface PalletBalancesEvent extends Enum { readonly isEndowed: boolean; readonly asEndowed: { @@ -214,7 +218,6 @@ declare module '@polkadot/types/lookup' { readonly asBalanceSet: { readonly who: AccountId32; readonly free: u128; - readonly reserved: u128; } & Struct; readonly isReserved: boolean; readonly asReserved: { @@ -248,17 +251,69 @@ declare module '@polkadot/types/lookup' { readonly who: AccountId32; readonly amount: u128; } & Struct; - readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed'; + readonly isMinted: boolean; + readonly asMinted: { + readonly who: AccountId32; + readonly amount: u128; + } & Struct; + readonly isBurned: boolean; + readonly asBurned: { + readonly who: AccountId32; + readonly amount: u128; + } & Struct; + readonly isSuspended: boolean; + readonly asSuspended: { + readonly who: AccountId32; + readonly amount: u128; + } & Struct; + readonly isRestored: boolean; + readonly asRestored: { + readonly who: AccountId32; + readonly amount: u128; + } & Struct; + readonly isUpgraded: boolean; + readonly asUpgraded: { + readonly who: AccountId32; + } & Struct; + readonly isIssued: boolean; + readonly asIssued: { + readonly amount: u128; + } & Struct; + readonly isRescinded: boolean; + readonly asRescinded: { + readonly amount: u128; + } & Struct; + readonly isLocked: boolean; + readonly asLocked: { + readonly who: AccountId32; + readonly amount: u128; + } & Struct; + readonly isUnlocked: boolean; + readonly asUnlocked: { + readonly who: AccountId32; + readonly amount: u128; + } & Struct; + readonly isFrozen: boolean; + readonly asFrozen: { + readonly who: AccountId32; + readonly amount: u128; + } & Struct; + readonly isThawed: boolean; + readonly asThawed: { + readonly who: AccountId32; + readonly amount: u128; + } & Struct; + readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed' | 'Minted' | 'Burned' | 'Suspended' | 'Restored' | 'Upgraded' | 'Issued' | 'Rescinded' | 'Locked' | 'Unlocked' | 'Frozen' | 'Thawed'; } - /** @name FrameSupportTokensMiscBalanceStatus (31) */ + /** @name FrameSupportTokensMiscBalanceStatus (32) */ interface FrameSupportTokensMiscBalanceStatus extends Enum { readonly isFree: boolean; readonly isReserved: boolean; readonly type: 'Free' | 'Reserved'; } - /** @name PalletTransactionPaymentEvent (32) */ + /** @name PalletTransactionPaymentEvent (33) */ interface PalletTransactionPaymentEvent extends Enum { readonly isTransactionFeePaid: boolean; readonly asTransactionFeePaid: { @@ -269,7 +324,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'TransactionFeePaid'; } - /** @name PalletSessionEvent (33) */ + /** @name PalletSessionEvent (34) */ interface PalletSessionEvent extends Enum { readonly isNewSession: boolean; readonly asNewSession: { @@ -278,7 +333,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NewSession'; } - /** @name ParachainStakingEvent (34) */ + /** @name ParachainStakingEvent (35) */ interface ParachainStakingEvent extends Enum { readonly isNewRound: boolean; readonly asNewRound: ITuple<[u64, u32]>; @@ -325,7 +380,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NewRound' | 'EnteredTopCandidates' | 'LeftTopCandidates' | 'JoinedCollatorCandidates' | 'CollatorStakedMore' | 'CollatorStakedLess' | 'CollatorScheduledExit' | 'CollatorCanceledExit' | 'CandidateLeft' | 'CollatorRemoved' | 'MaxCandidateStakeChanged' | 'DelegatorStakedMore' | 'DelegatorStakedLess' | 'DelegatorLeft' | 'Delegation' | 'DelegationReplaced' | 'DelegatorLeftCollator' | 'Rewarded' | 'RoundInflationSet' | 'MaxSelectedCandidatesSet' | 'BlocksPerRoundSet'; } - /** @name PalletDemocracyEvent (36) */ + /** @name PalletDemocracyEvent (37) */ interface PalletDemocracyEvent extends Enum { readonly isProposed: boolean; readonly asProposed: { @@ -408,7 +463,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Proposed' | 'Tabled' | 'ExternalTabled' | 'Started' | 'Passed' | 'NotPassed' | 'Cancelled' | 'Delegated' | 'Undelegated' | 'Vetoed' | 'Blacklisted' | 'Voted' | 'Seconded' | 'ProposalCanceled' | 'MetadataSet' | 'MetadataCleared' | 'MetadataTransferred'; } - /** @name PalletDemocracyVoteThreshold (37) */ + /** @name PalletDemocracyVoteThreshold (38) */ interface PalletDemocracyVoteThreshold extends Enum { readonly isSuperMajorityApprove: boolean; readonly isSuperMajorityAgainst: boolean; @@ -416,7 +471,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SuperMajorityApprove' | 'SuperMajorityAgainst' | 'SimpleMajority'; } - /** @name PalletDemocracyVoteAccountVote (38) */ + /** @name PalletDemocracyVoteAccountVote (39) */ interface PalletDemocracyVoteAccountVote extends Enum { readonly isStandard: boolean; readonly asStandard: { @@ -431,7 +486,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Standard' | 'Split'; } - /** @name PalletDemocracyMetadataOwner (40) */ + /** @name PalletDemocracyMetadataOwner (41) */ interface PalletDemocracyMetadataOwner extends Enum { readonly isExternal: boolean; readonly isProposal: boolean; @@ -441,7 +496,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'External' | 'Proposal' | 'Referendum'; } - /** @name PalletCollectiveEvent (41) */ + /** @name PalletCollectiveEvent (42) */ interface PalletCollectiveEvent extends Enum { readonly isProposed: boolean; readonly asProposed: { @@ -485,7 +540,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Proposed' | 'Voted' | 'Approved' | 'Disapproved' | 'Executed' | 'MemberExecuted' | 'Closed'; } - /** @name PalletMembershipEvent (46) */ + /** @name PalletMembershipEvent (47) */ interface PalletMembershipEvent extends Enum { readonly isMemberAdded: boolean; readonly isMemberRemoved: boolean; @@ -496,7 +551,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'MemberAdded' | 'MemberRemoved' | 'MembersSwapped' | 'MembersReset' | 'KeyChanged' | 'Dummy'; } - /** @name PalletTreasuryEvent (47) */ + /** @name PalletTreasuryEvent (48) */ interface PalletTreasuryEvent extends Enum { readonly isProposed: boolean; readonly asProposed: { @@ -543,7 +598,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Proposed' | 'Spending' | 'Awarded' | 'Rejected' | 'Burnt' | 'Rollover' | 'Deposit' | 'SpendApproved' | 'UpdatedInactive'; } - /** @name PalletUtilityEvent (48) */ + /** @name PalletUtilityEvent (49) */ interface PalletUtilityEvent extends Enum { readonly isBatchInterrupted: boolean; readonly asBatchInterrupted: { @@ -564,7 +619,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'BatchInterrupted' | 'BatchCompleted' | 'BatchCompletedWithErrors' | 'ItemCompleted' | 'ItemFailed' | 'DispatchedAs'; } - /** @name PalletVestingEvent (49) */ + /** @name PalletVestingEvent (50) */ interface PalletVestingEvent extends Enum { readonly isVestingUpdated: boolean; readonly asVestingUpdated: { @@ -578,7 +633,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'VestingUpdated' | 'VestingCompleted'; } - /** @name PalletSchedulerEvent (50) */ + /** @name PalletSchedulerEvent (51) */ interface PalletSchedulerEvent extends Enum { readonly isScheduled: boolean; readonly asScheduled: { @@ -614,7 +669,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Scheduled' | 'Canceled' | 'Dispatched' | 'CallUnavailable' | 'PeriodicFailed' | 'PermanentlyOverweight'; } - /** @name PalletProxyEvent (53) */ + /** @name PalletProxyEvent (54) */ interface PalletProxyEvent extends Enum { readonly isProxyExecuted: boolean; readonly asProxyExecuted: { @@ -650,7 +705,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ProxyExecuted' | 'PureCreated' | 'Announced' | 'ProxyAdded' | 'ProxyRemoved'; } - /** @name SpiritnetRuntimeProxyType (54) */ + /** @name SpiritnetRuntimeProxyType (55) */ interface SpiritnetRuntimeProxyType extends Enum { readonly isAny: boolean; readonly isNonTransfer: boolean; @@ -661,7 +716,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming'; } - /** @name PalletPreimageEvent (56) */ + /** @name PalletPreimageEvent (57) */ interface PalletPreimageEvent extends Enum { readonly isNoted: boolean; readonly asNoted: { @@ -678,7 +733,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Noted' | 'Requested' | 'Cleared'; } - /** @name PalletTipsEvent (58) */ + /** @name PalletTipsEvent (59) */ interface PalletTipsEvent extends Enum { readonly isNewTip: boolean; readonly asNewTip: { @@ -707,7 +762,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NewTip' | 'TipClosing' | 'TipClosed' | 'TipRetracted' | 'TipSlashed'; } - /** @name PalletMultisigEvent (59) */ + /** @name PalletMultisigEvent (60) */ interface PalletMultisigEvent extends Enum { readonly isNewMultisig: boolean; readonly asNewMultisig: { @@ -740,13 +795,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'NewMultisig' | 'MultisigApproval' | 'MultisigExecuted' | 'MultisigCancelled'; } - /** @name PalletMultisigTimepoint (60) */ + /** @name PalletMultisigTimepoint (61) */ interface PalletMultisigTimepoint extends Struct { readonly height: u64; readonly index: u32; } - /** @name CtypeEvent (61) */ + /** @name CtypeEvent (62) */ interface CtypeEvent extends Enum { readonly isCTypeCreated: boolean; readonly asCTypeCreated: ITuple<[AccountId32, H256]>; @@ -755,7 +810,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CTypeCreated' | 'CTypeUpdated'; } - /** @name AttestationEvent (62) */ + /** @name AttestationEvent (63) */ interface AttestationEvent extends Enum { readonly isAttestationCreated: boolean; readonly asAttestationCreated: ITuple<[AccountId32, H256, H256, Option]>; @@ -768,14 +823,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'AttestationCreated' | 'AttestationRevoked' | 'AttestationRemoved' | 'DepositReclaimed'; } - /** @name RuntimeCommonAuthorizationAuthorizationId (64) */ + /** @name RuntimeCommonAuthorizationAuthorizationId (65) */ interface RuntimeCommonAuthorizationAuthorizationId extends Enum { readonly isDelegation: boolean; readonly asDelegation: H256; readonly type: 'Delegation'; } - /** @name DelegationEvent (65) */ + /** @name DelegationEvent (66) */ interface DelegationEvent extends Enum { readonly isHierarchyCreated: boolean; readonly asHierarchyCreated: ITuple<[AccountId32, H256, H256]>; @@ -794,12 +849,12 @@ declare module '@polkadot/types/lookup' { readonly type: 'HierarchyCreated' | 'HierarchyRevoked' | 'HierarchyRemoved' | 'DelegationCreated' | 'DelegationRevoked' | 'DelegationRemoved' | 'DepositReclaimed'; } - /** @name DelegationDelegationHierarchyPermissions (66) */ + /** @name DelegationDelegationHierarchyPermissions (67) */ interface DelegationDelegationHierarchyPermissions extends Struct { readonly bits: u32; } - /** @name DidEvent (67) */ + /** @name DidEvent (68) */ interface DidEvent extends Enum { readonly isDidCreated: boolean; readonly asDidCreated: ITuple<[AccountId32, AccountId32]>; @@ -812,7 +867,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'DidCreated' | 'DidUpdated' | 'DidDeleted' | 'DidCallDispatched'; } - /** @name PalletDidLookupEvent (68) */ + /** @name PalletDidLookupEvent (69) */ interface PalletDidLookupEvent extends Enum { readonly isAssociationEstablished: boolean; readonly asAssociationEstablished: ITuple<[PalletDidLookupLinkableAccountLinkableAccountId, AccountId32]>; @@ -823,7 +878,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AssociationEstablished' | 'AssociationRemoved' | 'MigrationProgress' | 'MigrationCompleted'; } - /** @name PalletDidLookupLinkableAccountLinkableAccountId (69) */ + /** @name PalletDidLookupLinkableAccountLinkableAccountId (70) */ interface PalletDidLookupLinkableAccountLinkableAccountId extends Enum { readonly isAccountId20: boolean; readonly asAccountId20: PalletDidLookupAccountAccountId20; @@ -832,10 +887,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'AccountId20' | 'AccountId32'; } - /** @name PalletDidLookupAccountAccountId20 (70) */ + /** @name PalletDidLookupAccountAccountId20 (71) */ interface PalletDidLookupAccountAccountId20 extends U8aFixed {} - /** @name PalletWeb3NamesEvent (72) */ + /** @name PalletWeb3NamesEvent (73) */ interface PalletWeb3NamesEvent extends Enum { readonly isWeb3NameClaimed: boolean; readonly asWeb3NameClaimed: { @@ -858,7 +913,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Web3NameClaimed' | 'Web3NameReleased' | 'Web3NameBanned' | 'Web3NameUnbanned'; } - /** @name PublicCredentialsEvent (75) */ + /** @name PublicCredentialsEvent (76) */ interface PublicCredentialsEvent extends Enum { readonly isCredentialStored: boolean; readonly asCredentialStored: { @@ -881,16 +936,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'CredentialStored' | 'CredentialRemoved' | 'CredentialRevoked' | 'CredentialUnrevoked'; } - /** @name RuntimeCommonAssetsAssetDid (76) */ + /** @name RuntimeCommonAssetsAssetDid (77) */ interface RuntimeCommonAssetsAssetDid extends KiltAssetDidsV1AssetDid {} - /** @name KiltAssetDidsV1AssetDid (77) */ + /** @name KiltAssetDidsV1AssetDid (78) */ interface KiltAssetDidsV1AssetDid extends Struct { readonly chainId: KiltAssetDidsChainV1ChainId; readonly assetId: KiltAssetDidsAssetV1AssetId; } - /** @name KiltAssetDidsChainV1ChainId (78) */ + /** @name KiltAssetDidsChainV1ChainId (79) */ interface KiltAssetDidsChainV1ChainId extends Enum { readonly isEip155: boolean; readonly asEip155: u128; @@ -905,16 +960,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'Eip155' | 'Bip122' | 'Dotsama' | 'Solana' | 'Generic'; } - /** @name KiltAssetDidsChainV1GenesisHexHash32Reference (80) */ + /** @name KiltAssetDidsChainV1GenesisHexHash32Reference (81) */ interface KiltAssetDidsChainV1GenesisHexHash32Reference extends U8aFixed {} - /** @name KiltAssetDidsChainV1GenericChainId (84) */ + /** @name KiltAssetDidsChainV1GenericChainId (85) */ interface KiltAssetDidsChainV1GenericChainId extends Struct { readonly namespace: Bytes; readonly reference: Bytes; } - /** @name KiltAssetDidsAssetV1AssetId (88) */ + /** @name KiltAssetDidsAssetV1AssetId (89) */ interface KiltAssetDidsAssetV1AssetId extends Enum { readonly isSlip44: boolean; readonly asSlip44: U256; @@ -929,20 +984,20 @@ declare module '@polkadot/types/lookup' { readonly type: 'Slip44' | 'Erc20' | 'Erc721' | 'Erc1155' | 'Generic'; } - /** @name KiltAssetDidsAssetV1EvmSmartContractFungibleReference (92) */ + /** @name KiltAssetDidsAssetV1EvmSmartContractFungibleReference (93) */ interface KiltAssetDidsAssetV1EvmSmartContractFungibleReference extends U8aFixed {} - /** @name KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference (93) */ + /** @name KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference (94) */ interface KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference extends ITuple<[KiltAssetDidsAssetV1EvmSmartContractFungibleReference, Option]> {} - /** @name KiltAssetDidsAssetV1GenericAssetId (97) */ + /** @name KiltAssetDidsAssetV1GenericAssetId (98) */ interface KiltAssetDidsAssetV1GenericAssetId extends Struct { readonly namespace: Bytes; readonly reference: Bytes; readonly id: Option; } - /** @name CumulusPalletParachainSystemEvent (103) */ + /** @name CumulusPalletParachainSystemEvent (104) */ interface CumulusPalletParachainSystemEvent extends Enum { readonly isValidationFunctionStored: boolean; readonly isValidationFunctionApplied: boolean; @@ -970,7 +1025,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed' | 'UpwardMessageSent'; } - /** @name CumulusPalletXcmpQueueEvent (104) */ + /** @name CumulusPalletXcmpQueueEvent (105) */ interface CumulusPalletXcmpQueueEvent extends Enum { readonly isSuccess: boolean; readonly asSuccess: { @@ -1010,7 +1065,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced'; } - /** @name XcmV3TraitsError (105) */ + /** @name XcmV3TraitsError (106) */ interface XcmV3TraitsError extends Enum { readonly isOverflow: boolean; readonly isUnimplemented: boolean; @@ -1057,7 +1112,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'LocationFull' | 'LocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'ExpectationFalse' | 'PalletNotFound' | 'NameMismatch' | 'VersionIncompatible' | 'HoldingWouldOverflow' | 'ExportError' | 'ReanchorFailed' | 'NoDeal' | 'FeesNotMet' | 'LockError' | 'NoPermission' | 'Unanchored' | 'NotDepositable' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable' | 'ExceedsStackLimit'; } - /** @name PalletXcmEvent (107) */ + /** @name PalletXcmEvent (108) */ interface PalletXcmEvent extends Enum { readonly isAttempted: boolean; readonly asAttempted: XcmV3TraitsOutcome; @@ -1108,7 +1163,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail' | 'InvalidQuerierVersion' | 'InvalidQuerier' | 'VersionNotifyStarted' | 'VersionNotifyRequested' | 'VersionNotifyUnrequested' | 'FeesPaid' | 'AssetsClaimed'; } - /** @name XcmV3TraitsOutcome (108) */ + /** @name XcmV3TraitsOutcome (109) */ interface XcmV3TraitsOutcome extends Enum { readonly isComplete: boolean; readonly asComplete: SpWeightsWeightV2Weight; @@ -1119,13 +1174,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Complete' | 'Incomplete' | 'Error'; } - /** @name XcmV3MultiLocation (109) */ + /** @name XcmV3MultiLocation (110) */ interface XcmV3MultiLocation extends Struct { readonly parents: u8; readonly interior: XcmV3Junctions; } - /** @name XcmV3Junctions (110) */ + /** @name XcmV3Junctions (111) */ interface XcmV3Junctions extends Enum { readonly isHere: boolean; readonly isX1: boolean; @@ -1147,7 +1202,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; } - /** @name XcmV3Junction (111) */ + /** @name XcmV3Junction (112) */ interface XcmV3Junction extends Enum { readonly isParachain: boolean; readonly asParachain: Compact; @@ -1186,7 +1241,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality' | 'GlobalConsensus'; } - /** @name XcmV3JunctionNetworkId (114) */ + /** @name XcmV3JunctionNetworkId (115) */ interface XcmV3JunctionNetworkId extends Enum { readonly isByGenesis: boolean; readonly asByGenesis: U8aFixed; @@ -1209,7 +1264,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ByGenesis' | 'ByFork' | 'Polkadot' | 'Kusama' | 'Westend' | 'Rococo' | 'Wococo' | 'Ethereum' | 'BitcoinCore' | 'BitcoinCash'; } - /** @name XcmV3JunctionBodyId (116) */ + /** @name XcmV3JunctionBodyId (117) */ interface XcmV3JunctionBodyId extends Enum { readonly isUnit: boolean; readonly isMoniker: boolean; @@ -1226,7 +1281,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unit' | 'Moniker' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; } - /** @name XcmV3JunctionBodyPart (117) */ + /** @name XcmV3JunctionBodyPart (118) */ interface XcmV3JunctionBodyPart extends Enum { readonly isVoice: boolean; readonly isMembers: boolean; @@ -1251,10 +1306,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; } - /** @name XcmV3Xcm (118) */ + /** @name XcmV3Xcm (119) */ interface XcmV3Xcm extends Vec {} - /** @name XcmV3Instruction (120) */ + /** @name XcmV3Instruction (121) */ interface XcmV3Instruction extends Enum { readonly isWithdrawAsset: boolean; readonly asWithdrawAsset: XcmV3MultiassetMultiAssets; @@ -1436,16 +1491,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'ReportHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion' | 'BurnAsset' | 'ExpectAsset' | 'ExpectOrigin' | 'ExpectError' | 'ExpectTransactStatus' | 'QueryPallet' | 'ExpectPallet' | 'ReportTransactStatus' | 'ClearTransactStatus' | 'UniversalOrigin' | 'ExportMessage' | 'LockAsset' | 'UnlockAsset' | 'NoteUnlockable' | 'RequestUnlock' | 'SetFeesMode' | 'SetTopic' | 'ClearTopic' | 'AliasOrigin' | 'UnpaidExecution'; } - /** @name XcmV3MultiassetMultiAssets (121) */ + /** @name XcmV3MultiassetMultiAssets (122) */ interface XcmV3MultiassetMultiAssets extends Vec {} - /** @name XcmV3MultiAsset (123) */ + /** @name XcmV3MultiAsset (124) */ interface XcmV3MultiAsset extends Struct { readonly id: XcmV3MultiassetAssetId; readonly fun: XcmV3MultiassetFungibility; } - /** @name XcmV3MultiassetAssetId (124) */ + /** @name XcmV3MultiassetAssetId (125) */ interface XcmV3MultiassetAssetId extends Enum { readonly isConcrete: boolean; readonly asConcrete: XcmV3MultiLocation; @@ -1454,7 +1509,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Concrete' | 'Abstract'; } - /** @name XcmV3MultiassetFungibility (125) */ + /** @name XcmV3MultiassetFungibility (126) */ interface XcmV3MultiassetFungibility extends Enum { readonly isFungible: boolean; readonly asFungible: Compact; @@ -1463,7 +1518,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV3MultiassetAssetInstance (126) */ + /** @name XcmV3MultiassetAssetInstance (127) */ interface XcmV3MultiassetAssetInstance extends Enum { readonly isUndefined: boolean; readonly isIndex: boolean; @@ -1479,7 +1534,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32'; } - /** @name XcmV3Response (128) */ + /** @name XcmV3Response (129) */ interface XcmV3Response extends Enum { readonly isNull: boolean; readonly isAssets: boolean; @@ -1495,7 +1550,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version' | 'PalletsInfo' | 'DispatchResult'; } - /** @name XcmV3PalletInfo (132) */ + /** @name XcmV3PalletInfo (133) */ interface XcmV3PalletInfo extends Struct { readonly index: Compact; readonly name: Bytes; @@ -1505,7 +1560,7 @@ declare module '@polkadot/types/lookup' { readonly patch: Compact; } - /** @name XcmV3MaybeErrorCode (135) */ + /** @name XcmV3MaybeErrorCode (136) */ interface XcmV3MaybeErrorCode extends Enum { readonly isSuccess: boolean; readonly isError: boolean; @@ -1515,7 +1570,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Success' | 'Error' | 'TruncatedError'; } - /** @name XcmV2OriginKind (138) */ + /** @name XcmV2OriginKind (139) */ interface XcmV2OriginKind extends Enum { readonly isNative: boolean; readonly isSovereignAccount: boolean; @@ -1524,19 +1579,19 @@ declare module '@polkadot/types/lookup' { readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm'; } - /** @name XcmDoubleEncoded (139) */ + /** @name XcmDoubleEncoded (140) */ interface XcmDoubleEncoded extends Struct { readonly encoded: Bytes; } - /** @name XcmV3QueryResponseInfo (140) */ + /** @name XcmV3QueryResponseInfo (141) */ interface XcmV3QueryResponseInfo extends Struct { readonly destination: XcmV3MultiLocation; readonly queryId: Compact; readonly maxWeight: SpWeightsWeightV2Weight; } - /** @name XcmV3MultiassetMultiAssetFilter (141) */ + /** @name XcmV3MultiassetMultiAssetFilter (142) */ interface XcmV3MultiassetMultiAssetFilter extends Enum { readonly isDefinite: boolean; readonly asDefinite: XcmV3MultiassetMultiAssets; @@ -1545,7 +1600,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Definite' | 'Wild'; } - /** @name XcmV3MultiassetWildMultiAsset (142) */ + /** @name XcmV3MultiassetWildMultiAsset (143) */ interface XcmV3MultiassetWildMultiAsset extends Enum { readonly isAll: boolean; readonly isAllOf: boolean; @@ -1564,14 +1619,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'All' | 'AllOf' | 'AllCounted' | 'AllOfCounted'; } - /** @name XcmV3MultiassetWildFungibility (143) */ + /** @name XcmV3MultiassetWildFungibility (144) */ interface XcmV3MultiassetWildFungibility extends Enum { readonly isFungible: boolean; readonly isNonFungible: boolean; readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV3WeightLimit (144) */ + /** @name XcmV3WeightLimit (145) */ interface XcmV3WeightLimit extends Enum { readonly isUnlimited: boolean; readonly isLimited: boolean; @@ -1579,7 +1634,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unlimited' | 'Limited'; } - /** @name XcmVersionedMultiAssets (145) */ + /** @name XcmVersionedMultiAssets (146) */ interface XcmVersionedMultiAssets extends Enum { readonly isV2: boolean; readonly asV2: XcmV2MultiassetMultiAssets; @@ -1588,16 +1643,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'V2' | 'V3'; } - /** @name XcmV2MultiassetMultiAssets (146) */ + /** @name XcmV2MultiassetMultiAssets (147) */ interface XcmV2MultiassetMultiAssets extends Vec {} - /** @name XcmV2MultiAsset (148) */ + /** @name XcmV2MultiAsset (149) */ interface XcmV2MultiAsset extends Struct { readonly id: XcmV2MultiassetAssetId; readonly fun: XcmV2MultiassetFungibility; } - /** @name XcmV2MultiassetAssetId (149) */ + /** @name XcmV2MultiassetAssetId (150) */ interface XcmV2MultiassetAssetId extends Enum { readonly isConcrete: boolean; readonly asConcrete: XcmV2MultiLocation; @@ -1606,13 +1661,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Concrete' | 'Abstract'; } - /** @name XcmV2MultiLocation (150) */ + /** @name XcmV2MultiLocation (151) */ interface XcmV2MultiLocation extends Struct { readonly parents: u8; readonly interior: XcmV2MultilocationJunctions; } - /** @name XcmV2MultilocationJunctions (151) */ + /** @name XcmV2MultilocationJunctions (152) */ interface XcmV2MultilocationJunctions extends Enum { readonly isHere: boolean; readonly isX1: boolean; @@ -1634,7 +1689,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; } - /** @name XcmV2Junction (152) */ + /** @name XcmV2Junction (153) */ interface XcmV2Junction extends Enum { readonly isParachain: boolean; readonly asParachain: Compact; @@ -1668,7 +1723,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality'; } - /** @name XcmV2NetworkId (153) */ + /** @name XcmV2NetworkId (154) */ interface XcmV2NetworkId extends Enum { readonly isAny: boolean; readonly isNamed: boolean; @@ -1678,7 +1733,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama'; } - /** @name XcmV2BodyId (155) */ + /** @name XcmV2BodyId (156) */ interface XcmV2BodyId extends Enum { readonly isUnit: boolean; readonly isNamed: boolean; @@ -1695,7 +1750,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; } - /** @name XcmV2BodyPart (156) */ + /** @name XcmV2BodyPart (157) */ interface XcmV2BodyPart extends Enum { readonly isVoice: boolean; readonly isMembers: boolean; @@ -1720,7 +1775,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; } - /** @name XcmV2MultiassetFungibility (157) */ + /** @name XcmV2MultiassetFungibility (158) */ interface XcmV2MultiassetFungibility extends Enum { readonly isFungible: boolean; readonly asFungible: Compact; @@ -1729,7 +1784,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV2MultiassetAssetInstance (158) */ + /** @name XcmV2MultiassetAssetInstance (159) */ interface XcmV2MultiassetAssetInstance extends Enum { readonly isUndefined: boolean; readonly isIndex: boolean; @@ -1747,7 +1802,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob'; } - /** @name XcmVersionedMultiLocation (159) */ + /** @name XcmVersionedMultiLocation (160) */ interface XcmVersionedMultiLocation extends Enum { readonly isV2: boolean; readonly asV2: XcmV2MultiLocation; @@ -1756,7 +1811,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'V2' | 'V3'; } - /** @name CumulusPalletXcmEvent (160) */ + /** @name CumulusPalletXcmEvent (161) */ interface CumulusPalletXcmEvent extends Enum { readonly isInvalidFormat: boolean; readonly asInvalidFormat: U8aFixed; @@ -1767,7 +1822,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward'; } - /** @name CumulusPalletDmpQueueEvent (161) */ + /** @name CumulusPalletDmpQueueEvent (162) */ interface CumulusPalletDmpQueueEvent extends Enum { readonly isInvalidFormat: boolean; readonly asInvalidFormat: { @@ -1806,7 +1861,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced' | 'MaxMessagesExhausted'; } - /** @name FrameSystemPhase (162) */ + /** @name FrameSystemPhase (163) */ interface FrameSystemPhase extends Enum { readonly isApplyExtrinsic: boolean; readonly asApplyExtrinsic: u32; @@ -1815,13 +1870,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; } - /** @name FrameSystemLastRuntimeUpgradeInfo (165) */ + /** @name FrameSystemLastRuntimeUpgradeInfo (166) */ interface FrameSystemLastRuntimeUpgradeInfo extends Struct { readonly specVersion: Compact; readonly specName: Text; } - /** @name FrameSystemCall (167) */ + /** @name FrameSystemCall (168) */ interface FrameSystemCall extends Enum { readonly isRemark: boolean; readonly asRemark: { @@ -1859,21 +1914,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent'; } - /** @name FrameSystemLimitsBlockWeights (171) */ + /** @name FrameSystemLimitsBlockWeights (172) */ interface FrameSystemLimitsBlockWeights extends Struct { readonly baseBlock: SpWeightsWeightV2Weight; readonly maxBlock: SpWeightsWeightV2Weight; readonly perClass: FrameSupportDispatchPerDispatchClassWeightsPerClass; } - /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (172) */ + /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (173) */ interface FrameSupportDispatchPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; readonly operational: FrameSystemLimitsWeightsPerClass; readonly mandatory: FrameSystemLimitsWeightsPerClass; } - /** @name FrameSystemLimitsWeightsPerClass (173) */ + /** @name FrameSystemLimitsWeightsPerClass (174) */ interface FrameSystemLimitsWeightsPerClass extends Struct { readonly baseExtrinsic: SpWeightsWeightV2Weight; readonly maxExtrinsic: Option; @@ -1881,25 +1936,25 @@ declare module '@polkadot/types/lookup' { readonly reserved: Option; } - /** @name FrameSystemLimitsBlockLength (175) */ + /** @name FrameSystemLimitsBlockLength (176) */ interface FrameSystemLimitsBlockLength extends Struct { readonly max: FrameSupportDispatchPerDispatchClassU32; } - /** @name FrameSupportDispatchPerDispatchClassU32 (176) */ + /** @name FrameSupportDispatchPerDispatchClassU32 (177) */ interface FrameSupportDispatchPerDispatchClassU32 extends Struct { readonly normal: u32; readonly operational: u32; readonly mandatory: u32; } - /** @name SpWeightsRuntimeDbWeight (177) */ + /** @name SpWeightsRuntimeDbWeight (178) */ interface SpWeightsRuntimeDbWeight extends Struct { readonly read: u64; readonly write: u64; } - /** @name SpVersionRuntimeVersion (178) */ + /** @name SpVersionRuntimeVersion (179) */ interface SpVersionRuntimeVersion extends Struct { readonly specName: Text; readonly implName: Text; @@ -1911,7 +1966,7 @@ declare module '@polkadot/types/lookup' { readonly stateVersion: u8; } - /** @name FrameSystemError (182) */ + /** @name FrameSystemError (183) */ interface FrameSystemError extends Enum { readonly isInvalidSpecName: boolean; readonly isSpecVersionNeedsToIncrease: boolean; @@ -1922,7 +1977,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered'; } - /** @name PalletTimestampCall (183) */ + /** @name PalletTimestampCall (184) */ interface PalletTimestampCall extends Enum { readonly isSet: boolean; readonly asSet: { @@ -1931,7 +1986,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Set'; } - /** @name PalletIndicesCall (185) */ + /** @name PalletIndicesCall (186) */ interface PalletIndicesCall extends Enum { readonly isClaim: boolean; readonly asClaim: { @@ -1959,7 +2014,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Claim' | 'Transfer' | 'Free' | 'ForceTransfer' | 'Freeze'; } - /** @name PalletIndicesError (188) */ + /** @name PalletIndicesError (189) */ interface PalletIndicesError extends Enum { readonly isNotAssigned: boolean; readonly isNotOwner: boolean; @@ -1969,14 +2024,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotAssigned' | 'NotOwner' | 'InUse' | 'NotTransfer' | 'Permanent'; } - /** @name PalletBalancesBalanceLock (190) */ + /** @name PalletBalancesBalanceLock (191) */ interface PalletBalancesBalanceLock extends Struct { readonly id: U8aFixed; readonly amount: u128; readonly reasons: PalletBalancesReasons; } - /** @name PalletBalancesReasons (191) */ + /** @name PalletBalancesReasons (192) */ interface PalletBalancesReasons extends Enum { readonly isFee: boolean; readonly isMisc: boolean; @@ -1984,24 +2039,102 @@ declare module '@polkadot/types/lookup' { readonly type: 'Fee' | 'Misc' | 'All'; } - /** @name PalletBalancesReserveData (194) */ + /** @name PalletBalancesReserveData (195) */ interface PalletBalancesReserveData extends Struct { readonly id: U8aFixed; readonly amount: u128; } - /** @name PalletBalancesCall (196) */ + /** @name PalletBalancesIdAmountRuntimeHoldReason (198) */ + interface PalletBalancesIdAmountRuntimeHoldReason extends Struct { + readonly id: SpiritnetRuntimeRuntimeHoldReason; + readonly amount: u128; + } + + /** @name SpiritnetRuntimeRuntimeHoldReason (199) */ + interface SpiritnetRuntimeRuntimeHoldReason extends Enum { + readonly isAttestation: boolean; + readonly asAttestation: AttestationHoldReason; + readonly isDelegation: boolean; + readonly asDelegation: DelegationHoldReason; + readonly isDid: boolean; + readonly asDid: DidHoldReason; + readonly isDidLookup: boolean; + readonly asDidLookup: PalletDidLookupHoldReason; + readonly isWeb3Names: boolean; + readonly asWeb3Names: PalletWeb3NamesHoldReason; + readonly isPublicCredentials: boolean; + readonly asPublicCredentials: PublicCredentialsHoldReason; + readonly type: 'Attestation' | 'Delegation' | 'Did' | 'DidLookup' | 'Web3Names' | 'PublicCredentials'; + } + + /** @name AttestationHoldReason (200) */ + interface AttestationHoldReason extends Enum { + readonly isDeposit: boolean; + readonly type: 'Deposit'; + } + + /** @name DelegationHoldReason (201) */ + interface DelegationHoldReason extends Enum { + readonly isDeposit: boolean; + readonly type: 'Deposit'; + } + + /** @name DidHoldReason (202) */ + interface DidHoldReason extends Enum { + readonly isDeposit: boolean; + readonly type: 'Deposit'; + } + + /** @name PalletDidLookupHoldReason (203) */ + interface PalletDidLookupHoldReason extends Enum { + readonly isDeposit: boolean; + readonly type: 'Deposit'; + } + + /** @name PalletWeb3NamesHoldReason (204) */ + interface PalletWeb3NamesHoldReason extends Enum { + readonly isDeposit: boolean; + readonly type: 'Deposit'; + } + + /** @name PublicCredentialsHoldReason (205) */ + interface PublicCredentialsHoldReason extends Enum { + readonly isDeposit: boolean; + readonly type: 'Deposit'; + } + + /** @name PalletBalancesIdAmountRuntimeFreezeReason (208) */ + interface PalletBalancesIdAmountRuntimeFreezeReason extends Struct { + readonly id: SpiritnetRuntimeRuntimeFreezeReason; + readonly amount: u128; + } + + /** @name SpiritnetRuntimeRuntimeFreezeReason (209) */ + interface SpiritnetRuntimeRuntimeFreezeReason extends Enum { + readonly isParachainStaking: boolean; + readonly asParachainStaking: ParachainStakingFreezeReason; + readonly type: 'ParachainStaking'; + } + + /** @name ParachainStakingFreezeReason (210) */ + interface ParachainStakingFreezeReason extends Enum { + readonly isStaking: boolean; + readonly type: 'Staking'; + } + + /** @name PalletBalancesCall (212) */ interface PalletBalancesCall extends Enum { - readonly isTransfer: boolean; - readonly asTransfer: { + readonly isTransferAllowDeath: boolean; + readonly asTransferAllowDeath: { readonly dest: MultiAddress; readonly value: Compact; } & Struct; - readonly isSetBalance: boolean; - readonly asSetBalance: { + readonly isSetBalanceDeprecated: boolean; + readonly asSetBalanceDeprecated: { readonly who: MultiAddress; readonly newFree: Compact; - readonly newReserved: Compact; + readonly oldReserved: Compact; } & Struct; readonly isForceTransfer: boolean; readonly asForceTransfer: { @@ -2024,44 +2157,60 @@ declare module '@polkadot/types/lookup' { readonly who: MultiAddress; readonly amount: u128; } & Struct; - readonly type: 'Transfer' | 'SetBalance' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve'; + readonly isUpgradeAccounts: boolean; + readonly asUpgradeAccounts: { + readonly who: Vec; + } & Struct; + readonly isTransfer: boolean; + readonly asTransfer: { + readonly dest: MultiAddress; + readonly value: Compact; + } & Struct; + readonly isForceSetBalance: boolean; + readonly asForceSetBalance: { + readonly who: MultiAddress; + readonly newFree: Compact; + } & Struct; + readonly type: 'TransferAllowDeath' | 'SetBalanceDeprecated' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve' | 'UpgradeAccounts' | 'Transfer' | 'ForceSetBalance'; } - /** @name PalletBalancesError (197) */ + /** @name PalletBalancesError (214) */ interface PalletBalancesError extends Enum { readonly isVestingBalance: boolean; readonly isLiquidityRestrictions: boolean; readonly isInsufficientBalance: boolean; readonly isExistentialDeposit: boolean; - readonly isKeepAlive: boolean; + readonly isExpendability: boolean; readonly isExistingVestingSchedule: boolean; readonly isDeadAccount: boolean; readonly isTooManyReserves: boolean; - readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'KeepAlive' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves'; + readonly isTooManyHolds: boolean; + readonly isTooManyFreezes: boolean; + readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'Expendability' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves' | 'TooManyHolds' | 'TooManyFreezes'; } - /** @name PalletTransactionPaymentReleases (199) */ + /** @name PalletTransactionPaymentReleases (216) */ interface PalletTransactionPaymentReleases extends Enum { readonly isV1Ancient: boolean; readonly isV2: boolean; readonly type: 'V1Ancient' | 'V2'; } - /** @name SpConsensusAuraSr25519AppSr25519Public (201) */ + /** @name SpConsensusAuraSr25519AppSr25519Public (218) */ interface SpConsensusAuraSr25519AppSr25519Public extends SpCoreSr25519Public {} - /** @name SpCoreSr25519Public (202) */ + /** @name SpCoreSr25519Public (219) */ interface SpCoreSr25519Public extends U8aFixed {} - /** @name SpiritnetRuntimeSessionKeys (208) */ + /** @name SpiritnetRuntimeSessionKeys (224) */ interface SpiritnetRuntimeSessionKeys extends Struct { readonly aura: SpConsensusAuraSr25519AppSr25519Public; } - /** @name SpCoreCryptoKeyTypeId (211) */ + /** @name SpCoreCryptoKeyTypeId (227) */ interface SpCoreCryptoKeyTypeId extends U8aFixed {} - /** @name PalletSessionCall (212) */ + /** @name PalletSessionCall (228) */ interface PalletSessionCall extends Enum { readonly isSetKeys: boolean; readonly asSetKeys: { @@ -2072,7 +2221,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetKeys' | 'PurgeKeys'; } - /** @name PalletSessionError (213) */ + /** @name PalletSessionError (229) */ interface PalletSessionError extends Enum { readonly isInvalidProof: boolean; readonly isNoAssociatedValidatorId: boolean; @@ -2082,26 +2231,26 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidProof' | 'NoAssociatedValidatorId' | 'DuplicatedKey' | 'NoKeys' | 'NoAccount'; } - /** @name ParachainStakingRoundInfo (214) */ + /** @name ParachainStakingRoundInfo (230) */ interface ParachainStakingRoundInfo extends Struct { readonly current: u32; readonly first: u64; readonly length: u64; } - /** @name ParachainStakingDelegationCounter (215) */ + /** @name ParachainStakingDelegationCounter (231) */ interface ParachainStakingDelegationCounter extends Struct { readonly round: u32; readonly counter: u32; } - /** @name ParachainStakingStake (216) */ + /** @name ParachainStakingStake (232) */ interface ParachainStakingStake extends Struct { readonly owner: AccountId32; readonly amount: u128; } - /** @name ParachainStakingCandidate (217) */ + /** @name ParachainStakingCandidate (233) */ interface ParachainStakingCandidate extends Struct { readonly id: AccountId32; readonly stake: u128; @@ -2110,10 +2259,10 @@ declare module '@polkadot/types/lookup' { readonly status: ParachainStakingCandidateStatus; } - /** @name ParachainStakingSetOrderedSet (218) */ + /** @name ParachainStakingSetOrderedSet (234) */ interface ParachainStakingSetOrderedSet extends Vec {} - /** @name ParachainStakingCandidateStatus (221) */ + /** @name ParachainStakingCandidateStatus (237) */ interface ParachainStakingCandidateStatus extends Enum { readonly isActive: boolean; readonly isLeaving: boolean; @@ -2121,31 +2270,31 @@ declare module '@polkadot/types/lookup' { readonly type: 'Active' | 'Leaving'; } - /** @name ParachainStakingTotalStake (222) */ + /** @name ParachainStakingTotalStake (238) */ interface ParachainStakingTotalStake extends Struct { readonly collators: u128; readonly delegators: u128; } - /** @name ParachainStakingInflationInflationInfo (225) */ + /** @name ParachainStakingInflationInflationInfo (241) */ interface ParachainStakingInflationInflationInfo extends Struct { readonly collator: ParachainStakingInflationStakingInfo; readonly delegator: ParachainStakingInflationStakingInfo; } - /** @name ParachainStakingInflationStakingInfo (226) */ + /** @name ParachainStakingInflationStakingInfo (242) */ interface ParachainStakingInflationStakingInfo extends Struct { readonly maxRate: Perquintill; readonly rewardRate: ParachainStakingInflationRewardRate; } - /** @name ParachainStakingInflationRewardRate (227) */ + /** @name ParachainStakingInflationRewardRate (243) */ interface ParachainStakingInflationRewardRate extends Struct { readonly annual: Perquintill; readonly perBlock: Perquintill; } - /** @name ParachainStakingCall (232) */ + /** @name ParachainStakingCall (248) */ interface ParachainStakingCall extends Enum { readonly isForceNewRound: boolean; readonly isSetInflation: boolean; @@ -2214,7 +2363,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ForceNewRound' | 'SetInflation' | 'SetMaxSelectedCandidates' | 'SetBlocksPerRound' | 'SetMaxCandidateStake' | 'ForceRemoveCandidate' | 'JoinCandidates' | 'InitLeaveCandidates' | 'ExecuteLeaveCandidates' | 'CancelLeaveCandidates' | 'CandidateStakeMore' | 'CandidateStakeLess' | 'JoinDelegators' | 'LeaveDelegators' | 'DelegatorStakeMore' | 'DelegatorStakeLess' | 'UnlockUnstaked' | 'ClaimRewards' | 'IncrementCollatorRewards' | 'IncrementDelegatorRewards' | 'ExecuteScheduledRewardChange'; } - /** @name ParachainStakingError (233) */ + /** @name ParachainStakingError (249) */ interface ParachainStakingError extends Enum { readonly isDelegatorNotFound: boolean; readonly isCandidateNotFound: boolean; @@ -2250,7 +2399,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'DelegatorNotFound' | 'CandidateNotFound' | 'DelegatorExists' | 'CandidateExists' | 'ValStakeZero' | 'ValStakeBelowMin' | 'ValStakeAboveMax' | 'DelegationBelowMin' | 'AlreadyLeaving' | 'NotLeaving' | 'CannotLeaveYet' | 'CannotJoinBeforeUnlocking' | 'AlreadyDelegating' | 'NotYetDelegating' | 'DelegationsPerRoundExceeded' | 'TooManyDelegators' | 'TooFewCollatorCandidates' | 'CannotStakeIfLeaving' | 'CannotDelegateIfLeaving' | 'MaxCollatorsPerDelegatorExceeded' | 'AlreadyDelegatedCollator' | 'DelegationNotFound' | 'Underflow' | 'CannotSetAboveMax' | 'CannotSetBelowMin' | 'InvalidSchedule' | 'NoMoreUnstaking' | 'TooEarly' | 'StakeNotFound' | 'UnstakingIsEmpty' | 'RewardsNotFound'; } - /** @name FrameSupportPreimagesBounded (236) */ + /** @name FrameSupportPreimagesBounded (252) */ interface FrameSupportPreimagesBounded extends Enum { readonly isLegacy: boolean; readonly asLegacy: { @@ -2266,7 +2415,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Legacy' | 'Inline' | 'Lookup'; } - /** @name PalletDemocracyCall (238) */ + /** @name PalletDemocracyCall (254) */ interface PalletDemocracyCall extends Enum { readonly isPropose: boolean; readonly asPropose: { @@ -2350,7 +2499,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Propose' | 'Second' | 'Vote' | 'EmergencyCancel' | 'ExternalPropose' | 'ExternalProposeMajority' | 'ExternalProposeDefault' | 'FastTrack' | 'VetoExternal' | 'CancelReferendum' | 'Delegate' | 'Undelegate' | 'ClearPublicProposals' | 'Unlock' | 'RemoveVote' | 'RemoveOtherVote' | 'Blacklist' | 'CancelProposal' | 'SetMetadata'; } - /** @name PalletDemocracyConviction (239) */ + /** @name PalletDemocracyConviction (255) */ interface PalletDemocracyConviction extends Enum { readonly isNone: boolean; readonly isLocked1x: boolean; @@ -2362,7 +2511,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'None' | 'Locked1x' | 'Locked2x' | 'Locked3x' | 'Locked4x' | 'Locked5x' | 'Locked6x'; } - /** @name PalletCollectiveCall (242) */ + /** @name PalletCollectiveCall (258) */ interface PalletCollectiveCall extends Enum { readonly isSetMembers: boolean; readonly asSetMembers: { @@ -2387,13 +2536,6 @@ declare module '@polkadot/types/lookup' { readonly index: Compact; readonly approve: bool; } & Struct; - readonly isCloseOldWeight: boolean; - readonly asCloseOldWeight: { - readonly proposalHash: H256; - readonly index: Compact; - readonly proposalWeightBound: Compact; - readonly lengthBound: Compact; - } & Struct; readonly isDisapproveProposal: boolean; readonly asDisapproveProposal: { readonly proposalHash: H256; @@ -2405,10 +2547,10 @@ declare module '@polkadot/types/lookup' { readonly proposalWeightBound: SpWeightsWeightV2Weight; readonly lengthBound: Compact; } & Struct; - readonly type: 'SetMembers' | 'Execute' | 'Propose' | 'Vote' | 'CloseOldWeight' | 'DisapproveProposal' | 'Close'; + readonly type: 'SetMembers' | 'Execute' | 'Propose' | 'Vote' | 'DisapproveProposal' | 'Close'; } - /** @name PalletMembershipCall (247) */ + /** @name PalletMembershipCall (261) */ interface PalletMembershipCall extends Enum { readonly isAddMember: boolean; readonly asAddMember: { @@ -2439,7 +2581,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AddMember' | 'RemoveMember' | 'SwapMember' | 'ResetMembers' | 'ChangeKey' | 'SetPrime' | 'ClearPrime'; } - /** @name PalletTreasuryCall (248) */ + /** @name PalletTreasuryCall (262) */ interface PalletTreasuryCall extends Enum { readonly isProposeSpend: boolean; readonly asProposeSpend: { @@ -2466,7 +2608,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal' | 'Spend' | 'RemoveApproval'; } - /** @name PalletUtilityCall (249) */ + /** @name PalletUtilityCall (263) */ interface PalletUtilityCall extends Enum { readonly isBatch: boolean; readonly asBatch: { @@ -2498,7 +2640,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Batch' | 'AsDerivative' | 'BatchAll' | 'DispatchAs' | 'ForceBatch' | 'WithWeight'; } - /** @name SpiritnetRuntimeOriginCaller (251) */ + /** @name SpiritnetRuntimeOriginCaller (265) */ interface SpiritnetRuntimeOriginCaller extends Enum { readonly isSystem: boolean; readonly asSystem: FrameSupportDispatchRawOrigin; @@ -2516,7 +2658,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'System' | 'Void' | 'Council' | 'TechnicalCommittee' | 'Did' | 'PolkadotXcm' | 'CumulusXcm'; } - /** @name FrameSupportDispatchRawOrigin (252) */ + /** @name FrameSupportDispatchRawOrigin (266) */ interface FrameSupportDispatchRawOrigin extends Enum { readonly isRoot: boolean; readonly isSigned: boolean; @@ -2525,7 +2667,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Root' | 'Signed' | 'None'; } - /** @name PalletCollectiveRawOrigin (253) */ + /** @name PalletCollectiveRawOrigin (267) */ interface PalletCollectiveRawOrigin extends Enum { readonly isMembers: boolean; readonly asMembers: ITuple<[u32, u32]>; @@ -2535,13 +2677,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Members' | 'Member' | 'Phantom'; } - /** @name DidOriginDidRawOrigin (255) */ + /** @name DidOriginDidRawOrigin (269) */ interface DidOriginDidRawOrigin extends Struct { readonly id: AccountId32; readonly submitter: AccountId32; } - /** @name PalletXcmOrigin (256) */ + /** @name PalletXcmOrigin (270) */ interface PalletXcmOrigin extends Enum { readonly isXcm: boolean; readonly asXcm: XcmV3MultiLocation; @@ -2550,7 +2692,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Xcm' | 'Response'; } - /** @name CumulusPalletXcmOrigin (257) */ + /** @name CumulusPalletXcmOrigin (271) */ interface CumulusPalletXcmOrigin extends Enum { readonly isRelay: boolean; readonly isSiblingParachain: boolean; @@ -2558,10 +2700,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'Relay' | 'SiblingParachain'; } - /** @name SpCoreVoid (258) */ + /** @name SpCoreVoid (272) */ type SpCoreVoid = Null; - /** @name PalletVestingCall (259) */ + /** @name PalletVestingCall (273) */ interface PalletVestingCall extends Enum { readonly isVest: boolean; readonly isVestOther: boolean; @@ -2587,14 +2729,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Vest' | 'VestOther' | 'VestedTransfer' | 'ForceVestedTransfer' | 'MergeSchedules'; } - /** @name PalletVestingVestingInfo (260) */ + /** @name PalletVestingVestingInfo (274) */ interface PalletVestingVestingInfo extends Struct { readonly locked: u128; readonly perBlock: u128; readonly startingBlock: u64; } - /** @name PalletSchedulerCall (261) */ + /** @name PalletSchedulerCall (275) */ interface PalletSchedulerCall extends Enum { readonly isSchedule: boolean; readonly asSchedule: { @@ -2638,7 +2780,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Schedule' | 'Cancel' | 'ScheduleNamed' | 'CancelNamed' | 'ScheduleAfter' | 'ScheduleNamedAfter'; } - /** @name PalletProxyCall (263) */ + /** @name PalletProxyCall (277) */ interface PalletProxyCall extends Enum { readonly isProxy: boolean; readonly asProxy: { @@ -2698,7 +2840,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Proxy' | 'AddProxy' | 'RemoveProxy' | 'RemoveProxies' | 'CreatePure' | 'KillPure' | 'Announce' | 'RemoveAnnouncement' | 'RejectAnnouncement' | 'ProxyAnnounced'; } - /** @name PalletPreimageCall (265) */ + /** @name PalletPreimageCall (279) */ interface PalletPreimageCall extends Enum { readonly isNotePreimage: boolean; readonly asNotePreimage: { @@ -2719,7 +2861,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotePreimage' | 'UnnotePreimage' | 'RequestPreimage' | 'UnrequestPreimage'; } - /** @name PalletTipsCall (267) */ + /** @name PalletTipsCall (281) */ interface PalletTipsCall extends Enum { readonly isReportAwesome: boolean; readonly asReportAwesome: { @@ -2752,7 +2894,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ReportAwesome' | 'RetractTip' | 'TipNew' | 'Tip' | 'CloseTip' | 'SlashTip'; } - /** @name PalletMultisigCall (268) */ + /** @name PalletMultisigCall (282) */ interface PalletMultisigCall extends Enum { readonly isAsMultiThreshold1: boolean; readonly asAsMultiThreshold1: { @@ -2785,7 +2927,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AsMultiThreshold1' | 'AsMulti' | 'ApproveAsMulti' | 'CancelAsMulti'; } - /** @name CtypeCall (270) */ + /** @name CtypeCall (284) */ interface CtypeCall extends Enum { readonly isAdd: boolean; readonly asAdd: { @@ -2799,7 +2941,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Add' | 'SetBlockNumber'; } - /** @name AttestationCall (271) */ + /** @name AttestationCall (285) */ interface AttestationCall extends Enum { readonly isAdd: boolean; readonly asAdd: { @@ -2832,23 +2974,23 @@ declare module '@polkadot/types/lookup' { readonly type: 'Add' | 'Revoke' | 'Remove' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name RuntimeCommonAuthorizationPalletAuthorize (273) */ + /** @name RuntimeCommonAuthorizationPalletAuthorize (287) */ interface RuntimeCommonAuthorizationPalletAuthorize extends Enum { readonly isDelegation: boolean; readonly asDelegation: DelegationAccessControlDelegationAc; readonly type: 'Delegation'; } - /** @name DelegationAccessControlDelegationAc (274) */ + /** @name DelegationAccessControlDelegationAc (288) */ interface DelegationAccessControlDelegationAc extends Struct { readonly subjectNodeId: H256; readonly maxChecks: u32; } - /** @name SpiritnetRuntimeRuntime (275) */ + /** @name SpiritnetRuntimeRuntime (289) */ type SpiritnetRuntimeRuntime = Null; - /** @name DelegationCall (276) */ + /** @name DelegationCall (290) */ interface DelegationCall extends Enum { readonly isCreateHierarchy: boolean; readonly asCreateHierarchy: { @@ -2890,7 +3032,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CreateHierarchy' | 'AddDelegation' | 'RevokeDelegation' | 'RemoveDelegation' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name DidDidDetailsDidSignature (277) */ + /** @name DidDidDetailsDidSignature (291) */ interface DidDidDetailsDidSignature extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Signature; @@ -2901,16 +3043,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name SpCoreEd25519Signature (278) */ + /** @name SpCoreEd25519Signature (292) */ interface SpCoreEd25519Signature extends U8aFixed {} - /** @name SpCoreSr25519Signature (280) */ + /** @name SpCoreSr25519Signature (294) */ interface SpCoreSr25519Signature extends U8aFixed {} - /** @name SpCoreEcdsaSignature (281) */ + /** @name SpCoreEcdsaSignature (295) */ interface SpCoreEcdsaSignature extends U8aFixed {} - /** @name DidCall (283) */ + /** @name DidCall (297) */ interface DidCall extends Enum { readonly isCreate: boolean; readonly asCreate: { @@ -2969,7 +3111,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Create' | 'SetAuthenticationKey' | 'SetDelegationKey' | 'RemoveDelegationKey' | 'SetAttestationKey' | 'RemoveAttestationKey' | 'AddKeyAgreementKey' | 'RemoveKeyAgreementKey' | 'AddServiceEndpoint' | 'RemoveServiceEndpoint' | 'Delete' | 'ReclaimDeposit' | 'SubmitDidCall' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name DidDidDetailsDidCreationDetails (284) */ + /** @name DidDidDetailsDidCreationDetails (298) */ interface DidDidDetailsDidCreationDetails extends Struct { readonly did: AccountId32; readonly submitter: AccountId32; @@ -2979,14 +3121,24 @@ declare module '@polkadot/types/lookup' { readonly newServiceDetails: Vec; } - /** @name DidDidDetailsDidEncryptionKey (286) */ + /** @name RuntimeCommonConstantsDidMaxNewKeyAgreementKeys (299) */ + type RuntimeCommonConstantsDidMaxNewKeyAgreementKeys = Null; + + /** @name DidServiceEndpointsDidEndpoint (300) */ + interface DidServiceEndpointsDidEndpoint extends Struct { + readonly id: Bytes; + readonly serviceTypes: Vec; + readonly urls: Vec; + } + + /** @name DidDidDetailsDidEncryptionKey (309) */ interface DidDidDetailsDidEncryptionKey extends Enum { readonly isX25519: boolean; readonly asX25519: U8aFixed; readonly type: 'X25519'; } - /** @name DidDidDetailsDidVerificationKey (290) */ + /** @name DidDidDetailsDidVerificationKey (313) */ interface DidDidDetailsDidVerificationKey extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Public; @@ -2997,20 +3149,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name SpCoreEd25519Public (291) */ + /** @name SpCoreEd25519Public (314) */ interface SpCoreEd25519Public extends U8aFixed {} - /** @name SpCoreEcdsaPublic (292) */ + /** @name SpCoreEcdsaPublic (315) */ interface SpCoreEcdsaPublic extends U8aFixed {} - /** @name DidServiceEndpointsDidEndpoint (295) */ - interface DidServiceEndpointsDidEndpoint extends Struct { - readonly id: Bytes; - readonly serviceTypes: Vec; - readonly urls: Vec; - } - - /** @name DidDidDetailsDidAuthorizedCallOperation (303) */ + /** @name DidDidDetailsDidAuthorizedCallOperation (318) */ interface DidDidDetailsDidAuthorizedCallOperation extends Struct { readonly did: AccountId32; readonly txCounter: u64; @@ -3019,7 +3164,7 @@ declare module '@polkadot/types/lookup' { readonly submitter: AccountId32; } - /** @name PalletDidLookupCall (304) */ + /** @name PalletDidLookupCall (319) */ interface PalletDidLookupCall extends Enum { readonly isAssociateAccount: boolean; readonly asAssociateAccount: { @@ -3047,7 +3192,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AssociateAccount' | 'AssociateSender' | 'RemoveSenderAssociation' | 'RemoveAccountAssociation' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name PalletDidLookupAssociateAccountRequest (305) */ + /** @name PalletDidLookupAssociateAccountRequest (320) */ interface PalletDidLookupAssociateAccountRequest extends Enum { readonly isPolkadot: boolean; readonly asPolkadot: ITuple<[AccountId32, SpRuntimeMultiSignature]>; @@ -3056,7 +3201,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Polkadot' | 'Ethereum'; } - /** @name SpRuntimeMultiSignature (306) */ + /** @name SpRuntimeMultiSignature (321) */ interface SpRuntimeMultiSignature extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Signature; @@ -3067,10 +3212,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name PalletDidLookupAccountEthereumSignature (307) */ + /** @name PalletDidLookupAccountEthereumSignature (322) */ interface PalletDidLookupAccountEthereumSignature extends SpCoreEcdsaSignature {} - /** @name PalletWeb3NamesCall (308) */ + /** @name PalletWeb3NamesCall (323) */ interface PalletWeb3NamesCall extends Enum { readonly isClaim: boolean; readonly asClaim: { @@ -3097,7 +3242,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Claim' | 'ReleaseByOwner' | 'ReclaimDeposit' | 'Ban' | 'Unban' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name PublicCredentialsCall (309) */ + /** @name PublicCredentialsCall (324) */ interface PublicCredentialsCall extends Enum { readonly isAdd: boolean; readonly asAdd: { @@ -3133,7 +3278,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Add' | 'Revoke' | 'Unrevoke' | 'Remove' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name PublicCredentialsCredentialsCredential (310) */ + /** @name PublicCredentialsCredentialsCredential (325) */ interface PublicCredentialsCredentialsCredential extends Struct { readonly ctypeHash: H256; readonly subject: Bytes; @@ -3141,7 +3286,7 @@ declare module '@polkadot/types/lookup' { readonly authorization: Option; } - /** @name CumulusPalletParachainSystemCall (313) */ + /** @name CumulusPalletParachainSystemCall (328) */ interface CumulusPalletParachainSystemCall extends Enum { readonly isSetValidationData: boolean; readonly asSetValidationData: { @@ -3163,40 +3308,40 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetValidationData' | 'SudoSendUpwardMessage' | 'AuthorizeUpgrade' | 'EnactAuthorizedUpgrade'; } - /** @name CumulusPrimitivesParachainInherentParachainInherentData (314) */ + /** @name CumulusPrimitivesParachainInherentParachainInherentData (329) */ interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct { - readonly validationData: PolkadotPrimitivesV2PersistedValidationData; + readonly validationData: PolkadotPrimitivesV4PersistedValidationData; readonly relayChainState: SpTrieStorageProof; readonly downwardMessages: Vec; readonly horizontalMessages: BTreeMap>; } - /** @name PolkadotPrimitivesV2PersistedValidationData (315) */ - interface PolkadotPrimitivesV2PersistedValidationData extends Struct { + /** @name PolkadotPrimitivesV4PersistedValidationData (330) */ + interface PolkadotPrimitivesV4PersistedValidationData extends Struct { readonly parentHead: Bytes; readonly relayParentNumber: u32; readonly relayParentStorageRoot: H256; readonly maxPovSize: u32; } - /** @name SpTrieStorageProof (317) */ + /** @name SpTrieStorageProof (332) */ interface SpTrieStorageProof extends Struct { readonly trieNodes: BTreeSet; } - /** @name PolkadotCorePrimitivesInboundDownwardMessage (320) */ + /** @name PolkadotCorePrimitivesInboundDownwardMessage (335) */ interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct { readonly sentAt: u32; readonly msg: Bytes; } - /** @name PolkadotCorePrimitivesInboundHrmpMessage (323) */ + /** @name PolkadotCorePrimitivesInboundHrmpMessage (338) */ interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct { readonly sentAt: u32; readonly data: Bytes; } - /** @name CumulusPalletXcmpQueueCall (326) */ + /** @name CumulusPalletXcmpQueueCall (341) */ interface CumulusPalletXcmpQueueCall extends Enum { readonly isServiceOverweight: boolean; readonly asServiceOverweight: { @@ -3232,7 +3377,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight'; } - /** @name PalletXcmCall (327) */ + /** @name PalletXcmCall (342) */ interface PalletXcmCall extends Enum { readonly isSend: boolean; readonly asSend: { @@ -3291,10 +3436,14 @@ declare module '@polkadot/types/lookup' { readonly feeAssetItem: u32; readonly weightLimit: XcmV3WeightLimit; } & Struct; - readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets'; + readonly isForceSuspension: boolean; + readonly asForceSuspension: { + readonly suspended: bool; + } & Struct; + readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets' | 'ForceSuspension'; } - /** @name XcmVersionedXcm (328) */ + /** @name XcmVersionedXcm (343) */ interface XcmVersionedXcm extends Enum { readonly isV2: boolean; readonly asV2: XcmV2Xcm; @@ -3303,10 +3452,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'V2' | 'V3'; } - /** @name XcmV2Xcm (329) */ + /** @name XcmV2Xcm (344) */ interface XcmV2Xcm extends Vec {} - /** @name XcmV2Instruction (331) */ + /** @name XcmV2Instruction (346) */ interface XcmV2Instruction extends Enum { readonly isWithdrawAsset: boolean; readonly asWithdrawAsset: XcmV2MultiassetMultiAssets; @@ -3426,7 +3575,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion'; } - /** @name XcmV2Response (332) */ + /** @name XcmV2Response (347) */ interface XcmV2Response extends Enum { readonly isNull: boolean; readonly isAssets: boolean; @@ -3438,7 +3587,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version'; } - /** @name XcmV2TraitsError (335) */ + /** @name XcmV2TraitsError (350) */ interface XcmV2TraitsError extends Enum { readonly isOverflow: boolean; readonly isUnimplemented: boolean; @@ -3471,7 +3620,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable'; } - /** @name XcmV2MultiassetMultiAssetFilter (336) */ + /** @name XcmV2MultiassetMultiAssetFilter (351) */ interface XcmV2MultiassetMultiAssetFilter extends Enum { readonly isDefinite: boolean; readonly asDefinite: XcmV2MultiassetMultiAssets; @@ -3480,7 +3629,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Definite' | 'Wild'; } - /** @name XcmV2MultiassetWildMultiAsset (337) */ + /** @name XcmV2MultiassetWildMultiAsset (352) */ interface XcmV2MultiassetWildMultiAsset extends Enum { readonly isAll: boolean; readonly isAllOf: boolean; @@ -3491,14 +3640,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'All' | 'AllOf'; } - /** @name XcmV2MultiassetWildFungibility (338) */ + /** @name XcmV2MultiassetWildFungibility (353) */ interface XcmV2MultiassetWildFungibility extends Enum { readonly isFungible: boolean; readonly isNonFungible: boolean; readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV2WeightLimit (339) */ + /** @name XcmV2WeightLimit (354) */ interface XcmV2WeightLimit extends Enum { readonly isUnlimited: boolean; readonly isLimited: boolean; @@ -3506,7 +3655,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unlimited' | 'Limited'; } - /** @name CumulusPalletDmpQueueCall (348) */ + /** @name CumulusPalletDmpQueueCall (363) */ interface CumulusPalletDmpQueueCall extends Enum { readonly isServiceOverweight: boolean; readonly asServiceOverweight: { @@ -3516,7 +3665,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ServiceOverweight'; } - /** @name PalletDemocracyReferendumInfo (352) */ + /** @name PalletDemocracyReferendumInfo (367) */ interface PalletDemocracyReferendumInfo extends Enum { readonly isOngoing: boolean; readonly asOngoing: PalletDemocracyReferendumStatus; @@ -3528,7 +3677,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ongoing' | 'Finished'; } - /** @name PalletDemocracyReferendumStatus (353) */ + /** @name PalletDemocracyReferendumStatus (368) */ interface PalletDemocracyReferendumStatus extends Struct { readonly end: u64; readonly proposal: FrameSupportPreimagesBounded; @@ -3537,14 +3686,14 @@ declare module '@polkadot/types/lookup' { readonly tally: PalletDemocracyTally; } - /** @name PalletDemocracyTally (354) */ + /** @name PalletDemocracyTally (369) */ interface PalletDemocracyTally extends Struct { readonly ayes: u128; readonly nays: u128; readonly turnout: u128; } - /** @name PalletDemocracyVoteVoting (355) */ + /** @name PalletDemocracyVoteVoting (370) */ interface PalletDemocracyVoteVoting extends Enum { readonly isDirect: boolean; readonly asDirect: { @@ -3563,16 +3712,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'Direct' | 'Delegating'; } - /** @name PalletDemocracyDelegations (359) */ + /** @name PalletDemocracyDelegations (374) */ interface PalletDemocracyDelegations extends Struct { readonly votes: u128; readonly capital: u128; } - /** @name PalletDemocracyVotePriorLock (360) */ + /** @name PalletDemocracyVotePriorLock (375) */ interface PalletDemocracyVotePriorLock extends ITuple<[u64, u128]> {} - /** @name PalletDemocracyError (363) */ + /** @name PalletDemocracyError (378) */ interface PalletDemocracyError extends Enum { readonly isValueLow: boolean; readonly isProposalMissing: boolean; @@ -3601,7 +3750,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ValueLow' | 'ProposalMissing' | 'AlreadyCanceled' | 'DuplicateProposal' | 'ProposalBlacklisted' | 'NotSimpleMajority' | 'InvalidHash' | 'NoProposal' | 'AlreadyVetoed' | 'ReferendumInvalid' | 'NoneWaiting' | 'NotVoter' | 'NoPermission' | 'AlreadyDelegating' | 'InsufficientFunds' | 'NotDelegating' | 'VotesExist' | 'InstantNotAllowed' | 'Nonsense' | 'WrongUpperBound' | 'MaxVotesReached' | 'TooMany' | 'VotingPeriodLow' | 'PreimageNotExist'; } - /** @name PalletCollectiveVotes (365) */ + /** @name PalletCollectiveVotes (380) */ interface PalletCollectiveVotes extends Struct { readonly index: u32; readonly threshold: u32; @@ -3610,7 +3759,7 @@ declare module '@polkadot/types/lookup' { readonly end: u64; } - /** @name PalletCollectiveError (366) */ + /** @name PalletCollectiveError (381) */ interface PalletCollectiveError extends Enum { readonly isNotMember: boolean; readonly isDuplicateProposal: boolean; @@ -3625,7 +3774,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotMember' | 'DuplicateProposal' | 'ProposalMissing' | 'WrongIndex' | 'DuplicateVote' | 'AlreadyInitialized' | 'TooEarly' | 'TooManyProposals' | 'WrongProposalWeight' | 'WrongProposalLength'; } - /** @name PalletMembershipError (370) */ + /** @name PalletMembershipError (385) */ interface PalletMembershipError extends Enum { readonly isAlreadyMember: boolean; readonly isNotMember: boolean; @@ -3633,7 +3782,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AlreadyMember' | 'NotMember' | 'TooManyMembers'; } - /** @name PalletTreasuryProposal (371) */ + /** @name PalletTreasuryProposal (386) */ interface PalletTreasuryProposal extends Struct { readonly proposer: AccountId32; readonly value: u128; @@ -3641,10 +3790,10 @@ declare module '@polkadot/types/lookup' { readonly bond: u128; } - /** @name FrameSupportPalletId (375) */ + /** @name FrameSupportPalletId (390) */ interface FrameSupportPalletId extends U8aFixed {} - /** @name PalletTreasuryError (376) */ + /** @name PalletTreasuryError (391) */ interface PalletTreasuryError extends Enum { readonly isInsufficientProposersBalance: boolean; readonly isInvalidIndex: boolean; @@ -3654,20 +3803,20 @@ declare module '@polkadot/types/lookup' { readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'TooManyApprovals' | 'InsufficientPermission' | 'ProposalNotApproved'; } - /** @name PalletUtilityError (377) */ + /** @name PalletUtilityError (392) */ interface PalletUtilityError extends Enum { readonly isTooManyCalls: boolean; readonly type: 'TooManyCalls'; } - /** @name PalletVestingReleases (380) */ + /** @name PalletVestingReleases (395) */ interface PalletVestingReleases extends Enum { readonly isV0: boolean; readonly isV1: boolean; readonly type: 'V0' | 'V1'; } - /** @name PalletVestingError (381) */ + /** @name PalletVestingError (396) */ interface PalletVestingError extends Enum { readonly isNotVesting: boolean; readonly isAtMaxVestingSchedules: boolean; @@ -3677,7 +3826,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotVesting' | 'AtMaxVestingSchedules' | 'AmountLow' | 'ScheduleIndexOutOfBounds' | 'InvalidScheduleParams'; } - /** @name PalletSchedulerScheduled (384) */ + /** @name PalletSchedulerScheduled (399) */ interface PalletSchedulerScheduled extends Struct { readonly maybeId: Option; readonly priority: u8; @@ -3686,7 +3835,7 @@ declare module '@polkadot/types/lookup' { readonly origin: SpiritnetRuntimeOriginCaller; } - /** @name PalletSchedulerError (386) */ + /** @name PalletSchedulerError (401) */ interface PalletSchedulerError extends Enum { readonly isFailedToSchedule: boolean; readonly isNotFound: boolean; @@ -3696,21 +3845,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange' | 'Named'; } - /** @name PalletProxyProxyDefinition (389) */ + /** @name PalletProxyProxyDefinition (404) */ interface PalletProxyProxyDefinition extends Struct { readonly delegate: AccountId32; readonly proxyType: SpiritnetRuntimeProxyType; readonly delay: u64; } - /** @name PalletProxyAnnouncement (393) */ + /** @name PalletProxyAnnouncement (408) */ interface PalletProxyAnnouncement extends Struct { readonly real: AccountId32; readonly callHash: H256; readonly height: u64; } - /** @name PalletProxyError (395) */ + /** @name PalletProxyError (410) */ interface PalletProxyError extends Enum { readonly isTooMany: boolean; readonly isNotFound: boolean; @@ -3723,7 +3872,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'TooMany' | 'NotFound' | 'NotProxy' | 'Unproxyable' | 'Duplicate' | 'NoPermission' | 'Unannounced' | 'NoSelfProxy'; } - /** @name PalletPreimageRequestStatus (396) */ + /** @name PalletPreimageRequestStatus (411) */ interface PalletPreimageRequestStatus extends Enum { readonly isUnrequested: boolean; readonly asUnrequested: { @@ -3739,7 +3888,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unrequested' | 'Requested'; } - /** @name PalletPreimageError (401) */ + /** @name PalletPreimageError (416) */ interface PalletPreimageError extends Enum { readonly isTooBig: boolean; readonly isAlreadyNoted: boolean; @@ -3750,7 +3899,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'TooBig' | 'AlreadyNoted' | 'NotAuthorized' | 'NotNoted' | 'Requested' | 'NotRequested'; } - /** @name PalletTipsOpenTip (404) */ + /** @name PalletTipsOpenTip (419) */ interface PalletTipsOpenTip extends Struct { readonly reason: H256; readonly who: AccountId32; @@ -3761,7 +3910,7 @@ declare module '@polkadot/types/lookup' { readonly findersFee: bool; } - /** @name PalletTipsError (408) */ + /** @name PalletTipsError (423) */ interface PalletTipsError extends Enum { readonly isReasonTooBig: boolean; readonly isAlreadyKnown: boolean; @@ -3772,7 +3921,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ReasonTooBig' | 'AlreadyKnown' | 'UnknownTip' | 'NotFinder' | 'StillOpen' | 'Premature'; } - /** @name PalletMultisigMultisig (410) */ + /** @name PalletMultisigMultisig (425) */ interface PalletMultisigMultisig extends Struct { readonly when: PalletMultisigTimepoint; readonly deposit: u128; @@ -3780,7 +3929,7 @@ declare module '@polkadot/types/lookup' { readonly approvals: Vec; } - /** @name PalletMultisigError (412) */ + /** @name PalletMultisigError (427) */ interface PalletMultisigError extends Enum { readonly isMinimumThreshold: boolean; readonly isAlreadyApproved: boolean; @@ -3799,13 +3948,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'MinimumThreshold' | 'AlreadyApproved' | 'NoApprovalsNeeded' | 'TooFewSignatories' | 'TooManySignatories' | 'SignatoriesOutOfOrder' | 'SenderInSignatories' | 'NotFound' | 'NotOwner' | 'NoTimepoint' | 'WrongTimepoint' | 'UnexpectedTimepoint' | 'MaxWeightTooLow' | 'AlreadyStored'; } - /** @name CtypeCtypeEntry (413) */ + /** @name CtypeCtypeEntry (428) */ interface CtypeCtypeEntry extends Struct { readonly creator: AccountId32; readonly createdAt: u64; } - /** @name CtypeError (414) */ + /** @name CtypeError (429) */ interface CtypeError extends Enum { readonly isNotFound: boolean; readonly isAlreadyExists: boolean; @@ -3813,7 +3962,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotFound' | 'AlreadyExists' | 'UnableToPayFees'; } - /** @name AttestationAttestationsAttestationDetails (415) */ + /** @name AttestationAttestationsAttestationDetails (430) */ interface AttestationAttestationsAttestationDetails extends Struct { readonly ctypeHash: H256; readonly attester: AccountId32; @@ -3822,13 +3971,13 @@ declare module '@polkadot/types/lookup' { readonly deposit: KiltSupportDeposit; } - /** @name KiltSupportDeposit (416) */ + /** @name KiltSupportDeposit (431) */ interface KiltSupportDeposit extends Struct { readonly owner: AccountId32; readonly amount: u128; } - /** @name AttestationError (418) */ + /** @name AttestationError (433) */ interface AttestationError extends Enum { readonly isAlreadyAttested: boolean; readonly isAlreadyRevoked: boolean; @@ -3839,7 +3988,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AlreadyAttested' | 'AlreadyRevoked' | 'NotFound' | 'CTypeMismatch' | 'NotAuthorized' | 'MaxDelegatedAttestationsExceeded'; } - /** @name DelegationDelegationHierarchyDelegationNode (419) */ + /** @name DelegationDelegationHierarchyDelegationNode (434) */ interface DelegationDelegationHierarchyDelegationNode extends Struct { readonly hierarchyRootId: H256; readonly parent: Option; @@ -3848,19 +3997,22 @@ declare module '@polkadot/types/lookup' { readonly deposit: KiltSupportDeposit; } - /** @name DelegationDelegationHierarchyDelegationDetails (422) */ + /** @name RuntimeCommonConstantsDelegationMaxChildren (435) */ + type RuntimeCommonConstantsDelegationMaxChildren = Null; + + /** @name DelegationDelegationHierarchyDelegationDetails (436) */ interface DelegationDelegationHierarchyDelegationDetails extends Struct { readonly owner: AccountId32; readonly revoked: bool; readonly permissions: DelegationDelegationHierarchyPermissions; } - /** @name DelegationDelegationHierarchyDelegationHierarchyDetails (423) */ + /** @name DelegationDelegationHierarchyDelegationHierarchyDetails (439) */ interface DelegationDelegationHierarchyDelegationHierarchyDetails extends Struct { readonly ctypeHash: H256; } - /** @name DelegationError (424) */ + /** @name DelegationError (440) */ interface DelegationError extends Enum { readonly isDelegationAlreadyExists: boolean; readonly isInvalidDelegateSignature: boolean; @@ -3887,7 +4039,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'DelegationAlreadyExists' | 'InvalidDelegateSignature' | 'DelegationNotFound' | 'DelegateNotFound' | 'HierarchyAlreadyExists' | 'HierarchyNotFound' | 'MaxSearchDepthReached' | 'NotOwnerOfParentDelegation' | 'NotOwnerOfDelegationHierarchy' | 'ParentDelegationNotFound' | 'ParentDelegationRevoked' | 'UnauthorizedRevocation' | 'UnauthorizedRemoval' | 'UnauthorizedDelegation' | 'AccessDenied' | 'ExceededRevocationBounds' | 'ExceededRemovalBounds' | 'MaxRevocationsTooLarge' | 'MaxRemovalsTooLarge' | 'MaxParentChecksTooLarge' | 'Internal' | 'MaxChildrenExceeded'; } - /** @name DidDidDetails (425) */ + /** @name DidDidDetails (441) */ interface DidDidDetails extends Struct { readonly authenticationKey: H256; readonly keyAgreementKeys: BTreeSet; @@ -3898,13 +4050,13 @@ declare module '@polkadot/types/lookup' { readonly deposit: KiltSupportDeposit; } - /** @name DidDidDetailsDidPublicKeyDetails (428) */ + /** @name DidDidDetailsDidPublicKeyDetails (444) */ interface DidDidDetailsDidPublicKeyDetails extends Struct { readonly key: DidDidDetailsDidPublicKey; readonly blockNumber: u64; } - /** @name DidDidDetailsDidPublicKey (429) */ + /** @name DidDidDetailsDidPublicKey (445) */ interface DidDidDetailsDidPublicKey extends Enum { readonly isPublicVerificationKey: boolean; readonly asPublicVerificationKey: DidDidDetailsDidVerificationKey; @@ -3913,7 +4065,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'PublicVerificationKey' | 'PublicEncryptionKey'; } - /** @name DidError (434) */ + /** @name DidError (450) */ interface DidError extends Enum { readonly isInvalidSignatureFormat: boolean; readonly isInvalidSignature: boolean; @@ -3945,13 +4097,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidSignatureFormat' | 'InvalidSignature' | 'AlreadyExists' | 'NotFound' | 'VerificationKeyNotFound' | 'InvalidNonce' | 'UnsupportedDidAuthorizationCall' | 'InvalidDidAuthorizationCall' | 'MaxNewKeyAgreementKeysLimitExceeded' | 'MaxPublicKeysExceeded' | 'MaxKeyAgreementKeysExceeded' | 'BadDidOrigin' | 'TransactionExpired' | 'AlreadyDeleted' | 'NotOwnerOfDeposit' | 'UnableToPayFees' | 'MaxNumberOfServicesExceeded' | 'MaxServiceIdLengthExceeded' | 'MaxServiceTypeLengthExceeded' | 'MaxNumberOfTypesPerServiceExceeded' | 'MaxServiceUrlLengthExceeded' | 'MaxNumberOfUrlsPerServiceExceeded' | 'ServiceAlreadyExists' | 'ServiceNotFound' | 'InvalidServiceEncoding' | 'MaxStoredEndpointsCountExceeded' | 'Internal'; } - /** @name PalletDidLookupConnectionRecord (435) */ + /** @name PalletDidLookupConnectionRecord (451) */ interface PalletDidLookupConnectionRecord extends Struct { readonly did: AccountId32; readonly deposit: KiltSupportDeposit; } - /** @name PalletDidLookupError (437) */ + /** @name PalletDidLookupError (453) */ interface PalletDidLookupError extends Enum { readonly isNotFound: boolean; readonly isNotAuthorized: boolean; @@ -3961,14 +4113,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotFound' | 'NotAuthorized' | 'OutdatedProof' | 'InsufficientFunds' | 'Migration'; } - /** @name PalletWeb3NamesWeb3NameWeb3NameOwnership (438) */ + /** @name PalletWeb3NamesWeb3NameWeb3NameOwnership (454) */ interface PalletWeb3NamesWeb3NameWeb3NameOwnership extends Struct { readonly owner: AccountId32; readonly claimedAt: u64; readonly deposit: KiltSupportDeposit; } - /** @name PalletWeb3NamesError (439) */ + /** @name PalletWeb3NamesError (455) */ interface PalletWeb3NamesError extends Enum { readonly isInsufficientFunds: boolean; readonly isAlreadyExists: boolean; @@ -3985,7 +4137,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InsufficientFunds' | 'AlreadyExists' | 'NotFound' | 'OwnerAlreadyExists' | 'OwnerNotFound' | 'Banned' | 'NotBanned' | 'AlreadyBanned' | 'NotAuthorized' | 'TooShort' | 'TooLong' | 'InvalidCharacter'; } - /** @name PublicCredentialsCredentialsCredentialEntry (441) */ + /** @name PublicCredentialsCredentialsCredentialEntry (457) */ interface PublicCredentialsCredentialsCredentialEntry extends Struct { readonly ctypeHash: H256; readonly attester: AccountId32; @@ -3995,7 +4147,7 @@ declare module '@polkadot/types/lookup' { readonly authorizationId: Option; } - /** @name PublicCredentialsError (442) */ + /** @name PublicCredentialsError (458) */ interface PublicCredentialsError extends Enum { readonly isAlreadyAttested: boolean; readonly isNotFound: boolean; @@ -4006,22 +4158,28 @@ declare module '@polkadot/types/lookup' { readonly type: 'AlreadyAttested' | 'NotFound' | 'UnableToPayFees' | 'InvalidInput' | 'NotAuthorized' | 'Internal'; } - /** @name PolkadotPrimitivesV2UpgradeRestriction (444) */ - interface PolkadotPrimitivesV2UpgradeRestriction extends Enum { + /** @name PolkadotPrimitivesV4UpgradeRestriction (460) */ + interface PolkadotPrimitivesV4UpgradeRestriction extends Enum { readonly isPresent: boolean; readonly type: 'Present'; } - /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (445) */ + /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (461) */ interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct { readonly dmqMqcHead: H256; - readonly relayDispatchQueueSize: ITuple<[u32, u32]>; - readonly ingressChannels: Vec>; - readonly egressChannels: Vec>; + readonly relayDispatchQueueSize: CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize; + readonly ingressChannels: Vec>; + readonly egressChannels: Vec>; + } + + /** @name CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize (462) */ + interface CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize extends Struct { + readonly remainingCount: u32; + readonly remainingSize: u32; } - /** @name PolkadotPrimitivesV2AbridgedHrmpChannel (449) */ - interface PolkadotPrimitivesV2AbridgedHrmpChannel extends Struct { + /** @name PolkadotPrimitivesV4AbridgedHrmpChannel (465) */ + interface PolkadotPrimitivesV4AbridgedHrmpChannel extends Struct { readonly maxCapacity: u32; readonly maxTotalSize: u32; readonly maxMessageSize: u32; @@ -4030,8 +4188,8 @@ declare module '@polkadot/types/lookup' { readonly mqcHead: Option; } - /** @name PolkadotPrimitivesV2AbridgedHostConfiguration (450) */ - interface PolkadotPrimitivesV2AbridgedHostConfiguration extends Struct { + /** @name PolkadotPrimitivesV4AbridgedHostConfiguration (466) */ + interface PolkadotPrimitivesV4AbridgedHostConfiguration extends Struct { readonly maxCodeSize: u32; readonly maxHeadDataSize: u32; readonly maxUpwardQueueCount: u32; @@ -4043,19 +4201,19 @@ declare module '@polkadot/types/lookup' { readonly validationUpgradeDelay: u32; } - /** @name PolkadotCorePrimitivesOutboundHrmpMessage (456) */ + /** @name PolkadotCorePrimitivesOutboundHrmpMessage (472) */ interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct { readonly recipient: u32; readonly data: Bytes; } - /** @name CumulusPalletParachainSystemCodeUpgradeAuthorization (457) */ + /** @name CumulusPalletParachainSystemCodeUpgradeAuthorization (473) */ interface CumulusPalletParachainSystemCodeUpgradeAuthorization extends Struct { readonly codeHash: H256; readonly checkVersion: bool; } - /** @name CumulusPalletParachainSystemError (458) */ + /** @name CumulusPalletParachainSystemError (474) */ interface CumulusPalletParachainSystemError extends Enum { readonly isOverlappingUpgrades: boolean; readonly isProhibitedByPolkadot: boolean; @@ -4068,21 +4226,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'OverlappingUpgrades' | 'ProhibitedByPolkadot' | 'TooBig' | 'ValidationDataNotAvailable' | 'HostConfigurationNotAvailable' | 'NotScheduled' | 'NothingAuthorized' | 'Unauthorized'; } - /** @name CumulusPalletXcmpQueueInboundChannelDetails (460) */ + /** @name CumulusPalletXcmpQueueInboundChannelDetails (476) */ interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct { readonly sender: u32; readonly state: CumulusPalletXcmpQueueInboundState; readonly messageMetadata: Vec>; } - /** @name CumulusPalletXcmpQueueInboundState (461) */ + /** @name CumulusPalletXcmpQueueInboundState (477) */ interface CumulusPalletXcmpQueueInboundState extends Enum { readonly isOk: boolean; readonly isSuspended: boolean; readonly type: 'Ok' | 'Suspended'; } - /** @name PolkadotParachainPrimitivesXcmpMessageFormat (464) */ + /** @name PolkadotParachainPrimitivesXcmpMessageFormat (480) */ interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum { readonly isConcatenatedVersionedXcm: boolean; readonly isConcatenatedEncodedBlob: boolean; @@ -4090,7 +4248,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals'; } - /** @name CumulusPalletXcmpQueueOutboundChannelDetails (467) */ + /** @name CumulusPalletXcmpQueueOutboundChannelDetails (483) */ interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct { readonly recipient: u32; readonly state: CumulusPalletXcmpQueueOutboundState; @@ -4099,14 +4257,14 @@ declare module '@polkadot/types/lookup' { readonly lastIndex: u16; } - /** @name CumulusPalletXcmpQueueOutboundState (468) */ + /** @name CumulusPalletXcmpQueueOutboundState (484) */ interface CumulusPalletXcmpQueueOutboundState extends Enum { readonly isOk: boolean; readonly isSuspended: boolean; readonly type: 'Ok' | 'Suspended'; } - /** @name CumulusPalletXcmpQueueQueueConfigData (470) */ + /** @name CumulusPalletXcmpQueueQueueConfigData (486) */ interface CumulusPalletXcmpQueueQueueConfigData extends Struct { readonly suspendThreshold: u32; readonly dropThreshold: u32; @@ -4116,7 +4274,7 @@ declare module '@polkadot/types/lookup' { readonly xcmpMaxIndividualWeight: SpWeightsWeightV2Weight; } - /** @name CumulusPalletXcmpQueueError (472) */ + /** @name CumulusPalletXcmpQueueError (488) */ interface CumulusPalletXcmpQueueError extends Enum { readonly isFailedToSend: boolean; readonly isBadXcmOrigin: boolean; @@ -4126,7 +4284,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit'; } - /** @name PalletXcmError (473) */ + /** @name PalletXcmError (489) */ interface PalletXcmError extends Enum { readonly isUnreachable: boolean; readonly isSendFailure: boolean; @@ -4151,47 +4309,47 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed' | 'InvalidAsset' | 'LowBalance' | 'TooManyLocks' | 'AccountNotSovereign' | 'FeesNotMet' | 'LockNotFound' | 'InUse'; } - /** @name CumulusPalletXcmError (474) */ + /** @name CumulusPalletXcmError (490) */ type CumulusPalletXcmError = Null; - /** @name CumulusPalletDmpQueueConfigData (475) */ + /** @name CumulusPalletDmpQueueConfigData (491) */ interface CumulusPalletDmpQueueConfigData extends Struct { readonly maxIndividual: SpWeightsWeightV2Weight; } - /** @name CumulusPalletDmpQueuePageIndexData (476) */ + /** @name CumulusPalletDmpQueuePageIndexData (492) */ interface CumulusPalletDmpQueuePageIndexData extends Struct { readonly beginUsed: u32; readonly endUsed: u32; readonly overweightCount: u64; } - /** @name CumulusPalletDmpQueueError (479) */ + /** @name CumulusPalletDmpQueueError (495) */ interface CumulusPalletDmpQueueError extends Enum { readonly isUnknown: boolean; readonly isOverLimit: boolean; readonly type: 'Unknown' | 'OverLimit'; } - /** @name FrameSystemExtensionsCheckNonZeroSender (482) */ + /** @name FrameSystemExtensionsCheckNonZeroSender (498) */ type FrameSystemExtensionsCheckNonZeroSender = Null; - /** @name FrameSystemExtensionsCheckSpecVersion (483) */ + /** @name FrameSystemExtensionsCheckSpecVersion (499) */ type FrameSystemExtensionsCheckSpecVersion = Null; - /** @name FrameSystemExtensionsCheckTxVersion (484) */ + /** @name FrameSystemExtensionsCheckTxVersion (500) */ type FrameSystemExtensionsCheckTxVersion = Null; - /** @name FrameSystemExtensionsCheckGenesis (485) */ + /** @name FrameSystemExtensionsCheckGenesis (501) */ type FrameSystemExtensionsCheckGenesis = Null; - /** @name FrameSystemExtensionsCheckNonce (488) */ + /** @name FrameSystemExtensionsCheckNonce (504) */ interface FrameSystemExtensionsCheckNonce extends Compact {} - /** @name FrameSystemExtensionsCheckWeight (489) */ + /** @name FrameSystemExtensionsCheckWeight (505) */ type FrameSystemExtensionsCheckWeight = Null; - /** @name PalletTransactionPaymentChargeTransactionPayment (490) */ + /** @name PalletTransactionPaymentChargeTransactionPayment (506) */ interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} } // declare module diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 27be9b16b..780ecdcb0 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/chain-helpers", - "version": "0.33.2-6", + "version": "0.34.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/config/package.json b/packages/config/package.json index 0a41e4418..5ae6f8ff2 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/config", - "version": "0.33.2-6", + "version": "0.34.0", "description": "", "type": "commonjs", "main": "./lib/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 24f4c0b16..41baee506 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/core", - "version": "0.33.2-6", + "version": "0.34.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/core/src/ctype/CType.chain.ts b/packages/core/src/ctype/CType.chain.ts index e46137a4c..b21aa3813 100644 --- a/packages/core/src/ctype/CType.chain.ts +++ b/packages/core/src/ctype/CType.chain.ts @@ -28,11 +28,11 @@ import { /** * Encodes the provided CType for use in `api.tx.ctype.add()`. * - * @param ctype The CType to write on the blockchain. + * @param cType The CType to write on the blockchain. * @returns Encoded CType. */ -export function toChain(ctype: ICType): string { - return serializeForHash(ctype) +export function toChain(cType: ICType): string { + return serializeForHash(cType) } /** @@ -82,7 +82,7 @@ export interface CTypeChainDetails { createdAt: BN } -export type ICTypeDetails = { ctype: ICType } & CTypeChainDetails +export type ICTypeDetails = { cType: ICType } & CTypeChainDetails /** * Decodes the CType details returned by `api.query.ctype.ctypes()`. @@ -228,7 +228,7 @@ export async function fetchFromChain( const [ctypeInput, creator] = lastRightCTypeCreationCall return { - ctype: { + cType: { ...ctypeInput, $id: cTypeId, }, diff --git a/packages/core/src/ctype/CType.metadata.spec.ts b/packages/core/src/ctype/CType.metadata.spec.ts index 25b92e880..9fee50fc8 100644 --- a/packages/core/src/ctype/CType.metadata.spec.ts +++ b/packages/core/src/ctype/CType.metadata.spec.ts @@ -11,12 +11,12 @@ import * as CType from './CType' import { MetadataModel } from './CType.schemas' describe('CType', () => { - let ctype: ICType + let cType: ICType let ctypeMetadata: ICTypeMetadata['metadata'] let metadata: ICTypeMetadata beforeAll(async () => { - ctype = CType.fromProperties('CtypeMetaData', { + cType = CType.fromProperties('CtypeMetaData', { 'first-property': { type: 'integer' }, 'second-property': { type: 'string' }, }) @@ -32,11 +32,11 @@ describe('CType', () => { metadata = { metadata: ctypeMetadata, - cTypeId: ctype.$id, + cTypeId: cType.$id, } }) - it('verifies the metadata of a ctype', async () => { + it('verifies the metadata of a cType', async () => { expect(() => CType.verifyCTypeMetadata(metadata)).not.toThrow() expect(metadata.cTypeId).not.toHaveLength(0) expect(() => @@ -46,13 +46,13 @@ describe('CType', () => { CType.verifyObjectAgainstSchema(ctypeMetadata, MetadataModel) ).toThrow() }) - it('checks if the metadata matches corresponding ctype hash', async () => { - expect(metadata.cTypeId).toEqual(ctype.$id) + it('checks if the metadata matches corresponding cType hash', async () => { + expect(metadata.cTypeId).toEqual(cType.$id) }) it('throws error when supplied malformed constructor input', () => { const faultyMetadata: ICTypeMetadata = { metadata: ctypeMetadata, - cTypeId: ctype.$id, + cTypeId: cType.$id, } // @ts-expect-error delete faultyMetadata.metadata.properties diff --git a/packages/core/src/ctype/CType.spec.ts b/packages/core/src/ctype/CType.spec.ts index bf76272d2..50fa5b9ce 100644 --- a/packages/core/src/ctype/CType.spec.ts +++ b/packages/core/src/ctype/CType.spec.ts @@ -438,13 +438,13 @@ describe.each([[cTypeDraft01], [cTypeV1]])( ) describe('CType registration verification', () => { - const ctype = CType.fromProperties('CtypeModel 2', { + const cType = CType.fromProperties('CtypeModel 2', { name: { type: 'string' }, }) describe('when CType is not registered', () => { it('does not verify registration when not registered', async () => { - await expect(CType.verifyStored(ctype)).rejects.toThrow() + await expect(CType.verifyStored(cType)).rejects.toThrow() }) }) @@ -454,15 +454,15 @@ describe('CType registration verification', () => { }) it('verifies registration when owner not set', async () => { - await expect(CType.verifyStored(ctype)).resolves.not.toThrow() + await expect(CType.verifyStored(cType)).resolves.not.toThrow() }) it('verifies registration when owner matches', async () => { - await expect(CType.verifyStored(ctype)).resolves.not.toThrow() + await expect(CType.verifyStored(cType)).resolves.not.toThrow() }) it('verifies registration when owner does not match', async () => { - await expect(CType.verifyStored(ctype)).resolves.not.toThrow() + await expect(CType.verifyStored(cType)).resolves.not.toThrow() }) }) }) diff --git a/packages/core/src/ctype/CType.ts b/packages/core/src/ctype/CType.ts index 70c545dc0..c6e080b58 100644 --- a/packages/core/src/ctype/CType.ts +++ b/packages/core/src/ctype/CType.ts @@ -166,11 +166,11 @@ export function verifyClaimAgainstSchema( /** * Checks on the KILT blockchain whether a CType is registered. * - * @param ctype CType data. + * @param cType CType data. */ -export async function verifyStored(ctype: ICType): Promise { +export async function verifyStored(cType: ICType): Promise { const api = ConfigService.get('api') - const hash = idToHash(ctype.$id) + const hash = idToHash(cType.$id) const encoded = await api.query.ctype.ctypes(hash) if (encoded.isNone) throw new SDKErrors.CTypeHashMissingError( @@ -250,9 +250,9 @@ export function fromProperties( if (version === 'V1') { schema.additionalProperties = false } - const ctype = jsonabc.sortObj({ ...schema, $id: getIdForSchema(schema) }) - verifyDataStructure(ctype) - return ctype + const cType = jsonabc.sortObj({ ...schema, $id: getIdForSchema(schema) }) + verifyDataStructure(cType) + return cType } /** diff --git a/packages/did/package.json b/packages/did/package.json index 840bc9880..05c3a631c 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/did", - "version": "0.33.2-6", + "version": "0.34.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 3e6bcbf88..db4b805c6 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/sdk-js", - "version": "0.33.2-6", + "version": "0.34.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index e995d3f8c..41de4abad 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/type-definitions", - "version": "0.33.2-6", + "version": "0.34.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/types/package.json b/packages/types/package.json index e7f8db0b7..312f91d2a 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/types", - "version": "0.33.2-6", + "version": "0.34.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 746b80e6a..cd401dd8a 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/utils", - "version": "0.33.2-6", + "version": "0.34.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 94ae61d73..28149d21f 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -1,6 +1,6 @@ { "name": "@kiltprotocol/vc-export", - "version": "0.33.2-6", + "version": "0.34.0", "description": "", "main": "./lib/cjs/index.js", "module": "./lib/esm/index.js", diff --git a/packages/vc-export/src/KiltCredentialV1.ts b/packages/vc-export/src/KiltCredentialV1.ts index 8e363e737..2da955cce 100644 --- a/packages/vc-export/src/KiltCredentialV1.ts +++ b/packages/vc-export/src/KiltCredentialV1.ts @@ -346,7 +346,7 @@ export function fromICredential( export type CTypeLoader = (id: ICType['$id']) => Promise const loadCType: CTypeLoader = async (id) => { - return (await CType.fetchFromChain(id)).ctype + return (await CType.fetchFromChain(id)).cType } /** diff --git a/tests/integration/Ctypes.spec.ts b/tests/integration/Ctypes.spec.ts index 8db6ebf37..253a76ef8 100644 --- a/tests/integration/Ctypes.spec.ts +++ b/tests/integration/Ctypes.spec.ts @@ -51,9 +51,9 @@ describe('When there is an CtypeCreator and a verifier', () => { }, 60_000) it('should not be possible to create a claim type w/o tokens', async () => { - const ctype = makeCType() + const cType = makeCType() const { keypair, getSignCallback } = makeSigningKeyTool() - const storeTx = api.tx.ctype.add(CType.toChain(ctype)) + const storeTx = api.tx.ctype.add(CType.toChain(cType)) const authorizedStoreTx = await Did.authorizeTx( ctypeCreator.uri, storeTx, @@ -61,15 +61,15 @@ describe('When there is an CtypeCreator and a verifier', () => { keypair.address ) await expect(submitTx(authorizedStoreTx, keypair)).rejects.toThrowError() - await expect(CType.verifyStored(ctype)).rejects.toThrow() + await expect(CType.verifyStored(cType)).rejects.toThrow() if (hasBlockNumbers) { - await expect(CType.fetchFromChain(ctype.$id)).rejects.toThrow() + await expect(CType.fetchFromChain(cType.$id)).rejects.toThrow() } }, 20_000) it('should be possible to create a claim type', async () => { - const ctype = makeCType() - const storeTx = api.tx.ctype.add(CType.toChain(ctype)) + const cType = makeCType() + const storeTx = api.tx.ctype.add(CType.toChain(cType)) const authorizedStoreTx = await Did.authorizeTx( ctypeCreator.uri, storeTx, @@ -79,18 +79,18 @@ describe('When there is an CtypeCreator and a verifier', () => { await submitTx(authorizedStoreTx, paymentAccount) if (hasBlockNumbers) { - const retrievedCType = await CType.fetchFromChain(ctype.$id) - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { ctype: originalCtype, creator } = retrievedCType - expect(originalCtype).toStrictEqual(ctype) + const { cType: originalCtype, creator } = await CType.fetchFromChain( + cType.$id + ) + expect(originalCtype).toStrictEqual(cType) expect(creator).toBe(ctypeCreator.uri) await expect(CType.verifyStored(originalCtype)).resolves.not.toThrow() } }, 40_000) it('should not be possible to create a claim type that exists', async () => { - const ctype = makeCType() - const storeTx = api.tx.ctype.add(CType.toChain(ctype)) + const cType = makeCType() + const storeTx = api.tx.ctype.add(CType.toChain(cType)) const authorizedStoreTx = await Did.authorizeTx( ctypeCreator.uri, storeTx, @@ -99,7 +99,7 @@ describe('When there is an CtypeCreator and a verifier', () => { ) await submitTx(authorizedStoreTx, paymentAccount) - const storeTx2 = api.tx.ctype.add(CType.toChain(ctype)) + const storeTx2 = api.tx.ctype.add(CType.toChain(cType)) const authorizedStoreTx2 = await Did.authorizeTx( ctypeCreator.uri, storeTx2, @@ -114,7 +114,7 @@ describe('When there is an CtypeCreator and a verifier', () => { }) if (hasBlockNumbers) { - const retrievedCType = await CType.fetchFromChain(ctype.$id) + const retrievedCType = await CType.fetchFromChain(cType.$id) expect(retrievedCType.creator).toBe(ctypeCreator.uri) } }, 45_000) diff --git a/tests/integration/Did.spec.ts b/tests/integration/Did.spec.ts index be357b3c1..c81635f47 100644 --- a/tests/integration/Did.spec.ts +++ b/tests/integration/Did.spec.ts @@ -509,8 +509,8 @@ describe('DID authorization', () => { }, 60_000) it('authorizes ctype creation with DID signature', async () => { - const ctype = CType.fromProperties(UUID.generate(), {}) - const call = api.tx.ctype.add(CType.toChain(ctype)) + const cType = CType.fromProperties(UUID.generate(), {}) + const call = api.tx.ctype.add(CType.toChain(cType)) const tx = await Did.authorizeTx( did.uri, call, @@ -519,7 +519,7 @@ describe('DID authorization', () => { ) await submitTx(tx, paymentAccount) - await expect(CType.verifyStored(ctype)).resolves.not.toThrow() + await expect(CType.verifyStored(cType)).resolves.not.toThrow() }, 60_000) it('no longer authorizes ctype creation after DID deletion', async () => { @@ -536,8 +536,8 @@ describe('DID authorization', () => { ) await submitTx(tx, paymentAccount) - const ctype = CType.fromProperties(UUID.generate(), {}) - const call = api.tx.ctype.add(CType.toChain(ctype)) + const cType = CType.fromProperties(UUID.generate(), {}) + const call = api.tx.ctype.add(CType.toChain(cType)) const tx2 = await Did.authorizeTx( did.uri, call, @@ -549,7 +549,7 @@ describe('DID authorization', () => { name: expect.stringMatching(/^(DidNotPresent|NotFound)$/), }) - await expect(CType.verifyStored(ctype)).rejects.toThrow() + await expect(CType.verifyStored(cType)).rejects.toThrow() }, 60_000) }) @@ -1007,12 +1007,12 @@ describe('DID extrinsics batching', () => { }, 50_000) it('simple batch succeeds despite failures of some extrinsics', async () => { - const ctype = CType.fromProperties(UUID.generate(), {}) - const ctypeStoreTx = api.tx.ctype.add(CType.toChain(ctype)) + const cType = CType.fromProperties(UUID.generate(), {}) + const ctypeStoreTx = api.tx.ctype.add(CType.toChain(cType)) const rootNode = DelegationNode.newRoot({ account: fullDid.uri, permissions: [Permission.DELEGATE], - cTypeHash: CType.idToHash(ctype.$id), + cTypeHash: CType.idToHash(cType.$id), }) const delegationStoreTx = await rootNode.getStoreTx() const delegationRevocationTx = await rootNode.getRevokeTx(fullDid.uri) @@ -1033,16 +1033,16 @@ describe('DID extrinsics batching', () => { await submitTx(tx, paymentAccount) // The ctype has been created, even though the delegation operations failed. - await expect(CType.verifyStored(ctype)).resolves.not.toThrow() + await expect(CType.verifyStored(cType)).resolves.not.toThrow() }) it('batchAll fails if any extrinsics fail', async () => { - const ctype = CType.fromProperties(UUID.generate(), {}) - const ctypeStoreTx = api.tx.ctype.add(CType.toChain(ctype)) + const cType = CType.fromProperties(UUID.generate(), {}) + const ctypeStoreTx = api.tx.ctype.add(CType.toChain(cType)) const rootNode = DelegationNode.newRoot({ account: fullDid.uri, permissions: [Permission.DELEGATE], - cTypeHash: CType.idToHash(ctype.$id), + cTypeHash: CType.idToHash(cType.$id), }) const delegationStoreTx = await rootNode.getStoreTx() const delegationRevocationTx = await rootNode.getRevokeTx(fullDid.uri) @@ -1066,7 +1066,7 @@ describe('DID extrinsics batching', () => { }) // The ctype has not been created, since atomicity ensures the whole batch is reverted in case of failure. - await expect(CType.verifyStored(ctype)).rejects.toThrow() + await expect(CType.verifyStored(cType)).rejects.toThrow() }) it('can batch extrinsics for the same required key type', async () => { diff --git a/tests/integration/utils.ts b/tests/integration/utils.ts index 21f557358..93d888092 100644 --- a/tests/integration/utils.ts +++ b/tests/integration/utils.ts @@ -112,9 +112,9 @@ export function addressFromRandom(): KiltAddress { return makeSigningKeyTool('ed25519').keypair.address } -export async function isCtypeOnChain(ctype: ICType): Promise { +export async function isCtypeOnChain(cType: ICType): Promise { try { - await CType.verifyStored(ctype) + await CType.verifyStored(cType) return true } catch { return false diff --git a/yarn.lock b/yarn.lock index 6f538c0ec..828cf120b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1936,6 +1936,8 @@ __metadata: "@polkadot/types": ^10.4.0 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 + rimraf: ^3.0.2 + typescript: ^4.8.3 languageName: unknown linkType: soft From c4ab492812d19169532a399b57dd1bd013a61570 Mon Sep 17 00:00:00 2001 From: Antonio Date: Mon, 2 Oct 2023 16:16:44 +0100 Subject: [PATCH 078/130] chore: move utils.Chain into chain-helpers package (#790) * Update typescript version * Update locations * Revert "Update typescript version" This reverts commit a6fc85d42f30f3a83636a111174ba780a380325e. * Remove redundant dependency --- packages/asset-credentials/package.json | 1 + .../src/credentials/PublicCredential.chain.ts | 17 ++-- .../src/blockchain/Blockchain.ts | 80 ++++++++++++++++++- packages/core/src/ctype/CType.chain.ts | 17 ++-- packages/utils/package.json | 1 - packages/utils/src/Chain.ts | 75 ----------------- packages/utils/src/index.ts | 1 - yarn.lock | 2 +- 8 files changed, 97 insertions(+), 97 deletions(-) delete mode 100644 packages/utils/src/Chain.ts diff --git a/packages/asset-credentials/package.json b/packages/asset-credentials/package.json index ddb5bc0bf..89d4c5db2 100644 --- a/packages/asset-credentials/package.json +++ b/packages/asset-credentials/package.json @@ -34,6 +34,7 @@ "typescript": "^4.8.3" }, "dependencies": { + "@kiltprotocol/chain-helpers": "workspace:*", "@kiltprotocol/config": "workspace:*", "@kiltprotocol/core": "workspace:*", "@kiltprotocol/did": "workspace:*", diff --git a/packages/asset-credentials/src/credentials/PublicCredential.chain.ts b/packages/asset-credentials/src/credentials/PublicCredential.chain.ts index d4d3db615..9f96a7606 100644 --- a/packages/asset-credentials/src/credentials/PublicCredential.chain.ts +++ b/packages/asset-credentials/src/credentials/PublicCredential.chain.ts @@ -23,9 +23,10 @@ import type { PublicCredentialsCredentialsCredentialEntry, } from '@kiltprotocol/augment-api' +import { Blockchain } from '@kiltprotocol/chain-helpers' import { ConfigService } from '@kiltprotocol/config' import { fromChain as didFromChain } from '@kiltprotocol/did' -import { Chain as ChainUtils, SDKErrors, cbor } from '@kiltprotocol/utils' +import { SDKErrors, cbor } from '@kiltprotocol/utils' import { getIdForCredential } from './PublicCredential.js' import { validateUri } from '../dids/index.js' @@ -129,7 +130,7 @@ function extractPublicCredentialCreationCallsFromDidCall( api: ApiPromise, call: Call ): Array> { - const extrinsicCalls = ChainUtils.flattenCalls(api, call) + const extrinsicCalls = Blockchain.flattenCalls(call, api) return extrinsicCalls.filter( (c): c is GenericCall => api.tx.publicCredentials.add.is(c) @@ -141,7 +142,7 @@ function extractDidCallsFromBatchCall( api: ApiPromise, call: Call ): Array> { - const extrinsicCalls = ChainUtils.flattenCalls(api, call) + const extrinsicCalls = Blockchain.flattenCalls(call, api) return extrinsicCalls.filter( (c): c is GenericCall => api.tx.did.submitDidCall.is(c) @@ -166,15 +167,15 @@ export async function fetchCredentialFromChain( ) const { blockNumber, revoked } = publicCredentialEntry.unwrap() - const extrinsic = await ChainUtils.retrieveExtrinsicFromBlock( - api, + const extrinsic = await Blockchain.retrieveExtrinsicFromBlock( blockNumber, ({ events }) => events.some( (event) => api.events.publicCredentials.CredentialStored.is(event) && event.data[1].toString() === credentialId - ) + ), + api ) if (extrinsic === null) { @@ -184,7 +185,7 @@ export async function fetchCredentialFromChain( } if ( - !ChainUtils.isBatch(api, extrinsic) && + !Blockchain.isBatch(extrinsic, api) && !api.tx.did.submitDidCall.is(extrinsic) ) { throw new SDKErrors.PublicCredentialError( @@ -194,7 +195,7 @@ export async function fetchCredentialFromChain( // If we're dealing with a batch, flatten any nested `submit_did_call` calls, // otherwise the extrinsic is itself a submit_did_call, so just take it. - const didCalls = ChainUtils.isBatch(api, extrinsic) + const didCalls = Blockchain.isBatch(extrinsic, api) ? extrinsic.args[0].flatMap((batchCall) => extractDidCallsFromBatchCall(api, batchCall) ) diff --git a/packages/chain-helpers/src/blockchain/Blockchain.ts b/packages/chain-helpers/src/blockchain/Blockchain.ts index f77165ef1..220c1df78 100644 --- a/packages/chain-helpers/src/blockchain/Blockchain.ts +++ b/packages/chain-helpers/src/blockchain/Blockchain.ts @@ -5,16 +5,23 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { SubmittableResult } from '@polkadot/api' -import { AnyNumber } from '@polkadot/types/types' +import type { ApiPromise } from '@polkadot/api' +import type { TxWithEvent } from '@polkadot/api-derive/types' +import type { GenericCall, GenericExtrinsic, Vec } from '@polkadot/types' +import type { Call, Extrinsic } from '@polkadot/types/interfaces' +import type { AnyNumber } from '@polkadot/types/types' +import type { BN } from '@polkadot/util' -import { ConfigService } from '@kiltprotocol/config' import type { ISubmittableResult, KeyringPair, SubmittableExtrinsic, SubscriptionPromise, } from '@kiltprotocol/types' + +import { SubmittableResult } from '@polkadot/api' + +import { ConfigService } from '@kiltprotocol/config' import { SDKErrors } from '@kiltprotocol/utils' import { ErrorHandler } from '../errorhandling/index.js' @@ -180,3 +187,70 @@ export async function signAndSubmitTx( const signedTx = await tx.signAsync(signer, { tip }) return submitSignedTx(signedTx, opts) } + +/** + * Checks wheather the provided extrinsic or call represents a batch. + * + * @param extrinsic The input [[Extrinsic]] or [[Call]]. + * @param api The optional [[ApiPromise]]. If not provided, the one returned by the `ConfigService` is used. + * + * @returns True if it's a batch, false otherwise. + */ +export function isBatch( + extrinsic: Extrinsic | Call, + api?: ApiPromise +): extrinsic is GenericExtrinsic<[Vec]> | GenericCall<[Vec]> { + const apiPromise = api ?? ConfigService.get('api') + return ( + apiPromise.tx.utility.batch.is(extrinsic) || + apiPromise.tx.utility.batchAll.is(extrinsic) || + apiPromise.tx.utility.forceBatch.is(extrinsic) + ) +} + +/** + * Flatten all calls into a single array following a DFS approach. + * + * For example, given the calls [[N1, N2], [N3, [N4, N5], N6]], the final list will look like [N1, N2, N3, N4, N5, N6]. + * + * @param call The [[Call]] which can potentially contain nested calls. + * @param api The optional [[ApiPromise]]. If not provided, the one returned by the `ConfigService` is used. + * + * @returns A list of [[Call]] nested according to the rules above. + */ +export function flattenCalls(call: Call, api?: ApiPromise): Call[] { + if (isBatch(call, api)) { + // Inductive case + return call.args[0].flatMap((c) => flattenCalls(c, api)) + } + // Base case + return [call] +} + +/** + * Retrieve the last extrinsic from a block that matches the provided filter. + * + * The function ignores failed extrinsics and, if multiple extrinsics from the block match the provided filter, it only takes the last one. + * + * @param blockNumber The number of the block to parse. + * @param filter The filter to apply to the transactions in the block. + * @param api The optional [[ApiPromise]]. If not provided, the one returned by the `ConfigService` is used. + * + * @returns The last extrinsic in the block matching the filter, or null if no extrinsic is found. + */ +export async function retrieveExtrinsicFromBlock( + blockNumber: BN, + filter: (tx: TxWithEvent) => boolean, + api?: ApiPromise +): Promise { + const apiPromise = api ?? ConfigService.get('api') + const { extrinsics } = await apiPromise.derive.chain.getBlockByNumber( + blockNumber + ) + const successfulExtrinsics = extrinsics.filter( + ({ dispatchError }) => !dispatchError + ) + const extrinsicLastOccurrence = successfulExtrinsics.reverse().find(filter) + + return extrinsicLastOccurrence?.extrinsic ?? null +} diff --git a/packages/core/src/ctype/CType.chain.ts b/packages/core/src/ctype/CType.chain.ts index b21aa3813..94fff97e9 100644 --- a/packages/core/src/ctype/CType.chain.ts +++ b/packages/core/src/ctype/CType.chain.ts @@ -13,9 +13,10 @@ import type { BN } from '@polkadot/util' import type { CtypeCtypeEntry } from '@kiltprotocol/augment-api' import type { CTypeHash, DidUri, ICType } from '@kiltprotocol/types' +import { Blockchain } from '@kiltprotocol/chain-helpers' import { ConfigService } from '@kiltprotocol/config' import * as Did from '@kiltprotocol/did' -import { Chain as ChainUtils, SDKErrors } from '@kiltprotocol/utils' +import { SDKErrors } from '@kiltprotocol/utils' import { getHashForSchema, @@ -122,7 +123,7 @@ function extractCTypeCreationCallsFromDidCall( api: ApiPromise, call: Call ): Array> { - const extrinsicCalls = ChainUtils.flattenCalls(api, call) + const extrinsicCalls = Blockchain.flattenCalls(call, api) return extrinsicCalls.filter( (c): c is GenericCall => api.tx.ctype.add.is(c) @@ -134,7 +135,7 @@ function extractDidCallsFromBatchCall( api: ApiPromise, call: Call ): Array> { - const extrinsicCalls = ChainUtils.flattenCalls(api, call) + const extrinsicCalls = Blockchain.flattenCalls(call, api) return extrinsicCalls.filter( (c): c is GenericCall => api.tx.did.submitDidCall.is(c) @@ -161,15 +162,15 @@ export async function fetchFromChain( 'Cannot fetch CType definitions on a chain that does not store the createdAt block' ) - const extrinsic = await ChainUtils.retrieveExtrinsicFromBlock( - api, + const extrinsic = await Blockchain.retrieveExtrinsicFromBlock( createdAt, ({ events }) => events.some( (event) => api.events.ctype.CTypeCreated.is(event) && event.data[1].toString() === cTypeHash - ) + ), + api ) if (extrinsic === null) { @@ -179,7 +180,7 @@ export async function fetchFromChain( } if ( - !ChainUtils.isBatch(api, extrinsic) && + !Blockchain.isBatch(extrinsic, api) && !api.tx.did.submitDidCall.is(extrinsic) ) { throw new SDKErrors.PublicCredentialError( @@ -189,7 +190,7 @@ export async function fetchFromChain( // If we're dealing with a batch, flatten any nested `submit_did_call` calls, // otherwise the extrinsic is itself a submit_did_call, so just take it. - const didCalls = ChainUtils.isBatch(api, extrinsic) + const didCalls = Blockchain.isBatch(extrinsic, api) ? extrinsic.args[0].flatMap((batchCall) => extractDidCallsFromBatchCall(api, batchCall) ) diff --git a/packages/utils/package.json b/packages/utils/package.json index cd401dd8a..3759f261b 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -37,7 +37,6 @@ "@kiltprotocol/types": "workspace:*", "@polkadot/api": "^10.4.0", "@polkadot/keyring": "^12.0.0", - "@polkadot/types": "^10.4.0", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0", "cbor-web": "^9.0.0", diff --git a/packages/utils/src/Chain.ts b/packages/utils/src/Chain.ts deleted file mode 100644 index d4f135b13..000000000 --- a/packages/utils/src/Chain.ts +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import type { ApiPromise } from '@polkadot/api' -import type { TxWithEvent } from '@polkadot/api-derive/types' -import type { GenericCall, GenericExtrinsic, Vec } from '@polkadot/types' -import type { Call, Extrinsic } from '@polkadot/types/interfaces' -import type { BN } from '@polkadot/util' - -/** - * Checks wheather the provided extrinsic or call represents a batch. - * - * @param api The [[ApiPromise]]. - * @param extrinsic The input [[Extrinsic]] or [[Call]]. - * - * @returns True if it's a batch, false otherwise. - */ -export function isBatch( - api: ApiPromise, - extrinsic: Extrinsic | Call -): extrinsic is GenericExtrinsic<[Vec]> | GenericCall<[Vec]> { - return ( - api.tx.utility.batch.is(extrinsic) || - api.tx.utility.batchAll.is(extrinsic) || - api.tx.utility.forceBatch.is(extrinsic) - ) -} - -/** - * Flatten all calls into a single array following a DFS approach. - * - * For example, given the calls [[N1, N2], [N3, [N4, N5], N6]], the final list will look like [N1, N2, N3, N4, N5, N6]. - * - * @param api The [[ApiPromise]] object. - * @param call The [[Call]] which can potentially contain nested calls. - * - * @returns A list of [[Call]] nested according to the rules above. - */ -export function flattenCalls(api: ApiPromise, call: Call): Call[] { - if (isBatch(api, call)) { - // Inductive case - return call.args[0].flatMap((c) => flattenCalls(api, c)) - } - // Base case - return [call] -} - -/** - * Retrieve the last extrinsic from a block that matches the provided filter. - * - * The function ignores failed extrinsics and, if multiple extrinsics from the block match the provided filter, it only takes the last one. - * - * @param api The [[ApiPromise]] object. - * @param blockNumber The number of the block to parse. - * @param filter The filter to apply to the transactions in the block. - * - * @returns The last extrinsic in the block matching the filter, or null if no extrinsic is found. - */ -export async function retrieveExtrinsicFromBlock( - api: ApiPromise, - blockNumber: BN, - filter: (tx: TxWithEvent) => boolean -): Promise { - const { extrinsics } = await api.derive.chain.getBlockByNumber(blockNumber) - const successfulExtrinsics = extrinsics.filter( - ({ dispatchError }) => !dispatchError - ) - const extrinsicLastOccurrence = successfulExtrinsics.reverse().find(filter) - - return extrinsicLastOccurrence?.extrinsic ?? null -} diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 51051e9a9..30cbd3b3e 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -11,7 +11,6 @@ export * as jsonabc from './jsonabc.js' -export * as Chain from './Chain.js' export * as Crypto from './Crypto.js' export * as UUID from './UUID.js' export * as DataUtils from './DataUtils.js' diff --git a/yarn.lock b/yarn.lock index 828cf120b..59a8cee15 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1927,6 +1927,7 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/asset-credentials@workspace:packages/asset-credentials" dependencies: + "@kiltprotocol/chain-helpers": "workspace:*" "@kiltprotocol/config": "workspace:*" "@kiltprotocol/core": "workspace:*" "@kiltprotocol/did": "workspace:*" @@ -2075,7 +2076,6 @@ __metadata: "@kiltprotocol/types": "workspace:*" "@polkadot/api": ^10.4.0 "@polkadot/keyring": ^12.0.0 - "@polkadot/types": ^10.4.0 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 cbor-web: ^9.0.0 From f8ac4530245c3a4f5eaa29ef79de598aa519ccad Mon Sep 17 00:00:00 2001 From: 1gn0r4nd <53620455+1gn0r4nd@users.noreply.github.com> Date: Mon, 11 Dec 2023 10:06:26 -0300 Subject: [PATCH 079/130] fix: ignore out-of-range log level in ConfigService.spec.ts (#818) contributed by @1gn0r4nd --- packages/config/src/ConfigService.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/config/src/ConfigService.spec.ts b/packages/config/src/ConfigService.spec.ts index bb97365b6..7e1c3381a 100644 --- a/packages/config/src/ConfigService.spec.ts +++ b/packages/config/src/ConfigService.spec.ts @@ -31,6 +31,7 @@ describe('Log Configuration', () => { ConfigService.LoggingFactory.getLogger('test1').getLogLevel() ).toEqual(LogLevel.Info) + // @ts-ignore Only values 0-6 are valid. https://github.com/vauxite-org/typescript-logging/blob/cf0d3e7d52b1da0650b16308cc3f1a56bcb95b5b/core/src/typescript/main/core/api/LogLevel.ts#L5C1-L12C10 ConfigService.modifyLogLevel(-100) expect(testLogger.getLogLevel()).toEqual(0) ConfigService.modifyLogLevel(initialLevel) From 62c68b550988a67af069107330f61d8b707d4d07 Mon Sep 17 00:00:00 2001 From: Antonio Date: Wed, 13 Dec 2023 15:12:43 +0000 Subject: [PATCH 080/130] feat: DIP provider type definitions (#743) * Draft PR commit * feat: DID merkle proofs (#744) * Add type definitions for the new dipSender runtime API * Update types with new spec 11000 * Update type definitions * Change keyIds input type * chore: support parties renaming (#751) Rename producer -> provider and receiver -> consumer * chore: update types for additional linked info (#759) Update types * feat: add `dipProvider` pallet for DID extrinsic signing (#764) Add dipProvider pallet for DID extrinsic signing * chore: set package version to 0.33.2-dip-0 * feat: error management (#802) * Error types * Update DIP provider runtime APIs types * Update packages version * feat: add versioning support (#806) * Add version type * Set package versions * Fix identity commitment version type * Update lock file * Changes based on https://github.com/KILTprotocol/kilt-node/pull/577/commits/1e338a414a8bf1a170f552036d42240fc101e440 * Set version to DIP version * Changes based on https://github.com/KILTprotocol/kilt-node/pull/577/commits/e23dbcc61e823e55d452c2430ab72d71d7b3fdce * Update type definitions * Revert package versions change * Revert yarn.lock changes * Set version to dip-2 * Revert package.json changes * Add runtime calls to Peregrine runtimes --- packages/did/src/DidDetails/FullDidDetails.ts | 1 + packages/type-definitions/src/index.ts | 20 ++++- .../src/runtime/dipProvider.ts | 29 +++++++ packages/type-definitions/src/types_11200.ts | 84 +++++++++++++++++++ 4 files changed, 132 insertions(+), 2 deletions(-) create mode 100644 packages/type-definitions/src/runtime/dipProvider.ts create mode 100644 packages/type-definitions/src/types_11200.ts diff --git a/packages/did/src/DidDetails/FullDidDetails.ts b/packages/did/src/DidDetails/FullDidDetails.ts index b473a67c0..e16efd87f 100644 --- a/packages/did/src/DidDetails/FullDidDetails.ts +++ b/packages/did/src/DidDetails/FullDidDetails.ts @@ -40,6 +40,7 @@ const methodMapping: Record = { 'did.submitDidCall': undefined, didLookup: 'authentication', publicCredentials: 'assertionMethod', + dipProvider: 'authentication', web3Names: 'authentication', } diff --git a/packages/type-definitions/src/index.ts b/packages/type-definitions/src/index.ts index 481a07245..dc8d7f31b 100644 --- a/packages/type-definitions/src/index.ts +++ b/packages/type-definitions/src/index.ts @@ -26,12 +26,14 @@ import { types10410 } from './types_10410.js' import { types10720 } from './types_10720.js' import { types10800 } from './types_10800.js' import { types10900 } from './types_10900.js' +import { types11200 } from './types_11200.js' // Custom runtime calls import { calls as didCalls } from './runtime/did.js' import { calls as stakingCalls } from './runtime/staking.js' import { calls as publicCredentialsCalls } from './runtime/publicCredentials.js' +import { calls as dipProviderCalls } from './runtime/dipProvider.js' export { types8, @@ -50,12 +52,13 @@ export { types10720, types10800, types10900, - types10900 as types, + types11200 as types, } export { calls as didCalls } from './runtime/did.js' export { calls as stakingCalls } from './runtime/staking.js' export { calls as publicCredentialsCalls } from './runtime/publicCredentials.js' +export { calls as dipProviderCalls } from './runtime/dipProvider.js' const defaultTypesBundle: OverrideVersionedType[] = [ { @@ -119,9 +122,13 @@ const defaultTypesBundle: OverrideVersionedType[] = [ types: types10800, }, { - minmax: [10900, undefined], + minmax: [10900, 11199], types: types10900, }, + { + minmax: [11200, undefined], + types: types11200, + }, ] // Current runtime version: 10730 @@ -148,6 +155,7 @@ export const typesBundle: OverrideBundleType = { ...didCalls, ...stakingCalls, ...publicCredentialsCalls, + ...dipProviderCalls, }, types: defaultTypesBundle, }, @@ -156,6 +164,7 @@ export const typesBundle: OverrideBundleType = { ...didCalls, ...stakingCalls, ...publicCredentialsCalls, + ...dipProviderCalls, }, types: defaultTypesBundle, }, @@ -174,6 +183,13 @@ export const typesBundle: OverrideBundleType = { }, types: defaultTypesBundle, }, + 'DIP provider dev': { + runtime: { + ...didCalls, + ...dipProviderCalls, + }, + types: defaultTypesBundle, + }, Development: { runtime: { ...didCalls, diff --git a/packages/type-definitions/src/runtime/dipProvider.ts b/packages/type-definitions/src/runtime/dipProvider.ts new file mode 100644 index 000000000..b5cb5afc2 --- /dev/null +++ b/packages/type-definitions/src/runtime/dipProvider.ts @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import type { DefinitionsCall } from '@polkadot/types/types' + +export const calls: DefinitionsCall = { + DipProvider: [ + { + methods: { + generate_proof: { + description: + 'Generate a Merkle proof for the DIP protocol for the specified request parameters.', + params: [ + { + name: 'request', + type: 'DipProofRequest', + }, + ], + type: 'Result', + }, + }, + version: 1, + }, + ], +} diff --git a/packages/type-definitions/src/types_11200.ts b/packages/type-definitions/src/types_11200.ts new file mode 100644 index 000000000..9cbcf7117 --- /dev/null +++ b/packages/type-definitions/src/types_11200.ts @@ -0,0 +1,84 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import type { RegistryTypes } from '@polkadot/types/types' + +import { types10900 } from './types_10900.js' + +export const types11200: RegistryTypes = { + ...types10900, + IdentityCommitmentVersion: 'u16', + // DipProvider state_call + DipProofRequest: { + identifier: 'AccountId32', + version: 'IdentityCommitmentVersion', + keys: 'Vec', + accounts: 'Vec', + shouldIncludeWeb3Name: 'bool', + }, + CompleteMerkleProof: { + root: 'MerkleRoot', + proof: 'MerkleProof', + }, + MerkleRoot: 'Hash', + MerkleProof: { + blinded: 'BlindedLeaves', + revealed: 'RevealedLeaves', + }, + BlindedLeaves: 'Vec', + BlindedValue: 'Bytes', + RevealedLeaves: 'Vec', + RevealedLeaf: { + _enum: { + DidKey: '(DidKeyMerkleKey, DidKeyMerkleValue)', + Web3Name: '(Web3NameMerkleKey, Web3NameMerkleValue)', + LinkedAccount: '(LinkedAccountMerkleKey, LinkedAccountMerkleValue)', + }, + }, + DidKeyMerkleKey: '(KeyId, KeyRelationship)', + KeyId: 'Hash', + KeyRelationship: { + _enum: { + Encryption: 'Null', + Verification: 'VerificationRelationship', + }, + }, + VerificationRelationship: { + _enum: [ + 'Authentication', + 'CapabilityDelegation', + 'CapabilityInvocation', + 'AssertionMethod', + ], + }, + DidKeyMerkleValue: 'DidDidDetailsDidPublicKeyDetails', + Web3NameMerkleKey: 'Text', + Web3NameMerkleValue: 'BlockNumber', + LinkedAccountMerkleKey: 'PalletDidLookupLinkableAccountLinkableAccountId', + LinkedAccountMerkleValue: 'Null', + RuntimeApiDipProofError: { + _enum: { + IdentityProvider: 'LinkedDidIdentityProviderError', + MerkleProof: 'DidMerkleProofError', + }, + }, + LinkedDidIdentityProviderError: { + _enum: ['DidNotFound', 'DidDeleted', 'Internal'], + }, + DidIdentityProviderError: { + _enum: ['DidNotFound', 'Internal'], + }, + DidMerkleProofError: { + _enum: [ + 'UnsupportedVersion', + 'KeyNotFound', + 'LinkedAccountNotFound', + 'Web3NameNotFound', + 'Internal', + ], + }, +} From 3523525a29bd9a23be45085b0839cb7bb45fed36 Mon Sep 17 00:00:00 2001 From: Antonio Date: Thu, 14 Dec 2023 15:59:14 +0000 Subject: [PATCH 081/130] fix: add missing runtime call (#822) Add missing runtime call --- packages/type-definitions/src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/type-definitions/src/index.ts b/packages/type-definitions/src/index.ts index dc8d7f31b..41020d8a1 100644 --- a/packages/type-definitions/src/index.ts +++ b/packages/type-definitions/src/index.ts @@ -173,6 +173,7 @@ export const typesBundle: OverrideBundleType = { ...didCalls, ...stakingCalls, ...publicCredentialsCalls, + ...dipProviderCalls, }, types: defaultTypesBundle, }, From 7de0d7547d37743ba0765fb73ad4665c47a10727 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Thu, 14 Dec 2023 17:03:15 +0100 Subject: [PATCH 082/130] refactor!: VCs and proper DID documents as basic identity modules in SDK (#807) Co-authored-by: Antonio Co-authored-by: Skedley <48058984+Dudleyneedham@users.noreply.github.com> --- .eslintrc.js | 3 +- docs/contribution-guide.md | 6 +- jest.config.js | 11 +- package.json | 8 +- packages/asset-credentials/package.json | 2 +- .../src/credentials/PublicCredential.chain.ts | 33 +- .../src/credentials/PublicCredential.spec.ts | 10 +- .../src/credentials/PublicCredential.ts | 38 +- packages/asset-credentials/src/dids/index.ts | 30 +- packages/chain-helpers/package.json | 5 +- .../src/balance/Balance.utils.spec.ts | 0 .../src/balance/Balance.utils.ts | 20 +- .../src/blockchain/Blockchain.ts | 35 +- .../src/blockchain/SubscriptionPromise.ts | 2 +- .../src/connect/index.ts} | 0 packages/chain-helpers/src/index.ts | 2 + packages/core/src/kilt/index.ts | 8 - packages/{core => credentials}/README.md | 4 +- packages/{core => credentials}/package.json | 10 +- .../src/V1}/KiltAttestationProofV1.spec.ts | 74 +- .../src/V1}/KiltAttestationProofV1.ts | 274 ++-- .../src/V1/KiltCredentialV1.spec.ts} | 28 +- .../src/V1}/KiltCredentialV1.ts | 170 +-- .../src/V1}/KiltRevocationStatusV1.ts | 25 +- .../src => credentials/src/V1}/common.ts | 41 +- packages/credentials/src/V1/constants.ts | 20 + packages/credentials/src/V1/index.ts | 16 + packages/credentials/src/V1/types.ts | 196 +++ .../src/attestation/Attestation.chain.ts | 0 .../src/attestation/Attestation.spec.ts | 64 +- .../src/attestation/Attestation.ts | 59 +- .../src/attestation/index.ts | 0 .../src/ctype/CType.chain.ts | 10 +- .../src/ctype/CType.metadata.spec.ts | 0 .../src/ctype/CType.schemas.ts | 0 .../src/ctype/CType.spec.ts | 115 +- .../{core => credentials}/src/ctype/CType.ts | 22 +- packages/credentials/src/ctype/CTypeLoader.ts | 40 + .../src/ctype/Ctype.nested.spec.ts | 33 +- .../{core => credentials}/src/ctype/index.ts | 1 + .../src/delegation/DelegationDecoder.ts | 2 +- .../DelegationHierarchyDetails.chain.ts | 2 +- .../src/delegation/DelegationNode.chain.ts | 4 +- .../src/delegation/DelegationNode.spec.ts | 8 +- .../src/delegation/DelegationNode.ts | 83 +- .../src/delegation/DelegationNode.utils.ts | 4 +- .../src/delegation/index.ts | 0 packages/credentials/src/holder.ts | 198 +++ packages/{core => credentials}/src/index.ts | 13 +- packages/credentials/src/interfaces.ts | 46 + packages/credentials/src/issuer.ts | 141 ++ .../src/presentation/Presentation.spec.ts | 212 +++ .../src/presentation/Presentation.ts | 317 +++++ .../src/presentation}/index.ts | 2 +- .../credentials/src/proofs/DataIntegrity.ts | 474 +++++++ packages/credentials/src/proofs/utils.ts | 70 + packages/credentials/src/verifier.ts | 348 +++++ .../{core => credentials}/tsconfig.build.json | 0 .../{core => credentials}/tsconfig.esm.json | 0 packages/did/package.json | 4 +- packages/did/src/Did.chain.ts | 362 +++--- packages/did/src/Did.rpc.ts | 186 ++- packages/did/src/Did.signature.spec.ts | 322 ++--- packages/did/src/Did.signature.ts | 150 ++- packages/did/src/Did.utils.ts | 277 +++- .../did/src/DidDetails/DidDetails.spec.ts | 122 -- packages/did/src/DidDetails/DidDetails.ts | 177 ++- .../did/src/DidDetails/FullDidDetails.spec.ts | 75 +- packages/did/src/DidDetails/FullDidDetails.ts | 170 ++- .../src/DidDetails/LightDidDetails.spec.ts | 136 +- .../did/src/DidDetails/LightDidDetails.ts | 151 ++- packages/did/src/DidDetails/index.ts | 16 +- .../DidDocumentExporter.spec.ts | 336 ----- .../DidDocumentExporter.ts | 114 -- .../did/src/DidDocumentExporter/README.md | 5 - packages/did/src/DidDocumentExporter/index.ts | 9 - .../did/src/DidLinks/AccountLinks.chain.ts | 30 +- .../DidContexts.ts | 19 +- .../did/src/DidResolver/DidResolver.spec.ts | 1131 +++++++++++------ packages/did/src/DidResolver/DidResolver.ts | 494 ++++--- packages/did/src/DidResolver/index.ts | 1 + packages/did/src/index.ts | 1 - packages/legacy-credentials/README.md | 5 + packages/legacy-credentials/package.json | 45 + .../src}/Claim.spec.ts | 51 +- .../claim => legacy-credentials/src}/Claim.ts | 119 +- .../src}/Credential.spec.ts | 287 +++-- .../src}/Credential.ts | 181 ++- .../src}/index.ts | 5 +- packages/legacy-credentials/src/utils.ts | 62 + .../src/vcInterop.spec.ts} | 80 +- packages/legacy-credentials/src/vcInterop.ts | 184 +++ .../legacy-credentials/tsconfig.build.json | 17 + packages/legacy-credentials/tsconfig.esm.json | 7 + packages/sdk-js/package.json | 2 +- packages/sdk-js/src/index.ts | 33 +- packages/types/src/AssetDid.ts | 18 +- packages/types/src/Attestation.ts | 4 +- packages/types/src/Claim.ts | 4 +- packages/types/src/Credential.ts | 2 +- packages/types/src/CryptoCallbacks.ts | 41 +- packages/types/src/Delegation.ts | 4 +- packages/types/src/Did.ts | 103 ++ packages/types/src/DidDocument.ts | 176 --- packages/types/src/DidDocumentExporter.ts | 108 -- packages/types/src/DidResolver.ts | 270 +++- packages/types/src/PublicCredential.ts | 20 +- .../index.ts => types/src/Signers.ts} | 9 +- packages/types/src/index.ts | 4 +- packages/utils/package.json | 4 + .../src/CAIP/CAIP.spec.ts | 8 +- .../{vc-export => utils}/src/CAIP/caip19.ts | 0 .../{vc-export => utils}/src/CAIP/caip2.ts | 0 .../{vc-export => utils}/src/CAIP/index.ts | 0 packages/utils/src/Crypto.ts | 6 +- packages/utils/src/SDKErrors.ts | 40 +- packages/utils/src/Signers.ts | 454 +++++++ packages/utils/src/UUID.ts | 2 +- packages/utils/src/index.ts | 2 + packages/vc-export/package.json | 13 +- packages/vc-export/src/DidJwt.spec.ts | 177 --- packages/vc-export/src/DidJwt.ts | 277 ---- packages/vc-export/src/Presentation.spec.ts | 394 ------ packages/vc-export/src/Presentation.ts | 286 ----- packages/vc-export/src/constants.ts | 62 - .../src/{vc-js => }/context/context.ts | 4 +- .../src/{vc-js => }/context/index.ts | 6 +- .../src/{vc-js => }/documentLoader.ts | 95 +- packages/vc-export/src/errors.ts | 16 - .../src/examples/KiltCredentialV1.json | 42 + packages/vc-export/src/fromICredential.ts | 38 - packages/vc-export/src/index.ts | 18 +- .../purposes/KiltAttestationProofV1Purpose.ts | 15 +- .../src/{vc-js => }/purposes/index.ts | 0 .../suites/KiltAttestationProofV1.spec.ts | 198 ++- .../suites/KiltAttestationProofV1.ts | 108 +- .../suites/Sr25519Signature2020.spec.ts | 103 +- .../suites/Sr25519Signature2020.ts | 29 +- .../suites/Sr25519VerificationKey.ts | 26 +- .../suites/Sr25519VerificationKey2020.spec.ts | 0 .../vc-export/src/{vc-js => }/suites/index.ts | 0 .../vc-export/src/{vc-js => }/suites/types.ts | 4 +- .../vc-export/src/{vc-js => }/suites/utils.ts | 0 packages/vc-export/src/types.ts | 184 +-- .../vc-js/examples/ICredentialExample.json | 24 - packages/vc-export/src/vc-js/index.ts | 11 - packages/vc-export/src/vc-js/types.ts | 8 - packages/vc-export/tsconfig.build.json | 1 + tests/breakingChanges/BreakingChanges.spec.ts | 23 +- tests/bundle/bundle-test.ts | 454 ++++--- tests/integration/AccountLinking.spec.ts | 76 +- tests/integration/Attestation.spec.ts | 146 +-- tests/integration/Balance.spec.ts | 6 +- tests/integration/Blockchain.spec.ts | 9 +- tests/integration/Ctypes.spec.ts | 27 +- tests/integration/Delegation.spec.ts | 113 +- tests/integration/Deposit.spec.ts | 104 +- tests/integration/Did.spec.ts | 754 ++++++----- tests/integration/ErrorHandler.spec.ts | 10 +- tests/integration/PublicCredentials.spec.ts | 67 +- tests/integration/Web3Names.spec.ts | 48 +- tests/integration/utils.ts | 13 +- tests/testUtils/TestUtils.ts | 460 ++++--- tests/testUtils/testData.ts | 206 +++ tsconfig.docs.json | 17 +- tsconfig.json | 3 +- yarn.lock | 312 +++-- 167 files changed, 8689 insertions(+), 6282 deletions(-) rename packages/{core => chain-helpers}/src/balance/Balance.utils.spec.ts (100%) rename packages/{core => chain-helpers}/src/balance/Balance.utils.ts (85%) rename packages/{core/src/kilt/Kilt.ts => chain-helpers/src/connect/index.ts} (100%) delete mode 100644 packages/core/src/kilt/index.ts rename packages/{core => credentials}/README.md (89%) rename packages/{core => credentials}/package.json (80%) rename packages/{vc-export/src => credentials/src/V1}/KiltAttestationProofV1.spec.ts (82%) rename packages/{vc-export/src => credentials/src/V1}/KiltAttestationProofV1.ts (77%) rename packages/{vc-export/src/CTypeVerification.spec.ts => credentials/src/V1/KiltCredentialV1.spec.ts} (66%) rename packages/{vc-export/src => credentials/src/V1}/KiltCredentialV1.ts (71%) rename packages/{vc-export/src => credentials/src/V1}/KiltRevocationStatusV1.ts (83%) rename packages/{vc-export/src => credentials/src/V1}/common.ts (79%) create mode 100644 packages/credentials/src/V1/constants.ts create mode 100644 packages/credentials/src/V1/index.ts create mode 100644 packages/credentials/src/V1/types.ts rename packages/{core => credentials}/src/attestation/Attestation.chain.ts (100%) rename packages/{core => credentials}/src/attestation/Attestation.spec.ts (71%) rename packages/{core => credentials}/src/attestation/Attestation.ts (57%) rename packages/{core => credentials}/src/attestation/index.ts (100%) rename packages/{core => credentials}/src/ctype/CType.chain.ts (95%) rename packages/{core => credentials}/src/ctype/CType.metadata.spec.ts (100%) rename packages/{core => credentials}/src/ctype/CType.schemas.ts (100%) rename packages/{core => credentials}/src/ctype/CType.spec.ts (81%) rename packages/{core => credentials}/src/ctype/CType.ts (91%) create mode 100644 packages/credentials/src/ctype/CTypeLoader.ts rename packages/{core => credentials}/src/ctype/Ctype.nested.spec.ts (89%) rename packages/{core => credentials}/src/ctype/index.ts (90%) rename packages/{core => credentials}/src/delegation/DelegationDecoder.ts (96%) rename packages/{core => credentials}/src/delegation/DelegationHierarchyDetails.chain.ts (94%) rename packages/{core => credentials}/src/delegation/DelegationNode.chain.ts (95%) rename packages/{core => credentials}/src/delegation/DelegationNode.spec.ts (99%) rename packages/{core => credentials}/src/delegation/DelegationNode.ts (85%) rename packages/{core => credentials}/src/delegation/DelegationNode.utils.ts (97%) rename packages/{core => credentials}/src/delegation/index.ts (100%) create mode 100644 packages/credentials/src/holder.ts rename packages/{core => credentials}/src/index.ts (56%) create mode 100644 packages/credentials/src/interfaces.ts create mode 100644 packages/credentials/src/issuer.ts create mode 100644 packages/credentials/src/presentation/Presentation.spec.ts create mode 100644 packages/credentials/src/presentation/Presentation.ts rename packages/{core/src/claim => credentials/src/presentation}/index.ts (85%) create mode 100644 packages/credentials/src/proofs/DataIntegrity.ts create mode 100644 packages/credentials/src/proofs/utils.ts create mode 100644 packages/credentials/src/verifier.ts rename packages/{core => credentials}/tsconfig.build.json (100%) rename packages/{core => credentials}/tsconfig.esm.json (100%) delete mode 100644 packages/did/src/DidDetails/DidDetails.spec.ts delete mode 100644 packages/did/src/DidDocumentExporter/DidDocumentExporter.spec.ts delete mode 100644 packages/did/src/DidDocumentExporter/DidDocumentExporter.ts delete mode 100644 packages/did/src/DidDocumentExporter/README.md delete mode 100644 packages/did/src/DidDocumentExporter/index.ts rename packages/did/src/{DidDocumentExporter => DidResolver}/DidContexts.ts (80%) create mode 100644 packages/legacy-credentials/README.md create mode 100644 packages/legacy-credentials/package.json rename packages/{core/src/claim => legacy-credentials/src}/Claim.spec.ts (73%) rename packages/{core/src/claim => legacy-credentials/src}/Claim.ts (60%) rename packages/{core/src/credential => legacy-credentials/src}/Credential.spec.ts (79%) rename packages/{core/src/credential => legacy-credentials/src}/Credential.ts (70%) rename packages/{core/src/balance => legacy-credentials/src}/index.ts (52%) create mode 100644 packages/legacy-credentials/src/utils.ts rename packages/{vc-export/src/exportToVerifiableCredential.spec.ts => legacy-credentials/src/vcInterop.spec.ts} (74%) create mode 100644 packages/legacy-credentials/src/vcInterop.ts create mode 100644 packages/legacy-credentials/tsconfig.build.json create mode 100644 packages/legacy-credentials/tsconfig.esm.json create mode 100644 packages/types/src/Did.ts delete mode 100644 packages/types/src/DidDocument.ts delete mode 100644 packages/types/src/DidDocumentExporter.ts rename packages/{core/src/credential/index.ts => types/src/Signers.ts} (52%) rename packages/{vc-export => utils}/src/CAIP/CAIP.spec.ts (88%) rename packages/{vc-export => utils}/src/CAIP/caip19.ts (100%) rename packages/{vc-export => utils}/src/CAIP/caip2.ts (100%) rename packages/{vc-export => utils}/src/CAIP/index.ts (100%) create mode 100644 packages/utils/src/Signers.ts delete mode 100644 packages/vc-export/src/DidJwt.spec.ts delete mode 100644 packages/vc-export/src/DidJwt.ts delete mode 100644 packages/vc-export/src/Presentation.spec.ts delete mode 100644 packages/vc-export/src/Presentation.ts delete mode 100644 packages/vc-export/src/constants.ts rename packages/vc-export/src/{vc-js => }/context/context.ts (97%) rename packages/vc-export/src/{vc-js => }/context/index.ts (62%) rename packages/vc-export/src/{vc-js => }/documentLoader.ts (61%) delete mode 100644 packages/vc-export/src/errors.ts create mode 100644 packages/vc-export/src/examples/KiltCredentialV1.json delete mode 100644 packages/vc-export/src/fromICredential.ts rename packages/vc-export/src/{vc-js => }/purposes/KiltAttestationProofV1Purpose.ts (80%) rename packages/vc-export/src/{vc-js => }/purposes/index.ts (100%) rename packages/vc-export/src/{vc-js => }/suites/KiltAttestationProofV1.spec.ts (81%) rename packages/vc-export/src/{vc-js => }/suites/KiltAttestationProofV1.ts (64%) rename packages/vc-export/src/{vc-js => }/suites/Sr25519Signature2020.spec.ts (60%) rename packages/vc-export/src/{vc-js => }/suites/Sr25519Signature2020.ts (89%) rename packages/vc-export/src/{vc-js => }/suites/Sr25519VerificationKey.ts (93%) rename packages/vc-export/src/{vc-js => }/suites/Sr25519VerificationKey2020.spec.ts (100%) rename packages/vc-export/src/{vc-js => }/suites/index.ts (100%) rename packages/vc-export/src/{vc-js => }/suites/types.ts (91%) rename packages/vc-export/src/{vc-js => }/suites/utils.ts (100%) delete mode 100644 packages/vc-export/src/vc-js/examples/ICredentialExample.json delete mode 100644 packages/vc-export/src/vc-js/index.ts delete mode 100644 packages/vc-export/src/vc-js/types.ts create mode 100644 tests/testUtils/testData.ts diff --git a/.eslintrc.js b/.eslintrc.js index 9952fe2a0..5ada24105 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -165,7 +165,8 @@ module.exports = { 'jsdoc/require-jsdoc': 'off', 'no-console': 'off', '@typescript-eslint/explicit-function-return-type': 'off', - 'import/no-extraneous-dependencies': 'off' + 'import/no-extraneous-dependencies': 'off', + 'no-underscore-dangle': 'off' }, }, ], diff --git a/docs/contribution-guide.md b/docs/contribution-guide.md index 23b9b702f..068a6bfba 100644 --- a/docs/contribution-guide.md +++ b/docs/contribution-guide.md @@ -47,7 +47,7 @@ On top of the linting rules mentioned above (must document all parameters, must * Start with a capitalized verb in the 3rd person; * `@param` and `@returns` fields: don't add types, since this is automatically added into the API doc; * Make sure you explain opaque abbreviations or jargon (example: TxStatus = transaction status); -* When referring to SDK Classes and methods, make sure you link them in, using `[[]]`; +* When referring to SDK Classes and methods, make sure you link them using `{@link xxx}`; 💡The linting rules for the example snippet are **not** the same as the SDK codebase linting rules. For example, the example snippet should make use of semicolons. You can see the full ruleset in `.eslintrc-jsdoc.json`, but the linter should be enough to help you figure the rules out. @@ -57,8 +57,8 @@ Example of a method docBlock that follows these guidelines: /** * Builds an identity object from a mnemonic string. * - * @param phraseArg - [[BIP39]](https://www.npmjs.com/package/bip39) Mnemonic word phrase (Secret phrase). - * @returns An [[Identity]]. + * @param phraseArg - {@link https://www.npmjs.com/package/bip39 | BIP39} Mnemonic word phrase (Secret phrase). + * @returns An {@link Identity}. */ ``` diff --git a/jest.config.js b/jest.config.js index 750171f1b..da4cc2c87 100644 --- a/jest.config.js +++ b/jest.config.js @@ -15,10 +15,10 @@ const common = { coverageDirectory: 'coverage', coverageThreshold: { global: { - branches: 70, - functions: 80, - lines: 80, - statements: 80, + branches: 50, + functions: 50, + lines: 50, + statements: 50, }, }, collectCoverageFrom: [ @@ -33,13 +33,12 @@ const common = { 'packages/types/', 'packages/augment-api/', 'packages/type-definitions/', - 'packages/core/src/kilt/', 'index.ts', 'types.ts', '.chain.ts', + 'DelegationDecoder.ts', 'SDKErrors.ts', 'Did.rpc.ts', - 'packages/utils/src/Chain.ts', // third party code copied to this repo 'packages/utils/src/json-schema/', 'jsonabc.ts', diff --git a/package.json b/package.json index f9eda9b39..b15a71a51 100644 --- a/package.json +++ b/package.json @@ -8,13 +8,13 @@ "license": "BSD-4-Clause", "scripts": { "check": "tsc -p tsconfig.json --noEmit", - "build": "yarn workspaces foreach -p -t --exclude '{root-workspace}' run build", + "build": "yarn workspaces foreach -ptAv --exclude '{root-workspace}' run build", "build:docs": "typedoc --theme default --out docs/api --tsconfig tsconfig.docs.json && touch docs/.nojekyll", "bundle": "yarn workspace @kiltprotocol/sdk-js run bundle", "clean": "rimraf tests/bundle/dist && rimraf tests/integration/dist && yarn workspaces foreach -p --exclude '{root-workspace}' run clean", "clean:docs": "rimraf docs/api", - "prepublish": "yarn workspaces foreach -p --no-private exec cp -f ../../LICENSE .", - "publish": "yarn workspaces foreach -pt --no-private npm publish", + "prepublish": "yarn workspaces foreach -pA --no-private exec cp -f ../../LICENSE .", + "publish": "yarn workspaces foreach -ptAv --no-private npm publish", "lint": "eslint packages tests --format=codeframe", "lint:fix": "yarn lint --fix", "set:version": "npm version --no-git-tag-version --no-workspaces-update --workspaces --include-workspace-root", @@ -66,7 +66,7 @@ "testcontainers": "^9.0.0", "ts-jest": "^29.1.1", "ts-jest-resolver": "^2.0.1", - "typedoc": "^0.23.0", + "typedoc": "^0.24.8", "typescript": "^4.8.3" }, "version": "0.34.0", diff --git a/packages/asset-credentials/package.json b/packages/asset-credentials/package.json index 89d4c5db2..6bafc7815 100644 --- a/packages/asset-credentials/package.json +++ b/packages/asset-credentials/package.json @@ -36,7 +36,7 @@ "dependencies": { "@kiltprotocol/chain-helpers": "workspace:*", "@kiltprotocol/config": "workspace:*", - "@kiltprotocol/core": "workspace:*", + "@kiltprotocol/credentials": "workspace:*", "@kiltprotocol/did": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", diff --git a/packages/asset-credentials/src/credentials/PublicCredential.chain.ts b/packages/asset-credentials/src/credentials/PublicCredential.chain.ts index 9f96a7606..2e0f39731 100644 --- a/packages/asset-credentials/src/credentials/PublicCredential.chain.ts +++ b/packages/asset-credentials/src/credentials/PublicCredential.chain.ts @@ -6,12 +6,12 @@ */ import type { - AssetDidUri, + AssetDid, CTypeHash, IDelegationNode, IPublicCredentialInput, IPublicCredential, - DidUri, + Did, HexString, } from '@kiltprotocol/types' import type { ApiPromise } from '@polkadot/api' @@ -29,17 +29,16 @@ import { fromChain as didFromChain } from '@kiltprotocol/did' import { SDKErrors, cbor } from '@kiltprotocol/utils' import { getIdForCredential } from './PublicCredential.js' -import { validateUri } from '../dids/index.js' +import { validateDid } from '../dids/index.js' export interface EncodedPublicCredential { ctypeHash: CTypeHash - subject: AssetDidUri + subject: AssetDid claims: HexString authorization: IDelegationNode['id'] | null } - /** - * Format a [[IPublicCredentialInput]] to be used as a parameter for the blockchain API function. + * Format a {@link IPublicCredentialInput} to be used as a parameter for the blockchain API function. * @param publicCredential The public credential to format. * @returns The blockchain-formatted public credential. @@ -59,7 +58,7 @@ export function toChain( } } -// Transform a blockchain-formatted public credential [[PublicCredentialsCredentialsCredential]] into the original [[IPublicCredentialInput]]. +// Transform a blockchain-formatted public credential {@link PublicCredentialsCredentialsCredential} into the original {@link IPublicCredentialInput}. // It throws if what was written on the chain was garbage. function credentialInputFromChain({ claims, @@ -68,12 +67,12 @@ function credentialInputFromChain({ subject, }: PublicCredentialsCredentialsCredential): IPublicCredentialInput { const credentialSubject = subject.toUtf8() - validateUri(credentialSubject) + validateDid(credentialSubject) return { claims: cbor.decode(claims), cTypeHash: ctypeHash.toHex(), delegationId: authorization.unwrapOr(undefined)?.toHex() ?? null, - subject: credentialSubject as AssetDidUri, + subject: credentialSubject as AssetDid, } } @@ -86,9 +85,9 @@ export interface PublicCredentialEntry { */ ctypeHash: HexString /** - * DID URI of the attester. + * DID of the attester. */ - attester: DidUri + attester: Did /** * Flag indicating whether the credential is currently revoked. */ @@ -150,12 +149,12 @@ function extractDidCallsFromBatchCall( } /** - * Retrieves from the blockchain the [[IPublicCredential]] that is identified by the provided identifier. + * Retrieves from the blockchain the {@link IPublicCredential} that is identified by the provided identifier. * * This is the **only** secure way for users to retrieve and verify a credential. * * @param credentialId Credential ID to use for the query. - * @returns The [[IPublicCredential]] as the result of combining the on-chain information and the information present in the tx history. + * @returns The {@link IPublicCredential} as the result of combining the on-chain information and the information present in the tx history. */ export async function fetchCredentialFromChain( credentialId: IPublicCredential['id'] @@ -242,15 +241,15 @@ export async function fetchCredentialFromChain( } /** - * Retrieves from the blockchain the [[IPublicCredential]]s that have been issued to the provided AssetDID. + * Retrieves from the blockchain the {@link IPublicCredential}s that have been issued to the provided {@link AssetDid}. * - * This is the **only** secure way for users to retrieve and verify all the credentials issued to a given [[AssetDidUri]]. + * This is the **only** secure way for users to retrieve and verify all the credentials issued to a given {@link AssetDid}. * * @param subject The AssetDID of the subject. - * @returns An array of [[IPublicCredential]] as the result of combining the on-chain information and the information present in the tx history. + * @returns An array of {@link IPublicCredential} as the result of combining the on-chain information and the information present in the tx history. */ export async function fetchCredentialsFromChain( - subject: AssetDidUri + subject: AssetDid ): Promise { const api = ConfigService.get('api') diff --git a/packages/asset-credentials/src/credentials/PublicCredential.spec.ts b/packages/asset-credentials/src/credentials/PublicCredential.spec.ts index 29f3d53e9..d4906477e 100644 --- a/packages/asset-credentials/src/credentials/PublicCredential.spec.ts +++ b/packages/asset-credentials/src/credentials/PublicCredential.spec.ts @@ -8,11 +8,11 @@ import { BN } from '@polkadot/util' import { ConfigService } from '@kiltprotocol/config' -import { CType } from '@kiltprotocol/core' +import { CType } from '@kiltprotocol/credentials' import * as Did from '@kiltprotocol/did' import type { - AssetDidUri, - DidUri, + AssetDid, + Did as KiltDid, IAssetClaim, IClaimContents, IPublicCredential, @@ -39,7 +39,7 @@ const assetIdentifier = // Build a public credential with fake attestation (i.e., attester, block number, revocation status) information. function buildCredential( - assetDid: AssetDidUri, + assetDid: AssetDid, contents: IClaimContents ): IPublicCredential { const claim: IAssetClaim = { @@ -48,7 +48,7 @@ function buildCredential( subject: assetDid, } const credential = PublicCredential.fromClaim(claim) - const attester: DidUri = Did.getFullDidUri(devAlice.address) + const attester: KiltDid = Did.getFullDid(devAlice.address) return { ...credential, attester, diff --git a/packages/asset-credentials/src/credentials/PublicCredential.ts b/packages/asset-credentials/src/credentials/PublicCredential.ts index 9972b5aaa..f1ce774fb 100644 --- a/packages/asset-credentials/src/credentials/PublicCredential.ts +++ b/packages/asset-credentials/src/credentials/PublicCredential.ts @@ -9,7 +9,7 @@ import type { AccountId } from '@polkadot/types/interfaces' import type { PublicCredentialsCredentialsCredential } from '@kiltprotocol/augment-api' import type { HexString, - DidUri, + Did as KiltDid, IAssetClaim, ICType, IDelegationNode, @@ -18,7 +18,7 @@ import type { PartialAssetClaim, } from '@kiltprotocol/types' -import { CType } from '@kiltprotocol/core' +import { CType } from '@kiltprotocol/credentials' import { blake2AsHex } from '@polkadot/util-crypto' import { ConfigService } from '@kiltprotocol/config' import * as Did from '@kiltprotocol/did' @@ -28,9 +28,9 @@ import * as AssetDid from '../dids/index.js' import { toChain as publicCredentialToChain } from './PublicCredential.chain.js' /** - * Calculates the ID of a [[IPublicCredentialInput]], to be used to retrieve the full credential content from the blockchain. + * Calculates the ID of a {@link IPublicCredentialInput}, to be used to retrieve the full credential content from the blockchain. * - * The ID is formed by first concatenating the SCALE-encoded [[IPublicCredentialInput]] with the SCALE-encoded [[DidUri]] and then Blake2b hashing the result. + * The ID is formed by first concatenating the SCALE-encoded {@link IPublicCredentialInput} with the SCALE-encoded {@link KiltDid | DID} and then Blake2b hashing the result. * * @param credential The input credential object. * @param attester The DID of the credential attester. @@ -38,7 +38,7 @@ import { toChain as publicCredentialToChain } from './PublicCredential.chain.js' */ export function getIdForCredential( credential: IPublicCredentialInput, - attester: DidUri + attester: KiltDid ): HexString { const api = ConfigService.get('api') @@ -62,7 +62,7 @@ function verifyClaimStructure(input: IAssetClaim | PartialAssetClaim): void { throw new SDKErrors.CTypeHashMissingError() } if (input.subject) { - AssetDid.validateUri(input.subject) + AssetDid.validateDid(input.subject) } if (input.contents) { Object.entries(input.contents).forEach(([key, value]) => { @@ -78,7 +78,11 @@ function verifyClaimStructure(input: IAssetClaim | PartialAssetClaim): void { DataUtils.verifyIsHex(input.cTypeHash, 256) } -// Used internally only when building the [[IPublicCredentialInput]]. +/** + * Used internally only when building the {@link IPublicCredentialInput}. + * + * @param input Data from which to build an asset credential. + */ function verifyDataStructure(input: IPublicCredentialInput): void { if (typeof input.claims !== 'object' || input.claims === null) { throw new SDKErrors.ClaimMissingError() @@ -99,12 +103,12 @@ function verifyDataStructure(input: IPublicCredentialInput): void { } /** - * Checks the [[IPublicCredential]] with a given [[CType]] to check if the included claim meets the [[schema]] structure. + * Checks the {@link IPublicCredential} with a given {@link ICType | CType} to check if the included claim meets the structure described by that CType. * - * This function is meant to be used by consumers of this [[IPublicCredential]], once they have retrieved the full credential content. + * This function is meant to be used by consumers of this {@link IPublicCredential}, once they have retrieved the full credential content. * - * @param credential A [[IPublicCredential]] for the attester. - * @param cType A [[CType]] to verify the [[Claim]] structure. + * @param credential A {@link IPublicCredential} for the attester. + * @param cType A {@link ICType} to verify the {@link IPublicCredential.claims} structure. */ export function verifyAgainstCType( credential: IPublicCredential, @@ -118,15 +122,15 @@ type VerifyOptions = { } /** - * Verifies if a received [[IPublicCredential]] is valid, meaning if its content has not been tampered with and optionally if its structure matches a given [[ICType]]. + * Verifies if a received {@link IPublicCredential} is valid, meaning if its content has not been tampered with and optionally if its structure matches a given {@link ICType}. * * **Successful verification of a public credential still requires the consumer to check the `revoked` property and take the appropriate action**. * * We recommend consumer of credentials to fetch them themselves using the functions exposed in this SDK. * Nevertheless, for some use cases having a function that verifies the content of a credential directly could be handy. - * This function does that: it takes a [[IPublicCredential]], and re-computes its cryptographically-generated ID to verify the content authenticity. + * This function does that: it takes a {@link IPublicCredential}, and re-computes its cryptographically-generated ID to verify the content authenticity. * - * @param credential The full [[IPublicCredential]] object. + * @param credential The full {@link IPublicCredential} object. * @param options - Additional parameter for more verification steps. * @param options.cType - CType which the included claim should be checked against. */ @@ -187,12 +191,12 @@ export type PublicCredentialCreationOptions = { } /** - * Builds a new [[IPublicCredentialInput]] object, from a complete set of required parameters. + * Builds a new {@link IPublicCredentialInput} object, from a complete set of required parameters. * - * @param claim An [[IClaim]] object to build the credential for. + * @param claim An {@link IAssetClaim} object to build the credential for. * @param option Container for different options that can be passed to this method. * @param option.delegationId The id of the DelegationNode of the Attester, which should be used in the attestation. - * @returns A new [[IPublicCredentialInput]] object ready to be submitted to the blockchain for issuance. + * @returns A new {@link IPublicCredentialInput} object ready to be submitted to the blockchain for issuance. */ export function fromClaim( claim: IAssetClaim, diff --git a/packages/asset-credentials/src/dids/index.ts b/packages/asset-credentials/src/dids/index.ts index 395c2067b..88d2c860a 100644 --- a/packages/asset-credentials/src/dids/index.ts +++ b/packages/asset-credentials/src/dids/index.ts @@ -6,7 +6,7 @@ */ import type { - AssetDidUri, + AssetDid, Caip19AssetId, Caip19AssetInstance, Caip19AssetNamespace, @@ -17,12 +17,12 @@ import type { } from '@kiltprotocol/types' import { SDKErrors } from '@kiltprotocol/utils' -// Matches AssetDIDs as per the [AssetDID specification](https://github.com/KILTprotocol/spec-asset-did). +// Matches AssetDIDs as per the {@link https://github.com/KILTprotocol/spec-asset-did | AssetDID specification}. const ASSET_DID_REGEX = /^did:asset:(?(?[-a-z0-9]{3,8}):(?[-a-zA-Z0-9]{1,32}))\.(?(?[-a-z0-9]{3,8}):(?[-a-zA-Z0-9]{1,64})(:(?[-a-zA-Z0-9]{1,78}))?)$/ type IAssetDidParsingResult = { - uri: AssetDidUri + did: AssetDid chainId: Caip2ChainId chainNamespace: Caip2ChainNamespace chainReference: Caip2ChainReference @@ -33,35 +33,35 @@ type IAssetDidParsingResult = { } /** - * Parses an AssetDID uri and returns the information contained within in a structured form. + * Parses an AssetDID and returns the information contained within in a structured form. - * @param assetDidUri An AssetDID uri as a string. -* @returns Object containing information extracted from the AssetDID uri. + * @param assetDid An AssetDID as a string. +* @returns Object containing information extracted from the AssetDID. */ -export function parse(assetDidUri: AssetDidUri): IAssetDidParsingResult { - const matches = ASSET_DID_REGEX.exec(assetDidUri)?.groups +export function parse(assetDid: AssetDid): IAssetDidParsingResult { + const matches = ASSET_DID_REGEX.exec(assetDid)?.groups if (!matches) { - throw new SDKErrors.InvalidDidFormatError(assetDidUri) + throw new SDKErrors.InvalidDidFormatError(assetDid) } - const { chainId, assetId } = matches as Omit + const { chainId, assetId } = matches as Omit return { - ...(matches as Omit), - uri: `did:asset:${chainId}.${assetId}`, + ...(matches as Omit), + did: `did:asset:${chainId}.${assetId}`, } } /** - * Checks that a string (or other input) is a valid AssetDID uri. + * Checks that a string (or other input) is a valid AssetDID. * Throws otherwise. * * @param input Arbitrary input. */ -export function validateUri(input: unknown): void { +export function validateDid(input: unknown): void { if (typeof input !== 'string') { throw new TypeError(`Asset DID string expected, got ${typeof input}`) } - parse(input as AssetDidUri) + parse(input as AssetDid) } diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 780ecdcb0..d7386b014 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -36,9 +36,12 @@ }, "dependencies": { "@kiltprotocol/config": "workspace:*", + "@kiltprotocol/type-definitions": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", "@polkadot/api": "^10.4.0", - "@polkadot/types": "^10.4.0" + "@polkadot/types": "^10.4.0", + "@polkadot/util": "^12.0.0", + "@polkadot/util-crypto": "^12.0.0" } } diff --git a/packages/core/src/balance/Balance.utils.spec.ts b/packages/chain-helpers/src/balance/Balance.utils.spec.ts similarity index 100% rename from packages/core/src/balance/Balance.utils.spec.ts rename to packages/chain-helpers/src/balance/Balance.utils.spec.ts diff --git a/packages/core/src/balance/Balance.utils.ts b/packages/chain-helpers/src/balance/Balance.utils.ts similarity index 85% rename from packages/core/src/balance/Balance.utils.ts rename to packages/chain-helpers/src/balance/Balance.utils.ts index d92ddae99..cf9c13db0 100644 --- a/packages/core/src/balance/Balance.utils.ts +++ b/packages/chain-helpers/src/balance/Balance.utils.ts @@ -70,11 +70,11 @@ export function convertToTxUnit(balance: BN, power: number): BN { export const TRANSACTION_FEE = convertToTxUnit(new BN(125), -9) /** - * Safely converts the given [[BalanceNumber]] to a string, using the supplied methods, + * Safely converts the given {@link BalanceNumber} to a string, using the supplied methods, * or if given a string checks for valid number representation. * - * @param input [[BalanceNumber]] to convert. - * @returns String representation of the given [[BalanceNumber]]. + * @param input The {@link BalanceNumber} to convert. + * @returns String representation of the given {@link BalanceNumber}. */ export function balanceNumberToString(input: BalanceNumber): string { if (typeof input === 'string') { @@ -94,10 +94,10 @@ export function balanceNumberToString(input: BalanceNumber): string { } /** - * Converts the given [[BalanceNumber]] to the femto KILT equivalent. + * Converts the given {@link BalanceNumber} to the femto KILT equivalent. * - * @param input [[BalanceNumber]] to convert. - * @param unit Metric prefix of the given [[BalanceNumber]]. + * @param input The {@link BalanceNumber} to convert. + * @param unit Metric prefix of the given {@link BalanceNumber}. * @returns Exact BN representation in femtoKilt, to use in transactions and calculations. */ export function toFemtoKilt( @@ -132,14 +132,14 @@ export function toFemtoKilt( } /** - * Converts the given [[BalanceNumber]] to a human-readable number with metric prefix and Unit. + * Converts the given {@link BalanceNumber} to a human-readable number with metric prefix and Unit. * This function uses the polkadot formatBalance function, * it's output can therefore be formatted via the polkadot formatting options. * - * @param input [[BalanceNumber]] to convert from Femto Kilt. + * @param input The {@link BalanceNumber} to convert. * @param decimals Set the minimum decimal places in the formatted localized output, default is 4. - * @param options [[BalanceOptions]] for internationalization and formatting. - * @returns String representation of the given [[BalanceNumber]] with unit und metric prefix. + * @param options Additional {@link BalanceOptions} for internationalization and formatting. + * @returns String representation of the given {@link BalanceNumber} with unit und metric prefix. */ export function fromFemtoKilt( input: BalanceNumber, diff --git a/packages/chain-helpers/src/blockchain/Blockchain.ts b/packages/chain-helpers/src/blockchain/Blockchain.ts index 220c1df78..e9736e0f1 100644 --- a/packages/chain-helpers/src/blockchain/Blockchain.ts +++ b/packages/chain-helpers/src/blockchain/Blockchain.ts @@ -15,6 +15,8 @@ import type { BN } from '@polkadot/util' import type { ISubmittableResult, KeyringPair, + KiltAddress, + SignerInterface, SubmittableExtrinsic, SubscriptionPromise, } from '@kiltprotocol/types' @@ -22,7 +24,7 @@ import type { import { SubmittableResult } from '@polkadot/api' import { ConfigService } from '@kiltprotocol/config' -import { SDKErrors } from '@kiltprotocol/utils' +import { SDKErrors, Signers } from '@kiltprotocol/utils' import { ErrorHandler } from '../errorhandling/index.js' import { makeSubscriptionPromise } from './SubscriptionPromise.js' @@ -104,7 +106,7 @@ function defaultResolveOn(): SubscriptionPromise.ResultEvaluator { /** * Submits a signed SubmittableExtrinsic and attaches a callback to monitor the inclusion status of the transaction * and possible errors in the execution of extrinsics. Returns a promise to that end which by default resolves upon - * finalization or rejects if any errors occur during submission or execution of extrinsics. This behavior can be adjusted via optional parameters or via the [[ConfigService]]. + * finalization or rejects if any errors occur during submission or execution of extrinsics. This behavior can be adjusted via optional parameters or via the {@link ConfigService}. * * Transaction fees will apply whenever a transaction fee makes it into a block, even if extrinsics fail to execute correctly! * @@ -167,32 +169,43 @@ export async function submitSignedTx( export const dispatchTx = submitSignedTx +export type TransactionSigner = SignerInterface< + 'Ecrecover-Secp256k1-Blake2b' | 'Sr25519' | 'Ed25519', + KiltAddress +> + /** * Signs and submits the SubmittableExtrinsic with optional resolution and rejection criteria. * * @param tx The generated unsigned SubmittableExtrinsic to submit. - * @param signer The [[KiltKeyringPair]] used to sign the tx. + * @param signer The {@link KeyringPair} used to sign the tx. * @param opts Partial optional criteria for resolving/rejecting the promise. * @param opts.tip Optional amount of Femto-KILT to tip the validator. * @returns Promise result of executing the extrinsic, of type ISubmittableResult. */ export async function signAndSubmitTx( tx: SubmittableExtrinsic, - signer: KeyringPair, + signer: KeyringPair | TransactionSigner, { tip, ...opts }: Partial & Partial<{ tip: AnyNumber }> = {} ): Promise { - const signedTx = await tx.signAsync(signer, { tip }) + const signedTx = + 'address' in signer + ? await tx.signAsync(signer, { tip }) + : await tx.signAsync(signer.id, { + tip, + signer: Signers.getPolkadotSigner([signer]), + }) return submitSignedTx(signedTx, opts) } /** * Checks wheather the provided extrinsic or call represents a batch. * - * @param extrinsic The input [[Extrinsic]] or [[Call]]. - * @param api The optional [[ApiPromise]]. If not provided, the one returned by the `ConfigService` is used. + * @param extrinsic The input {@link Extrinsic} or {@link Call}. + * @param api The optional {@link ApiPromise}. If not provided, the one returned by the `ConfigService` is used. * * @returns True if it's a batch, false otherwise. */ @@ -213,10 +226,10 @@ export function isBatch( * * For example, given the calls [[N1, N2], [N3, [N4, N5], N6]], the final list will look like [N1, N2, N3, N4, N5, N6]. * - * @param call The [[Call]] which can potentially contain nested calls. - * @param api The optional [[ApiPromise]]. If not provided, the one returned by the `ConfigService` is used. + * @param call The {@link Call} which can potentially contain nested calls. + * @param api The optional {@link ApiPromise}. If not provided, the one returned by the `ConfigService` is used. * - * @returns A list of [[Call]] nested according to the rules above. + * @returns A list of {@link Call} nested according to the rules above. */ export function flattenCalls(call: Call, api?: ApiPromise): Call[] { if (isBatch(call, api)) { @@ -234,7 +247,7 @@ export function flattenCalls(call: Call, api?: ApiPromise): Call[] { * * @param blockNumber The number of the block to parse. * @param filter The filter to apply to the transactions in the block. - * @param api The optional [[ApiPromise]]. If not provided, the one returned by the `ConfigService` is used. + * @param api The optional {@link ApiPromise}. If not provided, the one returned by the `ConfigService` is used. * * @returns The last extrinsic in the block matching the filter, or null if no extrinsic is found. */ diff --git a/packages/chain-helpers/src/blockchain/SubscriptionPromise.ts b/packages/chain-helpers/src/blockchain/SubscriptionPromise.ts index a1a28396c..bd4265f79 100644 --- a/packages/chain-helpers/src/blockchain/SubscriptionPromise.ts +++ b/packages/chain-helpers/src/blockchain/SubscriptionPromise.ts @@ -54,7 +54,7 @@ export function makeSubscriptionPromise( } /** - * A wrapper around [[makeSubscriptionPromise]] that helps to build multiple promises which listen to the same subscription. + * A wrapper around {@link makeSubscriptionPromise} that helps to build multiple promises which listen to the same subscription. * * @param args An array of objects each of which provides the arguments for creation of one promise. * @returns An object containing both a subscription callback diff --git a/packages/core/src/kilt/Kilt.ts b/packages/chain-helpers/src/connect/index.ts similarity index 100% rename from packages/core/src/kilt/Kilt.ts rename to packages/chain-helpers/src/connect/index.ts diff --git a/packages/chain-helpers/src/index.ts b/packages/chain-helpers/src/index.ts index ffdbb8689..5ece0d279 100644 --- a/packages/chain-helpers/src/index.ts +++ b/packages/chain-helpers/src/index.ts @@ -11,3 +11,5 @@ export { ErrorHandler } from './errorhandling/index.js' export { Blockchain, SubscriptionPromise } from './blockchain/index.js' +export * as BalanceUtils from './balance/Balance.utils.js' +export * from './connect/index.js' diff --git a/packages/core/src/kilt/index.ts b/packages/core/src/kilt/index.ts deleted file mode 100644 index c966c7b4c..000000000 --- a/packages/core/src/kilt/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -export * from './Kilt.js' diff --git a/packages/core/README.md b/packages/credentials/README.md similarity index 89% rename from packages/core/README.md rename to packages/credentials/README.md index f6ec306fd..b96d58c37 100644 --- a/packages/core/README.md +++ b/packages/credentials/README.md @@ -15,11 +15,11 @@ For more information, please visit our [official SDK documentation](https://docs NPM: ``` -npm install @kiltprotocol/core +npm install @kiltprotocol/credentials ``` YARN: ``` -yarn add @kiltprotocol/core +yarn add @kiltprotocol/credentials ``` diff --git a/packages/core/package.json b/packages/credentials/package.json similarity index 80% rename from packages/core/package.json rename to packages/credentials/package.json index 41baee506..75d16b400 100644 --- a/packages/core/package.json +++ b/packages/credentials/package.json @@ -1,5 +1,5 @@ { - "name": "@kiltprotocol/core", + "name": "@kiltprotocol/credentials", "version": "0.34.0", "description": "", "main": "./lib/cjs/index.js", @@ -30,6 +30,7 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { + "@types/json-pointer": "^1.0.34", "@types/uuid": "^8.0.0", "rimraf": "^3.0.2", "testcontainers": "^9.0.0", @@ -40,6 +41,10 @@ "@kiltprotocol/chain-helpers": "workspace:*", "@kiltprotocol/config": "workspace:*", "@kiltprotocol/did": "workspace:*", + "@kiltprotocol/eddsa-jcs-2022": "0.1.0-rc.1", + "@kiltprotocol/es256k-jcs-2023": "0.1.0-rc.1", + "@kiltprotocol/jcs-data-integrity-proofs-common": "0.1.0-rc.1", + "@kiltprotocol/sr25519-jcs-2023": "0.1.0-rc.1", "@kiltprotocol/type-definitions": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", @@ -47,6 +52,7 @@ "@polkadot/keyring": "^12.0.0", "@polkadot/types": "^10.4.0", "@polkadot/util": "^12.0.0", - "@polkadot/util-crypto": "^12.0.0" + "@polkadot/util-crypto": "^12.0.0", + "json-pointer": "^0.6.2" } } diff --git a/packages/vc-export/src/KiltAttestationProofV1.spec.ts b/packages/credentials/src/V1/KiltAttestationProofV1.spec.ts similarity index 82% rename from packages/vc-export/src/KiltAttestationProofV1.spec.ts rename to packages/credentials/src/V1/KiltAttestationProofV1.spec.ts index a82c431e6..2752ae1b5 100644 --- a/packages/vc-export/src/KiltAttestationProofV1.spec.ts +++ b/packages/credentials/src/V1/KiltAttestationProofV1.spec.ts @@ -8,30 +8,29 @@ import { encodeAddress, randomAsHex, randomAsU8a } from '@polkadot/util-crypto' import { u8aToHex, u8aToU8a } from '@polkadot/util' -import { Credential } from '@kiltprotocol/core' import { parse } from '@kiltprotocol/did' -import type { DidUri } from '@kiltprotocol/types' +import type { Did } from '@kiltprotocol/types' import { attestation, blockHash, - credential, + credential as VC, makeAttestationCreatedEvents, mockedApi, timestamp, cType, -} from './exportToVerifiableCredential.spec' -import { exportICredentialToVc } from './fromICredential' + legacyCredential, +} from '../../../../tests/testUtils/testData.js' import { finalizeProof, initializeProof, applySelectiveDisclosure, verify as verifyOriginal, -} from './KiltAttestationProofV1' -import { check as checkStatus } from './KiltRevocationStatusV1' -import { fromICredential } from './KiltCredentialV1' -import { credentialIdFromRootHash } from './common' -import type { KiltCredentialV1 } from './types' +} from './KiltAttestationProofV1.js' +import { check as checkStatus } from './KiltRevocationStatusV1.js' +import { credentialIdFromRootHash } from './common.js' +import type { KiltCredentialV1 } from './types.js' +import { fromInput } from './KiltCredentialV1.js' // the original verify implementation but with a mocked CType loader const verify: typeof verifyOriginal = async (cred, proof, options) => @@ -45,17 +44,7 @@ const verify: typeof verifyOriginal = async (cred, proof, options) => }, }) -let VC: KiltCredentialV1 describe('proofs', () => { - beforeAll(() => { - VC = exportICredentialToVc(credential, { - issuer: attestation.owner, - chainGenesisHash: mockedApi.genesisHash, - blockHash, - timestamp, - }) - }) - it('it verifies proof', async () => { // verify const { proof, ...cred } = VC @@ -73,30 +62,13 @@ describe('proofs', () => { await expect(verify(cred, proof, { api: mockedApi })).resolves.not.toThrow() }) - it('it verifies credential with selected properties revealed', async () => { - const reducedCredential = Credential.removeClaimProperties(credential, [ - 'name', - 'birthday', - ]) - const { proof, ...reducedVC } = exportICredentialToVc(reducedCredential, { - issuer: attestation.owner, - chainGenesisHash: mockedApi.genesisHash, - blockHash, - timestamp, - }) - - await expect( - verify(reducedVC, proof, { api: mockedApi }) - ).resolves.not.toThrow() - }) - it('applies selective disclosure to proof', async () => { const updated = applySelectiveDisclosure(VC, VC.proof, ['name']) - const { contents, owner } = credential.claim + const { name, id } = VC.credentialSubject expect(updated.credential).toHaveProperty('credentialSubject', { '@context': expect.any(Object), - id: owner, - name: contents.name, + id, + name, }) expect(Object.entries(updated.proof.salt)).toHaveLength(2) await expect( @@ -105,7 +77,7 @@ describe('proofs', () => { }) it('checks delegation node owners', async () => { - const delegator: DidUri = `did:kilt:${encodeAddress(randomAsU8a(32), 38)}` + const delegator: Did = `did:kilt:${encodeAddress(randomAsU8a(32), 38)}` const credentialWithDelegators: KiltCredentialV1 = { ...VC, federatedTrustModel: VC.federatedTrustModel?.map((i) => { @@ -120,7 +92,7 @@ describe('proofs', () => { mockedApi.query.delegation = { delegationNodes: jest.fn(async (nodeId: string | Uint8Array) => { switch (u8aToHex(u8aToU8a(nodeId))) { - case credential.delegationId: + case legacyCredential.delegationId: return mockedApi.createType( 'Option', { @@ -157,9 +129,14 @@ describe('proofs', () => { }) describe('issuance', () => { - const unsigned = fromICredential(credential, { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { id: subject, '@context': _, ...claims } = VC.credentialSubject + const unsigned = fromInput({ + claims, + subject, + cType: cType.$id, issuer: attestation.owner, - timestamp: 0, + timestamp: new Date(0), }) it('create a proof via initialize and finalize', async () => { @@ -199,15 +176,6 @@ describe('issuance', () => { }) describe('negative tests', () => { - beforeEach(() => { - VC = exportICredentialToVc(credential, { - issuer: attestation.owner, - chainGenesisHash: mockedApi.genesisHash, - blockHash, - timestamp, - }) - }) - it('errors on proof mismatch', async () => { // @ts-ignore delete VC.proof diff --git a/packages/vc-export/src/KiltAttestationProofV1.ts b/packages/credentials/src/V1/KiltAttestationProofV1.ts similarity index 77% rename from packages/vc-export/src/KiltAttestationProofV1.ts rename to packages/credentials/src/V1/KiltAttestationProofV1.ts index 55c25ef56..ee7fc4f01 100644 --- a/packages/vc-export/src/KiltAttestationProofV1.ts +++ b/packages/credentials/src/V1/KiltAttestationProofV1.ts @@ -6,7 +6,6 @@ */ import { - hexToU8a, stringToU8a, u8aCmp, u8aConcatStrict, @@ -25,19 +24,19 @@ import type { QueryableStorageEntry } from '@polkadot/api/types' import type { Option, u64, Vec } from '@polkadot/types' import type { AccountId, + EventRecord, Extrinsic, Hash, } from '@polkadot/types/interfaces/types.js' -import type { IEventData, Signer } from '@polkadot/types/types' +import type { IEventData } from '@polkadot/types/types' -import { CType } from '@kiltprotocol/core' import { authorizeTx, - getFullDidUri, - validateUri, - fromChain as didFromChain, + getFullDid, + validateDid, + fromChain, } from '@kiltprotocol/did' -import { JsonSchema, SDKErrors } from '@kiltprotocol/utils' +import { JsonSchema, SDKErrors, Caip19, Signers } from '@kiltprotocol/utils' import { ConfigService } from '@kiltprotocol/config' import { Blockchain } from '@kiltprotocol/chain-helpers' import type { @@ -45,27 +44,18 @@ import type { RuntimeCommonAuthorizationAuthorizationId, } from '@kiltprotocol/augment-api' import type { - DidUri, - ICredential, + DidDocument, + Did, ICType, IDelegationNode, KiltAddress, - SignExtrinsicCallback, + SignerInterface, } from '@kiltprotocol/types' +import * as CType from '../ctype/index.js' -import { Caip19 } from './CAIP/index.js' import { - ATTESTATION_PROOF_V1_TYPE, DEFAULT_CREDENTIAL_CONTEXTS, - KILT_ATTESTER_DELEGATION_V1_TYPE, - KILT_ATTESTER_LEGITIMATION_V1_TYPE, - KILT_CREDENTIAL_IRI_PREFIX, - KILT_REVOCATION_STATUS_V1_TYPE, - spiritnetGenesisHash, -} from './constants.js' -import { validateStructure as validateCredentialStructure, - CTypeLoader, validateSubject, } from './KiltCredentialV1.js' import { fromGenesisAndRootHash } from './KiltRevocationStatusV1.js' @@ -77,45 +67,26 @@ import { assertMatchingConnection, credentialIdFromRootHash, credentialIdToRootHash, + KILT_CREDENTIAL_IRI_PREFIX, + KILT_ATTESTER_DELEGATION_V1_TYPE, + KILT_ATTESTER_LEGITIMATION_V1_TYPE, + spiritnetGenesisHash, } from './common.js' -import { CredentialMalformedError, ProofMalformedError } from './errors.js' import type { CredentialSubject, KiltAttestationProofV1, KiltAttesterLegitimationV1, KiltCredentialV1, } from './types.js' +import { CTypeLoader } from '../ctype/CTypeLoader.js' +import { KiltRevocationStatusV1 } from './index.js' + +export type Interface = KiltAttestationProofV1 /** - * Produces an instance of [[KiltAttestationProofV1]] from an [[ICredential]]. - * - * @param credential Input credential. - * @param opts Additional parameters required for creating a proof from an [[ICredential]]. - * @param opts.blockHash Hash of a block at which the proof must be verifiable. - * @returns An embedded proof for a verifiable credential derived from the input. + * Type for backwards-compatible Kilt proof suite. */ -export function fromICredential( - credential: ICredential, - { blockHash }: { blockHash: Uint8Array } -): KiltAttestationProofV1 { - // `block` field is base58 encoding of block hash - const block = base58Encode(blockHash) - // `commitments` (claimHashes) are base58 encoded in new format - const commitments = credential.claimHashes.map((i) => - base58Encode(hexToU8a(i)) - ) - // salt/nonces must be sorted by statement digest (keys) and base58 encoded - const salt = Object.entries(credential.claimNonceMap) - .map(([hsh, slt]) => [hexToU8a(hsh), stringToU8a(slt)]) - .sort((a, b) => u8aCmp(a[0], b[0])) - .map((i) => base58Encode(i[1])) - return { - type: ATTESTATION_PROOF_V1_TYPE, - block, - commitments, - salt, - } -} +export const PROOF_TYPE = 'KiltAttestationProofV1' export const proofSchema: JsonSchema.Schema = { $schema: 'http://json-schema.org/draft-07/schema#', @@ -127,7 +98,7 @@ export const proofSchema: JsonSchema.Schema = { }, type: { type: 'string', - const: ATTESTATION_PROOF_V1_TYPE, + const: PROOF_TYPE, }, block: { type: 'string', @@ -151,15 +122,15 @@ const schemaValidator = new JsonSchema.Validator(proofSchema, '7') /** * Validates a proof object against the KiltAttestationProofV1 data model. - * Throws if object violates the [[proofSchema]]. + * Throws if object violates the {@link proofSchema}. * * @param proof Proof object to be validated. */ export function validateStructure(proof: KiltAttestationProofV1): void { const { errors, valid } = schemaValidator.validate(proof) if (!valid) - throw new ProofMalformedError( - `Object not matching ${ATTESTATION_PROOF_V1_TYPE} data model`, + throw new SDKErrors.ProofMalformedError( + `Object not matching ${PROOF_TYPE} data model`, { cause: errors, } @@ -210,8 +181,8 @@ function makeCommitments( /** * (Re-)computes the root hash / credential hash from a credential and proof. * - * @param credential A [[KiltCredentialV1]] type credential. - * @param proof A [[KiltAttestationProofV1]] type proof for this credential. + * @param credential A {@link KiltCredentialV1} type credential. + * @param proof A {@link KiltAttestationProofV1} type proof for this credential. * @returns The root hash. */ export function calculateRootHash( @@ -235,7 +206,7 @@ export function calculateRootHash( // get on-chain id from delegation id return delegationIdFromAttesterDelegation(entry) } - throw new CredentialMalformedError( + throw new SDKErrors.CredentialMalformedError( `unknown type ${ (entry as { type: string }).type } in federatedTrustModel` @@ -253,7 +224,7 @@ async function verifyAttestedAt( ): Promise<{ verified: boolean timestamp: number - attester: DidUri + attester: Did cTypeId: ICType['$id'] delegationId: IDelegationNode['id'] | null }> { @@ -289,7 +260,7 @@ async function verifyAttestedAt( Option | Option ] & IEventData - const attester = getFullDidUri(encodeAddress(att.toU8a(), 38)) + const attester = getFullDid(encodeAddress(att.toU8a(), 38)) const cTypeId = CType.hashToId(cTypeHash.toHex()) const delegationId = authorization.isSome ? ( @@ -309,7 +280,7 @@ async function verifyAttestedAt( async function verifyAuthoritiesInHierarchy( api: ApiPromise, nodeId: Uint8Array | string, - delegators: Set + delegators: Set ): Promise { const node = (await api.query.delegation.delegationNodes(nodeId)).unwrapOr( null @@ -317,7 +288,7 @@ async function verifyAuthoritiesInHierarchy( if (node === null) { throw new SDKErrors.DelegationIdMissingError() } - delegators.delete(didFromChain(node.details.owner)) + delegators.delete(fromChain(node.details.owner)) if (delegators.size === 0) { return } @@ -365,12 +336,16 @@ async function verifyLegitimation( * @param opts Additional parameters. * @param opts.api A polkadot-js/api instance connected to the blockchain network on which the credential is anchored. * @param opts.cTypes One or more CType definitions to be used for validation. If `loadCTypes` is set to `false`, validation will fail if the definition of the credential's CType is not given. - * @param opts.loadCTypes A function to load CType definitions that are not in `cTypes`. Defaults to using the [[CachingCTypeLoader]]. If set to `false` or `undefined`, no additional CTypes will be loaded. + * @param opts.loadCTypes A function to load CType definitions that are not in `cTypes`. Defaults to using the CachingCTypeLoader. If set to `false` or `undefined`, no additional CTypes will be loaded. */ export async function verify( credentialInput: Omit, proof: KiltAttestationProofV1, - opts: { api?: ApiPromise; cTypes?: ICType[]; loadCTypes?: CTypeLoader } = {} + opts: { + api?: ApiPromise + cTypes?: ICType[] + loadCTypes?: CTypeLoader | false + } = {} ): Promise { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { proof: _, ...credential } = credentialInput as KiltCredentialV1 @@ -380,15 +355,15 @@ export async function verify( validateCredentialStructure(credential) const { nonTransferable, credentialStatus, credentialSubject, issuer } = credential - validateUri(issuer, 'Did') + validateDid(issuer, 'Did') await validateSubject(credential, opts) // 4. check nonTransferable if (nonTransferable !== true) - throw new CredentialMalformedError('nonTransferable must be true') + throw new SDKErrors.CredentialMalformedError('nonTransferable must be true') // 5. check credentialStatus - if (credentialStatus.type !== KILT_REVOCATION_STATUS_V1_TYPE) - throw new CredentialMalformedError( - `credentialStatus must have type ${KILT_REVOCATION_STATUS_V1_TYPE}` + if (credentialStatus.type !== KiltRevocationStatusV1.STATUS_TYPE) + throw new SDKErrors.CredentialMalformedError( + `credentialStatus must have type ${KiltRevocationStatusV1.STATUS_TYPE}` ) const { assetInstance, assetNamespace, assetReference } = Caip19.parse( credentialStatus.id @@ -401,7 +376,7 @@ export async function verify( assetReference !== 'attestation' || assetInstance !== expectedAttestationId ) { - throw new CredentialMalformedError( + throw new SDKErrors.CredentialMalformedError( `credentialStatus.id must end on 'kilt:attestation/${expectedAttestationId} in order to be verifiable with this proof` ) } @@ -410,7 +385,7 @@ export async function verify( // 7. Transform to normalized statments and hash const { statements, digests } = normalizeClaims(expandedContents) if (statements.length !== proof.salt.length) - throw new ProofMalformedError( + throw new SDKErrors.ProofMalformedError( 'Violated expectation: number of normalized statements === number of salts' ) // 8-9. Re-compute commitments @@ -493,7 +468,7 @@ export async function verify( break } default: { - throw new CredentialMalformedError( + throw new SDKErrors.CredentialMalformedError( `unknown type ${ (i as { type: string }).type } in federatedTrustModel` @@ -539,8 +514,8 @@ export function applySelectiveDisclosure( const expandedContents = jsonLdExpandCredentialSubject(credentialSubject) const { statements: statementsOriginal } = normalizeClaims(expandedContents) if (statementsOriginal.length !== proofInput.salt.length) - throw new ProofMalformedError( - 'Violated expectation: number of normalized statements === number of salts' + throw new SDKErrors.ProofMalformedError( + 'Violated expectation: number of normalized statements !== number of salts' ) // 2. Filter credentialSubject for claims to be revealed const reducedSubject = Object.entries(credentialSubject).reduce( @@ -578,7 +553,7 @@ export type UnissuedCredential = Omit< > /** - * Initialize a new, prelimiary [[KiltAttestationProofV1]], which is the first step in issuing a new credential. + * Initialize a new, prelimiary {@link KiltAttestationProofV1}, which is the first step in issuing a new credential. * * @example * // start with initializing proof @@ -628,7 +603,7 @@ export function initializeProof( // 4. Create proof object const salt = entropy.map((e) => base58Encode(e)) const proof: KiltAttestationProofV1 = { - type: ATTESTATION_PROOF_V1_TYPE, + type: PROOF_TYPE, block: '', commitments: commitments.sort(u8aCmp).map((i) => base58Encode(i)), salt, @@ -648,7 +623,7 @@ export function initializeProof( } /** - * Finalizes a [[KiltAttestationProofV1]] after anchoring the prelimiary proof's root hash on the KILT blockchain. + * Finalizes a {@link KiltAttestationProofV1} after anchoring the prelimiary proof's root hash on the KILT blockchain. * * @example * // start with initializing proof @@ -672,91 +647,126 @@ export function finalizeProof( blockHash, timestamp, genesisHash = spiritnetGenesisHash, - }: { blockHash: Uint8Array; timestamp: number; genesisHash?: Uint8Array } + }: { blockHash: Uint8Array; timestamp: Date; genesisHash?: Uint8Array } ): KiltCredentialV1 { const rootHash = calculateRootHash(credential, proof) return { ...credential, id: credentialIdFromRootHash(rootHash), credentialStatus: fromGenesisAndRootHash(genesisHash, rootHash), - issuanceDate: new Date(timestamp).toISOString(), + issuanceDate: timestamp.toISOString(), proof: { ...proof, block: base58Encode(blockHash) }, } } -export type AttestationHandler = ( - tx: Extrinsic, - api: ApiPromise -) => Promise<{ - blockHash: Uint8Array - timestamp?: number -}> - -export interface DidSigner { - did: DidUri - signer: SignExtrinsicCallback +export interface TransactionResult { + status: 'InBlock' | 'Finalized' + includedAt: { blockHash: Uint8Array; blockHeight?: BigInt; blockTime?: Date } + events?: EventRecord[] } -export type TxHandler = { - account: KiltAddress - signAndSubmit?: AttestationHandler - signer?: Signer +type CustomHandlers = { + authorizeTx: (tx: Extrinsic) => Promise + submitTx: (tx: Extrinsic) => Promise +} +type SignersAndSubmitter = { + submitterAccount: KiltAddress + signers: readonly SignerInterface[] } +export type IssueOpts = + | (CustomHandlers & Partial) + | (Partial & SignersAndSubmitter) -export type IssueOpts = { - didSigner: DidSigner - transactionHandler: TxHandler -} & Parameters[4] - -function makeDefaultTxSubmit( - transactionHandler: TxHandler -): AttestationHandler { - return async (tx, api) => { - const signed = await api.tx(tx).signAsync(transactionHandler.account, { - signer: transactionHandler.signer, - }) - const result = await Blockchain.submitSignedTx(signed, { - resolveOn: Blockchain.IS_FINALIZED, - }) - const blockHash = result.status.asFinalized - return { blockHash } - } +async function defaultTxSubmit( + tx: Extrinsic, + submitterAccount: KiltAddress, + signers: readonly SignerInterface[], + api: ApiPromise +): Promise { + const extrinsic = api.tx(tx) + const signed = extrinsic.isSigned + ? extrinsic + : await extrinsic.signAsync(submitterAccount, { + signer: Signers.getPolkadotSigner(signers), + }) + const result = await Blockchain.submitSignedTx(signed, { + resolveOn: Blockchain.IS_FINALIZED, + }) + const blockHash = result.status.asFinalized + const { events } = result + return { status: 'Finalized', includedAt: { blockHash }, events } } /** * - * Creates a complete [[KiltAttestationProofV1]] for issuing a new credential. + * Creates a complete {@link KiltAttestationProofV1} for issuing a new credential. * - * @param credential A [[KiltCredentialV1]] for which a proof shall be created. - * @param opts Additional parameters. - * @param opts.didSigner Object containing the attester's `did` and a `signer` callback which authorizes the on-chain anchoring of the credential with the attester's signature. - * @param opts.transactionHandler Object containing the submitter `address` that's going to cover the transaction fees as well as either a `signer` or `signAndSubmit` callback handling extrinsic signing and submission. - * The signAndSubmit callback receives an unsigned extrinsic and is expected to return the `blockHash` and (optionally) `timestamp` when the extrinsic was included in a block. - * This callback must thus take care of signing and submitting the extrinsic to the KILT blockchain as well as noting the inclusion block. - * If only the `signer` is given, a default callback will be constructed to take care of submitting the signed extrinsic using the cached blockchain api object. + * @param credential A {@link KiltCredentialV1} for which a proof shall be created. + * @param issuer The DID or DID Document of the DID acting as the issuer. + * @param options Additional parameters. + * @param options.signers An array of signer interfaces related to the issuer's keys. The function selects the appropriate handlers for all signatures required for issuance (e.g., authorizing the on-chain anchoring of the credential). + * This can be omitted if both a custom authorizeTx & submitTx are given. + * @param options.submitterAccount The account which counter-signs the transaction to cover the transaction fees. + * Can be omitted if both a custom authorizeTx & submitTx are given. + * @param options.authorizeTx Allows overriding the function that takes a transaction and adds authorization by signing it with keys associated with the issuer DID. + * @param options.submitTx Allows overriding the function that takes the DID-signed transaction and submits it to a blockchain node, tracking its inclusion in a block. + * It is expected to at least return the hash of the block at which the transaction was processed. * @returns The credential where `id`, `credentialStatus`, and `issuanceDate` have been updated based on the on-chain attestation record, containing a finalized proof. */ export async function issue( credential: Omit, - { didSigner, transactionHandler, ...otherParams }: IssueOpts + issuer: Did | DidDocument, + options: IssueOpts ): Promise { - const updatedCredential = { ...credential, issuer: didSigner.did } + const updatedCredential = { + ...credential, + issuer: typeof issuer === 'string' ? issuer : issuer.id, + } const [proof, callArgs] = initializeProof(updatedCredential) const api = ConfigService.get('api') const call = api.tx.attestation.add(...callArgs) - const txSubmissionHandler = - transactionHandler.signAndSubmit ?? makeDefaultTxSubmit(transactionHandler) - const didSigned = await authorizeTx( - didSigner.did, - call, - didSigner.signer, - transactionHandler.account, - otherParams - ) + const { - blockHash, - timestamp = (await api.query.timestamp.now.at(blockHash)).toNumber(), - } = await txSubmissionHandler(didSigned, api) + signers, + submitterAccount, + authorizeTx: customAuthorizeTx, + submitTx: customSubmitTx, + ...otherParams + } = options + + if ( + !(customAuthorizeTx && customSubmitTx) && + !(signers && submitterAccount) + ) { + throw new Error( + '`signers` and `submitterAccount` are required options if authorizeTx or submitTx are not given' + ) + } + + /* eslint-disable @typescript-eslint/no-non-null-assertion -- we've checked the appropriate combination of parameters above, but typescript does not follow */ + const didSigned = customAuthorizeTx + ? await customAuthorizeTx(call) + : await authorizeTx(issuer, call, signers!, submitterAccount!, otherParams) + + const transactionPromise = customSubmitTx + ? customSubmitTx(didSigned) + : defaultTxSubmit(didSigned, submitterAccount!, signers!, api) + /* eslint-enable @typescript-eslint/no-non-null-assertion */ + + const { + status, + includedAt: { blockHash, blockTime }, + } = await transactionPromise + + if (status !== 'Finalized' && status !== 'InBlock') { + throw new SDKErrors.SDKError( + `Unexpected transaction status ${status}; the transaction should be "InBlock" or "Finalized" for issuance to continue` + ) + } + + const timestamp = + blockTime ?? + new Date((await api.query.timestamp.now.at(blockHash)).toNumber()) return finalizeProof(updatedCredential, proof, { blockHash, timestamp, diff --git a/packages/vc-export/src/CTypeVerification.spec.ts b/packages/credentials/src/V1/KiltCredentialV1.spec.ts similarity index 66% rename from packages/vc-export/src/CTypeVerification.spec.ts rename to packages/credentials/src/V1/KiltCredentialV1.spec.ts index 22530a98d..a3bb37665 100644 --- a/packages/vc-export/src/CTypeVerification.spec.ts +++ b/packages/credentials/src/V1/KiltCredentialV1.spec.ts @@ -5,34 +5,18 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { CType } from '@kiltprotocol/core' -import { randomAsHex, randomAsU8a } from '@polkadot/util-crypto' +import { randomAsHex } from '@polkadot/util-crypto' + +import * as CType from '../ctype/index.js' import { - attestation, - credential, + credential as VC, cType, -} from './exportToVerifiableCredential.spec' -import { exportICredentialToVc } from './fromICredential' +} from '../../../../tests/testUtils/testData.js' import { credentialSchema, validateStructure, validateSubject, -} from './KiltCredentialV1' -import type { KiltCredentialV1 } from './types' - -let VC: KiltCredentialV1 -const timestamp = 1234567 -const blockHash = randomAsU8a(32) -const attester = attestation.owner - -beforeAll(() => { - VC = exportICredentialToVc(credential, { - issuer: attester, - blockHash, - timestamp, - cType: cType.$id, - }) -}) +} from './KiltCredentialV1.js' it('exports to VC including ctype as schema', async () => { expect(VC).toMatchObject({ diff --git a/packages/vc-export/src/KiltCredentialV1.ts b/packages/credentials/src/V1/KiltCredentialV1.ts similarity index 71% rename from packages/vc-export/src/KiltCredentialV1.ts rename to packages/credentials/src/V1/KiltCredentialV1.ts index 2da955cce..1a44d5166 100644 --- a/packages/vc-export/src/KiltCredentialV1.ts +++ b/packages/credentials/src/V1/KiltCredentialV1.ts @@ -8,37 +8,68 @@ import { hexToU8a } from '@polkadot/util' import { base58Encode } from '@polkadot/util-crypto' -import { JsonSchema } from '@kiltprotocol/utils' -import { CType } from '@kiltprotocol/core' +import { JsonSchema, SDKErrors } from '@kiltprotocol/utils' import type { ICType, ICredential, - DidUri, + Did, IDelegationNode, } from '@kiltprotocol/types' -import { CredentialMalformedError } from './errors.js' +import * as CType from '../ctype/index.js' import { fromGenesisAndRootHash } from './KiltRevocationStatusV1.js' -import { - DEFAULT_CREDENTIAL_CONTEXTS, - DEFAULT_CREDENTIAL_TYPES, - JSON_SCHEMA_TYPE, - KILT_ATTESTER_DELEGATION_V1_TYPE, - KILT_ATTESTER_LEGITIMATION_V1_TYPE, - KILT_CREDENTIAL_TYPE, - W3C_CREDENTIAL_TYPE, - spiritnetGenesisHash, -} from './constants.js' +import { W3C_CREDENTIAL_CONTEXT_URL, W3C_CREDENTIAL_TYPE } from './constants.js' import type { KiltAttesterDelegationV1, KiltAttesterLegitimationV1, KiltCredentialV1, } from './types.js' import { + KILT_ATTESTER_DELEGATION_V1_TYPE, + KILT_ATTESTER_LEGITIMATION_V1_TYPE, credentialIdFromRootHash, jsonLdExpandCredentialSubject, + spiritnetGenesisHash, +} from './common.js' +import { CTypeLoader, newCachingCTypeLoader } from '../ctype/CTypeLoader.js' + +export { + credentialIdFromRootHash as idFromRootHash, + credentialIdToRootHash as idToRootHash, + getDelegationNodeIdForCredential as getDelegationId, } from './common.js' +export type Interface = KiltCredentialV1 + +/** + * Credential context URL required for Kilt credentials. + */ +export const CONTEXT_URL = 'https://www.kilt.io/contexts/credentials' +/** + * Ordered set of credential contexts required on every Kilt VC. + */ +export const DEFAULT_CREDENTIAL_CONTEXTS: [ + typeof W3C_CREDENTIAL_CONTEXT_URL, + typeof CONTEXT_URL +] = [W3C_CREDENTIAL_CONTEXT_URL, CONTEXT_URL] +/** + * Credential type required for Kilt credentials. + */ +export const CREDENTIAL_TYPE = 'KiltCredentialV1' +/** + * Set of credential types required on every Kilt VC. + */ +export const DEFAULT_CREDENTIAL_TYPES: Array< + typeof W3C_CREDENTIAL_TYPE | typeof CREDENTIAL_TYPE +> = [W3C_CREDENTIAL_TYPE, CREDENTIAL_TYPE] + +export const CREDENTIAL_SCHEMA_TYPE = 'JsonSchema2023' + +export { + KILT_ATTESTER_DELEGATION_V1_TYPE as DELEGATION_TYPE, + KILT_ATTESTER_LEGITIMATION_V1_TYPE as LEGITIMATION_TYPE, +} + export const credentialSchema: JsonSchema.Schema = { $id: 'ipfs://QmRpbcBsAPLCKUZSNncPiMxtVfM33UBmudaCMQV9K3FD5z', $schema: 'http://json-schema.org/draft-07/schema#', @@ -57,7 +88,7 @@ export const credentialSchema: JsonSchema.Schema = { maxItems: 3, allOf: [ { contains: { const: W3C_CREDENTIAL_TYPE } }, - { contains: { const: KILT_CREDENTIAL_TYPE } }, + { contains: { const: CREDENTIAL_TYPE } }, { contains: { type: 'string', pattern: '^kilt:ctype:0x[0-9a-f]+$' } }, ], }, @@ -125,7 +156,7 @@ export const credentialSchema: JsonSchema.Schema = { }, type: { type: 'string', - const: JSON_SCHEMA_TYPE, + const: CREDENTIAL_SCHEMA_TYPE, }, }, required: ['id', 'type'], @@ -160,7 +191,7 @@ schemaValidator.addSchema(CType.Schemas.CTypeModel, 'kilt.schemas/CTypeModel') /** * Validates an object against the KiltCredentialV1 data model. - * Throws if object violates the [[credentialSchema]]. + * Throws if object violates the {@link credentialSchema}. * * @param credential Credential or object to be validated. */ @@ -168,17 +199,17 @@ export function validateStructure( credential: Omit ): void { if ( - credential?.credentialSchema?.type !== JSON_SCHEMA_TYPE || + credential?.credentialSchema?.type !== CREDENTIAL_SCHEMA_TYPE || credential?.credentialSchema?.id !== credentialSchema.$id ) { throw new Error( - `A ${KILT_CREDENTIAL_TYPE} type credential must have a credentialSchema of type ${JSON_SCHEMA_TYPE} and id ${credentialSchema.$id}` + `A ${CREDENTIAL_TYPE} type credential must have a credentialSchema of type ${CREDENTIAL_SCHEMA_TYPE} and id ${credentialSchema.$id}` ) } const { errors, valid } = schemaValidator.validate(credential) if (!valid) - throw new CredentialMalformedError( - `Object not matching ${KILT_CREDENTIAL_TYPE} data model`, + throw new SDKErrors.CredentialMalformedError( + `Object not matching ${CREDENTIAL_TYPE} data model`, { cause: errors, } @@ -186,11 +217,11 @@ export function validateStructure( } interface CredentialInput { - subject: DidUri + subject: Did claims: ICredential['claim']['contents'] cType: ICType['$id'] - issuer: DidUri - timestamp?: number + issuer: Did + timestamp?: Date chainGenesisHash?: Uint8Array claimHash?: ICredential['rootHash'] legitimations?: Array @@ -214,7 +245,7 @@ export function fromInput( * @param input.claims A record of claims about the subject. * @param input.cType The CType (or alternatively its id) to which the claims conform. * @param input.issuer The issuer of the credential. - * @param input.timestamp Timestamp of a block at which the credential can be verified, in milliseconds since January 1, 1970, UTC (UNIX epoch). + * @param input.timestamp Timestamp of a block at which the credential can be verified. * @param input.chainGenesisHash Optional: Genesis hash of the chain against which this credential is verifiable. Defaults to the spiritnet genesis hash. * @param input.claimHash Optional: digest of the credential contents needed to produce a credential id. * @param input.legitimations Optional: array of credentials (or credential ids) which function as legitimations to this credential. @@ -226,7 +257,7 @@ export function fromInput({ claims, cType, issuer, - timestamp = Date.now(), + timestamp = new Date(), chainGenesisHash = spiritnetGenesisHash, claimHash, legitimations, @@ -282,11 +313,11 @@ export function fromInput({ credentialSubject, credentialSchema: { id: credentialSchema.$id as string, - type: JSON_SCHEMA_TYPE, + type: CREDENTIAL_SCHEMA_TYPE, }, ...(claimHash && { credentialStatus: fromGenesisAndRootHash(chainGenesisHash, claimHash), - id: credentialIdFromRootHash(hexToU8a(claimHash)), + id: credentialIdFromRootHash(claimHash), }), issuer, issuanceDate, @@ -294,96 +325,17 @@ export function fromInput({ } } -/** - * Transforms an [[ICredential]] object to conform to the KiltCredentialV1 data model. - * - * @param input An [[ICredential]] object. - * @param options Additional required and optional parameters for producing a VC from an [[ICredential]]. - * @param options.issuer The issuer of the attestation to this credential (attester). - * @param options.timestamp Timestamp of the block referenced by blockHash in milliseconds since January 1, 1970, UTC (UNIX epoch). - * @param options.cType Optional: The CType object referenced by the [[ICredential]]. - * @param options.chainGenesisHash Optional: Genesis hash of the chain against which this credential is verifiable. Defaults to the spiritnet genesis hash. - * @returns A KiltCredentialV1 with embedded KiltAttestationProofV1 proof. - */ -export function fromICredential( - input: ICredential, - { - issuer, - timestamp, - cType: ctype, - chainGenesisHash = spiritnetGenesisHash, - }: Pick & - Partial> -): Omit { - const { - legitimations: legitimationsInput, - delegationId, - rootHash: claimHash, - claim, - } = input - const { cTypeHash, owner: subject, contents: claims } = claim - const cType = ctype ?? CType.hashToId(cTypeHash) - - const legitimations = legitimationsInput.map(({ rootHash: legHash }) => - credentialIdFromRootHash(hexToU8a(legHash)) - ) - - const vc = fromInput({ - claimHash, - subject, - claims, - chainGenesisHash, - cType, - issuer, - timestamp, - legitimations, - ...(delegationId && { delegationId }), - }) - - return vc -} - -export type CTypeLoader = (id: ICType['$id']) => Promise - -const loadCType: CTypeLoader = async (id) => { - return (await CType.fetchFromChain(id)).cType -} - -/** - * A factory for a CType loader that caches a CType definition once it has been loaded. - * Used in validating the credentialSubject of a [[KiltCredentialV1]] against the Claim Type referenced in its `type` field. - * - * @param initialCTypes An array of CTypes with which the cache is to be initialized. - * @returns A function that takes a CType id and looks up a CType definition in an internal cache, and if not found, tries to fetch it from the KILT blochchain. - */ -export function newCachingCTypeLoader( - initialCTypes: ICType[] = [] -): CTypeLoader { - const ctypes: Map = new Map() - - initialCTypes.forEach((ctype) => { - ctypes.set(ctype.$id, ctype) - }) - - async function getCType(id: ICType['$id']): Promise { - const ctype: ICType = ctypes.get(id) ?? (await loadCType(id)) - ctypes.set(ctype.$id, ctype) - return ctype - } - return getCType -} - const cachingCTypeLoader = newCachingCTypeLoader() /** * Validates the claims in the VC's `credentialSubject` against a CType definition. * - * @param credential A [[KiltCredentialV1]] type verifiable credential. + * @param credential A {@link KiltCredentialV1} type verifiable credential. * @param credential.credentialSubject The credentialSubject to be validated. * @param credential.type The credential's types. * @param options Options map. * @param options.cTypes One or more CType definitions to be used for validation. If `loadCTypes` is set to `false`, validation will fail if the definition of the credential's CType is not given. - * @param options.loadCTypes A function to load CType definitions that are not in `cTypes`. Defaults to using the [[CachingCTypeLoader]]. If set to `false` or `undefined`, no additional CTypes will be loaded. + * @param options.loadCTypes A function to load CType definitions that are not in `cTypes`. Defaults to using the {@link newCachingCTypeLoader | CachingCTypeLoader}. If set to `false` or `undefined`, no additional CTypes will be loaded. */ export async function validateSubject( { diff --git a/packages/vc-export/src/KiltRevocationStatusV1.ts b/packages/credentials/src/V1/KiltRevocationStatusV1.ts similarity index 83% rename from packages/vc-export/src/KiltRevocationStatusV1.ts rename to packages/credentials/src/V1/KiltRevocationStatusV1.ts index b5a518699..a38840836 100644 --- a/packages/vc-export/src/KiltRevocationStatusV1.ts +++ b/packages/credentials/src/V1/KiltRevocationStatusV1.ts @@ -11,34 +11,37 @@ import type { ApiPromise } from '@polkadot/api' import type { U8aLike } from '@polkadot/util/types' import { ConfigService } from '@kiltprotocol/config' -import { Attestation, CType, SDKErrors } from '@kiltprotocol/core' import type { Caip2ChainId } from '@kiltprotocol/types' +import { Caip2, SDKErrors } from '@kiltprotocol/utils' -import { Caip2 } from './CAIP/index.js' -import { KILT_REVOCATION_STATUS_V1_TYPE } from './constants.js' +import * as CType from '../ctype/index.js' +import * as Attestation from '../attestation/index.js' import { assertMatchingConnection, getDelegationNodeIdForCredential, } from './common.js' -import { CredentialMalformedError } from './errors.js' import type { KiltCredentialV1, KiltRevocationStatusV1 } from './types.js' +export type Interface = KiltRevocationStatusV1 + +export const STATUS_TYPE = 'KiltRevocationStatusV1' + /** * Check attestation and revocation status of a credential at the latest block available. * * @param credential The KiltCredentialV1 to which the status method is linked to. * @param opts Additional parameters. * @param opts.api An optional polkadot-js/api instance connected to the blockchain network on which the credential is anchored. - * If not given this function will try to retrieve a cached connection from the [[ConfigService]]. + * If not given this function will try to retrieve a cached connection from the {@link ConfigService}. */ export async function check( credential: Omit, opts: { api?: ApiPromise } = {} ): Promise { const { credentialStatus } = credential - if (credentialStatus?.type !== KILT_REVOCATION_STATUS_V1_TYPE) + if (credentialStatus?.type !== STATUS_TYPE) throw new TypeError( - `The credential must have a credentialStatus of type ${KILT_REVOCATION_STATUS_V1_TYPE}` + `The credential must have a credentialStatus of type ${STATUS_TYPE}` ) const { api = ConfigService.get('api') } = opts const { assetNamespace, assetReference, assetInstance } = @@ -49,7 +52,7 @@ export async function check( ) } if (!assetInstance) { - throw new CredentialMalformedError( + throw new SDKErrors.CredentialMalformedError( "The attestation record's CAIP-19 identifier must contain an asset index ('token_id') decoding to the credential root hash" ) } @@ -81,11 +84,11 @@ export async function check( } /** - * Creates a [[KiltRevocationStatusV1]] object from a credential hash and blochain identifier, which allow locating the credential's attestation record. + * Creates a {@link KiltRevocationStatusV1} object from a credential hash and blochain identifier, which allow locating the credential's attestation record. * * @param chainIdOrGenesisHash The genesis hash (or CAIP-2 identifier) of the substrate chain on which the attestation record lives. * @param rootHash The credential hash identifying the relevant attestation record on that chain. - * @returns A new [[KiltRevocationStatusV1]] object. + * @returns A new {@link KiltRevocationStatusV1} object. */ export function fromGenesisAndRootHash( chainIdOrGenesisHash: Caip2ChainId | U8aLike, @@ -99,6 +102,6 @@ export function fromGenesisAndRootHash( return { id: `${chainId}/kilt:attestation/${base58Encode(rootHash)}`, - type: KILT_REVOCATION_STATUS_V1_TYPE, + type: STATUS_TYPE, } } diff --git a/packages/vc-export/src/common.ts b/packages/credentials/src/V1/common.ts similarity index 79% rename from packages/vc-export/src/common.ts rename to packages/credentials/src/V1/common.ts index 5d8751a32..42917dcbc 100644 --- a/packages/vc-export/src/common.ts +++ b/packages/credentials/src/V1/common.ts @@ -5,18 +5,22 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { base58Decode, base58Encode } from '@polkadot/util-crypto' import type { ApiPromise } from '@polkadot/api' +import { base58Decode, base58Encode } from '@polkadot/util-crypto' +import { hexToU8a } from '@polkadot/util' -import { Caip19, Caip2 } from './CAIP/index.js' +import type { HexString } from '@kiltprotocol/types' +import { Caip19, Caip2, SDKErrors } from '@kiltprotocol/utils' -import { - KILT_ATTESTER_DELEGATION_V1_TYPE, - KILT_CREDENTIAL_IRI_PREFIX, -} from './constants.js' -import { CredentialMalformedError } from './errors.js' import type { KiltAttesterDelegationV1, KiltCredentialV1 } from './types.js' +export const spiritnetGenesisHash = hexToU8a( + '0x411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21' +) +export const KILT_ATTESTER_LEGITIMATION_V1_TYPE = 'KiltAttesterLegitimationV1' + +export const KILT_ATTESTER_DELEGATION_V1_TYPE = 'KiltAttesterDelegationV1' + export type ExpandedContents = { [Key in keyof T as `${T['@context']['@vocab']}`]: T[Key] @@ -51,9 +55,9 @@ const delegationIdPattern = /^kilt:delegation\/(?[-a-zA-Z0-9]{1,78})$/ /** - * Extract the local (i.e., unique within a KILT blockchain network) delegation node identifier from a [[KiltAttesterDelegationV1]] object. + * Extract the local (i.e., unique within a KILT blockchain network) delegation node identifier from a {@link KiltAttesterDelegationV1} object. * - * @param delegation A [[KiltAttesterDelegationV1]] object. + * @param delegation A {@link KiltAttesterDelegationV1} object. * @returns A delegation id. * @private */ @@ -67,7 +71,7 @@ export function delegationIdFromAttesterDelegation( } const match = delegationIdPattern.exec(delegation.id) if (!match || !match.groups?.delegationId) - throw new CredentialMalformedError( + throw new SDKErrors.CredentialMalformedError( `Not a valid id for type ${KILT_ATTESTER_DELEGATION_V1_TYPE}: ${delegation.id}` ) return base58Decode(match.groups.delegationId) @@ -76,8 +80,8 @@ export function delegationIdFromAttesterDelegation( /** * Extract the local (i.e., unique within a KILT blockchain network) delegation node identifier from a credential's federatedTrustModel entries. * - * @param credential A [[KiltCredentialV1]] type VerifiableCredential. - * @returns A delegation id or `null` if there is no [[KiltAttesterDelegationV1]] type entry in the federatedTrustModel. + * @param credential A {@link KiltCredentialV1} type VerifiableCredential. + * @returns A delegation id or `null` if there is no {@link KiltAttesterDelegationV1} type entry in the federatedTrustModel. * @private */ export function getDelegationNodeIdForCredential( @@ -114,6 +118,8 @@ export function assertMatchingConnection( return parsed } +export const KILT_CREDENTIAL_IRI_PREFIX = 'kilt:credential:' + /** * Extracts the credential root hash from a KILT VC's id. * @@ -129,7 +135,7 @@ export function credentialIdToRootHash( try { return base58Decode(base58String, false) } catch (cause) { - throw new CredentialMalformedError( + throw new SDKErrors.CredentialMalformedError( 'Credential id is not a valid identifier (could not extract base58 encoded string)', { cause } ) @@ -139,11 +145,12 @@ export function credentialIdToRootHash( /** * Transforms the credential root hash to an IRI that functions as the VC's id. * - * @param rootHash Credential root hash as a Uint8Array. - * @returns An IRI composed by prefixing the root hash with the [[KILT_CREDENTIAL_IRI_PREFIX]]. + * @param rootHash Credential root hash as a Uint8Array or HexString. + * @returns An IRI composed by prefixing the root hash with the {@link KILT_CREDENTIAL_IRI_PREFIX}. */ export function credentialIdFromRootHash( - rootHash: Uint8Array + rootHash: Uint8Array | HexString ): KiltCredentialV1['id'] { - return `${KILT_CREDENTIAL_IRI_PREFIX}${base58Encode(rootHash, false)}` + const bytes = typeof rootHash === 'string' ? hexToU8a(rootHash) : rootHash + return `${KILT_CREDENTIAL_IRI_PREFIX}${base58Encode(bytes, false)}` } diff --git a/packages/credentials/src/V1/constants.ts b/packages/credentials/src/V1/constants.ts new file mode 100644 index 000000000..2abf98d99 --- /dev/null +++ b/packages/credentials/src/V1/constants.ts @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/** + * Credential context URL required by VC specifications. + */ +export const W3C_CREDENTIAL_CONTEXT_URL = + 'https://www.w3.org/2018/credentials/v1' +/** + * Credential type required by VC specifications. + */ +export const W3C_CREDENTIAL_TYPE = 'VerifiableCredential' +/** + * Constant for default presentation type. + */ +export const W3C_PRESENTATION_TYPE = 'VerifiablePresentation' diff --git a/packages/credentials/src/V1/index.ts b/packages/credentials/src/V1/index.ts new file mode 100644 index 000000000..08bb2bb01 --- /dev/null +++ b/packages/credentials/src/V1/index.ts @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/** + * @module @kiltprotocol/vc-export + */ + +export * as KiltCredentialV1 from './KiltCredentialV1.js' +export * as KiltAttestationProofV1 from './KiltAttestationProofV1.js' +export * as KiltRevocationStatusV1 from './KiltRevocationStatusV1.js' +export * as Types from './types.js' +export * from './constants.js' diff --git a/packages/credentials/src/V1/types.ts b/packages/credentials/src/V1/types.ts new file mode 100644 index 000000000..84ec3d61d --- /dev/null +++ b/packages/credentials/src/V1/types.ts @@ -0,0 +1,196 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable no-use-before-define */ + +import type { + VerificationMethod, + Did, + Caip2ChainId, + IClaimContents, + ICType, +} from '@kiltprotocol/types' + +import type { + W3C_CREDENTIAL_CONTEXT_URL, + W3C_CREDENTIAL_TYPE, + W3C_PRESENTATION_TYPE, +} from './constants.js' +import type { PROOF_TYPE } from './KiltAttestationProofV1.js' +import type { + CREDENTIAL_TYPE, + DEFAULT_CREDENTIAL_CONTEXTS, + CREDENTIAL_SCHEMA_TYPE, +} from './KiltCredentialV1.js' +import type { STATUS_TYPE } from './KiltRevocationStatusV1.js' +import type { + KILT_CREDENTIAL_IRI_PREFIX, + KILT_ATTESTER_DELEGATION_V1_TYPE, + KILT_ATTESTER_LEGITIMATION_V1_TYPE, +} from './common.js' + +export type IPublicKeyRecord = VerificationMethod + +export interface Proof { + type: string +} + +export interface UnsignedVc { + /** + * References to json-ld contexts defining the terms used. + */ + '@context': [typeof W3C_CREDENTIAL_CONTEXT_URL, ...string[]] + /** + * Credential identifier. + */ + id?: string + /** + * The credential types, which declare what data to expect in the credential. + */ + type: typeof W3C_CREDENTIAL_TYPE | string[] + /** + * Claims about the subjects of the credential. + */ + credentialSubject: { + id?: string + [key: string]: unknown + } + /** + * The entity that issued the credential. + */ + issuer: string + /** + * When the credential was issued. + */ + issuanceDate?: string + /** + * If true, this credential can only be presented and used by its subject. + */ + nonTransferable?: boolean + /** + * Contains json schema for the validation of credentialSubject claims. + */ + credentialSchema?: { + id?: string + type: string + } + /** + * Contains credentials status method. + */ + credentialStatus?: { + id: string + type: string + } +} + +export interface VerifiableCredential extends UnsignedVc { + issuanceDate: string + /** + * Cryptographic proof that makes the credential tamper-evident. + */ + proof: Proof | Proof[] +} + +export interface VerifiablePresentation { + id?: string + '@context': [typeof W3C_CREDENTIAL_CONTEXT_URL, ...string[]] + type: [typeof W3C_PRESENTATION_TYPE, ...string[]] + verifiableCredential: VerifiableCredential | VerifiableCredential[] + holder: Did + proof?: Proof | Proof[] + expirationDate?: string + issuanceDate?: string + verifier?: string +} + +export interface KiltAttestationProofV1 extends Proof { + type: typeof PROOF_TYPE + block: string + commitments: string[] + salt: string[] +} + +export interface JsonSchema2023 { + id: string + type: typeof CREDENTIAL_SCHEMA_TYPE +} + +export interface KiltRevocationStatusV1 { + id: Caip2ChainId + type: typeof STATUS_TYPE +} + +interface IssuerBacking { + id: string + type: string +} + +export interface KiltAttesterLegitimationV1 extends IssuerBacking { + id: KiltCredentialV1['id'] + type: typeof KILT_ATTESTER_LEGITIMATION_V1_TYPE + verifiableCredential?: KiltCredentialV1 +} + +export interface KiltAttesterDelegationV1 extends IssuerBacking { + id: `kilt:delegation/${string}` + type: typeof KILT_ATTESTER_DELEGATION_V1_TYPE + delegators?: Did[] +} + +export interface CredentialSubject extends IClaimContents { + '@context': { + '@vocab': string + } + id: Did +} + +export interface KiltCredentialV1 extends VerifiableCredential { + /** + * References to json-ld contexts defining the terms used. + */ + '@context': typeof DEFAULT_CREDENTIAL_CONTEXTS + /** + * Credential identifier. + */ + id: `${typeof KILT_CREDENTIAL_IRI_PREFIX}${string}` + /** + * The credential types, which declare what data to expect in the credential. + */ + type: Array< + typeof W3C_CREDENTIAL_TYPE | typeof CREDENTIAL_TYPE | ICType['$id'] + > + /** + * Claims about the subjects of the credential. + */ + credentialSubject: CredentialSubject + /** + * The entity that issued the credential. + */ + issuer: Did + /** + * If true, this credential can only be presented and used by its subject. + */ + nonTransferable: true + /** + * Contains json schema for the validation of credentialSubject claims. + */ + credentialSchema: JsonSchema2023 + /** + * Contains credentials status method. + */ + credentialStatus: KiltRevocationStatusV1 + /** + * Contains information that can help to corroborate trust in the issuer. + */ + federatedTrustModel?: Array< + KiltAttesterDelegationV1 | KiltAttesterLegitimationV1 + > + /** + * Cryptographic proof that makes the credential tamper-evident. + */ + proof: KiltAttestationProofV1 +} diff --git a/packages/core/src/attestation/Attestation.chain.ts b/packages/credentials/src/attestation/Attestation.chain.ts similarity index 100% rename from packages/core/src/attestation/Attestation.chain.ts rename to packages/credentials/src/attestation/Attestation.chain.ts diff --git a/packages/core/src/attestation/Attestation.spec.ts b/packages/credentials/src/attestation/Attestation.spec.ts similarity index 71% rename from packages/core/src/attestation/Attestation.spec.ts rename to packages/credentials/src/attestation/Attestation.spec.ts index 63906f75c..792623d05 100644 --- a/packages/core/src/attestation/Attestation.spec.ts +++ b/packages/credentials/src/attestation/Attestation.spec.ts @@ -8,20 +8,10 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ import { ConfigService } from '@kiltprotocol/config' -import type { - CTypeHash, - DidUri, - IAttestation, - ICType, - IClaim, - ICredential, -} from '@kiltprotocol/types' +import type { CTypeHash, Did, IAttestation } from '@kiltprotocol/types' import { SDKErrors } from '@kiltprotocol/utils' import { ApiMocks } from '../../../../tests/testUtils' -import * as Claim from '../claim' -import * as Credential from '../credential' -import * as CType from '../ctype' import * as Attestation from './Attestation' let mockedApi: any @@ -32,43 +22,23 @@ beforeAll(() => { }) describe('Attestation', () => { - const identityAlice: DidUri = + const identityAlice: Did = 'did:kilt:4nwPAmtsK5toZfBM9WvmAe4Fa3LyZ3X3JHt7EUFfrcPPAZAm' - const identityBob: DidUri = - 'did:kilt:4nxhWrDR27YzC5z4soRcz31MaeFn287JRqiE5y4u7jBEdgP2' - let testCType: ICType - let testContents: any - let testClaim: IClaim - let credential: ICredential - - beforeAll(async () => { - testCType = CType.fromProperties('Attestation', { - name: { type: 'string' }, - }) - - testContents = {} - testClaim = Claim.fromCTypeAndClaimContents( - testCType, - testContents, - identityBob - ) - credential = Credential.fromClaim(testClaim) - }) - it('error check should throw errors on faulty Attestations', () => { - const cTypeHash: CTypeHash = - '0xa8c5bdb22aaea3fceb5467d37169cbe49c71f226233037537e70a32a032304ff' - const claimHash: CTypeHash = - '0x21a3448ccf10f6568d8cd9a08af689c220d842b893a40344d010e398ab74e557' + const cTypeHash: CTypeHash = + '0xa8c5bdb22aaea3fceb5467d37169cbe49c71f226233037537e70a32a032304ff' + const claimHash: CTypeHash = + '0x21a3448ccf10f6568d8cd9a08af689c220d842b893a40344d010e398ab74e557' - const everything = { - claimHash, - cTypeHash, - owner: identityAlice, - revoked: false, - delegationId: null, - } + const attestation = { + claimHash, + cTypeHash, + owner: identityAlice, + revoked: false, + delegationId: null, + } + it('error check should throw errors on faulty Attestations', () => { // @ts-ignore const noClaimHash = { claimHash: '', @@ -145,7 +115,7 @@ describe('Attestation', () => { SDKErrors.RevokedTypeError ) - expect(() => Attestation.verifyDataStructure(everything)).not.toThrow() + expect(() => Attestation.verifyDataStructure(attestation)).not.toThrow() expect(() => Attestation.verifyDataStructure(malformedClaimHash) @@ -160,10 +130,6 @@ describe('Attestation', () => { ).toThrowError(SDKErrors.InvalidDidFormatError) }) it('Typeguard should return true on complete Attestations', () => { - const attestation = Attestation.fromCredentialAndDid( - credential, - identityAlice - ) expect(Attestation.isIAttestation(attestation)).toBe(true) expect(Attestation.isIAttestation({ ...attestation, owner: '' })).toBe( false diff --git a/packages/core/src/attestation/Attestation.ts b/packages/credentials/src/attestation/Attestation.ts similarity index 57% rename from packages/core/src/attestation/Attestation.ts rename to packages/credentials/src/attestation/Attestation.ts index 8e6ddb4f4..51aac51b3 100644 --- a/packages/core/src/attestation/Attestation.ts +++ b/packages/credentials/src/attestation/Attestation.ts @@ -9,28 +9,27 @@ import type { IAttestation, IDelegationHierarchyDetails, ICredential, - DidUri, + Did as KiltDid, } from '@kiltprotocol/types' import { DataUtils, SDKErrors } from '@kiltprotocol/utils' import * as Did from '@kiltprotocol/did' import { DelegationNode } from '../delegation/DelegationNode.js' -import * as Credential from '../credential/index.js' /** - * An [[Attestation]] certifies a [[Claim]], sent by a claimer in the form of a [[Credential]]. [[Attestation]]s are **written on the blockchain** and are **revocable**. + * An {@link IAttestation | Attestation} certifies a {@link IClaim | Claim}, sent by a claimer in the form of a {@link ICredential | Credential}. Attestations are **written on the blockchain** and are **revocable**. * - * An [[Attestation]] can be queried from the chain. It's stored on-chain in a map: + * An Attestation can be queried from the chain. It's stored on-chain in a map: * * the key is the hash of the corresponding claim; - * * the value is a tuple ([[CType]] hash, account, id of the Delegation, and revoked flag). + * * the value is a tuple ({@link ICType | CType} hash, account, id of the Delegation, and revoked flag). * * @packageDocumentation */ /** - * Checks whether the input meets all the required criteria of an [[IAttestation]] object. + * Checks whether the input meets all the required criteria of an {@link IAttestation} object. * Throws on invalid input. * - * @param input The potentially only partial [[IAttestation]]. + * @param input The potentially only partial {@link IAttestation}. */ export function verifyDataStructure(input: IAttestation): void { if (!input.cTypeHash) { @@ -50,7 +49,7 @@ export function verifyDataStructure(input: IAttestation): void { if (!input.owner) { throw new SDKErrors.OwnerMissingError() } - Did.validateUri(input.owner, 'Did') + Did.validateDid(input.owner, 'Did') if (typeof input.revoked !== 'boolean') { throw new SDKErrors.RevokedTypeError() @@ -58,15 +57,15 @@ export function verifyDataStructure(input: IAttestation): void { } /** - * Builds a new instance of an [[Attestation]], from a complete set of input required for an attestation. + * Builds a new instance of an {@link IAttestation}, from a complete set of input required for an attestation. * * @param credential - The base credential for attestation. * @param attesterDid - The attester's DID, used to attest to the underlying claim. - * @returns A new [[Attestation]] object. + * @returns A new {@link Attestation} object. */ export function fromCredentialAndDid( credential: ICredential, - attesterDid: DidUri + attesterDid: KiltDid ): IAttestation { const attestation = { claimHash: credential.rootHash, @@ -82,8 +81,8 @@ export function fromCredentialAndDid( /** * Tries to fetch the delegationId and if successful fetch the rootId. * - * @param input - The ID of the Delegation stored in [[Attestation]] , or the whole Attestation object. - * @returns A promise of the affiliated [[DelegationNode]]. + * @param input - The ID of the Delegation stored in {@link IAttestation} , or the whole Attestation object. + * @returns A promise of the affiliated {@link IDelegationHierarchyDetails}. */ export async function getDelegationDetails( input: IAttestation['delegationId'] | IAttestation @@ -122,37 +121,3 @@ export function isIAttestation(input: unknown): input is IAttestation { } return true } - -/** - * Verifies whether the data of the given attestation matches the one from the corresponding credential. It is valid if: - * * the [[Credential]] object has valid data (see [[Credential.verifyDataIntegrity]]); - * and - * * the hash of the [[Credential]] object, and the hash of the [[Attestation]]. - * - * @param attestation - The attestation to verify. - * @param credential - The credential to verify against. - */ -export function verifyAgainstCredential( - attestation: IAttestation, - credential: ICredential -): void { - const credentialMismatch = - credential.claim.cTypeHash !== attestation.cTypeHash - const ctypeMismatch = credential.rootHash !== attestation.claimHash - const delegationMismatch = - credential.delegationId !== attestation.delegationId - if (credentialMismatch || ctypeMismatch || delegationMismatch) { - throw new SDKErrors.CredentialUnverifiableError( - `Some attributes of the on-chain attestation diverge from the credential: ${[ - 'cTypeHash', - 'delegationId', - 'claimHash', - ] - .filter( - (_, i) => [ctypeMismatch, delegationMismatch, credentialMismatch][i] - ) - .join(', ')}` - ) - } - Credential.verifyDataIntegrity(credential) -} diff --git a/packages/core/src/attestation/index.ts b/packages/credentials/src/attestation/index.ts similarity index 100% rename from packages/core/src/attestation/index.ts rename to packages/credentials/src/attestation/index.ts diff --git a/packages/core/src/ctype/CType.chain.ts b/packages/credentials/src/ctype/CType.chain.ts similarity index 95% rename from packages/core/src/ctype/CType.chain.ts rename to packages/credentials/src/ctype/CType.chain.ts index 94fff97e9..6171f1d8e 100644 --- a/packages/core/src/ctype/CType.chain.ts +++ b/packages/credentials/src/ctype/CType.chain.ts @@ -11,7 +11,7 @@ import type { AccountId, Call } from '@polkadot/types/interfaces' import type { BN } from '@polkadot/util' import type { CtypeCtypeEntry } from '@kiltprotocol/augment-api' -import type { CTypeHash, DidUri, ICType } from '@kiltprotocol/types' +import type { CTypeHash, Did as KiltDid, ICType } from '@kiltprotocol/types' import { Blockchain } from '@kiltprotocol/chain-helpers' import { ConfigService } from '@kiltprotocol/config' @@ -46,7 +46,7 @@ export function idToChain(cTypeId: ICType['$id']): CTypeHash { return idToHash(cTypeId) } -// Transform a blockchain-formatted CType input (represented as Bytes) into the original [[ICType]]. +// Transform a blockchain-formatted CType input (represented as Bytes) into the original {@link ICType}. // It throws if what was written on the chain was garbage. function cTypeInputFromChain(input: Bytes): ICType { try { @@ -76,7 +76,7 @@ export interface CTypeChainDetails { /** * The DID of the CType's creator. */ - creator: DidUri + creator: KiltDid /** * The block number in which the CType was created. */ @@ -145,9 +145,9 @@ function extractDidCallsFromBatchCall( /** * Resolves a CType identifier to the CType definition by fetching data from the block containing the transaction that registered the CType on chain. * - * @param cTypeId CType ID to use for the query. It is required to complement the information stored on the blockchain in a [[CtypeCtypeEntry]]. + * @param cTypeId CType ID to use for the query. It is required to complement the information stored on the blockchain in a {@link CtypeCtypeEntry}. * - * @returns The [[ICTypeDetails]] as the result of combining the on-chain information and the information present in the tx history. + * @returns The {@link ICTypeDetails} as the result of combining the on-chain information and the information present in the tx history. */ export async function fetchFromChain( cTypeId: ICType['$id'] diff --git a/packages/core/src/ctype/CType.metadata.spec.ts b/packages/credentials/src/ctype/CType.metadata.spec.ts similarity index 100% rename from packages/core/src/ctype/CType.metadata.spec.ts rename to packages/credentials/src/ctype/CType.metadata.spec.ts diff --git a/packages/core/src/ctype/CType.schemas.ts b/packages/credentials/src/ctype/CType.schemas.ts similarity index 100% rename from packages/core/src/ctype/CType.schemas.ts rename to packages/credentials/src/ctype/CType.schemas.ts diff --git a/packages/core/src/ctype/CType.spec.ts b/packages/credentials/src/ctype/CType.spec.ts similarity index 81% rename from packages/core/src/ctype/CType.spec.ts rename to packages/credentials/src/ctype/CType.spec.ts index 50fa5b9ce..31df3b86a 100644 --- a/packages/core/src/ctype/CType.spec.ts +++ b/packages/credentials/src/ctype/CType.spec.ts @@ -10,7 +10,6 @@ import type { ICType } from '@kiltprotocol/types' import { SDKErrors } from '@kiltprotocol/utils' import { ApiMocks } from '../../../../tests/testUtils' -import * as Claim from '../claim' import * as CType from './CType.js' import { CTypeModel, CTypeModelDraft01 } from './CType.schemas' @@ -22,7 +21,6 @@ const encodedAliceDid = ApiMocks.mockChainQueryReturn( 'cTYPEs', '4p6K4tpdZtY3rNqM2uorQmsS6d3woxtnWMHjtzGftHmDb41N' ) -const didAlice = 'did:kilt:4p6K4tpdZtY3rNqM2uorQmsS6d3woxtnWMHjtzGftHmDb41N' it('consistent CType id generation', () => { const ctypeV1 = CType.fromProperties('CtypeModel 1', { @@ -84,198 +82,178 @@ describe('value constraints', () => { it('constrains array length', () => { expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { labels: ['critical'], }, - didAlice + cTypeWithConstraints ) ).not.toThrow() expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { labels: ['important', 'critical'], }, - didAlice + cTypeWithConstraints ) ).not.toThrow() expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { labels: ['important', 'critical', 'essential'], }, - didAlice + cTypeWithConstraints ) ).not.toThrow() expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { labels: [], }, - didAlice + cTypeWithConstraints ) ).toThrow() expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { labels: ['important', 'vital', 'critical', 'essential'], }, - didAlice + cTypeWithConstraints ) ).toThrow() }) it('constrains array contents via enum', () => { expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { labels: ['important', 'critical', 'essential'], }, - didAlice + cTypeWithConstraints ) ).not.toThrow() expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { labels: ['niceToHave'], }, - didAlice + cTypeWithConstraints ) ).toThrow() expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { labels: [12], }, - didAlice + cTypeWithConstraints ) ).toThrow() }) it('constrains string length', () => { expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { w3n: 'juergen', }, - didAlice + cTypeWithConstraints ) ).not.toThrow() expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { w3n: 'jo', }, - didAlice + cTypeWithConstraints ) ).toThrow() expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { w3n: 'Peter der Große, Zar von Russland', }, - didAlice + cTypeWithConstraints ) ).toThrow() }) it('constrains numeric range', () => { expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { age: 22, }, - didAlice + cTypeWithConstraints ) ).not.toThrow() expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { age: -12, }, - didAlice + cTypeWithConstraints ) ).toThrow() expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { age: 1000, }, - didAlice + cTypeWithConstraints ) ).toThrow() }) it('constrains to numbers in enum', () => { expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { multiplier: 1.2, }, - didAlice + cTypeWithConstraints ) ).not.toThrow() expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { multiplier: 1, }, - didAlice + cTypeWithConstraints ) ).toThrow() expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { multiplier: 0.14, }, - didAlice + cTypeWithConstraints ) ).toThrow() }) it('constrains string to date format', () => { expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { date: '2022-01-22', }, - didAlice + cTypeWithConstraints ) ).not.toThrow() expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { date: '11:30', }, - didAlice + cTypeWithConstraints ) ).toThrow() expect(() => - Claim.fromCTypeAndClaimContents( - cTypeWithConstraints, + CType.verifyClaimAgainstSchema( { date: 'fried fish', }, - didAlice + cTypeWithConstraints ) ).toThrow() }) @@ -290,18 +268,13 @@ it('e2e', () => { name: 'Bob', } - const claim = Claim.fromCTypeAndClaimContents( - claimCtype, - claimContents, - didAlice - ) - expect(() => - CType.verifyClaimAgainstSchema(claim.contents, claimCtype) + CType.verifyClaimAgainstSchema(claimContents, claimCtype) ).not.toThrow() - claim.contents.name = 123 + // @ts-expect-error + claimContents.name = 123 expect(() => - CType.verifyClaimAgainstSchema(claim.contents, claimCtype) + CType.verifyClaimAgainstSchema(claimContents, claimCtype) ).toThrow() }) diff --git a/packages/core/src/ctype/CType.ts b/packages/credentials/src/ctype/CType.ts similarity index 91% rename from packages/core/src/ctype/CType.ts rename to packages/credentials/src/ctype/CType.ts index c6e080b58..6084dd51e 100644 --- a/packages/core/src/ctype/CType.ts +++ b/packages/credentials/src/ctype/CType.ts @@ -6,11 +6,11 @@ */ /** - * CTypes are the way the KILT protocol enables a Claimer or Attester or Verifier to create a [[Claim]] schema for creating specific credentials. + * CTypes are the way the KILT protocol enables a Claimer or Attester or Verifier to create a {@link Claim} schema for creating specific credentials. * - * * A CTYPE is a description of the [[Claim]] data structure, based on [JSON Schema](http://json-schema.org/). + * * A CTYPE is a description of the {@link Claim} data structure, based on {@link JSON Schema | http://json-schema.org/}. * * CTYPEs are published and stored by the creator and/or in an open storage registry. - * * Anyone can use a CTYPE to create a new [[Claim]]. + * * Anyone can use a CTYPE to create a new {@link Claim}. * * @packageDocumentation */ @@ -145,10 +145,10 @@ export function verifyObjectAgainstSchema( } /** - * Verifies the structure of the provided IClaim['contents'] with [[ICType]]. + * Verifies the structure of the provided IClaim['contents'] with {@link ICType}. * * @param claimContents IClaim['contents'] to be verified against the schema. - * @param schema ICType to be verified against the [[CTypeModel]]. + * @param schema ICType to be verified against the {@link CTypeModel}. * @param messages An array, which will be filled by schema errors. */ export function verifyClaimAgainstSchema( @@ -196,11 +196,11 @@ export function verifyDataStructure(input: ICType): void { } /** - * Validates an array of [[CType]]s against a [[Claim]]. + * Validates an array of {@link ICType}s against a {@link IClaim}. * - * @param cType - A [[CType]] that has nested [[CType]]s inside. - * @param nestedCTypes - An array of [[CType]] schemas. - * @param claimContents - The contents of a [[Claim]] to be validated. + * @param cType - A {@link ICType} that has nested {@link ICType}s inside. + * @param nestedCTypes - An array of {@link ICType} schemas. + * @param claimContents - The contents of a {@link IClaim} to be validated. * @param messages - Optional empty array. If passed, this receives all verification errors. */ export function verifyClaimAgainstNestedSchemas( @@ -216,7 +216,7 @@ export function verifyClaimAgainstNestedSchemas( /** * Checks a CTypeMetadata object. * - * @param metadata [[ICTypeMetadata]] that is to be instantiated. + * @param metadata A {@link ICTypeMetadata} that is to be instantiated. */ export function verifyCTypeMetadata(metadata: ICTypeMetadata): void { verifyObjectAgainstSchema(metadata, MetadataModel) @@ -228,7 +228,7 @@ const cTypeVersionToSchemaId = { } /** - * Creates a new [[ICType]] object from a set of atomic claims and a title. + * Creates a new {@link ICType} object from a set of atomic claims and a title. * The CType id will be automatically generated. * * @param title The new CType's title as a string. diff --git a/packages/credentials/src/ctype/CTypeLoader.ts b/packages/credentials/src/ctype/CTypeLoader.ts new file mode 100644 index 000000000..15aedffc0 --- /dev/null +++ b/packages/credentials/src/ctype/CTypeLoader.ts @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { ICType } from '@kiltprotocol/types' + +import { fetchFromChain } from './CType.chain.js' + +export type CTypeLoader = (id: ICType['$id']) => Promise + +const loadCType: CTypeLoader = async (id) => { + return (await fetchFromChain(id)).cType +} + +/** + * A factory for a CType loader that caches a CType definition once it has been loaded. + * Used in validating the credentialSubject of a {@link KiltCredentialV1} against the Claim Type referenced in its `type` field. + * + * @param initialCTypes An array of CTypes with which the cache is to be initialized. + * @returns A function that takes a CType id and looks up a CType definition in an internal cache, and if not found, tries to fetch it from the KILT blochchain. + */ +export function newCachingCTypeLoader( + initialCTypes: ICType[] = [] +): CTypeLoader { + const ctypes: Map = new Map() + + initialCTypes.forEach((ctype) => { + ctypes.set(ctype.$id, ctype) + }) + + async function getCType(id: ICType['$id']): Promise { + const ctype: ICType = ctypes.get(id) ?? (await loadCType(id)) + ctypes.set(ctype.$id, ctype) + return ctype + } + return getCType +} diff --git a/packages/core/src/ctype/Ctype.nested.spec.ts b/packages/credentials/src/ctype/Ctype.nested.spec.ts similarity index 89% rename from packages/core/src/ctype/Ctype.nested.spec.ts rename to packages/credentials/src/ctype/Ctype.nested.spec.ts index 95903447d..c493e9e4a 100644 --- a/packages/core/src/ctype/Ctype.nested.spec.ts +++ b/packages/credentials/src/ctype/Ctype.nested.spec.ts @@ -8,7 +8,6 @@ import type { ICType, IClaim, IClaimContents } from '@kiltprotocol/types' import { SDKErrors } from '@kiltprotocol/utils' import * as CType from './CType' -import * as Claim from '../claim' describe('Nested CTypes', () => { const didAlice = 'did:kilt:4p6K4tpdZtY3rNqM2uorQmsS6d3woxtnWMHjtzGftHmDb41N' @@ -98,19 +97,17 @@ describe('Nested CTypes', () => { }, }) - nestedData = Claim.fromNestedCTypeClaim( - nestedCType, - [passport, kyc], - claimContents, - didAlice - ) + nestedData = { + contents: claimContents, + owner: didAlice, + cTypeHash: CType.idToHash(nestedCType.$id), + } - nestedDeepData = Claim.fromNestedCTypeClaim( - deeplyNestedCType, - [passport, kyc], - claimDeepContents, - didAlice - ) + nestedDeepData = { + contents: claimDeepContents, + owner: didAlice, + cTypeHash: CType.idToHash(deeplyNestedCType.$id), + } }) it('verify json-schema validator', () => { @@ -124,11 +121,10 @@ describe('Nested CTypes', () => { claimContents.fullName = {} expect(() => - Claim.fromNestedCTypeClaim( + CType.verifyClaimAgainstNestedSchemas( nestedCType, [passport, kyc], - claimContents, - didAlice + claimContents ) ).toThrowError(SDKErrors.ObjectUnverifiableError) expect(() => @@ -154,11 +150,10 @@ describe('Nested CTypes', () => { expect(nestedDeepData).toBeDefined() expect(nestedDeepData).not.toBeNull() expect(() => - Claim.fromNestedCTypeClaim( + CType.verifyClaimAgainstNestedSchemas( deeplyNestedCType, [passport, kyc], - claimDeepContents, - didAlice + claimDeepContents ) ).toThrowError(SDKErrors.ObjectUnverifiableError) }) diff --git a/packages/core/src/ctype/index.ts b/packages/credentials/src/ctype/index.ts similarity index 90% rename from packages/core/src/ctype/index.ts rename to packages/credentials/src/ctype/index.ts index 1cb412b57..9ba5a57d5 100644 --- a/packages/core/src/ctype/index.ts +++ b/packages/credentials/src/ctype/index.ts @@ -8,3 +8,4 @@ export * from './CType.js' export * as Schemas from './CType.schemas.js' export * from './CType.chain.js' +export * from './CTypeLoader.js' diff --git a/packages/core/src/delegation/DelegationDecoder.ts b/packages/credentials/src/delegation/DelegationDecoder.ts similarity index 96% rename from packages/core/src/delegation/DelegationDecoder.ts rename to packages/credentials/src/delegation/DelegationDecoder.ts index ec39fc291..9ef7e9637 100644 --- a/packages/core/src/delegation/DelegationDecoder.ts +++ b/packages/credentials/src/delegation/DelegationDecoder.ts @@ -6,7 +6,7 @@ */ /** - * When a [[DelegationNode]] or a [[DelegationHierarchy]] is written on the blockchain, it is encoded. + * When a {@link DelegationNode} or a {@link DelegationHierarchy} is written on the blockchain, it is encoded. * DelegationDecoder helps to decode them when they're queried from the chain. * * The DelegationDecoder methods transform a Codec type into an object of a KILT type. diff --git a/packages/core/src/delegation/DelegationHierarchyDetails.chain.ts b/packages/credentials/src/delegation/DelegationHierarchyDetails.chain.ts similarity index 94% rename from packages/core/src/delegation/DelegationHierarchyDetails.chain.ts rename to packages/credentials/src/delegation/DelegationHierarchyDetails.chain.ts index 83be72956..b2c35bf5e 100644 --- a/packages/core/src/delegation/DelegationHierarchyDetails.chain.ts +++ b/packages/credentials/src/delegation/DelegationHierarchyDetails.chain.ts @@ -18,7 +18,7 @@ import { delegationHierarchyDetailsFromChain } from './DelegationDecoder.js' * Fetch a delegation hierarchy node from the blockchain given its identifier. * * @param rootId The root delegation node ID to fetch. - * @returns The retrieved [[IDelegationHierarchyDetails]]. + * @returns The retrieved {@link IDelegationHierarchyDetails}. */ export async function fetch( rootId: IDelegationNode['id'] diff --git a/packages/core/src/delegation/DelegationNode.chain.ts b/packages/credentials/src/delegation/DelegationNode.chain.ts similarity index 95% rename from packages/core/src/delegation/DelegationNode.chain.ts rename to packages/credentials/src/delegation/DelegationNode.chain.ts index 3c5bffdd2..c66226c83 100644 --- a/packages/core/src/delegation/DelegationNode.chain.ts +++ b/packages/credentials/src/delegation/DelegationNode.chain.ts @@ -49,7 +49,7 @@ export function addDelegationToChainArgs( * Fetch a delegation node from the blockchain given its identifier. * * @param delegationId The delegation node ID to fetch. - * @returns The retrieved [[DelegationNode]]. + * @returns The retrieved {@link DelegationNode}. */ export async function fetch( delegationId: IDelegationNode['id'] @@ -69,7 +69,7 @@ export async function fetch( * Query the blockchain to retrieve the number of **direct** children of a given delegation node. * * @param delegationNode The delegation node to perform the lookup for. - * @returns A list of [[DelegationNode]] containing all the direct children of the provided node. + * @returns A list of {@link DelegationNode} containing all the direct children of the provided node. */ export async function getChildren( delegationNode: DelegationNode diff --git a/packages/core/src/delegation/DelegationNode.spec.ts b/packages/credentials/src/delegation/DelegationNode.spec.ts similarity index 99% rename from packages/core/src/delegation/DelegationNode.spec.ts rename to packages/credentials/src/delegation/DelegationNode.spec.ts index dbf3a84e8..a56d97c55 100644 --- a/packages/core/src/delegation/DelegationNode.spec.ts +++ b/packages/credentials/src/delegation/DelegationNode.spec.ts @@ -10,7 +10,7 @@ import { encodeAddress } from '@polkadot/keyring' import { ConfigService } from '@kiltprotocol/config' import { CTypeHash, - DidUri, + Did, IDelegationHierarchyDetails, IDelegationNode, Permission, @@ -54,7 +54,7 @@ describe('DelegationNode', () => { let hierarchyId: string let parentId: string let hashList: string[] - let addresses: DidUri[] + let addresses: Did[] beforeAll(() => { jest @@ -85,7 +85,7 @@ describe('DelegationNode', () => { .map((_val, index) => Crypto.hashStr(`${index + 1}`)) addresses = Array(10002) .fill('') - .map( + .map( (_val, index) => `did:kilt:${encodeAddress(Crypto.hash(`${index}`, 256), ss58Format)}` ) @@ -448,7 +448,7 @@ describe('DelegationNode', () => { }) it('returns null if looking for non-existent account', async () => { - const noOnesAddress: DidUri = `did:kilt:${encodeAddress( + const noOnesAddress: Did = `did:kilt:${encodeAddress( Crypto.hash('-1', 256), ss58Format )}` diff --git a/packages/core/src/delegation/DelegationNode.ts b/packages/credentials/src/delegation/DelegationNode.ts similarity index 85% rename from packages/core/src/delegation/DelegationNode.ts rename to packages/credentials/src/delegation/DelegationNode.ts index 60d50a96d..5517251f7 100644 --- a/packages/core/src/delegation/DelegationNode.ts +++ b/packages/credentials/src/delegation/DelegationNode.ts @@ -8,15 +8,14 @@ import type { CTypeHash, DidDocument, - DidUri, - DidVerificationKey, + Did as KiltDid, IAttestation, IDelegationHierarchyDetails, IDelegationNode, - SignCallback, + SignerInterface, SubmittableExtrinsic, } from '@kiltprotocol/types' -import { Crypto, SDKErrors, UUID } from '@kiltprotocol/utils' +import { Crypto, SDKErrors, Signers, UUID } from '@kiltprotocol/utils' import { ConfigService } from '@kiltprotocol/config' import * as Did from '@kiltprotocol/did' @@ -58,14 +57,14 @@ export class DelegationNode implements IDelegationNode { public readonly hierarchyId: IDelegationNode['hierarchyId'] public readonly parentId?: IDelegationNode['parentId'] private childrenIdentifiers: Array = [] - public readonly account: DidUri + public readonly account: KiltDid public readonly permissions: IDelegationNode['permissions'] private hierarchyDetails?: IDelegationHierarchyDetails public readonly revoked: boolean // eslint-disable-next-line jsdoc/require-param /** - * Creates a new [DelegationNode] from an [IDelegationNode]. + * Creates a new {@link DelegationNode} from an {@link IDelegationNode}. * */ public constructor({ @@ -92,14 +91,14 @@ export class DelegationNode implements IDelegationNode { } /** - * Builds a new [DelegationNode] representing a regular delegation node ready to be submitted to the chain for creation. + * Builds a new {@link DelegationNode} representing a regular delegation node ready to be submitted to the chain for creation. * - * @param input - An partial [IDelegationNode] input object. + * @param input - An partial {@link IDelegationNode} input object. * @param input.hierarchyId - The delegation hierarchy under which to store the node. * @param input.parentId - The parent node under which to store the node. * @param input.account - The owner (i.e., delegate) of this delegation. * @param input.permissions - The set of permissions associated with this delegation node. - * @returns A new [DelegationNode] with a randomly generated id. + * @returns A new {@link DelegationNode} with a randomly generated id. */ public static newNode({ hierarchyId, @@ -119,13 +118,13 @@ export class DelegationNode implements IDelegationNode { } /** - * Builds a new [DelegationNode] representing a root delegation node ready to be submitted to the chain for creation. + * Builds a new {@link DelegationNode} representing a root delegation node ready to be submitted to the chain for creation. * * @param input - An input object. * @param input.account - The address of this delegation (and of the whole hierarchy under it). * @param input.permissions - The set of permissions associated with this delegation node. * @param input.cTypeHash - The cTypeHash associated with the entire hierarchy. - * @returns A new [DelegationNode] with a randomly generated id. + * @returns A new {@link DelegationNode} with a randomly generated id. */ public static newRoot({ account, @@ -163,7 +162,7 @@ export class DelegationNode implements IDelegationNode { /** * Fetches the details of the hierarchy this delegation node belongs to. * - * @returns Promise containing the [[IDelegationHierarchyDetails]] of this delegation node. + * @returns Promise containing the {@link IDelegationHierarchyDetails} of this delegation node. */ public async getHierarchyDetails(): Promise { if (!this.hierarchyDetails) { @@ -175,7 +174,7 @@ export class DelegationNode implements IDelegationNode { /** * Fetches the parent node of this delegation node. * - * @returns Promise containing the parent as [[DelegationNode]] or [null]. + * @returns Promise containing the parent as {@link DelegationNode} or [null]. */ public async getParent(): Promise { try { @@ -189,7 +188,7 @@ export class DelegationNode implements IDelegationNode { /** * Fetches the children nodes of this delegation node. * - * @returns Promise containing the children as an array of [[DelegationNode]], which is empty if there are no children. + * @returns Promise containing the children as an array of {@link DelegationNode}, which is empty if there are no children. */ public async getChildren(): Promise { try { @@ -259,40 +258,44 @@ export class DelegationNode implements IDelegationNode { * This is required to anchor the delegation node on chain in order to enforce the delegate's consent. * * @param delegateDid The DID of the delegate. - * @param sign The callback to sign the delegation creation details for the delegate. + * @param signers An array of signer interfaces, one of which will be selected to sign the delegation creation details for the delegate. * @returns The DID signature over the delegation **as a hex string**. */ public async delegateSign( delegateDid: DidDocument, - sign: SignCallback + signers: readonly SignerInterface[] ): Promise { - const delegateSignature = await sign({ + const { byDid, verifiableOnChain } = Signers.select + const signer = Signers.selectSigner( + signers, + verifiableOnChain(), + byDid(delegateDid, { + verificationRelationship: 'authentication', + }) + ) + if (!signer) { + throw new SDKErrors.NoSuitableSignerError(undefined, { + signerRequirements: { + did: delegateDid.id, + verificationRelationship: 'authentication', + algorithm: Signers.DID_PALLET_SUPPORTED_ALGORITHMS, + }, + }) + } + const signature = await signer.sign({ data: this.generateHash(), - did: delegateDid.uri, - keyRelationship: 'authentication', }) - const { fragment } = Did.parse(delegateSignature.keyUri) - if (!fragment) { - throw new SDKErrors.DidError( - `DID key uri "${delegateSignature.keyUri}" couldn't be parsed` - ) - } - const key = Did.getKey(delegateDid, fragment) - if (!key) { - throw new SDKErrors.DidError( - `Key with fragment "${fragment}" was not found on DID: "${delegateDid.uri}"` - ) - } - return Did.didSignatureToChain( - key as DidVerificationKey, - delegateSignature.signature - ) + + return Did.didSignatureToChain({ + algorithm: signer.algorithm, + signature, + }) } /** * Synchronise the delegation node state with the latest state as stored on the blockchain. * - * @returns An updated instance of the same [DelegationNode] containing the up-to-date state fetched from the chain. + * @returns An updated instance of the same {@link DelegationNode} containing the up-to-date state fetched from the chain. */ public async getLatestState(): Promise { return fetch(this.id) @@ -346,7 +349,7 @@ export class DelegationNode implements IDelegationNode { * @returns An object containing a `node` owned by the identity if it is delegating, plus the number of `steps` traversed. `steps` is 0 if the DID is owner of the current node. */ public async findAncestorOwnedBy( - dids: DidUri | DidUri[] + dids: KiltDid | KiltDid[] ): Promise<{ steps: number; node: DelegationNode | null }> { const acceptedDids = Array.isArray(dids) ? dids : [dids] if (acceptedDids.includes(this.account)) { @@ -399,7 +402,7 @@ export class DelegationNode implements IDelegationNode { * @param did The address of the identity used to revoke the delegation. * @returns Promise containing an unsigned SubmittableExtrinsic. */ - public async getRevokeTx(did: DidUri): Promise { + public async getRevokeTx(did: KiltDid): Promise { const { steps, node } = await this.findAncestorOwnedBy(did) if (!node) { throw new SDKErrors.UnauthorizedError( @@ -443,10 +446,10 @@ export class DelegationNode implements IDelegationNode { } /** - * Queries the delegation node with its [delegationId]. + * Queries the delegation node with its {@link delegationId}. * * @param delegationId The unique identifier of the desired delegation. - * @returns Promise containing the [[DelegationNode]]. + * @returns Promise containing the {@link DelegationNode}. */ public static async fetch( delegationId: IDelegationNode['id'] diff --git a/packages/core/src/delegation/DelegationNode.utils.ts b/packages/credentials/src/delegation/DelegationNode.utils.ts similarity index 97% rename from packages/core/src/delegation/DelegationNode.utils.ts rename to packages/credentials/src/delegation/DelegationNode.utils.ts index 3c70e3bc6..b34a3a764 100644 --- a/packages/core/src/delegation/DelegationNode.utils.ts +++ b/packages/credentials/src/delegation/DelegationNode.utils.ts @@ -5,7 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { DidUri, IAttestation, IDelegationNode } from '@kiltprotocol/types' +import type { Did, IAttestation, IDelegationNode } from '@kiltprotocol/types' import { SDKErrors } from '@kiltprotocol/utils' import { isHex } from '@polkadot/util' import { DelegationNode } from './DelegationNode.js' @@ -39,7 +39,7 @@ export function permissionsAsBitset(delegation: IDelegationNode): Uint8Array { * @returns 0 if `attester` is the owner of `attestation`, the number of delegation nodes traversed otherwise. */ export async function countNodeDepth( - attester: DidUri, + attester: Did, attestation: IAttestation ): Promise { let delegationTreeTraversalSteps = 0 diff --git a/packages/core/src/delegation/index.ts b/packages/credentials/src/delegation/index.ts similarity index 100% rename from packages/core/src/delegation/index.ts rename to packages/credentials/src/delegation/index.ts diff --git a/packages/credentials/src/holder.ts b/packages/credentials/src/holder.ts new file mode 100644 index 000000000..08ba9c4e5 --- /dev/null +++ b/packages/credentials/src/holder.ts @@ -0,0 +1,198 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import jsonpointer from 'json-pointer' +import type { CryptoSuite } from '@kiltprotocol/jcs-data-integrity-proofs-common' + +import { Did } from '@kiltprotocol/types' +import { SDKErrors } from '@kiltprotocol/utils' + +import { KiltAttestationProofV1, KiltCredentialV1 } from './V1/index.js' +import { VerifiableCredential, VerifiablePresentation } from './V1/types.js' +import { HolderOptions } from './interfaces.js' +import * as Presentation from './presentation/index.js' +import * as DataIntegrity from './proofs/DataIntegrity.js' +import { getProof } from './proofs/utils.js' + +function pointerToAttributeName( + credential: VerifiableCredential, + pointer: string, + throwIfMandatory = false +): string { + const parsed = jsonpointer.parse(pointer) + if (jsonpointer.has(credential, parsed) !== true) { + throw new SDKErrors.SDKError(`No value at pointer ${pointer}`) + } + const [topLevel, property, ...rest] = parsed + if ( + topLevel !== 'credentialSubject' || + typeof property === 'undefined' || + rest.length !== 0 + ) { + throw new SDKErrors.SDKError( + `Selective disclosure not enabled for attribute ${pointer}. Pointers should follow the pattern '/credentialSubject/{attribute}' as for this proof type, selective disclosure is enabled only for top-level properties of 'credentialSubject'.` + ) + } + if (property === 'id' || property === '@context') { + if (throwIfMandatory) { + throw new SDKErrors.SDKError( + `Mandatory attribute cannot be hidden (${pointer})` + ) + } + return property + } + return String(property) +} + +/** + * Allows creating derivative proofs from a Verifiable Credential, for the purpose of disclosing only a subset of the credential's claims to a verifier. + * + * @param credential A Verifiable Credential containing a proof. + * @param proofOptions Options for creating the derived proof. + * @param proofOptions.disclose Allows selecting which claims/attributes in the credential should be disclosed, hiding others. + * @param proofOptions.disclose.only An array of credentialPath expressions selecting attributes to be disclosed. + * All other (non-mandatory) attributes that can be hidden will be hidden. + * Takes precedence over `allBut`. + * @param proofOptions.disclose.allBut An array of credentialPath expressions selecting attributes to be hidden. + * This means that all other properties are being revealed. + * Selecting mandatory properties will result in an error. + * It is ignored if `only` is set. + * @returns A copy of the original credential and proof, altered according to the derivation rules and `proofOptions`. + */ +export async function deriveProof( + credential: VerifiableCredential, + // TODO: do we need a holder interface here at some point? Would be required if some holder secret would become necessary to create a derived proof, e.g., a link secret. + proofOptions?: { + disclose?: { + allBut?: string[] + only?: string[] + } + } +): Promise { + const proof = getProof(credential) + switch (proof.type) { + case KiltAttestationProofV1.PROOF_TYPE: { + KiltCredentialV1.validateStructure( + credential as KiltCredentialV1.Interface + ) + + const { allBut, only } = proofOptions?.disclose ?? {} + let discloseProps: string[] = [] + if (only) { + const attributes = new Set() + only.forEach((path) => { + attributes.add(pointerToAttributeName(credential, path, false)) + }) + discloseProps = Array.from(attributes) + } else if (allBut) { + const attributes = new Set( + Object.keys(credential.credentialSubject) + ) + allBut.forEach((path) => { + attributes.delete(pointerToAttributeName(credential, path, true)) + }) + discloseProps = Array.from(attributes) + } else { + return { ...credential } + } + const derived = KiltAttestationProofV1.applySelectiveDisclosure( + credential as KiltCredentialV1.Interface, + proof as KiltAttestationProofV1.Interface, + discloseProps + ) + return { ...derived.credential, proof: derived.proof } + } + default: + throw new SDKErrors.SDKError( + `Only proof type ${KiltAttestationProofV1.PROOF_TYPE} is currently supported.` + ) + } +} + +/** + * Creates a Verifiable Presentation from one or more credentials and adds a proof for the purpose of holder authentication. + * To that end, the presentation can be scoped to a specific transaction, timeframe, purpose, or verifier, by means of multiple mechanisms. + * + * @param credentials Array of one or more Verifiable Credentials to be included in the presentation. + * @param holder Interfaces for interacting with the holder identity for the purpose of generating a presentation proof. + * @param holder.did The Decentralized Identifier (DID) of the holder. + * @param holder.didDocument The DID Document of the holder. If omitted, the holder DID will be resolved internally to retrieve the document. + * @param holder.signers An array of signer interfaces, each allowing to request signatures made with a key associated with the holder DID Document. + * The function will select the first signer that matches requirements around signature algorithm and relationship of the key to the DID as given by the DID Document. + * @param presentationOptions Object holding optional arguments for scoping the presentation. + * @param presentationOptions.validFrom A Date or date-time string indicating the earliest point in time where the presentation becomes valid. + * Represented as `issuanceDate` on the presentation. + * Defaults to `proofOptions.now`. + * @param presentationOptions.validUntil A Date or date-time string indicating when the presentation is no longer valid. + * Represented as `expirationDate` on the presentation. + * @param presentationOptions.verifier Identifier (DID) of the verifier to prevent unauthorized re-use of the presentation. + * @param proofOptions Object holding optional arguments for creating and scoping the presentation proof. + * @param proofOptions.proofPurpose Controls the `proofPurpose` property and consequently which verificationMethods can be used for signing. + * @param proofOptions.proofType Controls the type of proof to be created for the presentation. + * Currently, this function only produces {@link DataIntegrity.PROOF_TYPE DataIntegrityProof} type proofs; + * Any other values will be mapped to a known algorithm or cryptosuite for use with this proof type, thus allowing to control the signature algorithm to be used. + * @param proofOptions.challenge A challenge supplied by a verifier in a challenge-response protocol, which allows verifiers to assure signature freshness, preventing unauthorized re-use. + * @param proofOptions.domain A domain string to be included in the proof. + * This plays a role similar to the `verifier` option, but is not restricted to DIDs. + * This could, for example, be the domain of a web-application requesting credential presentation. + * @param proofOptions.now Allows manipulating the current date and time for the purpose of presentation & proof generation. + * Defaults to the current date and time. + * @returns A holder-signed presentation. + */ +export async function createPresentation( + credentials: VerifiableCredential[], + holder: HolderOptions, + presentationOptions: { + validFrom?: Date + validUntil?: Date + verifier?: Did + } = {}, + proofOptions: { + proofPurpose?: string + proofType?: string + challenge?: string + domain?: string + now?: Date + } = {} +): Promise { + const { did, didDocument, signers } = holder + const { validFrom, validUntil, verifier } = presentationOptions + const { proofPurpose, proofType, challenge, domain, now } = proofOptions + + let presentation = await Presentation.create({ + credentials, + holder: did, + validFrom: validFrom ?? now, + validUntil, + verifier, + }) + + let cryptosuites: Array> | undefined + if (proofType) { + const suite = DataIntegrity.getCryptosuiteByNameOrAlgorithm(proofType) + if (!suite) { + throw new Error( + `could not match proofType ${proofType} to a known proof type or cryptosuite` + ) + } + cryptosuites = [suite] + } + + presentation = await DataIntegrity.signWithDid({ + document: presentation, + signerDid: didDocument ?? did, + signers, + proofPurpose, + challenge, + domain, + created: now, + expires: validUntil, + cryptosuites, + }) + + return presentation +} diff --git a/packages/core/src/index.ts b/packages/credentials/src/index.ts similarity index 56% rename from packages/core/src/index.ts rename to packages/credentials/src/index.ts index 8eec5151d..eb92c4008 100644 --- a/packages/core/src/index.ts +++ b/packages/credentials/src/index.ts @@ -6,15 +6,16 @@ */ /** - * @module @kiltprotocol/core + * @module @kiltprotocol/credentials */ export * as Attestation from './attestation/index.js' -export * as Credential from './credential/index.js' -export { BalanceUtils } from './balance/index.js' -export * as Claim from './claim/index.js' +export * from './V1/index.js' +export * as Presentation from './presentation/index.js' export * as CType from './ctype/index.js' export { DelegationNode, DelegationNodeUtils } from './delegation/index.js' +export * as DataIntegrity from './proofs/DataIntegrity.js' -export { connect, disconnect, init } from './kilt/index.js' -export { SDKErrors } from '@kiltprotocol/utils' +export * as Issuer from './issuer.js' +export * as Holder from './holder.js' +export * as Verifier from './verifier.js' diff --git a/packages/credentials/src/interfaces.ts b/packages/credentials/src/interfaces.ts new file mode 100644 index 000000000..864d4eda9 --- /dev/null +++ b/packages/credentials/src/interfaces.ts @@ -0,0 +1,46 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import type { SignerInterface } from '@kiltprotocol/jcs-data-integrity-proofs-common' +import type { Did, DidDocument } from '@kiltprotocol/types' +import type { Proof, VerifiableCredential } from './V1/types' +import type { IssueOpts } from './V1/KiltAttestationProofV1' + +export type SecuredDocument = { proof: Proof[] | Proof } + +export interface HolderOptions { + did: Did + didDocument?: DidDocument + signers: SignerInterface[] +} + +export type IssuerOptions = HolderOptions & IssueOpts + +export interface VerificationResult { + verified: boolean + error?: Error[] +} + +export interface CredentialStatusResult extends VerificationResult { + status?: string +} + +interface ProofSetResult extends VerificationResult { + proofResults?: Array +} + +export interface VerifyCredentialResult extends ProofSetResult { + statusResult?: CredentialStatusResult +} + +export interface VerifyPresentationResult extends ProofSetResult { + credentialResults?: Array< + VerifyCredentialResult & { + credential: VerifiableCredential + } + > +} diff --git a/packages/credentials/src/issuer.ts b/packages/credentials/src/issuer.ts new file mode 100644 index 000000000..9e13479ad --- /dev/null +++ b/packages/credentials/src/issuer.ts @@ -0,0 +1,141 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import type { Did, ICType, IClaimContents } from '@kiltprotocol/types' + +import { SDKErrors } from '@kiltprotocol/utils' +import { KiltAttestationProofV1, KiltCredentialV1 } from './V1/index.js' +import type { UnsignedVc, VerifiableCredential } from './V1/types.js' +import type { CTypeLoader } from './ctype/index.js' +import type { IssuerOptions } from './interfaces.js' + +/** + * Creates a new credential document as a basis for issuing a credential. + * This document can be shown to users as a preview or be extended with additional properties before moving on to the second step of credential issuance: + * Adding a `proof` to the document using the {@link issue} function to make the credential verifiable. + * + * @param arguments Object holding all arguments for credential creation. + * @param arguments.type A type string identifying the (sub-)type of Verifiable Credential to be created. + * This is added to the `type` field on the credential and determines the `credentialSchema` as well. + * Defaults to the type {@link KiltCredentialV1.CREDENTIAL_TYPE KiltCredentialV1} which, for the time being, is also the only type supported. + * @param arguments.issuer The Decentralized Identifier (DID) of the identity acting as the authority issuing this credential. + * @param arguments.subject The DID identifying the subject of the credential, about which `claims` are made. + * Sets the `credentialSubject.id` property of the credential. + * @param arguments.claims An object containing key-value pairs that represent claims made about the subject. + * These key-value pairs are added to the `credentialSubject` property of the credential. + * @param arguments.cType CTypes are special credential subtypes that are defined by a schema describing claims that may be made about the subject and are registered on the Kilt blockchain. + * Each Kilt credential is based on exactly one of these subtypes. This argument is therefore mandatory and expects the schema definition of a CType. + * @param arguments.cTypeDefinitions Some CTypes are themselves composed of definitions taken from other CTypes; in that case, these definitions need to be supplied here. + * Alternatively, you can set a {@link CTypeLoader} function that takes care of fetching all required definitions. + * @returns A (potentially only partial) credential that is yet to be finalized and made verifiable with a proof. + */ +export async function createCredential({ + type, + issuer, + subject, + claims = {}, + cType, + cTypeDefinitions, +}: { + type?: string + issuer: Did + subject: Did + claims?: Record + cType: ICType + cTypeDefinitions?: ICType[] | CTypeLoader +}): Promise { + switch (type) { + case undefined: + case KiltCredentialV1.CREDENTIAL_TYPE: { + const credential = KiltCredentialV1.fromInput({ + issuer, + subject, + cType: cType.$id, + claims: claims as IClaimContents, + }) + + let loadCTypes: CTypeLoader | false = false + if (Array.isArray(cTypeDefinitions)) { + const ctypeMap = new Map() + cTypeDefinitions.forEach((ct) => ctypeMap.set(ct.$id, ct)) + loadCTypes = (id) => { + const definition = ctypeMap.get(id) + if (typeof definition !== 'undefined') { + return Promise.resolve(definition) + } + return Promise.reject(new SDKErrors.CTypeError(`unknown CType ${id}`)) + } + } else if (typeof cTypeDefinitions === 'function') { + loadCTypes = cTypeDefinitions + } + + await KiltCredentialV1.validateSubject(credential, { + cTypes: [cType], + loadCTypes, + }) + + return credential + } + default: + throw new SDKErrors.SDKError( + `Only credential type ${KiltCredentialV1.CREDENTIAL_TYPE} is currently supported.` + ) + } +} + +/** + * Issues a Verifiable Credential from on the input document by attaching a proof. Edits to the document may be made depending on the proof type. + * + * @param credential A credential document as returned by {@link createCredential}. + * @param issuer Interfaces for interacting with the issuer identity for the purpose of generating a proof. + * @param issuer.did The Decentralized Identifier (DID) of the issuer. + * @param issuer.didDocument The DID Document of the issuer. If omitted, the issuer DID will be resolved internally to retrieve the document. + * @param issuer.signers An array of signer interfaces, each allowing to request signatures made with a key associated with the issuer DID Document. + * The function will select the first signer that matches requirements around signature algorithm and relationship of the key to the DID as given by the DID Document. + * @param issuer.submitterAccount Some proof types require making transactions to effect state changes on the KILT blockchain. + * The blockchain account whose address is specified here will be used to cover all transaction fees and deposits due for this operation. + * As transactions to the blockchain need to be signed, `signers` is expected to contain a signer interface where the `id` matches this address. + * @param issuer.authorizeTx Optional. Allows customizing the way state changes on the KILT blockchain are authorized with a signature made with one of the issuer's DID keys. + * @param issuer.submitTx Optional. Allows customizing the way transactions are signed by the submitter account and submitted to the KILT blockchain. + * If you are using a service that helps you submit and pay for transactions, this is your point of integration to it. + * @param proofOptions Options that control proof generation. + * @param proofOptions.proofType The type of proof to be created. + * Defaults to {@link KiltAttestationProofV1.PROOF_TYPE KiltAttestationProofV1} which, as of now, is the only type suppported. + * @param proofOptions.proofPurpose Controls which relationship to the DID is expected of the key selected for creating the proof. + * Defaults to `assertionMethod`, which is also the only value supported for {@link KiltAttestationProofV1.PROOF_TYPE KiltAttestationProofV1} proofs. + * @param proofOptions.now Allows manipulating the current date and time for the purpose of proof generation. + * As of now, this has no effect though. + */ +export async function issue( + credential: UnsignedVc, + issuer: IssuerOptions, + proofOptions: { + proofType?: string + proofPurpose?: string + now?: Date // given that this has no effect, should I remove it for now? + } = {} +): Promise { + const { proofType } = proofOptions + switch (proofType) { + case undefined: + case KiltAttestationProofV1.PROOF_TYPE: { + const { didDocument, did } = issuer + + const cred = await KiltAttestationProofV1.issue( + credential as KiltCredentialV1.Interface, + didDocument ?? did, + issuer + ) + + return cred + } + default: + throw new SDKErrors.SDKError( + `Only proof type ${KiltAttestationProofV1.PROOF_TYPE} is currently supported.` + ) + } +} diff --git a/packages/credentials/src/presentation/Presentation.spec.ts b/packages/credentials/src/presentation/Presentation.spec.ts new file mode 100644 index 000000000..466a30c1e --- /dev/null +++ b/packages/credentials/src/presentation/Presentation.spec.ts @@ -0,0 +1,212 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { createSigner, cryptosuite } from '@kiltprotocol/sr25519-jcs-2023' +import { randomAsHex, sr25519PairFromSeed } from '@polkadot/util-crypto' + +import { didKeyToVerificationMethod, resolve } from '@kiltprotocol/did' +import type { Did } from '@kiltprotocol/types' + +import { createProof, verifyProof, signWithDid } from '../proofs/DataIntegrity' +import { + create as createPresentation, + verifyPresentationProof, +} from './Presentation' +import { VerifyPresentationResult } from '../interfaces' + +const credential = { + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://www.kilt.io/contexts/credentials', + ], + type: ['VerifiableCredential', 'KiltCredential2020'], + id: 'kilt:cred:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad', + credentialSubject: { + '@context': { + '@vocab': + 'kilt:ctype:0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf#', + }, + id: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + birthday: '1991-01-01', + name: 'Kurt', + premium: true, + }, + issuer: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + issuanceDate: '2021-03-25T10:20:44.000Z', + nonTransferable: true, + proof: [ + { + type: 'KILTAttestation2020', + proofPurpose: 'assertionMethod', + attester: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + }, + ], +} as any + +const seed = new Uint8Array(32).fill(0) + +it('creates a presentation', async () => { + const presentation = await createPresentation({ + credentials: [credential], + holder: credential.credentialSubject.id, + }) + expect(presentation).toHaveProperty( + 'type', + expect.arrayContaining(['VerifiablePresentation']) + ) +}) + +it('fails if subject !== holder', async () => { + const randomDid = 'did:kilt:4qqbHjqZ45gLCjsoNS3PXECZpYZqHZuoGyWJZm1Jz8YFhMoo' + await expect( + createPresentation({ credentials: [credential], holder: randomDid }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"The credential with id kilt:cred:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad is non-transferable and cannot be presented by the identity did:kilt:4qqbHjqZ45gLCjsoNS3PXECZpYZqHZuoGyWJZm1Jz8YFhMoo"` + ) +}) + +it('signs', async () => { + const presentation = await createPresentation({ + credentials: [credential], + holder: credential.credentialSubject.id, + }) + const signer = await createSigner({ + seed, + id: `${credential.credentialSubject.id}#key-1`, + }) + const signed = await createProof(presentation, cryptosuite, signer) + expect(signed).toHaveProperty( + 'proof', + expect.objectContaining({ type: 'DataIntegrityProof' }) + ) +}) + +jest.mock('@kiltprotocol/did', () => { + return { + ...jest.requireActual('@kiltprotocol/did'), + resolve: jest.fn(), + } +}) + +describe('verification', () => { + const signerDid = credential.credentialSubject.id as Did + const keyId = `#key-1` + + beforeAll(async () => { + const { publicKey } = sr25519PairFromSeed(seed) + + jest.mocked(resolve).mockImplementation(async (did: string) => { + if (did.startsWith(signerDid)) { + return { + didDocumentMetadata: {}, + didResolutionMetadata: {}, + didDocument: { + id: signerDid, + verificationMethod: [ + didKeyToVerificationMethod(signerDid, keyId, { + publicKey, + keyType: 'sr25519', + }), + ], + assertionMethod: [keyId], + authentication: [keyId], + }, + } + } + return { + didResolutionMetadata: { error: 'notFound' }, + didDocumentMetadata: {}, + } + }) + }) + it('verifies a signature', async () => { + const presentation = await createPresentation({ + credentials: [credential], + holder: credential.credentialSubject.id, + }) + + const signer = await createSigner({ + seed, + id: signerDid + keyId, + }) + const signed = await createProof(presentation, cryptosuite, signer, { + proofPurpose: 'assertionMethod', + }) + await expect( + verifyProof(signed, signed.proof, { + cryptosuites: [cryptosuite], + expectedProofPurpose: 'assertionMethod', + }) + ).resolves.toBe(true) + }) + + it('verifies a presentation proof', async () => { + const signer = await createSigner({ + seed, + id: signerDid + keyId, + }) + const challenge = randomAsHex() + let presentation = await createPresentation({ + credentials: [credential], + holder: signerDid, + verifier: 'did:web:example.com', + validFrom: new Date(), + validUntil: new Date(Date.now() + 10_000), + }) + + presentation = await signWithDid({ + signerDid, + document: presentation, + signers: [signer], + challenge, + }) + + const result = await verifyPresentationProof(presentation, { + verifier: 'did:web:example.com', + challenge, + }) + + expect(result).not.toHaveProperty('error') + expect(result).toMatchObject({ + verified: true, + proofResults: [expect.objectContaining({ verified: true })], + }) + + await expect( + verifyPresentationProof(presentation, { + verifier: 'did:web:example.de', + challenge, + }) + ).resolves.toMatchObject({ + verified: false, + error: expect.arrayContaining([expect.any(Error)]), + }) + + await expect( + verifyPresentationProof(presentation, { + verifier: 'did:web:example.com', + challenge: `${challenge}00`, + }) + ).resolves.toMatchObject({ + verified: false, + proofResults: [expect.objectContaining({ verified: false })], + error: expect.arrayContaining([expect.any(Error)]), + }) + + presentation.expirationDate = new Date(2999, 1, 1).toISOString() + await expect( + verifyPresentationProof(presentation, { + verifier: 'did:web:example.com', + challenge, + }) + ).resolves.toMatchObject({ + verified: false, + proofResults: [expect.objectContaining({ verified: false })], + error: expect.arrayContaining([expect.any(Error)]), + }) + }) +}) diff --git a/packages/credentials/src/presentation/Presentation.ts b/packages/credentials/src/presentation/Presentation.ts new file mode 100644 index 000000000..96173ceb7 --- /dev/null +++ b/packages/credentials/src/presentation/Presentation.ts @@ -0,0 +1,317 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { cryptosuite as eddsaSuite } from '@kiltprotocol/eddsa-jcs-2022' +import { cryptosuite as ecdsaSuite } from '@kiltprotocol/es256k-jcs-2023' +import { cryptosuite as sr25519Suite } from '@kiltprotocol/sr25519-jcs-2023' + +import type { CryptoSuite } from '@kiltprotocol/jcs-data-integrity-proofs-common' + +import type { Did } from '@kiltprotocol/types' +import { JsonSchema, SDKErrors } from '@kiltprotocol/utils' + +import { resolve } from '@kiltprotocol/did' +import { + W3C_CREDENTIAL_CONTEXT_URL, + W3C_CREDENTIAL_TYPE, + W3C_PRESENTATION_TYPE, +} from '../V1/constants.js' +import type { + VerifiableCredential, + VerifiablePresentation, +} from '../V1/types.js' +import { VerifyPresentationResult } from '../interfaces.js' +import * as DataIntegrity from '../proofs/DataIntegrity.js' +import { appendErrors, getProof, toError } from '../proofs/utils.js' + +export const presentationSchema: JsonSchema.Schema = { + $schema: 'http://json-schema.org/draft-07/schema#', + type: 'object', + properties: { + '@context': { $ref: '#/definitions/contexts' }, + type: { + oneOf: [ + { + type: 'array', + uniqueItems: true, + items: { type: 'string' }, + contains: { const: W3C_PRESENTATION_TYPE }, + }, + { + const: W3C_PRESENTATION_TYPE, + }, + ], + }, + id: { + type: 'string', + format: 'uri', + }, + verifiableCredential: { + oneOf: [ + { $ref: '#/definitions/verifiableCredential' }, + { + type: 'array', + items: { $ref: '#/definitions/verifiableCredential' }, + minLength: 1, + }, + ], + }, + holder: { + type: 'string', + format: 'uri', + }, + proof: { + type: 'object', + properties: { + type: { + type: 'string', + }, + }, + required: ['type'], + }, + }, + required: ['@context', 'type', 'verifiableCredential', 'holder'], + definitions: { + verifiableCredential: { + type: 'object', + // only checking the minimal definition of a VC: a type field and potentially a context. + properties: { + '@context': { $ref: '#/definitions/contexts' }, + type: { + oneOf: [ + { + type: 'array', + uniqueItems: true, + items: { type: 'string' }, + contains: { const: W3C_CREDENTIAL_TYPE }, + }, + { + const: W3C_CREDENTIAL_TYPE, + }, + ], + }, + }, + required: ['type'], + }, + contexts: { + oneOf: [ + { + type: 'array', + uniqueItem: true, + items: [{ const: W3C_CREDENTIAL_CONTEXT_URL }], + additionalItems: { type: 'string', format: 'uri' }, + }, + { const: W3C_CREDENTIAL_CONTEXT_URL }, + ], + }, + }, +} + +// draft version '7' should align with $schema property of the schema above +const schemaValidator = new JsonSchema.Validator(presentationSchema, '7') + +/** + * Validates an object against the VerifiablePresentation data model. + * Throws if object violates the {@link presentationSchema}. + * + * @param presentation VerifiablePresentation or object to be validated. + */ +export function validateStructure(presentation: VerifiablePresentation): void { + const { errors, valid } = schemaValidator.validate(presentation) + if (!valid) { + throw new SDKErrors.PresentationMalformedError( + `Object not matching VerifiablePresentation data model`, + { + cause: errors, + } + ) + } +} + +/** + * Checks that an identity can act as a legitimate holder of a set of credentials and thus include them in a presentation they sign. + * Credentials where `nonTransferable === true` and `credentialSubject.id !== holder` are disallowed and will cause this to fail. + * + * @param presentation A Verifiable Presentation. + * @param presentation.holder The presentation holder's identifier. + * @param presentation.verifiableCredential A VC or an array of VCs. + */ +export function assertHolderCanPresentCredentials({ + holder, + verifiableCredential, +}: { + holder: Did + verifiableCredential: VerifiableCredential[] | VerifiableCredential +}): void { + const credentials = Array.isArray(verifiableCredential) + ? verifiableCredential + : [verifiableCredential] + credentials.forEach(({ nonTransferable, credentialSubject, id }) => { + if (nonTransferable && credentialSubject.id !== holder) + throw new Error( + `The credential with id ${id} is non-transferable and cannot be presented by the identity ${holder}` + ) + }) +} + +/** + * Creates a Verifiable Presentation from one or more Verifiable Credentials. + * + * @param args Object holding all function arguments. + * @param args.credentials Array of one or more Verifiable Credentials. + * @param args.holder The DID or DID Document of the holder of the credentials in the presentation, which also signs the presentation. + * @param args.validFrom A Date or date-time string indicating the earliest point in time where the presentation becomes valid. + * Represented as `issuanceDate` on the presentation. + * @param args.validUntil A Date or date-time string indicating when the presentation is no longer valid. + * Represented as `expirationDate` on the presentation. + * @param args.verifier Identifier (e.g., DID) of the verifier to prevent unauthorized re-use of the presentation. + * @returns An unsigned Verifiable Presentation containing the original VCs. + */ +export async function create({ + credentials, + holder, + verifier, + validFrom, + validUntil, +}: { + credentials: VerifiableCredential[] + holder: Did + verifier?: string + validFrom?: Date | string + validUntil?: Date | string +}): Promise { + const verifiableCredential = + credentials.length === 1 ? credentials[0] : credentials + const presentation: VerifiablePresentation = { + '@context': [W3C_CREDENTIAL_CONTEXT_URL], + type: [W3C_PRESENTATION_TYPE], + verifiableCredential, + holder, + } + if (typeof validFrom !== 'undefined') { + presentation.issuanceDate = new Date(validFrom).toISOString() + } + if (typeof validUntil !== 'undefined') { + presentation.expirationDate = new Date(validUntil).toISOString() + } + if (typeof verifier === 'string') { + presentation.verifier = verifier + } + + validateStructure(presentation) + assertHolderCanPresentCredentials(presentation) + + return presentation +} + +/** + * Verifies the proofs on a Verifiable Presentation. Does not verify the credentials contained within. + * + * @param presentation - The Verifiable Presentation to be verified. + * @param options - Verification options. + * @param options.now - The reference time for verification as Date (default is current time). + * @param options.challenge - The expected challenge value for the presentation, if any. + * @param options.domain - Expected domain for the proof. Verification fails if mismatched. + * @param options.cryptosuites - Array of cryptographic suites to use during verification (default includes suites for `sr25519-jcs-2023`, `eddsa-jcs-2022`, and `es256k-jcs-2023`). + * @param options.verifier - The expected verifier for the presentation, if any. + * @param options.tolerance - The allowed time drift in milliseconds for time-sensitive checks (default is 0). + * @param options.didResolver - An alterative DID resolver to resolve the holder DID (defaults to {@link resolve}). + * @param options.proofPurpose - Controls which value is expected for the proof's `proofPurpose` property. + * If specified, verification fails if the proof is issued for a different purpose. + * @returns An object representing the verification results of the presentation proofs. + */ +export async function verifyPresentationProof( + presentation: VerifiablePresentation, + { + now = new Date(), + tolerance = 0, + challenge, + verifier, + domain, + cryptosuites = [eddsaSuite, ecdsaSuite, sr25519Suite], + didResolver, + proofPurpose, + }: { + now?: Date + tolerance?: number + cryptosuites?: Array> + challenge?: string + domain?: string + verifier?: string | undefined + didResolver?: typeof resolve + proofPurpose?: string + } +): Promise> { + const result: VerifyPresentationResult = { + verified: false, + } + try { + validateStructure(presentation) + if (presentation.verifier && verifier !== presentation.verifier) { + appendErrors( + result, + toError( + 'presentation.verifier is set but does not match the verifier option' + ) + ) + } + if ( + presentation.issuanceDate && + Date.parse(presentation.issuanceDate) > now.getTime() + tolerance + ) { + appendErrors(result, toError('presentation.issuanceDate > now')) + } + if ( + presentation.expirationDate && + Date.parse(presentation.expirationDate) < now.getTime() - tolerance + ) { + appendErrors(result, toError('presentation.expirationDate < now')) + } + + assertHolderCanPresentCredentials(presentation) + + if (typeof result.error === 'undefined' || result.error.length === 0) { + const proof = getProof(presentation) + try { + const verified = await DataIntegrity.verifyProof( + presentation, + proof as DataIntegrity.DataIntegrityProof, + { + cryptosuites, + domain, + challenge, + expectedController: presentation.holder, + tolerance, + now, + didResolver, + expectedProofPurpose: proofPurpose, + } + ) + if (verified !== true) { + throw new SDKErrors.SignatureUnverifiableError() + } + result.proofResults = [{ verified, proof }] + } catch (proofError) { + const error = toError(proofError) + result.proofResults = [{ verified: false, error: [error], proof }] + appendErrors(result, error) + } + + result.verified = result.proofResults.every(({ verified }) => verified) + } + if (result.error?.length === 0) { + delete result.error + } + if (result.error) { + result.verified = false + } + } catch (e) { + result.verified = false + appendErrors(result, toError(e)) + } + return result +} diff --git a/packages/core/src/claim/index.ts b/packages/credentials/src/presentation/index.ts similarity index 85% rename from packages/core/src/claim/index.ts rename to packages/credentials/src/presentation/index.ts index 4161aba67..6132e2991 100644 --- a/packages/core/src/claim/index.ts +++ b/packages/credentials/src/presentation/index.ts @@ -5,4 +5,4 @@ * found in the LICENSE file in the root directory of this source tree. */ -export * from './Claim.js' +export * from './Presentation.js' diff --git a/packages/credentials/src/proofs/DataIntegrity.ts b/packages/credentials/src/proofs/DataIntegrity.ts new file mode 100644 index 000000000..03a7fc0f4 --- /dev/null +++ b/packages/credentials/src/proofs/DataIntegrity.ts @@ -0,0 +1,474 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable max-classes-per-file */ + +import { u8aConcat } from '@polkadot/util' +import { base58Decode, base58Encode, sha256AsU8a } from '@polkadot/util-crypto' + +import type { + CryptoSuite, + SignerInterface, +} from '@kiltprotocol/jcs-data-integrity-proofs-common' +import { cryptosuite as eddsaSuite } from '@kiltprotocol/eddsa-jcs-2022' +import { cryptosuite as ecdsaSuite } from '@kiltprotocol/es256k-jcs-2023' +import { cryptosuite as sr25519Suite } from '@kiltprotocol/sr25519-jcs-2023' + +import { parse, resolve } from '@kiltprotocol/did' +import type { + Did, + DidDocument, + DidUrl, + VerificationMethod, +} from '@kiltprotocol/types' +import { SDKErrors, Signers } from '@kiltprotocol/utils' +import type { SecuredDocument } from '../interfaces.js' + +export const PROOF_TYPE = 'DataIntegrityProof' + +// VCDM 2.0 core context +const VC_2_0_CONTEXT = 'https://www.w3.org/ns/credentials/v2' +const DATA_INTEGRITY_CONTEXT = 'https://w3id.org/security/data-integrity/v1' + +// multibase base58-btc header +const MULTIBASE_BASE58BTC_HEADER = 'z' + +function containsDefinitions(context: unknown): context is string { + return context === VC_2_0_CONTEXT || context === DATA_INTEGRITY_CONTEXT +} +function ensureContext(document: T): T & { '@context': unknown[] } { + let context = document['@context'] ?? [] + if (Array.isArray(context)) { + if (!context.some(containsDefinitions)) { + context = [...context, DATA_INTEGRITY_CONTEXT] + } + } else if (!containsDefinitions(context)) { + context = [context, DATA_INTEGRITY_CONTEXT] + } + return { ...document, '@context': context } +} + +export type DataIntegrityProof = { + type: typeof PROOF_TYPE + verificationMethod: string + cryptosuite: string + proofPurpose: string + proofValue: string + created?: string + expires?: string + domain?: string + challenge?: string + previousProof?: string +} + +/** + * Creates a data integrity proof for the provided document. + * This function: + * - Validates that the signer's algorithm matches the suite's required algorithm. + * - Adds the data integrity json-ld context definitions to the document if necessary. + * - Constructs a proof with default and provided properties. + * - Transforms and hashes the proof and document. + * - Generates a signature using the signer. + * - Appends the signature to the proof. + * + * @param inputDocument - The unsecured document for which the proof needs to be created. + * @param suite - The cryptographic suite to use for creating the proof. + * @param signer - The signer interface to sign the document. + * @param opts - Optional parameters for the proof creation. + * @param opts.proofPurpose - The purpose of the proof (default is 'authentication'). + * @param opts.challenge - A challenge string to be included in the proof, if any. + * @param opts.domain - A domain string to be included in the proof, if any. + * @param opts.created - A Date object indicating the date and time at which this proof becomes valid. + * Defaults to the current time. Can be unset with `null`. + * @param opts.expires - A Date object indicating the date and time at which this proof expires. + * @param opts.id - Assigns an id to the proof. Can be used to implement proof chains. + * @param opts.previousProof - Allows referencing an existing proof by id for the purpose of implementing proof chains. + * + * @returns The original document augmented with the generated proof. + */ +export async function createProof( + inputDocument: T, + suite: CryptoSuite, + signer: SignerInterface, + { + proofPurpose = 'authentication', + challenge, + domain, + created = new Date(), + expires, + id, + previousProof, + }: { + id?: string + proofPurpose?: string + challenge?: string + domain?: string + created?: Date | null + expires?: Date + previousProof?: string + } = {} +): Promise { + if ( + suite.requiredAlgorithm.toLowerCase() !== signer.algorithm.toLowerCase() + ) { + throw new Error( + "signer algorithm does not match the suite's required algorithm" + ) + } + + // TODO: adding the suite context to the document interferes with existing proofs, but is currently required (see https://github.com/digitalbazaar/data-integrity/issues/19). + const document = ensureContext(inputDocument) + + const proof = { + ...(id ? { id } : undefined), + type: PROOF_TYPE, + verificationMethod: signer.id, + cryptosuite: suite.name, + proofPurpose, + } as DataIntegrityProof + if (created) { + proof.created = created.toISOString() + } + if (expires) { + proof.expires = expires.toISOString() + } + if (challenge) { + proof.challenge = challenge + } + if (domain) { + proof.domain = domain + } + if (previousProof) { + proof.previousProof = previousProof + } + + const canonizedProof = await suite.canonize({ + // TODO: It's unclear if this behaviour is desirable (see https://github.com/digitalbazaar/data-integrity/issues/19). + // Adding the document context to the proof should NOT happen for a jcs proof according to the relevant specs; + // however both digitalbazaar/jsonld-signatures as well as digitalbazaar/data-integrity currently do enforce this. + // Not sure how to proceed; implement to spec or allow interoperability. + '@context': document['@context'], + ...proof, + }) + const canonizedDoc = await suite.canonize(document) + + const combinedHashes = u8aConcat( + sha256AsU8a(canonizedProof), + sha256AsU8a(canonizedDoc) + ) + const signatureBytes = await signer.sign({ data: combinedHashes }) + proof.proofValue = MULTIBASE_BASE58BTC_HEADER + base58Encode(signatureBytes) + + return { ...document, proof } +} + +const { byDid, byAlgorithm } = Signers.select + +/** + * Signs a document with a DID-related signer. + * + * @param args - Object holding all function arguments. + * @param args.document - An unsigned document. Any existing proofs will be overwritten. + * @param args.signerDid - The DID or DID Document identifying the signing party. + * The DID Document will be resolved by this function if not passed in. + * @param args.signers - One or more signers associated with the `signerDid` to be used for signing the document. + * If omitted, the signing step is skipped. + * @param args.cryptosuites - One or more cryptosuites that take care of processing and normalizing the document. + * The actual suite used will be based on a match between `algorithm`s supported by the `signers` and the suite's `requiredAlgorithm`. + * @param args.proofPurpose - Controls the `proofPurpose` property and which verificationMethods can be used for signing. + * Defaults to 'authentication'. + * @param args.challenge - A challenge supplied by a verifier in a challenge-response protocol, which allows verifiers to assure signature freshness, preventing unauthorized re-use. + * @param args.domain - A domain string to be included in the proof, if any. + * @param args.created - A Date object indicating the date and time at which this proof becomes valid. + * Defaults to the current time. Can be unset with `null`. + * @param args.expires - A Date object indicating the date and time at which this proof expires. + * @param args.id - Assigns an id to the proof. Can be used to implement proof chains. + * @param args.previousProof - Allows referencing an existing proof by id for the purpose of implementing proof chains. + * @returns The original document with a DataIntegrity signature proof attached. + */ +export async function signWithDid({ + document, + signerDid, + signers, + cryptosuites = [eddsaSuite, ecdsaSuite, sr25519Suite], + proofPurpose = 'authentication', + challenge, + domain, + created, + expires, + id, + previousProof, +}: { + document: T + signerDid: Did | DidDocument + signers: readonly SignerInterface[] + cryptosuites?: ReadonlyArray> + proofPurpose?: string + challenge?: string + domain?: string + created?: Date | null + expires?: Date + id?: string + previousProof?: string +}): Promise { + const signerDocument = + typeof signerDid === 'string' + ? (await resolve(signerDid)).didDocument + : signerDid + + if (!signerDocument?.id) { + throw new SDKErrors.DidNotFoundError( + `Failed to resolve signer DID ${signerDid}` + ) + } + + const requiredAlgorithms = cryptosuites.map( + ({ requiredAlgorithm }) => requiredAlgorithm + ) + + const signer = Signers.selectSigner( + signers, + byAlgorithm(requiredAlgorithms), + byDid(signerDocument, { + verificationRelationship: proofPurpose, + controller: signerDocument.id, + }) + ) + if (!signer) { + throw new SDKErrors.NoSuitableSignerError(undefined, { + signerRequirements: { + algorithm: requiredAlgorithms, + did: signerDocument.id, + verificationRelationship: proofPurpose, + }, + availableSigners: signers, + }) + } + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- We've matched the suite to the algorithms earlier, so this will return the right suite + const suite = cryptosuites.find( + ({ requiredAlgorithm }) => requiredAlgorithm === signer.algorithm + )! + return createProof(document, suite, signer, { + id, + proofPurpose, + challenge, + domain, + created, + expires, + previousProof, + }) +} + +export class UNSUPPORTED_CRYPTOSUITE_ERROR extends Error { + override name = 'UNSUPPORTED_CRYPTOSUITE_ERROR' +} + +export class UNEXPECTED_CONTROLLER_ERROR extends Error { + override name = 'UNEXPECTED_CONTROLLER_ERROR' +} + +export class PROOF_TRANSFORMATION_ERROR extends Error { + override name = 'PROOF_TRANSFORMATION_ERROR' // Specified by cryptosuite specs +} + +export class MALFORMED_PROOF_ERROR extends Error { + override name = 'MALFORMED_PROOF_ERROR' + public readonly code = -17 +} + +export class MISMATCHED_PROOF_PURPOSE_ERROR extends Error { + override name = 'MISMATCHED_PROOF_PURPOSE_ERROR' + public readonly code = -18 +} + +export class INVALID_DOMAIN_ERROR extends Error { + override name = 'INVALID_DOMAIN_ERROR' + public readonly code = -19 +} + +export class INVALID_CHALLENGE_ERROR extends Error { + override name = 'INVALID_CHALLENGE_ERROR' + public readonly code = -20 +} + +export class INVALID_PROOF_PURPOSE_FOR_VERIFICATION_METHOD extends Error { + override name = 'INVALID_PROOF_PURPOSE_FOR_VERIFICATION_METHOD' + public readonly code = -25 +} + +async function retrieveVerificationMethod( + proof: DataIntegrityProof, + resolver: typeof resolve +): Promise { + const { did } = parse(proof.verificationMethod as DidUrl) + const { didDocument, didDocumentMetadata, didResolutionMetadata } = + await resolver(did) + if (didDocumentMetadata.deactivated) { + throw new SDKErrors.DidDeactivatedError() + } + if (didResolutionMetadata.error) { + throw new SDKErrors.DidError(didResolutionMetadata.error) + } + const verificationMethod = didDocument?.verificationMethod?.find( + ({ id }) => + id === proof.verificationMethod || + `${didDocument.id}${id}` === proof.verificationMethod // deals with relative ids in the did document || + ) + if (!verificationMethod) { + throw new SDKErrors.DidNotFoundError( + `could not resolve verificationMethod ${proof.verificationMethod}` + ) + } + const verificationMethodsForPurpose: string[] = + didDocument?.[proof.proofPurpose] ?? [] + if (!verificationMethodsForPurpose.includes(verificationMethod.id)) { + throw new INVALID_PROOF_PURPOSE_FOR_VERIFICATION_METHOD() + } + + return verificationMethod +} + +/** + * Verifies integrity of a document secured by a data integrity proof (proof type: DataIntegrityProof). + * This function performs multiple checks to ensure the authenticity and correctness of the proof: + * - Ensures essential properties like type, verificationMethod, and proofPurpose exist in the proof and have allowable values. + * - Matches the cryptosuite of the proof with cryptosuites supplied to this function via proof options. + * - Decodes the signature from base58btc multibase encoding. + * - Retrieves the verification method and ensures it matches expected controllers. + * - Transforms the document and proof. + * - Verifies the signature against transformed data. + * - Optionally checks for challenge & domain, if provided in the proof options. + * + * @param document - The document secured by `proof` (may contain additional proofs). + * @param proof - The data integrity proof to verify. + * @param proofOptions - Options for the verification process. + * @param proofOptions.cryptosuites - Array of cryptographic suites to be used for verification; determines which proofs can be verified. + * @param proofOptions.expectedProofPurpose - Expected purpose of the proof. Throws if mismatched. + * @param proofOptions.expectedController - Expected controller of the verification method. Throws if mismatched. + * @param proofOptions.domain - Expected domain for the proof. Throws if mismatched. + * @param proofOptions.challenge - Expected challenge for the proof. Throws if mismatched. + * @param proofOptions.now - The reference time for verification as Date (default is current time). + * @param proofOptions.tolerance - The allowed time drift in milliseconds for time-sensitive checks (default is 0). + * @param proofOptions.didResolver - An alterative DID resolver to resolve the holder DID (defaults to {@link resolve}). + * @returns Returns true if the verification is successful; otherwise, it returns false or throws an error. + */ +export async function verifyProof( + document: Partial, + proof: DataIntegrityProof, + proofOptions: { + cryptosuites: Array> + expectedProofPurpose?: string + expectedController?: string + domain?: string + challenge?: string + now?: Date + tolerance?: number + didResolver?: typeof resolve + } + // TODO: make VerificationResult? +): Promise { + const { ...unsecuredDocument } = document + delete unsecuredDocument.proof + if (!proof.type || !proof.verificationMethod || !proof.proofPurpose) { + throw new MALFORMED_PROOF_ERROR( + 'proof properties type, verificationMethod, and proofPurpose are required' + ) + } + if ( + proofOptions.expectedProofPurpose && + proofOptions.expectedProofPurpose !== proof.proofPurpose + ) { + throw new MISMATCHED_PROOF_PURPOSE_ERROR() + } + if (proof.type !== PROOF_TYPE) { + throw new PROOF_TRANSFORMATION_ERROR( + `only ${PROOF_TYPE} type proofs are supported` + ) + } + // select cryptosuite for verification + const suite = proofOptions?.cryptosuites.find( + ({ name }) => name === proof.cryptosuite + ) + if (!suite) { + throw new PROOF_TRANSFORMATION_ERROR( + `proof's cryptosuite ${ + proof.cryptosuite + } not among the supported suites [${ + proofOptions.cryptosuites?.map(({ name }) => name) ?? [] + }]` + ) + } + // decode signature + if (proof.proofValue[0] !== MULTIBASE_BASE58BTC_HEADER) { + throw new Error('only base58btc multibase encoding is supported') + } + const signature = base58Decode(proof.proofValue.slice(1)) + // retrieve verification method and create verifier + const verificationMethod = await retrieveVerificationMethod( + proof, + proofOptions.didResolver ?? resolve + ) + if ( + proofOptions.expectedController && + verificationMethod.controller !== proofOptions.expectedController + ) { + throw new UNEXPECTED_CONTROLLER_ERROR() + } + const verifier = await suite.createVerifier({ + verificationMethod, + }) + // transform document & proof options + const proofOpts: Record = { + '@context': unsecuredDocument['@context'], + ...proof, + } + delete proofOpts.proofValue + const canonizedProof = await suite.canonize(proofOpts) + const canonizedDoc = await suite.canonize(unsecuredDocument) + const transformedData = u8aConcat( + sha256AsU8a(canonizedProof), + sha256AsU8a(canonizedDoc) + ) + // verify signature + const verified = await verifier.verify({ data: transformedData, signature }) + // verify challenge & domain + // for some reason this is listed as steps following the signature verification in the specs + if (proofOptions.domain && proofOptions.domain !== proof.domain) { + throw new INVALID_DOMAIN_ERROR() + } + if (proofOptions.challenge && proofOptions.challenge !== proof.challenge) { + throw new INVALID_CHALLENGE_ERROR() + } + const now = proofOptions.now ?? new Date() + const tolerance = proofOptions.tolerance ?? 0 + if (proof.created && Date.parse(proof.created) > now.getTime() + tolerance) { + throw new Error('proof created after verification time') + } + if (proof.expires && Date.parse(proof.expires) < now.getTime() - tolerance) { + throw new Error('proof expired before verification time') + } + // return result + return verified +} + +/** + * Matches a string identifying an algorithm or suite to the respective cryptosuite implementation, if known. + * + * @param nameOrAlgorithm The name of a suite or the signature algorithm it uses. + * @returns The cryptosuite implementation, or undefined. + */ +export function getCryptosuiteByNameOrAlgorithm( + nameOrAlgorithm: string +): CryptoSuite | undefined { + const cryptosuites = [sr25519Suite, ecdsaSuite, eddsaSuite] + + // we're being generous here, so 'ed25519' works just as well as 'eddsa-jcs-2022' + return cryptosuites.find( + ({ requiredAlgorithm, name }) => + nameOrAlgorithm === name || nameOrAlgorithm === requiredAlgorithm + ) +} diff --git a/packages/credentials/src/proofs/utils.ts b/packages/credentials/src/proofs/utils.ts new file mode 100644 index 000000000..e77231805 --- /dev/null +++ b/packages/credentials/src/proofs/utils.ts @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { SDKErrors } from '@kiltprotocol/utils' + +import type { Proof } from '../V1/types.js' + +/** + * Converts the input value to an instance of Error. + * + * @param input Some value. + * @param constructor The Error (sub-)class to be instantiated, if input is not yet an error. + * @returns An instance of Error. + */ +export function toError( + input: unknown, + constructor = SDKErrors.SDKError +): Error { + if (input instanceof Error) { + return input + } + return new constructor(String(input)) +} + +/** + * Appends errors to an array on the `error` property of `input`. + * Creates the property if it does not yet exist. + * All operations happen in-place and modify the input object. + * + * @param input The object to be modified. + * @param input.error If present, this should be an array of `Error` instances. + * @param newErrors One or more instances of `Error` to be appended to `input.error`. + */ +export function appendErrors( + input: { error?: Error[] | undefined }, + ...newErrors: Error[] +): void { + if (Array.isArray(input.error)) { + input.error.push(...newErrors) + return + } + // eslint-disable-next-line no-param-reassign + input.error = newErrors +} + +/** + * Retrieves the proof from the proof property of a document. Throws if no proof or multiple proofs (i.e., a proof set/chain) is found on the document. + * + * @param document The document containing a proof. + * @param document.proof The proof property, which must either be a proof object, or be an array containing exactly one proof object. + * @returns The proof. + */ +export function getProof({ proof }: { proof?: T | T[] }): T { + if (!proof) { + throw new Error('document does not contain any proofs') + } + if (Array.isArray(proof)) { + if (proof.length !== 1) { + throw new Error( + 'proof sets and proof chains are not supported; the document must contain exactly one proof' + ) + } + return proof[0] + } + return proof +} diff --git a/packages/credentials/src/verifier.ts b/packages/credentials/src/verifier.ts new file mode 100644 index 000000000..6ddc001db --- /dev/null +++ b/packages/credentials/src/verifier.ts @@ -0,0 +1,348 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import type { CryptoSuite } from '@kiltprotocol/jcs-data-integrity-proofs-common' + +import { resolve } from '@kiltprotocol/did' +import type { Did, DidDocument, ICType } from '@kiltprotocol/types' +import { SDKErrors } from '@kiltprotocol/utils' + +import { + KiltAttestationProofV1, + KiltCredentialV1, + KiltRevocationStatusV1, +} from './V1/index.js' +import type { + VerifiableCredential, + VerifiablePresentation, +} from './V1/types.js' +import { type CTypeLoader } from './ctype/index.js' +import type { + CredentialStatusResult, + VerifyCredentialResult, + VerifyPresentationResult, +} from './interfaces.js' +import { verifyPresentationProof } from './presentation/Presentation.js' +import * as DataIntegrity from './proofs/DataIntegrity.js' +import { appendErrors, getProof, toError } from './proofs/utils.js' + +/** + * Retrieves status information on a credential, indicating for example whether or not the credential has been revoked. + * After a credential has been verified using {@link verifyCredential} or {@link verifyPresentation}, this function could be called periodically to ensure it continues to be valid. + * + * @param credential The Verifiable Credential whose status is to be checked. + * @returns An object containing a summary of the result (`verified`) as a boolean alongside any potential errors. + * A `status` string may convey additional information on the credential's status. + */ +export async function checkStatus( + credential: VerifiableCredential +): Promise { + try { + switch (credential.credentialStatus?.type) { + case KiltRevocationStatusV1.STATUS_TYPE: + await KiltRevocationStatusV1.check( + credential as KiltCredentialV1.Interface + ) + return { verified: true } + default: + throw new SDKErrors.CredentialUnverifiableError( + `Unknown credentialStatus type ${credential.credentialStatus?.type}` + ) + } + } catch (error) { + return { verified: false, error: [toError(error)] } + } +} + +/** + * Verifies a Verifiable Credential and checks its revocation status. + * + * This function: + * - Verifies the integrity and authenticity of the data contained in the credential by verifying its `proof`. + * - Checks the revocation status of a verified credential. + * - Returns a verification result containing proof and status verification results. + * + * @param credential - The Verifiable Credential to be verified. + * @param verificationCriteria - Verification options. + * @param verificationCriteria.proofTypes - The types of acceptable proofs on the presentation. + * Defaults to {@link KiltAttestationProofV1.PROOF_TYPE KiltAttestationProofV1 } which, as of now, is the only type suppported. + * @param verificationCriteria.proofPurpose - Controls which value is expected for the proof's `proofPurpose` property. + * As {@link KiltAttestationProofV1.PROOF_TYPE KiltAttestationProofV1} proofs default to `assertionMethod`, any other value will currently fail verification. + * @param verificationCriteria.now - The reference time for verification as Date (default is current time). + * @param verificationCriteria.tolerance - The allowed time drift in milliseconds for time-sensitive checks (default is 0). + * @param config - Additional configuration (optional). + * @param config.didResolver - An alterative DID resolver to resolve issuer DIDs (defaults to {@link resolve}). + * An array of static DID documents can be provided instead, in which case the function will not try to retrieve any DID documents from a remote source. + * @param config.ctypeLoader - An alternative CType loader that retrieves CType definitions associated with the credential in order to assure they follow the CType's credential schema. + * An array of CType definitions can be passed instead, which has the effect of restricting allowable credential types to these known CTypes. + * By default, this retrieves CType defitions from the KILT blockchain, using a loader with an internal definitions cache. + * @param config.credentialStatusLoader - An alternative credential status resolver. + * This function takes the credential as input and is expected to return a promise of an {@link CredentialStatusResult}. + * Defaults to {@link checkStatus}. + * @returns An object containing a summary of the result (`verified`) as a boolean alongside any potential errors and detailed information on proof verification results and credential status. + */ +export async function verifyCredential( + credential: VerifiableCredential, + verificationCriteria: { + proofTypes?: string[] + proofPurpose?: string + now?: Date + tolerance?: number + } = {}, + config: { + didResolver?: typeof resolve | DidDocument[] + ctypeLoader?: CTypeLoader | ICType[] + credentialStatusLoader?: ( + credential: VerifiableCredential + ) => Promise + } = {} +): Promise { + const result: VerifyCredentialResult = { + verified: false, + } + const { now = new Date(), tolerance = 0 } = verificationCriteria + try { + // TODO: time-based checks could also happen on checkStatus, as they should be re-run when re-checking a credentials validity. + if (Date.parse(credential.issuanceDate) - tolerance > now.getTime()) { + throw new SDKErrors.CredentialUnverifiableError( + `issuanceDate is later than 'now'` + ) + } + + const proof = getProof(credential) + result.proofResults = [{ verified: false, proof }] + try { + const { proofTypes, proofPurpose } = verificationCriteria + if (proofTypes && !proofTypes.includes(proof.type)) { + throw new SDKErrors.CredentialUnverifiableError( + `Proof type ${proof.type} not in allowed proofTypes ${proofTypes}` + ) + } + + switch (proof.type) { + case KiltAttestationProofV1.PROOF_TYPE: + { + if (proofPurpose && proofPurpose !== 'assertionMethod') { + throw new SDKErrors.CredentialUnverifiableError( + `proofPurpose does not match default purpose for ${KiltAttestationProofV1.PROOF_TYPE} (assertionMethod)` + ) + } + + const { ctypeLoader } = config + const options: Parameters[2] = + {} + if (Array.isArray(ctypeLoader)) { + options.cTypes = ctypeLoader + options.loadCTypes = false + } else if (typeof ctypeLoader === 'function') { + options.loadCTypes = ctypeLoader + } + await KiltAttestationProofV1.verify( + credential as KiltCredentialV1.Interface, + proof as KiltAttestationProofV1.Interface, + options + ) + result.proofResults[0].verified = true + } + break + default: + throw new SDKErrors.CredentialUnverifiableError( + `Unsupported proof type ${proof.type}` + ) + } + } catch (error) { + result.proofResults[0].verified = false + appendErrors(result.proofResults[0], toError(error)) + } + if (result.proofResults?.some(({ verified }) => verified === true)) { + const { credentialStatusLoader = checkStatus } = config + // TODO: shouldn't the 'now' parameter also apply to the status check? + result.statusResult = await credentialStatusLoader(credential).catch( + (e) => ({ verified: false, error: [toError(e)] }) + ) + + if (result.statusResult.verified === true) { + result.verified = true + } + } + } catch (error) { + appendErrors(result, toError(error)) + result.verified = false + } + appendErrors( + result, + ...(result.proofResults?.flatMap((r) => r.error ?? []) ?? []), + ...(result.statusResult?.error ?? []) + ) + if (result.error?.length === 0) { + delete result.error + } + if (typeof result.error !== 'undefined') { + result.verified = false + } + return result +} + +/** + * Verifies a Verifiable Presentation and the Verifiable Credentials contained within. + * + * This function: + * - Verifies the integrity of the presentation by verifying the embedded data integrity proofs. + * - If the presentation is valid, verifies each associated credential. + * - Checks the status of each verified credential. + * - Returns a composite verification result for the presentation and each credential. + * + * @param presentation - The Verifiable Presentation to be verified. + * @param verificationCriteria - Verification options. + * @param verificationCriteria.now - The reference time for verification as Date (default is current time). + * @param verificationCriteria.tolerance - The allowed time drift in milliseconds for time-sensitive checks (default is 0). + * @param verificationCriteria.credentials - Verification criteria to be passed on to {@link verifyCredential}. + * @param verificationCriteria.credentials.proofTypes See {@link verifyCredential}. + * @param verificationCriteria.credentials.proofPurpose See {@link verifyCredential}. + * @param verificationCriteria.presentation - Verification criteria for presentation verification. + * @param verificationCriteria.presentation.proofTypes - The types of acceptable proofs on the presentation. + * Defaults to {@link DataIntegrity.PROOF_TYPE DataIntegrityProof } which, as of now, is the only type suppported. + * Any other values will be mapped to a known algorithm or cryptosuite for use with this proof type, thus allowing to control the signature algorithm to be used. + * @param verificationCriteria.presentation.proofPurpose - Controls which value is expected for the proof's `proofPurpose` property. + * If specified, verification fails if the proof is issued for a different purpose. + * @param verificationCriteria.presentation.challenge - The expected challenge value for the presentation, if any. + * If given, verification fails if the proof does not contain the challenge value. + * @param verificationCriteria.presentation.domain - Expected domain for the proof. Verification fails if mismatched. + * @param verificationCriteria.presentation.verifier - The expected verifier for the presentation, if any. + * @param config - Additional configuration (optional). + * @param config.didResolver - An alterative DID resolver to resolve the holder- and issuer DIDs (defaults to {@link resolve}). + * An array of static DID documents can be provided instead, in which case the function will not try to retrieve any DID documents from a remote source. + * @param config.ctypeLoader - An alternative CType loader for credential verification, or alternatively an array of CTypes. + * See {@link verifyCredential} for details. + * @param config.credentialStatusLoader - An alternative credential status resolver. + * See {@link verifyCredential} for details. + * @returns An object containing a summary of the result (`verified`) as a boolean alongside detailed information on presentation and credential verification results. + */ +export async function verifyPresentation( + presentation: VerifiablePresentation, + verificationCriteria: { + now?: Date + tolerance?: number + credentials?: { + proofTypes?: string[] + proofPurpose?: string + } + presentation?: { + proofTypes?: string[] + proofPurpose?: string + challenge?: string + domain?: string + verifier?: Did + } + } = {}, + config: { + didResolver?: typeof resolve | DidDocument[] + ctypeLoader?: CTypeLoader | ICType[] + credentialStatusLoader?: ( + credential: VerifiableCredential + ) => Promise + } = {} +): Promise { + const result: VerifyPresentationResult = { + verified: false, + } + try { + const { + now = new Date(), + tolerance = 0, + presentation: { proofTypes: presentationProofTypes } = {}, + } = verificationCriteria + const { ctypeLoader, credentialStatusLoader } = config + // prepare did resolver to be used for loading issuer & holder did documents + let { didResolver = resolve } = config + if (Array.isArray(didResolver)) { + const knownDocuments = new Map( + didResolver.map((document) => { + return [document.id, document] + }) + ) + didResolver = async (did) => { + const didDocument = knownDocuments.get(did) + const didResolutionMetadata = didDocument + ? {} + : ({ error: 'notFound' } as const) + return { + didDocument, + didResolutionMetadata, + didDocumentMetadata: {}, + } + } + } + // verify presentation proof + let cryptosuites: Array> | undefined + // If presentation.proofTypes is set, we choose a set of cryptosuites based on that value. + // We leave `cryptosuites` unset otherwise, resulting in the default set of suites being used in verification. + if (presentationProofTypes) { + cryptosuites = presentationProofTypes.map((proofType) => { + const suite = DataIntegrity.getCryptosuiteByNameOrAlgorithm(proofType) + if (!suite) { + throw new Error( + `could not match proofTypes value ${presentationProofTypes} to a known proof type or cryptosuite` + ) + } + return suite + }) + } + + const { verified, proofResults, error } = await verifyPresentationProof( + presentation, + { + ...verificationCriteria.presentation, + now, + cryptosuites, + didResolver, + } + ) + + result.proofResults = proofResults + result.verified = verified + if (error) { + result.error = error + } + // return early if the presentation proof can't be verified + if (verified !== true) { + return result + } + // retrieve credential(s) from presentation body + const credentials = Array.isArray(presentation.verifiableCredential) + ? presentation.verifiableCredential + : [presentation.verifiableCredential] + // verify each credential (including proof & status) + result.credentialResults = await Promise.all( + credentials.map(async (credential) => { + const credentialResult = await verifyCredential( + credential, + { ...verificationCriteria.credentials, now, tolerance }, + { credentialStatusLoader, ctypeLoader, didResolver } + ) + return { ...credentialResult, credential } + }) + ) + // carry credential results to result summary + result.credentialResults.forEach((r) => { + if (result.verified && r.verified !== true) { + result.verified = false + } + if (Array.isArray(r.error)) { + appendErrors(result, ...r.error) + } + }) + } catch (e) { + appendErrors(result, toError(e)) + result.verified = false + } + // make sure we don't have an empty error array + if (result.error?.length === 0) { + delete result.error + } + return result +} diff --git a/packages/core/tsconfig.build.json b/packages/credentials/tsconfig.build.json similarity index 100% rename from packages/core/tsconfig.build.json rename to packages/credentials/tsconfig.build.json diff --git a/packages/core/tsconfig.esm.json b/packages/credentials/tsconfig.esm.json similarity index 100% rename from packages/core/tsconfig.esm.json rename to packages/credentials/tsconfig.esm.json diff --git a/packages/did/package.json b/packages/did/package.json index 05c3a631c..95bdd77c8 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -34,6 +34,7 @@ "typescript": "^4.8.3" }, "dependencies": { + "@digitalbazaar/multikey-context": "^1.0.0", "@digitalbazaar/security-context": "^1.0.0", "@kiltprotocol/augment-api": "workspace:*", "@kiltprotocol/config": "workspace:*", @@ -44,6 +45,7 @@ "@polkadot/types": "^10.4.0", "@polkadot/types-codec": "^10.4.0", "@polkadot/util": "^12.0.0", - "@polkadot/util-crypto": "^12.0.0" + "@polkadot/util-crypto": "^12.0.0", + "multibase": "^4.0.6" } } diff --git a/packages/did/src/Did.chain.ts b/packages/did/src/Did.chain.ts index 09daf45e4..0803a9e6e 100644 --- a/packages/did/src/Did.chain.ts +++ b/packages/did/src/Did.chain.ts @@ -8,54 +8,53 @@ import type { Option } from '@polkadot/types' import type { AccountId32, Extrinsic, Hash } from '@polkadot/types/interfaces' import type { AnyNumber } from '@polkadot/types/types' - import type { + DidDidDetails, + DidDidDetailsDidAuthorizedCallOperation, + DidDidDetailsDidPublicKeyDetails, + DidServiceEndpointsDidEndpoint, + KiltSupportDeposit, +} from '@kiltprotocol/augment-api' +import type { + BN, Deposit, - DidDocument, - DidEncryptionKey, - DidKey, - DidServiceEndpoint, - DidUri, - DidVerificationKey, + Did, + DidUrl, KiltAddress, - NewDidEncryptionKey, - NewDidVerificationKey, - SignExtrinsicCallback, - SignRequestData, - SignResponseData, + Service, + SignerInterface, SubmittableExtrinsic, UriFragment, - VerificationKeyRelationship, - BN, } from '@kiltprotocol/types' -import { verificationKeyTypes } from '@kiltprotocol/types' -import { Crypto, SDKErrors, ss58Format } from '@kiltprotocol/utils' + import { ConfigService } from '@kiltprotocol/config' +import { Crypto, SDKErrors, Signers, ss58Format } from '@kiltprotocol/utils' + import type { - DidDidDetails, - DidDidDetailsDidAuthorizedCallOperation, - DidDidDetailsDidPublicKey, - DidDidDetailsDidPublicKeyDetails, - DidServiceEndpointsDidEndpoint, - KiltSupportDeposit, -} from '@kiltprotocol/augment-api' + DidEncryptionMethodType, + NewService, + DidSigningMethodType, + NewDidVerificationKey, + NewDidEncryptionKey, +} from './DidDetails/DidDetails.js' +import { isValidVerificationMethodType } from './DidDetails/DidDetails.js' import { - EncodedEncryptionKey, - EncodedKey, - EncodedSignature, - EncodedVerificationKey, - getAddressByKey, - getFullDidUri, + keypairToMultibaseKey, + getAddressFromVerificationMethod, + getFullDid, parse, } from './Did.utils.js' -// ### Chain type definitions - -export type ChainDidPublicKey = DidDidDetailsDidPublicKey -export type ChainDidPublicKeyDetails = DidDidDetailsDidPublicKeyDetails +export type ChainDidIdentifier = KiltAddress -// ### RAW QUERYING (lowest layer) +export type EncodedVerificationKey = + | { sr25519: Uint8Array } + | { ed25519: Uint8Array } + | { ecdsa: Uint8Array } +export type EncodedEncryptionKey = { x25519: Uint8Array } +export type EncodedDidKey = EncodedVerificationKey | EncodedEncryptionKey +export type EncodedSignature = EncodedVerificationKey /** * Format a DID to be used as a parameter for the blockchain API functions. @@ -63,20 +62,30 @@ export type ChainDidPublicKeyDetails = DidDidDetailsDidPublicKeyDetails * @param did The DID to format. * @returns The blockchain-formatted DID. */ -export function toChain(did: DidUri): KiltAddress { +export function toChain(did: Did): ChainDidIdentifier { return parse(did).address } /** - * Format a DID resource ID to be used as a parameter for the blockchain API functions. + * Format a DID fragment to be used as a parameter for the blockchain API functions. - * @param id The DID resource ID to format. + * @param id The DID fragment to format. * @returns The blockchain-formatted ID. */ -export function resourceIdToChain(id: UriFragment): string { +export function fragmentIdToChain(id: UriFragment): string { return id.replace(/^#/, '') } +/** + * Convert the DID data from blockchain format to the DID. + * + * @param encoded The chain-formatted DID. + * @returns The DID. + */ +export function fromChain(encoded: AccountId32): Did { + return getFullDid(Crypto.encodeAddress(encoded, ss58Format)) +} + /** * Convert the deposit data coming from the blockchain to JS object. * @@ -90,42 +99,57 @@ export function depositFromChain(deposit: KiltSupportDeposit): Deposit { } } -// ### DECODED QUERYING types +export type ChainDidBaseKey = { + id: UriFragment + publicKey: Uint8Array + includedAt?: BN + type: string +} +export type ChainDidVerificationKey = ChainDidBaseKey & { + type: DidSigningMethodType +} +export type ChainDidEncryptionKey = ChainDidBaseKey & { + type: DidEncryptionMethodType +} +export type ChainDidKey = ChainDidVerificationKey | ChainDidEncryptionKey +export type ChainDidService = { + id: string + serviceTypes: string[] + urls: string[] +} +export type ChainDidDetails = { + authentication: [ChainDidVerificationKey] + assertionMethod?: [ChainDidVerificationKey] + capabilityDelegation?: [ChainDidVerificationKey] + keyAgreement?: ChainDidEncryptionKey[] + + service?: ChainDidService[] -type ChainDocument = Pick< - DidDocument, - 'authentication' | 'assertionMethod' | 'capabilityDelegation' | 'keyAgreement' -> & { lastTxCounter: BN deposit: Deposit } -// ### DECODED QUERYING (builds on top of raw querying) - -function didPublicKeyDetailsFromChain( +/** + * Convert a DID public key from the blockchain format to a JS object. + * + * @param keyId The key ID. + * @param keyDetails The associated public key blockchain-formatted details. + * @returns The JS-formatted DID key. + */ +export function publicKeyFromChain( keyId: Hash, - keyDetails: ChainDidPublicKeyDetails -): DidKey { + keyDetails: DidDidDetailsDidPublicKeyDetails +): ChainDidKey { const key = keyDetails.key.isPublicEncryptionKey ? keyDetails.key.asPublicEncryptionKey : keyDetails.key.asPublicVerificationKey return { id: `#${keyId.toHex()}`, - type: key.type.toLowerCase() as DidKey['type'], publicKey: key.value.toU8a(), + type: key.type.toLowerCase() as ChainDidKey['type'], } } -/** - * Convert the DID data from blockchain format to the DID URI. - * - * @param encoded The chain-formatted DID. - * @returns The DID URI. - */ -export function fromChain(encoded: AccountId32): DidUri { - return getFullDidUri(Crypto.encodeAddress(encoded, ss58Format)) -} - /** * Convert the DID Document data from the blockchain format to a JS object. * @@ -134,7 +158,7 @@ export function fromChain(encoded: AccountId32): DidUri { */ export function documentFromChain( encoded: Option -): ChainDocument { +): ChainDidDetails { const { publicKeys, authenticationKey, @@ -145,28 +169,28 @@ export function documentFromChain( deposit, } = encoded.unwrap() - const keys: Record = [...publicKeys.entries()] - .map(([keyId, keyDetails]) => - didPublicKeyDetailsFromChain(keyId, keyDetails) - ) + const keys: Record = [...publicKeys.entries()] + .map(([keyId, keyDetails]) => publicKeyFromChain(keyId, keyDetails)) .reduce((res, key) => { - res[resourceIdToChain(key.id)] = key + res[fragmentIdToChain(key.id)] = key return res }, {}) - const authentication = keys[authenticationKey.toHex()] as DidVerificationKey + const authentication = keys[ + authenticationKey.toHex() + ] as ChainDidVerificationKey - const didRecord: ChainDocument = { + const didRecord: ChainDidDetails = { authentication: [authentication], lastTxCounter: lastTxCounter.toBn(), deposit: depositFromChain(deposit), } if (attestationKey.isSome) { - const key = keys[attestationKey.unwrap().toHex()] as DidVerificationKey + const key = keys[attestationKey.unwrap().toHex()] as ChainDidVerificationKey didRecord.assertionMethod = [key] } if (delegationKey.isSome) { - const key = keys[delegationKey.unwrap().toHex()] as DidVerificationKey + const key = keys[delegationKey.unwrap().toHex()] as ChainDidVerificationKey didRecord.capabilityDelegation = [key] } @@ -175,25 +199,13 @@ export function documentFromChain( ) if (keyAgreementKeyIds.length > 0) { didRecord.keyAgreement = keyAgreementKeyIds.map( - (id) => keys[id] as DidEncryptionKey + (id) => keys[id] as ChainDidEncryptionKey ) } return didRecord } -interface ChainEndpoint { - id: string - serviceTypes: DidServiceEndpoint['type'] - urls: DidServiceEndpoint['serviceEndpoint'] -} - -/** - * Checks if a string is a valid URI according to RFC#3986. - * - * @param str String to be checked. - * @returns Whether `str` is a valid URI. - */ function isUri(str: string): boolean { try { const url = new URL(str) // this actually accepts any URI but throws if it can't be parsed @@ -203,7 +215,7 @@ function isUri(str: string): boolean { } } -const UriFragmentRegex = /^[a-zA-Z0-9._~%+,;=*()'&$!@:/?-]+$/ +const uriFragmentRegex = /^[a-zA-Z0-9._~%+,;=*()'&$!@:/?-]+$/ /** * Checks if a string is a valid URI fragment according to RFC#3986. @@ -213,27 +225,27 @@ const UriFragmentRegex = /^[a-zA-Z0-9._~%+,;=*()'&$!@:/?-]+$/ */ function isUriFragment(str: string): boolean { try { - return UriFragmentRegex.test(str) && !!decodeURIComponent(str) + return uriFragmentRegex.test(str) && !!decodeURIComponent(str) } catch { return false } } /** - * Performs sanity checks on service endpoint data, making sure that the following conditions are met: - * - The `id` property is a string containing a valid URI fragment according to RFC#3986, not a complete DID URI. + * Performs sanity checks on service data, making sure that the following conditions are met: + * - The `id` property is a string containing a valid URI fragment according to RFC#3986, not a complete DID URL. * - If the `uris` property contains one or more strings, they must be valid URIs according to RFC#3986. * - * @param endpoint A service endpoint object to check. + * @param endpoint A service object to check. */ -export function validateService(endpoint: DidServiceEndpoint): void { +export function validateNewService(endpoint: NewService): void { const { id, serviceEndpoint } = endpoint - if (id.startsWith('did:kilt')) { + if ((id as string).startsWith('did:kilt')) { throw new SDKErrors.DidError( - `This function requires only the URI fragment part (following '#') of the service ID, not the full DID URI, which is violated by id "${id}"` + `This function requires only the URI fragment part (following '#') of the service ID, not the full DID URL, which is violated by id "${id}"` ) } - if (!isUriFragment(resourceIdToChain(id))) { + if (!isUriFragment(fragmentIdToChain(id))) { throw new SDKErrors.DidError( `The service ID must be valid as a URI fragment according to RFC#3986, which "${id}" is not. Make sure not to use disallowed characters (e.g. whitespace) or consider URL-encoding the desired id.` ) @@ -253,11 +265,11 @@ export function validateService(endpoint: DidServiceEndpoint): void { * @param service The DID service to format. * @returns The blockchain-formatted DID service. */ -export function serviceToChain(service: DidServiceEndpoint): ChainEndpoint { - validateService(service) +export function serviceToChain(service: NewService): ChainDidService { + validateNewService(service) const { id, type, serviceEndpoint } = service return { - id: resourceIdToChain(id), + id: fragmentIdToChain(id), serviceTypes: type, urls: serviceEndpoint, } @@ -271,7 +283,7 @@ export function serviceToChain(service: DidServiceEndpoint): ChainEndpoint { */ export function serviceFromChain( encoded: Option -): DidServiceEndpoint { +): Service { const { id, serviceTypes, urls } = encoded.unwrap() return { id: `#${id.toUtf8()}`, @@ -280,18 +292,6 @@ export function serviceFromChain( } } -// ### EXTRINSICS types - -export type AuthorizeCallInput = { - did: DidUri - txCounter: AnyNumber - call: Extrinsic - submitter: KiltAddress - blockNumber?: AnyNumber -} - -// ### EXTRINSICS - export function publicKeyToChain( key: NewDidVerificationKey ): EncodedVerificationKey @@ -305,9 +305,9 @@ export function publicKeyToChain(key: NewDidEncryptionKey): EncodedEncryptionKey */ export function publicKeyToChain( key: NewDidVerificationKey | NewDidEncryptionKey -): EncodedKey { +): EncodedDidKey { // TypeScript can't infer type here, so we have to add a type assertion. - return { [key.type]: key.publicKey } as EncodedKey + return { [key.type]: key.publicKey } as EncodedDidKey } interface GetStoreTxInput { @@ -316,34 +316,31 @@ interface GetStoreTxInput { capabilityDelegation?: [NewDidVerificationKey] keyAgreement?: NewDidEncryptionKey[] - service?: DidServiceEndpoint[] + service?: NewService[] } -export type GetStoreTxSignCallback = ( - signData: Omit -) => Promise> - /** * Create a DID creation operation which includes the information provided. * - * The resulting extrinsic can be submitted to create an on-chain DID that has the provided keys and service endpoints. + * The resulting extrinsic can be submitted to create an on-chain DID that has the provided keys as verification methods and services. * - * A DID creation operation can contain at most 25 new service endpoints. - * Additionally, each service endpoint must respect the following conditions: - * - The service endpoint ID is at most 50 bytes long and is a valid URI fragment according to RFC#3986. - * - The service endpoint has at most 1 service type, with a value that is at most 50 bytes long. - * - The service endpoint has at most 1 URI, with a value that is at most 200 bytes long, and which is a valid URI according to RFC#3986. + * A DID creation operation can contain at most 25 new services. + * Additionally, each service must respect the following conditions: + * - The service ID is at most 50 bytes long and is a valid URI fragment according to RFC#3986. + * - The service has at most 1 service type, with a value that is at most 50 bytes long. + * - The service has at most 1 URI, with a value that is at most 200 bytes long, and which is a valid URI according to RFC#3986. * - * @param input The DID keys and services to store, also accepts DidDocument, so you can store a light DID for example. + * @param input The DID keys and services to store. * @param submitter The KILT address authorized to submit the creation operation. - * @param sign The sign callback. The authentication key has to be used. + * @param signers An array of signer interfaces. A suitable signer will be selected if available. + * The signer has to use the authentication public key encoded as a Kilt Address or as a hex string as its id. * * @returns The SubmittableExtrinsic for the DID creation operation. */ export async function getStoreTx( - input: GetStoreTxInput | DidDocument, + input: GetStoreTxInput, submitter: KiltAddress, - sign: GetStoreTxSignCallback + signers: readonly SignerInterface[] ): Promise { const api = ConfigService.get('api') @@ -386,12 +383,14 @@ export async function getStoreTx( api.consts.did.maxNumberOfServicesPerDid.toNumber() if (service.length > maxNumberOfServicesPerDid) { throw new SDKErrors.DidError( - `Cannot store more than ${maxNumberOfServicesPerDid} service endpoints per DID` + `Cannot store more than ${maxNumberOfServicesPerDid} services per DID` ) } const [authenticationKey] = authentication - const did = getAddressByKey(authenticationKey) + const did = getAddressFromVerificationMethod({ + publicKeyMultibase: keypairToMultibaseKey(authenticationKey), + }) const newAttestationKey = assertionMethod && @@ -419,19 +418,78 @@ export async function getStoreTx( .createType(api.tx.did.create.meta.args[0].type.toString(), apiInput) .toU8a() - const signature = await sign({ + const signer = Signers.selectSigner( + signers, + Signers.select.verifiableOnChain(), + Signers.select.bySignerId([ + did, + Crypto.u8aToHex(authenticationKey.publicKey), + ]) + ) + + if (!signer) { + throw new SDKErrors.NoSuitableSignerError( + 'Did creation requires an account signer where the address is equal to the Did identifier (did:kilt:{identifier}).', + { + availableSigners: signers, + signerRequirements: { + id: [did, Crypto.u8aToHex(authenticationKey.publicKey)], // TODO: we could compute the key id and accept it too, or accept light Dids as signers + algorithm: [Signers.DID_PALLET_SUPPORTED_ALGORITHMS], + }, + } + ) + } + + const signature = await signer.sign({ data: encoded, - keyRelationship: 'authentication', }) const encodedSignature = { - [signature.keyType]: signature.signature, + [authenticationKey.type]: signature, } as EncodedSignature return api.tx.did.create(encoded, encodedSignature) } -export interface SigningOptions { - sign: SignExtrinsicCallback - keyRelationship: VerificationKeyRelationship +/** + * Compiles an enum-type key-value pair representation of a signature created with a signer associated with a full DID verification method. Required for creating full DID signed extrinsics. + * + * @param input Signature and algorithm. + * @param input.algorithm Descriptor of the signature algorithm used by the signer. + * @param input.signature The signature generated by the signer. + * @returns Data restructured to allow SCALE encoding by polkadot api. + */ +export function didSignatureToChain({ + algorithm, + signature, +}: { + algorithm: string + signature: Uint8Array +}): EncodedSignature { + const lower = algorithm.toLowerCase() + const keyType = + lower === Signers.ALGORITHMS.ECRECOVER_SECP256K1_BLAKE2B.toLowerCase() + ? 'ecdsa' + : lower + if (!isValidVerificationMethodType(keyType)) { + throw new SDKErrors.DidError( + `encodedDidSignature requires a signature algorithm in ${Signers.DID_PALLET_SUPPORTED_ALGORITHMS}. A key of type "${algorithm}" was used instead` + ) + } + + return { [keyType]: signature } as EncodedSignature +} + +export type DidPalletSigner = SignerInterface< + Signers.DidPalletSupportedAlgorithms, + DidUrl +> + +export type AuthorizeCallInput = { + did: Did + txCounter: AnyNumber + call: Extrinsic + submitter: KiltAddress + blockNumber?: AnyNumber + signer: DidPalletSigner } /** @@ -440,8 +498,7 @@ export interface SigningOptions { * * @param params Object wrapping all input to the function. * @param params.did Full DID. - * @param params.keyRelationship DID key relationship to be used for authorization. - * @param params.sign The callback to interface with the key store managing the private key to be used. + * @param params.signer The signer interface with the key store managing the private key to be used. * @param params.call The call or extrinsic to be authorized. * @param params.txCounter The nonce or txCounter value for this extrinsic, which must be on larger than the current txCounter value of the authorizing full DID. * @param params.submitter Payment account allowed to submit this extrinsic and cover its fees, which will end up owning any deposit associated with newly created records. @@ -450,13 +507,12 @@ export interface SigningOptions { */ export async function generateDidAuthenticatedTx({ did, - keyRelationship, - sign, + signer, call, txCounter, submitter, blockNumber, -}: AuthorizeCallInput & SigningOptions): Promise { +}: AuthorizeCallInput): Promise { const api = ConfigService.get('api') const signableCall = api.registry.createType( @@ -469,34 +525,12 @@ export async function generateDidAuthenticatedTx({ blockNumber: blockNumber ?? (await api.query.system.number()), } ) - const signature = await sign({ + const signature = await signer.sign({ data: signableCall.toU8a(), - keyRelationship, - did, }) - const encodedSignature = { - [signature.keyType]: signature.signature, - } as EncodedSignature + const encodedSignature = didSignatureToChain({ + signature, + algorithm: signer.algorithm, + }) return api.tx.did.submitDidCall(signableCall, encodedSignature) } - -// ### Chain utils -/** - * Compiles an enum-type key-value pair representation of a signature created with a full DID verification method. Required for creating full DID signed extrinsics. - * - * @param key Object describing data associated with a public key. - * @param signature Object containing a signature generated with a full DID associated public key. - * @returns Data restructured to allow SCALE encoding by polkadot api. - */ -export function didSignatureToChain( - key: DidVerificationKey, - signature: Uint8Array -): EncodedSignature { - if (!verificationKeyTypes.includes(key.type)) { - throw new SDKErrors.DidError( - `encodedDidSignature requires a verification key. A key of type "${key.type}" was used instead` - ) - } - - return { [key.type]: signature } as EncodedSignature -} diff --git a/packages/did/src/Did.rpc.ts b/packages/did/src/Did.rpc.ts index da77219d6..272a74e99 100644 --- a/packages/did/src/Did.rpc.ts +++ b/packages/did/src/Did.rpc.ts @@ -7,74 +7,42 @@ import type { Option, Vec } from '@polkadot/types' import type { Codec } from '@polkadot/types/types' -import type { AccountId32, Hash } from '@polkadot/types/interfaces' import type { RawDidLinkedInfo, - KiltSupportDeposit, - DidDidDetailsDidPublicKeyDetails, DidDidDetails, DidServiceEndpointsDidEndpoint, PalletDidLookupLinkableAccountLinkableAccountId, } from '@kiltprotocol/augment-api' -import type { - Deposit, - DidDocument, - DidEncryptionKey, - DidKey, - DidServiceEndpoint, - DidUri, - DidVerificationKey, - KiltAddress, - UriFragment, - BN, -} from '@kiltprotocol/types' +import type { DidDocument, KiltAddress, Service } from '@kiltprotocol/types' +import { ss58Format } from '@kiltprotocol/utils' import { encodeAddress } from '@polkadot/keyring' import { ethereumEncode } from '@polkadot/util-crypto' -import { u8aToString } from '@polkadot/util' -import { Crypto, ss58Format } from '@kiltprotocol/utils' - -import { Address, SubstrateAddress } from './DidLinks/AccountLinks.chain.js' -import { getFullDidUri } from './Did.utils.js' -function fromChain(encoded: AccountId32): DidUri { - return getFullDidUri(Crypto.encodeAddress(encoded, ss58Format)) -} - -type RpcDocument = Pick< - DidDocument, - 'authentication' | 'assertionMethod' | 'capabilityDelegation' | 'keyAgreement' -> & { - lastTxCounter: BN - deposit: Deposit -} - -function depositFromChain(deposit: KiltSupportDeposit): Deposit { - return { - owner: Crypto.encodeAddress(deposit.owner, ss58Format), - amount: deposit.amount.toBn(), - } -} - -function didPublicKeyDetailsFromChain( - keyId: Hash, - keyDetails: DidDidDetailsDidPublicKeyDetails -): DidKey { - const key = keyDetails.key.isPublicEncryptionKey - ? keyDetails.key.asPublicEncryptionKey - : keyDetails.key.asPublicVerificationKey - return { - id: `#${keyId.toHex()}`, - type: key.type.toLowerCase() as DidKey['type'], - publicKey: key.value.toU8a(), - } -} - -function resourceIdToChain(id: UriFragment): string { - return id.replace(/^#/, '') -} - -function documentFromChain(encoded: DidDidDetails): RpcDocument { +import type { + Address, + SubstrateAddress, +} from './DidLinks/AccountLinks.chain.js' +import type { + ChainDidDetails, + ChainDidEncryptionKey, + ChainDidKey, + ChainDidVerificationKey, +} from './Did.chain.js' + +import { + depositFromChain, + fragmentIdToChain, + fromChain, + publicKeyFromChain, +} from './Did.chain.js' + +import { didKeyToVerificationMethod } from './Did.utils.js' +import { addKeypairAsVerificationMethod } from './DidDetails/DidDetails.js' + +function documentFromChain( + encoded: DidDidDetails +): Omit { const { publicKeys, authenticationKey, @@ -85,29 +53,28 @@ function documentFromChain(encoded: DidDidDetails): RpcDocument { deposit, } = encoded - const keys: Record = [...publicKeys.entries()] - .map(([keyId, keyDetails]) => - didPublicKeyDetailsFromChain(keyId, keyDetails) - ) + const keys: Record = [...publicKeys.entries()] + .map(([keyId, keyDetails]) => publicKeyFromChain(keyId, keyDetails)) .reduce((res, key) => { - res[resourceIdToChain(key.id)] = key + res[fragmentIdToChain(key.id)] = key return res }, {}) - const authentication = keys[authenticationKey.toHex()] as DidVerificationKey + const authentication = keys[ + authenticationKey.toHex() + ] as ChainDidVerificationKey - const didRecord: RpcDocument = { + const didRecord: ChainDidDetails = { authentication: [authentication], lastTxCounter: lastTxCounter.toBn(), deposit: depositFromChain(deposit), } - if (attestationKey.isSome) { - const key = keys[attestationKey.unwrap().toHex()] as DidVerificationKey + const key = keys[attestationKey.unwrap().toHex()] as ChainDidVerificationKey didRecord.assertionMethod = [key] } if (delegationKey.isSome) { - const key = keys[delegationKey.unwrap().toHex()] as DidVerificationKey + const key = keys[delegationKey.unwrap().toHex()] as ChainDidVerificationKey didRecord.capabilityDelegation = [key] } @@ -116,27 +83,25 @@ function documentFromChain(encoded: DidDidDetails): RpcDocument { ) if (keyAgreementKeyIds.length > 0) { didRecord.keyAgreement = keyAgreementKeyIds.map( - (id) => keys[id] as DidEncryptionKey + (id) => keys[id] as ChainDidEncryptionKey ) } return didRecord } -function serviceFromChain( - encoded: DidServiceEndpointsDidEndpoint -): DidServiceEndpoint { +function serviceFromChain(encoded: DidServiceEndpointsDidEndpoint): Service { const { id, serviceTypes, urls } = encoded return { - id: `#${u8aToString(id)}`, - type: serviceTypes.map(u8aToString), - serviceEndpoint: urls.map(u8aToString), + id: `#${id.toUtf8()}`, + type: serviceTypes.map((type) => type.toUtf8()), + serviceEndpoint: urls.map((url) => url.toUtf8()), } } function servicesFromChain( encoded: DidServiceEndpointsDidEndpoint[] -): DidServiceEndpoint[] { +): Service[] { return encoded.map((encodedValue) => serviceFromChain(encodedValue)) } @@ -170,14 +135,8 @@ function connectedAccountsFromChain( ) } -/** - * Web3Name is the type of nickname for a DID. - */ -export type Web3Name = string - -export interface DidInfo { +export interface LinkedDidInfo { document: DidDocument - web3Name?: Web3Name accounts: Address[] } @@ -191,30 +150,67 @@ export interface DidInfo { export function linkedInfoFromChain( encoded: Option, networkPrefix = ss58Format -): DidInfo { +): LinkedDidInfo { const { identifier, accounts, w3n, serviceEndpoints, details } = encoded.unwrap() - const didRec = documentFromChain(details) + const { + authentication, + keyAgreement, + capabilityDelegation, + assertionMethod, + } = documentFromChain(details) const did: DidDocument = { - uri: fromChain(identifier), - authentication: didRec.authentication, - assertionMethod: didRec.assertionMethod, - capabilityDelegation: didRec.capabilityDelegation, - keyAgreement: didRec.keyAgreement, + id: fromChain(identifier), + authentication: [authentication[0].id], + verificationMethod: [ + didKeyToVerificationMethod(fromChain(identifier), authentication[0].id, { + keyType: authentication[0].type, + publicKey: authentication[0].publicKey, + }), + ], + } + + if (keyAgreement !== undefined && keyAgreement.length > 0) { + keyAgreement.forEach(({ id, publicKey, type }) => { + addKeypairAsVerificationMethod( + did, + { id, publicKey, type }, + 'keyAgreement' + ) + }) + } + + if (assertionMethod !== undefined) { + const { id, type, publicKey } = assertionMethod[0] + addKeypairAsVerificationMethod( + did, + { id, publicKey, type }, + 'assertionMethod' + ) } - const service = servicesFromChain(serviceEndpoints) - if (service.length > 0) { - did.service = service + if (capabilityDelegation !== undefined) { + const { id, type, publicKey } = capabilityDelegation[0] + addKeypairAsVerificationMethod( + did, + { id, publicKey, type }, + 'capabilityDelegation' + ) + } + + const services = servicesFromChain(serviceEndpoints) + if (services.length > 0) { + did.service = services } - const web3Name = w3n.isNone ? undefined : w3n.unwrap().toHuman() + if (w3n.isSome) { + did.alsoKnownAs = [`w3n:${w3n.unwrap().toHuman()}`] + } const linkedAccounts = connectedAccountsFromChain(accounts, networkPrefix) return { document: did, - web3Name, accounts: linkedAccounts, } } diff --git a/packages/did/src/Did.signature.spec.ts b/packages/did/src/Did.signature.spec.ts index 449e69813..73e3ea40b 100644 --- a/packages/did/src/Did.signature.spec.ts +++ b/packages/did/src/Did.signature.spec.ts @@ -5,84 +5,99 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { randomAsHex, randomAsU8a } from '@polkadot/util-crypto' - import type { + KiltKeyringPair, + KeyringPair, DidDocument, - DidResourceUri, + DidUrl, DidSignature, - KeyringPair, - KiltKeyringPair, - NewLightDidVerificationKey, - SignCallback, + DereferenceResult, + SignerInterface, } from '@kiltprotocol/types' -import { Crypto, SDKErrors } from '@kiltprotocol/utils' + +import { Crypto, SDKErrors, Signers } from '@kiltprotocol/utils' +import { randomAsHex, randomAsU8a } from '@polkadot/util-crypto' + +import type { NewLightDidVerificationKey } from './DidDetails' import { makeSigningKeyTool } from '../../../tests/testUtils' import { isDidSignature, signatureFromJson, - signatureToJson, verifyDidSignature, } from './Did.signature' -import { keyToResolvedKey, resolveKey } from './DidResolver' -import * as Did from './index.js' +import { dereference, SupportedContentType } from './DidResolver/DidResolver' +import { keypairToMultibaseKey, multibaseKeyToDidKey, parse } from './Did.utils' +import { createLightDidDocument } from './DidDetails' -jest.mock('./DidResolver') +jest.mock('./DidResolver/DidResolver') jest - .mocked(keyToResolvedKey) - .mockImplementation(jest.requireActual('./DidResolver').keyToResolvedKey) + .mocked(dereference) + .mockImplementation(jest.requireActual('./DidResolver').dereference) describe('light DID', () => { let keypair: KiltKeyringPair let did: DidDocument - let sign: SignCallback - beforeAll(() => { - const keyTool = makeSigningKeyTool() + let authenticationSigner: SignerInterface + beforeAll(async () => { + const keyTool = await makeSigningKeyTool() keypair = keyTool.keypair - did = Did.createLightDidDocument({ + did = createLightDidDocument({ authentication: keyTool.authentication, }) - sign = keyTool.getSignCallback(did) + authenticationSigner = (await keyTool.getSigners(did)).find( + ({ id }) => id === did.id + did.authentication?.[0] + )! + expect(authenticationSigner).toBeDefined() }) beforeEach(() => { jest - .mocked(resolveKey) + .mocked(dereference) .mockReset() - .mockImplementation(async (didUri, keyRelationship = 'authentication') => - didUri.includes(keypair.address) - ? Did.keyToResolvedKey(did[keyRelationship]![0], did.uri) - : Promise.reject() + .mockImplementation( + async (didUrl): Promise> => { + const { address } = parse(didUrl) + if (address === keypair.address) { + return { + contentMetadata: {}, + dereferencingMetadata: { contentType: 'application/did+json' }, + contentStream: did, + } + } + return { + contentMetadata: {}, + dereferencingMetadata: { error: 'notFound' }, + } + } ) }) it('verifies did signature over string', async () => { const SIGNED_STRING = 'signed string' - const { signature, keyUri } = await sign({ + const signature = await authenticationSigner.sign({ data: Crypto.coToUInt8(SIGNED_STRING), - did: did.uri, - keyRelationship: 'authentication', }) + expect(signature).toBeInstanceOf(Uint8Array) await expect( verifyDidSignature({ message: SIGNED_STRING, signature, - keyUri, - expectedVerificationMethod: 'authentication', + signerUrl: authenticationSigner.id as DidUrl, + expectedVerificationRelationship: 'authentication', }) ).resolves.not.toThrow() }) it('deserializes old did signature (with `keyId` property) to new format', async () => { const SIGNED_STRING = 'signed string' - const { signature, keyUri } = signatureToJson( - await sign({ + const signature = Crypto.u8aToHex( + await authenticationSigner.sign({ data: Crypto.coToUInt8(SIGNED_STRING), - did: did.uri, - keyRelationship: 'authentication', }) ) + const keyUri = authenticationSigner.id as DidUrl + const oldSignature = { signature, keyId: keyUri, @@ -96,117 +111,110 @@ describe('light DID', () => { it('verifies did signature over bytes', async () => { const SIGNED_BYTES = Uint8Array.from([1, 2, 3, 4, 5]) - const { signature, keyUri } = await sign({ + const signature = await authenticationSigner.sign({ data: SIGNED_BYTES, - did: did.uri, - keyRelationship: 'authentication', }) await expect( verifyDidSignature({ message: SIGNED_BYTES, signature, - keyUri, - expectedVerificationMethod: 'authentication', + signerUrl: authenticationSigner.id as DidUrl, + expectedVerificationRelationship: 'authentication', }) ).resolves.not.toThrow() }) it('fails if relationship does not match', async () => { const SIGNED_STRING = 'signed string' - const { signature, keyUri } = await sign({ + const signature = await authenticationSigner.sign({ data: Crypto.coToUInt8(SIGNED_STRING), - did: did.uri, - keyRelationship: 'authentication', }) await expect( verifyDidSignature({ message: SIGNED_STRING, signature, - keyUri, - expectedVerificationMethod: 'assertionMethod', + signerUrl: authenticationSigner.id as DidUrl, + expectedVerificationRelationship: 'assertionMethod', }) ).rejects.toThrow() }) - it('fails if key id does not match', async () => { + it('fails if verification method id does not match', async () => { const SIGNED_STRING = 'signed string' - // eslint-disable-next-line prefer-const - let { signature, keyUri } = await sign({ + const signature = await authenticationSigner.sign({ data: Crypto.coToUInt8(SIGNED_STRING), - did: did.uri, - keyRelationship: 'authentication', }) - keyUri = `${keyUri}1a` - jest.mocked(resolveKey).mockRejectedValue(new Error('Key not found')) + jest.mocked(dereference).mockResolvedValue({ + contentMetadata: {}, + dereferencingMetadata: { error: 'notFound' }, + }) await expect( verifyDidSignature({ message: SIGNED_STRING, signature, - keyUri, - expectedVerificationMethod: 'authentication', + signerUrl: `${authenticationSigner.id}1a` as DidUrl, + expectedVerificationRelationship: 'authentication', }) ).rejects.toThrow() }) it('fails if signature does not match', async () => { const SIGNED_STRING = 'signed string' - const { signature, keyUri } = await sign({ + const signature = await authenticationSigner.sign({ data: Crypto.coToUInt8(SIGNED_STRING), - did: did.uri, - keyRelationship: 'authentication', }) await expect( verifyDidSignature({ message: SIGNED_STRING.substring(1), signature, - keyUri, - expectedVerificationMethod: 'authentication', + signerUrl: authenticationSigner.id as DidUrl, + expectedVerificationRelationship: 'authentication', }) ).rejects.toThrow() }) - it('fails if key id malformed', async () => { - jest.mocked(resolveKey).mockRestore() + it('fails if verification method id malformed', async () => { + jest.mocked(dereference).mockRestore() const SIGNED_STRING = 'signed string' - // eslint-disable-next-line prefer-const - let { signature, keyUri } = await sign({ + + const signature = await authenticationSigner.sign({ data: Crypto.coToUInt8(SIGNED_STRING), - did: did.uri, - keyRelationship: 'authentication', }) - // @ts-expect-error - keyUri = keyUri.replace('#', '?') await expect( verifyDidSignature({ message: SIGNED_STRING, signature, - keyUri, - expectedVerificationMethod: 'authentication', + signerUrl: authenticationSigner.id as DidUrl, + expectedVerificationRelationship: 'authentication', }) ).rejects.toThrow() }) it('does not verify if migrated to Full DID', async () => { - jest.mocked(resolveKey).mockRejectedValue(new Error('Migrated')) + jest.mocked(dereference).mockResolvedValue({ + contentMetadata: { + canonicalId: did.id, + }, + dereferencingMetadata: { contentType: 'application/did+json' }, + contentStream: { id: did.id }, + }) const SIGNED_STRING = 'signed string' - const { signature, keyUri } = await sign({ + const signature = await authenticationSigner.sign({ data: Crypto.coToUInt8(SIGNED_STRING), - did: did.uri, - keyRelationship: 'authentication', }) await expect( verifyDidSignature({ message: SIGNED_STRING, signature, - keyUri, - expectedVerificationMethod: 'authentication', + signerUrl: authenticationSigner.id as DidUrl, + expectedVerificationRelationship: 'authentication', }) ).rejects.toThrow() }) it('typeguard accepts legal signature objects', () => { const signature: DidSignature = { - keyUri: `${did.uri}${did.authentication[0].id}`, + keyUri: `${did.id}${did.authentication![0]}`, signature: randomAsHex(32), } expect(isDidSignature(signature)).toBe(true) @@ -214,37 +222,44 @@ describe('light DID', () => { it('detects signer expectation mismatch if signature is by unrelated did', async () => { const SIGNED_STRING = 'signed string' - const { signature, keyUri } = await sign({ + const signature = await authenticationSigner.sign({ data: Crypto.coToUInt8(SIGNED_STRING), - did: did.uri, - keyRelationship: 'authentication', }) - const expectedSigner = Did.createLightDidDocument({ - authentication: makeSigningKeyTool().authentication, - }).uri + const expectedSigner = createLightDidDocument({ + authentication: (await makeSigningKeyTool()).authentication, + }).id await expect( verifyDidSignature({ message: SIGNED_STRING, signature, - keyUri, + signerUrl: authenticationSigner.id as DidUrl, expectedSigner, - expectedVerificationMethod: 'authentication', + expectedVerificationRelationship: 'authentication', }) ).rejects.toThrow(SDKErrors.DidSubjectMismatchError) }) it('allows variations of the same light did', async () => { const SIGNED_STRING = 'signed string' - const { signature, keyUri } = await sign({ + const signature = await authenticationSigner.sign({ data: Crypto.coToUInt8(SIGNED_STRING), - did: did.uri, - keyRelationship: 'authentication', }) - const expectedSigner = Did.createLightDidDocument({ - authentication: did.authentication as [NewLightDidVerificationKey], + const authKey = did.verificationMethod?.find( + (vm) => vm.id === did.authentication?.[0] + ) + const expectedSignerAuthKey = multibaseKeyToDidKey( + authKey!.publicKeyMultibase + ) + const expectedSigner = createLightDidDocument({ + authentication: [ + { + publicKey: expectedSignerAuthKey.publicKey, + type: expectedSignerAuthKey.keyType, + }, + ] as [NewLightDidVerificationKey], keyAgreement: [{ type: 'x25519', publicKey: new Uint8Array(32).fill(1) }], service: [ { @@ -253,15 +268,15 @@ describe('light DID', () => { serviceEndpoint: ['http://example.com'], }, ], - }).uri + }).id await expect( verifyDidSignature({ message: SIGNED_STRING, signature, - keyUri, + signerUrl: authenticationSigner.id as DidUrl, expectedSigner, - expectedVerificationMethod: 'authentication', + expectedVerificationRelationship: 'authentication', }) ).resolves.not.toThrow() }) @@ -270,126 +285,147 @@ describe('light DID', () => { describe('full DID', () => { let keypair: KiltKeyringPair let did: DidDocument - let sign: SignCallback - beforeAll(() => { + let signer: SignerInterface + beforeAll(async () => { keypair = Crypto.makeKeypairFromSeed() did = { - uri: `did:kilt:${keypair.address}`, - authentication: [ + id: `did:kilt:${keypair.address}`, + authentication: ['#0x12345'], + verificationMethod: [ { + controller: `did:kilt:${keypair.address}`, id: '#0x12345', - type: 'sr25519', - publicKey: keypair.publicKey, + publicKeyMultibase: keypairToMultibaseKey(keypair), + type: 'Multikey', }, ], } - sign = async ({ data }) => ({ - signature: keypair.sign(data), - keyUri: `${did.uri}#0x12345`, - keyType: 'sr25519', + signer = await Signers.signerFromKeypair({ + keypair, + id: `${did.id}#0x12345`, + algorithm: 'Ed25519', }) }) beforeEach(() => { jest - .mocked(resolveKey) + .mocked(dereference) .mockReset() - .mockImplementation(async (didUri) => - didUri.includes(keypair.address) - ? Did.keyToResolvedKey(did.authentication[0], did.uri) - : Promise.reject() + .mockImplementation( + async (didUrl): Promise> => { + const { address } = parse(didUrl) + if (address === keypair.address) { + return { + contentMetadata: {}, + dereferencingMetadata: { contentType: 'application/did+json' }, + contentStream: did, + } + } + return { + contentMetadata: {}, + dereferencingMetadata: { error: 'notFound' }, + } + } ) }) it('verifies did signature over string', async () => { const SIGNED_STRING = 'signed string' - const { signature, keyUri } = await sign({ + const signature = await signer.sign({ data: Crypto.coToUInt8(SIGNED_STRING), - did: did.uri, - keyRelationship: 'authentication', }) await expect( verifyDidSignature({ message: SIGNED_STRING, signature, - keyUri, - expectedVerificationMethod: 'authentication', + signerUrl: signer.id, + expectedVerificationRelationship: 'authentication', }) ).resolves.not.toThrow() }) it('verifies did signature over bytes', async () => { const SIGNED_BYTES = Uint8Array.from([1, 2, 3, 4, 5]) - const { signature, keyUri } = await sign({ + const signature = await signer.sign({ data: SIGNED_BYTES, - did: did.uri, - keyRelationship: 'authentication', }) await expect( verifyDidSignature({ message: SIGNED_BYTES, signature, - keyUri, - expectedVerificationMethod: 'authentication', + signerUrl: signer.id, + expectedVerificationRelationship: 'authentication', }) ).resolves.not.toThrow() }) it('does not verify if deactivated', async () => { - jest.mocked(resolveKey).mockRejectedValue(new Error('Deactivated')) + jest.mocked(dereference).mockResolvedValue({ + contentMetadata: { deactivated: true }, + dereferencingMetadata: { contentType: 'application/did+json' }, + contentStream: { id: did.id }, + }) const SIGNED_STRING = 'signed string' - const { signature, keyUri } = await sign({ + const signature = await signer.sign({ data: Crypto.coToUInt8(SIGNED_STRING), - did: did.uri, - keyRelationship: 'authentication', }) await expect( verifyDidSignature({ message: SIGNED_STRING, signature, - keyUri, - expectedVerificationMethod: 'authentication', + signerUrl: signer.id, + expectedVerificationRelationship: 'authentication', }) ).rejects.toThrow() }) it('does not verify if not on chain', async () => { - jest.mocked(resolveKey).mockRejectedValue(new Error('Not on chain')) + jest.mocked(dereference).mockResolvedValue({ + contentMetadata: {}, + dereferencingMetadata: { error: 'notFound' }, + }) const SIGNED_STRING = 'signed string' - const { signature, keyUri } = await sign({ + const signature = await signer.sign({ data: Crypto.coToUInt8(SIGNED_STRING), - did: did.uri, - keyRelationship: 'authentication', }) await expect( verifyDidSignature({ message: SIGNED_STRING, signature, - keyUri, - expectedVerificationMethod: 'authentication', + signerUrl: signer.id, + expectedVerificationRelationship: 'authentication', }) ).rejects.toThrow() }) it('accepts signature of full did for light did if enabled', async () => { const SIGNED_STRING = 'signed string' - const { signature, keyUri } = await sign({ + const signature = await signer.sign({ data: Crypto.coToUInt8(SIGNED_STRING), - did: did.uri, - keyRelationship: 'authentication', }) - const expectedSigner = Did.createLightDidDocument({ - authentication: did.authentication as [NewLightDidVerificationKey], - }).uri + const authKey = did.verificationMethod?.find( + (vm) => vm.id === did.authentication?.[0] + ) + const expectedSignerAuthKey = multibaseKeyToDidKey( + authKey!.publicKeyMultibase + ) + const expectedSigner = createLightDidDocument({ + authentication: [ + { + publicKey: expectedSignerAuthKey.publicKey, + type: expectedSignerAuthKey.keyType, + }, + ] as [NewLightDidVerificationKey], + }).id await expect( verifyDidSignature({ message: SIGNED_STRING, signature, - keyUri, + signerUrl: signer.id, expectedSigner, - expectedVerificationMethod: 'authentication', + expectedVerificationRelationship: 'authentication', }) ).rejects.toThrow(SDKErrors.DidSubjectMismatchError) @@ -397,17 +433,17 @@ describe('full DID', () => { verifyDidSignature({ message: SIGNED_STRING, signature, - keyUri, + signerUrl: signer.id, expectedSigner, allowUpgraded: true, - expectedVerificationMethod: 'authentication', + expectedVerificationRelationship: 'authentication', }) ).resolves.not.toThrow() }) it('typeguard accepts legal signature objects', () => { const signature: DidSignature = { - keyUri: `${did.uri}${did.authentication[0].id}`, + keyUri: `${did.id}${did.authentication![0]}`, signature: randomAsHex(32), } expect(isDidSignature(signature)).toBe(true) @@ -420,7 +456,7 @@ describe('type guard', () => { keypair = Crypto.makeKeypairFromSeed() }) - it('rejects malformed key uri', () => { + it('rejects malformed signer URL', () => { let signature: DidSignature = { // @ts-expect-error keyUri: `did:kilt:${keypair.address}?mykey`, @@ -455,7 +491,7 @@ describe('type guard', () => { it('rejects unexpected signature type', () => { const signature: DidSignature = { - keyUri: `did:kilt:${keypair.address}#mykey` as DidResourceUri, + keyUri: `did:kilt:${keypair.address}#mykey` as DidUrl, signature: '', } expect(isDidSignature(signature)).toBe(false) @@ -468,7 +504,7 @@ describe('type guard', () => { it('rejects incomplete objects', () => { let signature: DidSignature = { - keyUri: `did:kilt:${keypair.address}#mykey` as DidResourceUri, + keyUri: `did:kilt:${keypair.address}#mykey` as DidUrl, // @ts-expect-error signature: undefined, } @@ -484,9 +520,9 @@ describe('type guard', () => { signature: randomAsHex(32), } expect(isDidSignature(signature)).toBe(false) - // @ts-expect-error signature = { - keyUri: `did:kilt:${keypair.address}#mykey` as DidResourceUri, + // @ts-expect-error + keyUri: `did:kilt:${keypair.address}#mykey`, } expect(isDidSignature(signature)).toBe(false) // @ts-expect-error diff --git a/packages/did/src/Did.signature.ts b/packages/did/src/Did.signature.ts index 07a853d79..bcab953db 100644 --- a/packages/did/src/Did.signature.ts +++ b/packages/did/src/Did.signature.ts @@ -7,77 +7,81 @@ import { isHex } from '@polkadot/util' -import { - DidResolveKey, - DidResourceUri, +import type { + DereferenceDidUrl, + DidDocument, DidSignature, - DidUri, + Did, + DidUrl, + SignatureVerificationRelationship, SignResponseData, - VerificationKeyRelationship, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + SignCallback, } from '@kiltprotocol/types' + import { Crypto, SDKErrors } from '@kiltprotocol/utils' -import { resolveKey } from './DidResolver/index.js' -import { parse, validateUri } from './Did.utils.js' +import { multibaseKeyToDidKey, parse, validateDid } from './Did.utils.js' +import { dereference } from './DidResolver/DidResolver.js' export type DidSignatureVerificationInput = { message: string | Uint8Array signature: Uint8Array - keyUri: DidResourceUri - expectedSigner?: DidUri + signerUrl: DidUrl + expectedSigner?: Did allowUpgraded?: boolean - expectedVerificationMethod?: VerificationKeyRelationship - didResolveKey?: DidResolveKey + expectedVerificationRelationship?: SignatureVerificationRelationship + dereferenceDidUrl?: DereferenceDidUrl['dereference'] } // Used solely for retro-compatibility with previously-generated DID signatures. // It is reasonable to think that it will be removed at some point in the future. -type OldDidSignature = Pick & { - keyId: DidSignature['keyUri'] +type LegacyDidSignature = { + signature: string + keyId: DidUrl } -/** - * Checks whether the input is a valid DidSignature object, consisting of a signature as hex and the uri of the signing key. - * Does not cryptographically verify the signature itself! - * - * @param input Arbitrary input. - */ function verifyDidSignatureDataStructure( - input: DidSignature | OldDidSignature + input: DidSignature | LegacyDidSignature ): void { - const keyUri = 'keyUri' in input ? input.keyUri : input.keyId + const verificationMethodUrl = (() => { + if ('keyId' in input) { + return input.keyId + } + return input.keyUri + })() if (!isHex(input.signature)) { throw new SDKErrors.SignatureMalformedError( `Expected signature as a hex string, got ${input.signature}` ) } - validateUri(keyUri, 'ResourceUri') + validateDid(verificationMethodUrl, 'DidUrl') } /** - * Verify a DID signature given the key URI of the signature. + * Verify a DID signature given the signer's DID URL (i.e., DID + verification method ID). * A signature verification returns false if a migrated and then deleted DID is used. * * @param input Object wrapping all input. * @param input.message The message that was signed. * @param input.signature Signature bytes. - * @param input.keyUri DID URI of the key used for signing. - * @param input.expectedSigner If given, verification fails if the controller of the signing key is not the expectedSigner. + * @param input.signerUrl DID URL of the verification method used for signing. + * @param input.expectedSigner If given, verification fails if the controller of the signing verification method is not the expectedSigner. * @param input.allowUpgraded If `expectedSigner` is a light DID, setting this flag to `true` will accept signatures by the corresponding full DID. - * @param input.expectedVerificationMethod Which relationship to the signer DID the key must have. - * @param input.didResolveKey Allows specifying a custom DID key resolve. Defaults to the built-in [[resolveKey]]. + * @param input.expectedVerificationRelationship Which relationship to the signer DID the verification method must have. + * @param input.dereferenceDidUrl Allows specifying a custom DID dereferenced. Defaults to the built-in {@link dereference}. */ export async function verifyDidSignature({ message, signature, - keyUri, + signerUrl, expectedSigner, allowUpgraded = false, - expectedVerificationMethod, - didResolveKey = resolveKey, + expectedVerificationRelationship, + dereferenceDidUrl = dereference as DereferenceDidUrl['dereference'], }: DidSignatureVerificationInput): Promise { - // checks if key uri points to the right did; alternatively we could check the key's controller - const signer = parse(keyUri) + // checks if signer URL points to the right did; alternatively we could check the verification method's controller + const signer = parse(signerUrl) if (expectedSigner && expectedSigner !== signer.did) { // check for allowable exceptions const expected = parse(expectedSigner) @@ -86,7 +90,7 @@ export async function verifyDidSignature({ expected.address === signer.address && expected.version === signer.version // EITHER: signer is a full did and we allow signatures by corresponding full did const allowedUpgrade = allowUpgraded && signer.type === 'full' - // OR: both are light dids and their auth key type matches + // OR: both are light dids and their auth verification method key type matches const keyTypeMatch = signer.type === 'light' && expected.type === 'light' && @@ -95,14 +99,56 @@ export async function verifyDidSignature({ throw new SDKErrors.DidSubjectMismatchError(signer.did, expected.did) } } + if (signer.fragment === undefined) { + throw new SDKErrors.DidError( + `Signer DID URL "${signerUrl}" does not point to a valid resource under the signer's DID Document.` + ) + } - const { publicKey } = await didResolveKey(keyUri, expectedVerificationMethod) + const { contentStream, contentMetadata } = await dereferenceDidUrl( + signer.did, + {} + ) + if (contentStream === undefined) { + throw new SDKErrors.SignatureUnverifiableError( + `Error validating the DID signature. Cannot fetch DID Document or the verification method for "${signerUrl}".` + ) + } + // If the light DID has been upgraded we consider the old key ID invalid, the full DID should be used instead. + if (contentMetadata.canonicalId !== undefined) { + throw new SDKErrors.DidResolveUpgradedDidError() + } + if (contentMetadata.deactivated) { + throw new SDKErrors.DidDeactivatedError() + } + const didDocument = contentStream as DidDocument + const verificationMethod = didDocument.verificationMethod?.find( + ({ controller, id }) => + controller === didDocument.id && id === signer.fragment + ) + if (verificationMethod === undefined) { + throw new SDKErrors.DidNotFoundError('Verification method not found in DID') + } + // Check whether the provided verification method ID is included in the given verification relationship, if provided. + if ( + expectedVerificationRelationship && + !didDocument[expectedVerificationRelationship]?.some( + (id) => id === verificationMethod.id + ) + ) { + throw new SDKErrors.DidError( + `No verification method "${signer.fragment}" for the verification method "${expectedVerificationRelationship}"` + ) + } + const { publicKey } = multibaseKeyToDidKey( + verificationMethod.publicKeyMultibase + ) Crypto.verify(message, signature, publicKey) } /** - * Type guard assuring that the input is a valid DidSignature object, consisting of a signature as hex and the uri of the signing key. + * Type guard assuring that the input is a valid DidSignature object, consisting of a signature as hex and the DID URL of the signer's verification method. * Does not cryptographically verify the signature itself! * * @param input Arbitrary input. @@ -110,7 +156,7 @@ export async function verifyDidSignature({ */ export function isDidSignature( input: unknown -): input is DidSignature | OldDidSignature { +): input is DidSignature | LegacyDidSignature { try { verifyDidSignatureDataStructure(input as DidSignature) return true @@ -120,31 +166,41 @@ export function isDidSignature( } /** - * Transforms the output of a [[SignCallback]] into the [[DidSignature]] format suitable for json-based data exchange. + * Transforms the output of a {@link SignCallback} into the {@link DidSignature} format suitable for json-based data exchange. * - * @param input Signature data returned from the [[SignCallback]]. + * @param input Signature data returned from the {@link SignCallback}. * @param input.signature Signature bytes. - * @param input.keyUri DID URI of the key used for signing. - * @returns A [[DidSignature]] object where signature is hex-encoded. + * @param input.verificationMethod The verification method used to generate the signature. + * @returns A {@link DidSignature} object where signature is hex-encoded. */ export function signatureToJson({ signature, - keyUri, + verificationMethod, }: SignResponseData): DidSignature { - return { signature: Crypto.u8aToHex(signature), keyUri } + return { + signature: Crypto.u8aToHex(signature), + keyUri: `${verificationMethod.controller}${verificationMethod.id}`, + } } /** - * Deserializes a [[DidSignature]] for signature verification. + * Deserializes a {@link DidSignature} for signature verification. * Handles backwards compatibility to an older version of the interface where the `keyUri` property was called `keyId`. * - * @param input A [[DidSignature]] object. + * @param input A {@link DidSignature} object. * @returns The deserialized DidSignature where the signature is represented as a Uint8Array. */ export function signatureFromJson( - input: DidSignature | OldDidSignature -): Pick { - const keyUri = 'keyUri' in input ? input.keyUri : input.keyId + input: DidSignature | LegacyDidSignature +): Pick & { + keyUri: DidUrl +} { + const keyUri = (() => { + if ('keyId' in input) { + return input.keyId + } + return input.keyUri + })() const signature = Crypto.coToUInt8(input.signature) return { signature, keyUri } } diff --git a/packages/did/src/Did.utils.ts b/packages/did/src/Did.utils.ts index 2cc1eaf63..917c800ca 100644 --- a/packages/did/src/Did.utils.ts +++ b/packages/did/src/Did.utils.ts @@ -5,16 +5,21 @@ * found in the LICENSE file in the root directory of this source tree. */ +import { u8aToString } from '@polkadot/util' import { blake2AsU8a, encodeAddress } from '@polkadot/util-crypto' - -import { - DidResourceUri, - DidUri, - DidVerificationKey, +import type { + Did, + DidUrl, + KeyringPair, KiltAddress, UriFragment, + VerificationMethod, } from '@kiltprotocol/types' import { DataUtils, SDKErrors, ss58Format } from '@kiltprotocol/utils' +import { decode as multibaseDecode, encode as multibaseEncode } from 'multibase' + +import type { DidVerificationMethodType } from './DidDetails/DidDetails.js' +import { parseDocumentFromLightDid } from './DidDetails/LightDidDetails.js' // The latest version for KILT light DIDs. const LIGHT_DID_LATEST_VERSION = 1 @@ -22,7 +27,7 @@ const LIGHT_DID_LATEST_VERSION = 1 // The latest version for KILT full DIDs. const FULL_DID_LATEST_VERSION = 1 -// NOTICE: The following regex patterns must be kept in sync with DidUri type in @kiltprotocol/types +// NOTICE: The following regex patterns must be kept in sync with `Did` type in @kiltprotocol/types // Matches the following full DIDs // - did:kilt: @@ -39,40 +44,60 @@ const LIGHT_KILT_DID_REGEX = /^did:kilt:light:(?[0-9]{2})(?
4[1-9a-km-zA-HJ-NP-Z]{47,48})(:(?.+?))?(?#[^#\n]+)?$/ type IDidParsingResult = { - did: DidUri + did: Did version: number type: 'light' | 'full' address: KiltAddress + queryParameters?: Record fragment?: UriFragment authKeyTypeEncoding?: string encodedDetails?: string } +// Exports the params section of a DID URL as a map. +// If multiple keys are present, only the first one is returned. +// If no query params are present, returns undefined. +function exportQueryParamsFromDidUrl( + did: DidUrl +): Record | undefined { + try { + const urlified = new URL(did) + return urlified.searchParams.size > 0 + ? Object.fromEntries(urlified.searchParams) + : undefined + } catch { + throw new SDKErrors.InvalidDidFormatError(did) + } +} + /** - * Parses a KILT DID uri and returns the information contained within in a structured form. + * Parses a KILT DID or a DID URL and returns the information contained within in a structured form. * - * @param didUri A KILT DID uri as a string. - * @returns Object containing information extracted from the DID uri. + * @param did A KILT DID or a DID URL as a string. + * @returns Object containing information extracted from the input string. */ -export function parse(didUri: DidUri | DidResourceUri): IDidParsingResult { - let matches = FULL_KILT_DID_REGEX.exec(didUri)?.groups +export function parse(did: Did | DidUrl): IDidParsingResult { + // Then we check if it conforms to either a full or a light DID. + let matches = FULL_KILT_DID_REGEX.exec(did)?.groups if (matches) { const { version: versionString, fragment } = matches const address = matches.address as KiltAddress const version = versionString ? parseInt(versionString, 10) : FULL_DID_LATEST_VERSION + const queryParameters = exportQueryParamsFromDidUrl(did as DidUrl) return { - did: didUri.replace(fragment || '', '') as DidUri, + did: did.replace(fragment || '', '') as Did, version, type: 'full', address, + queryParameters, fragment: fragment === '#' ? undefined : (fragment as UriFragment), } } // If it fails to parse full DID, try with light DID - matches = LIGHT_KILT_DID_REGEX.exec(didUri)?.groups + matches = LIGHT_KILT_DID_REGEX.exec(did)?.groups if (matches) { const { authKeyType, @@ -84,57 +109,173 @@ export function parse(didUri: DidUri | DidResourceUri): IDidParsingResult { const version = versionString ? parseInt(versionString, 10) : LIGHT_DID_LATEST_VERSION + const queryParameters = exportQueryParamsFromDidUrl(did as DidUrl) return { - did: didUri.replace(fragment || '', '') as DidUri, + did: did.replace(fragment || '', '') as Did, version, type: 'light', address, + queryParameters, fragment: fragment === '#' ? undefined : (fragment as UriFragment), encodedDetails, authKeyTypeEncoding: authKeyType, } } - throw new SDKErrors.InvalidDidFormatError(didUri) + throw new SDKErrors.InvalidDidFormatError(did) +} + +type DecodedVerificationMethod = { + publicKey: Uint8Array + keyType: DidVerificationMethodType +} + +const MULTICODEC_ECDSA_PREFIX = 0xe7 +const MULTICODEC_X25519_PREFIX = 0xec +const MULTICODEC_ED25519_PREFIX = 0xed +const MULTICODEC_SR25519_PREFIX = 0xef + +const multicodecPrefixes: Record = + { + [MULTICODEC_ECDSA_PREFIX]: ['ecdsa', 33], + [MULTICODEC_X25519_PREFIX]: ['x25519', 32], + [MULTICODEC_ED25519_PREFIX]: ['ed25519', 32], + [MULTICODEC_SR25519_PREFIX]: ['sr25519', 32], + } +const multicodecReversePrefixes: Record = { + ecdsa: MULTICODEC_ECDSA_PREFIX, + x25519: MULTICODEC_X25519_PREFIX, + ed25519: MULTICODEC_ED25519_PREFIX, + sr25519: MULTICODEC_SR25519_PREFIX, } /** - * Returns true if both didA and didB refer to the same DID subject, i.e., whether they have the same identifier as specified in the method spec. + * Decode a Multikey representation of a verification method into its fundamental components: the public key and the key type. * - * @param didA A KILT DID uri as a string. - * @param didB A second KILT DID uri as a string. - * @returns Whether didA and didB refer to the same DID subject. + * @param publicKeyMultibase The verification method's public key in Multikey format (i.e., multicodec-prefixed, then multibase encoded). + * @returns The decoded public key and {@link DidVerificationMethodType}. */ -export function isSameSubject(didA: DidUri, didB: DidUri): boolean { - return parse(didA).address === parse(didB).address +export function multibaseKeyToDidKey( + publicKeyMultibase: VerificationMethod['publicKeyMultibase'] +): DecodedVerificationMethod { + const decodedMulticodecPublicKey = multibaseDecode(publicKeyMultibase) + const [keyTypeFlag, publicKey] = [ + decodedMulticodecPublicKey.subarray(0, 1)[0], + decodedMulticodecPublicKey.subarray(1), + ] + const [keyType, expectedPublicKeyLength] = multicodecPrefixes[keyTypeFlag] + if (keyType === undefined) { + throw new SDKErrors.DidError( + `Cannot decode key type for multibase key "${publicKeyMultibase}".` + ) + } + if (publicKey.length !== expectedPublicKeyLength) { + throw new SDKErrors.DidError( + `Key of type "${keyType}" is expected to be ${expectedPublicKeyLength} bytes long. Provided key is ${publicKey.length} bytes long instead.` + ) + } + return { + keyType, + publicKey, + } } -export type EncodedVerificationKey = - | { sr25519: Uint8Array } - | { ed25519: Uint8Array } - | { ecdsa: Uint8Array } - -export type EncodedEncryptionKey = { x25519: Uint8Array } +/** + * Calculate the Multikey representation of a keypair given its type and public key. + * + * @param keypair The input keypair to encode as Multikey. + * @param keypair.type The keypair {@link DidVerificationMethodType}. + * @param keypair.publicKey The keypair public key. + * @returns The Multikey representation (i.e., multicodec-prefixed, then multibase encoded) of the provided keypair. + */ +export function keypairToMultibaseKey({ + type, + publicKey, +}: Pick & { + type: DidVerificationMethodType +}): VerificationMethod['publicKeyMultibase'] { + const multiCodecPublicKeyPrefix = multicodecReversePrefixes[type] + if (multiCodecPublicKeyPrefix === undefined) { + throw new SDKErrors.DidError( + `The provided key type "${type}" is not supported.` + ) + } + const expectedPublicKeySize = multicodecPrefixes[multiCodecPublicKeyPrefix][1] + if (publicKey.length !== expectedPublicKeySize) { + throw new SDKErrors.DidError( + `Key of type "${type}" is expected to be ${expectedPublicKeySize} bytes long. Provided key is ${publicKey.length} bytes long instead.` + ) + } + const multiCodecPublicKey = [multiCodecPublicKeyPrefix, ...publicKey] + return u8aToString( + multibaseEncode('base58btc', Uint8Array.from(multiCodecPublicKey)) + ) as `z${string}` +} -export type EncodedKey = EncodedVerificationKey | EncodedEncryptionKey +/** + * Convert a DID key to a `MultiKey` verification method. + * + * @param controller The verification method controller's DID. + * @param id The verification method ID. + * @param key The DID key to export as a verification method. + * @param key.keyType The key type. + * @param key.publicKey The public component of the key. + * @returns The provided key encoded as a {@link VerificationMethod}. + */ +export function didKeyToVerificationMethod( + controller: VerificationMethod['controller'], + id: VerificationMethod['id'], + { keyType, publicKey }: DecodedVerificationMethod +): VerificationMethod { + const multiCodecPublicKeyPrefix = multicodecReversePrefixes[keyType] + if (multiCodecPublicKeyPrefix === undefined) { + throw new SDKErrors.DidError( + `Provided key type "${keyType}" not supported.` + ) + } + const expectedPublicKeySize = multicodecPrefixes[multiCodecPublicKeyPrefix][1] + if (publicKey.length !== expectedPublicKeySize) { + throw new SDKErrors.DidError( + `Key of type "${keyType}" is expected to be ${expectedPublicKeySize} bytes long. Provided key is ${publicKey.length} bytes long instead.` + ) + } + const multiCodecPublicKey = [multiCodecPublicKeyPrefix, ...publicKey] + return { + controller, + id, + type: 'Multikey', + publicKeyMultibase: u8aToString( + multibaseEncode('base58btc', Uint8Array.from(multiCodecPublicKey)) + ) as `z${string}`, + } +} -export type EncodedSignature = EncodedVerificationKey +/** + * Returns true if both didA and didB refer to the same DID subject, i.e., whether they have the same identifier as specified in the method spec. + * + * @param didA A KILT DID as a string. + * @param didB A second KILT DID as a string. + * @returns Whether didA and didB refer to the same DID subject. + */ +export function isSameSubject(didA: Did, didB: Did): boolean { + return parse(didA).address === parse(didB).address +} /** - * Checks that a string (or other input) is a valid KILT DID uri with or without a URI fragment. + * Checks that a string (or other input) is a valid KILT DID with or without a trailing fragment. * Throws otherwise. * * @param input Arbitrary input. - * @param expectType `ResourceUri` if the URI is expected to have a fragment (following '#'), `Did` if it is expected not to have one. Default allows both. + * @param expectType `Did` if the the input is expected to have a fragment (following '#'), `DidUrl` if it is expected not to have one. Default allows both. */ -export function validateUri( +export function validateDid( input: unknown, - expectType?: 'Did' | 'ResourceUri' + expectType?: 'Did' | 'DidUrl' ): void { if (typeof input !== 'string') { throw new TypeError(`DID string expected, got ${typeof input}`) } - const { address, fragment } = parse(input as DidUri) + const { address, fragment, type } = parse(input as DidUrl) if ( fragment && @@ -143,31 +284,41 @@ export function validateUri( (typeof expectType === 'boolean' && expectType === false)) ) { throw new SDKErrors.DidError( - 'Expected a Kilt DidUri but got a DidResourceUri (containing a #fragment)' + 'Expected a Kilt Did but got a DidUrl (containing a #fragment)' ) } - if (!fragment && expectType === 'ResourceUri') { + if (!fragment && expectType === 'DidUrl') { throw new SDKErrors.DidError( - 'Expected a Kilt DidResourceUri (containing a #fragment) but got a DidUri' + 'Expected a Kilt DidUrl (containing a #fragment) but got a Did' ) } DataUtils.verifyKiltAddress(address) + + // Check if the encoded details represent something that can be decoded, or just random jargon, in which case the DID is not really a valid one. + if (type === 'light') { + try { + parseDocumentFromLightDid(input as Did, false) + } catch { + throw new SDKErrors.DidError( + `The provided light DID "${input}" contains incorrect base58-encoded details.` + ) + } + } } /** - * Internal: derive the address part of the DID when it is created from authentication key. + * Internal: derive the address part of the DID when it is created from the provided authentication verification method. * - * @param input The authentication key. - * @param input.publicKey The public key. - * @param input.type The type of the key. + * @param input The authentication verification method. + * @param input.publicKeyMultibase The `publicKeyMultibase` value of the verification method. * @returns The expected address of the DID. */ -export function getAddressByKey({ - publicKey, - type, -}: Pick): KiltAddress { +export function getAddressFromVerificationMethod({ + publicKeyMultibase, +}: Pick): KiltAddress { + const { keyType: type, publicKey } = multibaseKeyToDidKey(publicKeyMultibase) if (type === 'ed25519' || type === 'sr25519') { return encodeAddress(publicKey, ss58Format) } @@ -179,32 +330,32 @@ export function getAddressByKey({ } /** - * Builds the URI a light DID will have after it’s stored on the blockchain. + * Builds the full DID a light DID will have after it’s stored on the blockchain. * - * @param didOrAddress The URI of the light DID. Internally it’s used with the DID "address" as well. - * @param version The version of the DID URI to use. - * @returns The expected full DID URI. + * @param didOrAddress The light DID. Internally it’s used with the DID "address" as well. + * @param version The version of the DID to use. + * @returns The expected full DID. */ -export function getFullDidUri( - didOrAddress: DidUri | KiltAddress, +export function getFullDid( + didOrAddress: Did | KiltAddress, version = FULL_DID_LATEST_VERSION -): DidUri { +): Did { const address = DataUtils.isKiltAddress(didOrAddress) ? didOrAddress - : parse(didOrAddress as DidUri).address + : parse(didOrAddress as Did).address const versionString = version === 1 ? '' : `v${version}` - return `did:kilt:${versionString}${address}` as DidUri + return `did:kilt:${versionString}${address}` as Did } /** - * Builds the URI of a full DID if it is created with the authentication key provided. + * Builds the of a full DID if it is created with the authentication verification method derived from the provided public key. * - * @param key The key that will be used as DID authentication key. - * @returns The expected full DID URI. + * @param verificationMethod The DID verification method. + * @returns The expected full DID. */ -export function getFullDidUriFromKey( - key: Pick -): DidUri { - const address = getAddressByKey(key) - return getFullDidUri(address) +export function getFullDidFromVerificationMethod( + verificationMethod: Pick +): Did { + const address = getAddressFromVerificationMethod(verificationMethod) + return getFullDid(address) } diff --git a/packages/did/src/DidDetails/DidDetails.spec.ts b/packages/did/src/DidDetails/DidDetails.spec.ts deleted file mode 100644 index 26302a1f6..000000000 --- a/packages/did/src/DidDetails/DidDetails.spec.ts +++ /dev/null @@ -1,122 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import { DidDocument, DidKey, DidServiceEndpoint } from '@kiltprotocol/types' - -import { getService, getKey, getKeys } from './DidDetails' - -const minimalDid: DidDocument = { - uri: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', - authentication: [ - { - id: '#authentication', - publicKey: new Uint8Array(0), - type: 'sr25519', - }, - ], -} - -const maximalDid: DidDocument = { - uri: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', - authentication: [ - { - id: '#authentication', - publicKey: new Uint8Array(0), - type: 'sr25519', - }, - ], - assertionMethod: [ - { - id: '#assertionMethod', - publicKey: new Uint8Array(0), - type: 'ed25519', - }, - ], - capabilityDelegation: [ - { - id: '#capabilityDelegation', - publicKey: new Uint8Array(0), - type: 'ecdsa', - }, - ], - keyAgreement: [ - { - id: '#keyAgreement', - publicKey: new Uint8Array(0), - type: 'x25519', - }, - ], - service: [ - { - id: '#service', - type: ['foo'], - serviceEndpoint: ['https://example.com/'], - }, - ], -} - -describe('DidDetais', () => { - describe('getKeys', () => { - it('should get keys of a minimal DID', async () => { - expect(getKeys(minimalDid)).toEqual([ - { - id: '#authentication', - publicKey: new Uint8Array(0), - type: 'sr25519', - }, - ]) - }) - it('should get keys of a maximal DID', async () => { - expect(getKeys(maximalDid)).toEqual([ - { - id: '#authentication', - publicKey: new Uint8Array(0), - type: 'sr25519', - }, - { - id: '#assertionMethod', - publicKey: new Uint8Array(0), - type: 'ed25519', - }, - { - id: '#capabilityDelegation', - publicKey: new Uint8Array(0), - type: 'ecdsa', - }, - { - id: '#keyAgreement', - publicKey: new Uint8Array(0), - type: 'x25519', - }, - ]) - }) - }) - describe('getKey', () => { - it('should get key by ID', async () => { - expect(getKey(maximalDid, '#capabilityDelegation')).toEqual({ - id: '#capabilityDelegation', - publicKey: new Uint8Array(0), - type: 'ecdsa', - }) - }) - it('should return undefined when key not found', async () => { - expect(getKey(minimalDid, '#capabilityDelegation')).toEqual(undefined) - }) - }) - describe('getService', () => { - it('should get endpoint by ID', async () => { - expect(getService(maximalDid, '#service')).toEqual({ - id: '#service', - serviceEndpoint: ['https://example.com/'], - type: ['foo'], - }) - }) - it('should return undefined when key not found', async () => { - expect(getService(minimalDid, '#service')).toEqual(undefined) - }) - }) -}) diff --git a/packages/did/src/DidDetails/DidDetails.ts b/packages/did/src/DidDetails/DidDetails.ts index 0af556564..fa6153480 100644 --- a/packages/did/src/DidDetails/DidDetails.ts +++ b/packages/did/src/DidDetails/DidDetails.ts @@ -7,51 +7,162 @@ import type { DidDocument, - DidKey, - DidServiceEndpoint, + Service, + UriFragment, + VerificationMethod, + VerificationRelationship, } from '@kiltprotocol/types' +import { didKeyToVerificationMethod } from '../Did.utils.js' + +/** + * Possible types for a DID verification method used in digital signatures. + */ +const signingMethodTypesC = ['sr25519', 'ed25519', 'ecdsa'] as const +export const signingMethodTypes = signingMethodTypesC as unknown as string[] +export type DidSigningMethodType = typeof signingMethodTypesC[number] +// `as unknown as string[]` is a workaround for https://github.com/microsoft/TypeScript/issues/26255 + +/** + * Type guard checking whether the provided input string represents one of the supported signing verification types. + * + * @param input The input string. + * @returns Whether the input string is an instance of {@link DidSigningMethodType}. + */ +export function isValidVerificationMethodType( + input: string +): input is DidSigningMethodType { + return signingMethodTypes.includes(input) +} + +/** + * Possible types for a DID verification method used in encryption. + */ +const encryptionMethodTypesC = ['x25519'] as const +export const encryptionMethodTypes = + encryptionMethodTypesC as unknown as string[] +export type DidEncryptionMethodType = typeof encryptionMethodTypesC[number] + +/** + * Type guard checking whether the provided input string represents one of the supported encryption verification types. + * + * @param input The input string. + * @returns Whether the input string is an instance of {@link DidEncryptionMethodType}. + */ +export function isValidEncryptionMethodType( + input: string +): input is DidEncryptionMethodType { + return encryptionMethodTypes.includes(input) +} + +export type DidVerificationMethodType = + | DidSigningMethodType + | DidEncryptionMethodType + /** - * Gets all public keys associated with this DID. + * Type guard checking whether the provided input string represents one of the supported signing or encryption verification types. * - * @param did The DID data. - * @returns Array of public keys. + * @param input The input string. + * @returns Whether the input string is an instance of {@link DidSigningMethodType}. */ -export function getKeys( - did: Partial & Pick -): DidKey[] { - return [ - ...did.authentication, - ...(did.assertionMethod || []), - ...(did.capabilityDelegation || []), - ...(did.keyAgreement || []), - ] +export function isValidDidVerificationType( + input: string +): input is DidSigningMethodType { + return ( + isValidVerificationMethodType(input) || isValidEncryptionMethodType(input) + ) } +export type NewVerificationMethod = Omit +export type NewService = Service + /** - * Returns a key with a given id, if associated with this DID. + * Type guard checking whether the provided input represents one of the supported verification relationships. * - * @param did The DID data. - * @param id Key id (not the full key uri). - * @returns The respective public key data or undefined. + * @param input The input. + * @returns Whether the input is an instance of {@link VerificationRelationship}. + */ +export function isValidVerificationRelationship( + input: unknown +): input is VerificationRelationship { + switch (input as VerificationRelationship) { + case 'assertionMethod': + case 'authentication': + case 'capabilityDelegation': + case 'keyAgreement': + return true + default: + return false + } +} + +/** + * Type of a new key material to add under a DID. + */ +export type BaseNewDidKey = { + publicKey: Uint8Array + type: string +} + +/** + * Type of a new verification key to add under a DID. */ -export function getKey( - did: Partial & Pick, - id: DidKey['id'] -): DidKey | undefined { - return getKeys(did).find((key) => key.id === id) +export type NewDidVerificationKey = BaseNewDidKey & { + type: DidSigningMethodType } /** - * Returns a service endpoint with a given id, if associated with this DID. + * Type of a new encryption key to add under a DID. + */ +export type NewDidEncryptionKey = BaseNewDidKey & { + type: DidEncryptionMethodType +} + +function doesVerificationMethodExist( + didDocument: DidDocument, + { id }: Pick +): boolean { + return ( + didDocument.verificationMethod?.find((vm) => vm.id === id) !== undefined + ) +} + +function addVerificationMethod( + didDocument: DidDocument, + verificationMethod: VerificationMethod, + relationship: VerificationRelationship +): void { + const existingRelationship = didDocument[relationship] ?? [] + existingRelationship.push(verificationMethod.id) + // eslint-disable-next-line no-param-reassign + didDocument[relationship] = existingRelationship + if (!doesVerificationMethodExist(didDocument, verificationMethod)) { + const existingVerificationMethod = didDocument.verificationMethod ?? [] + existingVerificationMethod.push(verificationMethod) + // eslint-disable-next-line no-param-reassign + didDocument.verificationMethod = existingVerificationMethod + } +} + +/** + * Add the provided keypair as a new verification method to the DID Document. + * !!! This function is meant to be used internally and not exposed since it is mostly used as a utility and does not perform extensive checks on the inputs. * - * @param did The DID data. - * @param id Endpoint id (not the full endpoint uri). - * @returns The respective endpoint data or undefined. - */ -export function getService( - did: Pick, - id: DidServiceEndpoint['id'] -): DidServiceEndpoint | undefined { - return did.service?.find((endpoint) => endpoint.id === id) + * @param didDocument The DID Document to add the verification method to. + * @param newKeypair The new keypair to add as a verification method. + * @param newKeypair.id The ID of the new verification method. If a verification method with the same ID already exists, this operation is a no-op. + * @param newKeypair.publicKey The public key of the keypair. + * @param newKeypair.type The type of the public key. + * @param relationship The verification relationship to add the verification method to. + */ +export function addKeypairAsVerificationMethod( + didDocument: DidDocument, + { id, publicKey, type: keyType }: BaseNewDidKey & { id: UriFragment }, + relationship: VerificationRelationship +): void { + const verificationMethod = didKeyToVerificationMethod(didDocument.id, id, { + keyType: keyType as DidSigningMethodType, + publicKey, + }) + addVerificationMethod(didDocument, verificationMethod, relationship) } diff --git a/packages/did/src/DidDetails/FullDidDetails.spec.ts b/packages/did/src/DidDetails/FullDidDetails.spec.ts index 3f8004931..95f8b3ef1 100644 --- a/packages/did/src/DidDetails/FullDidDetails.spec.ts +++ b/packages/did/src/DidDetails/FullDidDetails.spec.ts @@ -12,7 +12,7 @@ import { ConfigService } from '@kiltprotocol/config' import type { DidDocument, KiltKeyringPair, - SignCallback, + SignerInterface, SubmittableExtrinsic, } from '@kiltprotocol/types' @@ -22,12 +22,23 @@ import { makeSigningKeyTool, } from '../../../../tests/testUtils' import { generateDidAuthenticatedTx } from '../Did.chain.js' -import * as Did from './index.js' +import { + authorizeBatch, + getVerificationRelationshipForTx, +} from './FullDidDetails.js' const augmentedApi = ApiMocks.createAugmentedApi() const mockedApi: any = ApiMocks.getMockedApi() ConfigService.set({ api: mockedApi }) +jest.mock('../DidResolver/DidResolver', () => { + return { + ...jest.requireActual('../DidResolver/DidResolver'), + resolve: jest.fn(), + dereference: jest.fn(), + resolveRepresentation: jest.fn(), + } +}) jest.mock('../Did.chain') jest .mocked(generateDidAuthenticatedTx) @@ -42,25 +53,25 @@ jest describe('When creating an instance from the chain', () => { describe('authorizeBatch', () => { let keypair: KiltKeyringPair - let sign: SignCallback + let signers: SignerInterface[] let fullDid: DidDocument beforeAll(async () => { - const keyTool = makeSigningKeyTool() + const keyTool = await makeSigningKeyTool() keypair = keyTool.keypair fullDid = await createLocalDemoFullDidFromKeypair(keyTool.keypair) - sign = keyTool.getSignCallback(fullDid) + signers = await keyTool.getSigners(fullDid) }) describe('.addSingleTx()', () => { it('fails if the extrinsic does not require a DID', async () => { const extrinsic = augmentedApi.tx.indices.claim(1) await expect(async () => - Did.authorizeBatch({ - did: fullDid.uri, + authorizeBatch({ + did: fullDid, batchFunction: augmentedApi.tx.utility.batchAll, extrinsics: [extrinsic, extrinsic], - sign, + signers, submitter: keypair.address, }) ).rejects.toMatchInlineSnapshot( @@ -74,11 +85,11 @@ describe('When creating an instance from the chain', () => { ]) const batchFunction = jest.fn() as unknown as typeof mockedApi.tx.utility.batchAll - await Did.authorizeBatch({ - did: fullDid.uri, + await authorizeBatch({ + did: fullDid, batchFunction, extrinsics: [extrinsic, extrinsic], - sign, + signers, submitter: keypair.address, }) @@ -111,12 +122,12 @@ describe('When creating an instance from the chain', () => { ctype3Extrinsic, ctype4Extrinsic, ] - await Did.authorizeBatch({ - did: fullDid.uri, + await authorizeBatch({ + did: fullDid, batchFunction, extrinsics, nonce: new BN(0), - sign, + signers, submitter: keypair.address, }) @@ -139,11 +150,11 @@ describe('When creating an instance from the chain', () => { describe('.build()', () => { it('throws if batch is empty', async () => { await expect(async () => - Did.authorizeBatch({ - did: fullDid.uri, + authorizeBatch({ + did: fullDid, batchFunction: augmentedApi.tx.utility.batchAll, extrinsics: [], - sign, + signers, submitter: keypair.address, }) ).rejects.toMatchInlineSnapshot( @@ -163,14 +174,14 @@ describe('When creating an instance from the chain', () => { const mockApi = ApiMocks.createAugmentedApi() describe('When creating an instance from the chain', () => { - it('Should return correct KeyRelationship for single valid call', () => { - const keyRelationship = Did.getKeyRelationshipForTx( + it('Should return correct VerificationRelationship for single valid call', () => { + const verificationRelationship = getVerificationRelationshipForTx( mockApi.tx.attestation.add(new Uint8Array(32), new Uint8Array(32), null) ) - expect(keyRelationship).toBe('assertionMethod') + expect(verificationRelationship).toBe('assertionMethod') }) - it('Should return correct KeyRelationship for batched call', () => { - const keyRelationship = Did.getKeyRelationshipForTx( + it('Should return correct VerificationRelationship for batched call', () => { + const verificationRelationship = getVerificationRelationshipForTx( mockApi.tx.utility.batch([ mockApi.tx.attestation.add( new Uint8Array(32), @@ -184,10 +195,10 @@ describe('When creating an instance from the chain', () => { ), ]) ) - expect(keyRelationship).toBe('assertionMethod') + expect(verificationRelationship).toBe('assertionMethod') }) - it('Should return correct KeyRelationship for batchAll call', () => { - const keyRelationship = Did.getKeyRelationshipForTx( + it('Should return correct VerificationRelationship for batchAll call', () => { + const verificationRelationship = getVerificationRelationshipForTx( mockApi.tx.utility.batchAll([ mockApi.tx.attestation.add( new Uint8Array(32), @@ -201,10 +212,10 @@ describe('When creating an instance from the chain', () => { ), ]) ) - expect(keyRelationship).toBe('assertionMethod') + expect(verificationRelationship).toBe('assertionMethod') }) - it('Should return correct KeyRelationship for forceBatch call', () => { - const keyRelationship = Did.getKeyRelationshipForTx( + it('Should return correct VerificationRelationship for forceBatch call', () => { + const verificationRelationship = getVerificationRelationshipForTx( mockApi.tx.utility.forceBatch([ mockApi.tx.attestation.add( new Uint8Array(32), @@ -218,10 +229,10 @@ describe('When creating an instance from the chain', () => { ), ]) ) - expect(keyRelationship).toBe('assertionMethod') + expect(verificationRelationship).toBe('assertionMethod') }) - it('Should return undefined for batch with mixed KeyRelationship calls', () => { - const keyRelationship = Did.getKeyRelationshipForTx( + it('Should return undefined for batch with mixed VerificationRelationship calls', () => { + const verificationRelationship = getVerificationRelationshipForTx( mockApi.tx.utility.forceBatch([ mockApi.tx.attestation.add( new Uint8Array(32), @@ -231,6 +242,6 @@ describe('When creating an instance from the chain', () => { mockApi.tx.web3Names.claim('awesomename'), ]) ) - expect(keyRelationship).toBeUndefined() + expect(verificationRelationship).toBeUndefined() }) }) diff --git a/packages/did/src/DidDetails/FullDidDetails.ts b/packages/did/src/DidDetails/FullDidDetails.ts index e16efd87f..014babfc5 100644 --- a/packages/did/src/DidDetails/FullDidDetails.ts +++ b/packages/did/src/DidDetails/FullDidDetails.ts @@ -10,27 +10,33 @@ import type { SubmittableExtrinsicFunction } from '@polkadot/api/types' import { BN } from '@polkadot/util' import type { - DidUri, + DidDocument, + Did, KiltAddress, - SignExtrinsicCallback, + SignatureVerificationRelationship, + SignerInterface, SubmittableExtrinsic, - VerificationKeyRelationship, } from '@kiltprotocol/types' -import { SDKErrors } from '@kiltprotocol/utils' +import { SDKErrors, Signers } from '@kiltprotocol/utils' import { ConfigService } from '@kiltprotocol/config' import { + DidPalletSigner, documentFromChain, generateDidAuthenticatedTx, toChain, } from '../Did.chain.js' import { parse } from '../Did.utils.js' +import { resolve } from '../DidResolver/DidResolver.js' // Must be in sync with what's implemented in impl did::DeriveDidCallAuthorizationVerificationKeyRelationship for Call // in https://github.com/KILTprotocol/mashnet-node/blob/develop/runtimes/spiritnet/src/lib.rs // TODO: Should have an RPC or something similar to avoid inconsistencies in the future. -const methodMapping: Record = { +const methodMapping: Record< + string, + SignatureVerificationRelationship | undefined +> = { attestation: 'assertionMethod', ctype: 'assertionMethod', delegation: 'capabilityDelegation', @@ -44,20 +50,20 @@ const methodMapping: Record = { web3Names: 'authentication', } -function getKeyRelationshipForMethod( +function getVerificationRelationshipForRuntimeCall( call: Extrinsic['method'] -): VerificationKeyRelationship | undefined { +): SignatureVerificationRelationship | undefined { const { section, method } = call - // get the VerificationKeyRelationship of a batched call + // get the VerificationRelationship of a batched call if ( section === 'utility' && ['batch', 'batchAll', 'forceBatch'].includes(method) && call.args[0].toRawType() === 'Vec' ) { - // map all calls to their VerificationKeyRelationship and deduplicate the items + // map all calls to their VerificationRelationship and deduplicate the items return (call.args[0] as unknown as Array) - .map(getKeyRelationshipForMethod) + .map(getVerificationRelationshipForRuntimeCall) .reduce((prev, value) => (prev === value ? prev : undefined)) } @@ -70,15 +76,15 @@ function getKeyRelationshipForMethod( } /** - * Detect the key relationship for a key which should be used to DID-authorize the provided extrinsic. + * Detect the relationship for a verification method which should be used to DID-authorize the provided extrinsic. * * @param extrinsic The unsigned extrinsic to inspect. - * @returns The key relationship. + * @returns The verification relationship. */ -export function getKeyRelationshipForTx( +export function getVerificationRelationshipForTx( extrinsic: Extrinsic -): VerificationKeyRelationship | undefined { - return getKeyRelationshipForMethod(extrinsic.method) +): SignatureVerificationRelationship | undefined { + return getVerificationRelationshipForRuntimeCall(extrinsic.method) } // Max nonce value is (2^64) - 1 @@ -99,7 +105,7 @@ function increaseNonce(currentNonce: BN, increment = 1): BN { * @param did The DID data. * @returns The next valid nonce, i.e., the nonce currently stored on the blockchain + 1, wrapping around the max value when reached. */ -async function getNextNonce(did: DidUri): Promise { +async function getNextNonce(did: Did): Promise { const api = ConfigService.get('api') const queried = await api.query.did.did(toChain(did)) const currentNonce = queried.isSome @@ -108,21 +114,43 @@ async function getNextNonce(did: DidUri): Promise { return increaseNonce(currentNonce) } +async function conditionalLoadDocument( + didOrDidDocument: Did | DidDocument +): Promise { + if (typeof didOrDidDocument === 'string') { + const { didDocument, didDocumentMetadata } = await resolve(didOrDidDocument) + if (!didDocument || didDocumentMetadata.deactivated === true) { + throw new SDKErrors.DidNotFoundError('Failed to resolve signer DID') + } + return didDocument + } + if (typeof didOrDidDocument.id === 'string') { + return didOrDidDocument + } + throw new SDKErrors.InvalidDidFormatError( + `Expected a valid DID or DID Document, got ${JSON.stringify( + didOrDidDocument + )}` + ) +} + +const { verifiableOnChain, byDid } = Signers.select + /** - * Signs and returns the provided unsigned extrinsic with the right DID key, if present. Otherwise, it will throw an error. + * Signs and returns the provided unsigned extrinsic with the right DID verification method, if present. Otherwise, it will throw an error. * - * @param did The DID data. + * @param did The DID or DID Document of the authorizing DID. * @param extrinsic The unsigned extrinsic to sign. - * @param sign The callback to sign the operation. + * @param signers An array of signer interfaces. The function will select the appropriate signer for signing this extrinsic. * @param submitterAccount The KILT account to bind the DID operation to (to avoid MitM and replay attacks). * @param signingOptions The signing options. * @param signingOptions.txCounter The optional DID nonce to include in the operation signatures. By default, it uses the next value of the nonce stored on chain. * @returns The DID-signed submittable extrinsic. */ export async function authorizeTx( - did: DidUri, + did: Did | DidDocument, extrinsic: Extrinsic, - sign: SignExtrinsicCallback, + signers: readonly SignerInterface[], submitterAccount: KiltAddress, { txCounter, @@ -130,61 +158,81 @@ export async function authorizeTx( txCounter?: BN } = {} ): Promise { - if (parse(did).type === 'light') { + const didDocument = await conditionalLoadDocument(did) + + if (parse(didDocument.id).type === 'light') { throw new SDKErrors.DidError( `An extrinsic can only be authorized with a full DID, not with "${did}"` ) } - const keyRelationship = getKeyRelationshipForTx(extrinsic) - if (keyRelationship === undefined) { - throw new SDKErrors.SDKError('No key relationship found for extrinsic') + const verificationRelationship = getVerificationRelationshipForTx(extrinsic) + if (verificationRelationship === undefined) { + throw new SDKErrors.SDKError( + 'No verification relationship found for extrinsic' + ) + } + + const signer = Signers.selectSigner( + signers, + verifiableOnChain(), + byDid(didDocument, { verificationRelationship }) + ) + if (typeof signer === 'undefined') { + throw new SDKErrors.NoSuitableSignerError(undefined, { + signerRequirements: { + did: didDocument.id, + verificationRelationship, + algorithm: Signers.DID_PALLET_SUPPORTED_ALGORITHMS, + }, + availableSigners: signers, + }) } return generateDidAuthenticatedTx({ - did, - keyRelationship, - sign, + did: didDocument.id, + signer, call: extrinsic, - txCounter: txCounter || (await getNextNonce(did)), + txCounter: txCounter || (await getNextNonce(didDocument.id)), submitter: submitterAccount, }) } type GroupedExtrinsics = Array<{ extrinsics: Extrinsic[] - keyRelationship: VerificationKeyRelationship + verificationRelationship: SignatureVerificationRelationship }> -function groupExtrinsicsByKeyRelationship( +function groupExtrinsicsByVerificationRelationship( extrinsics: Extrinsic[] ): GroupedExtrinsics { const [first, ...rest] = extrinsics.map((extrinsic) => { - const keyRelationship = getKeyRelationshipForTx(extrinsic) - if (!keyRelationship) { + const verificationRelationship = getVerificationRelationshipForTx(extrinsic) + if (!verificationRelationship) { throw new SDKErrors.DidBatchError( 'Can only batch extrinsics that require a DID signature' ) } - return { extrinsic, keyRelationship } + return { extrinsic, verificationRelationship } }) const groups: GroupedExtrinsics = [ { extrinsics: [first.extrinsic], - keyRelationship: first.keyRelationship, + verificationRelationship: first.verificationRelationship, }, ] - rest.forEach(({ extrinsic, keyRelationship }) => { + rest.forEach(({ extrinsic, verificationRelationship }) => { const currentGroup = groups[groups.length - 1] - const useCurrentGroup = keyRelationship === currentGroup.keyRelationship + const useCurrentGroup = + verificationRelationship === currentGroup.verificationRelationship if (useCurrentGroup) { currentGroup.extrinsics.push(extrinsic) } else { groups.push({ extrinsics: [extrinsic], - keyRelationship, + verificationRelationship, }) } }) @@ -193,13 +241,13 @@ function groupExtrinsicsByKeyRelationship( } /** - * Authorizes/signs a list of extrinsics grouping them in batches by required key type. + * Authorizes/signs a list of extrinsics grouping them in batches by required verification relationship. * * @param input The object with named parameters. * @param input.batchFunction The batch function to use, for example `api.tx.utility.batchAll`. - * @param input.did The DID document. + * @param input.did The DID or DID Document of the authorizing DID. * @param input.extrinsics The array of unsigned extrinsics to sign. - * @param input.sign The callback to sign the operation. + * @param input.signers An array of signer interfaces. The function will select the appropriate signer for signing each extrinsic. * @param input.submitter The KILT account to bind the DID operation to (to avoid MitM and replay attacks). * @param input.nonce The optional nonce to use for the first batch, next batches will use incremented value. * @returns The DID-signed submittable extrinsic. @@ -209,14 +257,14 @@ export async function authorizeBatch({ did, extrinsics, nonce, - sign, + signers, submitter, }: { batchFunction: SubmittableExtrinsicFunction<'promise'> - did: DidUri + did: Did | DidDocument extrinsics: Extrinsic[] nonce?: BN - sign: SignExtrinsicCallback + signers: readonly SignerInterface[] submitter: KiltAddress }): Promise { if (extrinsics.length === 0) { @@ -225,32 +273,50 @@ export async function authorizeBatch({ ) } - if (parse(did).type === 'light') { + // resolve DID document beforehand to avoid resolving in loop + const didDocument = await conditionalLoadDocument(did) + + if (parse(didDocument.id).type === 'light') { throw new SDKErrors.DidError( `An extrinsic can only be authorized with a full DID, not with "${did}"` ) } if (extrinsics.length === 1) { - return authorizeTx(did, extrinsics[0], sign, submitter, { + return authorizeTx(did, extrinsics[0], signers, submitter, { txCounter: nonce, }) } - const groups = groupExtrinsicsByKeyRelationship(extrinsics) - const firstNonce = nonce || (await getNextNonce(did)) + const groups = groupExtrinsicsByVerificationRelationship(extrinsics) + const firstNonce = nonce || (await getNextNonce(didDocument.id)) const promises = groups.map(async (group, batchIndex) => { const list = group.extrinsics const call = list.length === 1 ? list[0] : batchFunction(list) const txCounter = increaseNonce(firstNonce, batchIndex) - const { keyRelationship } = group + const { verificationRelationship } = group + + const signer = Signers.selectSigner( + signers, + verifiableOnChain(), + byDid(didDocument as DidDocument, { verificationRelationship }) + ) + if (typeof signer === 'undefined') { + throw new SDKErrors.NoSuitableSignerError(undefined, { + signerRequirements: { + did: (didDocument as DidDocument).id, + verificationRelationship, + algorithm: Signers.DID_PALLET_SUPPORTED_ALGORITHMS, + }, + availableSigners: signers, + }) + } return generateDidAuthenticatedTx({ - did, - keyRelationship, - sign, + did: didDocument.id, + signer, call, txCounter, submitter, diff --git a/packages/did/src/DidDetails/LightDidDetails.spec.ts b/packages/did/src/DidDetails/LightDidDetails.spec.ts index 2a7a23a92..a4e608993 100644 --- a/packages/did/src/DidDetails/LightDidDetails.spec.ts +++ b/packages/did/src/DidDetails/LightDidDetails.spec.ts @@ -5,10 +5,18 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { DidDocument, DidServiceEndpoint, DidUri } from '@kiltprotocol/types' +import type { DidDocument, Did, DidUrl } from '@kiltprotocol/types' + import { Crypto } from '@kiltprotocol/utils' -import * as Did from '../index.js' +import type { NewService } from './DidDetails.js' +import type { CreateDocumentInput } from './LightDidDetails.js' + +import { keypairToMultibaseKey, parse } from '../Did.utils.js' +import { + createLightDidDocument, + parseDocumentFromLightDid, +} from './LightDidDetails.js' /* * Functions tested: @@ -21,12 +29,12 @@ import * as Did from '../index.js' */ describe('When creating an instance from the details', () => { - it('correctly assign the right sr25519 authentication key, x25519 encryption key, and service endpoints', () => { + it('correctly assign the right sr25519 authentication key, x25519 encryption key, and services', () => { const authKey = Crypto.makeKeypairFromSeed(undefined, 'sr25519') const encKey = Crypto.makeEncryptionKeypairFromSeed( new Uint8Array(32).fill(1) ) - const service: DidServiceEndpoint[] = [ + const service: NewService[] = [ { id: '#service-1', type: ['type-1'], @@ -39,26 +47,34 @@ describe('When creating an instance from the details', () => { }, ] - const lightDid = Did.createLightDidDocument({ + const lightDid = createLightDidDocument({ authentication: [authKey], keyAgreement: [encKey], service, }) expect(lightDid).toEqual({ - uri: `did:kilt:light:00${authKey.address}:z17GNCdxLqMYTMC5pnnDrPZGxLEFcXvDamtGNXeNkfSaFf8cktX6erFJiQy8S3ugL981NNys7Rz8DJiaNPZi98v1oeFVL7PjUGNTz1g3jgZo4VgQri2SYHBifZFX9foHZH4DreZXFN66k5dPrvAtBpFXaiG2WZkkxsnxNWxYpqWPPcxvbTE6pJbXxWKjRUd7rog1h9vjA93QA9jMDxm6BSGJHACFgSPUU3UTLk2kjNwT2bjZVvihVFu1zibxwHjowb7N6UQfieJ7ny9HnaQy64qJvGqh4NNtpwkhwm5DTYUoAeAhjt3a6TWyxmBgbFdZF7`, - authentication: [ + id: `did:kilt:light:00${authKey.address}:z17GNCdxLqMYTMC5pnnDrPZGxLEFcXvDamtGNXeNkfSaFf8cktX6erFJiQy8S3ugL981NNys7Rz8DJiaNPZi98v1oeFVL7PjUGNTz1g3jgZo4VgQri2SYHBifZFX9foHZH4DreZXFN66k5dPrvAtBpFXaiG2WZkkxsnxNWxYpqWPPcxvbTE6pJbXxWKjRUd7rog1h9vjA93QA9jMDxm6BSGJHACFgSPUU3UTLk2kjNwT2bjZVvihVFu1zibxwHjowb7N6UQfieJ7ny9HnaQy64qJvGqh4NNtpwkhwm5DTYUoAeAhjt3a6TWyxmBgbFdZF7`, + authentication: ['#authentication'], + keyAgreement: ['#encryption'], + verificationMethod: [ { + controller: `did:kilt:light:00${authKey.address}:z17GNCdxLqMYTMC5pnnDrPZGxLEFcXvDamtGNXeNkfSaFf8cktX6erFJiQy8S3ugL981NNys7Rz8DJiaNPZi98v1oeFVL7PjUGNTz1g3jgZo4VgQri2SYHBifZFX9foHZH4DreZXFN66k5dPrvAtBpFXaiG2WZkkxsnxNWxYpqWPPcxvbTE6pJbXxWKjRUd7rog1h9vjA93QA9jMDxm6BSGJHACFgSPUU3UTLk2kjNwT2bjZVvihVFu1zibxwHjowb7N6UQfieJ7ny9HnaQy64qJvGqh4NNtpwkhwm5DTYUoAeAhjt3a6TWyxmBgbFdZF7`, id: '#authentication', - publicKey: authKey.publicKey, - type: 'sr25519', + publicKeyMultibase: keypairToMultibaseKey({ + publicKey: authKey.publicKey, + type: 'sr25519', + }), + type: 'Multikey', }, - ], - keyAgreement: [ { + controller: `did:kilt:light:00${authKey.address}:z17GNCdxLqMYTMC5pnnDrPZGxLEFcXvDamtGNXeNkfSaFf8cktX6erFJiQy8S3ugL981NNys7Rz8DJiaNPZi98v1oeFVL7PjUGNTz1g3jgZo4VgQri2SYHBifZFX9foHZH4DreZXFN66k5dPrvAtBpFXaiG2WZkkxsnxNWxYpqWPPcxvbTE6pJbXxWKjRUd7rog1h9vjA93QA9jMDxm6BSGJHACFgSPUU3UTLk2kjNwT2bjZVvihVFu1zibxwHjowb7N6UQfieJ7ny9HnaQy64qJvGqh4NNtpwkhwm5DTYUoAeAhjt3a6TWyxmBgbFdZF7`, id: '#encryption', - publicKey: encKey.publicKey, - type: 'x25519', + publicKeyMultibase: keypairToMultibaseKey({ + publicKey: encKey.publicKey, + type: 'x25519', + }), + type: 'Multikey', }, ], service: [ @@ -82,27 +98,35 @@ describe('When creating an instance from the details', () => { new Uint8Array(32).fill(1) ) - const lightDid = Did.createLightDidDocument({ + const lightDid = createLightDidDocument({ authentication: [authKey], keyAgreement: [encKey], }) - expect(Did.parse(lightDid.uri).address).toStrictEqual(authKey.address) + expect(parse(lightDid.id).address).toStrictEqual(authKey.address) - expect(lightDid).toEqual({ - uri: `did:kilt:light:01${authKey.address}:z15dZSRuzEPTFnBErPxqJie4CmmQH1gYKSQYxmwW5Qhgz5Sr7EYJA3J65KoC5YbgF3NGoBsTY2v6zwj1uDnZzgXzLy8R72Fhjmp8ujY81y2AJc8uQ6s2pVbAMZ6bnvaZ3GVe8bMjY5MiKFySS27qRi`, - authentication: [ + expect(lightDid).toEqual({ + id: `did:kilt:light:01${authKey.address}:z15dZSRuzEPTFnBErPxqJie4CmmQH1gYKSQYxmwW5Qhgz5Sr7EYJA3J65KoC5YbgF3NGoBsTY2v6zwj1uDnZzgXzLy8R72Fhjmp8ujY81y2AJc8uQ6s2pVbAMZ6bnvaZ3GVe8bMjY5MiKFySS27qRi`, + authentication: ['#authentication'], + keyAgreement: ['#encryption'], + verificationMethod: [ { + controller: `did:kilt:light:01${authKey.address}:z15dZSRuzEPTFnBErPxqJie4CmmQH1gYKSQYxmwW5Qhgz5Sr7EYJA3J65KoC5YbgF3NGoBsTY2v6zwj1uDnZzgXzLy8R72Fhjmp8ujY81y2AJc8uQ6s2pVbAMZ6bnvaZ3GVe8bMjY5MiKFySS27qRi`, id: '#authentication', - publicKey: authKey.publicKey, - type: 'ed25519', + publicKeyMultibase: keypairToMultibaseKey({ + publicKey: authKey.publicKey, + type: 'ed25519', + }), + type: 'Multikey', }, - ], - keyAgreement: [ { + controller: `did:kilt:light:01${authKey.address}:z15dZSRuzEPTFnBErPxqJie4CmmQH1gYKSQYxmwW5Qhgz5Sr7EYJA3J65KoC5YbgF3NGoBsTY2v6zwj1uDnZzgXzLy8R72Fhjmp8ujY81y2AJc8uQ6s2pVbAMZ6bnvaZ3GVe8bMjY5MiKFySS27qRi`, id: '#encryption', - publicKey: encKey.publicKey, - type: 'x25519', + publicKeyMultibase: keypairToMultibaseKey({ + publicKey: encKey.publicKey, + type: 'x25519', + }), + type: 'Multikey', }, ], }) @@ -115,9 +139,7 @@ describe('When creating an instance from the details', () => { authentication: [authKey], } expect(() => - Did.createLightDidDocument( - invalidInput as unknown as Did.CreateDocumentInput - ) + createLightDidDocument(invalidInput as unknown as CreateDocumentInput) ).toThrowError() }) @@ -130,20 +152,18 @@ describe('When creating an instance from the details', () => { keyAgreement: [{ publicKey: encKey.publicKey, type: 'bls' }], } expect(() => - Did.createLightDidDocument( - invalidInput as unknown as Did.CreateDocumentInput - ) + createLightDidDocument(invalidInput as unknown as CreateDocumentInput) ).toThrowError() }) }) -describe('When creating an instance from a URI', () => { - it('correctly assign the right authentication key, encryption key, and service endpoints', () => { +describe('When creating an instance from a light DID', () => { + it('correctly assign the right authentication key, encryption key, and services', () => { const authKey = Crypto.makeKeypairFromSeed(undefined, 'sr25519') const encKey = Crypto.makeEncryptionKeypairFromSeed( new Uint8Array(32).fill(1) ) - const endpoints: DidServiceEndpoint[] = [ + const endpoints: NewService[] = [ { id: '#service-1', type: ['type-1'], @@ -156,30 +176,38 @@ describe('When creating an instance from a URI', () => { }, ] // We are sure this is correct because of the described case above - const expectedLightDid = Did.createLightDidDocument({ + const expectedLightDid = createLightDidDocument({ authentication: [authKey], keyAgreement: [encKey], service: endpoints, }) - const { address } = Did.parse(expectedLightDid.uri) - const builtLightDid = Did.parseDocumentFromLightDid(expectedLightDid.uri) + const { address } = parse(expectedLightDid.id) + const builtLightDid = parseDocumentFromLightDid(expectedLightDid.id) expect(builtLightDid).toStrictEqual(expectedLightDid) expect(builtLightDid).toStrictEqual({ - uri: `did:kilt:light:00${address}:z17GNCdxLqMYTMC5pnnDrPZGxLEFcXvDamtGNXeNkfSaFf8cktX6erFJiQy8S3ugL981NNys7Rz8DJiaNPZi98v1oeFVL7PjUGNTz1g3jgZo4VgQri2SYHBifZFX9foHZH4DreZXFN66k5dPrvAtBpFXaiG2WZkkxsnxNWxYpqWPPcxvbTE6pJbXxWKjRUd7rog1h9vjA93QA9jMDxm6BSGJHACFgSPUU3UTLk2kjNwT2bjZVvihVFu1zibxwHjowb7N6UQfieJ7ny9HnaQy64qJvGqh4NNtpwkhwm5DTYUoAeAhjt3a6TWyxmBgbFdZF7` as DidUri, - authentication: [ + id: `did:kilt:light:00${address}:z17GNCdxLqMYTMC5pnnDrPZGxLEFcXvDamtGNXeNkfSaFf8cktX6erFJiQy8S3ugL981NNys7Rz8DJiaNPZi98v1oeFVL7PjUGNTz1g3jgZo4VgQri2SYHBifZFX9foHZH4DreZXFN66k5dPrvAtBpFXaiG2WZkkxsnxNWxYpqWPPcxvbTE6pJbXxWKjRUd7rog1h9vjA93QA9jMDxm6BSGJHACFgSPUU3UTLk2kjNwT2bjZVvihVFu1zibxwHjowb7N6UQfieJ7ny9HnaQy64qJvGqh4NNtpwkhwm5DTYUoAeAhjt3a6TWyxmBgbFdZF7`, + authentication: ['#authentication'], + keyAgreement: ['#encryption'], + verificationMethod: [ { + controller: `did:kilt:light:00${authKey.address}:z17GNCdxLqMYTMC5pnnDrPZGxLEFcXvDamtGNXeNkfSaFf8cktX6erFJiQy8S3ugL981NNys7Rz8DJiaNPZi98v1oeFVL7PjUGNTz1g3jgZo4VgQri2SYHBifZFX9foHZH4DreZXFN66k5dPrvAtBpFXaiG2WZkkxsnxNWxYpqWPPcxvbTE6pJbXxWKjRUd7rog1h9vjA93QA9jMDxm6BSGJHACFgSPUU3UTLk2kjNwT2bjZVvihVFu1zibxwHjowb7N6UQfieJ7ny9HnaQy64qJvGqh4NNtpwkhwm5DTYUoAeAhjt3a6TWyxmBgbFdZF7`, id: '#authentication', - publicKey: authKey.publicKey, - type: 'sr25519', + publicKeyMultibase: keypairToMultibaseKey({ + publicKey: authKey.publicKey, + type: 'sr25519', + }), + type: 'Multikey', }, - ], - keyAgreement: [ { + controller: `did:kilt:light:00${authKey.address}:z17GNCdxLqMYTMC5pnnDrPZGxLEFcXvDamtGNXeNkfSaFf8cktX6erFJiQy8S3ugL981NNys7Rz8DJiaNPZi98v1oeFVL7PjUGNTz1g3jgZo4VgQri2SYHBifZFX9foHZH4DreZXFN66k5dPrvAtBpFXaiG2WZkkxsnxNWxYpqWPPcxvbTE6pJbXxWKjRUd7rog1h9vjA93QA9jMDxm6BSGJHACFgSPUU3UTLk2kjNwT2bjZVvihVFu1zibxwHjowb7N6UQfieJ7ny9HnaQy64qJvGqh4NNtpwkhwm5DTYUoAeAhjt3a6TWyxmBgbFdZF7`, id: '#encryption', - publicKey: encKey.publicKey, - type: 'x25519', + publicKeyMultibase: keypairToMultibaseKey({ + publicKey: encKey.publicKey, + type: 'x25519', + }), + type: 'Multikey', }, ], service: [ @@ -200,7 +228,7 @@ describe('When creating an instance from a URI', () => { it('fail if a fragment is present according to the options', () => { const authKey = Crypto.makeKeypairFromSeed() const encKey = Crypto.makeEncryptionKeypairFromSeed() - const service: DidServiceEndpoint[] = [ + const service: NewService[] = [ { id: '#service-1', type: ['type-1'], @@ -214,25 +242,25 @@ describe('When creating an instance from a URI', () => { ] // We are sure this is correct because of the described case above - const expectedLightDid = Did.createLightDidDocument({ + const expectedLightDid = createLightDidDocument({ authentication: [authKey], keyAgreement: [encKey], service, }) - const uriWithFragment: DidUri = `${expectedLightDid.uri}#authentication` + const didWithFragment: DidUrl = `${expectedLightDid.id}#authentication` - expect(() => Did.parseDocumentFromLightDid(uriWithFragment, true)).toThrow() + expect(() => parseDocumentFromLightDid(didWithFragment, true)).toThrow() expect(() => - Did.parseDocumentFromLightDid(uriWithFragment, false) + parseDocumentFromLightDid(didWithFragment, false) ).not.toThrow() }) - it('fail if the URI is not correct', () => { + it('fail if the DID is not correct', () => { const validKiltAddress = Crypto.makeKeypairFromSeed() - const incorrectURIs = [ + const incorrectDIDs = [ 'did:kilt:light:sdasdsadas', - // @ts-ignore not a valid DID uri + // @ts-ignore not a valid DID 'random-uri', 'did:kilt:light', 'did:kilt:light:', @@ -243,8 +271,8 @@ describe('When creating an instance from a URI', () => { // Random encoded details `did:kilt:light:00${validKiltAddress}:randomdetails`, ] - incorrectURIs.forEach((uri) => { - expect(() => Did.parseDocumentFromLightDid(uri as DidUri)).toThrow() + incorrectDIDs.forEach((did) => { + expect(() => parseDocumentFromLightDid(did as Did)).toThrow() }) }) }) diff --git a/packages/did/src/DidDetails/LightDidDetails.ts b/packages/did/src/DidDetails/LightDidDetails.ts index 30a752f6b..d65ee4268 100644 --- a/packages/did/src/DidDetails/LightDidDetails.ts +++ b/packages/did/src/DidDetails/LightDidDetails.ts @@ -5,32 +5,53 @@ * found in the LICENSE file in the root directory of this source tree. */ +import type { DidDocument, Did } from '@kiltprotocol/types' + import { base58Decode, base58Encode, decodeAddress, } from '@polkadot/util-crypto' +import { cbor, SDKErrors, ss58Format } from '@kiltprotocol/utils' import type { - DidDocument, - DidServiceEndpoint, - DidUri, - LightDidSupportedVerificationKeyType, NewDidEncryptionKey, - NewLightDidVerificationKey, -} from '@kiltprotocol/types' -import { encryptionKeyTypes } from '@kiltprotocol/types' + NewDidVerificationKey, + NewService, + DidSigningMethodType, +} from './DidDetails.js' -import { SDKErrors, ss58Format, cbor } from '@kiltprotocol/utils' +import { + keypairToMultibaseKey, + didKeyToVerificationMethod, + getAddressFromVerificationMethod, + parse, +} from '../Did.utils.js' +import { fragmentIdToChain, validateNewService } from '../Did.chain.js' +import { + addKeypairAsVerificationMethod, + encryptionMethodTypes, +} from './DidDetails.js' -import { getAddressByKey, parse } from '../Did.utils.js' -import { resourceIdToChain, validateService } from '../Did.chain.js' +/** + * Currently, a light DID does not support the use of an ECDSA key as its authentication verification method. + */ +export type LightDidSupportedVerificationKeyType = Extract< + DidSigningMethodType, + 'ed25519' | 'sr25519' +> +/** + * A new public key specified when creating a new light DID. + */ +export type NewLightDidVerificationKey = NewDidVerificationKey & { + type: LightDidSupportedVerificationKeyType +} + +type LightDidEncoding = '00' | '01' const authenticationKeyId = '#authentication' const encryptionKeyId = '#encryption' -type LightDidEncoding = '00' | '01' - const verificationKeyTypeToLightDidEncoding: Record< LightDidSupportedVerificationKeyType, LightDidEncoding @@ -52,26 +73,26 @@ const lightDidEncodingToVerificationKeyType: Record< */ export type CreateDocumentInput = { /** - * The DID authentication key. This is mandatory and will be used as the first authentication key + * The key to be used as the DID authentication verification method. This is mandatory and will be used as the first authentication verification method * of the full DID upon migration. */ authentication: [NewLightDidVerificationKey] /** - * The optional DID encryption key. If present, it will be used as the first key agreement key + * The optional encryption key to be used as the DID key agreement verification method. If present, it will be used as the first key agreement verification method * of the full DID upon migration. */ keyAgreement?: [NewDidEncryptionKey] /** - * The set of service endpoints associated with this DID. Each service endpoint ID must be unique. + * The set of services associated with this DID. Each service ID must be unique. * The service ID must not contain the DID prefix when used to create a new DID. */ - service?: DidServiceEndpoint[] + service?: NewService[] } function validateCreateDocumentInput({ authentication, keyAgreement, - service: services, + service, }: CreateDocumentInput): void { // Check authentication key type const authenticationKeyTypeEncoding = @@ -80,10 +101,9 @@ function validateCreateDocumentInput({ if (!authenticationKeyTypeEncoding) { throw new SDKErrors.UnsupportedKeyError(authentication[0].type) } - if ( keyAgreement?.[0].type && - !encryptionKeyTypes.includes(keyAgreement[0].type) + !encryptionMethodTypes.includes(keyAgreement[0].type) ) { throw new SDKErrors.DidError( `Encryption key type "${keyAgreement[0].type}" is not supported` @@ -93,14 +113,14 @@ function validateCreateDocumentInput({ // Checks that for all service IDs have regular strings as their ID and not a full DID. // Plus, we forbid a service ID to be `authentication` or `encryption` as that would create confusion // when upgrading to a full DID. - services?.forEach((service) => { + service?.forEach((s) => { // A service ID cannot have a reserved ID that is used for key IDs. - if (service.id === '#authentication' || service.id === '#encryption') { + if (s.id === '#authentication' || s.id === '#encryption') { throw new SDKErrors.DidError( - `Cannot specify a service ID with the name "${service.id}" as it is a reserved keyword` + `Cannot specify a service ID with the name "${s.id}" as it is a reserved keyword` ) } - validateService(service) + validateNewService(s) }) } @@ -110,20 +130,20 @@ const SERVICES_MAP_KEY = 's' interface SerializableStructure { [KEY_AGREEMENT_MAP_KEY]?: NewDidEncryptionKey [SERVICES_MAP_KEY]?: Array< - Partial> & { + Partial> & { id: string - } & { types?: string[]; urls?: string[] } // This below was mistakenly not accounted for during the SDK refactor, meaning there are light DIDs that contain these keys in their service endpoints. + } & { types?: string[]; urls?: string[] } // This below was mistakenly not accounted for during the SDK refactor, meaning there are light DIDs that contain these keys in their services. > } /** - * Serialize the optional encryption key and service endpoints of an off-chain DID using the CBOR serialization algorithm + * Serialize the optional key agreement verification method and services of a light DID using the CBOR serialization algorithm * and encoding the result in Base58 format with a multibase prefix. * * @param details The light DID details to encode. - * @param details.keyAgreement The DID encryption key. - * @param details.service The DID service endpoints. - * @returns The Base58-encoded and CBOR-serialized off-chain DID optional details. + * @param details.keyAgreement The DID key agreement verification method. + * @param details.service The DID services. + * @returns The Base58-encoded and CBOR-serialized light DID optional details. */ function serializeAdditionalLightDidDetails({ keyAgreement, @@ -136,7 +156,7 @@ function serializeAdditionalLightDidDetails({ } if (service && service.length > 0) { objectToSerialize[SERVICES_MAP_KEY] = service.map(({ id, ...rest }) => ({ - id: resourceIdToChain(id), + id: fragmentIdToChain(id), ...rest, })) } @@ -183,16 +203,16 @@ function deserializeAdditionalLightDidDetails( } /** - * Create [[DidDocument]] of a light DID using the provided keys and endpoints. - * Sets proper key IDs, builds light DID URI. - * Private keys are assumed to already live in another storage, as it contains reference only to public keys. + * Create a light {@link DidDocument} using the provided verification methods and services. + * Sets proper verification method IDs, builds light DID Document. + * Private keys are assumed to already live in another storage, as it contains reference only to public keys as verification methods. * * @param input The input. - * @param input.authentication The array containing light DID authentication key. - * @param input.keyAgreement The optional array containing light DID encryption key. - * @param input.service The optional light DID service endpoints. + * @param input.authentication The array containing the public keys to be used as the light DID authentication verification method. + * @param input.keyAgreement The optional array containing the public keys to be used as the light DID key agreement verification methods. + * @param input.service The optional light DID services. * - * @returns The resulting [[DidDocument]]. + * @returns The resulting {@link DidDocument}. */ export function createLightDidDocument({ authentication, @@ -211,52 +231,53 @@ export function createLightDidDocument({ // Validity is checked in validateCreateDocumentInput const authenticationKeyTypeEncoding = verificationKeyTypeToLightDidEncoding[authentication[0].type] - const address = getAddressByKey(authentication[0]) + const address = getAddressFromVerificationMethod({ + publicKeyMultibase: keypairToMultibaseKey(authentication[0]), + }) const encodedDetailsString = encodedDetails ? `:${encodedDetails}` : '' - const uri = - `did:kilt:light:${authenticationKeyTypeEncoding}${address}${encodedDetailsString}` as DidUri + const did = + `did:kilt:light:${authenticationKeyTypeEncoding}${address}${encodedDetailsString}` as Did - const did: DidDocument = { - uri, - authentication: [ - { - id: authenticationKeyId, // Authentication key always has the #authentication ID. - type: authentication[0].type, + const didDocument: DidDocument = { + id: did, + authentication: [authenticationKeyId], + verificationMethod: [ + didKeyToVerificationMethod(did, authenticationKeyId, { + keyType: authentication[0].type, publicKey: authentication[0].publicKey, - }, + }), ], service, } if (keyAgreement !== undefined) { - did.keyAgreement = [ - { - id: encryptionKeyId, // Encryption key always has the #encryption ID. - type: keyAgreement[0].type, - publicKey: keyAgreement[0].publicKey, - }, - ] + const { publicKey, type } = keyAgreement[0] + addKeypairAsVerificationMethod( + didDocument, + { id: encryptionKeyId, publicKey, type }, + 'keyAgreement' + ) } - return did + return didDocument } /** - * Create [[DidDocument]] of a light DID by parsing the provided input URI. + * Create a light {@link DidDocument} by parsing the provided input DID. * Only use for DIDs you control, when you are certain they have not been upgraded to on-chain full DIDs. - * For the DIDs you have received from external sources use [[resolve]] etc. + * For the DIDs you have received from external sources use {@link resolve} etc. * * Parsing is possible because of the self-describing and self-containing nature of light DIDs. - * Private keys are assumed to already live in another storage, as it contains reference only to public keys. + * Private keys are assumed to already live in another storage, as it contains reference only to public keys as verification methods. * - * @param uri The DID URI to parse. - * @param failIfFragmentPresent Whether to fail when parsing the URI in case a fragment is present or not, which is not relevant to the creation of the DID. It defaults to true. + * @param did The DID to parse. + * @param failIfFragmentPresent Whether to fail when parsing the DID in case a fragment is present or not, which is not relevant to the creation of the DID. It defaults to true. * - * @returns The resulting [[DidDocument]]. + * @returns The resulting {@link DidDocument}. */ export function parseDocumentFromLightDid( - uri: DidUri, + did: Did, failIfFragmentPresent = true ): DidDocument { const { @@ -266,16 +287,16 @@ export function parseDocumentFromLightDid( fragment, type, authKeyTypeEncoding, - } = parse(uri) + } = parse(did) if (type !== 'light') { throw new SDKErrors.DidError( - `Cannot build a light DID from the provided URI "${uri}" because it does not refer to a light DID` + `Cannot build a light DID Document from the provided DID "${did}" because it does not refer to a light DID` ) } if (fragment && failIfFragmentPresent) { throw new SDKErrors.DidError( - `Cannot build a light DID from the provided URI "${uri}" because it has a fragment` + `Cannot build a light DID Document from the provided DID "${did}" because it has a fragment` ) } const keyType = diff --git a/packages/did/src/DidDetails/index.ts b/packages/did/src/DidDetails/index.ts index 99c4484aa..daceeda2f 100644 --- a/packages/did/src/DidDetails/index.ts +++ b/packages/did/src/DidDetails/index.ts @@ -5,6 +5,20 @@ * found in the LICENSE file in the root directory of this source tree. */ -export * from './DidDetails.js' +// We don't export the `add*VerificationMethod` functions, they are meant to be used internally +export type { + BaseNewDidKey, + DidEncryptionMethodType, + DidSigningMethodType, + DidVerificationMethodType, + NewDidEncryptionKey, + NewDidVerificationKey, + NewService, + NewVerificationMethod, +} from './DidDetails.js' +export { + isValidDidVerificationType, + isValidEncryptionMethodType, +} from './DidDetails.js' export * from './LightDidDetails.js' export * from './FullDidDetails.js' diff --git a/packages/did/src/DidDocumentExporter/DidDocumentExporter.spec.ts b/packages/did/src/DidDocumentExporter/DidDocumentExporter.spec.ts deleted file mode 100644 index 4a957c40d..000000000 --- a/packages/did/src/DidDocumentExporter/DidDocumentExporter.spec.ts +++ /dev/null @@ -1,336 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import { BN } from '@polkadot/util' - -import type { - DidServiceEndpoint, - NewDidVerificationKey, - DidDocument, - DidVerificationKey, - DidEncryptionKey, - UriFragment, - DidUri, -} from '@kiltprotocol/types' - -import { exportToDidDocument } from './DidDocumentExporter.js' -import * as Did from '../index.js' -import { KILT_DID_CONTEXT_URL, W3C_DID_CONTEXT_URL } from '../index.js' - -const did: DidUri = 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' - -function generateAuthenticationKey(): DidVerificationKey { - return { - id: '#auth', - type: 'ed25519', - publicKey: new Uint8Array(32).fill(0), - } -} - -function generateEncryptionKey(): DidEncryptionKey { - return { - id: '#enc', - type: 'x25519', - publicKey: new Uint8Array(32).fill(0), - includedAt: new BN(15), - } -} - -function generateAttestationKey(): DidVerificationKey { - return { - id: '#att', - type: 'sr25519', - publicKey: new Uint8Array(32).fill(0), - includedAt: new BN(20), - } -} - -function generateDelegationKey(): DidVerificationKey { - return { - id: '#del', - type: 'ecdsa', - publicKey: new Uint8Array(32).fill(0), - includedAt: new BN(25), - } -} - -function generateServiceEndpoint(serviceId: UriFragment): DidServiceEndpoint { - const fragment = Did.resourceIdToChain(serviceId) - return { - id: serviceId, - type: [`type-${fragment}`], - serviceEndpoint: [`x:url-${fragment}`], - } -} - -const fullDid: DidDocument = { - uri: did, - authentication: [generateAuthenticationKey()], - keyAgreement: [generateEncryptionKey()], - assertionMethod: [generateAttestationKey()], - capabilityDelegation: [generateDelegationKey()], - service: [generateServiceEndpoint('#id-1'), generateServiceEndpoint('#id-2')], -} - -describe('When exporting a DID Document from a full DID', () => { - it('exports the expected application/json W3C DID Document with an Ed25519 authentication key, one x25519 encryption key, an Sr25519 assertion key, an Ecdsa delegation key, and two service endpoints', async () => { - const didDoc = exportToDidDocument(fullDid, 'application/json') - - expect(didDoc).toStrictEqual({ - id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', - verificationMethod: [ - { - id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#auth', - controller: - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', - type: 'Ed25519VerificationKey2018', - publicKeyBase58: '11111111111111111111111111111111', - }, - { - id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#att', - controller: - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', - type: 'Sr25519VerificationKey2020', - publicKeyBase58: '11111111111111111111111111111111', - }, - { - id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#del', - controller: - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', - type: 'EcdsaSecp256k1VerificationKey2019', - publicKeyBase58: '11111111111111111111111111111111', - }, - { - id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#enc', - controller: - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', - type: 'X25519KeyAgreementKey2019', - publicKeyBase58: '11111111111111111111111111111111', - }, - ], - authentication: [ - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#auth', - ], - keyAgreement: [ - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#enc', - ], - assertionMethod: [ - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#att', - ], - capabilityDelegation: [ - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#del', - ], - service: [ - { - id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#id-1', - type: ['type-id-1'], - serviceEndpoint: ['x:url-id-1'], - }, - { - id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#id-2', - type: ['type-id-2'], - serviceEndpoint: ['x:url-id-2'], - }, - ], - }) - }) - - it('exports the expected application/ld+json W3C DID Document with an Ed25519 authentication key, two x25519 encryption keys, an Sr25519 assertion key, an Ecdsa delegation key, and two service endpoints', async () => { - const didDoc = exportToDidDocument(fullDid, 'application/ld+json') - - expect(didDoc).toStrictEqual({ - '@context': [W3C_DID_CONTEXT_URL, KILT_DID_CONTEXT_URL], - id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', - verificationMethod: [ - { - id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#auth', - controller: - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', - type: 'Ed25519VerificationKey2018', - publicKeyBase58: '11111111111111111111111111111111', - }, - { - id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#att', - controller: - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', - type: 'Sr25519VerificationKey2020', - publicKeyBase58: '11111111111111111111111111111111', - }, - { - id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#del', - controller: - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', - type: 'EcdsaSecp256k1VerificationKey2019', - publicKeyBase58: '11111111111111111111111111111111', - }, - { - id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#enc', - controller: - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', - type: 'X25519KeyAgreementKey2019', - publicKeyBase58: '11111111111111111111111111111111', - }, - ], - authentication: [ - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#auth', - ], - keyAgreement: [ - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#enc', - ], - assertionMethod: [ - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#att', - ], - capabilityDelegation: [ - 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#del', - ], - service: [ - { - id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#id-1', - type: ['type-id-1'], - serviceEndpoint: ['x:url-id-1'], - }, - { - id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#id-2', - type: ['type-id-2'], - serviceEndpoint: ['x:url-id-2'], - }, - ], - }) - }) - - it('fails to export to an unsupported mimetype', async () => { - expect(() => - // @ts-ignore - exportToDidDocument(fullDid, 'random-mime-type') - ).toThrow() - }) -}) - -describe('When exporting a DID Document from a light DID', () => { - const authKey = generateAuthenticationKey() as NewDidVerificationKey - const encKey = generateEncryptionKey() - const service = [ - generateServiceEndpoint('#id-1'), - generateServiceEndpoint('#id-2'), - ] - const lightDid = Did.createLightDidDocument({ - authentication: [{ publicKey: authKey.publicKey, type: 'ed25519' }], - keyAgreement: [{ publicKey: encKey.publicKey, type: 'x25519' }], - service, - }) - - it('exports the expected application/json W3C DID Document with an Ed25519 authentication key, one x25519 encryption key, and two service endpoints', async () => { - const didDoc = exportToDidDocument(lightDid, 'application/json') - - expect(didDoc).toMatchInlineSnapshot(` - { - "authentication": [ - "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#authentication", - ], - "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf", - "keyAgreement": [ - "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#encryption", - ], - "service": [ - { - "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#id-1", - "serviceEndpoint": [ - "x:url-id-1", - ], - "type": [ - "type-id-1", - ], - }, - { - "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#id-2", - "serviceEndpoint": [ - "x:url-id-2", - ], - "type": [ - "type-id-2", - ], - }, - ], - "verificationMethod": [ - { - "controller": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf", - "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#authentication", - "publicKeyBase58": "11111111111111111111111111111111", - "type": "Ed25519VerificationKey2018", - }, - { - "controller": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf", - "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#encryption", - "publicKeyBase58": "11111111111111111111111111111111", - "type": "X25519KeyAgreementKey2019", - }, - ], - } - `) - }) - - it('exports the expected application/json+ld W3C DID Document with an Ed25519 authentication key, one x25519 encryption key, and two service endpoints', async () => { - const didDoc = exportToDidDocument(lightDid, 'application/ld+json') - - expect(didDoc).toMatchInlineSnapshot(` - { - "@context": [ - "https://www.w3.org/ns/did/v1", - "ipfs://QmU7QkuTCPz7NmD5bD7Z7mQVz2UsSPaEK58B5sYnjnPRNW", - ], - "authentication": [ - "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#authentication", - ], - "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf", - "keyAgreement": [ - "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#encryption", - ], - "service": [ - { - "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#id-1", - "serviceEndpoint": [ - "x:url-id-1", - ], - "type": [ - "type-id-1", - ], - }, - { - "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#id-2", - "serviceEndpoint": [ - "x:url-id-2", - ], - "type": [ - "type-id-2", - ], - }, - ], - "verificationMethod": [ - { - "controller": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf", - "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#authentication", - "publicKeyBase58": "11111111111111111111111111111111", - "type": "Ed25519VerificationKey2018", - }, - { - "controller": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf", - "id": "did:kilt:light:014nv4phaKc4EcwENdRERuMF79ZSSB5xvnAk3zNySSbVbXhSwS:z16QMTH1Pc4A99Und9RZvzyikFR73Aepx9exPZPgXJX18upeuSpgXeat2LsjEQpXUBUtaRtdpSXpv42KitoFqySLjiuXVcghuoWviPci3QrnQMeD161howeWdF5GTbBFRHSVXpEu9PWbtUEsnLfDf2NQgu4LmktN8Ti6CAmdQtQiVNbJkB7TnyzLiJJ27rYayWj15mjJ9EoNyyu3rDJGomi2vUgt2DiSUXaJbnSzuuFf#encryption", - "publicKeyBase58": "11111111111111111111111111111111", - "type": "X25519KeyAgreementKey2019", - }, - ], - } - `) - }) - - it('fails to export to an unsupported mimetype', async () => { - expect(() => - // @ts-ignore - exportToDidDocument(lightDid, 'random-mime-type') - ).toThrow() - }) -}) diff --git a/packages/did/src/DidDocumentExporter/DidDocumentExporter.ts b/packages/did/src/DidDocumentExporter/DidDocumentExporter.ts deleted file mode 100644 index bfaebeb43..000000000 --- a/packages/did/src/DidDocumentExporter/DidDocumentExporter.ts +++ /dev/null @@ -1,114 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import { base58Encode } from '@polkadot/util-crypto' - -import type { - DidDocument, - ConformingDidDocument, - DidResourceUri, - JsonLDDidDocument, - UriFragment, -} from '@kiltprotocol/types' -import { - encryptionKeyTypesMap, - verificationKeyTypesMap, -} from '@kiltprotocol/types' -import { SDKErrors } from '@kiltprotocol/utils' -import { KILT_DID_CONTEXT_URL, W3C_DID_CONTEXT_URL } from './DidContexts.js' - -function exportToJsonDidDocument(did: DidDocument): ConformingDidDocument { - const { - uri: controller, - authentication, - assertionMethod = [], - capabilityDelegation = [], - keyAgreement = [], - service = [], - } = did - - function toAbsoluteUri(keyId: UriFragment): DidResourceUri { - if (keyId.startsWith(controller)) { - return keyId as DidResourceUri - } - return `${controller}${keyId}` - } - - const verificationMethod: ConformingDidDocument['verificationMethod'] = [ - ...authentication, - ...assertionMethod, - ...capabilityDelegation, - ] - .map((key) => ({ ...key, type: verificationKeyTypesMap[key.type] })) - .concat( - keyAgreement.map((key) => ({ - ...key, - type: encryptionKeyTypesMap[key.type], - })) - ) - .map(({ id, type, publicKey }) => ({ - id: toAbsoluteUri(id), - controller, - type, - publicKeyBase58: base58Encode(publicKey), - })) - .filter( - // remove duplicates - ({ id }, index, array) => - index === array.findIndex((key) => key.id === id) - ) - - return { - id: controller, - verificationMethod, - authentication: [toAbsoluteUri(authentication[0].id)], - ...(assertionMethod[0] && { - assertionMethod: [toAbsoluteUri(assertionMethod[0].id)], - }), - ...(capabilityDelegation[0] && { - capabilityDelegation: [toAbsoluteUri(capabilityDelegation[0].id)], - }), - ...(keyAgreement.length > 0 && { - keyAgreement: [toAbsoluteUri(keyAgreement[0].id)], - }), - ...(service.length > 0 && { - service: service.map((endpoint) => ({ - ...endpoint, - id: `${controller}${endpoint.id}`, - })), - }), - } -} - -function exportToJsonLdDidDocument(did: DidDocument): JsonLDDidDocument { - const document = exportToJsonDidDocument(did) - document['@context'] = [W3C_DID_CONTEXT_URL, KILT_DID_CONTEXT_URL] - return document as JsonLDDidDocument -} - -/** - * Export a [[DidDocument]] to a W3C-spec conforming DID Document in the format provided. - * - * @param did The [[DidDocument]]. - * @param mimeType The format for the output DID Document. Accepted values are `application/json` and `application/ld+json`. - * @returns The DID Document formatted according to the mime type provided, or an error if the format specified is not supported. - */ -export function exportToDidDocument( - did: DidDocument, - mimeType: 'application/json' | 'application/ld+json' -): ConformingDidDocument { - switch (mimeType) { - case 'application/json': - return exportToJsonDidDocument(did) - case 'application/ld+json': - return exportToJsonLdDidDocument(did) - default: - throw new SDKErrors.DidExporterError( - `The MIME type "${mimeType}" not supported by any of the available exporters` - ) - } -} diff --git a/packages/did/src/DidDocumentExporter/README.md b/packages/did/src/DidDocumentExporter/README.md deleted file mode 100644 index e9c90965e..000000000 --- a/packages/did/src/DidDocumentExporter/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# DID Document exporter - -The DID Document exporter provides the functionality needed to convert an instance of a generic `DidDocument` into a document that is compliant with the [W3C specification](https://www.w3.org/TR/did-core/). This component is required for the KILT plugin for the [DIF Universal Resolver](https://dev.uniresolver.io/). - -For a list of examples and code snippets, please refer to our [official documentation](https://docs.kilt.io/docs/develop/sdk/cookbook/dids/did-export). diff --git a/packages/did/src/DidDocumentExporter/index.ts b/packages/did/src/DidDocumentExporter/index.ts deleted file mode 100644 index 3243aecb8..000000000 --- a/packages/did/src/DidDocumentExporter/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -export * from './DidDocumentExporter.js' -export * from './DidContexts.js' diff --git a/packages/did/src/DidLinks/AccountLinks.chain.ts b/packages/did/src/DidLinks/AccountLinks.chain.ts index 882568d3b..745e6777d 100644 --- a/packages/did/src/DidLinks/AccountLinks.chain.ts +++ b/packages/did/src/DidLinks/AccountLinks.chain.ts @@ -8,26 +8,26 @@ import { decodeAddress, signatureVerify } from '@polkadot/util-crypto' import type { TypeDef } from '@polkadot/types/types' import type { KeypairType } from '@polkadot/util-crypto/types' +import type { ApiPromise } from '@polkadot/api' +import type { BN } from '@polkadot/util' +import type { + Did, + HexString, + KeyringPair, + KiltAddress, +} from '@kiltprotocol/types' + import { stringToU8a, U8A_WRAP_ETHEREUM, u8aConcatStrict, u8aToHex, u8aWrapBytes, - BN, } from '@polkadot/util' -import { ApiPromise } from '@polkadot/api' - import { SDKErrors } from '@kiltprotocol/utils' import { ConfigService } from '@kiltprotocol/config' -import type { - DidUri, - HexString, - KeyringPair, - KiltAddress, -} from '@kiltprotocol/types' -import { EncodedSignature } from '../Did.utils.js' +import type { EncodedSignature } from '../Did.chain.js' import { toChain } from '../Did.chain.js' /** @@ -134,7 +134,7 @@ function getUnprefixedSignature( } async function getLinkingChallengeV1( - did: DidUri, + did: Did, validUntil: BN ): Promise { const api = ConfigService.get('api') @@ -156,7 +156,7 @@ async function getLinkingChallengeV1( .toU8a() } -function getLinkingChallengeV2(did: DidUri, validUntil: BN): Uint8Array { +function getLinkingChallengeV2(did: Did, validUntil: BN): Uint8Array { return stringToU8a( `Publicly link the signing address to ${did} before block number ${validUntil}` ) @@ -167,12 +167,12 @@ function getLinkingChallengeV2(did: DidUri, validUntil: BN): Uint8Array { * The account has to sign the challenge, while the DID will sign the extrinsic that contains the challenge and will * link the account to the DID. * - * @param did The URI of the DID that that should be linked to an account. + * @param did The DID that should be linked to an account. * @param validUntil Last blocknumber that this challenge is valid for. * @returns The encoded challenge. */ export async function getLinkingChallenge( - did: DidUri, + did: Did, validUntil: BN ): Promise { const api = ConfigService.get('api') @@ -261,7 +261,7 @@ export function getWrappedChallenge( */ export async function associateAccountToChainArgs( accountAddress: Address, - did: DidUri, + did: Did, sign: (encodedLinkingDetails: HexString) => Promise, nBlocksValid = 10 ): Promise { diff --git a/packages/did/src/DidDocumentExporter/DidContexts.ts b/packages/did/src/DidResolver/DidContexts.ts similarity index 80% rename from packages/did/src/DidDocumentExporter/DidContexts.ts rename to packages/did/src/DidResolver/DidContexts.ts index 196e35a2d..7552eed08 100644 --- a/packages/did/src/DidDocumentExporter/DidContexts.ts +++ b/packages/did/src/DidResolver/DidContexts.ts @@ -7,18 +7,24 @@ // @ts-expect-error not a TS package import securityContexts from '@digitalbazaar/security-context' +// @ts-expect-error not a TS package +import multikeyContexts from '@digitalbazaar/multikey-context' const securityContextsMap: Map< string, Record > = securityContexts.contexts +const multikeyContextsMap: Map< + string, + Record +> = multikeyContexts.contexts /** * IPFS URL identifying a JSON-LD context file describing terms used in DID documents of the KILT method that are not defined in the W3C DID core context. - * Should be the second entry in the ordered set of contexts after [[W3C_DID_CONTEXT_URL]] in the JSON-LD representation of a KILT DID document. + * Should be the third entry in the ordered set of contexts after {@link W3C_DID_CONTEXT_URL} and {@link W3C_MULTIKEY_CONTEXT_URL} in the JSON-LD representation of a KILT DID document. */ export const KILT_DID_CONTEXT_URL = - 'ipfs://QmU7QkuTCPz7NmD5bD7Z7mQVz2UsSPaEK58B5sYnjnPRNW' + 'ipfs://QmPtQ7wbdxbTuGugx4nFAyrhspcqXKrnriuGr7x4NYaZYN' /** * URL identifying the JSON-LD context file that is part of the W3C DID core specifications describing the terms defined by the core data model. * Must be the first entry in the ordered set of contexts in a JSON-LD representation of a DID document. @@ -28,9 +34,14 @@ export const W3C_DID_CONTEXT_URL = 'https://www.w3.org/ns/did/v1' /** * URL identifying a JSON-LD context file proposed by the W3C Credentials Community Group defining a number of terms which are used in verification methods on KILT DID documents. * See https://w3c-ccg.github.io/security-vocab/. - * This document is extended by the context file available under the [[KILT_DID_CONTEXT_URL]]. + * This document is extended by the context file available under the {@link KILT_DID_CONTEXT_URL}. */ export const W3C_SECURITY_CONTEXT_URL = securityContexts.SECURITY_CONTEXT_V2_URL +/** + * URL identifying a JSON-LD context file proposed by the W3C Credentials Community Group defining the `Multikey` verification method type, used in verification methods on KILT DID documents. + * This document is extended by the context file available under the {@link KILT_DID_CONTEXT_URL}. + */ +export const W3C_MULTIKEY_CONTEXT_URL = multikeyContexts.CONTEXT_URL /** * An object containing static copies of JSON-LD context files relevant to KILT DID documents, of the form -> context. * These context definitions are not supposed to change; therefore, a cached version can (and should) be used to avoid unexpected changes in definitions. @@ -39,6 +50,7 @@ export const DID_CONTEXTS = { [KILT_DID_CONTEXT_URL]: { '@context': [ W3C_SECURITY_CONTEXT_URL, + W3C_MULTIKEY_CONTEXT_URL, { '@protected': true, KiltPublishedCredentialCollectionV1: @@ -107,4 +119,5 @@ export const DID_CONTEXTS = { }, }, ...Object.fromEntries(securityContextsMap), + ...Object.fromEntries(multikeyContextsMap), } diff --git a/packages/did/src/DidResolver/DidResolver.spec.ts b/packages/did/src/DidResolver/DidResolver.spec.ts index 4a1c21280..4080ee6f2 100644 --- a/packages/did/src/DidResolver/DidResolver.spec.ts +++ b/packages/did/src/DidResolver/DidResolver.spec.ts @@ -5,50 +5,35 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { BN } from '@polkadot/util' -import { base58Encode } from '@polkadot/util-crypto' - import { ConfigService } from '@kiltprotocol/config' -import type { - ConformingDidKey, - ConformingDidServiceEndpoint, - DidEncryptionKey, - DidKey, - DidResolutionDocumentMetadata, - DidResolutionMetadata, - DidResolutionResult, - DidResourceUri, - DidServiceEndpoint, - DidUri, - DidVerificationKey, +import { + DereferenceResult, + Did as KiltDid, + DidUrl, KiltAddress, - ResolvedDidKey, - ResolvedDidServiceEndpoint, + RepresentationResolutionResult, + ResolutionResult, + Service, UriFragment, + VerificationMethod, } from '@kiltprotocol/types' -import { Crypto } from '@kiltprotocol/utils' +import { Crypto, cbor } from '@kiltprotocol/utils' +import { stringToU8a } from '@polkadot/util' import { ApiMocks, makeSigningKeyTool } from '../../../../tests/testUtils' import { linkedInfoFromChain } from '../Did.rpc.js' -import { getFullDidUriFromKey } from '../Did.utils' import * as Did from '../index.js' -import { - resolve, - resolveCompliant, - resolveKey, - resolveService, -} from './index.js' const addressWithAuthenticationKey = '4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' -const didWithAuthenticationKey: DidUri = `did:kilt:${addressWithAuthenticationKey}` +const didWithAuthenticationKey: KiltDid = `did:kilt:${addressWithAuthenticationKey}` const addressWithAllKeys = `4sDxAgw86PFvC6TQbvZzo19WoYF6T4HcLd2i9wzvojkLXLvp` -const didWithAllKeys: DidUri = `did:kilt:${addressWithAllKeys}` +const didWithAllKeys: KiltDid = `did:kilt:${addressWithAllKeys}` const addressWithServiceEndpoints = `4q4DHavMdesaSMH3g32xH3fhxYPt5pmoP9oSwgTr73dQLrkN` -const didWithServiceEndpoints: DidUri = `did:kilt:${addressWithServiceEndpoints}` +const didWithServiceEndpoints: KiltDid = `did:kilt:${addressWithServiceEndpoints}` const deletedAddress = '4rrVTLAXgeoE8jo8si571HnqHtd5WmvLuzfH6e1xBsVXsRo7' -const deletedDid: DidUri = `did:kilt:${deletedAddress}` +const deletedDid: KiltDid = `did:kilt:${deletedAddress}` const didIsBlacklisted = ApiMocks.mockChainQueryReturn( 'did', @@ -63,7 +48,7 @@ beforeAll(() => { mockedApi = ApiMocks.getMockedApi() ConfigService.set({ api: mockedApi }) - // Mock `api.call.did.query(didUri)` + // Mock `api.call.did.query(did)` // By default it returns a simple LinkedDidInfo with no web3name and no accounts linked. jest .spyOn(mockedApi.call.did, 'query') @@ -95,42 +80,63 @@ beforeAll(() => { }) }) -function generateAuthenticationKey(): DidVerificationKey { +function generateAuthenticationVerificationMethod( + controller: KiltDid +): VerificationMethod { return { id: '#auth', - type: 'ed25519', - publicKey: new Uint8Array(32).fill(0), + controller, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: new Uint8Array(32).fill(0), + type: 'ed25519', + }), } } -function generateEncryptionKey(): DidEncryptionKey { +function generateEncryptionVerificationMethod( + controller: KiltDid +): VerificationMethod { return { id: '#enc', - type: 'x25519', - publicKey: new Uint8Array(32).fill(1), - includedAt: new BN(15), + controller, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: new Uint8Array(32).fill(1), + type: 'x25519', + }), } } -function generateAttestationKey(): DidVerificationKey { +function generateAssertionVerificationMethod( + controller: KiltDid +): VerificationMethod { return { id: '#att', - type: 'sr25519', - publicKey: new Uint8Array(32).fill(2), - includedAt: new BN(20), + controller, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: new Uint8Array(32).fill(2), + type: 'sr25519', + }), } } -function generateDelegationKey(): DidVerificationKey { +function generateCapabilityDelegationVerificationMethod( + controller: KiltDid +): VerificationMethod { return { id: '#del', - type: 'ecdsa', - publicKey: new Uint8Array(32).fill(3), - includedAt: new BN(25), + controller, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: new Uint8Array(33).fill(3), + type: 'ecdsa', + }), } } -function generateServiceEndpoint(serviceId: UriFragment): DidServiceEndpoint { +function generateServiceEndpoint(serviceId: UriFragment): Service { const fragment = serviceId.substring(1) return { id: serviceId, @@ -140,256 +146,349 @@ function generateServiceEndpoint(serviceId: UriFragment): DidServiceEndpoint { } jest.mock('../Did.rpc.js') -// By default its mock returns a DIDDocument with the test authentication key, test service, and the URI derived from the identifier provided in the resolution. +// By default its mock returns a DIDDocument with the test authentication key, test service, and the DID derived from the identifier provided in the resolution. jest.mocked(linkedInfoFromChain).mockImplementation((linkedInfo) => { const { identifier } = linkedInfo.unwrap() + const did: KiltDid = `did:kilt:${identifier as unknown as KiltAddress}` + const authMethod = generateAuthenticationVerificationMethod(did) return { accounts: [], document: { - uri: `did:kilt:${identifier as unknown as KiltAddress}`, - authentication: [generateAuthenticationKey()], + id: did, + authentication: [authMethod.id], + verificationMethod: [authMethod], service: [generateServiceEndpoint('#service-1')], }, } }) -describe('When resolving a key', () => { - it('correctly resolves it for a full DID if both the DID and the key exist', async () => { +describe('When dereferencing a verification method', () => { + it('correctly dereference it for a full DID if both the DID and the verification method exist', async () => { const fullDid = didWithAuthenticationKey - const keyIdUri: DidResourceUri = `${fullDid}#auth` + const verificationMethodUrl: DidUrl = `${fullDid}#auth` - expect(await resolveKey(keyIdUri)).toStrictEqual({ - controller: fullDid, - publicKey: new Uint8Array(32).fill(0), - id: keyIdUri, - type: 'ed25519', + expect( + await Did.dereference(verificationMethodUrl, { + accept: 'application/did+json', + }) + ).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { contentType: 'application/did+json' }, + contentStream: generateAuthenticationVerificationMethod(fullDid), }) }) - it('returns null if either the DID or the key do not exist', async () => { - let keyIdUri: DidResourceUri = `${deletedDid}#enc` + it('returns error if either the DID or the verification method do not exist', async () => { + let verificationMethodUrl: DidUrl = `${deletedDid}#enc` - await expect(resolveKey(keyIdUri)).rejects.toThrow() + expect( + await Did.dereference(verificationMethodUrl) + ).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { error: 'notFound' }, + }) const didWithNoEncryptionKey = didWithAuthenticationKey - keyIdUri = `${didWithNoEncryptionKey}#enc` + verificationMethodUrl = `${didWithNoEncryptionKey}#enc` - await expect(resolveKey(keyIdUri)).rejects.toThrow() + expect( + await Did.dereference(verificationMethodUrl) + ).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { error: 'notFound' }, + }) }) - it('throws for invalid URIs', async () => { - const uriWithoutFragment = deletedDid - await expect( - resolveKey(uriWithoutFragment as DidResourceUri) - ).rejects.toThrow() + it('throws for invalid URLs', async () => { + const invalidUrl = 'invalid-url' as DidUrl + expect(await Did.dereference(invalidUrl)).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { error: 'invalidDidUrl' }, + }) + }) - const invalidUri = 'invalid-uri' as DidResourceUri - await expect(resolveKey(invalidUri)).rejects.toThrow() + it('throws for valid light URLs but with details that cannot be decoded', async () => { + const invalidLightDidUrl = + `did:kilt:light:00${addressWithAuthenticationKey}:z22222#auth` as DidUrl + expect( + await Did.dereference(invalidLightDidUrl) + ).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { error: 'invalidDidUrl' }, + }) }) }) -describe('When resolving a service endpoint', () => { +describe('When resolving a service', () => { it('correctly resolves it for a full DID if both the DID and the endpoint exist', async () => { const fullDid = didWithServiceEndpoints - const serviceIdUri: DidResourceUri = `${fullDid}#service-1` + const serviceIdUrl: DidUrl = `${fullDid}#service-1` expect( - await resolveService(serviceIdUri) - ).toStrictEqual({ - id: serviceIdUri, - type: [`type-service-1`], - serviceEndpoint: [`x:url-service-1`], + await Did.dereference(serviceIdUrl, { + accept: 'application/did+json', + }) + ).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { contentType: 'application/did+json' }, + contentStream: { + id: '#service-1', + type: [`type-service-1`], + serviceEndpoint: [`x:url-service-1`], + }, }) }) - it('returns null if either the DID or the service do not exist', async () => { + it('returns error if either the DID or the service do not exist', async () => { // Mock transform function changed to not return any services (twice). jest.mocked(linkedInfoFromChain).mockImplementationOnce((linkedInfo) => { const { identifier } = linkedInfo.unwrap() + const did: KiltDid = `did:kilt:${identifier as unknown as KiltAddress}` + const authMethod = generateAuthenticationVerificationMethod(did) return { accounts: [], document: { - uri: `did:kilt:${identifier as unknown as KiltAddress}`, - authentication: [generateAuthenticationKey()], + id: did, + authentication: [authMethod.id], + verificationMethod: [authMethod], }, } }) jest.mocked(linkedInfoFromChain).mockImplementationOnce((linkedInfo) => { const { identifier } = linkedInfo.unwrap() + const did: KiltDid = `did:kilt:${identifier as unknown as KiltAddress}` + const authMethod = generateAuthenticationVerificationMethod(did) return { accounts: [], document: { - uri: `did:kilt:${identifier as unknown as KiltAddress}`, - authentication: [generateAuthenticationKey()], + id: did, + authentication: [authMethod.id], + verificationMethod: [authMethod], }, } }) - let serviceIdUri: DidResourceUri = `${deletedDid}#service-1` + let serviceIdUrl: DidUrl = `${deletedDid}#service-1` - await expect(resolveService(serviceIdUri)).rejects.toThrow() + expect( + await Did.dereference(serviceIdUrl) + ).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { error: 'notFound' }, + }) const didWithNoServiceEndpoints = didWithAuthenticationKey - serviceIdUri = `${didWithNoServiceEndpoints}#service-1` - - await expect(resolveService(serviceIdUri)).rejects.toThrow() - }) + serviceIdUrl = `${didWithNoServiceEndpoints}#service-1` - it('throws for invalid URIs', async () => { - const uriWithoutFragment = deletedDid - await expect( - resolveService(uriWithoutFragment as DidResourceUri) - ).rejects.toThrow() - - const invalidUri = 'invalid-uri' as DidResourceUri - await expect(resolveService(invalidUri)).rejects.toThrow() + expect( + await Did.dereference(serviceIdUrl) + ).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { error: 'notFound' }, + }) }) }) describe('When resolving a full DID', () => { - it('correctly resolves the document with an authentication key', async () => { + it('correctly resolves the document with an authentication verification method', async () => { const fullDidWithAuthenticationKey = didWithAuthenticationKey - const { document, metadata, web3Name } = (await resolve( - fullDidWithAuthenticationKey - )) as DidResolutionResult - if (document === undefined) throw new Error('Document unresolved') - - expect(metadata).toStrictEqual({ - deactivated: false, - }) - expect(document.uri).toStrictEqual(fullDidWithAuthenticationKey) - expect(Did.getKeys(document)).toStrictEqual([ - { - id: '#auth', - type: 'ed25519', - publicKey: new Uint8Array(32).fill(0), + expect( + await Did.resolve(fullDidWithAuthenticationKey) + ).toMatchObject({ + didDocumentMetadata: {}, + didResolutionMetadata: {}, + didDocument: { + id: fullDidWithAuthenticationKey, + authentication: ['#auth'], + verificationMethod: [ + { + controller: fullDidWithAuthenticationKey, + id: '#auth', + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + type: 'ed25519', + publicKey: new Uint8Array(32).fill(0), + }), + }, + ], }, - ]) - expect(web3Name).toBeUndefined() + }) }) it('correctly resolves the document with all keys', async () => { // Mock transform function changed to return all keys for the DIDDocument. jest.mocked(linkedInfoFromChain).mockImplementationOnce((linkedInfo) => { const { identifier } = linkedInfo.unwrap() + const did: KiltDid = `did:kilt:${identifier as unknown as KiltAddress}` + const authMethod = generateAuthenticationVerificationMethod(did) + const encMethod = generateEncryptionVerificationMethod(did) + const attMethod = generateAssertionVerificationMethod(did) + const delMethod = generateCapabilityDelegationVerificationMethod(did) return { accounts: [], document: { - authentication: [generateAuthenticationKey()], - keyAgreement: [generateEncryptionKey()], - assertionMethod: [generateAttestationKey()], - capabilityDelegation: [generateDelegationKey()], - uri: `did:kilt:${identifier as unknown as KiltAddress}`, + id: did, + authentication: [authMethod.id], + keyAgreement: [encMethod.id], + assertionMethod: [attMethod.id], + capabilityDelegation: [delMethod.id], + verificationMethod: [authMethod, encMethod, attMethod, delMethod], }, } }) const fullDidWithAllKeys = didWithAllKeys - const { document, metadata } = (await resolve( - fullDidWithAllKeys - )) as DidResolutionResult - if (document === undefined) throw new Error('Document unresolved') - - expect(metadata).toStrictEqual({ - deactivated: false, - }) - expect(document.uri).toStrictEqual(fullDidWithAllKeys) - expect(Did.getKeys(document)).toStrictEqual([ - { - id: '#auth', - type: 'ed25519', - publicKey: new Uint8Array(32).fill(0), - }, - { - id: '#att', - type: 'sr25519', - publicKey: new Uint8Array(32).fill(2), - includedAt: new BN(20), - }, - { - id: '#del', - type: 'ecdsa', - publicKey: new Uint8Array(32).fill(3), - includedAt: new BN(25), - }, - { - id: '#enc', - type: 'x25519', - publicKey: new Uint8Array(32).fill(1), - includedAt: new BN(15), + expect( + await Did.resolve(fullDidWithAllKeys) + ).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: {}, + didDocument: { + id: fullDidWithAllKeys, + authentication: ['#auth'], + keyAgreement: ['#enc'], + assertionMethod: ['#att'], + capabilityDelegation: ['#del'], + verificationMethod: [ + { + controller: fullDidWithAllKeys, + id: '#auth', + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + type: 'ed25519', + publicKey: new Uint8Array(32).fill(0), + }), + }, + { + controller: fullDidWithAllKeys, + id: '#enc', + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + type: 'x25519', + publicKey: new Uint8Array(32).fill(1), + }), + }, + { + controller: fullDidWithAllKeys, + id: '#att', + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + type: 'sr25519', + publicKey: new Uint8Array(32).fill(2), + }), + }, + { + controller: fullDidWithAllKeys, + id: '#del', + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + type: 'ecdsa', + publicKey: new Uint8Array(33).fill(3), + }), + }, + ], }, - ]) + }) }) - it('correctly resolves the document with service endpoints', async () => { - // Mock transform function changed to return two service endpoints. + it('correctly resolves the document with services', async () => { + // Mock transform function changed to return two services. jest.mocked(linkedInfoFromChain).mockImplementationOnce((linkedInfo) => { const { identifier } = linkedInfo.unwrap() + const did: KiltDid = `did:kilt:${identifier as unknown as KiltAddress}` + const authMethod = generateAuthenticationVerificationMethod(did) return { accounts: [], document: { - authentication: [generateAuthenticationKey()], + id: did, + authentication: [authMethod.id], + verificationMethod: [authMethod], service: [ generateServiceEndpoint('#id-1'), generateServiceEndpoint('#id-2'), ], - uri: `did:kilt:${identifier as unknown as KiltAddress}`, }, } }) const fullDidWithServiceEndpoints = didWithServiceEndpoints - const { document, metadata } = (await resolve( - fullDidWithServiceEndpoints - )) as DidResolutionResult - if (document === undefined) throw new Error('Document unresolved') - - expect(metadata).toStrictEqual({ - deactivated: false, - }) - expect(document.uri).toStrictEqual(fullDidWithServiceEndpoints) - expect(document.service).toStrictEqual([ - { - id: '#id-1', - type: ['type-id-1'], - serviceEndpoint: ['x:url-id-1'], - }, - { - id: '#id-2', - type: ['type-id-2'], - serviceEndpoint: ['x:url-id-2'], + expect( + await Did.resolve(fullDidWithServiceEndpoints) + ).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: {}, + didDocument: { + id: fullDidWithServiceEndpoints, + authentication: ['#auth'], + verificationMethod: [ + { + controller: fullDidWithServiceEndpoints, + id: '#auth', + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + type: 'ed25519', + publicKey: new Uint8Array(32).fill(0), + }), + }, + ], + service: [ + { + id: '#id-1', + type: ['type-id-1'], + serviceEndpoint: ['x:url-id-1'], + }, + { + id: '#id-2', + type: ['type-id-2'], + serviceEndpoint: ['x:url-id-2'], + }, + ], }, - ]) + }) }) it('correctly resolves the document with web3Name', async () => { - // Mock transform function changed to return two service endpoints. + // Mock transform function changed to return two services. jest.mocked(linkedInfoFromChain).mockImplementationOnce((linkedInfo) => { const { identifier } = linkedInfo.unwrap() + const did: KiltDid = `did:kilt:${identifier as unknown as KiltAddress}` + const authMethod = generateAuthenticationVerificationMethod(did) return { accounts: [], document: { - authentication: [generateAuthenticationKey()], - service: [], - uri: `did:kilt:${identifier as unknown as KiltAddress}`, + id: did, + authentication: [authMethod.id], + verificationMethod: [authMethod], + alsoKnownAs: ['w3n:w3nick'], }, - web3Name: 'w3nick', } }) - const { document, metadata, web3Name } = (await resolve( - didWithAuthenticationKey - )) as DidResolutionResult - if (document === undefined) throw new Error('Document unresolved') - - expect(metadata).toStrictEqual({ - deactivated: false, + expect( + await Did.resolve(didWithAuthenticationKey) + ).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: {}, + didDocument: { + id: didWithAuthenticationKey, + authentication: ['#auth'], + verificationMethod: [ + { + controller: didWithAuthenticationKey, + id: '#auth', + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + type: 'ed25519', + publicKey: new Uint8Array(32).fill(0), + }), + }, + ], + alsoKnownAs: ['w3n:w3nick'], + }, }) - expect(document.uri).toStrictEqual(didWithAuthenticationKey) - expect(web3Name).toStrictEqual('w3nick') }) it('correctly resolves a non-existing DID', async () => { @@ -399,10 +498,14 @@ describe('When resolving a full DID', () => { .mockResolvedValueOnce( augmentedApi.createType('Option', null) ) - const randomDid = getFullDidUriFromKey( - makeSigningKeyTool().authentication[0] - ) - expect(await resolve(randomDid)).toBeNull() + const randomKeypair = (await makeSigningKeyTool()).authentication[0] + const randomDid = Did.getFullDidFromVerificationMethod({ + publicKeyMultibase: Did.keypairToMultibaseKey(randomKeypair), + }) + expect(await Did.resolve(randomDid)).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: { error: 'notFound' }, + }) }) it('correctly resolves a deleted DID', async () => { @@ -414,27 +517,11 @@ describe('When resolving a full DID', () => { ) mockedApi.query.did.didBlacklist.mockReturnValueOnce(didIsBlacklisted) - const { document, metadata } = (await resolve( - deletedDid - )) as DidResolutionResult - - expect(metadata).toStrictEqual({ - deactivated: true, + expect(await Did.resolve(deletedDid)).toStrictEqual({ + didDocumentMetadata: { deactivated: true }, + didResolutionMetadata: {}, + didDocument: { id: deletedDid }, }) - expect(document).toBeUndefined() - }) - - it('correctly resolves DID document given a fragment', async () => { - const fullDidWithAuthenticationKey = didWithAuthenticationKey - const keyIdUri: DidUri = `${fullDidWithAuthenticationKey}#auth` - const { document, metadata } = (await resolve( - keyIdUri - )) as DidResolutionResult - - expect(metadata).toStrictEqual({ - deactivated: false, - }) - expect(document?.uri).toStrictEqual(fullDidWithAuthenticationKey) }) }) @@ -455,26 +542,31 @@ describe('When resolving a light DID', () => { const lightDidWithAuthenticationKey = Did.createLightDidDocument({ authentication: [{ publicKey: authKey.publicKey, type: 'sr25519' }], }) - const { document, metadata } = (await resolve( - lightDidWithAuthenticationKey.uri - )) as DidResolutionResult - - expect(metadata).toStrictEqual({ - deactivated: false, - }) - expect(document?.uri).toStrictEqual( - lightDidWithAuthenticationKey.uri - ) - expect(Did.getKeys(lightDidWithAuthenticationKey)).toStrictEqual([ - { - id: '#authentication', - type: 'sr25519', - publicKey: authKey.publicKey, + expect( + await Did.resolve(lightDidWithAuthenticationKey.id) + ).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: {}, + didDocument: { + id: lightDidWithAuthenticationKey.id, + authentication: ['#authentication'], + verificationMethod: [ + { + controller: lightDidWithAuthenticationKey.id, + id: '#authentication', + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + ...authKey, + type: 'sr25519', + }), + }, + ], + service: undefined, }, - ]) + }) }) - it('correctly resolves the document with authentication key, encryption key, and two service endpoints', async () => { + it('correctly resolves the document with authentication key, encryption key, and two services', async () => { const lightDid = Did.createLightDidDocument({ authentication: [{ publicKey: authKey.publicKey, type: 'sr25519' }], keyAgreement: [{ publicKey: encryptionKey.publicKey, type: 'x25519' }], @@ -483,38 +575,44 @@ describe('When resolving a light DID', () => { generateServiceEndpoint('#service-2'), ], }) - const { document, metadata } = (await resolve( - lightDid.uri - )) as DidResolutionResult - - expect(metadata).toStrictEqual({ - deactivated: false, - }) - expect(document?.uri).toStrictEqual(lightDid.uri) - expect(Did.getKeys(lightDid)).toStrictEqual([ - { - id: '#authentication', - type: 'sr25519', - publicKey: authKey.publicKey, - }, - { - id: '#encryption', - type: 'x25519', - publicKey: encryptionKey.publicKey, - }, - ]) - expect(lightDid.service).toStrictEqual([ - { - id: '#service-1', - type: ['type-service-1'], - serviceEndpoint: ['x:url-service-1'], - }, - { - id: '#service-2', - type: ['type-service-2'], - serviceEndpoint: ['x:url-service-2'], + expect(await Did.resolve(lightDid.id)).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: {}, + didDocument: { + id: lightDid.id, + authentication: ['#authentication'], + keyAgreement: ['#encryption'], + verificationMethod: [ + { + controller: lightDid.id, + id: '#authentication', + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + ...authKey, + type: 'sr25519', + }), + }, + { + controller: lightDid.id, + id: '#encryption', + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey(encryptionKey), + }, + ], + service: [ + { + id: '#service-1', + type: ['type-service-1'], + serviceEndpoint: ['x:url-service-1'], + }, + { + id: '#service-2', + type: ['type-service-2'], + serviceEndpoint: ['x:url-service-2'], + }, + ], }, - ]) + }) }) it('correctly resolves a migrated and not deleted DID', async () => { @@ -538,175 +636,440 @@ describe('When resolving a light DID', () => { }, }) ) - const migratedDid: DidUri = `did:kilt:light:00${addressWithAuthenticationKey}` - const { document, metadata } = (await resolve( - migratedDid - )) as DidResolutionResult - - expect(metadata).toStrictEqual({ - deactivated: false, - canonicalId: didWithAuthenticationKey, + const migratedDid: KiltDid = `did:kilt:light:00${addressWithAuthenticationKey}` + expect(await Did.resolve(migratedDid)).toStrictEqual({ + didDocumentMetadata: { canonicalId: didWithAuthenticationKey }, + didResolutionMetadata: {}, + didDocument: { + id: migratedDid, + }, }) - expect(document).toBe(undefined) }) it('correctly resolves a migrated and deleted DID', async () => { // Mock the resolved DID as deleted. mockedApi.query.did.didBlacklist.mockReturnValueOnce(didIsBlacklisted) - const migratedDid: DidUri = `did:kilt:light:00${deletedAddress}` - const { document, metadata } = (await resolve( - migratedDid - )) as DidResolutionResult - - expect(metadata).toStrictEqual({ - deactivated: true, + const migratedDid: KiltDid = `did:kilt:light:00${deletedAddress}` + expect(await Did.resolve(migratedDid)).toStrictEqual({ + didDocumentMetadata: { deactivated: true }, + didResolutionMetadata: {}, + didDocument: { + id: migratedDid, + }, }) - expect(document).toBeUndefined() }) - it('correctly resolves DID document given a fragment', async () => { - const lightDid = Did.createLightDidDocument({ - authentication: [{ publicKey: authKey.publicKey, type: 'sr25519' }], - }) - const keyIdUri: DidUri = `${lightDid.uri}#auth` - const { document, metadata } = (await resolve( - keyIdUri - )) as DidResolutionResult - - expect(metadata).toStrictEqual({ - deactivated: false, + it('throws for valid a light DID but with details that cannot be decoded', async () => { + const invalidLightDid: KiltDid = `did:kilt:light:00${addressWithAuthenticationKey}:z22222` + expect(await Did.resolve(invalidLightDid)).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: { error: 'invalidDid' }, }) - expect(document?.uri).toStrictEqual(lightDid.uri) }) }) -describe('When resolving with the spec compliant resolver', () => { +describe('DID Resolution compliance', () => { beforeAll(() => { jest .spyOn(mockedApi.call.did, 'query') .mockImplementation(async (identifier) => { return augmentedApi.createType('Option', { identifier, + accounts: [], + w3n: null, + serviceEndpoints: [ + { + id: 'foo', + serviceTypes: ['type-service-1'], + urls: ['x:url-service-1'], + }, + ], + details: { + authenticationKey: '01234567890123456789012345678901', + keyAgreementKeys: [], + delegationKey: null, + attestationKey: null, + publicKeys: [], + lastTxCounter: 123, + deposit: { + owner: addressWithAuthenticationKey, + amount: 0, + }, + }, }) }) - // Mock transform function changed to return two service endpoints. - jest.mocked(linkedInfoFromChain).mockImplementationOnce((linkedInfo) => { + jest.mocked(linkedInfoFromChain).mockImplementation((linkedInfo) => { const { identifier } = linkedInfo.unwrap() + const did: KiltDid = `did:kilt:${identifier as unknown as KiltAddress}` + const authMethod = generateAuthenticationVerificationMethod(did) return { accounts: [], document: { - authentication: [generateAuthenticationKey()], - service: [ - generateServiceEndpoint('#id-1'), - generateServiceEndpoint('#id-2'), - ], - uri: `did:kilt:${identifier as unknown as KiltAddress}`, + id: did, + authentication: [authMethod.id], + verificationMethod: [authMethod], }, - web3Name: 'w3nick', } }) }) - - it('returns a spec-compliant DID document', async () => { - const { didDocument, didDocumentMetadata, didResolutionMetadata } = - await resolveCompliant(didWithAuthenticationKey) - if (didDocument === undefined) throw new Error('Document unresolved') - - expect(didDocumentMetadata).toStrictEqual({ - deactivated: false, + describe('resolve(did, resolutionOptions) → « didResolutionMetadata, didDocument, didDocumentMetadata »', () => { + it('returns empty `didDocumentMetadata` and `didResolutionMetadata` when successfully returning a DID Document that has not been deleted nor migrated', async () => { + const did: KiltDid = + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' + expect(await Did.resolve(did)).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: {}, + didDocument: { + id: did, + authentication: ['#auth'], + verificationMethod: [ + { + id: '#auth', + controller: did, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: new Uint8Array(32).fill(0), + type: 'ed25519', + }), + }, + ], + }, + }) }) - - expect(didResolutionMetadata).toStrictEqual({}) - - expect(didDocument.id).toStrictEqual(didWithAuthenticationKey) - expect(didDocument.authentication).toStrictEqual([`${didDocument.id}#auth`]) - expect(didDocument.verificationMethod).toContainEqual({ - id: `${didWithAuthenticationKey}${'#auth'}`, - controller: didWithAuthenticationKey, - type: 'Ed25519VerificationKey2018', - publicKeyBase58: base58Encode(new Uint8Array(32).fill(0)), + it('returns the right `didResolutionMetadata.error` when the DID does not exist', async () => { + jest + .spyOn(mockedApi.call.did, 'query') + .mockResolvedValueOnce( + augmentedApi.createType('Option', null) + ) + const did: KiltDid = + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' + expect(await Did.resolve(did)).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: { error: 'notFound' }, + }) + }) + it('returns the right `didResolutionMetadata.error` when the input DID is invalid', async () => { + const did = 'did:kilt:test-did' as unknown as KiltDid + expect(await Did.resolve(did)).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: { error: 'invalidDid' }, + }) }) - expect(didDocument.service).toStrictEqual([ - { - id: `${didWithAuthenticationKey}#id-1`, - type: ['type-id-1'], - serviceEndpoint: ['x:url-id-1'], - }, - { - id: `${didWithAuthenticationKey}#id-2`, - type: ['type-id-2'], - serviceEndpoint: ['x:url-id-2'], - }, - ]) - expect(didDocument).toHaveProperty('alsoKnownAs', ['w3n:w3nick']) }) - it('correctly resolves a non-existing DID', async () => { - // RPC call changed to not return anything. - jest - .spyOn(mockedApi.call.did, 'query') - .mockResolvedValueOnce( - augmentedApi.createType('Option', null) - ) - const randomDid = getFullDidUriFromKey( - makeSigningKeyTool().authentication[0] - ) - - const { didDocument, didDocumentMetadata, didResolutionMetadata } = - await resolveCompliant(randomDid) - - expect(didDocumentMetadata).toStrictEqual({}) - expect(didResolutionMetadata).toHaveProperty('error', 'notFound') - expect(didDocument).toBeUndefined() + describe('resolveRepresentation(did, resolutionOptions) → « didResolutionMetadata, didDocumentStream, didDocumentMetadata »', () => { + it('returns empty `didDocumentMetadata` and `didResolutionMetadata.contentType: application/did+json` representation when successfully returning a DID Document that has not been deleted nor migrated', async () => { + const did: KiltDid = + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' + expect( + await Did.resolveRepresentation(did) + ).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: { contentType: Did.DID_JSON_CONTENT_TYPE }, + didDocumentStream: stringToU8a( + JSON.stringify({ + id: did, + authentication: ['#auth'], + verificationMethod: [ + { + id: '#auth', + controller: did, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: new Uint8Array(32).fill(0), + type: 'ed25519', + }), + }, + ], + }) + ), + }) + }) + it('returns empty `didDocumentMetadata` and `didResolutionMetadata.contentType: application/did+ld+json` representation when successfully returning a DID Document that has not been deleted nor migrated', async () => { + const did: KiltDid = + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' + expect( + await Did.resolveRepresentation(did, { + accept: 'application/did+ld+json', + }) + ).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: { + contentType: Did.DID_JSON_LD_CONTENT_TYPE, + }, + didDocumentStream: stringToU8a( + JSON.stringify({ + id: did, + authentication: ['#auth'], + verificationMethod: [ + { + id: '#auth', + controller: did, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: new Uint8Array(32).fill(0), + type: 'ed25519', + }), + }, + ], + '@context': [Did.W3C_DID_CONTEXT_URL, Did.KILT_DID_CONTEXT_URL], + }) + ), + }) + }) + it('returns empty `didDocumentMetadata` and `didResolutionMetadata.contentType: application/did+cbor` representation when successfully returning a DID Document that has not been deleted nor migrated', async () => { + const did: KiltDid = + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' + expect( + await Did.resolveRepresentation(did, { + accept: 'application/did+cbor', + }) + ).toMatchObject({ + didDocumentMetadata: {}, + didResolutionMetadata: { contentType: Did.DID_CBOR_CONTENT_TYPE }, + didDocumentStream: Uint8Array.from( + cbor.encode({ + id: did, + authentication: ['#auth'], + verificationMethod: [ + { + id: '#auth', + controller: did, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: new Uint8Array(32).fill(0), + type: 'ed25519', + }), + }, + ], + }) + ), + }) + }) + it('returns the right `didResolutionMetadata.error` when the DID does not exist', async () => { + jest + .spyOn(mockedApi.call.did, 'query') + .mockResolvedValueOnce( + augmentedApi.createType('Option', null) + ) + + const did: KiltDid = + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' + expect( + await Did.resolveRepresentation(did) + ).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: { error: 'notFound' }, + }) + }) + it('returns the right `didResolutionMetadata.error` when the input DID is invalid', async () => { + const did = 'did:kilt:test-did' as unknown as KiltDid + expect( + await Did.resolveRepresentation(did) + ).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: { error: 'invalidDid' }, + }) + }) + it('returns the right `didResolutionMetadata.error` when the requested content type is not supported', async () => { + const did: KiltDid = + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' + expect( + await Did.resolveRepresentation(did, { + accept: 'application/json' as Did.SupportedContentType, + }) + ).toStrictEqual({ + didDocumentMetadata: {}, + didResolutionMetadata: { error: 'representationNotSupported' }, + }) + }) }) - it('correctly resolves a deleted DID', async () => { - // RPC call changed to not return anything. + describe('dereference(didUrl, dereferenceOptions) → « dereferencingMetadata, contentStream, contentMetadata »', () => { + it('returns empty `contentMetadata` and `dereferencingMetadata.contentType: application/did+json` representation when successfully returning a DID Document that has not been deleted nor migrated', async () => { + const did: KiltDid = + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' + expect(await Did.dereference(did)).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { contentType: Did.DID_JSON_CONTENT_TYPE }, + contentStream: { + id: did, + authentication: ['#auth'], + verificationMethod: [ + { + id: '#auth', + controller: did, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: new Uint8Array(32).fill(0), + type: 'ed25519', + }), + }, + ], + }, + }) + }) + it('returns empty `contentMetadata` and `dereferencingMetadata.contentType: application/did+ld+json` representation when successfully returning a DID Document that has not been deleted nor migrated', async () => { + const did: KiltDid = + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' + expect( + await Did.dereference(did, { accept: 'application/did+ld+json' }) + ).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { + contentType: Did.DID_JSON_LD_CONTENT_TYPE, + }, + contentStream: { + id: did, + authentication: ['#auth'], + verificationMethod: [ + { + id: '#auth', + controller: did, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: new Uint8Array(32).fill(0), + type: 'ed25519', + }), + }, + ], + '@context': [Did.W3C_DID_CONTEXT_URL, Did.KILT_DID_CONTEXT_URL], + }, + }) + }) + it('returns empty `contentMetadata` and `dereferencingMetadata.contentType: application/did+cbor` representation when successfully returning a DID Document that has not been deleted nor migrated', async () => { + const did: KiltDid = + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' + expect( + await Did.dereference(did, { accept: 'application/did+cbor' }) + ).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { contentType: Did.DID_CBOR_CONTENT_TYPE }, + contentStream: Uint8Array.from( + cbor.encode({ + id: did, + authentication: ['#auth'], + verificationMethod: [ + { + id: '#auth', + controller: did, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: new Uint8Array(32).fill(0), + type: 'ed25519', + }), + }, + ], + }) + ), + }) + }) + it('returns empty `didDocumentMetadata` and `didResolutionMetadata.contentType: application/did+json` (ignoring the provided `accept` option) representation when successfully returning a verification method for a DID that has not been deleted nor migrated', async () => { + const didUrl: DidUrl = + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#auth' + expect( + await Did.dereference(didUrl, { accept: 'application/did+cbor' }) + ).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { contentType: Did.DID_JSON_CONTENT_TYPE }, + contentStream: { + id: '#auth', + controller: + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: new Uint8Array(32).fill(0), + type: 'ed25519', + }), + }, + }) + }) + it('returns empty `didDocumentMetadata` and `didResolutionMetadata.contentType: application/did+json` (ignoring the provided `accept` option) representation when successfully returning a service for a DID that has not been deleted nor migrated', async () => { + jest.mocked(linkedInfoFromChain).mockImplementationOnce((linkedInfo) => { + const { identifier } = linkedInfo.unwrap() + const did: KiltDid = `did:kilt:${identifier as unknown as KiltAddress}` + const authMethod = generateAuthenticationVerificationMethod(did) + + return { + accounts: [], + document: { + id: did, + authentication: [authMethod.id], + verificationMethod: [authMethod], + service: [ + { + id: '#id-1', + type: ['type'], + serviceEndpoint: ['x:url'], + }, + ], + }, + } + }) + const didUrl: DidUrl = + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs#id-1' + expect( + await Did.dereference(didUrl, { accept: 'application/did+cbor' }) + ).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { contentType: Did.DID_JSON_CONTENT_TYPE }, + contentStream: { + id: '#id-1', + type: ['type'], + serviceEndpoint: ['x:url'], + }, + }) + }) + }) + it('returns the right `dereferencingMetadata.error` when the DID does not exist', async () => { jest .spyOn(mockedApi.call.did, 'query') .mockResolvedValueOnce( - augmentedApi.createType('Option', null) + augmentedApi.createType('Option', null) ) - mockedApi.query.did.didBlacklist.mockReturnValueOnce(didIsBlacklisted) - - const { didDocument, didDocumentMetadata, didResolutionMetadata } = - await resolveCompliant(deletedDid) - expect(didDocumentMetadata).toStrictEqual({ - deactivated: true, + const did: KiltDid = + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' + expect(await Did.dereference(did)).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { error: 'notFound' }, }) - expect(didResolutionMetadata).toStrictEqual({}) - expect(didDocument).toStrictEqual({ id: deletedDid }) }) - - it('correctly resolves an upgraded light DID', async () => { - const key = makeSigningKeyTool().authentication[0] - const lightDid = Did.createLightDidDocument({ authentication: [key] }).uri - const fullDid = getFullDidUriFromKey(key) - - const { didDocument, didDocumentMetadata, didResolutionMetadata } = - await resolveCompliant(lightDid) - - expect(didDocumentMetadata).toStrictEqual({ - deactivated: false, - canonicalId: fullDid, + it('returns the right `didResolutionMetadata.error` when the input DID is invalid', async () => { + const did = 'did:kilt:test-did' as unknown as KiltDid + expect(await Did.dereference(did)).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { error: 'invalidDidUrl' }, }) - expect(didResolutionMetadata).toStrictEqual({}) - expect(didDocument).toStrictEqual({ id: lightDid }) }) - - it('does not dereference a DID URL (with fragment)', async () => { - const fullDidWithAuthenticationKey = didWithAuthenticationKey - const keyIdUri: DidUri = `${fullDidWithAuthenticationKey}#auth` - const { didDocument, didDocumentMetadata, didResolutionMetadata } = - await resolveCompliant(keyIdUri) - - expect(didDocumentMetadata).toStrictEqual({}) - expect(didResolutionMetadata).toHaveProperty< - DidResolutionMetadata['error'] - >('error', 'invalidDid') - expect(didDocument).toBeUndefined() + it('returns empty `contentMetadata` and `dereferencingMetadata.contentType: application/did+json` (the default value) when the `options.accept` value is invalid', async () => { + const did: KiltDid = + 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs' + expect( + await Did.dereference(did, { + accept: 'application/json' as unknown as Did.SupportedContentType, + }) + ).toStrictEqual({ + contentMetadata: {}, + dereferencingMetadata: { contentType: Did.DID_JSON_CONTENT_TYPE }, + contentStream: { + id: did, + authentication: ['#auth'], + verificationMethod: [ + { + id: '#auth', + controller: did, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: new Uint8Array(32).fill(0), + type: 'ed25519', + }), + }, + ], + }, + }) }) }) diff --git a/packages/did/src/DidResolver/DidResolver.ts b/packages/did/src/DidResolver/DidResolver.ts index 16ad07512..baa651b03 100644 --- a/packages/did/src/DidResolver/DidResolver.ts +++ b/packages/did/src/DidResolver/DidResolver.ts @@ -6,68 +6,87 @@ */ import type { - ConformingDidResolutionResult, - DidKey, - DidResolutionResult, - DidResourceUri, - DidUri, - KeyRelationship, - ResolvedDidKey, - ResolvedDidServiceEndpoint, - UriFragment, + DereferenceContentMetadata, + DereferenceContentStream, + DereferenceOptions, + DereferenceResult, + DidDocument, + DidResolver, + Did, + DidUrl, + FailedDereferenceMetadata, + JsonLd, + RepresentationResolutionResult, + ResolutionDocumentMetadata, + ResolutionOptions, + ResolutionResult, } from '@kiltprotocol/types' -import { SDKErrors } from '@kiltprotocol/utils' + +import { stringToU8a } from '@polkadot/util' import { ConfigService } from '@kiltprotocol/config' +import { cbor } from '@kiltprotocol/utils' -import * as Did from '../index.js' -import { toChain } from '../Did.chain.js' +import { KILT_DID_CONTEXT_URL, W3C_DID_CONTEXT_URL } from './DidContexts.js' import { linkedInfoFromChain } from '../Did.rpc.js' -import { getFullDidUri, parse } from '../Did.utils.js' -import { exportToDidDocument } from '../DidDocumentExporter/DidDocumentExporter.js' +import { toChain } from '../Did.chain.js' +import { getFullDid, parse, validateDid } from '../Did.utils.js' +import { parseDocumentFromLightDid } from '../DidDetails/LightDidDetails.js' +import { isValidVerificationRelationship } from '../DidDetails/DidDetails.js' + +export const DID_JSON_CONTENT_TYPE = 'application/did+json' +export const DID_JSON_LD_CONTENT_TYPE = 'application/did+ld+json' +export const DID_CBOR_CONTENT_TYPE = 'application/did+cbor' /** - * Resolve a DID URI to the DID document and its metadata. - * - * The URI can also identify a key or a service, but it will be ignored during resolution. - * - * @param did The subject's DID. - * @returns The details associated with the DID subject. + * Supported content types for DID resolution and dereferencing. */ -export async function resolve( - did: DidUri -): Promise { +export type SupportedContentType = + | typeof DID_JSON_CONTENT_TYPE + | typeof DID_JSON_LD_CONTENT_TYPE + | typeof DID_CBOR_CONTENT_TYPE + +function isValidContentType(input: unknown): input is SupportedContentType { + return ( + input === DID_JSON_CONTENT_TYPE || + input === DID_JSON_LD_CONTENT_TYPE || + input === DID_CBOR_CONTENT_TYPE + ) +} + +type InternalResolutionResult = { + document?: DidDocument + documentMetadata: ResolutionDocumentMetadata +} + +async function resolveInternal( + did: Did +): Promise { const { type } = parse(did) const api = ConfigService.get('api') - const queryFunction = api.call.did?.query ?? api.call.didApi.queryDid - const { section, version } = queryFunction?.meta ?? {} - if (version > 2) - throw new Error( - `This version of the KILT sdk supports runtime api '${section}' <=v2 , but the blockchain runtime implements ${version}. Please upgrade!` - ) - const { document, web3Name } = await queryFunction(toChain(did)) + + const { document } = await api.call.did + .query(toChain(did)) .then(linkedInfoFromChain) - .catch(() => ({ document: undefined, web3Name: undefined })) + .catch(() => ({ document: undefined })) - if (type === 'full' && document) { + if (type === 'full' && document !== undefined) { return { document, - metadata: { - deactivated: false, - }, - ...(web3Name && { web3Name }), + documentMetadata: {}, } } - // If the full DID has been deleted (or the light DID was upgraded and deleted), - // return the info in the resolution metadata. const isFullDidDeleted = (await api.query.did.didBlacklist(toChain(did))) .isSome if (isFullDidDeleted) { return { - // No canonicalId and no details are returned as we consider this DID deactivated/deleted. - metadata: { + // No canonicalId is returned as we consider this DID deactivated/deleted. + documentMetadata: { deactivated: true, }, + document: { + id: did, + }, } } @@ -75,205 +94,324 @@ export async function resolve( return null } - const lightDocument = Did.parseDocumentFromLightDid(did, false) + const lightDocument = parseDocumentFromLightDid(did, false) // If a full DID with same subject is present, return the resolution metadata accordingly. - if (document) { + if (document !== undefined) { return { - metadata: { - canonicalId: getFullDidUri(did), - deactivated: false, + documentMetadata: { + canonicalId: getFullDid(did), + }, + document: { + id: lightDocument.id, }, } } // If no full DID details nor deletion info is found, the light DID is un-migrated. - // Metadata will simply contain `deactivated: false`. return { document: lightDocument, - metadata: { - deactivated: false, - }, + documentMetadata: {}, } } /** - * Implementation of `resolve` compliant with W3C DID specifications (https://www.w3.org/TR/did-core/#did-resolution). - * As opposed to `resolve`, which takes a more pragmatic approach, the `didDocument` property contains a fully compliant DID document abstract data model. + * Implementation of `resolve` compliant with {@link https://www.w3.org/TR/did-core/#did-resolution | W3C DID specifications }. * Additionally, this function returns an id-only DID document in the case where a DID has been deleted or upgraded. * If a DID is invalid or has not been registered, this is indicated by the `error` property on the `didResolutionMetadata`. * * @param did The DID to resolve. - * @returns An object with the properties `didDocument` (a spec-conforming DID document or `undefined`), `didDocumentMetadata` (equivalent to `metadata` returned by [[resolve]]), as well as `didResolutionMetadata` (indicating an `error` if any). + * @param resolutionOptions The resolution options accepted by the `resolve` function as specified in the {@link https://www.w3.org/TR/did-core/#did-resolution | W3C DID specifications }. + * @returns The resolution result for the `resolve` function as specified in the {@link https://www.w3.org/TR/did-core/#did-resolution | W3C DID specifications }. */ -export async function resolveCompliant( - did: DidUri -): Promise { - const result: ConformingDidResolutionResult = { - didDocumentMetadata: {}, - didResolutionMetadata: {}, - } +export async function resolve( + did: Did, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + resolutionOptions: ResolutionOptions = {} +): Promise { try { - Did.validateUri(did, 'Did') + validateDid(did, 'Did') } catch (error) { - result.didResolutionMetadata.error = 'invalidDid' - if (error instanceof Error) { - result.didResolutionMetadata.errorMessage = - error.name + error.message ? `: ${error.message}` : '' + return { + didResolutionMetadata: { + error: 'invalidDid', + }, + didDocumentMetadata: {}, } - return result - } - const resolutionResult = await resolve(did) - if (!resolutionResult) { - result.didResolutionMetadata.error = 'notFound' - result.didResolutionMetadata.errorMessage = `DID ${did} not found (on chain)` - return result } - const { metadata, document, web3Name } = resolutionResult - result.didDocumentMetadata = metadata - result.didDocument = document - ? exportToDidDocument(document, 'application/json') - : { id: did } - - if (web3Name) { - result.didDocument.alsoKnownAs = [`w3n:${web3Name}`] + + const resolutionResult = await resolveInternal(did) + if (resolutionResult === null) { + return { + didResolutionMetadata: { + error: 'notFound', + }, + didDocumentMetadata: {}, + } } - return result -} + const { documentMetadata: didDocumentMetadata, document: didDocument } = + resolutionResult -/** - * Converts the DID key in the format returned by `resolveKey()`, useful for own implementations of `resolveKey`. - * - * @param key The DID key in the SDK format. - * @param did The DID the key belongs to. - * @returns The key in the resolveKey-format. - */ -export function keyToResolvedKey(key: DidKey, did: DidUri): ResolvedDidKey { - const { id, publicKey, includedAt, type } = key return { - controller: did, - id: `${did}${id}`, - publicKey, - type, - ...(includedAt && { includedAt }), + didResolutionMetadata: {}, + didDocumentMetadata, + didDocument, } } /** - * Converts the DID key returned by the `resolveKey()` into the format used in the SDK. + * Implementation of `resolveRepresentation` compliant with {@link https://www.w3.org/TR/did-core/#did-resolution | W3C DID specifications }. + * Additionally, this function returns an id-only DID document in the case where a DID has been deleted or upgraded. + * If a DID is invalid or has not been registered, this is indicated by the `error` property on the `didResolutionMetadata`. * - * @param key The key in the resolveKey-format. - * @returns The key in the SDK format. + * @param did The DID to resolve. + * @param resolutionOptions The resolution options accepted by the `resolveRepresentation` function as specified in the {@link https://www.w3.org/TR/did-core/#did-resolution | W3C DID specifications }. + * @param resolutionOptions.accept The content type accepted by the requesting client. + * @returns The resolution result for the `resolveRepresentation` function as specified in the {@link https://www.w3.org/TR/did-core/#did-resolution | W3C DID specifications }. */ -export function resolvedKeyToKey(key: ResolvedDidKey): DidKey { - const { id, publicKey, includedAt, type } = key - return { - id: Did.parse(id).fragment as UriFragment, - publicKey, - type, - ...(includedAt && { includedAt }), +export async function resolveRepresentation( + did: Did, + { accept }: DereferenceOptions = { + accept: DID_JSON_CONTENT_TYPE, + } +): Promise> { + const inputTransform = (() => { + switch (accept) { + case 'application/did+json': { + return (didDoc: DidDocument) => stringToU8a(JSON.stringify(didDoc)) + } + case 'application/did+ld+json': { + return (didDoc: DidDocument) => { + const jsonLdDoc: JsonLd = { + ...didDoc, + '@context': [W3C_DID_CONTEXT_URL, KILT_DID_CONTEXT_URL], + } + return stringToU8a(JSON.stringify(jsonLdDoc)) + } + } + case 'application/did+cbor': { + return (didDoc: DidDocument) => Uint8Array.from(cbor.encode(didDoc)) + } + default: { + return null + } + } + })() + if (inputTransform === null) { + return { + didResolutionMetadata: { + error: 'representationNotSupported', + }, + didDocumentMetadata: {}, + } + } + + const { didDocumentMetadata, didResolutionMetadata, didDocument } = + await resolve(did) + + if (didDocument === undefined) { + return { + // Metadata is the same, since the `representationNotSupported` is already accounted for above. + didResolutionMetadata, + didDocumentMetadata, + } as RepresentationResolutionResult } + + return { + didDocumentMetadata, + didResolutionMetadata: { + ...didResolutionMetadata, + contentType: accept, + }, + didDocumentStream: inputTransform(didDocument), + } as RepresentationResolutionResult } +type InternalDereferenceResult = + | FailedDereferenceMetadata + | { + contentMetadata: DereferenceContentMetadata + contentStream: DereferenceContentStream + } + /** - * Resolve a DID key URI to the key details. + * Type guard checking whether the provided input is a {@link FailedDereferenceMetadata}. * - * @param keyUri The DID key URI. - * @param expectedVerificationMethod Optional key relationship the key has to belong to. - * @returns The details associated with the key. + * @param input The input to check. + * @returns Whether the input is a {@link FailedDereferenceMetadata}. */ -export async function resolveKey( - keyUri: DidResourceUri, - expectedVerificationMethod?: KeyRelationship -): Promise { - const { did, fragment: keyId } = parse(keyUri) - - // A fragment (keyId) IS expected to resolve a key. - if (!keyId) { - throw new SDKErrors.DidError( - `Key URI "${keyUri}" is not a valid DID resource` - ) - } +export function isFailedDereferenceMetadata( + input: unknown +): input is FailedDereferenceMetadata { + return (input as FailedDereferenceMetadata)?.error !== undefined +} - const resolved = await resolve(did) - if (!resolved) { - throw new SDKErrors.DidNotFoundError() - } +async function dereferenceInternal( + didUrl: Did | DidUrl, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + dereferenceOptions: DereferenceOptions +): Promise { + const { did, queryParameters, fragment } = parse(didUrl) - const { - document, - metadata: { canonicalId }, - } = resolved + const { didDocument, didDocumentMetadata } = await resolve(did) - // If the light DID has been upgraded we consider the old key URI invalid, the full DID URI should be used instead. - if (canonicalId) { - throw new SDKErrors.DidResolveUpgradedDidError() - } - if (!document) { - throw new SDKErrors.DidDeactivatedError() + if (didDocument === undefined) { + return { + error: 'notFound', + } } - const key = Did.getKey(document, keyId) - if (!key) { - throw new SDKErrors.DidNotFoundError('Key not found in DID') + if (fragment === undefined) { + return { + contentMetadata: didDocumentMetadata, + contentStream: didDocument, + } } - // Check whether the provided key ID is within the keys for a given verification relationship, if provided. - if ( - expectedVerificationMethod && - !document[expectedVerificationMethod]?.some(({ id }) => keyId === id) - ) { - throw new SDKErrors.DidError( - `No key "${keyUri}" for the verification method "${expectedVerificationMethod}"` + const [dereferencedResource, dereferencingError] = (() => { + const verificationMethod = didDocument?.verificationMethod?.find( + ({ controller, id }) => controller === didDocument.id && id === fragment ) + + if (verificationMethod !== undefined) { + const requiredVerificationRelationship = + queryParameters?.requiredVerificationRelationship + + // If a verification method is found and no filter is applied, return the retrieved verification method. + if (requiredVerificationRelationship === undefined) { + return [verificationMethod, null] + } + // If a verification method is found and the applied filter is invalid, return the dereferencing error. + if (!isValidVerificationRelationship(requiredVerificationRelationship)) { + return [ + null, + { + error: 'invalidVerificationRelationship', + } as FailedDereferenceMetadata, + ] + } + // If a verification method is found and it matches the applied filter, return the retrieved verification method. + if ( + didDocument[requiredVerificationRelationship]?.includes( + verificationMethod.id + ) + ) { + return [verificationMethod, null] + } + // Finally, if the above condition fails and the verification method does not pass the applied filter, the `notFound` error is returned. + return [ + null, + { + error: 'notFound', + } as FailedDereferenceMetadata, + ] + } + + // If no verification method is found, try to retrieve a service with the provided ID, ignoring any query parameters. + const service = didDocument?.service?.find((s) => s.id === fragment) + if (service === undefined) { + return [ + null, + { + error: 'notFound', + } as FailedDereferenceMetadata, + ] + } + return [service, null] + })() + + if (dereferencingError !== null) { + return dereferencingError } - return keyToResolvedKey(key, did) + return { + contentStream: dereferencedResource, + contentMetadata: {}, + } } /** - * Resolve a DID service URI to the service details. + * Implementation of `dereference` compliant with {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | W3C DID specifications }. + * If a DID URL is invalid or has not been registered, this is indicated by the `error` property on the `dereferencingMetadata`. * - * @param serviceUri The DID service URI. - * @returns The details associated with the service endpoint. + * @param didUrl The DID URL to dereference. + * @param resolutionOptions The resolution options accepted by the `dereference` function as specified in the {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | W3C DID specifications }. + * @param resolutionOptions.accept The content type accepted by the requesting client. + * @returns The resolution result for the `dereference` function as specified in the {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | W3C DID specifications }. */ -export async function resolveService( - serviceUri: DidResourceUri -): Promise { - const { did, fragment: serviceId } = parse(serviceUri) - - // A fragment (serviceId) IS expected to resolve a key. - if (!serviceId) { - throw new SDKErrors.DidError( - `Service URI "${serviceUri}" is not a valid DID resource` - ) +export async function dereference( + didUrl: Did | DidUrl, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + { accept }: DereferenceOptions = { + accept: DID_JSON_CONTENT_TYPE, } +): Promise> { + // The spec does not include an error for unsupported content types for dereferences + const contentType = isValidContentType(accept) + ? accept + : DID_JSON_CONTENT_TYPE - const resolved = await resolve(did) - if (!resolved) { - throw new SDKErrors.DidNotFoundError() + try { + validateDid(didUrl) + } catch (error) { + return { + dereferencingMetadata: { + error: 'invalidDidUrl', + }, + contentMetadata: {}, + } } - const { - document, - metadata: { canonicalId }, - } = resolved + const dereferenceResult = await dereferenceInternal(didUrl, { + accept: contentType, + }) - // If the light DID has been upgraded we consider the old service URI invalid, the full DID URI should be used instead. - if (canonicalId) { - throw new SDKErrors.DidResolveUpgradedDidError() - } - if (!document) { - throw new SDKErrors.DidDeactivatedError() + if (isFailedDereferenceMetadata(dereferenceResult)) { + return { + contentMetadata: {}, + dereferencingMetadata: dereferenceResult, + } } - const service = Did.getService(document, serviceId) - if (!service) { - throw new SDKErrors.DidNotFoundError('Service not found in DID') - } + const [stream, contentTypeValue] = (() => { + const s = dereferenceResult.contentStream as any + // Stream is a not DID Document, ignore the `contentType`. + if (s.type !== undefined) { + return [dereferenceResult.contentStream, DID_JSON_CONTENT_TYPE] + } + if (contentType === 'application/did+json') { + return [dereferenceResult.contentStream, contentType] + } + if (contentType === 'application/did+ld+json') { + return [ + { + ...dereferenceResult.contentStream, + '@context': [W3C_DID_CONTEXT_URL, KILT_DID_CONTEXT_URL], + }, + contentType, + ] + } + // contentType === 'application/did+cbor' + return [ + Uint8Array.from(cbor.encode(dereferenceResult.contentStream)), + contentType, + ] + })() return { - ...service, - id: `${did}${serviceId}`, + dereferencingMetadata: { + contentType: contentTypeValue as SupportedContentType, + }, + contentMetadata: dereferenceResult.contentMetadata, + contentStream: stream, } } + +/** + * Fully-fledged default resolver capable of resolving DIDs in their canonical form, encoded for a specific content type, and of dereferencing parts of a DID Document according to the dereferencing specification. + */ +export const resolver: DidResolver = { + resolve, + resolveRepresentation, + dereference, +} diff --git a/packages/did/src/DidResolver/index.ts b/packages/did/src/DidResolver/index.ts index 64023f7e7..4c7d68c72 100644 --- a/packages/did/src/DidResolver/index.ts +++ b/packages/did/src/DidResolver/index.ts @@ -5,4 +5,5 @@ * found in the LICENSE file in the root directory of this source tree. */ +export * from './DidContexts.js' export * from './DidResolver.js' diff --git a/packages/did/src/index.ts b/packages/did/src/index.ts index 38320500d..f9aa46843 100644 --- a/packages/did/src/index.ts +++ b/packages/did/src/index.ts @@ -10,7 +10,6 @@ */ export * from './DidDetails/index.js' -export * from './DidDocumentExporter/index.js' export * from './DidResolver/index.js' export * from './Did.chain.js' export * from './Did.rpc.js' diff --git a/packages/legacy-credentials/README.md b/packages/legacy-credentials/README.md new file mode 100644 index 000000000..ec78d1901 --- /dev/null +++ b/packages/legacy-credentials/README.md @@ -0,0 +1,5 @@ +[![](https://user-images.githubusercontent.com/39338561/122415864-8d6a7c00-cf88-11eb-846f-a98a936f88da.png)](https://kilt.io) + +![Lint and Test](https://github.com/KILTprotocol/sdk-js/workflows/Lint%20and%20Test/badge.svg) + +# KILT Legacy Credentials Support diff --git a/packages/legacy-credentials/package.json b/packages/legacy-credentials/package.json new file mode 100644 index 000000000..47034893f --- /dev/null +++ b/packages/legacy-credentials/package.json @@ -0,0 +1,45 @@ +{ + "name": "@kiltprotocol/legacy-credentials", + "version": "0.33.2-6", + "description": "", + "main": "./lib/cjs/index.js", + "module": "./lib/esm/index.js", + "types": "./lib/cjs/index.d.ts", + "exports": { + ".": { + "import": "./lib/esm/index.js", + "require": "./lib/cjs/index.js" + } + }, + "files": [ + "lib/**/*" + ], + "scripts": { + "clean": "rimraf ./lib", + "build": "yarn clean && yarn build:ts", + "build:ts": "yarn build:cjs && yarn build:esm", + "build:cjs": "tsc --declaration -p tsconfig.build.json && echo '{\"type\":\"commonjs\"}' > ./lib/cjs/package.json", + "build:esm": "tsc --declaration -p tsconfig.esm.json && echo '{\"type\":\"module\"}' > ./lib/esm/package.json" + }, + "repository": "github:kiltprotocol/sdk-js", + "engines": { + "node": ">=16.0" + }, + "author": "", + "license": "BSD-4-Clause", + "bugs": "https://github.com/KILTprotocol/sdk-js/issues", + "homepage": "https://github.com/KILTprotocol/sdk-js#readme", + "devDependencies": { + "rimraf": "^3.0.2", + "typescript": "^4.8.3" + }, + "dependencies": { + "@kiltprotocol/config": "workspace:*", + "@kiltprotocol/credentials": "workspace:*", + "@kiltprotocol/did": "workspace:*", + "@kiltprotocol/types": "workspace:*", + "@kiltprotocol/utils": "workspace:*", + "@polkadot/util": "^12.0.0", + "@polkadot/util-crypto": "^12.0.0" + } +} diff --git a/packages/core/src/claim/Claim.spec.ts b/packages/legacy-credentials/src/Claim.spec.ts similarity index 73% rename from packages/core/src/claim/Claim.spec.ts rename to packages/legacy-credentials/src/Claim.spec.ts index c82d13ef7..3bd91d069 100644 --- a/packages/core/src/claim/Claim.spec.ts +++ b/packages/legacy-credentials/src/Claim.spec.ts @@ -5,9 +5,10 @@ * found in the LICENSE file in the root directory of this source tree. */ +import { CType } from '@kiltprotocol/credentials' +import type { Did, ICType, IClaim } from '@kiltprotocol/types' import { SDKErrors } from '@kiltprotocol/utils' -import type { IClaim, ICType, DidUri } from '@kiltprotocol/types' -import * as CType from '../ctype' + import * as Claim from './Claim' describe('jsonld', () => { @@ -23,50 +24,6 @@ describe('jsonld', () => { owner: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', } - it('exports claim as json-ld', () => { - // this is what a kilt claim looks like when expressed in expanded JSON-LD - const jsonld = Claim.toJsonLD(claim, true) - expect(jsonld).toMatchInlineSnapshot(` - { - "https://www.w3.org/2018/credentials#credentialSchema": { - "@id": "kilt:ctype:0x90364302f3b6ccfa50f3d384ec0ab6369711e13298ba4a5316d7e2addd5647b2", - }, - "https://www.w3.org/2018/credentials#credentialSubject": { - "@id": "did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs", - "kilt:ctype:0x90364302f3b6ccfa50f3d384ec0ab6369711e13298ba4a5316d7e2addd5647b2#address": "homestreet, home", - "kilt:ctype:0x90364302f3b6ccfa50f3d384ec0ab6369711e13298ba4a5316d7e2addd5647b2#name": "John", - "kilt:ctype:0x90364302f3b6ccfa50f3d384ec0ab6369711e13298ba4a5316d7e2addd5647b2#number": 26, - "kilt:ctype:0x90364302f3b6ccfa50f3d384ec0ab6369711e13298ba4a5316d7e2addd5647b2#optIn": true, - }, - } - `) - }) - - it('exports claim as json-ld', () => { - // this is what a kilt claim looks like when expressed in compact JSON-LD - const jsonld = Claim.toJsonLD(claim, false) - expect(jsonld).toMatchInlineSnapshot(` - { - "@context": { - "@vocab": "https://www.w3.org/2018/credentials#", - }, - "credentialSchema": { - "@id": "kilt:ctype:0x90364302f3b6ccfa50f3d384ec0ab6369711e13298ba4a5316d7e2addd5647b2", - }, - "credentialSubject": { - "@context": { - "@vocab": "kilt:ctype:0x90364302f3b6ccfa50f3d384ec0ab6369711e13298ba4a5316d7e2addd5647b2#", - }, - "@id": "did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs", - "address": "homestreet, home", - "name": "John", - "number": 26, - "optIn": true, - }, - } - `) - }) - it('validates hashes from snapshot', () => { // given some nonces... const nonces = [ @@ -147,7 +104,7 @@ describe('compute hashes & validate by reproducing them', () => { }) describe('Claim', () => { - let did: DidUri + let did: Did let claimContents: any let testCType: ICType let claim: IClaim diff --git a/packages/core/src/claim/Claim.ts b/packages/legacy-credentials/src/Claim.ts similarity index 60% rename from packages/core/src/claim/Claim.ts rename to packages/legacy-credentials/src/Claim.ts index 17aa1da54..b7c11f3e2 100644 --- a/packages/core/src/claim/Claim.ts +++ b/packages/legacy-credentials/src/Claim.ts @@ -6,100 +6,39 @@ */ /** - * Claims are a core building block of the KILT SDK. A claim represents **something an entity claims about itself**. Once created, a claim can be used to create a [[Credential]]. + * Claims are a core building block of the KILT SDK. A claim represents **something an entity claims about itself**. Once created, a claim can be used to create a {@link Credential}. * * A claim object has: * * contents - among others, the pure content of a claim, for example `"isOver18": true`; - * * a [[CType]] that represents its data structure. + * * a {@link ICType | CType} that represents its data structure. * * A claim object's owner is (should be) the same entity as the claimer. * * @packageDocumentation */ -import { hexToBn } from '@polkadot/util' +import { CType } from '@kiltprotocol/credentials' +import * as Did from '@kiltprotocol/did' import type { - DidUri, - IClaim, + Did as KiltDid, + HexString, ICType, + IClaim, PartialClaim, - HexString, } from '@kiltprotocol/types' import { Crypto, DataUtils, SDKErrors } from '@kiltprotocol/utils' -import * as Did from '@kiltprotocol/did' -import * as CType from '../ctype/index.js' - -const VC_VOCAB = 'https://www.w3.org/2018/credentials#' - -/** - * Produces JSON-LD readable representations of [[IClaim]]['contents']. This is done by implicitly or explicitly transforming property keys to globally unique predicates. - * Where possible these predicates are taken directly from the Verifiable Credentials vocabulary. Properties that are unique to a [[CType]] are transformed into predicates by prepending the [[CType]][schema][$id]. - * - * @param claim A (partial) [[IClaim]] from to build a JSON-LD representation from. The `cTypeHash` property is required. - * @param expanded Return an expanded instead of a compacted representation. While property transformation is done explicitly in the expanded format, it is otherwise done implicitly via adding JSON-LD's reserved `@context` properties while leaving [[IClaim]][contents] property keys untouched. - * @returns An object which can be serialized into valid JSON-LD representing an [[IClaim]]'s ['contents']. - */ -function jsonLDcontents( - claim: PartialClaim, - expanded = true -): Record { - const { cTypeHash, contents, owner } = claim - if (!cTypeHash) throw new SDKErrors.CTypeHashMissingError() - const vocabulary = `${CType.hashToId(cTypeHash)}#` - const result: Record = {} - if (owner) result['@id'] = owner - if (!expanded) { - return { - ...result, - '@context': { '@vocab': vocabulary }, - ...contents, - } - } - Object.entries(contents || {}).forEach(([key, value]) => { - result[vocabulary + key] = value - }) - return result -} - -/** - * Produces JSON-LD readable representations of KILT claims. This is done by implicitly or explicitly transforming property keys to globally unique predicates. - * Where possible these predicates are taken directly from the Verifiable Credentials vocabulary. Properties that are unique to a [[CType]] are transformed into predicates by prepending the [[CType]][schema][$id]. - * - * @param claim A (partial) [[IClaim]] from to build a JSON-LD representation from. The `cTypeHash` property is required. - * @param expanded Return an expanded instead of a compacted representation. While property transformation is done explicitly in the expanded format, it is otherwise done implicitly via adding JSON-LD's reserved `@context` properties while leaving [[IClaim]][contents] property keys untouched. - * @returns An object which can be serialized into valid JSON-LD representing an [[IClaim]]. - */ -export function toJsonLD( - claim: PartialClaim, - expanded = true -): Record { - const credentialSubject = jsonLDcontents(claim, expanded) - const prefix = expanded ? VC_VOCAB : '' - const result = { - [`${prefix}credentialSubject`]: credentialSubject, - } - result[`${prefix}credentialSchema`] = { - '@id': CType.hashToId(claim.cTypeHash), - } - if (!expanded) result['@context'] = { '@vocab': VC_VOCAB } - return result -} +import { hexToBn } from '@polkadot/util' -function makeStatementsJsonLD(claim: PartialClaim): string[] { - const normalized = jsonLDcontents(claim, true) - return Object.entries(normalized).map(([key, value]) => - JSON.stringify({ [key]: value }) - ) -} +import { makeStatementsJsonLD } from './utils.js' /** - * Produces salted hashes of individual statements comprising a (partial) [[IClaim]] to enable selective disclosure of contents. Can also be used to reproduce hashes for the purpose of validation. + * Produces salted hashes of individual statements comprising a (partial) {@link IClaim} to enable selective disclosure of contents. Can also be used to reproduce hashes for the purpose of validation. * - * @param claim Full or partial [[IClaim]] to produce statement hashes from. + * @param claim Full or partial {@link IClaim} to produce statement hashes from. * @param options Object containing optional parameters. * @param options.canonicalisation Canonicalisation routine that produces an array of statement strings from the [IClaim]. Default produces individual `{"key":"value"}` JSON representations where keys are transformed to expanded JSON-LD. * @param options.nonces Optional map of nonces as produced by this function. - * @param options.nonceGenerator Nonce generator as defined by [[hashStatements]] to be used if no `nonces` are given. Default produces random UUIDs (v4). + * @param options.nonceGenerator Nonce generator as defined by {@link Crypto.hashStatements} to be used if no `nonces` are given. Default produces random UUIDs (v4). * @param options.hasher The hasher to be used. Required but defaults to 256 bit blake2 over `${nonce}${statement}`. * @returns An array of salted `hashes` and a `nonceMap` where keys correspond to unsalted statement hashes. */ @@ -134,14 +73,14 @@ export function hashClaimContents( } /** - * Used to verify the hash list based proof over the set of disclosed attributes in a [[Claim]]. + * Used to verify the hash list based proof over the set of disclosed attributes in a {@link IClaim | Claim}. * - * @param claim Full or partial [[IClaim]] to verify proof against. + * @param claim Full or partial {@link IClaim} to verify proof against. * @param proof Proof consisting of a map that matches nonces to statement digests and the resulting hashes. * @param proof.nonces A map where a statement digest as produces by options.hasher is mapped to a nonce. * @param proof.hashes Array containing hashes which are signed into the credential. Should result from feeding statement digests and nonces in proof.nonce to options.hasher. * @param options Object containing optional parameters. - * @param options.canonicalisation Canonicalisation routine that produces an array of statement strings from the [IClaim]. Default produces individual `{"key":"value"}` JSON representations where keys are transformed to expanded JSON-LD. + * @param options.canonicalisation Canonicalisation routine that produces an array of statement strings from the {@link IClaim}. Default produces individual `{"key":"value"}` JSON representations where keys are transformed to expanded JSON-LD. * @param options.hasher The hasher to be used. Required but defaults to 256 bit blake2 over `${nonce}${statement}`. */ export function verifyDisclosedAttributes( @@ -194,7 +133,7 @@ export function verifyDisclosedAttributes( } /** - * Checks whether the input meets all the required criteria of an [[IClaim]] object. + * Checks whether the input meets all the required criteria of an {@link IClaim} object. * Throws on invalid input. * * @param input The potentially only partial IClaim. @@ -204,7 +143,7 @@ export function verifyDataStructure(input: IClaim | PartialClaim): void { throw new SDKErrors.CTypeHashMissingError() } if ('owner' in input) { - Did.validateUri(input.owner, 'Did') + Did.validateDid(input.owner, 'Did') } if (input.contents !== undefined) { Object.entries(input.contents).forEach(([key, value]) => { @@ -232,20 +171,20 @@ export function verify(claimInput: IClaim, cType: ICType): void { } /** - * Builds a [[Claim]] from a [[CType]] which has nested [[CType]]s within the schema. + * Builds a {@link IClaim | Claim} from a {@link ICType | CType} which is composed of other (nested) CTypes. * - * @param cTypeInput A [[CType]] object that has nested [[CType]]s. - * @param nestedCType The array of [[CType]]s, which are used inside the main [[CType]]. - * @param claimContents The data inside the [[Claim]]. - * @param claimOwner The DID of the owner of the [[Claim]]. + * @param cTypeInput A CType object that contains nested CTypes. + * @param nestedCType The array of CTypes which are used inside the main CType above. + * @param claimContents The {@link IClaim.contents | Claim contents} from which to build the new Claim. + * @param claimOwner The DID of the owner of the new Claim. * - * @returns A [[Claim]] the owner can use. + * @returns A {@link IClaim | Claim} the owner can use. */ export function fromNestedCTypeClaim( cTypeInput: ICType, nestedCType: ICType[], claimContents: IClaim['contents'], - claimOwner: DidUri + claimOwner: KiltDid ): IClaim { CType.verifyClaimAgainstNestedSchemas(cTypeInput, nestedCType, claimContents) @@ -259,17 +198,17 @@ export function fromNestedCTypeClaim( } /** - * Constructs a new Claim from the given [[ICType]], IClaim['contents'] and [[DidUri]]. + * Constructs a new Claim from the given {@link ICType}, {@link IClaim.contents} and {@link KiltDid | Kilt DID}. * - * @param cType [[ICType]] for which the Claim will be built. - * @param claimContents IClaim['contents'] to be used as the pure contents of the instantiated Claim. + * @param cType The {@link ICType} for which the Claim will be built. + * @param claimContents {@link IClaim.contents} To be used as the pure contents of the instantiated Claim. * @param claimOwner The DID to be used as the Claim owner. * @returns A Claim object. */ export function fromCTypeAndClaimContents( cType: ICType, claimContents: IClaim['contents'], - claimOwner: DidUri + claimOwner: KiltDid ): IClaim { CType.verifyDataStructure(cType) CType.verifyClaimAgainstSchema(claimContents, cType) @@ -283,7 +222,7 @@ export function fromCTypeAndClaimContents( } /** - * Custom Type Guard to determine input being of type IClaim. + * Custom Type Guard to determine input being of type {@link IClaim}. * * @param input The potentially only partial IClaim. * diff --git a/packages/core/src/credential/Credential.spec.ts b/packages/legacy-credentials/src/Credential.spec.ts similarity index 79% rename from packages/core/src/credential/Credential.spec.ts rename to packages/legacy-credentials/src/Credential.spec.ts index ffa25284f..ec4bc83e1 100644 --- a/packages/core/src/credential/Credential.spec.ts +++ b/packages/legacy-credentials/src/Credential.spec.ts @@ -10,33 +10,37 @@ import { randomAsHex } from '@polkadot/util-crypto' import { ConfigService } from '@kiltprotocol/config' +import { Attestation, CType } from '@kiltprotocol/credentials' import * as Did from '@kiltprotocol/did' import type { + DereferenceResult, DidDocument, - DidResourceUri, DidSignature, - DidUri, - DidVerificationKey, + Did as KiltDid, + DidUrl, IAttestation, IClaim, IClaimContents, ICredential, ICredentialPresentation, - ResolvedDidKey, - SignCallback, + SignerInterface, + VerificationMethod, } from '@kiltprotocol/types' +import { + didKeyToVerificationMethod, + NewDidVerificationKey, + SupportedContentType, +} from '@kiltprotocol/did' import { Crypto, SDKErrors, UUID } from '@kiltprotocol/utils' import { ApiMocks, + computeKeyId, createLocalDemoFullDidFromKeypair, KeyTool, makeSigningKeyTool, -} from '../../../../tests/testUtils' -import * as Attestation from '../attestation' -import * as Claim from '../claim' -import * as CType from '../ctype' -import { init } from '../kilt' +} from '../../../tests/testUtils' +import * as Claim from './Claim' import * as Credential from './Credential' const testCType = CType.fromProperties('Credential', { @@ -46,7 +50,7 @@ const testCType = CType.fromProperties('Credential', { }) function buildCredential( - claimerDid: DidUri, + claimerDid: KiltDid, contents: IClaimContents, legitimations: ICredential[] ): ICredential { @@ -75,7 +79,7 @@ beforeAll(async () => { } as any) ), } as any - await init({ api }) + ConfigService.set({ api }) }) describe('Credential', () => { @@ -439,33 +443,41 @@ describe('Presentations', () => { let identityDave: DidDocument let migratedAndDeletedLightDid: DidDocument - async function didResolveKey( - keyUri: DidResourceUri - ): Promise { - const { did } = Did.parse(keyUri) - const document = [ + async function dereferenceDidUrl( + didUrl: DidUrl | KiltDid + ): Promise> { + const { did } = Did.parse(didUrl) + const didDocument = [ identityAlice, identityBob, identityCharlie, identityDave, - ].find(({ uri }) => uri === did) - if (!document) throw new Error('Cannot resolve mocked DID') - return Did.keyToResolvedKey(document.authentication[0], did) + ].find(({ id }) => id === did) + if (!didDocument) + return { + contentMetadata: {}, + dereferencingMetadata: { error: 'notFound' }, + } + return { + contentMetadata: {}, + dereferencingMetadata: { contentType: 'application/did+json' }, + contentStream: didDocument, + } } // TODO: Cleanup file by migrating setup functions and removing duplicate tests. async function buildPresentation( claimer: DidDocument, - attesterDid: DidUri, + attesterDid: KiltDid, contents: IClaim['contents'], legitimations: ICredential[], - sign: SignCallback + signers: readonly SignerInterface[] ): Promise<[ICredentialPresentation, IAttestation]> { // create claim const claim = Claim.fromCTypeAndClaimContents( testCType, contents, - claimer.uri + claimer.id ) // build credential with legitimations const credential = Credential.fromClaim(claim, { @@ -473,7 +485,8 @@ describe('Presentations', () => { }) const presentation = await Credential.createPresentation({ credential, - signCallback: sign, + signers, + didDocument: claimer, }) // build attestation const testAttestation = Attestation.fromCredentialAndDid( @@ -484,22 +497,22 @@ describe('Presentations', () => { } beforeAll(async () => { - keyAlice = makeSigningKeyTool() + keyAlice = await makeSigningKeyTool() identityAlice = await createLocalDemoFullDidFromKeypair(keyAlice.keypair) - const keyBob = makeSigningKeyTool() + const keyBob = await makeSigningKeyTool() identityBob = await createLocalDemoFullDidFromKeypair(keyBob.keypair) - keyCharlie = makeSigningKeyTool() + keyCharlie = await makeSigningKeyTool() identityCharlie = await createLocalDemoFullDidFromKeypair( keyCharlie.keypair ) ;[legitimation] = await buildPresentation( identityAlice, - identityBob.uri, + identityBob.id, {}, [], - keyAlice.getSignCallback(identityAlice) + await keyAlice.getSigners(identityAlice) ) jest @@ -507,7 +520,7 @@ describe('Presentations', () => { .mockResolvedValue( ApiMocks.mockChainQueryReturn('attestation', 'attestations', { revoked: false, - attester: Did.toChain(identityBob.uri), + attester: Did.toChain(identityBob.id), ctypeHash: CType.idToHash(testCType.$id), } as any) as any ) @@ -516,54 +529,54 @@ describe('Presentations', () => { it('verify credentials signed by a full DID', async () => { const [presentation] = await buildPresentation( identityCharlie, - identityAlice.uri, + identityAlice.id, { a: 'a', b: 'b', c: 'c', }, [legitimation], - keyCharlie.getSignCallback(identityCharlie) + await keyCharlie.getSigners(identityCharlie) ) // check proof on complete data expect(() => Credential.verifyDataIntegrity(presentation)).not.toThrow() await expect( Credential.verifyPresentation(presentation, { - didResolveKey, + dereferenceDidUrl, }) - ).resolves.toMatchObject({ revoked: false, attester: identityBob.uri }) + ).resolves.toMatchObject({ revoked: false, attester: identityBob.id }) }) it('verify credentials signed by a light DID', async () => { - const { getSignCallback, authentication } = makeSigningKeyTool('ed25519') + const { getSigners, authentication } = await makeSigningKeyTool('ed25519') identityDave = Did.createLightDidDocument({ authentication, }) const [presentation] = await buildPresentation( identityDave, - identityAlice.uri, + identityAlice.id, { a: 'a', b: 'b', c: 'c', }, [legitimation], - getSignCallback(identityDave) + await getSigners(identityDave) ) // check proof on complete data expect(() => Credential.verifyDataIntegrity(presentation)).not.toThrow() await expect( Credential.verifyPresentation(presentation, { - didResolveKey, + dereferenceDidUrl, }) - ).resolves.toMatchObject({ revoked: false, attester: identityBob.uri }) + ).resolves.toMatchObject({ revoked: false, attester: identityBob.id }) }) it('throws if signature is missing on credential presentation', async () => { const credential = buildCredential( - identityBob.uri, + identityBob.id, { a: 'a', b: 'b', @@ -574,19 +587,19 @@ describe('Presentations', () => { await expect( Credential.verifyPresentation(credential as ICredentialPresentation, { ctype: testCType, - didResolveKey, + dereferenceDidUrl, }) ).rejects.toThrow() }) it('throws if signature is by unrelated did', async () => { - const { getSignCallback, authentication } = makeSigningKeyTool('ed25519') + const { getSigners, authentication } = await makeSigningKeyTool('ed25519') identityDave = Did.createLightDidDocument({ authentication, }) const credential = buildCredential( - identityBob.uri, + identityBob.id, { a: 'a', b: 'b', @@ -597,12 +610,13 @@ describe('Presentations', () => { const presentation = await Credential.createPresentation({ credential, - signCallback: getSignCallback(identityDave), + signers: await getSigners(identityDave), + didDocument: identityDave, }) await expect( Credential.verifySignature(presentation, { - didResolveKey, + dereferenceDidUrl, }) ).rejects.toThrow(SDKErrors.DidSubjectMismatchError) }) @@ -614,7 +628,7 @@ describe('Presentations', () => { }) const credential = buildCredential( - identityAlice.uri, + identityAlice.id, { a: 'a', b: 'b', @@ -623,45 +637,48 @@ describe('Presentations', () => { [legitimation] ) - // sign presentation using Alice's authenication key + // sign presentation using Alice's authentication verification method const presentation = await Credential.createPresentation({ credential, - signCallback: keyAlice.getSignCallback(identityAlice), + signers: await keyAlice.getSigners(identityAlice), + didDocument: identityAlice, }) - // but replace signer key reference with authentication key of light did - presentation.claimerSignature.keyUri = `${identityDave.uri}${identityDave.authentication[0].id}` + // but replace signer key reference with authentication verification method of light did + presentation.claimerSignature.keyUri = `${identityDave.id}${ + identityDave.authentication![0] + }` // signature would check out but mismatch should be detected await expect( Credential.verifySignature(presentation, { - didResolveKey, + dereferenceDidUrl, }) ).rejects.toThrow(SDKErrors.DidSubjectMismatchError) }) it('fail to verify credentials signed by a light DID after it has been migrated and deleted', async () => { - const migratedAndDeleted = makeSigningKeyTool('ed25519') + const migratedAndDeleted = await makeSigningKeyTool('ed25519') migratedAndDeletedLightDid = Did.createLightDidDocument({ authentication: migratedAndDeleted.authentication, }) const [presentation] = await buildPresentation( migratedAndDeletedLightDid, - identityAlice.uri, + identityAlice.id, { a: 'a', b: 'b', c: 'c', }, [legitimation], - migratedAndDeleted.getSignCallback(migratedAndDeletedLightDid) + await migratedAndDeleted.getSigners(migratedAndDeletedLightDid) ) // check proof on complete data expect(() => Credential.verifyDataIntegrity(presentation)).not.toThrow() await expect( Credential.verifyPresentation(presentation, { - didResolveKey, + dereferenceDidUrl, }) ).rejects.toThrowError() }) @@ -669,10 +686,10 @@ describe('Presentations', () => { it('Typeguard should return true on complete Credentials', async () => { const [presentation] = await buildPresentation( identityAlice, - identityBob.uri, + identityBob.id, {}, [], - keyAlice.getSignCallback(identityAlice) + await keyAlice.getSigners(identityAlice) ) expect(Credential.isICredential(presentation)).toBe(true) delete (presentation as Partial).claimHashes @@ -682,13 +699,13 @@ describe('Presentations', () => { it('Should throw error when attestation is from different credential', async () => { const [credential, attestation] = await buildPresentation( identityAlice, - identityBob.uri, + identityBob.id, {}, [], - keyAlice.getSignCallback(identityAlice) + await keyAlice.getSigners(identityAlice) ) expect(() => - Attestation.verifyAgainstCredential(attestation, credential) + Credential.verifyAgainstAttestation(attestation, credential) ).not.toThrow() const { cTypeHash } = attestation // @ts-ignore @@ -698,16 +715,16 @@ describe('Presentations', () => { cTypeHash.slice(16), ].join('') expect(() => - Attestation.verifyAgainstCredential(attestation, credential) + Credential.verifyAgainstAttestation(attestation, credential) ).toThrow() }) it('returns Claim Hash of the attestation', async () => { const [credential, attestation] = await buildPresentation( identityAlice, - identityBob.uri, + identityBob.id, {}, [], - keyAlice.getSignCallback(identityAlice) + await keyAlice.getSigners(identityAlice) ) expect(Credential.getHash(credential)).toEqual(attestation.claimHash) }) @@ -732,54 +749,101 @@ describe('create presentation', () => { // Returns a full DID that has the same subject of the first light DID, but the same key authentication key as the second one, if provided, or as the first one otherwise. function createMinimalFullDidFromLightDid( lightDidForId: DidDocument, - newAuthenticationKey?: DidVerificationKey + newAuthenticationKey?: NewDidVerificationKey ): DidDocument { - const uri = Did.getFullDidUri(lightDidForId.uri) - const authKey = newAuthenticationKey || lightDidForId.authentication[0] + const id = Did.getFullDid(lightDidForId.id) + const authMethod = (() => { + if (newAuthenticationKey !== undefined) { + return didKeyToVerificationMethod( + id, + computeKeyId(newAuthenticationKey.publicKey), + { + keyType: newAuthenticationKey.type, + publicKey: newAuthenticationKey.publicKey, + } + ) + } + const lightDidAuth = lightDidForId.authentication![0] + const lightDidVerificationMethod = lightDidForId.verificationMethod?.find( + ({ id: vmId }) => vmId === lightDidAuth + ) as VerificationMethod + const { publicKey } = Did.multibaseKeyToDidKey( + lightDidVerificationMethod.publicKeyMultibase + ) + // Override the verification method ID to the computed one + lightDidVerificationMethod.id = computeKeyId(publicKey) + return lightDidVerificationMethod + })() return { - uri, - authentication: [authKey], + id, + authentication: [authMethod.id], + verificationMethod: [authMethod], } } - async function didResolveKey( - keyUri: DidResourceUri - ): Promise { - const { did } = Did.parse(keyUri) - const document = [ - migratedClaimerLightDid, - unmigratedClaimerLightDid, - migratedClaimerFullDid, - attester, - ].find(({ uri }) => uri === did) - if (!document) throw new Error('Cannot resolve mocked DID') - return Did.keyToResolvedKey(document.authentication[0], did) + async function dereferenceDidUrl( + didUrl: DidUrl | KiltDid + ): Promise> { + const { did } = Did.parse(didUrl) + switch (did) { + case migratedClaimerLightDid.id: { + return { + contentMetadata: { canonicalId: migratedClaimerFullDid.id }, + dereferencingMetadata: { contentType: 'application/did+json' }, + contentStream: { id: migratedClaimerLightDid.id }, + } + } + case unmigratedClaimerLightDid.id: { + return { + contentMetadata: {}, + dereferencingMetadata: { contentType: 'application/did+json' }, + contentStream: unmigratedClaimerLightDid, + } + } + case migratedClaimerFullDid.id: { + return { + contentMetadata: {}, + dereferencingMetadata: { contentType: 'application/did+json' }, + contentStream: migratedClaimerFullDid, + } + } + case attester.id: { + return { + contentMetadata: {}, + dereferencingMetadata: { contentType: 'application/did+json' }, + contentStream: attester, + } + } + default: { + return { + contentMetadata: {}, + dereferencingMetadata: { error: 'notFound' }, + } + } + } } beforeAll(async () => { - const { keypair } = makeSigningKeyTool() + const { keypair } = await makeSigningKeyTool() attester = await createLocalDemoFullDidFromKeypair(keypair) - unmigratedClaimerKey = makeSigningKeyTool() + unmigratedClaimerKey = await makeSigningKeyTool() unmigratedClaimerLightDid = Did.createLightDidDocument({ authentication: unmigratedClaimerKey.authentication, }) - const migratedClaimerKey = makeSigningKeyTool() + const migratedClaimerKey = await makeSigningKeyTool() migratedClaimerLightDid = Did.createLightDidDocument({ authentication: migratedClaimerKey.authentication, }) // Change also the authentication key of the full DID to properly verify signature verification, // so that it uses a completely different key and the credential is still correctly verified. - newKeyForMigratedClaimerDid = makeSigningKeyTool() + newKeyForMigratedClaimerDid = await makeSigningKeyTool() migratedClaimerFullDid = createMinimalFullDidFromLightDid( migratedClaimerLightDid, - { - ...newKeyForMigratedClaimerDid.authentication[0], - id: '#new-auth', - } + { ...newKeyForMigratedClaimerDid.keypair } ) - migratedThenDeletedKey = makeSigningKeyTool('ed25519') + migratedThenDeletedKey = await makeSigningKeyTool('ed25519') migratedThenDeletedClaimerLightDid = Did.createLightDidDocument({ authentication: migratedThenDeletedKey.authentication, }) @@ -792,7 +856,7 @@ describe('create presentation', () => { name: 'Peter', age: 12, }, - migratedClaimerFullDid.uri + migratedClaimerFullDid.id ) ) @@ -801,7 +865,7 @@ describe('create presentation', () => { .mockResolvedValue( ApiMocks.mockChainQueryReturn('attestation', 'attestations', { revoked: false, - attester: Did.toChain(attester.uri), + attester: Did.toChain(attester.id), ctypeHash: CType.idToHash(ctype.$id), } as any) as any ) @@ -812,16 +876,17 @@ describe('create presentation', () => { const presentation = await Credential.createPresentation({ credential, selectedAttributes: ['name'], - signCallback: newKeyForMigratedClaimerDid.getSignCallback( + signers: await newKeyForMigratedClaimerDid.getSigners( migratedClaimerFullDid ), challenge, + didDocument: migratedClaimerFullDid, }) await expect( Credential.verifyPresentation(presentation, { - didResolveKey, + dereferenceDidUrl, }) - ).resolves.toMatchObject({ revoked: false, attester: attester.uri }) + ).resolves.toMatchObject({ revoked: false, attester: attester.id }) expect(presentation.claimerSignature?.challenge).toEqual(challenge) }) it('should create presentation and exclude specific attributes using a light DID', async () => { @@ -833,7 +898,7 @@ describe('create presentation', () => { name: 'Peter', age: 12, }, - unmigratedClaimerLightDid.uri + unmigratedClaimerLightDid.id ) ) @@ -841,16 +906,15 @@ describe('create presentation', () => { const presentation = await Credential.createPresentation({ credential, selectedAttributes: ['name'], - signCallback: unmigratedClaimerKey.getSignCallback( - unmigratedClaimerLightDid - ), + signers: await unmigratedClaimerKey.getSigners(unmigratedClaimerLightDid), challenge, + didDocument: unmigratedClaimerLightDid, }) await expect( Credential.verifyPresentation(presentation, { - didResolveKey, + dereferenceDidUrl, }) - ).resolves.toMatchObject({ revoked: false, attester: attester.uri }) + ).resolves.toMatchObject({ revoked: false, attester: attester.id }) expect(presentation.claimerSignature?.challenge).toEqual(challenge) }) it('should create presentation and exclude specific attributes using a migrated DID', async () => { @@ -863,7 +927,7 @@ describe('create presentation', () => { age: 12, }, // Use of light DID in the claim. - migratedClaimerLightDid.uri + migratedClaimerLightDid.id ) ) @@ -872,16 +936,17 @@ describe('create presentation', () => { credential, selectedAttributes: ['name'], // Use of full DID to sign the presentation. - signCallback: newKeyForMigratedClaimerDid.getSignCallback( + signers: await newKeyForMigratedClaimerDid.getSigners( migratedClaimerFullDid ), challenge, + didDocument: migratedClaimerFullDid, }) await expect( Credential.verifyPresentation(presentation, { - didResolveKey, + dereferenceDidUrl, }) - ).resolves.toMatchObject({ revoked: false, attester: attester.uri }) + ).resolves.toMatchObject({ revoked: false, attester: attester.id }) expect(presentation.claimerSignature?.challenge).toEqual(challenge) }) @@ -895,7 +960,7 @@ describe('create presentation', () => { age: 12, }, // Use of light DID in the claim. - migratedClaimerLightDid.uri + migratedClaimerLightDid.id ) ) @@ -904,14 +969,15 @@ describe('create presentation', () => { credential, selectedAttributes: ['name'], // Still using the light DID, which should fail since it has been migrated - signCallback: newKeyForMigratedClaimerDid.getSignCallback( + signers: await newKeyForMigratedClaimerDid.getSigners( migratedClaimerLightDid ), challenge, + didDocument: migratedClaimerLightDid, }) await expect( Credential.verifyPresentation(att, { - didResolveKey, + dereferenceDidUrl, }) ).rejects.toThrow() }) @@ -926,7 +992,7 @@ describe('create presentation', () => { age: 12, }, // Use of light DID in the claim. - migratedThenDeletedClaimerLightDid.uri + migratedThenDeletedClaimerLightDid.id ) ) @@ -935,14 +1001,15 @@ describe('create presentation', () => { credential, selectedAttributes: ['name'], // Still using the light DID, which should fail since it has been migrated and then deleted - signCallback: migratedThenDeletedKey.getSignCallback( + signers: await migratedThenDeletedKey.getSigners( migratedThenDeletedClaimerLightDid ), challenge, + didDocument: migratedThenDeletedClaimerLightDid, }) await expect( Credential.verifyPresentation(presentation, { - didResolveKey, + dereferenceDidUrl, }) ).rejects.toThrow() }) diff --git a/packages/core/src/credential/Credential.ts b/packages/legacy-credentials/src/Credential.ts similarity index 70% rename from packages/core/src/credential/Credential.ts rename to packages/legacy-credentials/src/Credential.ts index ca24f967f..0f45bf054 100644 --- a/packages/core/src/credential/Credential.ts +++ b/packages/legacy-credentials/src/Credential.ts @@ -7,9 +7,9 @@ /** * Credentials are a core building block of the KILT SDK. - * A Credential represents a [[Claim]] which needs to be validated. In practice, the Credential is sent from a claimer to an attester for attesting and to a verifier for verification. + * A {@link ICredential | Credential} represents a {@link IClaim | Claim} which needs to be validated. In practice, the Credential is sent from a claimer to an attester for attesting and to a verifier for verification. * - * A Credential object contains the [[Claim]] and its hash, and legitimations/delegationId of the attester. + * A Credential object contains the Claim and its hash, and legitimations/delegationId of the attester. * The credential is made tamper-proof by hashing the claim properties and generating a digest from that, which is used to reference the Credential. * It can be signed by the claimer, to authenticate the holder and to prevent replay attacks. * A Credential also supports hiding of claim data during a credential presentation. @@ -18,30 +18,31 @@ */ import { ConfigService } from '@kiltprotocol/config' +import { Attestation, CType } from '@kiltprotocol/credentials' import { isDidSignature, - verifyDidSignature, - resolveKey, - signatureToJson, + resolve, + dereference, signatureFromJson, + verifyDidSignature, } from '@kiltprotocol/did' import type { - DidResolveKey, - DidUri, + DidUrl, + Did, Hash, IAttestation, + ICType, IClaim, ICredential, ICredentialPresentation, - ICType, IDelegationNode, - SignCallback, + SignerInterface, + DereferenceDidUrl, + DidDocument, } from '@kiltprotocol/types' -import { Crypto, DataUtils, SDKErrors } from '@kiltprotocol/utils' -import * as Attestation from '../attestation/index.js' -import * as Claim from '../claim/index.js' -import { hashClaimContents } from '../claim/index.js' -import { verifyClaimAgainstSchema } from '../ctype/index.js' +import { Crypto, DataUtils, SDKErrors, Signers } from '@kiltprotocol/utils' +import * as Claim from './Claim.js' +import { hashClaimContents } from './Claim.js' function getHashRoot(leaves: Uint8Array[]): Uint8Array { const result = Crypto.u8aConcat(...leaves) @@ -83,10 +84,10 @@ export function calculateRootHash(credential: Partial): Hash { } /** - * Removes [[Claim]] properties from the [[Credential]] object, provides anonymity and security when building the [[createPresentation]] method. + * Removes {@link IClaim | Claim} properties from the {@link ICredential | Credential}, provides anonymity and security when building the {@link createPresentation} method. * * @param credential - The Credential object to remove properties from. - * @param properties - Properties to remove from the [[Claim]] object. + * @param properties - Properties to remove from the {@link IClaim} object. * @returns A cloned Credential with removed properties. */ export function removeClaimProperties( @@ -137,10 +138,10 @@ export function verifyRootHash(input: ICredential): void { } /** - * Verifies the data of the [[Credential]] object; used to check that the data was not tampered with, + * Verifies the data of the {@link ICredential} object; used to check that the data was not tampered with, * by checking the data against hashes. Throws if invalid. * - * @param input - The [[Credential]] for which to verify data. + * @param input - The {@link ICredential} for which to verify data. */ export function verifyDataIntegrity(input: ICredential): void { // check claim hash @@ -157,10 +158,10 @@ export function verifyDataIntegrity(input: ICredential): void { } /** - * Checks whether the input meets all the required criteria of an [[ICredential]] object. + * Checks whether the input meets all the required criteria of an {@link ICredential} object. * Throws on invalid input. * - * @param input - A potentially only partial [[Credential]]. + * @param input - A potentially only partial {@link ICredential}. * */ export function verifyDataStructure(input: ICredential): void { @@ -199,24 +200,24 @@ export function verifyDataStructure(input: ICredential): void { } /** - * Verifies the signature of the [[ICredentialPresentation]]. - * It supports migrated DIDs, meaning that if the original claim within the [[ICredential]] included a light DID that was afterwards upgraded, + * Verifies the signature of the {@link ICredentialPresentation}. + * It supports migrated DIDs, meaning that if the original claim within the {@link ICredential} included a light DID that was afterwards upgraded, * the signature over the presentation **must** be generated with the full DID in order for the verification to be successful. * On the other hand, a light DID that has been migrated and then deleted from the chain will not be allowed to generate valid presentations anymore. * - * @param input - The [[ICredentialPresentation]]. + * @param input - The {@link ICredentialPresentation}. * @param verificationOpts Additional verification options. - * @param verificationOpts.didResolveKey - The function used to resolve the claimer's key. Defaults to [[resolveKey]]. + * @param verificationOpts.dereferenceDidUrl - The function used to dereference the claimer's DID Document and verification method. Defaults to {@link dereferenceDidUrl}. * @param verificationOpts.challenge - The expected value of the challenge. Verification will fail in case of a mismatch. */ export async function verifySignature( input: ICredentialPresentation, { challenge, - didResolveKey = resolveKey, + dereferenceDidUrl = dereference as DereferenceDidUrl['dereference'], }: { challenge?: string - didResolveKey?: DidResolveKey + dereferenceDidUrl?: DereferenceDidUrl['dereference'] } = {} ): Promise { const { claimerSignature } = input @@ -233,8 +234,9 @@ export async function verifySignature( expectedSigner: input.claim.owner, // allow full did to sign presentation if owned by corresponding light did allowUpgraded: true, - expectedVerificationMethod: 'authentication', - didResolveKey, + expectedVerificationRelationship: 'authentication', + signerUrl: claimerSignature.keyUri, + dereferenceDidUrl, }) } @@ -244,13 +246,13 @@ export type Options = { } /** - * Builds a new [[ICredential]] object, from a complete set of required parameters. + * Builds a new {@link ICredential} object, from a complete set of required parameters. * - * @param claim An [[IClaim]] object to build the credential for. + * @param claim An {@link IClaim} object to build the credential for. * @param option Container for different options that can be passed to this method. - * @param option.legitimations Array of [[Credential]] objects of the Attester which the Claimer requests to include into the attestation as legitimations. + * @param option.legitimations Array of {@link ICredential} objects of the Attester which the Claimer requests to include into the attestation as legitimations. * @param option.delegationId The id of the DelegationNode of the Attester, which should be used in the attestation. - * @returns A new [[ICredential]] object. + * @returns A new {@link ICredential} object. */ export function fromClaim( claim: IClaim, @@ -280,14 +282,14 @@ export function fromClaim( type VerifyOptions = { ctype?: ICType challenge?: string - didResolveKey?: DidResolveKey + dereferenceDidUrl?: DereferenceDidUrl['dereference'] } /** * Verifies data structure & data integrity of a credential object. * This combines all offline sanity checks that can be performed on an ICredential object. * A credential is valid only if it is well formed AND there is an on-chain attestation record referencing its root hash. - * To check the latter condition as well, you need to call [[verifyCredential]] or [[verifyPresentation]]. + * To check the latter condition as well, you need to call {@link verifyCredential} or {@link verifyPresentation}. * * @param credential - The object to check. * @param options - Additional parameter for more verification steps. @@ -301,18 +303,52 @@ export function verifyWellFormed( verifyDataIntegrity(credential) if (ctype) { - verifyClaimAgainstSchema(credential.claim.contents, ctype) + CType.verifyClaimAgainstSchema(credential.claim.contents, ctype) } } +/** + * Verifies whether the data of the given credential matches that of the corresponding attestation. It is valid if: + * * the {@link Credential} object has valid data (see {@link Credential.verifyDataIntegrity}); + * and + * * the data (root hash, CType, and delegation) of the {@link ICredential} object and of the {@link Attestation} are equivalent. + * + * @param attestation - The attestation to verify against. + * @param credential - The credential to verify. + */ +export function verifyAgainstAttestation( + attestation: IAttestation, + credential: ICredential +): void { + const credentialMismatch = + credential.claim.cTypeHash !== attestation.cTypeHash + const ctypeMismatch = credential.rootHash !== attestation.claimHash + const delegationMismatch = + credential.delegationId !== attestation.delegationId + if (credentialMismatch || ctypeMismatch || delegationMismatch) { + throw new SDKErrors.CredentialUnverifiableError( + `Some attributes of the on-chain attestation diverge from the credential: ${[ + 'cTypeHash', + 'delegationId', + 'claimHash', + ] + .filter( + (_, i) => [ctypeMismatch, delegationMismatch, credentialMismatch][i] + ) + .join(', ')}` + ) + } + verifyDataIntegrity(credential) +} + /** * Queries the attestation record for a credential and matches their data. Fails if no attestation exists, if it is revoked, or if the attestation data does not match the credential. * - * @param credential The [[ICredential]] whose attestation status should be checked. + * @param credential The {@link ICredential} whose attestation status should be checked. * @returns An object containing the `attester` DID and `revoked` status of the on-chain attestation. */ export async function verifyAttested(credential: ICredential): Promise<{ - attester: DidUri + attester: Did revoked: boolean }> { const api = ConfigService.get('api') @@ -325,20 +361,20 @@ export async function verifyAttested(credential: ICredential): Promise<{ maybeAttestation, credential.rootHash ) - Attestation.verifyAgainstCredential(attestation, credential) + verifyAgainstAttestation(attestation, credential) const { owner: attester, revoked } = attestation return { attester, revoked } } export interface VerifiedCredential extends ICredential { revoked: boolean - attester: DidUri + attester: Did } /** * Updates the revocation status of a previously verified credential to allow checking if it is still valid. * - * @param verifiedCredential The output of [[verifyCredential]] or [[verifyPresentation]], which adds a `revoked` and `attester` property. + * @param verifiedCredential The output of {@link verifyCredential} or {@link verifyPresentation}, which adds a `revoked` and `attester` property. * @returns A promise of resolving to the same object but with the `revoked` property updated. * The promise rejects if the attestation has been deleted or its data changed since verification. */ @@ -370,7 +406,7 @@ export async function refreshRevocationStatus( * @param credential - The object to check. * @param options - Additional parameter for more verification steps. * @param options.ctype - CType which the included claim should be checked against. - * @returns A [[VerifiedCredential]] object, which is the orignal credential with two additional properties: a boolean `revoked` status flag and the `attester` DID. + * @returns A {@link VerifiedCredential} object, which is the orignal credential with two additional properties: a boolean `revoked` status flag and the `attester` DID. */ export async function verifyCredential( credential: ICredential, @@ -399,25 +435,29 @@ export async function verifyCredential( * @param options - Additional parameter for more verification steps. * @param options.ctype - CType which the included claim should be checked against. * @param options.challenge - The expected value of the challenge. Verification will fail in case of a mismatch. - * @param options.didResolveKey - The function used to resolve the claimer's key. Defaults to [[resolveKey]]. - * @returns A [[VerifiedCredential]] object, which is the orignal credential presentation with two additional properties: + * @param options.dereferenceDidUrl - The function used to dereference the claimer's DID and verification method. Defaults to {@link dereference}. + * @returns A {@link VerifiedCredential} object, which is the orignal credential presentation with two additional properties: * a boolean `revoked` status flag and the `attester` DID. */ export async function verifyPresentation( presentation: ICredentialPresentation, - { ctype, challenge, didResolveKey = resolveKey }: VerifyOptions = {} + { + ctype, + challenge, + dereferenceDidUrl = dereference as DereferenceDidUrl['dereference'], + }: VerifyOptions = {} ): Promise { await verifySignature(presentation, { challenge, - didResolveKey, + dereferenceDidUrl, }) return verifyCredential(presentation, { ctype }) } /** - * Type Guard to determine input being of type [[ICredential]]. + * Type Guard to determine input being of type {@link ICredential}. * - * @param input - A potentially only partial [[ICredential]]. + * @param input - A potentially only partial ICredential. * * @returns Boolean whether input is of type ICredential. */ @@ -431,9 +471,9 @@ export function isICredential(input: unknown): input is ICredential { } /** - * Type Guard to determine input being of type [[ICredentialPresentation]]. + * Type Guard to determine input being of type {@link ICredentialPresentation}. * - * @param input - An [[ICredential]], [[ICredentialPresentation]], or other object. + * @param input - An {@link ICredential}, {@link ICredentialPresentation}, or other object. * * @returns Boolean whether input is of type ICredentialPresentation. */ @@ -467,28 +507,33 @@ function getAttributes(credential: ICredential): Set { return new Set(Object.keys(credential.claim.contents)) } +const { verifiableOnChain, byDid } = Signers.select + /** * Creates a public presentation which can be sent to a verifier. * This presentation is signed. * * @param presentationOptions The additional options to use upon presentation generation. * @param presentationOptions.credential The credential to create the presentation for. - * @param presentationOptions.signCallback The callback to sign the presentation. + * @param presentationOptions.signers An array of signer interfaces, one of which will be selected to sign the presentation. * @param presentationOptions.selectedAttributes All properties of the claim which have been requested by the verifier and therefore must be publicly presented. * @param presentationOptions.challenge Challenge which will be part of the presentation signature. * If not specified, all attributes are shown. If set to an empty array, we hide all attributes inside the claim for the presentation. + * @param presentationOptions.didDocument The credential owner's DID document; if omitted, it will be resolved from the blockchain. * @returns A deep copy of the Credential with all but `publicAttributes` removed. */ export async function createPresentation({ credential, - signCallback, + signers, selectedAttributes, challenge, + didDocument, }: { credential: ICredential - signCallback: SignCallback - selectedAttributes?: string[] + signers: readonly SignerInterface[] + selectedAttributes?: readonly string[] challenge?: string + didDocument?: DidDocument }): Promise { // filter attributes that are not in public attributes const excludedClaimProperties = selectedAttributes @@ -503,16 +548,38 @@ export async function createPresentation({ excludedClaimProperties ) - const signature = await signCallback({ + const didDoc = + didDocument ?? (await resolve(credential.claim.owner)).didDocument + + if (!didDoc) { + throw new Error( + `Unable to sign: Failed to resolve claimer DID ${credential.claim.owner}` + ) + } + const signer = Signers.selectSigner( + signers, + verifiableOnChain(), + byDid(didDoc, { verificationRelationship: 'authentication' }) + ) + if (!signer) { + throw new SDKErrors.NoSuitableSignerError(undefined, { + signerRequirements: { + did: didDoc.id, + algorithm: Signers.DID_PALLET_SUPPORTED_ALGORITHMS, + verificationRelationship: 'authentication', + }, + }) + } + + const signature = await signer?.sign({ data: makeSigningData(presentation, challenge), - did: credential.claim.owner, - keyRelationship: 'authentication', }) return { ...presentation, claimerSignature: { - ...signatureToJson(signature), + signature: Crypto.u8aToHex(signature), + keyUri: signer.id as DidUrl, ...(challenge && { challenge }), }, } diff --git a/packages/core/src/balance/index.ts b/packages/legacy-credentials/src/index.ts similarity index 52% rename from packages/core/src/balance/index.ts rename to packages/legacy-credentials/src/index.ts index c5f7e31eb..3749a4e9c 100644 --- a/packages/core/src/balance/index.ts +++ b/packages/legacy-credentials/src/index.ts @@ -5,4 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -export * as BalanceUtils from './Balance.utils.js' +export { Attestation } from '@kiltprotocol/credentials' +export { fromVC, toVc } from './vcInterop.js' +export * as Claim from './Claim.js' +export * as Credential from './Credential.js' diff --git a/packages/legacy-credentials/src/utils.ts b/packages/legacy-credentials/src/utils.ts new file mode 100644 index 000000000..12e006f38 --- /dev/null +++ b/packages/legacy-credentials/src/utils.ts @@ -0,0 +1,62 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { CType } from '@kiltprotocol/credentials' +import { SDKErrors } from '@kiltprotocol/utils' +import type { PartialClaim, IClaimContents, IClaim } from '@kiltprotocol/types' // eslint-disable-line @typescript-eslint/no-unused-vars + +/** + * Produces JSON-LD readable representations of a Claim's {@link IClaimContents | contents}. This is done by implicitly or explicitly transforming property keys to globally unique predicates. + * Where possible these predicates are taken directly from the Verifiable Credentials vocabulary. Properties that are unique to a {@link ICType} are transformed into predicates by prepending the {@link ICType.$id}. + * + * @param claim A (partial) {@link IClaim} from to build a JSON-LD representation from. The `cTypeHash` property is required. + * @param expanded Return an expanded instead of a compacted representation. While property transformation is done explicitly in the expanded format, it is otherwise done implicitly via adding JSON-LD's reserved `@context` properties while leaving {@link IClaim.contents} property keys untouched. + * @returns An object which can be serialized into valid JSON-LD representing the {@link IClaimContents | claim contents}. + */ +export function jsonLDcontents( + claim: PartialClaim, + expanded = true +): Record { + const { cTypeHash, contents, owner } = claim + if (!cTypeHash) { + throw new SDKErrors.CTypeHashMissingError() + } + const vocabulary = `${CType.hashToId(cTypeHash)}#` + const result: Record = {} + if (owner) { + result['@id'] = owner + } + if (!expanded) { + if (contents && ('@context' in contents || '@id' in contents)) { + throw new Error( + 'This claim contains @-prefixed restricted properties and thus cannot be properly expressed as JSON-LD' + ) + } + return { + ...contents, + ...result, + '@context': { '@vocab': vocabulary }, + } + } + Object.entries(contents || {}).forEach(([key, value]) => { + result[vocabulary + key] = value + }) + return result +} + +/** + * Produces canonical statements for selective disclosure based on a JSON-LD expanded representation of the claims. + * + * @param claim A (partial) {@link IClaim} from to build a JSON-LD representation from. The `cTypeHash` property is required. + * @returns An array of stringified statements. + */ +export function makeStatementsJsonLD(claim: PartialClaim): string[] { + const normalized = jsonLDcontents(claim, true) + return Object.entries(normalized).map(([key, value]) => + JSON.stringify({ [key]: value }) + ) +} diff --git a/packages/vc-export/src/exportToVerifiableCredential.spec.ts b/packages/legacy-credentials/src/vcInterop.spec.ts similarity index 74% rename from packages/vc-export/src/exportToVerifiableCredential.spec.ts rename to packages/legacy-credentials/src/vcInterop.spec.ts index e5eb3862b..d19c542ca 100644 --- a/packages/vc-export/src/exportToVerifiableCredential.spec.ts +++ b/packages/legacy-credentials/src/vcInterop.spec.ts @@ -5,23 +5,21 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { hexToU8a, u8aConcat, u8aToU8a } from '@polkadot/util' +import { u8aConcat, u8aToU8a } from '@polkadot/util' import { randomAsU8a } from '@polkadot/util-crypto' -import { Credential } from '@kiltprotocol/core' import type { IAttestation, ICType, ICredential } from '@kiltprotocol/types' +import { + KiltAttestationProofV1, + KiltCredentialV1, +} from '@kiltprotocol/credentials' import { ApiMocks } from '../../../tests/testUtils' -import { - credentialSchema, - validateStructure as validateCredentialStructure, -} from './KiltCredentialV1' -import { credentialIdFromRootHash } from './common' -import { - DEFAULT_CREDENTIAL_CONTEXTS, - DEFAULT_CREDENTIAL_TYPES, -} from './constants' -import { exportICredentialToVc } from './fromICredential' +import { calculateRootHash, removeClaimProperties } from './Credential' +import { fromVC, toVc } from './vcInterop' + +// is not needed and imports a dependency that does not work in node 18 +jest.mock('@digitalbazaar/http-client', () => ({})) export const mockedApi = ApiMocks.createAugmentedApi() @@ -95,7 +93,7 @@ export const credential: ICredential = { '0xb102f462e4cde1b48e7936085cef1e2ab6ae4f7ca46cd3fab06074c00546a33d', rootHash: '0x', } -credential.rootHash = Credential.calculateRootHash(credential) +credential.rootHash = calculateRootHash(credential) export const attestation: IAttestation = { claimHash: credential.rootHash, @@ -105,7 +103,7 @@ export const attestation: IAttestation = { revoked: false, } -export const timestamp = 1234567 +export const timestamp = new Date(1234567) export const blockHash = randomAsU8a(32) export const genesisHash = randomAsU8a(32) jest.spyOn(mockedApi, 'at').mockImplementation(() => Promise.resolve(mockedApi)) @@ -130,7 +128,9 @@ mockedApi.query.attestation = { ), } as any mockedApi.query.timestamp = { - now: jest.fn().mockResolvedValue(mockedApi.createType('u64', timestamp)), + now: jest + .fn() + .mockResolvedValue(mockedApi.createType('u64', timestamp.getTime())), } as any mockedApi.query.system = { @@ -149,44 +149,42 @@ mockedApi.query.system = { } as any it('exports credential to VC', () => { - const exported = exportICredentialToVc(credential, { + const exported = toVc(credential, { issuer: attestation.owner, chainGenesisHash: mockedApi.genesisHash, blockHash, timestamp, - cType: cType.$id, }) expect(exported).toMatchObject({ - '@context': DEFAULT_CREDENTIAL_CONTEXTS, - type: [...DEFAULT_CREDENTIAL_TYPES, cType.$id], + '@context': KiltCredentialV1.DEFAULT_CREDENTIAL_CONTEXTS, + type: [...KiltCredentialV1.DEFAULT_CREDENTIAL_TYPES, cType.$id], credentialSubject: { id: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', birthday: '1991-01-01', name: 'Kurt', premium: true, }, - id: credentialIdFromRootHash(hexToU8a(credential.rootHash)), + id: KiltCredentialV1.idFromRootHash(credential.rootHash), issuanceDate: expect.any(String), issuer: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', nonTransferable: true, }) - expect(() => validateCredentialStructure(exported)).not.toThrow() + expect(() => KiltCredentialV1.validateStructure(exported)).not.toThrow() }) it('VC has correct format (full example)', () => { expect( - exportICredentialToVc(credential, { + toVc(credential, { issuer: attestation.owner, chainGenesisHash: mockedApi.genesisHash, blockHash, timestamp, - cType: cType.$id, }) ).toMatchObject({ - '@context': DEFAULT_CREDENTIAL_CONTEXTS, - type: [...DEFAULT_CREDENTIAL_TYPES, cType.$id], + '@context': KiltCredentialV1.DEFAULT_CREDENTIAL_CONTEXTS, + type: [...KiltCredentialV1.DEFAULT_CREDENTIAL_TYPES, cType.$id], credentialSchema: { - id: credentialSchema.$id, + id: KiltCredentialV1.credentialSchema.$id, type: 'JsonSchema2023', }, credentialSubject: { @@ -210,3 +208,33 @@ it('VC has correct format (full example)', () => { }, }) }) + +it('reproduces credential in round trip', () => { + const VC = toVc(credential, { + issuer: attestation.owner, + chainGenesisHash: mockedApi.genesisHash, + blockHash, + timestamp, + }) + expect(fromVC(VC)).toMatchObject(credential) +}) + +it('it verifies credential with selected properties revealed', async () => { + const reducedCredential = removeClaimProperties(credential, [ + 'name', + 'birthday', + ]) + const { proof, ...reducedVC } = toVc(reducedCredential, { + issuer: attestation.owner, + chainGenesisHash: mockedApi.genesisHash, + blockHash, + timestamp, + }) + + await expect( + KiltAttestationProofV1.verify(reducedVC, proof, { + api: mockedApi, + cTypes: [cType], + }) + ).resolves.not.toThrow() +}) diff --git a/packages/legacy-credentials/src/vcInterop.ts b/packages/legacy-credentials/src/vcInterop.ts new file mode 100644 index 000000000..397d80f8a --- /dev/null +++ b/packages/legacy-credentials/src/vcInterop.ts @@ -0,0 +1,184 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { + hexToU8a, + stringToU8a, + u8aCmp, + u8aToHex, + u8aToString, +} from '@polkadot/util' +import { base58Decode, base58Encode, blake2AsU8a } from '@polkadot/util-crypto' + +import { + CType, + KiltCredentialV1, + KiltAttestationProofV1, + Types, +} from '@kiltprotocol/credentials' + +import type { ICType, IClaim, ICredential } from '@kiltprotocol/types' + +import { makeStatementsJsonLD } from './utils.js' + +/** + * Produces an instance of {@link KiltAttestationProofV1} from an {@link ICredential}. + * + * @param credential Input credential. + * @param opts Additional parameters required for creating a proof from an {@link ICredential}. + * @param opts.blockHash Hash of a block at which the proof must be verifiable. + * @returns An embedded proof for a verifiable credential derived from the input. + */ +function proofFromICredential( + credential: ICredential, + { blockHash }: { blockHash: Uint8Array } +): KiltAttestationProofV1.Interface { + // `block` field is base58 encoding of block hash + const block = base58Encode(blockHash) + // `commitments` (claimHashes) are base58 encoded in new format + const commitments = credential.claimHashes.map((i) => + base58Encode(hexToU8a(i)) + ) + // salt/nonces must be sorted by statement digest (keys) and base58 encoded + const salt = Object.entries(credential.claimNonceMap) + .map(([hsh, slt]) => [hexToU8a(hsh), stringToU8a(slt)]) + .sort((a, b) => u8aCmp(a[0], b[0])) + .map((i) => base58Encode(i[1])) + return { + type: KiltAttestationProofV1.PROOF_TYPE, + block, + commitments, + salt, + } +} + +/** + * Transforms an {@link ICredential} object to conform to the KiltCredentialV1 data model. + * + * @param input An {@link ICredential} object. + * @param options Additional required and optional parameters for producing a VC from an {@link ICredential}. + * @param options.issuer The issuer of the attestation to this credential (attester). + * @param options.timestamp Timestamp of the block referenced by blockHash in milliseconds since January 1, 1970, UTC (UNIX epoch). + * @param options.chainGenesisHash Optional: Genesis hash of the chain against which this credential is verifiable. Defaults to the spiritnet genesis hash. + * @returns A KiltCredentialV1 with embedded KiltAttestationProofV1 proof. + */ +function vcFromICredential( + input: ICredential, + { + issuer, + timestamp, + chainGenesisHash, + }: Pick< + Parameters[0], + 'chainGenesisHash' | 'timestamp' | 'issuer' + > +): Omit { + const { + legitimations: legitimationsInput, + delegationId, + rootHash: claimHash, + claim, + } = input + const { cTypeHash, owner: subject, contents: claims } = claim + const cType = CType.hashToId(cTypeHash) + + const legitimations = legitimationsInput.map(({ rootHash: legHash }) => + KiltCredentialV1.idFromRootHash(legHash) + ) + + const vc = KiltCredentialV1.fromInput({ + claimHash, + subject, + claims, + chainGenesisHash, + cType, + issuer, + timestamp, + legitimations, + ...(delegationId && { delegationId }), + }) + + return vc +} + +type Params = Parameters[1] & + Parameters[1] + +/** + * Transforms an {@link ICredential} object to conform to the KiltCredentialV1 data model. + * + * @param input An {@link ICredential} object. + * @param opts Additional required and optional parameters for producing a VC from an {@link ICredential}. + * @param opts.issuer The issuer of the attestation to this credential (attester). + * @param opts.blockHash Hash of any block at which the credential is verifiable (i.e. Attested and not revoked). + * @param opts.timestamp Timestamp of the block referenced by blockHash in milliseconds since January 1, 1970, UTC (UNIX epoch). + * @param opts.chainGenesisHash Optional: Genesis hash of the chain against which this credential is verifiable. Defaults to the spiritnet genesis hash. + * @returns A KiltCredentialV1 with embedded KiltAttestationProofV1 proof. + */ +export function toVc( + input: ICredential, + { blockHash, issuer, chainGenesisHash, timestamp }: Params +): KiltCredentialV1.Interface { + const proof = proofFromICredential(input, { blockHash }) + return { + ...vcFromICredential(input, { issuer, chainGenesisHash, timestamp }), + proof, + } +} + +/** + * Transforms a {@link KiltCredentialV1} object back to the legacy {@link ICredential} data model. + * + * @param input A {@link KiltCredentialV1} object with embedded {@link KiltAttestationProofV1} proof. + * @returns An ICredential. Depending on the input, legitimations may be merely consist of the credential id instead of full ICredentials. + */ +export function fromVC(input: KiltCredentialV1.Interface): ICredential { + const { + id: owner, + '@context': { '@vocab': vocab }, + ...contents + } = input.credentialSubject + const cTypeId = vocab.slice(0, -1) as ICType['$id'] + const claim: IClaim = { + owner, + cTypeHash: CType.idToHash(cTypeId), + contents, + } + const { commitments, salt } = input.proof + const claimHashes = commitments.map((c) => u8aToHex(base58Decode(c))) + const hashedStatements = makeStatementsJsonLD(claim) + .map((c) => blake2AsU8a(c)) + .sort(u8aCmp) + const claimNonceMap = hashedStatements.reduce((reduced, hash, idx) => { + return { + ...reduced, + [u8aToHex(hash)]: u8aToString(base58Decode(salt[idx])), + } + }, {}) + const rootHash = u8aToHex(KiltCredentialV1.idToRootHash(input.id)) + const delegationId = u8aToHex(KiltCredentialV1.getDelegationId(input)) + const legitimationVcs = input.federatedTrustModel?.filter( + (i): i is Types.KiltAttesterLegitimationV1 => + i.type === KiltCredentialV1.LEGITIMATION_TYPE + ) + const legitimations = (legitimationVcs ?? []).map( + ({ id, verifiableCredential }) => + verifiableCredential + ? fromVC(verifiableCredential) + : ({ + rootHash: u8aToHex(KiltCredentialV1.idToRootHash(id)), + } as ICredential) + ) + return { + rootHash, + claim, + claimHashes, + claimNonceMap, + delegationId, + legitimations, + } +} diff --git a/packages/legacy-credentials/tsconfig.build.json b/packages/legacy-credentials/tsconfig.build.json new file mode 100644 index 000000000..ab24dae00 --- /dev/null +++ b/packages/legacy-credentials/tsconfig.build.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.build.json", + + "compilerOptions": { + "module": "CommonJS", + "outDir": "./lib/cjs" + }, + + "include": [ + "src/**/*.ts", "src/**/*.js" + ], + + "exclude": [ + "coverage", + "**/*.spec.ts", + ] +} diff --git a/packages/legacy-credentials/tsconfig.esm.json b/packages/legacy-credentials/tsconfig.esm.json new file mode 100644 index 000000000..e1f3b73b6 --- /dev/null +++ b/packages/legacy-credentials/tsconfig.esm.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.build.json", + "compilerOptions": { + "module": "ES6", + "outDir": "./lib/esm" + } +} diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index db4b805c6..f0bde215c 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -41,7 +41,7 @@ "dependencies": { "@kiltprotocol/chain-helpers": "workspace:*", "@kiltprotocol/config": "workspace:*", - "@kiltprotocol/core": "workspace:*", + "@kiltprotocol/credentials": "workspace:*", "@kiltprotocol/did": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*" diff --git a/packages/sdk-js/src/index.ts b/packages/sdk-js/src/index.ts index d4266c502..67247af5d 100644 --- a/packages/sdk-js/src/index.ts +++ b/packages/sdk-js/src/index.ts @@ -9,10 +9,29 @@ * @module @kiltprotocol/sdk-js */ -export * from '@kiltprotocol/core' -export { ConfigService } from '@kiltprotocol/config' -export { Blockchain } from '@kiltprotocol/chain-helpers' -export * as ChainHelpers from '@kiltprotocol/chain-helpers' -export * as Did from '@kiltprotocol/did' -export * as Utils from '@kiltprotocol/utils' -export * from '@kiltprotocol/types' +import { Holder, Issuer, Verifier } from '@kiltprotocol/credentials' +import { ConfigService } from '@kiltprotocol/config' +import { Signers } from '@kiltprotocol/utils' +import { + connect, + disconnect, + init, + Blockchain, +} from '@kiltprotocol/chain-helpers' +import { resolver as DidResolver } from '@kiltprotocol/did' + +const { signAndSubmitTx } = Blockchain // TODO: maybe we don't even need that if we have the identity class +const { signerFromKeypair } = Signers + +export { + init, + connect, + disconnect, + DidResolver, + Holder, + Verifier, + Issuer, + signerFromKeypair, + signAndSubmitTx, + ConfigService, +} diff --git a/packages/types/src/AssetDid.ts b/packages/types/src/AssetDid.ts index ecb9a52ef..b114e4c6e 100644 --- a/packages/types/src/AssetDid.ts +++ b/packages/types/src/AssetDid.ts @@ -6,38 +6,38 @@ */ /** - * A string containing a chain namespace as per the [AssetDID specification](https://github.com/KILTprotocol/spec-asset-did). + * A string containing a chain namespace as per the {@link https://github.com/KILTprotocol/spec-asset-did | AssetDID specification}. */ export type Caip2ChainNamespace = string /** - * A string containing a chain reference as per the [AssetDID specification](https://github.com/KILTprotocol/spec-asset-did). + * A string containing a chain reference as per the {@link https://github.com/KILTprotocol/spec-asset-did | AssetDID specification}. */ export type Caip2ChainReference = string /** - * A string containing a chain ID as per the [AssetDID specification](https://github.com/KILTprotocol/spec-asset-did). + * A string containing a chain ID as per the {@link https://github.com/KILTprotocol/spec-asset-did | AssetDID specification}. */ export type Caip2ChainId = `${Caip2ChainNamespace}:${Caip2ChainReference}` /** - * A string containing an asset namespace as per the [AssetDID specification](https://github.com/KILTprotocol/spec-asset-did). + * A string containing an asset namespace as per the {@link https://github.com/KILTprotocol/spec-asset-did | AssetDID specification}. */ export type Caip19AssetNamespace = string /** - * A string containing an asset namespace as per the [AssetDID specification](https://github.com/KILTprotocol/spec-asset-did). + * A string containing an asset namespace as per the {@link https://github.com/KILTprotocol/spec-asset-did | AssetDID specification}. */ export type Caip19AssetReference = string /** - * A string containing an asset instance as per the [AssetDID specification](https://github.com/KILTprotocol/spec-asset-did). + * A string containing an asset instance as per the {@link https://github.com/KILTprotocol/spec-asset-did | AssetDID specification}. */ export type Caip19AssetInstance = string /** - * A string containing an asset ID as per the [AssetDID specification](https://github.com/KILTprotocol/spec-asset-did). + * A string containing an asset ID as per the {@link https://github.com/KILTprotocol/spec-asset-did | AssetDID specification}. */ export type Caip19AssetId = | `${Caip19AssetNamespace}:${Caip19AssetReference}` | `${Caip19AssetNamespace}:${Caip19AssetReference}:${Caip19AssetInstance}` /** - * A string containing an AssetDID as per the [AssetDID specification](https://github.com/KILTprotocol/spec-asset-did). + * A string containing an AssetDID as per the {@link https://github.com/KILTprotocol/spec-asset-did | AssetDID specification}. */ -export type AssetDidUri = `did:asset:${Caip2ChainId}.${Caip19AssetId}` +export type AssetDid = `did:asset:${Caip2ChainId}.${Caip19AssetId}` diff --git a/packages/types/src/Attestation.ts b/packages/types/src/Attestation.ts index 0f42f8974..2b4d58270 100644 --- a/packages/types/src/Attestation.ts +++ b/packages/types/src/Attestation.ts @@ -5,7 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { DidUri } from './DidDocument' +import type { Did } from './Did' import type { IDelegationNode } from './Delegation' import type { ICredential } from './Credential' import type { CTypeHash } from './CType' @@ -13,7 +13,7 @@ import type { CTypeHash } from './CType' export interface IAttestation { claimHash: ICredential['rootHash'] cTypeHash: CTypeHash - owner: DidUri + owner: Did delegationId: IDelegationNode['id'] | null revoked: boolean } diff --git a/packages/types/src/Claim.ts b/packages/types/src/Claim.ts index 5e8691644..6a7b341ff 100644 --- a/packages/types/src/Claim.ts +++ b/packages/types/src/Claim.ts @@ -6,7 +6,7 @@ */ import type { CTypeHash } from './CType' -import type { DidUri } from './DidDocument' +import type { Did } from './Did' type ClaimPrimitives = string | number | boolean @@ -20,7 +20,7 @@ export interface IClaimContents { export interface IClaim { cTypeHash: CTypeHash contents: IClaimContents - owner: DidUri + owner: Did } /** diff --git a/packages/types/src/Credential.ts b/packages/types/src/Credential.ts index ec2c0d467..cd63793ef 100644 --- a/packages/types/src/Credential.ts +++ b/packages/types/src/Credential.ts @@ -5,9 +5,9 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { DidSignature } from './DidDocument' import type { IClaim } from './Claim' import type { IDelegationNode } from './Delegation' +import type { DidSignature } from './Did' import type { HexString } from './Imported' export type Hash = HexString diff --git a/packages/types/src/CryptoCallbacks.ts b/packages/types/src/CryptoCallbacks.ts index 3bb8225b1..d5c51570b 100644 --- a/packages/types/src/CryptoCallbacks.ts +++ b/packages/types/src/CryptoCallbacks.ts @@ -6,11 +6,10 @@ */ import type { - DidResourceUri, - DidUri, - DidVerificationKey, - VerificationKeyRelationship, -} from './DidDocument.js' + Did, + SignatureVerificationRelationship, + VerificationMethod, +} from './Did' /** * Base interface for all signing requests. @@ -22,14 +21,14 @@ export interface SignRequestData { data: Uint8Array /** - * The did key relationship to be used. + * The DID verification relationship to be used. */ - keyRelationship: VerificationKeyRelationship + verificationRelationship: SignatureVerificationRelationship /** * The DID to be used for signing. */ - did: DidUri + did: Did } /** @@ -41,13 +40,9 @@ export interface SignResponseData { */ signature: Uint8Array /** - * The did key uri used for signing. + * The DID verification method used for signing. */ - keyUri: DidResourceUri - /** - * The did key type used for signing. - */ - keyType: DidVerificationKey['type'] + verificationMethod: VerificationMethod } /** @@ -62,7 +57,7 @@ export type SignCallback = ( */ export type SignExtrinsicCallback = ( signData: SignRequestData -) => Promise> +) => Promise /** * Base interface for encryption requests. @@ -79,7 +74,7 @@ export interface EncryptRequestData { /** * The DID to be used for encryption. */ - did: DidUri + did: Did } /** @@ -95,16 +90,16 @@ export interface EncryptResponseData { */ nonce: Uint8Array /** - * The did key uri used for the encryption. + * The DID verification method used for the encryption. */ - keyUri: DidResourceUri + verificationMethod: VerificationMethod } /** * Uses stored key material to encrypt a message encoded as u8a. * * @param requestData The data to be encrypted, the peers public key and the sender's DID. - * @returns [[EncryptResponseData]] which additionally to the data contains a `nonce` randomly generated in the encryption process (required for decryption). + * @returns The {@link EncryptResponseData} which additionally to the data contains a `nonce` randomly generated in the encryption process (required for decryption). */ export interface EncryptCallback { (requestData: EncryptRequestData): Promise @@ -124,9 +119,9 @@ export interface DecryptRequestData { */ nonce: Uint8Array /** - * The did key uri, which should be used for decryption. + * The DID verification method, which should be used for decryption. */ - keyUri: DidResourceUri + verificationMethod: VerificationMethod } export interface DecryptResponseData { @@ -139,9 +134,9 @@ export interface DecryptResponseData { /** * Uses stored key material to decrypt a message encoded as u8a. * - * @param requestData [[DecryptRequestData]] containing both our and their public keys, the nonce used for encryption, the data to be decrypted. + * @param requestData A {@link DecryptRequestData} containing both our and their public keys, the nonce used for encryption, the data to be decrypted. * @param requestData.nonce The random nonce generated during encryption as u8a. - * @returns A Promise resolving to [[DecryptResponseData]] containing the decrypted message or rejecting if a key is unknown or does not match. + * @returns A Promise resolving to {@link DecryptResponseData} containing the decrypted message or rejecting if a key is unknown or does not match. */ export interface DecryptCallback { (requestData: DecryptRequestData): Promise diff --git a/packages/types/src/Delegation.ts b/packages/types/src/Delegation.ts index 7049e3361..2139eb611 100644 --- a/packages/types/src/Delegation.ts +++ b/packages/types/src/Delegation.ts @@ -6,7 +6,7 @@ */ import type { CTypeHash } from './CType' -import type { DidUri } from './DidDocument' +import type { Did } from './Did' /* eslint-disable no-bitwise */ export const Permission = { @@ -20,7 +20,7 @@ export interface IDelegationNode { hierarchyId: IDelegationNode['id'] parentId?: IDelegationNode['id'] childrenIds: Array - account: DidUri + account: Did permissions: PermissionType[] revoked: boolean } diff --git a/packages/types/src/Did.ts b/packages/types/src/Did.ts new file mode 100644 index 000000000..fc0d458a0 --- /dev/null +++ b/packages/types/src/Did.ts @@ -0,0 +1,103 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import type { KiltAddress } from './Address' + +type AuthenticationKeyType = '00' | '01' +type DidVersion = '' | `v${string}:` +type LightDidDocumentEncodedData = '' | `:${string}` + +/** + * A string containing a KILT DID. + */ +export type Did = + | `did:kilt:${DidVersion}${KiltAddress}` + | `did:kilt:light:${DidVersion}${AuthenticationKeyType}${KiltAddress}${LightDidDocumentEncodedData}` + +/** + * The fragment part of the DID including the `#` character. + */ +export type UriFragment = `#${string}` + +/** + * URL for DID resources like keys or services. + */ +export type DidUrl = + | `${Did}${UriFragment}` + // Very broad type definition, mostly for the compiler. Actual regex matching for query params is done where needed. + | `${Did}?{string}${UriFragment}` + +export type SignatureVerificationRelationship = + | 'authentication' + | 'capabilityDelegation' + | 'assertionMethod' +export type EncryptionRelationship = 'keyAgreement' + +export type VerificationRelationship = + | SignatureVerificationRelationship + | EncryptionRelationship + +export type DidSignature = { + // Name `keyUri` kept for retro-compatibility + keyUri: DidUrl + signature: string +} + +type Base58BtcMultibaseString = `z${string}` + +/** + * The verification method of a DID. + */ +export type VerificationMethod = { + /** + * The relative identifier (i.e., `#`) of the verification method. + */ + id: UriFragment + /** + * The type of the verification method. This is fixed for KILT DIDs. + */ + type: 'Multikey' + /** + * The controller of the verification method. + */ + controller: Did + /* + * The multicodec-prefixed, multibase-encoded verification method's public key. + */ + publicKeyMultibase: Base58BtcMultibaseString +} + +/* + * The service of a KILT DID. + */ +export type Service = { + /* + * The relative identifier (i.e., `#`) of the verification method. + */ + id: UriFragment + /* + * The set of service types. + */ + type: string[] + /* + * A list of URIs the endpoint exposes its services at. + */ + serviceEndpoint: string[] +} + +export type DidDocument = { + id: Did + alsoKnownAs?: string[] + verificationMethod?: VerificationMethod[] + authentication?: UriFragment[] + assertionMethod?: UriFragment[] + keyAgreement?: UriFragment[] + capabilityDelegation?: UriFragment[] + service?: Service[] +} + +export type JsonLd = T & { '@context': string[] } diff --git a/packages/types/src/DidDocument.ts b/packages/types/src/DidDocument.ts deleted file mode 100644 index 9bf9a7502..000000000 --- a/packages/types/src/DidDocument.ts +++ /dev/null @@ -1,176 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import type { BN } from './Imported' -import type { KiltAddress } from './Address' - -type AuthenticationKeyType = '00' | '01' -type DidUriVersion = '' | `v${string}:` -type LightDidEncodedData = '' | `:${string}` - -// NOTICE: The following string pattern types must be kept in sync with regex patterns @kiltprotocol/did/Utils - -/** - * A string containing a KILT DID Uri. - */ -export type DidUri = - | `did:kilt:${DidUriVersion}${KiltAddress}` - | `did:kilt:light:${DidUriVersion}${AuthenticationKeyType}${KiltAddress}${LightDidEncodedData}` - -/** - * The fragment part of the DID URI including the `#` character. - */ -export type UriFragment = `#${string}` -/** - * URI for DID resources like keys or service endpoints. - */ -export type DidResourceUri = `${DidUri}${UriFragment}` - -/** - * DID keys are purpose-bound. Their role or purpose is indicated by the verification or key relationship type. - */ -const keyRelationshipsC = [ - 'authentication', - 'capabilityDelegation', - 'assertionMethod', - 'keyAgreement', -] as const -export const keyRelationships = keyRelationshipsC as unknown as string[] -export type KeyRelationship = typeof keyRelationshipsC[number] - -/** - * Subset of key relationships which pertain to signing/verification keys. - */ -export type VerificationKeyRelationship = Extract< - KeyRelationship, - 'authentication' | 'capabilityDelegation' | 'assertionMethod' -> - -/** - * Possible types for a DID verification key. - */ -const verificationKeyTypesC = ['sr25519', 'ed25519', 'ecdsa'] as const -export const verificationKeyTypes = verificationKeyTypesC as unknown as string[] -export type VerificationKeyType = typeof verificationKeyTypesC[number] -// `as unknown as string[]` is a workaround for https://github.com/microsoft/TypeScript/issues/26255 - -/** - * Currently, a light DID does not support the use of an ECDSA key as its authentication key. - */ -export type LightDidSupportedVerificationKeyType = Extract< - VerificationKeyType, - 'ed25519' | 'sr25519' -> - -/** - * Subset of key relationships which pertain to key agreement/encryption keys. - */ -export type EncryptionKeyRelationship = Extract - -/** - * Possible types for a DID encryption key. - */ -const encryptionKeyTypesC = ['x25519'] as const -export const encryptionKeyTypes = encryptionKeyTypesC as unknown as string[] -export type EncryptionKeyType = typeof encryptionKeyTypesC[number] - -/** - * Type of a new key material to add under a DID. - */ -export type BaseNewDidKey = { - publicKey: Uint8Array - type: string -} - -/** - * Type of a new verification key to add under a DID. - */ -export type NewDidVerificationKey = BaseNewDidKey & { - type: VerificationKeyType -} -/** - * A new public key specified when creating a new light DID. - */ -export type NewLightDidVerificationKey = NewDidVerificationKey & { - type: LightDidSupportedVerificationKeyType -} -/** - * Type of a new encryption key to add under a DID. - */ -export type NewDidEncryptionKey = BaseNewDidKey & { type: EncryptionKeyType } - -/** - * The SDK-specific base details of a DID key. - */ -export type BaseDidKey = { - /** - * Relative key URI: `#` sign followed by fragment part of URI. - */ - id: UriFragment - /** - * The public key material. - */ - publicKey: Uint8Array - /** - * The inclusion block of the key, if stored on chain. - */ - includedAt?: BN - /** - * The type of the key. - */ - type: string -} - -/** - * The SDK-specific details of a DID verification key. - */ -export type DidVerificationKey = BaseDidKey & { type: VerificationKeyType } -/** - * The SDK-specific details of a DID encryption key. - */ -export type DidEncryptionKey = BaseDidKey & { type: EncryptionKeyType } -/** - * The SDK-specific details of a DID key. - */ -export type DidKey = DidVerificationKey | DidEncryptionKey - -/** - * The SDK-specific details of a new DID service endpoint. - */ -export type DidServiceEndpoint = { - /** - * Relative endpoint URI: `#` sign followed by fragment part of URI. - */ - id: UriFragment - /** - * A list of service types the endpoint exposes. - */ - type: string[] - /** - * A list of URIs the endpoint exposes its services at. - */ - serviceEndpoint: string[] -} - -/** - * A signature issued with a DID associated key, indicating which key was used to sign. - */ -export type DidSignature = { - keyUri: DidResourceUri - signature: string -} - -export interface DidDocument { - uri: DidUri - - authentication: [DidVerificationKey] - assertionMethod?: [DidVerificationKey] - capabilityDelegation?: [DidVerificationKey] - keyAgreement?: DidEncryptionKey[] - - service?: DidServiceEndpoint[] -} diff --git a/packages/types/src/DidDocumentExporter.ts b/packages/types/src/DidDocumentExporter.ts deleted file mode 100644 index 9b675e23e..000000000 --- a/packages/types/src/DidDocumentExporter.ts +++ /dev/null @@ -1,108 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import { - DidResourceUri, - DidServiceEndpoint, - DidUri, - EncryptionKeyType, - VerificationKeyType, -} from './DidDocument.js' -import { DidResolutionDocumentMetadata } from './DidResolver.js' - -export type ConformingDidDocumentKeyType = - | 'Ed25519VerificationKey2018' - | 'Sr25519VerificationKey2020' - | 'EcdsaSecp256k1VerificationKey2019' - | 'X25519KeyAgreementKey2019' - -export const verificationKeyTypesMap: Record< - VerificationKeyType, - ConformingDidDocumentKeyType -> = { - // proposed and used by dock.io, e.g. https://github.com/w3c-ccg/security-vocab/issues/32, https://github.com/docknetwork/sdk/blob/9c818b03bfb4fdf144c20678169c7aad3935ad96/src/utils/vc/contexts/security_context.js - sr25519: 'Sr25519VerificationKey2020', - // these are part of current w3 security vocab, see e.g. https://www.w3.org/ns/did/v1 - ed25519: 'Ed25519VerificationKey2018', - ecdsa: 'EcdsaSecp256k1VerificationKey2019', -} - -export const encryptionKeyTypesMap: Record< - EncryptionKeyType, - ConformingDidDocumentKeyType -> = { - x25519: 'X25519KeyAgreementKey2019', -} - -/** - * A spec-compliant description of a DID key. - */ -export type ConformingDidKey = { - /** - * The full key URI, in the form of #. - */ - id: DidResourceUri - /** - * The key controller, in the form of . - */ - controller: DidUri - /** - * The base58-encoded public component of the key. - */ - publicKeyBase58: string - /** - * The key type signalling the intended signing/encryption algorithm for the use of this key. - */ - type: ConformingDidDocumentKeyType -} - -/** - * A spec-compliant description of a DID endpoint. - */ -export type ConformingDidServiceEndpoint = Omit & { - /** - * The full service URI, in the form of #. - */ - id: DidResourceUri -} - -/** - * A DID Document according to the [W3C DID Core specification](https://www.w3.org/TR/did-core/). - */ -export type ConformingDidDocument = { - id: DidUri - verificationMethod: ConformingDidKey[] - authentication: [ConformingDidKey['id']] - assertionMethod?: [ConformingDidKey['id']] - keyAgreement?: [ConformingDidKey['id']] - capabilityDelegation?: [ConformingDidKey['id']] - service?: ConformingDidServiceEndpoint[] - alsoKnownAs?: [`w3n:${string}`] -} - -/** - * A JSON+LD DID Document that extends a traditional DID Document with additional semantic information. - */ -export type JsonLDDidDocument = ConformingDidDocument & { '@context': string[] } - -/** - * DID Resolution Metadata returned by the DID `resolve` function as described by DID specifications (https://www.w3.org/TR/did-core/#did-resolution-metadata). - */ -export interface DidResolutionMetadata { - error?: 'notFound' | 'invalidDid' - errorMessage?: string -} - -/** - * Object containing the return values of the DID `resolve` function as described by DID specifications (https://www.w3.org/TR/did-core/#did-resolution). - */ -export interface ConformingDidResolutionResult { - didDocumentMetadata: Partial - didResolutionMetadata: DidResolutionMetadata - didDocument?: Partial & - Pick -} diff --git a/packages/types/src/DidResolver.ts b/packages/types/src/DidResolver.ts index fd74dc237..39338b2e0 100644 --- a/packages/types/src/DidResolver.ts +++ b/packages/types/src/DidResolver.ts @@ -5,74 +5,250 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { - ConformingDidKey, - ConformingDidServiceEndpoint, -} from './DidDocumentExporter.js' import type { + Did, DidDocument, - DidKey, - DidResourceUri, - DidUri, - KeyRelationship, -} from './DidDocument.js' + DidUrl, + VerificationMethod, + Service, + JsonLd, +} from './Did' /** - * DID resolution metadata that includes a subset of the properties defined in the [W3C proposed standard](https://www.w3.org/TR/did-core/#did-resolution). + * The `accept` header must not be used for the regular `resolve` function, so we enforce that statically. + * For more info, please refer to {@link https://www.w3.org/TR/did-core/#did-resolution-options | did resolution options}. */ -export type DidResolutionDocumentMetadata = { +export type ResolutionOptions = Record + +export type ResolutionMetadata = { /** - * If present, it indicates that the resolved by DID should be treated as if it were the DID as specified in this property. + * The error code from the resolution process. + * This property is REQUIRED when there is an error in the resolution process. + * The value of this property MUST be a single keyword ASCII string. + * The possible property values of this field SHOULD be registered in the DID Specification Registries. + * This specification defines the following common error values: + * * invalidDid: The DID supplied to the DID resolution function does not conform to valid syntax. + * * notFound: The DID resolver was unable to find the DID document resulting from this resolution request. */ - canonicalId?: DidUri + error?: 'invalidDid' | 'notFound' +} + +export type ResolutionDocumentMetadata = { /** - * A boolean flag indicating whether the resolved DID has been deactivated. + * If a DID has been deactivated, DID document metadata MUST include this property with the boolean value true. + * If a DID has not been deactivated, this property is OPTIONAL, but if included, MUST have the boolean value false. */ - deactivated: boolean + deactivated?: true + /** + * DID document metadata MAY include a canonicalId property. + * If present, the value MUST be a string that conforms to the rules in Section 3.1 DID Syntax. + * The relationship is a statement that the canonicalId value is logically equivalent to the id property value and that the canonicalId value is defined by the DID method to be the canonical ID for the DID subject in the scope of the containing DID document. + * A canonicalId value MUST be produced by, and a form of, the same DID method as the id property value. (e.g., did:example:abc == did:example:ABC). + */ + canonicalId?: Did } -/** - * The result of a DID resolution. - * - * It includes the DID Document, and optional document resolution metadata. - */ -export type DidResolutionResult = { +export type ResolutionResult = { /** - * The resolved DID document. It is undefined if the DID has been upgraded or deleted. + * A metadata structure consisting of values relating to the results of the DID resolution process which typically changes between invocations of the resolve and resolveRepresentation functions, as it represents data about the resolution process itself. + * This structure is REQUIRED, and in the case of an error in the resolution process, this MUST NOT be empty. + * If resolveRepresentation was called, this structure MUST contain a contentType property containing the Media Type of the representation found in the didDocumentStream. + * If the resolution is not successful, this structure MUST contain an error property describing the error. + * The possible properties within this structure and their possible values are registered in the DID Specification Registries. */ - document?: DidDocument + didResolutionMetadata: ResolutionMetadata /** - * The DID resolution metadata. + * If the resolution is successful, and if the resolve function was called, this MUST be a DID document abstract data model (a map) as described in 4. Data Model that is capable of being transformed into a conforming DID Document (representation), using the production rules specified by the representation. + * The value of id in the resolved DID document MUST match the DID that was resolved. + * If the resolution is unsuccessful, this value MUST be empty. */ - metadata: DidResolutionDocumentMetadata + didDocument?: DidDocument /** - * The DID's web3Name, if any. + * If the resolution is successful, this MUST be a metadata structure. + * This structure contains metadata about the DID document contained in the didDocument property. + * This metadata typically does not change between invocations of the resolve and resolveRepresentation functions unless the DID document changes, as it represents metadata about the DID document. + * If the resolution is unsuccessful, this output MUST be an empty metadata structure. + * The possible properties within this structure and their possible values SHOULD be registered in the DID Specification Registries. */ - web3Name?: string + didDocumentMetadata: ResolutionDocumentMetadata } -export type ResolvedDidKey = Pick & - Pick +export type RepresentationResolutionOptions = { + /** + * The Media Type of the caller's preferred representation of the DID document. + * The Media Type MUST be expressed as an ASCII string. + * The DID resolver implementation SHOULD use this value to determine the representation contained in the returned didDocumentStream if such a representation is supported and available. + * This property is OPTIONAL for the resolveRepresentation function and MUST NOT be used with the resolve function. + */ + accept?: Accept +} -export type ResolvedDidServiceEndpoint = ConformingDidServiceEndpoint +export type SuccessfulRepresentationResolutionMetadata< + ContentType extends string = string +> = { + /** + * The Media Type of the returned didDocumentStream. + * This property is REQUIRED if resolution is successful and if the resolveRepresentation function was called. + * This property MUST NOT be present if the resolve function was called. + * The value of this property MUST be an ASCII string that is the Media Type of the conformant representations. + * The caller of the resolveRepresentation function MUST use this value when determining how to parse and process the didDocumentStream returned by this function into the data model. + */ + contentType: ContentType +} +export type FailedRepresentationResolutionMetadata = { + /** + * The error code from the resolution process. + * This property is REQUIRED when there is an error in the resolution process. + * The value of this property MUST be a single keyword ASCII string. + * The possible property values of this field SHOULD be registered in the DID Specification Registries. + * This specification defines the following common error values: + * * invalidDid: The DID supplied to the DID resolution function does not conform to valid syntax. + * * notFound: The DID resolver was unable to find the DID document resulting from this resolution request. + * * representationNotSupported: This error code is returned if the representation requested via the accept input metadata property is not supported by the DID method and/or DID resolver implementation. + */ + error: 'invalidDid' | 'notFound' | 'representationNotSupported' +} -/** - * Resolves a DID URI, returning the full contents of the DID document. - * - * @param did A DID URI identifying a DID document. All additional parameters and fragments are ignored. - * @returns A promise of a [[DidResolutionResult]] object representing the DID document or null if the DID - * cannot be resolved. - */ -export type DidResolve = (did: DidUri) => Promise +// Either success with `contentType` or failure with `error` +export type RepresentationResolutionMetadata< + ContentType extends string = string +> = + | SuccessfulRepresentationResolutionMetadata + | FailedRepresentationResolutionMetadata + +export type RepresentationResolutionDocumentMetadata = + ResolutionDocumentMetadata + +export type RepresentationResolutionResult< + ContentType extends string = string +> = Pick & { + /** + * If the resolution is successful, and if the resolveRepresentation function was called, this MUST be a byte stream of the resolved DID document in one of the conformant representations. + * The byte stream might then be parsed by the caller of the resolveRepresentation function into a data model, which can in turn be validated and processed. + * If the resolution is unsuccessful, this value MUST be an empty stream. + */ + didDocumentStream?: Uint8Array + didResolutionMetadata: RepresentationResolutionMetadata +} /** - * Resolves a DID URI identifying a public key associated with a DID. - * - * @param didUri A DID URI identifying a public key associated with a DID through the DID document. - * @returns A promise of a [[ResolvedDidKey]] object representing the DID public key or null if - * the DID or key URI cannot be resolved. + * The resolve function returns the DID document in its abstract form (a map). */ -export type DidResolveKey = ( - didUri: DidResourceUri, - expectedVerificationMethod?: KeyRelationship -) => Promise +export interface ResolveDid { + resolve: ( + /** + * This is the DID to resolve. + * This input is REQUIRED and the value MUST be a conformant DID as defined in 3.1 DID Syntax. + */ + did: Did, + /** + * A metadata structure containing properties defined in 7.1.1 DID Resolution Options. + * This input is REQUIRED, but the structure MAY be empty. + */ + resolutionOptions: ResolutionOptions + ) => Promise + + resolveRepresentation: ( + /** + * This is the DID to resolve. + * This input is REQUIRED and the value MUST be a conformant DID as defined in 3.1 DID Syntax. + */ + did: Did, + /** + * A metadata structure containing properties defined in 7.1.1 DID Resolution Options. + * This input is REQUIRED, but the structure MAY be empty. + */ + resolutionOptions: RepresentationResolutionOptions + ) => Promise> +} + +export type DereferenceOptions = { + /** + * The Media Type that the caller prefers for contentStream. + * The Media Type MUST be expressed as an ASCII string. + * The DID URL dereferencing implementation SHOULD use this value to determine the contentType of the representation contained in the returned value if such a representation is supported and available. + */ + accept?: Accept +} + +export type SuccessfulDereferenceMetadata = + { + /** + * The Media Type of the returned contentStream SHOULD be expressed using this property if dereferencing is successful. + * The Media Type value MUST be expressed as an ASCII string. + */ + contentType: ContentType + } +export type FailedDereferenceMetadata = { + /** + * The error code from the dereferencing process. + * This property is REQUIRED when there is an error in the dereferencing process. + * The value of this property MUST be a single keyword expressed as an ASCII string. + * The possible property values of this field SHOULD be registered in the DID Specification Registries [DID-SPEC-REGISTRIES]. + * This specification defines the following common error values: + * * invalidDidUrl: The DID URL supplied to the DID URL dereferencing function does not conform to valid syntax. (See 3.2 DID URL Syntax.). + * * notFound: The DID URL dereferencer was unable to find the contentStream resulting from this dereferencing request. + * * invalidVerificationRelationship: https://github.com/decentralized-identity/did-spec-extensions/pull/21. + */ + error: 'invalidDidUrl' | 'notFound' | 'invalidVerificationRelationship' +} + +// Either success with `contentType` or failure with `error` +export type DereferenceMetadata = + | SuccessfulDereferenceMetadata + | FailedDereferenceMetadata + +export type DereferenceContentStream = + | DidDocument + | JsonLd + | VerificationMethod + | JsonLd + | Service + | JsonLd + | Uint8Array + +export type DereferenceContentMetadata = ResolutionDocumentMetadata + +export type DereferenceResult = { + /** + * A metadata structure consisting of values relating to the results of the DID URL dereferencing process. + * This structure is REQUIRED, and in the case of an error in the dereferencing process, this MUST NOT be empty. + * Properties defined by this specification are in 7.2.2 DID URL Dereferencing Metadata. + * If the dereferencing is not successful, this structure MUST contain an error property describing the error. + */ + dereferencingMetadata: DereferenceMetadata + /** + * If the dereferencing function was called and successful, this MUST contain a resource corresponding to the DID URL. + * The contentStream MAY be a resource such as a DID document that is serializable in one of the conformant representations, a Verification Method, a service, or any other resource format that can be identified via a Media Type and obtained through the resolution process. + * If the dereferencing is unsuccessful, this value MUST be empty. + */ + contentStream?: DereferenceContentStream + /** + * If the dereferencing is successful, this MUST be a metadata structure, but the structure MAY be empty. + * This structure contains metadata about the contentStream. + * If the contentStream is a DID document, this MUST be a didDocumentMetadata structure as described in DID Resolution. + * If the dereferencing is unsuccessful, this output MUST be an empty metadata structure. + */ + contentMetadata: DereferenceContentMetadata +} + +export interface DereferenceDidUrl { + dereference: ( + /** + * A conformant DID URL as a single string. + * This is the DID URL to dereference. + * To dereference a DID fragment, the complete DID URL including the DID fragment MUST be used. This input is REQUIRED. + */ + didUrl: Did | DidUrl, + /** + * A metadata structure consisting of input options to the dereference function in addition to the didUrl itself. + * Properties defined by this specification are in 7.2.1 DID URL Dereferencing Options. + * This input is REQUIRED, but the structure MAY be empty. + */ + dereferenceOptions: DereferenceOptions + ) => Promise> +} + +export interface DidResolver + extends ResolveDid, + DereferenceDidUrl {} diff --git a/packages/types/src/PublicCredential.ts b/packages/types/src/PublicCredential.ts index 0b3ba75db..0b863cd01 100644 --- a/packages/types/src/PublicCredential.ts +++ b/packages/types/src/PublicCredential.ts @@ -9,11 +9,11 @@ import type { HexString, BN } from './Imported' import type { CTypeHash } from './CType' import type { IDelegationNode } from './Delegation' import type { IClaimContents } from './Claim' -import type { DidUri } from './DidDocument' -import type { AssetDidUri } from './AssetDid' +import type { Did } from './Did' +import type { AssetDid } from './AssetDid' /* - * The minimal information required to issue a public credential to a given [[AssetDidUri]]. + * The minimal information required to issue a public credential to a given {@link AssetDid}. */ export interface IPublicCredentialInput { /* @@ -27,7 +27,7 @@ export interface IPublicCredentialInput { /* * The subject of the credential. */ - subject: AssetDidUri + subject: AssetDid /* * The content of the credential. The structure must match what the CType specifies. */ @@ -41,13 +41,13 @@ export interface IPublicCredential extends IPublicCredentialInput { /* * The unique ID of the credential. It is cryptographically derived from the credential content. * - * The ID is formed by first concatenating the SCALE-encoded [[IPublicCredentialInput]] with the SCALE-encoded [[DidUri]] and then Blake2b hashing the result. + * The ID is formed by first concatenating the SCALE-encoded {@link IPublicCredentialInput} with the SCALE-encoded {@link Did} and then Blake2b hashing the result. */ id: HexString /* - * The KILT DID uri of the credential attester. + * The KILT DID of the credential attester. */ - attester: DidUri + attester: Did /* * The block number at which the credential was issued. */ @@ -55,7 +55,7 @@ export interface IPublicCredential extends IPublicCredentialInput { /* * The revocation status of the credential. * - * This is not to be trusted if shared by another party. It is only to trust if the [[IPublicCredential]] object is retrieved via one of the querying methods that this SDK exposes. + * This is not to be trusted if shared by another party. It is only to trust if the {@link IPublicCredential} object is retrieved via one of the querying methods that this SDK exposes. */ revoked: boolean } @@ -63,12 +63,12 @@ export interface IPublicCredential extends IPublicCredentialInput { /* * A claim for a public credential. * - * Like an [[IClaim]], but with a [[AssetDidUri]] `subject` instead of an [[IClaim]] `owner`. + * Like an {@link IClaim}, but with a {@link AssetDid} `subject` instead of an {@link IClaim} `owner`. */ export interface IAssetClaim { cTypeHash: CTypeHash contents: IClaimContents - subject: AssetDidUri + subject: AssetDid } /** diff --git a/packages/core/src/credential/index.ts b/packages/types/src/Signers.ts similarity index 52% rename from packages/core/src/credential/index.ts rename to packages/types/src/Signers.ts index 71be6ee23..dbe15db31 100644 --- a/packages/core/src/credential/index.ts +++ b/packages/types/src/Signers.ts @@ -5,4 +5,11 @@ * found in the LICENSE file in the root directory of this source tree. */ -export * from './Credential.js' +export type SignerInterface< + Alg extends string = string, + Id extends string = string +> = { + algorithm: Alg + id: Id + sign: (input: { data: Uint8Array }) => Promise +} diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index be510ee7a..0b119e907 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -21,9 +21,9 @@ export * from './Deposit.js' export * from './Delegation.js' export * from './Address.js' export * from './Credential.js' -export * from './DidDocument.js' +export * from './Did.js' export * from './CryptoCallbacks.js' export * from './DidResolver.js' -export * from './DidDocumentExporter.js' export * from './PublicCredential.js' export * from './Imported.js' +export * from './Signers.js' diff --git a/packages/utils/package.json b/packages/utils/package.json index 3759f261b..457473926 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -34,6 +34,10 @@ "typescript": "^4.8.3" }, "dependencies": { + "@kiltprotocol/eddsa-jcs-2022": "0.1.0-rc.1", + "@kiltprotocol/es256k-jcs-2023": "0.1.0-rc.1", + "@kiltprotocol/jcs-data-integrity-proofs-common": "0.1.0-rc.1", + "@kiltprotocol/sr25519-jcs-2023": "0.1.0-rc.1", "@kiltprotocol/types": "workspace:*", "@polkadot/api": "^10.4.0", "@polkadot/keyring": "^12.0.0", diff --git a/packages/vc-export/src/CAIP/CAIP.spec.ts b/packages/utils/src/CAIP/CAIP.spec.ts similarity index 88% rename from packages/vc-export/src/CAIP/CAIP.spec.ts rename to packages/utils/src/CAIP/CAIP.spec.ts index 4ce8a3e01..86d917b2a 100644 --- a/packages/vc-export/src/CAIP/CAIP.spec.ts +++ b/packages/utils/src/CAIP/CAIP.spec.ts @@ -5,9 +5,13 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { spiritnetGenesisHash } from '../constants' -import { chainIdFromGenesis, parse as parseCaip2 } from './caip2' import { parse as parseCaip19 } from './caip19' +import { chainIdFromGenesis, parse as parseCaip2 } from './caip2' + +const spiritnetGenesisHash = new Uint8Array([ + 65, 31, 5, 123, 145, 7, 113, 140, 150, 36, 214, 170, 74, 63, 35, 193, 101, 56, + 152, 41, 127, 61, 77, 82, 157, 155, 182, 81, 26, 57, 221, 33, +]) it('parses a CAIP-2 chain id', () => { const chainId = chainIdFromGenesis(spiritnetGenesisHash) diff --git a/packages/vc-export/src/CAIP/caip19.ts b/packages/utils/src/CAIP/caip19.ts similarity index 100% rename from packages/vc-export/src/CAIP/caip19.ts rename to packages/utils/src/CAIP/caip19.ts diff --git a/packages/vc-export/src/CAIP/caip2.ts b/packages/utils/src/CAIP/caip2.ts similarity index 100% rename from packages/vc-export/src/CAIP/caip2.ts rename to packages/utils/src/CAIP/caip2.ts diff --git a/packages/vc-export/src/CAIP/index.ts b/packages/utils/src/CAIP/index.ts similarity index 100% rename from packages/vc-export/src/CAIP/index.ts rename to packages/utils/src/CAIP/index.ts diff --git a/packages/utils/src/Crypto.ts b/packages/utils/src/Crypto.ts index 5e493c438..345f17812 100644 --- a/packages/utils/src/Crypto.ts +++ b/packages/utils/src/Crypto.ts @@ -265,7 +265,7 @@ export function decryptAsymmetricAsStr( } /** - * Signature of hashing function accepted by [[hashStatements]]. + * Signature of hashing function accepted by {@link hashStatements}. * * @param value String to be hashed. * @param nonce Optional nonce (as string) used to obscure hashed contents. @@ -276,7 +276,7 @@ export interface Hasher { } /** - * Additional options for [[hashStatements]]. + * Additional options for {@link hashStatements}. */ export interface HashingOptions { nonces?: Record @@ -285,7 +285,7 @@ export interface HashingOptions { } /** - * Default hasher for [[hashStatements]]. + * Default hasher for {@link hashStatements}. * * @param value String to be hashed. * @param nonce Optional nonce (as string) used to obscure hashed contents. diff --git a/packages/utils/src/SDKErrors.ts b/packages/utils/src/SDKErrors.ts index 205b96875..6844d45a1 100644 --- a/packages/utils/src/SDKErrors.ts +++ b/packages/utils/src/SDKErrors.ts @@ -13,6 +13,8 @@ /* eslint-disable max-classes-per-file */ +import type { SignerInterface } from '@kiltprotocol/types' + export class SDKError extends Error { constructor(message?: string, options?: ErrorOptions) { super(message, options) @@ -45,8 +47,6 @@ export class EncryptionError extends SDKError {} export class DidError extends SDKError {} -export class DidExporterError extends SDKError {} - export class DidBatchError extends SDKError {} export class DidNotFoundError extends SDKError {} @@ -113,10 +113,38 @@ export class ClaimNonceMapMalformedError extends SDKError { export class SignatureMalformedError extends SDKError {} +export class NoSuitableSignerError extends SDKError { + constructor( + message?: string, + options?: ErrorOptions & { + signerRequirements?: Record + availableSigners?: readonly SignerInterface[] + } + ) { + const { signerRequirements, availableSigners } = options ?? {} + const msgs = [message ?? 'No suitable signers provided to this function.'] + if (signerRequirements) { + msgs.push( + `Expected signer matching conditions ${JSON.stringify( + signerRequirements, + null, + 2 + )}.` + ) + } + if (availableSigners) { + msgs.push( + `Signers available: ${JSON.stringify(availableSigners, null, 2)}.` + ) + } + super(msgs.join('\n'), options) + } +} + export class DidSubjectMismatchError extends SDKError { constructor(actual: string, expected: string) { super( - `The DID "${actual}" doesn't match the DID Document's URI "${expected}"` + `The DID "${actual}" doesn't match the DID Document's id "${expected}"` ) } } @@ -181,3 +209,9 @@ export class NoProofForStatementError extends SDKError { export class CodecMismatchError extends SDKError {} export class PublicCredentialError extends SDKError {} + +export class CredentialMalformedError extends SDKError {} + +export class PresentationMalformedError extends SDKError {} + +export class ProofMalformedError extends SDKError {} diff --git a/packages/utils/src/Signers.ts b/packages/utils/src/Signers.ts new file mode 100644 index 000000000..c5dabe493 --- /dev/null +++ b/packages/utils/src/Signers.ts @@ -0,0 +1,454 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import type { Signer } from '@polkadot/api/types/index.js' +import { decodePair } from '@polkadot/keyring/pair/decode' +import { + hexToU8a, + u8aConcat, + u8aIsWrapped, + u8aToHex, + u8aWrapBytes, +} from '@polkadot/util' +import { + blake2AsU8a, + encodeAddress, + secp256k1Sign, +} from '@polkadot/util-crypto' +import type { Keypair } from '@polkadot/util-crypto/types' + +import { + createSigner as es256kSigner, + cryptosuite as es256kSuite, +} from '@kiltprotocol/es256k-jcs-2023' +import { + createSigner as ed25519Signer, + cryptosuite as ed25519Suite, +} from '@kiltprotocol/eddsa-jcs-2022' +import { + cryptosuite as sr25519Suite, + createSigner as sr25519Signer, +} from '@kiltprotocol/sr25519-jcs-2023' + +import type { + SignerInterface, + DidDocument, + DidUrl, + KeyringPair, + UriFragment, +} from '@kiltprotocol/types' + +import { DidError, NoSuitableSignerError } from './SDKErrors.js' + +export const ALGORITHMS = Object.freeze({ + ECRECOVER_SECP256K1_BLAKE2B: 'Ecrecover-Secp256k1-Blake2b' as const, // could also be called ES256K-R-Blake2b + ECRECOVER_SECP256K1_KECCAK: 'Ecrecover-Secp256k1-Keccak' as const, // could also be called ES256K-R-Keccak + ES256K: es256kSuite.requiredAlgorithm, + SR25519: sr25519Suite.requiredAlgorithm, + ED25519: ed25519Suite.requiredAlgorithm, +}) + +export const DID_PALLET_SUPPORTED_ALGORITHMS = Object.freeze([ + ALGORITHMS.ED25519, + ALGORITHMS.ECRECOVER_SECP256K1_BLAKE2B, + ALGORITHMS.SR25519, +]) + +export type KnownAlgorithms = typeof ALGORITHMS[keyof typeof ALGORITHMS] +export type DidPalletSupportedAlgorithms = + typeof DID_PALLET_SUPPORTED_ALGORITHMS[number] + +export { ed25519Signer, es256kSigner, sr25519Signer } + +/** + * Signer that produces an ECDSA signature over a Blake2b-256 digest of the message using the secp256k1 curve. + * The signature has a recovery bit appended to the end, allowing public key recovery. + * + * @param input Holds all function arguments. + * @param input.id Sets the signer's id property. + * @param input.secretKey A 32 byte ECDSA secret key on the secp256k1 curve. + * @param input.publicKey The corresponding public key. May be omitted. + * @returns A signer interface capable of making ECDSA signatures with recovery bit added. + */ +export async function polkadotEcdsaSigner({ + secretKey, + id, +}: { + id: Id + secretKey: Uint8Array + publicKey?: Uint8Array +}): Promise< + SignerInterface +> { + return { + id, + algorithm: ALGORITHMS.ECRECOVER_SECP256K1_BLAKE2B, + sign: async ({ data }) => { + return secp256k1Sign(data, { secretKey }, 'blake2') + }, + } +} + +/** + * Signer that produces an ECDSA signature over a Keccak-256 digest of the message using the secp256k1 curve. + * The signature has a recovery bit appended to the end, allowing public key recovery. + * + * @param input Holds all function arguments. + * @param input.id Sets the signer's id property. + * @param input.secretKey A 32 byte ECDSA secret key on the secp256k1 curve. + * @param input.publicKey The corresponding public key. May be omitted. + * @returns A signer interface capable of making ECDSA signatures with recovery bit added. + */ +export async function ethereumEcdsaSigner({ + secretKey, + id, +}: { + id: Id + secretKey: Uint8Array + publicKey?: Uint8Array +}): Promise> { + return { + id, + algorithm: ALGORITHMS.ECRECOVER_SECP256K1_KECCAK, + sign: async ({ data }) => { + return secp256k1Sign(data, { secretKey }, 'keccak') + }, + } +} + +/** + * Extracts a keypair from a pjs KeyringPair via a roundtrip of pkcs8 en- and decoding. + * + * @param pair The pair, where the private key is inaccessible. + * @returns The private key as a byte sequence. + */ +function extractPk(pair: KeyringPair): Uint8Array { + const encoded = pair.encodePkcs8() + const { secretKey } = decodePair(undefined, encoded, 'none') + return secretKey +} + +const signerFactory = { + [ALGORITHMS.ED25519]: ed25519Signer, + [ALGORITHMS.SR25519]: sr25519Signer, + [ALGORITHMS.ES256K]: es256kSigner, + [ALGORITHMS.ECRECOVER_SECP256K1_BLAKE2B]: polkadotEcdsaSigner, + [ALGORITHMS.ECRECOVER_SECP256K1_KECCAK]: ethereumEcdsaSigner, +} + +/** + * Creates a signer interface based on an existing keypair and an algorithm descriptor. + * + * @param input Holds all function arguments. + * @param input.id Sets the signer's id property. + * @param input.keypair A polkadot {@link KeyringPair} or combination of `secretKey` & `publicKey`. + * @param input.algorithm An algorithm identifier from the {@link ALGORITHMS} map. + * @returns A signer interface. + */ +export async function signerFromKeypair< + Alg extends KnownAlgorithms, + Id extends string +>({ + id, + keypair, + algorithm, +}: { + keypair: Keypair | KeyringPair + algorithm: Alg + id?: Id +}): Promise> { + const makeSigner = signerFactory[algorithm] as (x: { + secretKey: Uint8Array + publicKey: Uint8Array + id: Id + }) => Promise> + if (typeof makeSigner !== 'function') { + throw new Error(`unknown algorithm ${algorithm}`) + } + + if (!('secretKey' in keypair) && 'encodePkcs8' in keypair) { + const signerId = id ?? (keypair.address as Id) + return { + id: signerId, + algorithm, + sign: async (signData) => { + // TODO: can probably be optimized; but care must be taken to respect keyring locking + const secretKey = extractPk(keypair) + const { sign } = await makeSigner({ + secretKey, + publicKey: keypair.publicKey, + id: signerId, + }) + return sign(signData) + }, + } + } + + const { secretKey, publicKey } = keypair + return makeSigner({ + secretKey, + publicKey, + id: id ?? (encodeAddress(publicKey, 38) as Id), + }) +} + +function algsForKeyType(keyType: string): KnownAlgorithms[] { + switch (keyType.toLowerCase()) { + case 'ed25519': + return [ALGORITHMS.ED25519] + case 'sr25519': + return [ALGORITHMS.SR25519] + case 'ecdsa': + case 'ethereum': + case 'secpk256k1': + return [ + ALGORITHMS.ES256K, + ALGORITHMS.ECRECOVER_SECP256K1_BLAKE2B, + ALGORITHMS.ECRECOVER_SECP256K1_KECCAK, + ] + default: + return [] + } +} + +/** + * Based on an existing keypair and its type, creates all available signers that work with this key type. + * + * @param input Holds all function arguments. + * @param input.id Sets the signer's id property. + * @param input.keypair A polkadot {@link KeyringPair} or combination of `secretKey` & `publicKey`. + * @param input.type If `keypair` is not a {@link KeyringPair}, provide the key type here; otherwise, this is ignored. + * @returns An array of signer interfaces based on the keypair and type. + */ +export async function getSignersForKeypair({ + id, + keypair, + type = (keypair as KeyringPair).type, +}: { + id?: Id + keypair: Keypair | KeyringPair + type?: string +}): Promise>> { + if (!type) { + throw new Error('type is required if keypair.type is not given') + } + const algorithms = algsForKeyType(type) + return Promise.all( + algorithms.map(async (algorithm) => { + return signerFromKeypair({ keypair, id, algorithm }) + }) + ) +} + +export interface SignerSelector { + (signer: SignerInterface): boolean // TODO: allow async +} + +/** + * Filters signer interfaces, returning only those accepted by all selectors. + * + * @param signers An array of signer interfaces. + * @param selectors One or more selector callbacks, receiving a signer as input and returning `true` in case it meets selection criteria. + * @returns An array of those signers for which all selectors returned `true`. + */ +export function selectSigners< + SelectedSigners extends AllSigners, // eslint-disable-line no-use-before-define + AllSigners extends SignerInterface = SignerInterface +>( + signers: readonly AllSigners[], + ...selectors: readonly SignerSelector[] +): SelectedSigners[] { + return signers.filter((signer): signer is SelectedSigners => + selectors.every((selector) => selector(signer)) + ) +} + +/** + * Finds a suiteable signer interfaces in an array of signers, returning the first signer accepted by all selectors. + * + * @param signers An array of signer interfaces. + * @param selectors One or more selector callbacks, receiving a signer as input and returning `true` in case it meets selection criteria. + * @returns The first signer for which all selectors returned `true`, or `undefined` if none meet selection criteria. + */ +export function selectSigner< + SelectedSigner extends AllSigners, // eslint-disable-line no-use-before-define + AllSigners extends SignerInterface = SignerInterface +>( + signers: readonly AllSigners[], + ...selectors: readonly SignerSelector[] +): SelectedSigner | undefined { + return signers.find((signer): signer is SelectedSigner => + selectors.every((selector) => selector(signer)) + ) +} + +/** + * Select signers based on (key) ids. + * + * @param ids Allowed signer/key ids to filter for. + * @returns A selector identifying signers whose id property is in `ids`. + */ +function bySignerId(ids: readonly string[]): SignerSelector { + return ({ id }) => ids.includes(id) +} +/** + * Select signers based on algorithm identifiers. + * + * @param algorithms Allowed algorithms to filter for. + * @returns A selector identifying signers whose algorithm property is in `algorithms`. + */ +function byAlgorithm(algorithms: readonly string[]): SignerSelector { + return (signer) => + algorithms.some( + (algorithm) => algorithm.toLowerCase() === signer.algorithm.toLowerCase() + ) +} +/** + * Select signers based on the association of key ids with a given DID. + * + * @param didDocument DidDocument of the DID, on which the signer id must be listed as a verification method. + * @param options Additional optional filter criteria. + * @param options.verificationRelationship If set, the signer id must be listed under this verification relationship on the DidDocument. + * @param options.controller If set, only verificationMethods with this controller are considered. + * @returns A selector identifying signers whose id is associated with the DidDocument. + */ +function byDid( + didDocument: DidDocument, + { + controller, + verificationRelationship, + }: { verificationRelationship?: string; controller?: string } = {} +): SignerSelector { + let eligibleVMs = didDocument.verificationMethod + // TODO: not super happy about this throwing; can I attach a diagnostics property to the returned function instead that will inform why this will never select a signer? + if (!Array.isArray(eligibleVMs) || eligibleVMs.length === 0) { + throw new DidError( + `DID ${didDocument.id} not fit for signing: No verification methods are associated with the signer DID document. It may be that this DID has been deactivated.` + ) + } + if (controller) { + eligibleVMs = eligibleVMs.filter( + ({ controller: ctr }) => controller === ctr + ) + } + // helps deal with relative DID URLs as ids + function absoluteId(id: string): DidUrl { + if (id.startsWith(didDocument.id)) { + return id as DidUrl + } + if (id.startsWith('#')) { + return `${didDocument.id}${id as UriFragment}` + } + return `${didDocument.id}#${id}` + } + let eligibleIds = eligibleVMs.map(({ id }) => absoluteId(id)) + if (typeof verificationRelationship === 'string') { + if ( + !Array.isArray(didDocument[verificationRelationship]) || + didDocument[verificationRelationship].length === 0 + ) { + throw new DidError( + `DID ${didDocument.id} not fit for signing: No verification methods available for the requested verification relationship ("${verificationRelationship}").` + ) + } + eligibleIds = eligibleIds.filter((eligibleId) => + didDocument[verificationRelationship].some?.( + (VrId: string) => VrId === eligibleId || absoluteId(VrId) === eligibleId // TODO: check if leading equality check does indeed help increase performance + ) + ) + } + if (eligibleIds.length === 0) { + throw new DidError( + `DID ${ + didDocument.id + } not fit for signing: The verification methods associated with this DID's document do not match the requested controller and/or verification relationship: ${JSON.stringify( + { controller, verificationRelationship } + )}.` + ) + } + return ({ id }) => { + return eligibleIds.includes(id as DidUrl) + } +} + +function verifiableOnChain(): SignerSelector { + return byAlgorithm(DID_PALLET_SUPPORTED_ALGORITHMS) +} + +export const select = { + bySignerId, + byAlgorithm, + byDid, + verifiableOnChain, +} + +const TYPE_PREFIX = { + [ALGORITHMS.ED25519]: new Uint8Array([0]), + [ALGORITHMS.SR25519]: new Uint8Array([1]), + [ALGORITHMS.ECRECOVER_SECP256K1_BLAKE2B]: new Uint8Array([2]), + [ALGORITHMS.ECRECOVER_SECP256K1_KECCAK]: new Uint8Array([2]), +} + +/** + * Simplifies signing transactions using SignerInterface signers by wrapping it in a Polkadot signer interface. + * + * @example const signedTx = await tx.signAsync(
, {signer: getExtrinsicSigner()}) + * + * @param signers An array of SignerInterface signers. + * @param hasher The hasher used in signing extrinsics. + * Must match the hasher used by the chain in order to produce verifiable extrinsic signatures. + * Defaults to blake2b. + * @param updatesCallback Receives updates from the caller of the signer on the status of the extrinsic submission. + * @returns An object implementing polkadot's `signRaw` interface. + */ +export function getPolkadotSigner( + signers: readonly SignerInterface[], + hasher: (data: Uint8Array) => Uint8Array = blake2AsU8a, + updatesCallback?: Signer['update'] +): Signer { + let id = -1 + return { + update: updatesCallback, + signRaw: async ({ data, address, type }) => { + const signer = await selectSigner( + signers, + bySignerId([address]), + verifiableOnChain() + ) + if (!signer) { + throw new NoSuitableSignerError( + `no suitable signer available for blockchain account ${address}`, + { + signerRequirements: { + id: address, + algorithms: DID_PALLET_SUPPORTED_ALGORITHMS, + }, + availableSigners: signers, + } + ) + } + let signData = hexToU8a(data) + if (type === 'payload') { + // for signing blockchain transactions, the data is hashed according to the following logic + if (signData.length > 256) { + signData = hasher(signData) + } + } else if (!u8aIsWrapped(signData, false)) { + // signing raw bytes requires them to be wrapped + signData = u8aWrapBytes(signData) + } + const signature = await signer.sign({ data: signData }) + // The signature is expected to be a SCALE enum, we must add a type prefix representing the signature algorithm + const prefixed = u8aConcat(TYPE_PREFIX[signer.algorithm], signature) + id += 1 + return { + id, + signature: u8aToHex(prefixed), + } + }, + } +} diff --git a/packages/utils/src/UUID.ts b/packages/utils/src/UUID.ts index 4f25e055c..9a252fcb4 100644 --- a/packages/utils/src/UUID.ts +++ b/packages/utils/src/UUID.ts @@ -8,7 +8,7 @@ /** * Universally unique identifiers (UUIDs) are needed in KILT to uniquely identify specific information. * - * UUIDs are used for example in [[Credential]] to generate hashes. + * UUIDs are used for example in {@link Credential} to generate hashes. * * @packageDocumentation */ diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 30cbd3b3e..72796680f 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -16,6 +16,8 @@ export * as UUID from './UUID.js' export * as DataUtils from './DataUtils.js' export * as SDKErrors from './SDKErrors.js' export * as JsonSchema from './json-schema/index.js' +export * as Signers from './Signers.js' +export { Caip19, Caip2 } from './CAIP/index.js' export { ss58Format } from './ss58Format.js' export { cbor } from './cbor.js' export { Keyring } from '@polkadot/keyring' diff --git a/packages/vc-export/package.json b/packages/vc-export/package.json index 28149d21f..ab03c0726 100644 --- a/packages/vc-export/package.json +++ b/packages/vc-export/package.json @@ -36,22 +36,17 @@ "typescript": "^4.8.3" }, "dependencies": { - "@kiltprotocol/chain-helpers": "workspace:*", "@kiltprotocol/config": "workspace:*", - "@kiltprotocol/core": "workspace:*", + "@kiltprotocol/credentials": "workspace:*", "@kiltprotocol/did": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^10.4.0", - "@polkadot/types": "^10.4.0", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0", - "crypto-ld": "^6.0.0", - "did-jwt": "^7.0.0" + "crypto-ld": "^6.0.0" }, "peerDependencies": { - "@digitalbazaar/vc": "^2.1.0 || ^6.0.1", - "jsonld": "^5.2.0 || ^8.1.0", - "jsonld-signatures": "^9.3.0 || ^11.0.0" + "jsonld": "^8.1.0", + "jsonld-signatures": "^11.0.0" } } diff --git a/packages/vc-export/src/DidJwt.spec.ts b/packages/vc-export/src/DidJwt.spec.ts deleted file mode 100644 index 9bae27a3f..000000000 --- a/packages/vc-export/src/DidJwt.spec.ts +++ /dev/null @@ -1,177 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import { hexToU8a } from '@polkadot/util' -import { ed25519PairFromSeed } from '@polkadot/util-crypto' -import type { Keypair } from '@polkadot/util-crypto/types' - -import { init } from '@kiltprotocol/core' -import { - exportToDidDocument, - getFullDidUriFromKey, - resolveCompliant, -} from '@kiltprotocol/did' -import type { - ConformingDidDocument, - DidVerificationKey, - VerificationKeyType, -} from '@kiltprotocol/types' - -import * as JWT from './DidJwt' -import * as Presentation from './Presentation' -import { credentialSchema } from './KiltCredentialV1' -import type { KiltCredentialV1 } from './types' - -jest.mock('@kiltprotocol/did', () => ({ - ...jest.requireActual('@kiltprotocol/did'), - resolveCompliant: jest.fn(), -})) - -const seed = hexToU8a( - '0xc48ea34c57ab63752ac5b797304de15cc036d126b96fb9c8198498d756c0579c' -) - -function mockDidDoc(key: Keypair, type: VerificationKeyType) { - const did = getFullDidUriFromKey({ ...key, type }) - const didKey = { - controller: did, - publicKey: key.publicKey, - type, - } - const didDocument: ConformingDidDocument = exportToDidDocument( - { - uri: did, - authentication: [{ ...didKey, id: `#key1` } as DidVerificationKey], - assertionMethod: [{ ...didKey, id: `#key2` } as DidVerificationKey], - }, - 'application/json' - ) - return { didDocument, did, didKey } -} - -jest.useFakeTimers() -jest.setSystemTime(1679407014000) - -const key = ed25519PairFromSeed(seed) -const { didDocument, did } = mockDidDoc(key, 'ed25519') -jest.mocked(resolveCompliant).mockImplementation(async (d) => { - if (d === did) - return { - didDocument, - didDocumentMetadata: {}, - didResolutionMetadata: {}, - } - return { - didResolutionMetadata: { - error: 'notFound', - }, - didDocumentMetadata: {}, - } -}) - -beforeAll(async () => { - await init({}) -}) - -it('produces and reverses JWT payload representations of a credential and presentation', () => { - const credential = { - '@context': [ - 'https://www.w3.org/2018/credentials/v1', - 'https://www.kilt.io/contexts/credentials', - ], - type: ['VerifiableCredential', 'KiltCredentialV1'], - id: 'kilt:credential:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad', - credentialSubject: { - '@context': { - '@vocab': - 'kilt:ctype:0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf#', - }, - id: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', - birthday: '1991-01-01', - name: 'Kurt', - premium: true, - }, - issuer: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', - issuanceDate: '2021-03-25T10:20:44.000Z', - expirationDate: '2022-03-25T10:20:44.000Z', - nonTransferable: true, - proof: { - type: 'KiltAttestationProofV1', - block: '1234567890', - commitments: ['censored'], - salt: ['censored'], - }, - credentialSchema: { - type: 'JsonSchema2023', - id: credentialSchema.$id, - }, - credentialStatus: { - id: 'polkadot:1234567890:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad', - type: 'KiltRevocationStatusV1', - }, - } as KiltCredentialV1 - - let payload = JWT.credentialToPayload(credential) - const fromPayload = JWT.credentialFromPayload(payload) - expect(credential).toStrictEqual(fromPayload) - - const presentation = Presentation.create( - [credential], - credential.credentialSubject.id - ) - payload = JWT.presentationToPayload(presentation) - const fromPayload2 = JWT.presentationFromPayload(payload) - expect(presentation).toStrictEqual(fromPayload2) -}) - -it('verifies a JWT signed by an ed25519 key', async () => { - const credential: Partial = { - '@context': [ - 'https://www.w3.org/2018/credentials/v1', - 'https://www.kilt.io/contexts/credentials', - ], - type: ['VerifiableCredential'], - credentialSubject: { - '@context': { - '@vocab': - 'kilt:ctype:0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf#', - }, - id: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', - birthday: '1991-01-01', - name: 'Kurt', - premium: true, - }, - issuer: didDocument.id, - issuanceDate: new Date().toISOString(), - nonTransferable: true, - } - - const payload = JWT.credentialToPayload(credential as KiltCredentialV1) - - const signedJWT = await JWT.create( - payload, - { - ...key, - keyUri: `${didDocument.id}${didDocument.assertionMethod![0]}`, - type: 'ed25519', - }, - { expiresIn: 60 } - ) - - const result = await JWT.verify(signedJWT, { - proofPurpose: 'assertionMethod', - }) - - expect(result).toMatchObject({ - payload: JSON.parse(JSON.stringify(payload)), - }) - - const fromPayload = JWT.credentialFromPayload(result.payload) - - expect(fromPayload).toMatchObject(credential) - expect(fromPayload).toHaveProperty('expirationDate') -}) diff --git a/packages/vc-export/src/DidJwt.ts b/packages/vc-export/src/DidJwt.ts deleted file mode 100644 index 269655dab..000000000 --- a/packages/vc-export/src/DidJwt.ts +++ /dev/null @@ -1,277 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import { - createJWT, - EdDSASigner, - ES256KSigner, - JWTHeader, - JWTOptions, - JWTPayload, - JWTVerifyOptions, - Signer, - verifyJWT, -} from 'did-jwt' -import type { DIDResolutionResult, Resolvable } from 'did-resolver' - -import { resolveCompliant } from '@kiltprotocol/did' -import { SDKErrors } from '@kiltprotocol/utils' -import type { DidResourceUri, DidUri } from '@kiltprotocol/types' - -import type { UnsignedVc, VerifiablePresentation } from './types.js' - -function jwtTimestampFromDate(date: string | number | Date): number { - return Math.floor(new Date(date).getTime() / 1000) -} - -function jwtTimestampToIsoDate(date: number): string { - return new Date(date * 1000).toISOString() -} - -export type supportedKeys = 'ed25519' | 'ecdsa' - -const signers: Record Signer> = { - ES256K: ES256KSigner, - EdDSA: EdDSASigner, -} - -/** - * Creates a JWT from a payload object and signs it using a DID key. - * - * @param payload The VerifiablePresentation (without proof). - * @param signingKey Key object required for signing. - * @param signingKey.secretKey The bytes of the secret key. - * @param signingKey.keyUri The key uri by which the public key can be looked up from a DID document. - * @param signingKey.type The key type. Ed25519 and ecdsa (secp256k1) are supported. - * @param options Additional optional configuration. - * @param options.validFrom Timestamp (in ms since the epoch) indicating the earliest point in time where the presentation becomes valid. Defaults to the current time. - * @param options.expiresIn Duration of validity of the presentation in seconds. If omitted, the presentation's validity is unlimited. - * @param options.challenge Optional challenge provided by a verifier that can be used to prevent replay attacks. - * @param options.audience Identifier of the verifier to prevent unintended re-use of the presentation. - * @returns A signed JWT in compact representation containing a VerifiablePresentation. - */ -export function create( - payload: JWTPayload & { iss: string }, - signingKey: { - secretKey: Uint8Array - keyUri: DidResourceUri - type: supportedKeys - }, - options: Partial = {} -): Promise { - const { type, keyUri, secretKey } = signingKey - const alg = { ecdsa: 'ES256K', ed25519: 'EdDSA' }[type] - if (!alg) - throw new Error(`no signature algorithm available for key type ${type}`) - const jwtHeader = { - alg, - kid: keyUri, - type: 'JWT', - } - const signer = signers[alg](secretKey) - - return createJWT( - payload, - { ...options, issuer: payload.iss, signer }, - jwtHeader - ) -} - -const kiltDidResolver: Resolvable = { - resolve: async (did) => { - const { - didDocument = null, - didDocumentMetadata, - didResolutionMetadata, - } = await resolveCompliant(did as DidUri) - - return { - didDocument, - didDocumentMetadata, - didResolutionMetadata, - } as DIDResolutionResult - }, -} - -/** - * Verifies a JWT rendering of a VerifiablePresentation. - * - * @param token The JWT in compact (string) encoding. - * @param options Optional configuration. - * @param options.audience Expected audience. Verification fails if the aud claim in the JWT is not equal to this value. - * @param options.challenge Expected challenge. Verification fails if the nonce claim in the JWT is not equal to this value. - * @returns The VerifiablePresentation (without proof), the decoded JWT payload containing all claims, and the decoded JWT header. - */ -export async function verify( - token: string, - options: Partial -): ReturnType { - // set default skewTime to 0 - const { skewTime = 0 } = options - const result = await verifyJWT(token, { - resolver: kiltDidResolver, - ...options, - skewTime, - policies: { - // by default, do not require iat to be in the past - iat: false, - ...options.policies, - // override aud policy: only check aud if expected audience is defined - aud: typeof options.audience === 'string', - }, - }) - if (result.verified !== true) { - throw new SDKErrors.SignatureUnverifiableError() - } - return result -} - -function toPayloadCommon( - iss: string, - jti: string | undefined, - issuanceDate: string | undefined, - expirationDate: string | undefined -): JWTPayload & { - iss: string -} { - const result: JWTPayload & { - iss: string - } = { - jti, - iss, - } - - if (typeof issuanceDate === 'string') { - result.nbf = jwtTimestampFromDate(issuanceDate) - } - if (typeof expirationDate === 'string') { - result.exp = jwtTimestampFromDate(expirationDate) - } - - return result -} - -/** - * Produces a serialized JWT payload from a Verifiable Presentation. - * - * @param presentation A [[VerifiablePresentation]] object. - * @returns The payload, ready for serialization. - */ -export function presentationToPayload( - presentation: VerifiablePresentation -): JWTPayload & { - iss: string -} { - const { holder, id, issuanceDate, expirationDate, verifier, ...vp } = - presentation - const payload = toPayloadCommon(holder, id, issuanceDate, expirationDate) - - return { - ...payload, - vp, - aud: verifier, - } -} - -/** - * Produces a serialized JWT payload from a Verifiable Credential. - * - * @param credential A [[VerifiableCredential]] object. - * @returns The payload, ready for serialization. - */ -export function credentialToPayload( - credential: UnsignedVc & { expirationDate?: string } -): JWTPayload & { - iss: string -} { - const { issuer, id, issuanceDate, expirationDate, ...vc } = credential - - const payload = toPayloadCommon(issuer, id, issuanceDate, expirationDate) - - return { - ...payload, - vc, - sub: credential.credentialSubject?.id, - } -} - -function fromPayloadCommon( - payload: JWTPayload -): Partial { - const { jti, nbf, exp } = payload - const decoded: Partial = {} - if (typeof jti === 'string') { - decoded.id = jti - } - if (typeof nbf === 'number') { - decoded.issuanceDate = jwtTimestampToIsoDate(nbf) - } - if (typeof exp === 'number') { - decoded.expirationDate = jwtTimestampToIsoDate(exp) - } - return decoded -} - -/** - * Reconstruct a Verifiable Presentation object from its JWT serialization. - * - * @param payload The encoded payload of a JWT, containing a 'vp' claim. - * @returns A [[VerifiablePresentation]] object. - */ -export function presentationFromPayload( - payload: JWTPayload -): VerifiablePresentation { - const { vp, iss, aud } = payload - if (typeof vp !== 'object' || vp === null) { - throw new Error('JWT must contain a vp claim') - } - - const decoded = { - ...vp, - ...fromPayloadCommon(payload), - } - - if (typeof iss === 'string') { - decoded.holder = iss as DidUri - } - if (typeof aud === 'string') { - decoded.verifier = aud as DidUri - } - - return decoded as VerifiablePresentation -} - -/** - * Reconstruct a Verifiable Credential object from its JWT serialization. - * - * @param payload The encoded payload of a JWT, containing a 'vc' claim. - * @returns A [[VerifiableCredential]] object. - */ -export function credentialFromPayload(payload: JWTPayload): UnsignedVc { - const { vc, iss, sub } = payload - if (typeof vc !== 'object' || vc === null) { - throw new Error('JWT must contain a vc claim') - } - - const decoded: UnsignedVc = { - ...vc, - ...fromPayloadCommon(payload), - } - - if (typeof iss === 'string') { - decoded.issuer = iss as DidUri - } - if (typeof sub === 'string') { - if (typeof decoded.credentialSubject === 'object') { - decoded.credentialSubject.id = sub as DidUri - } else { - decoded.credentialSubject = sub as any - } - } - - return decoded -} diff --git a/packages/vc-export/src/Presentation.spec.ts b/packages/vc-export/src/Presentation.spec.ts deleted file mode 100644 index 02560beb0..000000000 --- a/packages/vc-export/src/Presentation.spec.ts +++ /dev/null @@ -1,394 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import type { ApiPromise } from '@polkadot/api' -import type { Codec } from '@polkadot/types/types' -import { hexToU8a } from '@polkadot/util' -import { - ed25519PairFromSeed, - encodeAddress, - randomAsU8a, - secp256k1PairFromSeed, -} from '@polkadot/util-crypto' -import type { Keypair } from '@polkadot/util-crypto/types' - -import { init } from '@kiltprotocol/core' -import { getFullDidUri, getFullDidUriFromKey } from '@kiltprotocol/did' -import type { - DidDocument, - DidVerificationKey, - ResolvedDidKey, - VerificationKeyType, -} from '@kiltprotocol/types' -import { Crypto } from '@kiltprotocol/utils' - -import { ApiMocks } from '../../../tests/testUtils' -import { - create as createJWT, - credentialFromPayload, - credentialToPayload, - verify as verifyJWT, -} from './DidJwt' -import { - create as createPresentation, - signAsJwt, - verifySignedAsJwt, -} from './Presentation' -import type { VerifiableCredential, VerifiablePresentation } from './types' - -const credential = { - '@context': [ - 'https://www.w3.org/2018/credentials/v1', - 'https://www.kilt.io/contexts/credentials', - ], - type: ['VerifiableCredential', 'KiltCredential2020'], - id: 'kilt:cred:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad', - credentialSubject: { - '@context': { - '@vocab': - 'kilt:ctype:0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf#', - }, - birthday: '1991-01-01', - name: 'Kurt', - premium: true, - }, - issuer: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', - issuanceDate: '2021-03-25T10:20:44.000Z', - nonTransferable: true, - proof: [ - { - type: 'KILTAttestation2020', - proofPurpose: 'assertionMethod', - attester: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', - }, - ], -} as any - -let api: ApiPromise -const seed = hexToU8a( - '0xc48ea34c57ab63752ac5b797304de15cc036d126b96fb9c8198498d756c0579c' -) -const keyHash = Crypto.hashStr('key1') - -function mockDidDoc(key: Keypair, type: VerificationKeyType) { - const did = getFullDidUriFromKey({ ...key, type }) - const didKey: ResolvedDidKey = { - id: `${did}#${keyHash}`, - controller: did, - publicKey: key.publicKey, - type, - } - const didDocument: DidDocument = { - uri: did, - authentication: [{ ...didKey, id: `#${keyHash}` } as DidVerificationKey], - assertionMethod: [{ ...didKey, id: `#${keyHash}` } as DidVerificationKey], - } - const onChainDoc = api.createType('Option', { - identifier: key.publicKey, - details: { - authenticationKey: keyHash, - assertionMethod: keyHash, - publicKeys: { - [keyHash]: { - key: { PublicVerificationKey: { [type]: key.publicKey } }, - }, - }, - }, - }) - return { did, didDocument, didKey, onChainDoc } -} - -beforeAll(async () => { - jest.useFakeTimers() - jest.setSystemTime(1679407014000) - api = ApiMocks.createAugmentedApi() - api.call.did = { - query: jest - .fn() - .mockResolvedValue(api.createType('Option')), - } as any - api.query.did = { - didBlacklist: jest.fn().mockResolvedValue(api.createType('Option')), - } as any - await init({ api }) -}) - -it('verifies a presentation signed by an ecdsa key', async () => { - const key = secp256k1PairFromSeed(seed) - const { did, didKey, onChainDoc } = mockDidDoc(key, 'ecdsa') - jest.mocked(api.call.did.query).mockResolvedValue(onChainDoc) - - credential.credentialSubject.id = did - - const presentation = createPresentation([credential], did, { - verifier: 'did:kilt:1234', - }) - - const signedPres = await signAsJwt( - presentation, - { - ...key, - keyUri: didKey.id, - type: 'ecdsa', - }, - { challenge: 'abcdef', expiresIn: 60 } - ) - - const myResult = await verifySignedAsJwt(signedPres, { - verifier: 'did:kilt:1234', - challenge: 'abcdef', - }) - - expect(myResult).toMatchObject({ - presentation, - payload: { iss: did }, - }) -}) - -it('verifies a presentation signed by an ed25519 key', async () => { - const key = ed25519PairFromSeed(seed) - const { did, didKey, onChainDoc } = mockDidDoc(key, 'ed25519') - jest.mocked(api.call.did.query).mockResolvedValue(onChainDoc) - - credential.credentialSubject.id = did - - const presentation = createPresentation([credential], did, { - verifier: 'did:kilt:1234', - }) - - const signedPres = await signAsJwt( - presentation, - { - ...key, - keyUri: didKey.id, - type: 'ed25519', - }, - { challenge: 'abcdef', expiresIn: 60 } - ) - - const myResult = await verifySignedAsJwt(signedPres, { - verifier: 'did:kilt:1234', - challenge: 'abcdef', - }) - - expect(myResult).toMatchObject({ - presentation, - payload: { iss: did }, - }) -}) - -it('verifies a credential signed by an ed25519 key', async () => { - const key = ed25519PairFromSeed(seed) - const { didKey, onChainDoc } = mockDidDoc(key, 'ed25519') - jest.mocked(api.call.did.query).mockResolvedValue(onChainDoc) - - const cred = { - ...credential, - expiresAt: '2026-03-25T10:20:44.000Z', - } - - const jwtCredential = await createJWT(credentialToPayload(cred), { - ...key, - keyUri: didKey.id, - type: 'ed25519', - }) - - const result = await verifyJWT(jwtCredential, { - proofPurpose: 'assertionMethod', - }) - - expect(credentialFromPayload(result.payload)).toMatchObject(cred) -}) - -it('fails if subject !== holder', async () => { - const key = ed25519PairFromSeed(seed) - const { did, didKey, onChainDoc } = mockDidDoc(key, 'ed25519') - jest.mocked(api.call.did.query).mockResolvedValue(onChainDoc) - - credential.credentialSubject.id = did - - const presentation = createPresentation([credential], did) - - // test making presentations - const randomDid = getFullDidUri(encodeAddress(randomAsU8a(), 38)) - credential.credentialSubject.id = randomDid - expect(() => - createPresentation([credential], did) - ).toThrowErrorMatchingInlineSnapshot( - `"The credential with id kilt:cred:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad is non-transferable and cannot be presented by the identity did:kilt:4qqbHjqZ45gLCjsoNS3PXECZpYZqHZuoGyWJZm1Jz8YFhMoo"` - ) - - // test verifying presentations - ;( - presentation.verifiableCredential as VerifiableCredential - ).credentialSubject.id = randomDid - const signedPres = await signAsJwt(presentation, { - ...key, - keyUri: didKey.id, - type: 'ed25519', - }) - - await expect( - verifySignedAsJwt(signedPres, {}) - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"The credential with id kilt:cred:0x24195dd6313c0bb560f3043f839533b54bcd32d602dd848471634b0345ec88ad is non-transferable and cannot be presented by the identity did:kilt:4qqbHjqZ45gLCjsoNS3PXECZpYZqHZuoGyWJZm1Jz8YFhMoo"` - ) -}) - -it('fails if expired or not yet valid', async () => { - const key = ed25519PairFromSeed(seed) - const { did, didKey, onChainDoc } = mockDidDoc(key, 'ed25519') - jest.mocked(api.call.did.query).mockResolvedValue(onChainDoc) - - credential.credentialSubject.id = did - - const presentation = createPresentation([credential], did, { - validFrom: new Date(Date.now() - 70_000), // 70 seconds ago - validUntil: new Date(Date.now() - 10_000), // 10 seconds ago - }) - - let signedPres = await signAsJwt( - presentation, - { - ...key, - keyUri: didKey.id, - type: 'ed25519', - }, - { expiresIn: 30 } - ) - - await expect( - verifySignedAsJwt(signedPres) - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"invalid_jwt: JWT has expired: exp: 1679406974 < now: 1679407014"` - ) - - // try setting expiration date with expiresAt - signedPres = await signAsJwt( - presentation, - { - ...key, - keyUri: didKey.id, - type: 'ed25519', - }, - { expiresIn: 30 } - ) - - await expect( - verifySignedAsJwt(signedPres) - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"invalid_jwt: JWT has expired: exp: 1679406974 < now: 1679407014"` - ) - - // should work if we set it to 80s - signedPres = await signAsJwt( - presentation, - { - ...key, - keyUri: didKey.id, - type: 'ed25519', - }, - { expiresIn: 80 } - ) - - await expect(verifySignedAsJwt(signedPres)).resolves.toMatchObject({ - presentation: { - ...presentation, - expirationDate: new Date( - new Date(presentation.issuanceDate as string).getTime() + 80_000 - ).toISOString(), - }, - }) - - // set issuanceDate to the future - signedPres = await signAsJwt( - { - ...presentation, - issuanceDate: new Date(Date.now() + 60 * 1000).toISOString(), - }, - { - ...key, - keyUri: didKey.id, - type: 'ed25519', - } - ) - - await expect( - verifySignedAsJwt(signedPres) - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"invalid_jwt: JWT not valid before nbf: 1679407074"` - ) -}) - -describe('when there is a presentation', () => { - let signedPresentation: string - let presentation: VerifiablePresentation - let onChainDoc: Codec - - beforeAll(async () => { - const key = ed25519PairFromSeed(seed) - const mocks = mockDidDoc(key, 'ed25519') - const { did, didKey } = mocks - ;({ onChainDoc } = mocks) - - credential.credentialSubject.id = did - - presentation = createPresentation([credential], did, { - verifier: 'did:kilt:1234', - }) - - signedPresentation = await signAsJwt( - presentation, - { - ...key, - keyUri: didKey.id, - type: 'ed25519', - }, - { challenge: 'abcdef', expiresIn: 60 } - ) - }) - - it('fails when DID doesnt exist', async () => { - jest - .mocked(api.call.did.query) - .mockResolvedValue(api.createType('Option')) - - await expect( - verifySignedAsJwt(signedPresentation, { - verifier: 'did:kilt:1234', - challenge: 'abcdef', - }) - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"resolver_error: Unable to resolve DID document for did:kilt:4qqbHjqZ45gLCjsoNS3PXECZpYZqHZuoGyWJZm1Jz8YFhMoo: notFound, "` - ) - }) - - it('fails when audience does not match', async () => { - jest.mocked(api.call.did.query).mockResolvedValue(onChainDoc) - - await expect( - verifySignedAsJwt(signedPresentation, { - verifier: 'did:kilt:4321', - challenge: 'abcdef', - }) - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"invalid_config: JWT audience does not match your DID or callback url"` - ) - }) - - it('fails if challenge does not match', async () => { - jest.mocked(api.call.did.query).mockResolvedValue(onChainDoc) - - await expect( - verifySignedAsJwt(signedPresentation, { - challenge: 'whatup', - }) - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"expected challenge not matching presentation"` - ) - }) -}) diff --git a/packages/vc-export/src/Presentation.ts b/packages/vc-export/src/Presentation.ts deleted file mode 100644 index 9a222eddd..000000000 --- a/packages/vc-export/src/Presentation.ts +++ /dev/null @@ -1,286 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import type { JWTOptions, JWTVerified } from 'did-jwt' - -import { JsonSchema } from '@kiltprotocol/utils' -import type { DidResourceUri, DidUri } from '@kiltprotocol/types' - -import { - supportedKeys, - verify, - create as createJWT, - presentationToPayload, - presentationFromPayload, -} from './DidJwt.js' -import { - W3C_CREDENTIAL_CONTEXT_URL, - W3C_CREDENTIAL_TYPE, - W3C_PRESENTATION_TYPE, -} from './constants.js' -import { PresentationMalformedError } from './errors.js' -import type { VerifiableCredential, VerifiablePresentation } from './types.js' - -export const presentationSchema: JsonSchema.Schema = { - $schema: 'http://json-schema.org/draft-07/schema#', - type: 'object', - properties: { - '@context': { $ref: '#/definitions/contexts' }, - type: { - oneOf: [ - { - type: 'array', - uniqueItems: true, - items: { type: 'string' }, - contains: { const: W3C_PRESENTATION_TYPE }, - }, - { - const: W3C_PRESENTATION_TYPE, - }, - ], - }, - id: { - type: 'string', - format: 'uri', - }, - verifiableCredential: { - oneOf: [ - { $ref: '#/definitions/verifiableCredential' }, - { - type: 'array', - items: { $ref: '#/definitions/verifiableCredential' }, - minLength: 1, - }, - ], - }, - holder: { - type: 'string', - format: 'uri', - }, - proof: { - type: 'object', - properties: { - type: { - type: 'string', - }, - }, - required: ['type'], - }, - }, - required: ['@context', 'type', 'verifiableCredential', 'holder'], - definitions: { - verifiableCredential: { - type: 'object', - // only checking the minimal definition of a VC: a type field and potentially a context. - properties: { - '@context': { $ref: '#/definitions/contexts' }, - type: { - oneOf: [ - { - type: 'array', - uniqueItems: true, - items: { type: 'string' }, - contains: { const: W3C_CREDENTIAL_TYPE }, - }, - { - const: W3C_CREDENTIAL_TYPE, - }, - ], - }, - }, - required: ['type'], - }, - contexts: { - oneOf: [ - { - type: 'array', - uniqueItem: true, - items: [{ const: W3C_CREDENTIAL_CONTEXT_URL }], - additionalItems: { type: 'string', format: 'uri' }, - }, - { const: W3C_CREDENTIAL_CONTEXT_URL }, - ], - }, - }, -} - -// draft version '7' should align with $schema property of the schema above -const schemaValidator = new JsonSchema.Validator(presentationSchema, '7') - -/** - * Validates an object against the VerifiablePresentation data model. - * Throws if object violates the [[presentationSchema]]. - * - * @param presentation VerifiablePresentation or object to be validated. - */ -export function validateStructure(presentation: VerifiablePresentation): void { - const { errors, valid } = schemaValidator.validate(presentation) - if (!valid) { - throw new PresentationMalformedError( - `Object not matching VerifiablePresentation data model`, - { - cause: errors, - } - ) - } -} - -/** - * Checks that an identity can act as a legitimate holder of a set of credentials and thus include them in a presentation they sign. - * Credentials where `nonTransferable === true` and `credentialSubject.id !== holder` are disallowed and will cause this to fail. - * - * @param presentation A Verifiable Presentation. - * @param presentation.holder The presentation holder's identifier. - * @param presentation.verifiableCredential A VC or an array of VCs. - */ -export function assertHolderCanPresentCredentials({ - holder, - verifiableCredential, -}: { - holder: DidUri - verifiableCredential: VerifiableCredential[] | VerifiableCredential -}): void { - const credentials = Array.isArray(verifiableCredential) - ? verifiableCredential - : [verifiableCredential] - credentials.forEach(({ nonTransferable, credentialSubject, id }) => { - if (nonTransferable && credentialSubject.id !== holder) - throw new Error( - `The credential with id ${id} is non-transferable and cannot be presented by the identity ${holder}` - ) - }) -} - -/** - * Creates a Verifiable Presentation from one or more Verifiable Credentials. - * This should be signed before sending to a verifier to provide authentication. - * - * @param VCs One or more Verifiable Credentials. - * @param holder The holder of the credentials in the presentation, which also signs the presentation. - * @param verificationOptions Options to restrict the validity of a presentation to a specific audience or time frame. - * @param verificationOptions.verifier Identifier of the verifier to prevent unintended re-use of the presentation. - * @param verificationOptions.validFrom A Date or date-time string indicating the earliest point in time where the presentation becomes valid. - * Represented as `issuanceDate` on the presentation. - * @param verificationOptions.validUntil A Date or date-time string indicating when the presentation is no longer valid. - * Represented as `expirationDate` on the presentation. - * @returns An (unsigned) Verifiable Presentation containing the original VCs with its proofs. - */ -export function create( - VCs: VerifiableCredential[], - holder: DidUri, - { - validFrom, - validUntil, - verifier, - }: { - verifier?: string - validFrom?: Date | string - validUntil?: Date | string - } = {} -): VerifiablePresentation { - const verifiableCredential = VCs.length === 1 ? VCs[0] : VCs - const presentation: VerifiablePresentation = { - '@context': [W3C_CREDENTIAL_CONTEXT_URL], - type: [W3C_PRESENTATION_TYPE], - verifiableCredential, - holder, - } - if (typeof validFrom !== 'undefined') { - presentation.issuanceDate = new Date(validFrom).toISOString() - } - if (typeof validUntil !== 'undefined') { - presentation.expirationDate = new Date(validUntil).toISOString() - } - if (typeof verifier === 'string') { - presentation.verifier = verifier - } - - validateStructure(presentation) - assertHolderCanPresentCredentials(presentation) - return presentation -} - -/** - * Signs a presentation in its JWT rendering. - * - * @param presentation The VerifiablePresentation (without proof). - * @param signingKey Key object required for signing. - * @param signingKey.secretKey The bytes of the secret key. - * @param signingKey.keyUri The key uri by which the public key can be looked up from a DID document. - * @param signingKey.type The key type. Ed25519 and ecdsa (secp256k1) are supported. - * @param options Additional optional configuration. - * @param options.expiresIn Time in seconds until the presentation expires, based on issuanceDate or alternatively the current system time. - * If set, this replaces the presentation's current expirationDate. - * @param options.challenge Optional challenge provided by a verifier that can be used to prevent replay attacks. - * @returns A signed JWT in compact representation containing a VerifiablePresentation. - */ -export function signAsJwt( - presentation: VerifiablePresentation, - signingKey: { - secretKey: Uint8Array - keyUri: DidResourceUri - type: supportedKeys - }, - options: { - challenge?: string - } & Partial = {} -): Promise { - // produce (unencoded) payload where keys on the presentation object are mapped to JWT claims - const payload = presentationToPayload(presentation) - // JWS replaces any existing proof - delete payload.vp.proof - const { challenge, expiresIn } = options - // if expiresIn is set, remove exp claim to make sure it is replaced - if (typeof expiresIn === 'number') { - delete payload.exp - } - // add challenge claim to JWTs - if (challenge) { - payload.nonce = challenge - } - // encode and add JWS - return createJWT(payload, signingKey, options) -} - -/** - * Verifies a JWT rendering of a [[VerifiablePresentation]]. - * - * @param token The JWT in compact (string) encoding. - * @param options Optional configuration. - * @param options.verifier Expected audience/verifier. Verification fails if the aud claim in the JWT is not equal to this value. - * @param options.challenge Expected challenge. Verification fails if the nonce claim in the JWT is not equal to this value. - * @param options.skewTime Allowed tolerance, in seconds, when verifying time of validity to account for clock skew between two machines. Defaults to 0. - * @returns An object including the `presentation` (without proof) and the decoded JWT `payload` containing all claims. - */ -export async function verifySignedAsJwt( - token: string, - { - verifier, - challenge, - skewTime, - }: { verifier?: string; challenge?: string; skewTime?: number } = {} -): Promise< - JWTVerified & { - presentation: VerifiablePresentation - } -> { - const result = await verify(token, { - proofPurpose: 'authentication', - audience: verifier, - skewTime, - }) - if (challenge && result.payload.nonce !== challenge) { - throw new Error('expected challenge not matching presentation') - } - const presentation = presentationFromPayload(result.payload) - validateStructure(presentation) - assertHolderCanPresentCredentials(presentation) - return { - presentation, - ...result, - } -} diff --git a/packages/vc-export/src/constants.ts b/packages/vc-export/src/constants.ts deleted file mode 100644 index f19e4bf41..000000000 --- a/packages/vc-export/src/constants.ts +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import { hexToU8a } from '@polkadot/util' - -/** - * Credential context URL required by VC specifications. - */ -export const W3C_CREDENTIAL_CONTEXT_URL = - 'https://www.w3.org/2018/credentials/v1' -/** - * Credential context URL required for Kilt credentials. - */ -export const KILT_CREDENTIAL_CONTEXT_URL = - 'https://www.kilt.io/contexts/credentials' -/** - * Ordered set of credential contexts required on every Kilt VC. - */ -export const DEFAULT_CREDENTIAL_CONTEXTS: [ - typeof W3C_CREDENTIAL_CONTEXT_URL, - typeof KILT_CREDENTIAL_CONTEXT_URL -] = [W3C_CREDENTIAL_CONTEXT_URL, KILT_CREDENTIAL_CONTEXT_URL] -/** - * Credential type required by VC specifications. - */ -export const W3C_CREDENTIAL_TYPE = 'VerifiableCredential' -/** - * Credential type required for Kilt credentials. - */ -export const KILT_CREDENTIAL_TYPE = 'KiltCredentialV1' -/** - * Set of credential types required on every Kilt VC. - */ -export const DEFAULT_CREDENTIAL_TYPES: Array< - typeof W3C_CREDENTIAL_TYPE | typeof KILT_CREDENTIAL_TYPE -> = [W3C_CREDENTIAL_TYPE, KILT_CREDENTIAL_TYPE] -/** - * Constant for default presentation type. - */ -export const W3C_PRESENTATION_TYPE = 'VerifiablePresentation' -/** - * Type for backwards-compatible Kilt proof suite. - */ -export const ATTESTATION_PROOF_V1_TYPE = 'KiltAttestationProofV1' - -export const KILT_REVOCATION_STATUS_V1_TYPE = 'KiltRevocationStatusV1' - -export const KILT_ATTESTER_LEGITIMATION_V1_TYPE = 'KiltAttesterLegitimationV1' - -export const KILT_ATTESTER_DELEGATION_V1_TYPE = 'KiltAttesterDelegationV1' - -export const JSON_SCHEMA_TYPE = 'JsonSchema2023' - -export const KILT_CREDENTIAL_IRI_PREFIX = 'kilt:credential:' - -export const spiritnetGenesisHash = hexToU8a( - '0x411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21' -) diff --git a/packages/vc-export/src/vc-js/context/context.ts b/packages/vc-export/src/context/context.ts similarity index 97% rename from packages/vc-export/src/vc-js/context/context.ts rename to packages/vc-export/src/context/context.ts index a6ea7f547..8f7cd43a6 100644 --- a/packages/vc-export/src/vc-js/context/context.ts +++ b/packages/vc-export/src/context/context.ts @@ -5,14 +5,14 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { KILT_CREDENTIAL_CONTEXT_URL } from '../../constants.js' +import { KiltCredentialV1 } from '@kiltprotocol/credentials' export const context = { '@context': { '@version': 1.1, '@protected': true, - kilt: `${KILT_CREDENTIAL_CONTEXT_URL}#`, + kilt: `${KiltCredentialV1.CONTEXT_URL}#`, cred: 'https://www.w3.org/2018/credentials#', sec: 'https://w3id.org/security#', xsd: 'http://www.w3.org/2001/XMLSchema#', diff --git a/packages/vc-export/src/vc-js/context/index.ts b/packages/vc-export/src/context/index.ts similarity index 62% rename from packages/vc-export/src/vc-js/context/index.ts rename to packages/vc-export/src/context/index.ts index c5b3ac613..8a07a7357 100644 --- a/packages/vc-export/src/vc-js/context/index.ts +++ b/packages/vc-export/src/context/index.ts @@ -5,7 +5,9 @@ * found in the LICENSE file in the root directory of this source tree. */ +import { KiltCredentialV1 } from '@kiltprotocol/credentials' import { context } from './context.js' -import { KILT_CREDENTIAL_CONTEXT_URL } from '../../constants.js' -export const validationContexts = { [KILT_CREDENTIAL_CONTEXT_URL]: context } +export const validationContexts = { + [KiltCredentialV1.CONTEXT_URL]: context, +} diff --git a/packages/vc-export/src/vc-js/documentLoader.ts b/packages/vc-export/src/documentLoader.ts similarity index 61% rename from packages/vc-export/src/vc-js/documentLoader.ts rename to packages/vc-export/src/documentLoader.ts index 7acd20df9..8fe4bae41 100644 --- a/packages/vc-export/src/vc-js/documentLoader.ts +++ b/packages/vc-export/src/documentLoader.ts @@ -8,23 +8,25 @@ // @ts-expect-error not a typescript module import jsonld from 'jsonld' // cjs module +import { base58Encode } from '@polkadot/util-crypto' import { DID_CONTEXTS, KILT_DID_CONTEXT_URL, parse, - resolveCompliant, + resolve as resolveDid, W3C_DID_CONTEXT_URL, + multibaseKeyToDidKey, } from '@kiltprotocol/did' import type { - ConformingDidDocument, - ConformingDidKey, - DidUri, + DidDocument, + Did, ICType, + VerificationMethod, } from '@kiltprotocol/types' +import { CType } from '@kiltprotocol/credentials' import { validationContexts } from './context/index.js' import { Sr25519VerificationKey2020 } from './suites/Sr25519VerificationKey.js' -import { newCachingCTypeLoader } from '../KiltCredentialV1.js' export type JsonLdObj = Record export interface RemoteDocument { @@ -78,17 +80,62 @@ export const kiltContextsLoader: DocumentLoader = async (url) => { throw new Error(`not a known Kilt context: ${url}`) } +type LegacyVerificationMethodType = + | 'Sr25519VerificationKey2020' + | 'Ed25519VerificationKey2018' + | 'EcdsaSecp256k1VerificationKey2019' + | 'X25519KeyAgreementKey2019' +type LegacyVerificationMethod = Pick< + VerificationMethod, + 'id' | 'controller' +> & { publicKeyBase58: string; type: LegacyVerificationMethodType } + +// Returns legacy representations of a KILT DID verification method. export const kiltDidLoader: DocumentLoader = async (url) => { - const { did } = parse(url as DidUri) - const { didDocument, didResolutionMetadata } = await resolveCompliant(did) - if (didResolutionMetadata.error) { - throw new Error( - `${didResolutionMetadata.error}:${didResolutionMetadata.errorMessage}` - ) - } - // Framing can help us resolve to the requested resource (did or did uri). This way we return either a key or the full DID document, depending on what was requested. - const document = (await jsonld.frame( - didDocument ?? {}, + const { did } = parse(url as Did) + const { didDocument: resolvedDidDocument } = await resolveDid(did) + const didDocument = (() => { + if (resolvedDidDocument === undefined) { + return {} + } + const doc: DidDocument = { ...resolvedDidDocument } + doc.verificationMethod = doc.verificationMethod?.map( + (vm): LegacyVerificationMethod => { + // Bail early if the returned document is already in legacy format + if (vm.type !== 'Multikey') { + return vm as unknown as LegacyVerificationMethod + } + const { controller, id, publicKeyMultibase } = vm + const { keyType, publicKey } = multibaseKeyToDidKey(publicKeyMultibase) + const publicKeyBase58 = base58Encode(publicKey) + const verificationMethodType: LegacyVerificationMethodType = (() => { + switch (keyType) { + case 'ed25519': + return 'Ed25519VerificationKey2018' + case 'sr25519': + return 'Sr25519VerificationKey2020' + case 'ecdsa': + return 'EcdsaSecp256k1VerificationKey2019' + case 'x25519': + return 'X25519KeyAgreementKey2019' + default: + throw new Error(`Unsupported key type "${keyType}"`) + } + })() + return { + controller, + id, + publicKeyBase58, + type: verificationMethodType, + } + } + ) as unknown as VerificationMethod[] + return doc + })() + + // Framing can help us resolve to the requested resource (did or did url). This way we return either a key or the full DID document, depending on what was requested. + const jsonLdDocument = (await jsonld.frame( + didDocument, { // add did contexts to make sure we get a compacted representation '@context': [W3C_DID_CONTEXT_URL, KILT_DID_CONTEXT_URL], @@ -104,33 +151,33 @@ export const kiltDidLoader: DocumentLoader = async (url) => { }, // forced because 'base' is not defined in the types we're using; these are for v1.5 bc no more recent types exist } as jsonld.Options.Frame - )) as ConformingDidDocument | ConformingDidKey + )) as DidDocument | VerificationMethod // The signature suites expect key-related json-LD contexts; we add them here - switch ((document as { type: string }).type) { + switch ((jsonLdDocument as { type: string }).type) { // these 4 are currently used case Sr25519VerificationKey2020.suite: - document['@context'].push(Sr25519VerificationKey2020.SUITE_CONTEXT) + jsonLdDocument['@context'].push(Sr25519VerificationKey2020.SUITE_CONTEXT) break case 'Ed25519VerificationKey2018': - document['@context'].push( + jsonLdDocument['@context'].push( 'https://w3id.org/security/suites/ed25519-2018/v1' ) break case 'EcdsaSecp256k1VerificationKey2019': - document['@context'].push('https://w3id.org/security/v1') + jsonLdDocument['@context'].push('https://w3id.org/security/v1') break case 'X25519KeyAgreementKey2019': - document['@context'].push( + jsonLdDocument['@context'].push( 'https://w3id.org/security/suites/x25519-2019/v1' ) break default: break } - return { contextUrl: undefined, documentUrl: url, document } + return { contextUrl: undefined, documentUrl: url, document: jsonLdDocument } } -const loader = newCachingCTypeLoader() +const loader = CType.newCachingCTypeLoader() export const kiltCTypeLoader: DocumentLoader = async (id) => { const document = (await loader(id as ICType['$id'])) as JsonLdObj & ICType return { contextUrl: undefined, documentUrl: id, document } @@ -138,7 +185,7 @@ export const kiltCTypeLoader: DocumentLoader = async (id) => { /** * Document loader that provides access to the JSON-LD contexts required for verifying Kilt VCs. - * Essentially wraps the vc-js defaultDocumentLoader, but additionally loads KILTs [[validationContexts]] & [[DID_CONTEXTS]]. + * Essentially wraps the vc-js defaultDocumentLoader, but additionally loads KILTs {@link validationContexts} & {@link DID_CONTEXTS}. * * @param url Document/context URL to resolve. * @returns An object containing the resolution result. diff --git a/packages/vc-export/src/errors.ts b/packages/vc-export/src/errors.ts deleted file mode 100644 index 2a799eba8..000000000 --- a/packages/vc-export/src/errors.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -/* eslint-disable max-classes-per-file */ - -import { SDKErrors } from '@kiltprotocol/utils' - -export class CredentialMalformedError extends SDKErrors.SDKError {} - -export class PresentationMalformedError extends SDKErrors.SDKError {} - -export class ProofMalformedError extends SDKErrors.SDKError {} diff --git a/packages/vc-export/src/examples/KiltCredentialV1.json b/packages/vc-export/src/examples/KiltCredentialV1.json new file mode 100644 index 000000000..b92ca33cd --- /dev/null +++ b/packages/vc-export/src/examples/KiltCredentialV1.json @@ -0,0 +1,42 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://www.kilt.io/contexts/credentials" + ], + "type": [ + "VerifiableCredential", + "KiltCredentialV1", + "kilt:ctype:0x3291bb126e33b4862d421bfaa1d2f272e6cdfc4f96658988fbcffea8914bd9ac" + ], + "nonTransferable": true, + "credentialSubject": { + "@context": { + "@vocab": "kilt:ctype:0x3291bb126e33b4862d421bfaa1d2f272e6cdfc4f96658988fbcffea8914bd9ac#" + }, + "id": "did:kilt:4sJm5Zsvdi32hU88xbL3v6VQ877P4HLaWVYUXgcSyQR8URTu", + "Email": "ingo@kilt.io" + }, + "credentialSchema": { + "id": "ipfs://QmRpbcBsAPLCKUZSNncPiMxtVfM33UBmudaCMQV9K3FD5z", + "type": "JsonSchema2023" + }, + "credentialStatus": { + "id": "polkadot:411f057b9107718c9624d6aa4a3f23c1/kilt:attestation/6N736gaJzLkwZXAgg51eZFjocLHGp2RH3YPpYnvqDHzw", + "type": "KiltRevocationStatusV1" + }, + "id": "kilt:credential:6N736gaJzLkwZXAgg51eZFjocLHGp2RH3YPpYnvqDHzw", + "issuer": "did:kilt:4pnfkRn5UurBJTW92d9TaVLR2CqJdY4z5HPjrEbpGyBykare", + "issuanceDate": "2022-04-11T09:41:00.000Z", + "proof": { + "type": "KiltAttestationProofV1", + "block": "AwpqjHSLKHB6gtKrg5zbNi8MmZD2aYFNUzn5tPNtHhgy", + "commitments": [ + "9gs4tcfepmrPL8s1i3mysqgTCyXABWQAYwzMVd3hGdjs", + "Bsmm5xbBnQRVKJKTtD9qAzGyUaaqNoRWhk4tgNkJrWn4" + ], + "salt": [ + "maY9L8qkvrVGySJyWTuWnZALvDRkvjj47NorFpjXNTUBrX2ZH", + "NkqZ868gmhoYDvt1X5hsHhHDP94indXqErLcVBGZRBiMgHxE5" + ] + } + } \ No newline at end of file diff --git a/packages/vc-export/src/fromICredential.ts b/packages/vc-export/src/fromICredential.ts deleted file mode 100644 index 191c10c99..000000000 --- a/packages/vc-export/src/fromICredential.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import type { ICredential } from '@kiltprotocol/types' - -import { fromICredential as vcFromCredential } from './KiltCredentialV1.js' -import { fromICredential as proofFromCredential } from './KiltAttestationProofV1.js' -import type { KiltCredentialV1 } from './types.js' - -type Params = Parameters[1] & - Parameters[1] - -/** - * Transforms an [[ICredential]] object to conform to the KiltCredentialV1 data model. - * - * @param input An [[ICredential]] object. - * @param opts Additional required and optional parameters for producing a VC from an [[ICredential]]. - * @param opts.issuer The issuer of the attestation to this credential (attester). - * @param opts.blockHash Hash of any block at which the credential is verifiable (i.e. Attested and not revoked). - * @param opts.timestamp Timestamp of the block referenced by blockHash in milliseconds since January 1, 1970, UTC (UNIX epoch). - * @param opts.chainGenesisHash Optional: Genesis hash of the chain against which this credential is verifiable. Defaults to the spiritnet genesis hash. - * @param opts.cType Optional: The CType object referenced by the [[ICredential]]. - * @returns A KiltCredentialV1 with embedded KiltAttestationProofV1 proof. - */ -export function exportICredentialToVc( - input: ICredential, - { blockHash, issuer, chainGenesisHash, timestamp, cType }: Params -): KiltCredentialV1 { - const proof = proofFromCredential(input, { blockHash }) - return { - ...vcFromCredential(input, { issuer, chainGenesisHash, timestamp, cType }), - proof, - } -} diff --git a/packages/vc-export/src/index.ts b/packages/vc-export/src/index.ts index 0fbdf8617..007510879 100644 --- a/packages/vc-export/src/index.ts +++ b/packages/vc-export/src/index.ts @@ -5,17 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -/** - * @module @kiltprotocol/vc-export - */ - -export * from './fromICredential.js' -export * as KiltCredentialV1 from './KiltCredentialV1.js' -export * as KiltAttestationProofV1 from './KiltAttestationProofV1.js' -export * as KiltRevocationStatusV1 from './KiltRevocationStatusV1.js' -export * as Presentation from './Presentation.js' -export * as DidJWT from './DidJwt.js' -export * as vcjs from './vc-js/index.js' -export * from './types.js' -export * as constants from './constants.js' -export * from './errors.js' +export * from './suites/index.js' +export * from './purposes/index.js' +export * from './documentLoader.js' +export { validationContexts as contexts } from './context/index.js' diff --git a/packages/vc-export/src/vc-js/purposes/KiltAttestationProofV1Purpose.ts b/packages/vc-export/src/purposes/KiltAttestationProofV1Purpose.ts similarity index 80% rename from packages/vc-export/src/vc-js/purposes/KiltAttestationProofV1Purpose.ts rename to packages/vc-export/src/purposes/KiltAttestationProofV1Purpose.ts index 8232ce98f..7c6c43d2c 100644 --- a/packages/vc-export/src/vc-js/purposes/KiltAttestationProofV1Purpose.ts +++ b/packages/vc-export/src/purposes/KiltAttestationProofV1Purpose.ts @@ -11,8 +11,7 @@ // @ts-expect-error not a typescript module import jsigs from 'jsonld-signatures' // cjs module -import { ATTESTATION_PROOF_V1_TYPE } from '../../constants.js' -import type { Proof } from '../../types.js' +import { KiltAttestationProofV1, Types } from '@kiltprotocol/credentials' import type { JsonLdObj } from '../documentLoader.js' export class KiltAttestationProofV1Purpose extends jsigs.purposes.ProofPurpose { @@ -24,7 +23,7 @@ export class KiltAttestationProofV1Purpose extends jsigs.purposes.ProofPurpose { } async validate( - proof: Proof, + proof: Types.Proof, { document, }: /* suite, verificationMethod, @@ -37,20 +36,20 @@ export class KiltAttestationProofV1Purpose extends jsigs.purposes.ProofPurpose { } async update( - proof: Proof, + proof: Types.Proof, { /* document, suite, documentLoader, expansionMap */ } - ): Promise { - return { ...proof, type: ATTESTATION_PROOF_V1_TYPE } + ): Promise { + return { ...proof, type: KiltAttestationProofV1.PROOF_TYPE } } async match( - proof: Proof, + proof: Types.Proof, { /* document, documentLoader, expansionMap */ } ): Promise { - return proof.type === ATTESTATION_PROOF_V1_TYPE + return proof.type === KiltAttestationProofV1.PROOF_TYPE } } diff --git a/packages/vc-export/src/vc-js/purposes/index.ts b/packages/vc-export/src/purposes/index.ts similarity index 100% rename from packages/vc-export/src/vc-js/purposes/index.ts rename to packages/vc-export/src/purposes/index.ts diff --git a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts b/packages/vc-export/src/suites/KiltAttestationProofV1.spec.ts similarity index 81% rename from packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts rename to packages/vc-export/src/suites/KiltAttestationProofV1.spec.ts index 03272e689..da9bdd610 100644 --- a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.spec.ts +++ b/packages/vc-export/src/suites/KiltAttestationProofV1.spec.ts @@ -5,125 +5,114 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { hexToU8a, u8aEq } from '@polkadot/util' -// @ts-expect-error not a typescript module -import * as vcjs from '@digitalbazaar/vc' +import { u8aEq } from '@polkadot/util' +import { base58Decode } from '@polkadot/util-crypto' import { Ed25519Signature2020, suiteContext as Ed25519Signature2020Context, // @ts-expect-error not a typescript module } from '@digitalbazaar/ed25519-signature-2020' // @ts-expect-error not a typescript module +import * as vcjs from '@digitalbazaar/vc' +// @ts-expect-error not a typescript module import jsigs from 'jsonld-signatures' // cjs module // @ts-expect-error not a typescript module import jsonld from 'jsonld' // cjs module -import { Credential } from '@kiltprotocol/core' import { ConfigService } from '@kiltprotocol/config' import * as Did from '@kiltprotocol/did' -import { Crypto } from '@kiltprotocol/utils' import type { - ConformingDidDocument, + DidDocument, + DidUrl, + HexString, ICType, - IClaim, - ICredential, + KiltAddress, KiltKeyringPair, - SubmittableExtrinsic, + SignerInterface, } from '@kiltprotocol/types' +import { Crypto } from '@kiltprotocol/utils' +import { + KiltAttestationProofV1, + KiltCredentialV1, + Types, + W3C_CREDENTIAL_CONTEXT_URL, +} from '@kiltprotocol/credentials' -import { exportICredentialToVc } from '../../fromICredential.js' import { - DidSigner, - TxHandler, - applySelectiveDisclosure, -} from '../../KiltAttestationProofV1.js' -import { KiltAttestationProofV1Purpose } from '../purposes/KiltAttestationProofV1Purpose.js' + cType, + makeAttestationCreatedEvents, + mockedApi, +} from '../../../../tests/testUtils/testData.js' import { JsonLdObj, combineDocumentLoaders, kiltContextsLoader, kiltDidLoader, } from '../documentLoader.js' -import { - KILT_CREDENTIAL_CONTEXT_URL, - W3C_CREDENTIAL_CONTEXT_URL, -} from '../../constants.js' -import { Sr25519Signature2020 } from './Sr25519Signature2020.js' +import ingosCredential from '../examples/KiltCredentialV1.json' +import { KiltAttestationProofV1Purpose } from '../purposes/KiltAttestationProofV1Purpose.js' import { CredentialStub, KiltAttestationV1Suite, } from './KiltAttestationProofV1.js' -import ingosCredential from '../examples/ICredentialExample.json' -import { - cType, - makeAttestationCreatedEvents, - mockedApi, -} from '../../exportToVerifiableCredential.spec.js' -import type { - KiltAttestationProofV1, - Proof, - KiltCredentialV1, -} from '../../types.js' +import { Sr25519Signature2020 } from './Sr25519Signature2020.js' import { makeFakeDid } from './Sr25519Signature2020.spec' jest.mock('@kiltprotocol/did', () => ({ ...jest.requireActual('@kiltprotocol/did'), - resolveCompliant: jest.fn(), + resolve: jest.fn(), authorizeTx: jest.fn(), })) // is not needed and imports a dependency that does not work in node 18 jest.mock('@digitalbazaar/http-client', () => ({})) -const attester = '4pnfkRn5UurBJTW92d9TaVLR2CqJdY4z5HPjrEbpGyBykare' -const timestamp = 1_649_670_060_000 -const blockHash = hexToU8a( - '0x93c4a399abff5a68812479445d121995fde278b7a29d5863259cf7b6b6f1dc7e' -) +const attester = ingosCredential.issuer.split(':')[2] as KiltAddress +const timestamp = new Date(ingosCredential.issuanceDate) +const blockHash = base58Decode(ingosCredential.proof.block) const { genesisHash } = mockedApi +const ctypeHash = ingosCredential.type[2].split(':')[2] as HexString -const attestedVc = exportICredentialToVc(ingosCredential as ICredential, { - issuer: `did:kilt:${attester}`, - chainGenesisHash: genesisHash, - blockHash, - timestamp, -}) +const attestedVc = KiltAttestationProofV1.finalizeProof( + { ...ingosCredential } as unknown as KiltCredentialV1.Interface, + ingosCredential.proof as KiltAttestationProofV1.Interface, + { blockHash, timestamp, genesisHash } +) + +const notAttestedVc = KiltAttestationProofV1.finalizeProof( + attestedVc, + KiltAttestationProofV1.initializeProof(attestedVc)[0], + { blockHash, timestamp, genesisHash } +) -const notAttestedVc = exportICredentialToVc( - Credential.fromClaim(ingosCredential.claim as IClaim), +const revokedVc = KiltAttestationProofV1.finalizeProof( + attestedVc, + KiltAttestationProofV1.initializeProof(attestedVc)[0], { - issuer: `did:kilt:${attester}`, - chainGenesisHash: genesisHash, blockHash, timestamp, + genesisHash, } ) -const revokedCredential = Credential.fromClaim(ingosCredential.claim as IClaim) -const revokedVc = exportICredentialToVc(revokedCredential, { - issuer: `did:kilt:${attester}`, - chainGenesisHash: genesisHash, - blockHash, - timestamp, -}) jest.mocked(mockedApi.query.attestation.attestations).mockImplementation( // @ts-expect-error async (claimHash) => { - if (u8aEq(claimHash, ingosCredential.rootHash)) { + if (u8aEq(claimHash, KiltCredentialV1.idToRootHash(attestedVc.id))) { return mockedApi.createType( 'Option', { - ctypeHash: ingosCredential.claim.cTypeHash, + ctypeHash, attester, revoked: false, } ) } - if (u8aEq(claimHash, revokedCredential.rootHash)) { + if (u8aEq(claimHash, KiltCredentialV1.idToRootHash(revokedVc.id))) { return mockedApi.createType( 'Option', { - ctypeHash: revokedCredential.claim.cTypeHash, + ctypeHash, attester, revoked: true, } @@ -136,18 +125,13 @@ jest.mocked(mockedApi.query.attestation.attestations).mockImplementation( ) jest.mocked(mockedApi.query.system.events).mockResolvedValue( makeAttestationCreatedEvents([ - [attester, ingosCredential.rootHash, ingosCredential.claim.cTypeHash, null], - [ - attester, - revokedCredential.rootHash, - revokedCredential.claim.cTypeHash, - null, - ], + [attester, KiltCredentialV1.idToRootHash(attestedVc.id), ctypeHash, null], + [attester, KiltCredentialV1.idToRootHash(revokedVc.id), ctypeHash, null], ]) as any ) jest .mocked(mockedApi.query.timestamp.now) - .mockResolvedValue(mockedApi.createType('u64', timestamp) as any) + .mockResolvedValue(mockedApi.createType('u64', timestamp.getTime()) as any) const emailCType: ICType = { $schema: 'http://kilt-protocol.org/draft-01/ctype#', @@ -169,16 +153,16 @@ const documentLoader = combineDocumentLoaders([ let suite: KiltAttestationV1Suite let purpose: KiltAttestationProofV1Purpose -let proof: KiltAttestationProofV1 +let proof: KiltAttestationProofV1.Interface let keypair: KiltKeyringPair -let didDocument: ConformingDidDocument +let didDocument: DidDocument beforeAll(async () => { suite = new KiltAttestationV1Suite({ ctypes: [cType, emailCType], }) purpose = new KiltAttestationProofV1Purpose() - proof = attestedVc.proof as KiltAttestationProofV1 + proof = attestedVc.proof as KiltAttestationProofV1.Interface ;({ keypair, didDocument } = await makeFakeDid()) }) @@ -193,7 +177,7 @@ describe('jsigs', () => { { ...proof, '@context': attestedVc['@context'] }, attestedVc['@context'], { documentLoader, compactToRelative: false } - )) as Proof + )) as Types.Proof expect(await purpose.match(compactedProof, {})).toBe(true) expect( await purpose.match(compactedProof, { @@ -233,7 +217,11 @@ describe('jsigs', () => { }) it('verifies proof with props removed', async () => { - const derived = applySelectiveDisclosure(attestedVc, proof, []) + const derived = KiltAttestationProofV1.applySelectiveDisclosure( + attestedVc, + proof, + [] + ) expect(derived.credential.credentialSubject).not.toHaveProperty('Email') expect( await jsigs.verify( @@ -269,7 +257,9 @@ describe('jsigs', () => { it('detects tampering on claims', async () => { // make a copy - const tamperCred: KiltCredentialV1 = JSON.parse(JSON.stringify(attestedVc)) + const tamperCred: KiltCredentialV1.Interface = JSON.parse( + JSON.stringify(attestedVc) + ) tamperCred.credentialSubject.Email = 'macgyver@google.com' expect( await jsigs.verify(tamperCred, { suite, purpose, documentLoader }) @@ -277,7 +267,9 @@ describe('jsigs', () => { }) it('detects tampering on credential', async () => { - const tamperCred: KiltCredentialV1 = JSON.parse(JSON.stringify(attestedVc)) + const tamperCred: KiltCredentialV1.Interface = JSON.parse( + JSON.stringify(attestedVc) + ) tamperCred.id = tamperCred.id.replace('1', '2') as any expect( await jsigs.verify(tamperCred, { suite, purpose, documentLoader }) @@ -285,7 +277,9 @@ describe('jsigs', () => { }) it('detects signer mismatch', async () => { - const tamperCred: KiltCredentialV1 = JSON.parse(JSON.stringify(attestedVc)) + const tamperCred: KiltCredentialV1.Interface = JSON.parse( + JSON.stringify(attestedVc) + ) tamperCred.issuer = 'did:kilt:4oFNEgM6ibgEW1seCGXk3yCM6o7QTnDGrqGtgSRSspVMDg4c' expect( @@ -294,7 +288,9 @@ describe('jsigs', () => { }) it('detects proof mismatch', async () => { - const tamperCred: KiltCredentialV1 = JSON.parse(JSON.stringify(attestedVc)) + const tamperCred: KiltCredentialV1.Interface = JSON.parse( + JSON.stringify(attestedVc) + ) tamperCred.proof!.type = 'Sr25519Signature2020' as any expect( await jsigs.verify(tamperCred, { suite, purpose, documentLoader }) @@ -318,7 +314,7 @@ describe('vc-js', () => { it('creates and verifies a signed presentation (sr25519)', async () => { const signer = { sign: async ({ data }: { data: Uint8Array }) => keypair.sign(data), - id: didDocument.authentication[0], + id: didDocument.id + didDocument.authentication![0], } const signingSuite = new Sr25519Signature2020({ signer }) @@ -362,7 +358,7 @@ describe('vc-js', () => { }) const edSigner = { sign: async ({ data }: { data: Uint8Array }) => edKeypair.sign(data), - id: lightDid.uri + lightDid.authentication[0].id, + id: lightDid.id + lightDid.authentication?.[0], } const signingSuite = new Ed25519Signature2020({ signer: edSigner }) @@ -373,7 +369,7 @@ describe('vc-js', () => { let presentation = vcjs.createPresentation({ verifiableCredential: attestedVc, - holder: lightDid.uri, + holder: lightDid.id, }) presentation = await vcjs.signPresentation({ @@ -451,40 +447,41 @@ describe('issuance', () => { let issuanceSuite: KiltAttestationV1Suite let toBeSigned: CredentialStub - const didSigner: DidSigner = { - did: attestedVc.issuer, - signer: async () => ({ - signature: new Uint8Array(32), - keyType: 'sr25519' as const, - }), + const { issuer } = attestedVc + const signer: SignerInterface<'Sr25519', DidUrl> = { + sign: async () => new Uint8Array(32), + algorithm: 'Sr25519', + id: `${issuer}#1`, } - const transactionHandler: TxHandler = { - account: attester, - signAndSubmit: async () => { + const transactionHandler: KiltAttestationProofV1.IssueOpts = { + signers: [signer], + submitterAccount: attester, + submitTx: async () => { return { - blockHash, - timestamp, + status: 'Finalized', + includedAt: { + blockHash, + blockTime: timestamp, + }, } }, + authorizeTx: async (tx) => { + txArgs = tx.args + return tx + }, } beforeEach(() => { toBeSigned = { credentialSubject: attestedVc.credentialSubject, } issuanceSuite = new KiltAttestationV1Suite() - jest - .mocked(Did.authorizeTx) - .mockImplementation(async (...[, extrinsic]) => { - txArgs = extrinsic.args - return extrinsic as SubmittableExtrinsic - }) }) it('issues a credential via vc-js', async () => { - let newCred: Partial = + let newCred: Partial = await issuanceSuite.anchorCredential( { ...toBeSigned }, - didSigner, + issuer, transactionHandler ) newCred = await vcjs.issue({ @@ -511,6 +508,7 @@ describe('issuance', () => { ) expect(newCred.id).not.toMatch(attestedVc.id) + expect(txArgs).toBeDefined() jest .mocked(mockedApi.query.system.events) .mockResolvedValueOnce( @@ -542,7 +540,7 @@ describe('issuance', () => { { ...toBeSigned, }, - didSigner, + issuer, transactionHandler ) newCred = (await vcjs.issue({ @@ -553,8 +551,8 @@ describe('issuance', () => { suite: issuanceSuite, documentLoader, purpose, - })) as KiltCredentialV1 - expect(newCred['@context']).toContain(KILT_CREDENTIAL_CONTEXT_URL) + })) as KiltCredentialV1.Interface + expect(newCred['@context']).toContain(KiltCredentialV1.CONTEXT_URL) await expect( jsigs.sign( diff --git a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts b/packages/vc-export/src/suites/KiltAttestationProofV1.ts similarity index 64% rename from packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts rename to packages/vc-export/src/suites/KiltAttestationProofV1.ts index 1df276f6f..4f6699ca2 100644 --- a/packages/vc-export/src/vc-js/suites/KiltAttestationProofV1.ts +++ b/packages/vc-export/src/suites/KiltAttestationProofV1.ts @@ -12,34 +12,16 @@ import jsigs from 'jsonld-signatures' // cjs module import { ConfigService } from '@kiltprotocol/config' -import { CType } from '@kiltprotocol/core' -import type { ICType } from '@kiltprotocol/types' - -import { chainIdFromGenesis } from '../../CAIP/caip2.js' -import { - DidSigner, - TxHandler, - issue, - verify as verifyProof, -} from '../../KiltAttestationProofV1.js' -import type { CTypeLoader } from '../../KiltCredentialV1.js' -import { - credentialSchema, - validateStructure as validateCredentialStructure, -} from '../../KiltCredentialV1.js' -import { check as checkStatus } from '../../KiltRevocationStatusV1.js' import { - ATTESTATION_PROOF_V1_TYPE, - DEFAULT_CREDENTIAL_CONTEXTS, - DEFAULT_CREDENTIAL_TYPES, - JSON_SCHEMA_TYPE, - KILT_CREDENTIAL_CONTEXT_URL, -} from '../../constants.js' -import type { + CType, KiltAttestationProofV1, + KiltRevocationStatusV1, + Types, KiltCredentialV1, - Proof, -} from '../../types.js' +} from '@kiltprotocol/credentials' +import type { DidDocument, Did, ICType } from '@kiltprotocol/types' + +import { Caip2 } from '@kiltprotocol/utils' import type { DocumentLoader, JsonLdObj } from '../documentLoader.js' import type { JSigsVerificationResult } from './types.js' import { includesContext } from './utils.js' @@ -49,29 +31,32 @@ const { } = jsigs interface CallArgs { - proof: Proof + proof: Types.Proof document?: JsonLdObj documentLoader?: DocumentLoader [key: string]: unknown } -export type CredentialStub = Pick & - Partial +export type CredentialStub = Pick< + KiltCredentialV1.Interface, + 'credentialSubject' +> & + Partial export class KiltAttestationV1Suite extends LinkedDataProof { private ctypes: ICType[] private attestationInfo = new Map< - KiltCredentialV1['id'], - KiltAttestationProofV1 + KiltCredentialV1.Interface['id'], + KiltAttestationProofV1.Interface >() - public readonly contextUrl = KILT_CREDENTIAL_CONTEXT_URL + public readonly contextUrl = KiltCredentialV1.CONTEXT_URL // eslint-disable-next-line jsdoc/require-returns /** * Placeholder value as \@digitalbazaar/vc requires a verificationMethod property on issuance. */ public get verificationMethod(): string { - return chainIdFromGenesis(ConfigService.get('api').genesisHash) + return Caip2.chainIdFromGenesis(ConfigService.get('api').genesisHash) } constructor({ @@ -79,19 +64,19 @@ export class KiltAttestationV1Suite extends LinkedDataProof { }: { ctypes?: ICType[] } = {}) { - super({ type: ATTESTATION_PROOF_V1_TYPE }) + super({ type: KiltAttestationProofV1.PROOF_TYPE }) this.ctypes = ctypes } // eslint-disable-next-line jsdoc/require-returns /** - * A function to check the revocation status of KiltAttestationV1 proofs, which is tied to the [[KiltRevocationStatusV1]] method. + * A function to check the revocation status of KiltAttestationV1 proofs, which is tied to the {@link KiltRevocationStatusV1} method. */ public get checkStatus(): (args: { - credential: KiltCredentialV1 + credential: KiltCredentialV1.Interface }) => Promise<{ verified: boolean; error?: unknown }> { return async ({ credential }) => { - return checkStatus(credential) + return KiltRevocationStatusV1.check(credential) .then(() => ({ verified: true })) .catch((error) => ({ verified: false, error })) } @@ -118,9 +103,9 @@ export class KiltAttestationV1Suite extends LinkedDataProof { throw new TypeError('document is required for verification') } // TODO: do we have to compact first in order to allow credentials in non-canonical (non-compacted) form? - const proof = options.proof as KiltAttestationProofV1 - const document = options.document as unknown as KiltCredentialV1 - const loadCTypes: CTypeLoader = async (id) => { + const proof = options.proof as KiltAttestationProofV1.Interface + const document = options.document as unknown as KiltCredentialV1.Interface + const loadCTypes: CType.CTypeLoader = async (id) => { const { document: ctype } = (await options.documentLoader?.(id)) ?? {} if (!CType.isICType(ctype)) { throw new Error( @@ -129,7 +114,7 @@ export class KiltAttestationV1Suite extends LinkedDataProof { } return ctype } - await verifyProof(document, proof, { + await KiltAttestationProofV1.verify(document, proof, { loadCTypes, cTypes: this.ctypes, }) @@ -184,12 +169,12 @@ export class KiltAttestationV1Suite extends LinkedDataProof { } /** - * Adds a proof to a [[KiltCredentialV1]] type document. + * Adds a proof to a {@link KiltCredentialV1} type document. * * ! __This will fail unless the document has been created with `anchorCredential` by the same class instance prior to calling `createProof`__ ! * * @param input Object containing the function arguments. - * @param input.document [[KiltCredentialV1]] object to be signed. + * @param input.document A {@link KiltCredentialV1} object to be signed. * * @returns Resolves with the created proof object. */ @@ -197,9 +182,9 @@ export class KiltAttestationV1Suite extends LinkedDataProof { document, }: { document: object - }): Promise { - const credential = document as KiltCredentialV1 - validateCredentialStructure(credential) + }): Promise { + const credential = document as KiltCredentialV1.Interface + KiltCredentialV1.validateStructure(credential) const { id } = credential const proof = this.attestationInfo.get(id) if (!proof) { @@ -211,21 +196,21 @@ export class KiltAttestationV1Suite extends LinkedDataProof { } /** - * Processes a [[KiltCredentialV1]] stub to produce a verifiable [[KiltCredentialV1]], which is anchored on the Kilt blockchain via an attestation. + * Processes a {@link KiltCredentialV1} stub to produce a verifiable {@link KiltCredentialV1} which is anchored on the Kilt blockchain via an attestation. * The class instance keeps track of attestation-related data. * You can then add a proof about the successful attestation to the credential using `createProof`. * - * @param input A partial [[KiltCredentialV1]]; `credentialSubject` is required. - * @param didSigner Signer interface to be passed to [[issue]], containing the attester's `did` and a `signer` callback which authorizes the on-chain anchoring of the credential with the attester's signature. - * @param transactionHandler Transaction handler interface to be passed to [[issue]] containing the submitter `address` that's going to cover the transaction fees as well as either a `signer` or `signAndSubmit` callback handling extrinsic signing and submission. + * @param input A partial {@link KiltCredentialV1} `credentialSubject` is required. + * @param issuer The DID Document or, alternatively, the DID of the issuer. + * @param submissionOptions Authorization and submission handlers, or alternatively signers, to be passed to {@link KiltAttestationProofV1.issue | issue} for authorizing the on-chain anchoring of the credential with the issuer's signature. * - * @returns A copy of the input updated to fit the [[KiltCredentialV1]] and to align with the attestation record (concerns, e.g., the `issuanceDate` which is set to the block time at which the credential was anchored). + * @returns A copy of the input updated to fit the {@link KiltCredentialV1} and to align with the attestation record (concerns, e.g., the `issuanceDate` which is set to the block time at which the credential was anchored). */ public async anchorCredential( input: CredentialStub, - didSigner: DidSigner, - transactionHandler: TxHandler - ): Promise> { + issuer: DidDocument | Did, + submissionOptions: Parameters['2'] + ): Promise> { const { credentialSubject, type } = input let cType = type?.find((str): str is ICType['$id'] => @@ -242,20 +227,21 @@ export class KiltAttestationV1Suite extends LinkedDataProof { const credentialStub = { ...input, - '@context': DEFAULT_CREDENTIAL_CONTEXTS, - type: [...DEFAULT_CREDENTIAL_TYPES, cType], + '@context': KiltCredentialV1.DEFAULT_CREDENTIAL_CONTEXTS, + type: [...KiltCredentialV1.DEFAULT_CREDENTIAL_TYPES, cType], nonTransferable: true as const, credentialSubject, credentialSchema: { - id: credentialSchema.$id as string, - type: JSON_SCHEMA_TYPE, + id: KiltCredentialV1.credentialSchema.$id as string, + type: KiltCredentialV1.CREDENTIAL_SCHEMA_TYPE, } as const, } - const { proof, ...credential } = await issue(credentialStub, { - didSigner, - transactionHandler, - }) + const { proof, ...credential } = await KiltAttestationProofV1.issue( + credentialStub, + issuer, + submissionOptions + ) this.attestationInfo.set(credential.id, proof) return credential diff --git a/packages/vc-export/src/vc-js/suites/Sr25519Signature2020.spec.ts b/packages/vc-export/src/suites/Sr25519Signature2020.spec.ts similarity index 60% rename from packages/vc-export/src/vc-js/suites/Sr25519Signature2020.spec.ts rename to packages/vc-export/src/suites/Sr25519Signature2020.spec.ts index b7b94f442..53efce5e9 100644 --- a/packages/vc-export/src/vc-js/suites/Sr25519Signature2020.spec.ts +++ b/packages/vc-export/src/suites/Sr25519Signature2020.spec.ts @@ -8,12 +8,13 @@ // @ts-expect-error not a typescript module import * as vcjs from '@digitalbazaar/vc' -import { init } from '@kiltprotocol/core' +import { base58Encode } from '@polkadot/util-crypto' +import { Types, W3C_CREDENTIAL_CONTEXT_URL } from '@kiltprotocol/credentials' import * as Did from '@kiltprotocol/did' import { Crypto } from '@kiltprotocol/utils' import type { - ConformingDidDocument, - DidUri, + DidDocument, + Did as KiltDid, KiltKeyringPair, } from '@kiltprotocol/types' @@ -22,18 +23,16 @@ import { kiltContextsLoader, kiltDidLoader, } from '../documentLoader.js' -import { W3C_CREDENTIAL_CONTEXT_URL } from '../../constants.js' import { Sr25519Signature2020 } from './Sr25519Signature2020.js' import { Sr25519VerificationKey2020 } from './Sr25519VerificationKey.js' -import ingosCredential from '../examples/ICredentialExample.json' -import type { VerifiableCredential } from '../../types.js' +import ingosCredential from '../examples/KiltCredentialV1.json' // is not needed and imports a dependency that does not work in node 18 jest.mock('@digitalbazaar/http-client', () => ({})) jest.mock('@kiltprotocol/did', () => ({ ...jest.requireActual('@kiltprotocol/did'), - resolveCompliant: jest.fn(), + resolve: jest.fn(), })) const documentLoader = combineDocumentLoaders([ @@ -43,37 +42,38 @@ const documentLoader = combineDocumentLoaders([ ]) export async function makeFakeDid() { - await init() const keypair = Crypto.makeKeypairFromUri('//Ingo', 'sr25519') - const didDocument = Did.exportToDidDocument( - { - uri: ingosCredential.claim.owner as DidUri, - authentication: [ - { - ...keypair, - id: '#authentication', - }, - ], - assertionMethod: [{ ...keypair, id: '#assertion' }], - }, - 'application/json' - ) - jest.mocked(Did.resolveCompliant).mockImplementation(async (did) => { + const didDocument: DidDocument = { + id: ingosCredential.credentialSubject.id as KiltDid, + authentication: ['#authentication'], + assertionMethod: ['#assertion'], + verificationMethod: [ + Did.didKeyToVerificationMethod( + ingosCredential.credentialSubject.id as KiltDid, + '#authentication', + { ...keypair, keyType: keypair.type } + ), + Did.didKeyToVerificationMethod( + ingosCredential.credentialSubject.id as KiltDid, + '#assertion', + { ...keypair, keyType: keypair.type } + ), + ], + } + + jest.mocked(Did.resolve).mockImplementation(async (did) => { if (did.includes('light')) { return { - didDocument: Did.exportToDidDocument( - Did.parseDocumentFromLightDid(did, false), - 'application/json' - ), didDocumentMetadata: {}, didResolutionMetadata: {}, + didDocument: Did.parseDocumentFromLightDid(did, false), } } if (did.startsWith(didDocument.id)) { return { - didDocument, didDocumentMetadata: {}, didResolutionMetadata: {}, + didDocument, } } return { @@ -84,7 +84,7 @@ export async function makeFakeDid() { return { didDocument, keypair } } -let didDocument: ConformingDidDocument +let didDocument: DidDocument let keypair: KiltKeyringPair beforeAll(async () => { @@ -94,22 +94,16 @@ beforeAll(async () => { it('issues and verifies a signed credential', async () => { const signer = { sign: async ({ data }: { data: Uint8Array }) => keypair.sign(data), - id: didDocument.assertionMethod![0], + id: didDocument.id + didDocument.assertionMethod![0], } const attestationSigner = new Sr25519Signature2020({ signer }) const credential = { '@context': [W3C_CREDENTIAL_CONTEXT_URL] as any, type: ['VerifiableCredential'], - credentialSubject: { - '@context': { - '@vocab': `kilt:ctype:${ingosCredential.claim.cTypeHash}#`, - }, - id: ingosCredential.claim.owner, - ...ingosCredential.claim.contents, - }, - issuer: ingosCredential.claim.owner, - } as Partial + credentialSubject: ingosCredential.credentialSubject, + issuer: ingosCredential.credentialSubject.id, + } as Partial const verifiableCredential = await vcjs.issue({ credential, @@ -125,13 +119,36 @@ it('issues and verifies a signed credential', async () => { expect(result).not.toHaveProperty('error') expect(result).toHaveProperty('verified', true) + const authenticationMethod = (() => { + const m = didDocument.verificationMethod?.find(({ id }) => + id.includes('authentication') + ) + const { publicKey } = Did.multibaseKeyToDidKey(m!.publicKeyMultibase) + const publicKeyBase58 = base58Encode(publicKey) + return { + ...m, + id: didDocument.id + m!.id, + publicKeyBase58, + } + })() + const assertionMethod = (() => { + const m = didDocument.verificationMethod?.find(({ id }) => + id.includes('assertion') + ) + const { publicKey } = Did.multibaseKeyToDidKey(m!.publicKeyMultibase) + const publicKeyBase58 = base58Encode(publicKey) + return { + ...m, + id: didDocument.id + m!.id, + publicKeyBase58, + } + })() + result = await vcjs.verifyCredential({ credential: verifiableCredential, suite: new Sr25519Signature2020({ key: new Sr25519VerificationKey2020({ - ...didDocument.verificationMethod.find(({ id }) => - id.includes('assertion') - )!, + ...assertionMethod, }), }), documentLoader, @@ -143,9 +160,7 @@ it('issues and verifies a signed credential', async () => { credential: verifiableCredential, suite: new Sr25519Signature2020({ key: new Sr25519VerificationKey2020({ - ...didDocument.verificationMethod.find(({ id }) => - id.includes('authentication') - )!, + ...authenticationMethod, }), }), documentLoader, diff --git a/packages/vc-export/src/vc-js/suites/Sr25519Signature2020.ts b/packages/vc-export/src/suites/Sr25519Signature2020.ts similarity index 89% rename from packages/vc-export/src/vc-js/suites/Sr25519Signature2020.ts rename to packages/vc-export/src/suites/Sr25519Signature2020.ts index 08caaef45..15e0dd192 100644 --- a/packages/vc-export/src/vc-js/suites/Sr25519Signature2020.ts +++ b/packages/vc-export/src/suites/Sr25519Signature2020.ts @@ -10,13 +10,12 @@ import { base58Decode, base58Encode } from '@polkadot/util-crypto' // @ts-expect-error not a typescript module import jsigs from 'jsonld-signatures' // cjs module -import { KILT_CREDENTIAL_CONTEXT_URL } from '../../constants.js' +import { KiltCredentialV1, Types } from '@kiltprotocol/credentials' import { context } from '../context/context.js' import { Sr25519VerificationKey2020 } from './Sr25519VerificationKey.js' import { includesContext } from './utils.js' import type { JSigsSigner, JSigsVerifier } from './types.js' import type { DocumentLoader, JsonLdObj } from '../documentLoader.js' -import type { Proof } from '../../types.js' /* eslint-disable class-methods-use-this */ /* eslint-disable no-use-before-define */ @@ -34,7 +33,7 @@ const LinkedDataSignature = jsigs.suites.LinkedDataSignature as { } } -const SUITE_CONTEXT_URL = KILT_CREDENTIAL_CONTEXT_URL +const SUITE_CONTEXT_URL = KiltCredentialV1.CONTEXT_URL // multibase base58-btc header const MULTIBASE_BASE58BTC_HEADER = 'z' @@ -42,7 +41,7 @@ interface VerificationMethod { verificationMethod: Record } interface Options extends VerificationMethod { - proof: Proof & Partial + proof: Types.Proof & Partial document: JsonLdObj purpose: any documentLoader: DocumentLoader @@ -55,32 +54,32 @@ export class Sr25519Signature2020 extends LinkedDataSignature { /** * Cryptographic suite to produce and verify Sr25519Signature2020 linked data signatures. - * This is modelled after the Ed25519Signature2020 suite (https://w3id.org/security/suites/ed25519-2020/v1) but uses the sr25519 signature scheme common in the polkadot ecosystem. + * This is modelled after the {@link https://w3id.org/security/suites/ed25519-2020/v1 | Ed25519Signature2020 suite } but uses the sr25519 signature scheme common in the polkadot ecosystem. * * @param options - Options hashmap. * * Either a `key` OR at least one of `signer`/`verifier` is required. * - * @param [options.key] - An optional key object (containing an + * @param options.key - An optional key object (containing an * `id` property, and either `signer` or `verifier`, depending on the * intended operation. Useful for when the application is managing keys * itself (when using a KMS, you never have access to the private key, * and so should use the `signer` param instead). - * @param [options.signer] - Signer function that returns an + * @param options.signer - Signer function that returns an * object with an async sign() method. This is useful when interfacing * with a KMS (since you don't get access to the private key and its * `signer()`, the KMS client gives you only the signer function to use). - * @param [options.verifier] - Verifier function that returns + * @param options.verifier - Verifier function that returns * an object with an async `verify()` method. Useful when working with a * KMS-provided verifier function. * * Advanced optional parameters and overrides. * - * @param [options.proof] - A JSON-LD document with options to use + * @param options.proof - A JSON-LD document with options to use * for the `proof` node (e.g. any other custom fields can be provided here * using a context different from security-v2). - * @param [options.date] - Signing date to use if not passed. - * @param [options.useNativeCanonize] - Whether to use a native + * @param options.date - Signing date to use if not passed. + * @param options.useNativeCanonize - Whether to use a native * canonize algorithm. */ constructor({ @@ -94,7 +93,7 @@ export class Sr25519Signature2020 extends LinkedDataSignature { key?: Sr25519VerificationKey2020 signer?: JSigsSigner verifier?: JSigsVerifier - proof?: Proof + proof?: Types.Proof date?: string | Date useNativeCanonize?: boolean } = {}) { @@ -118,7 +117,7 @@ export class Sr25519Signature2020 extends LinkedDataSignature { * @param options - The options to use. * @param options.verifyData - Data to be signed (extracted * from document, according to the suite's spec). - * @param options.proof - Proof object (containing the proofPurpose, + * @param options.proof - Types.Proof object (containing the proofPurpose, * verificationMethod, etc). * * @returns Resolves with the proof containing the signature @@ -128,7 +127,7 @@ export class Sr25519Signature2020 extends LinkedDataSignature { verifyData, proof, }: Pick): Promise< - { proofValue: string } & Proof + { proofValue: string } & Types.Proof > { if (!(this.signer && typeof this.signer.sign === 'function')) { throw new Error('A signer API has not been specified.') @@ -158,7 +157,7 @@ export class Sr25519Signature2020 extends LinkedDataSignature { Options, 'proof' | 'verifyData' | 'verificationMethod' >): Promise { - const { proofValue } = proof as Proof & { proofValue: string } + const { proofValue } = proof as Types.Proof & { proofValue: string } if (!(Boolean(proofValue) && typeof proofValue === 'string')) { throw new TypeError( 'The proof does not include a valid "proofValue" property.' diff --git a/packages/vc-export/src/vc-js/suites/Sr25519VerificationKey.ts b/packages/vc-export/src/suites/Sr25519VerificationKey.ts similarity index 93% rename from packages/vc-export/src/vc-js/suites/Sr25519VerificationKey.ts rename to packages/vc-export/src/suites/Sr25519VerificationKey.ts index 87a33a89e..d13a502e9 100644 --- a/packages/vc-export/src/vc-js/suites/Sr25519VerificationKey.ts +++ b/packages/vc-export/src/suites/Sr25519VerificationKey.ts @@ -15,12 +15,12 @@ import { } from '@polkadot/util-crypto' import { u8aEq } from '@polkadot/util' +import { KiltCredentialV1 } from '@kiltprotocol/credentials' + // @ts-expect-error not a typescript module import cryptold from 'crypto-ld' // cjs module import type { JSigsSigner, JSigsVerifier } from './types.js' -import { KILT_CREDENTIAL_CONTEXT_URL } from '../../constants.js' - interface LDKeyPairProps { id?: string controller?: string @@ -53,7 +53,7 @@ export class Sr25519VerificationKey2020 extends LDKeyPair { // Used by CryptoLD harness for dispatching. public static readonly suite = SUITE_ID // Used by CryptoLD harness's fromKeyId() method. - public static readonly SUITE_CONTEXT = KILT_CREDENTIAL_CONTEXT_URL + public static readonly SUITE_CONTEXT = KiltCredentialV1.CONTEXT_URL public type: string public publicKeyBase58: string @@ -65,10 +65,10 @@ export class Sr25519VerificationKey2020 extends LDKeyPair { * * @param options - Options hashmap. * @param options.publicKeyBase58 - Base58btc encoded Public Key. - * @param [options.controller] - Controller DID or document url. - * @param [options.id] - The key ID. - * @param [options.privateKeyBase58] - Base58btc Private Key. - * @param [options.revoked] - Timestamp of when the key has been + * @param options.controller - Controller DID or document url. + * @param options.id - The key ID. + * @param options.privateKeyBase58 - Base58btc Private Key. + * @param options.revoked - Timestamp of when the key has been * revoked, in RFC3339 format. If not present, the key itself is considered * not revoked. Note that this mechanism is slightly different than DID * Document key revocation, where a DID controller can revoke a key from @@ -93,8 +93,8 @@ export class Sr25519VerificationKey2020 extends LDKeyPair { /** * Generates a KeyPair with an optional deterministic seed. * - * @param [options={}] - See LDKeyPair docstring for full list. - * @param [options.seed] - + * @param options - See LDKeyPair docstring for full list. + * @param options.seed - * a 32-byte array seed for a deterministic key. * * @returns Generates a key pair. @@ -158,10 +158,10 @@ export class Sr25519VerificationKey2020 extends LDKeyPair { * Exports the serialized representation of the KeyPair * and other information that json-ld Signatures can use to form a proof. * - * @param [options={}] - Options hashmap. - * @param [options.publicKey] - Export public key material? - * @param [options.privateKey] - Export private key material? - * @param [options.includeContext] - Include JSON-LD context? + * @param options - Options hashmap. + * @param options.publicKey - Export public key material? + * @param options.privateKey - Export private key material? + * @param options.includeContext - Include JSON-LD context? * * @returns A public key object * information used in verification methods by signatures. diff --git a/packages/vc-export/src/vc-js/suites/Sr25519VerificationKey2020.spec.ts b/packages/vc-export/src/suites/Sr25519VerificationKey2020.spec.ts similarity index 100% rename from packages/vc-export/src/vc-js/suites/Sr25519VerificationKey2020.spec.ts rename to packages/vc-export/src/suites/Sr25519VerificationKey2020.spec.ts diff --git a/packages/vc-export/src/vc-js/suites/index.ts b/packages/vc-export/src/suites/index.ts similarity index 100% rename from packages/vc-export/src/vc-js/suites/index.ts rename to packages/vc-export/src/suites/index.ts diff --git a/packages/vc-export/src/vc-js/suites/types.ts b/packages/vc-export/src/suites/types.ts similarity index 91% rename from packages/vc-export/src/vc-js/suites/types.ts rename to packages/vc-export/src/suites/types.ts index d14ae644d..7e5362515 100644 --- a/packages/vc-export/src/vc-js/suites/types.ts +++ b/packages/vc-export/src/suites/types.ts @@ -5,7 +5,7 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { DidUri } from '@kiltprotocol/types' +import type { Did } from '@kiltprotocol/types' export interface JSigsSigner { sign: (data: { data: Uint8Array }) => Promise @@ -24,5 +24,5 @@ export interface JSigsVerificationResult { verified: boolean error?: Error purposeResult?: { verified: boolean; error?: Error } - verificationMethod?: { id: string; type: string; controller: DidUri } + verificationMethod?: { id: string; type: string; controller: Did } } diff --git a/packages/vc-export/src/vc-js/suites/utils.ts b/packages/vc-export/src/suites/utils.ts similarity index 100% rename from packages/vc-export/src/vc-js/suites/utils.ts rename to packages/vc-export/src/suites/utils.ts diff --git a/packages/vc-export/src/types.ts b/packages/vc-export/src/types.ts index 2d439bdd8..083e851da 100644 --- a/packages/vc-export/src/types.ts +++ b/packages/vc-export/src/types.ts @@ -5,186 +5,4 @@ * found in the LICENSE file in the root directory of this source tree. */ -/* eslint-disable no-use-before-define */ - -import type { - ConformingDidKey, - DidUri, - Caip2ChainId, - IClaimContents, - ICType, -} from '@kiltprotocol/types' - -import type { - ATTESTATION_PROOF_V1_TYPE, - DEFAULT_CREDENTIAL_CONTEXTS, - JSON_SCHEMA_TYPE, - KILT_ATTESTER_DELEGATION_V1_TYPE, - KILT_ATTESTER_LEGITIMATION_V1_TYPE, - KILT_CREDENTIAL_IRI_PREFIX, - KILT_CREDENTIAL_TYPE, - KILT_REVOCATION_STATUS_V1_TYPE, - W3C_CREDENTIAL_CONTEXT_URL, - W3C_CREDENTIAL_TYPE, - W3C_PRESENTATION_TYPE, -} from './constants.js' - -export * from './vc-js/types.js' - -export type IPublicKeyRecord = ConformingDidKey - -export interface Proof { - type: string -} - -export interface UnsignedVc { - /** - * References to json-ld contexts defining the terms used. - */ - '@context': [typeof W3C_CREDENTIAL_CONTEXT_URL, ...string[]] - /** - * Credential identifier. - */ - id?: string - /** - * The credential types, which declare what data to expect in the credential. - */ - type: typeof W3C_CREDENTIAL_TYPE | string[] - /** - * Claims about the subjects of the credential. - */ - credentialSubject: { id?: string } - /** - * The entity that issued the credential. - */ - issuer: string - /** - * When the credential was issued. - */ - issuanceDate: string - /** - * If true, this credential can only be presented and used by its subject. - */ - nonTransferable?: boolean - /** - * Contains json schema for the validation of credentialSubject claims. - */ - credentialSchema?: { - id?: string - type: string - } - /** - * Contains credentials status method. - */ - credentialStatus?: { - id: string - type: string - } -} - -export interface VerifiableCredential extends UnsignedVc { - /** - * Cryptographic proof that makes the credential tamper-evident. - */ - proof: Proof | Proof[] -} - -export interface VerifiablePresentation { - id?: string - '@context': [typeof W3C_CREDENTIAL_CONTEXT_URL, ...string[]] - type: [typeof W3C_PRESENTATION_TYPE, ...string[]] - verifiableCredential: VerifiableCredential | VerifiableCredential[] - holder: DidUri - proof?: Proof | Proof[] - expirationDate?: string - issuanceDate?: string - verifier?: string -} - -export interface KiltAttestationProofV1 extends Proof { - type: typeof ATTESTATION_PROOF_V1_TYPE - block: string - commitments: string[] - salt: string[] -} - -export interface JsonSchema2023 { - id: string - type: typeof JSON_SCHEMA_TYPE -} - -export interface KiltRevocationStatusV1 { - id: Caip2ChainId - type: typeof KILT_REVOCATION_STATUS_V1_TYPE -} - -interface IssuerBacking { - id: string - type: string -} - -export interface KiltAttesterLegitimationV1 extends IssuerBacking { - id: KiltCredentialV1['id'] - type: typeof KILT_ATTESTER_LEGITIMATION_V1_TYPE - verifiableCredential?: KiltCredentialV1 -} - -export interface KiltAttesterDelegationV1 extends IssuerBacking { - id: `kilt:delegation/${string}` - type: typeof KILT_ATTESTER_DELEGATION_V1_TYPE - delegators?: DidUri[] -} - -export interface CredentialSubject extends IClaimContents { - '@context': { - '@vocab': string - } - id: DidUri -} - -export interface KiltCredentialV1 extends VerifiableCredential { - /** - * References to json-ld contexts defining the terms used. - */ - '@context': typeof DEFAULT_CREDENTIAL_CONTEXTS - /** - * Credential identifier. - */ - id: `${typeof KILT_CREDENTIAL_IRI_PREFIX}${string}` - /** - * The credential types, which declare what data to expect in the credential. - */ - type: Array< - typeof W3C_CREDENTIAL_TYPE | typeof KILT_CREDENTIAL_TYPE | ICType['$id'] - > - /** - * Claims about the subjects of the credential. - */ - credentialSubject: CredentialSubject - /** - * The entity that issued the credential. - */ - issuer: DidUri - /** - * If true, this credential can only be presented and used by its subject. - */ - nonTransferable: true - /** - * Contains json schema for the validation of credentialSubject claims. - */ - credentialSchema: JsonSchema2023 - /** - * Contains credentials status method. - */ - credentialStatus: KiltRevocationStatusV1 - /** - * Contains information that can help to corroborate trust in the issuer. - */ - federatedTrustModel?: Array< - KiltAttesterDelegationV1 | KiltAttesterLegitimationV1 - > - /** - * Cryptographic proof that makes the credential tamper-evident. - */ - proof: KiltAttestationProofV1 -} +export * from './suites/types.js' diff --git a/packages/vc-export/src/vc-js/examples/ICredentialExample.json b/packages/vc-export/src/vc-js/examples/ICredentialExample.json deleted file mode 100644 index 09cbcda5d..000000000 --- a/packages/vc-export/src/vc-js/examples/ICredentialExample.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "claim": { - "cTypeHash": "0x3291bb126e33b4862d421bfaa1d2f272e6cdfc4f96658988fbcffea8914bd9ac", - "contents": { - "Email": "ingo@kilt.io" - }, - "owner": "did:kilt:4sJm5Zsvdi32hU88xbL3v6VQ877P4HLaWVYUXgcSyQR8URTu" - }, - "claimHashes": [ - "0x8113c20adf617adb9fe3a2c61cc2614bf02cd58e0e42cb31356e7f5c052e65de", - "0xa19685266e47579ecd72c30b31a928eef0bd71b7d297511c8bef952f2a5822a1" - ], - "claimNonceMap": { - "0x02eaa62e144281c9f73355cdb5e1f4edf27adc4e0510c2e60dca793c794dba6a": "e8f78c9e-70b5-48ea-990f-97782bc62c84", - "0x1767f2220a9b07e22b73c5b36fa90e6f14338b6198e7696daf464914942734ab": "1f454fcc-dc73-46d4-9478-db5e4c8dda3b" - }, - "legitimations": [], - "delegationId": null, - "rootHash": "0x4fb274ed275ae1c3a719428088ffde0bbc10e456eba8aedc9687178a4ce47c20", - "claimerSignature": { - "keyId": "did:kilt:4sJm5Zsvdi32hU88xbL3v6VQ877P4HLaWVYUXgcSyQR8URTu#0xad991c68c9f1c6c4f869fa19a217db30aff0f74963ca7e26206f7102b229df5b", - "signature": "0xfa71e745c21d7b4ec6f8d54ac5b2fea9bacf91ffb8f56b359a3e5af0119957030a28944011690d404c59ea814c5324298db0ef5b3332868bbdcf33b25bb9f388" - } -} \ No newline at end of file diff --git a/packages/vc-export/src/vc-js/index.ts b/packages/vc-export/src/vc-js/index.ts deleted file mode 100644 index 77bff9c05..000000000 --- a/packages/vc-export/src/vc-js/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -export * as suites from './suites/index.js' -export * as purposes from './purposes/index.js' -export * from './documentLoader.js' -export { validationContexts } from './context/index.js' diff --git a/packages/vc-export/src/vc-js/types.ts b/packages/vc-export/src/vc-js/types.ts deleted file mode 100644 index 083e851da..000000000 --- a/packages/vc-export/src/vc-js/types.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Copyright (c) 2018-2023, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -export * from './suites/types.js' diff --git a/packages/vc-export/tsconfig.build.json b/packages/vc-export/tsconfig.build.json index d59aa31ce..9776d9a24 100644 --- a/packages/vc-export/tsconfig.build.json +++ b/packages/vc-export/tsconfig.build.json @@ -13,5 +13,6 @@ "exclude": [ "coverage", "**/*.spec.ts", + "**/__mocks__" ] } diff --git a/tests/breakingChanges/BreakingChanges.spec.ts b/tests/breakingChanges/BreakingChanges.spec.ts index 0f97a6025..c2d3252f5 100644 --- a/tests/breakingChanges/BreakingChanges.spec.ts +++ b/tests/breakingChanges/BreakingChanges.spec.ts @@ -5,11 +5,16 @@ * found in the LICENSE file in the root directory of this source tree. */ -import { Did, Utils } from '@kiltprotocol/sdk-js' import nacl from 'tweetnacl' import { v4 } from 'uuid' -import { makeEncryptionKeyTool } from '../testUtils/index.js' +import { + createLightDidDocument, + parseDocumentFromLightDid, +} from '@kiltprotocol/did' +import { Crypto } from '@kiltprotocol/utils' + +import { makeEncryptionKey } from '../testUtils/index.js' jest.mock('uuid') jest.mocked(v4).mockReturnValue('1ee1307c-9e65-475d-9061-0b5bfd86d2f7') @@ -18,10 +23,10 @@ jest.mocked(v4).mockReturnValue('1ee1307c-9e65-475d-9061-0b5bfd86d2f7') jest.spyOn(nacl, 'randomBytes').mockReturnValue(new Uint8Array(24).fill(42)) function makeLightDidFromSeed(seed: string) { - const keypair = Utils.Crypto.makeKeypairFromUri(seed, 'sr25519') - const { keyAgreement, encrypt, decrypt } = makeEncryptionKeyTool(seed) + const keypair = Crypto.makeKeypairFromUri(seed, 'sr25519') + const { keyAgreement } = makeEncryptionKey(seed) - const did = Did.createLightDidDocument({ + const did = createLightDidDocument({ authentication: [keypair], keyAgreement, service: [ @@ -35,22 +40,22 @@ function makeLightDidFromSeed(seed: string) { ], }) - return { did, encrypt, decrypt } + return { did } } describe('Breaking Changes', () => { describe('Light DID', () => { - it('does not break the light did uri generation', () => { + it('does not break the light did generation', () => { const { did } = makeLightDidFromSeed( '0x127f2375faf3472c2f94ffcdd5424590b27294631f2cb8041407e501bc97c44c' ) - expect(did.uri).toMatchInlineSnapshot( + expect(did.id).toMatchInlineSnapshot( `"did:kilt:light:004quk8nu1MLvzdoT4fE6SJsLS4fFpyvuGz7sQpMF7ZAWTDoF5:z1msTRicERqs59nwMvp3yzMRBhUYGmkum7ehY7rtKQc8HzfEx4b4eyRhrc37ZShT3oG7E89x89vaG9W4hRxPS23EAFnCSeVbVRrKGJmFQvYhjgKSMmrGC7gSxgHe1a3g41uamhD49AEi13YVMkgeHpyEQJBy7N7gGyW7jTWFcwzAnws4wSazBVG1qHmVJrhmusoJoTfKTPKXkExKyur8Z341EkcRkHteY8dV3VjLXHnfhRW2yU9oM2cRm5ozgaufxrXsQBx33ygTW2wvrfzzXsYw4Bs6Vf2tC3ipBTDcKyCk6G88LYnzBosRM15W3KmDRciJ2iPjqiQkhYm77EQyaw"` ) expect( - Did.parseDocumentFromLightDid( + parseDocumentFromLightDid( 'did:kilt:light:004quk8nu1MLvzdoT4fE6SJsLS4fFpyvuGz7sQpMF7ZAWTDoF5:z1msTRicERqs59nwMvp3yzMRBhUYGmkum7ehY7rtKQc8HzfEx4b4eyRhrc37ZShT3oG7E89x89vaG9W4hRxPS23EAFnCSeVbVRrKGJmFQvYhjgKSMmrGC7gSxgHe1a3g41uamhD49AEi13YVMkgeHpyEQJBy7N7gGyW7jTWFcwzAnws4wSazBVG1qHmVJrhmusoJoTfKTPKXkExKyur8Z341EkcRkHteY8dV3VjLXHnfhRW2yU9oM2cRm5ozgaufxrXsQBx33ygTW2wvrfzzXsYw4Bs6Vf2tC3ipBTDcKyCk6G88LYnzBosRM15W3KmDRciJ2iPjqiQkhYm77EQyaw' ) ).toMatchSnapshot() diff --git a/tests/bundle/bundle-test.ts b/tests/bundle/bundle-test.ts index 5e0c00cb9..312e600ed 100644 --- a/tests/bundle/bundle-test.ts +++ b/tests/bundle/bundle-test.ts @@ -7,116 +7,109 @@ /// +import type { ApiPromise } from '@polkadot/api' import type { + Did, DidDocument, - KeyringPair, - KiltEncryptionKeypair, - KiltKeyringPair, - NewDidEncryptionKey, - SignCallback, + DidUrl, + KiltAddress, + SignerInterface, + SubmittableExtrinsic, } from '@kiltprotocol/types' const { kilt } = window const { - Claim, - Attestation, ConfigService, - Credential, - CType, - Did, - Blockchain, - Utils: { Crypto, ss58Format }, - BalanceUtils, + Issuer, + Verifier, + Holder, + DidResolver, + signAndSubmitTx, + signerFromKeypair, } = kilt -ConfigService.set({ submitTxResolveOn: Blockchain.IS_IN_BLOCK }) - -function makeSignCallback( - keypair: KeyringPair -): (didDocument: DidDocument) => SignCallback { - return (didDocument) => { - return async function sign({ data, keyRelationship }) { - const keyId = didDocument[keyRelationship]?.[0].id - const keyType = didDocument[keyRelationship]?.[0].type - if (keyId === undefined || keyType === undefined) { - throw new Error( - `Key for purpose "${keyRelationship}" not found in did "${didDocument.uri}"` - ) - } - const signature = keypair.sign(data, { withType: false }) - return { signature, keyUri: `${didDocument.uri}${keyId}`, keyType } - } - } -} - -type StoreDidCallback = Parameters['2'] - -function makeStoreDidCallback(keypair: KiltKeyringPair): StoreDidCallback { - return async function sign({ data }) { - const signature = keypair.sign(data, { withType: false }) - return { - signature, - keyType: keypair.type, - } - } -} +async function authorizeTx( + api: ApiPromise, + call: SubmittableExtrinsic, + did: string, + signer: SignerInterface, + submitter: string, + nonce = 1 +) { + let authorized = api.tx.did.submitDidCall( + { + did: did.slice(9), + call, + blockNumber: await api.query.system.number(), + submitter, + txCounter: nonce, + }, + { ed25519: new Uint8Array(64) } + ) -function makeSigningKeypair( - seed: string, - type: KiltKeyringPair['type'] = 'sr25519' -): { - keypair: KiltKeyringPair - getSignCallback: (didDocument: DidDocument) => SignCallback - storeDidCallback: StoreDidCallback -} { - const keypair = Crypto.makeKeypairFromUri(seed, type) - const getSignCallback = makeSignCallback(keypair) - const storeDidCallback = makeStoreDidCallback(keypair) + const signature = await signer.sign({ data: authorized.args[0].toU8a() }) - return { - keypair, - getSignCallback, - storeDidCallback, - } -} + authorized = api.tx.did.submitDidCall(authorized.args[0].toU8a(), { + ed25519: signature, + }) -function makeEncryptionKeypair(seed: string): KiltEncryptionKeypair { - const { secretKey, publicKey } = Crypto.naclBoxPairFromSecret( - Crypto.hash(seed, 256) - ) - return { - secretKey, - publicKey, - type: 'x25519', - } + return authorized } -async function createFullDidFromKeypair( - payer: KiltKeyringPair, - keypair: KiltKeyringPair, - encryptionKey: NewDidEncryptionKey +async function createFullDid( + payer: SignerInterface<'Ed25519' | 'Sr25519', KiltAddress>, + keypair: { publicKey: Uint8Array; secretKey: Uint8Array } ) { const api = ConfigService.get('api') - const sign = makeStoreDidCallback(keypair) - const storeTx = await Did.getStoreTx( + const signer: SignerInterface = await signerFromKeypair({ + keypair, + algorithm: 'Ed25519', + }) + const address = signer.id + const getSigners: ( + didDocument: DidDocument + ) => Array> = (didDocument) => { + return ( + didDocument.verificationMethod?.map< + Array> + >(({ id }) => [ + { + ...signer, + id: `${didDocument.id}${id}`, + }, + ]) ?? [] + ).flat() + } + + let tx = api.tx.did.create( { - authentication: [keypair], - assertionMethod: [keypair], - capabilityDelegation: [keypair], - keyAgreement: [encryptionKey], + did: address, + submitter: payer.id, + newAttestationKey: { ed25519: keypair.publicKey }, }, - payer.address, - sign + { ed25519: new Uint8Array(64) } ) - await Blockchain.signAndSubmitTx(storeTx, payer) - const queryFunction = api.call.did?.query ?? api.call.didApi.queryDid - const encodedDidDetails = await queryFunction( - Did.toChain(Did.getFullDidUriFromKey(keypair)) + const signature = await signer.sign({ data: tx.args[0].toU8a() }) + tx = api.tx.did.create(tx.args[0].toU8a(), { ed25519: signature }) + + await signAndSubmitTx(tx, payer) + + const { didDocument } = await DidResolver.resolve( + `did:kilt:${address}` as Did, + {} ) - return Did.linkedInfoFromChain(encodedDidDetails).document + if (!didDocument) { + throw new Error(`failed to create did for account ${address}`) + } + + return { + didDocument, + getSigners, + address, + } } async function runAll() { @@ -125,94 +118,115 @@ async function runAll() { // Accounts console.log('Account setup started') - const FaucetSeed = - 'receive clutch item involve chaos clutch furnace arrest claw isolate okay together' - const payer = Crypto.makeKeypairFromUri(FaucetSeed) - - const { keypair: aliceKeypair, getSignCallback: aliceSign } = - makeSigningKeypair('//Alice') - const aliceEncryptionKey = makeEncryptionKeypair('//Alice//enc') - const alice = await createFullDidFromKeypair( - payer, - aliceKeypair, - aliceEncryptionKey + const faucet = { + publicKey: new Uint8Array([ + 238, 93, 102, 137, 215, 142, 38, 187, 91, 53, 176, 68, 23, 64, 160, 101, + 199, 189, 142, 253, 209, 193, 84, 34, 7, 92, 63, 43, 32, 33, 181, 210, + ]), + secretKey: new Uint8Array([ + 205, 253, 96, 36, 210, 176, 235, 162, 125, 84, 204, 146, 164, 76, 217, + 166, 39, 198, 155, 45, 189, 161, 94, 215, 229, 128, 133, 66, 81, 25, 174, + 3, + ]), + } + const payerSigner = await signerFromKeypair<'Ed25519', KiltAddress>({ + keypair: faucet, + algorithm: 'Ed25519', + }) + + console.log('faucet signer created') + + const { didDocument: alice, getSigners: aliceSign } = await createFullDid( + payerSigner, + { + publicKey: new Uint8Array([ + 136, 220, 52, 23, 213, 5, 142, 196, 180, 80, 62, 12, 18, 234, 26, 10, + 137, 190, 32, 15, 233, 137, 34, 66, 61, 67, 52, 1, 79, 166, 176, 238, + ]), + secretKey: new Uint8Array([ + 171, 248, 229, 189, 190, 48, 198, 86, 86, 192, 163, 203, 209, 129, 255, + 138, 86, 41, 74, 105, 223, 237, 210, 121, 130, 170, 206, 74, 118, 144, + 145, 21, + ]), + } ) - if (!alice.keyAgreement?.[0]) - throw new Error('Impossible: alice has no encryptionKey') console.log('alice setup done') - const { keypair: bobKeypair, getSignCallback: bobSign } = - makeSigningKeypair('//Bob') - const bobEncryptionKey = makeEncryptionKeypair('//Bob//enc') - const bob = await createFullDidFromKeypair( - payer, - bobKeypair, - bobEncryptionKey + const { didDocument: bob, getSigners: bobSign } = await createFullDid( + payerSigner, + { + publicKey: new Uint8Array([ + 209, 124, 45, 120, 35, 235, 242, 96, 253, 19, 143, 45, 126, 39, 209, 20, + 192, 20, 93, 150, 139, 95, 245, 0, 97, 37, 242, 65, 79, 173, 174, 105, + ]), + secretKey: new Uint8Array([ + 59, 123, 96, 175, 42, 188, 213, 123, 164, 1, 171, 57, 143, 132, 244, + 202, 84, 189, 107, 33, 64, 210, 80, 63, 188, 243, 40, 101, 53, 254, 63, + 241, + ]), + } ) - if (!bob.keyAgreement?.[0]) - throw new Error('Impossible: bob has no encryptionKey') + console.log('bob setup done') // Light DID Account creation workflow - const authPublicKey = Crypto.coToUInt8( + const authPublicKey = '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + + // const encPublicKey = + // '0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' + + const address = api.createType('Address', authPublicKey).toString() + const resolved = await DidResolver.resolve( + `did:kilt:light:01${address}:z1Ac9CMtYCTRWjetJfJqJoV7FcPDD9nHPHDHry7t3KZmvYe1HQP1tgnBuoG3enuGaowpF8V88sCxytDPDy6ZxhW` as Did, + {} ) - const encPublicKey = Crypto.coToUInt8( - '0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' - ) - const address = Crypto.encodeAddress(authPublicKey, ss58Format) - const testDid = Did.createLightDidDocument({ - authentication: [{ publicKey: authPublicKey, type: 'ed25519' }], - keyAgreement: [{ publicKey: encPublicKey, type: 'x25519' }], - }) if ( - testDid.uri !== - `did:kilt:light:01${address}:z1Ac9CMtYCTRWjetJfJqJoV7FcPDD9nHPHDHry7t3KZmvYe1HQP1tgnBuoG3enuGaowpF8V88sCxytDPDy6ZxhW` + !resolved.didDocument || + resolved.didDocument?.keyAgreement?.length !== 1 ) { throw new Error('DID Test Unsuccessful') - } else console.info(`light DID successfully created`) + } else console.info(`light DID successfully resolved`) // Chain DID workflow -> creation & deletion console.log('DID workflow started') - const { keypair, getSignCallback, storeDidCallback } = makeSigningKeypair( - '//Foo', - 'ed25519' - ) - - const didStoreTx = await Did.getStoreTx( - { authentication: [keypair] }, - payer.address, - storeDidCallback - ) - await Blockchain.signAndSubmitTx(didStoreTx, payer) - - const queryFunction = api.call.did?.query ?? api.call.didApi.queryDid - const encodedDidDetails = await queryFunction( - Did.toChain(Did.getFullDidUriFromKey(keypair)) - ) - const fullDid = Did.linkedInfoFromChain(encodedDidDetails).document - const resolved = await Did.resolve(fullDid.uri) + const { + didDocument: fullDid, + getSigners, + address: didAddress, + } = await createFullDid(payerSigner, { + publicKey: new Uint8Array([ + 157, 198, 166, 93, 125, 173, 238, 122, 17, 146, 49, 238, 62, 111, 140, 45, + 26, 6, 94, 42, 60, 167, 79, 19, 142, 20, 212, 5, 130, 44, 214, 190, + ]), + secretKey: new Uint8Array([ + 252, 195, 96, 143, 203, 194, 37, 74, 205, 243, 137, 71, 234, 82, 57, 46, + 212, 14, 113, 177, 1, 241, 62, 118, 184, 230, 121, 219, 17, 45, 36, 143, + ]), + }) if ( - resolved && - !resolved.metadata.deactivated && - resolved.document?.uri === fullDid.uri + fullDid.authentication?.length === 1 && + fullDid.assertionMethod?.length === 1 && + fullDid.id.endsWith(didAddress) ) { console.info('DID matches') } else { throw new Error('DIDs do not match') } - const deleteTx = await Did.authorizeTx( - fullDid.uri, - api.tx.did.delete(BalanceUtils.toFemtoKilt(0)), - getSignCallback(fullDid), - payer.address + const deleteTx = await authorizeTx( + api, + api.tx.did.delete(0), + fullDid.id, + getSigners(fullDid)[0], + payerSigner.id ) - await Blockchain.signAndSubmitTx(deleteTx, payer) - const resolvedAgain = await Did.resolve(fullDid.uri) - if (!resolvedAgain || resolvedAgain.metadata.deactivated) { + await signAndSubmitTx(deleteTx, payerSigner) + + const resolvedAgain = await DidResolver.resolve(fullDid.id, {}) + if (resolvedAgain.didDocumentMetadata.deactivated) { console.info('DID successfully deleted') } else { throw new Error('DID was not deleted') @@ -220,70 +234,108 @@ async function runAll() { // CType workflow console.log('CType workflow started') - const DriversLicense = CType.fromProperties('Drivers License', { - name: { - type: 'string', - }, - age: { - type: 'integer', - }, - }) - - const cTypeStoreTx = await Did.authorizeTx( - alice.uri, - api.tx.ctype.add(CType.toChain(DriversLicense)), - aliceSign(alice), - payer.address + const DriversLicenseDef = + '{"$schema":"ipfs://bafybeiah66wbkhqbqn7idkostj2iqyan2tstc4tpqt65udlhimd7hcxjyq/","additionalProperties":false,"properties":{"age":{"type":"integer"},"name":{"type":"string"}},"title":"Drivers License","type":"object"}' + + const cTypeStoreTx = await authorizeTx( + api, + api.tx.ctype.add(DriversLicenseDef), + alice.id, + aliceSign(alice)[0], + payerSigner.id ) - await Blockchain.signAndSubmitTx(cTypeStoreTx, payer) - await CType.verifyStored(DriversLicense) + const result = await signAndSubmitTx(cTypeStoreTx, payerSigner) + + const ctypeHash = result.events + ?.find((ev) => api.events.ctype.CTypeCreated.is(ev.event)) + ?.event.data[1].toHex() + + if (!ctypeHash || !(await api.query.ctype.ctypes(ctypeHash)).isSome) { + throw new Error('storing ctype failed') + } + + const DriversLicense = JSON.parse(DriversLicenseDef) + DriversLicense.$id = `kilt:ctype:${ctypeHash}` + console.info('CType successfully stored on chain') // Attestation workflow console.log('Attestation workflow started') const content = { name: 'Bob', age: 21 } - const claim = Claim.fromCTypeAndClaimContents( - DriversLicense, - content, - bob.uri - ) - const credential = Credential.fromClaim(claim) - if (!Credential.isICredential(credential)) - throw new Error('Not a valid Credential') - Credential.verifyDataIntegrity(credential) - console.info('Credential data verified') - if (credential.claim.contents !== content) + + const credential = await Issuer.createCredential({ + cType: DriversLicense, + claims: content, + subject: bob.id, + issuer: alice.id, + }) + + console.info('Credential subject conforms to CType') + + if ( + credential.credentialSubject.name !== content.name || + credential.credentialSubject.age !== content.age || + credential.credentialSubject.id !== bob.id + ) { throw new Error('Claim content inside Credential mismatching') + } - const presentation = await Credential.createPresentation({ - credential, - signCallback: bobSign(bob), + const issued = await Issuer.issue(credential, { + did: alice.id, + signers: [...(await aliceSign(alice)), payerSigner], + submitterAccount: payerSigner.id, }) - if (!Credential.isPresentation(presentation)) - throw new Error('Not a valid Presentation') - await Credential.verifySignature(presentation) - console.info('Presentation signature verified') - - const attestation = Attestation.fromCredentialAndDid(credential, alice.uri) - Attestation.verifyAgainstCredential(attestation, credential) - console.info('Attestation Data verified') - - const attestationStoreTx = await Did.authorizeTx( - alice.uri, - api.tx.attestation.add(attestation.claimHash, attestation.cTypeHash, null), - aliceSign(alice), - payer.address + console.info('Credential issued') + + const credentialResult = await Verifier.verifyCredential( + issued, + {}, + { + ctypeLoader: [DriversLicense], + } ) - await Blockchain.signAndSubmitTx(attestationStoreTx, payer) - const storedAttestation = Attestation.fromChain( - await api.query.attestation.attestations(credential.rootHash), - credential.rootHash + if (credentialResult.verified) { + console.info('Credential proof verified') + console.info('Credential status verified') + } else { + throw new Error(`Credential failed to verify: ${credentialResult.error}`, { + cause: credentialResult, + }) + } + + const challenge = crypto.randomUUID() + + const derived = await Holder.deriveProof(issued, { + disclose: { allBut: ['/credentialSubject/name'] }, + }) + + const presentation = await Holder.createPresentation( + [derived], + { + did: bob.id, + signers: await bobSign(bob), + }, + {}, + { + challenge, + } ) - if (storedAttestation?.revoked === false) { - console.info('Attestation verified with chain') + console.info('Presentation created') + + const presentationResult = await Verifier.verifyPresentation(presentation, { + presentation: { challenge }, + }) + if (presentationResult.verified) { + console.info('Presentation verified') } else { - throw new Error('Attestation not verifiable with chain') + throw new Error( + [ + 'Presentation failed to verify', + ...(presentationResult.error ?? []), + ].join('\n '), + { cause: presentationResult } + ) } } diff --git a/tests/integration/AccountLinking.spec.ts b/tests/integration/AccountLinking.spec.ts index 51b9da0ae..00591e07b 100644 --- a/tests/integration/AccountLinking.spec.ts +++ b/tests/integration/AccountLinking.spec.ts @@ -10,7 +10,7 @@ import { Keyring } from '@polkadot/keyring' import { BN } from '@polkadot/util' import { mnemonicGenerate } from '@polkadot/util-crypto' -import { BalanceUtils, disconnect } from '@kiltprotocol/core' +import { BalanceUtils, disconnect } from '@kiltprotocol/chain-helpers' import * as Did from '@kiltprotocol/did' import type { DidDocument, @@ -38,7 +38,7 @@ beforeAll(async () => { api = await initializeApi() paymentAccount = await createEndowedTestAccount() linkDeposit = api.consts.didLookup.deposit.toBn() -}, 40_000) +}, 60_000) describe('When there is an on-chain DID', () => { let did: DidDocument @@ -48,11 +48,11 @@ describe('When there is an on-chain DID', () => { describe('and a tx sender willing to link its account', () => { beforeAll(async () => { - didKey = makeSigningKeyTool() - newDidKey = makeSigningKeyTool() + didKey = await makeSigningKeyTool() + newDidKey = await makeSigningKeyTool() did = await createFullDidFromSeed(paymentAccount, didKey.keypair) newDid = await createFullDidFromSeed(paymentAccount, newDidKey.keypair) - }, 40_000) + }, 60_000) it('should be possible to associate the tx sender', async () => { // Check that no links exist expect( @@ -65,9 +65,9 @@ describe('When there is an on-chain DID', () => { const associateSenderTx = api.tx.didLookup.associateSender() const signedTx = await Did.authorizeTx( - did.uri, + did.id, associateSenderTx, - didKey.getSignCallback(did), + await didKey.getSigners(did), paymentAccount.address ) const balanceBefore = ( @@ -92,14 +92,14 @@ describe('When there is an on-chain DID', () => { ) const queryByAccount = Did.linkedInfoFromChain(encodedQueryByAccount) expect(queryByAccount.accounts).toStrictEqual([paymentAccount.address]) - expect(queryByAccount.document.uri).toStrictEqual(did.uri) + expect(queryByAccount.document.id).toStrictEqual(did.id) }, 30_000) it('should be possible to associate the tx sender to a new DID', async () => { const associateSenderTx = api.tx.didLookup.associateSender() const signedTx = await Did.authorizeTx( - newDid.uri, + newDid.id, associateSenderTx, - newDidKey.getSignCallback(newDid), + await newDidKey.getSigners(newDid), paymentAccount.address ) const balanceBefore = ( @@ -120,7 +120,7 @@ describe('When there is an on-chain DID', () => { ) const queryByAccount = Did.linkedInfoFromChain(encodedQueryByAccount) expect(queryByAccount.accounts).toStrictEqual([paymentAccount.address]) - expect(queryByAccount.document.uri).toStrictEqual(newDid.uri) + expect(queryByAccount.document.id).toStrictEqual(newDid.id) }, 30_000) it('should be possible for the sender to remove the link', async () => { const removeSenderTx = api.tx.didLookup.removeSenderAssociation() @@ -159,11 +159,13 @@ describe('When there is an on-chain DID', () => { skip = true return } - const keyTool = makeSigningKeyTool(keyType as KiltKeyringPair['type']) + const keyTool = await makeSigningKeyTool( + keyType as KiltKeyringPair['type'] + ) keypair = keyTool.keypair keypairChain = Did.accountToChain(keypair.address) - didKey = makeSigningKeyTool() - newDidKey = makeSigningKeyTool() + didKey = await makeSigningKeyTool() + newDidKey = await makeSigningKeyTool() did = await createFullDidFromSeed(paymentAccount, didKey.keypair) newDid = await createFullDidFromSeed(paymentAccount, newDidKey.keypair) }, 40_000) @@ -174,13 +176,13 @@ describe('When there is an on-chain DID', () => { } const args = await Did.associateAccountToChainArgs( keypair.address, - did.uri, + did.id, async (payload) => keypair.sign(payload, { withType: false }) ) const signedTx = await Did.authorizeTx( - did.uri, + did.id, api.tx.didLookup.associateAccount(...args), - didKey.getSignCallback(did), + await didKey.getSigners(did), paymentAccount.address ) const balanceBefore = ( @@ -204,21 +206,22 @@ describe('When there is an on-chain DID', () => { ) const queryByAccount = Did.linkedInfoFromChain(encodedQueryByAccount) expect(queryByAccount.accounts).toStrictEqual([keypair.address]) - expect(queryByAccount.document.uri).toStrictEqual(did.uri) + expect(queryByAccount.document.id).toStrictEqual(did.id) }) + it('should be possible to associate the account to a new DID while the sender pays the deposit', async () => { if (skip) { return } const args = await Did.associateAccountToChainArgs( keypair.address, - newDid.uri, + newDid.id, async (payload) => keypair.sign(payload, { withType: false }) ) const signedTx = await Did.authorizeTx( - newDid.uri, + newDid.id, api.tx.didLookup.associateAccount(...args), - newDidKey.getSignCallback(newDid), + await newDidKey.getSigners(newDid), paymentAccount.address ) const balanceBefore = ( @@ -239,8 +242,9 @@ describe('When there is an on-chain DID', () => { ) const queryByAccount = Did.linkedInfoFromChain(encodedQueryByAccount) expect(queryByAccount.accounts).toStrictEqual([keypair.address]) - expect(queryByAccount.document.uri).toStrictEqual(newDid.uri) + expect(queryByAccount.document.id).toStrictEqual(newDid.id) }) + it('should be possible for the DID to remove the link', async () => { if (skip) { return @@ -248,9 +252,9 @@ describe('When there is an on-chain DID', () => { const removeLinkTx = api.tx.didLookup.removeAccountAssociation(keypairChain) const signedTx = await Did.authorizeTx( - newDid.uri, + newDid.id, removeLinkTx, - newDidKey.getSignCallback(newDid), + await newDidKey.getSigners(newDid), paymentAccount.address ) const balanceBefore = ( @@ -271,7 +275,7 @@ describe('When there is an on-chain DID', () => { ) expect(encodedQueryByAccount.isNone).toBe(true) const encodedQueryByDid = await api.call.did.query( - Did.toChain(newDid.uri) + Did.toChain(newDid.id) ) const queryByDid = Did.linkedInfoFromChain(encodedQueryByDid) expect(queryByDid.accounts).toStrictEqual([]) @@ -290,8 +294,8 @@ describe('When there is an on-chain DID', () => { genericAccount.address, BalanceUtils.convertToTxUnit(new BN(10), 1) ) - didKey = makeSigningKeyTool() - newDidKey = makeSigningKeyTool() + didKey = await makeSigningKeyTool() + newDidKey = await makeSigningKeyTool() did = await createFullDidFromSeed(paymentAccount, didKey.keypair) newDid = await createFullDidFromSeed(paymentAccount, newDidKey.keypair) }, 40_000) @@ -299,13 +303,13 @@ describe('When there is an on-chain DID', () => { it('should be possible to associate the account while the sender pays the deposit', async () => { const args = await Did.associateAccountToChainArgs( genericAccount.address, - did.uri, + did.id, async (payload) => genericAccount.sign(payload, { withType: true }) ) const signedTx = await Did.authorizeTx( - did.uri, + did.id, api.tx.didLookup.associateAccount(...args), - didKey.getSignCallback(did), + await didKey.getSigners(did), paymentAccount.address ) const balanceBefore = ( @@ -330,15 +334,15 @@ describe('When there is an on-chain DID', () => { // Use generic substrate address prefix const queryByAccount = Did.linkedInfoFromChain(encodedQueryByAccount, 42) expect(queryByAccount.accounts).toStrictEqual([genericAccount.address]) - expect(queryByAccount.document.uri).toStrictEqual(did.uri) + expect(queryByAccount.document.id).toStrictEqual(did.id) }) it('should be possible to add a Web3 name for the linked DID and retrieve it starting from the linked account', async () => { const web3NameClaimTx = api.tx.web3Names.claim('test-name') const signedTx = await Did.authorizeTx( - did.uri, + did.id, web3NameClaimTx, - didKey.getSignCallback(did), + await didKey.getSigners(did), paymentAccount.address ) await submitTx(signedTx, paymentAccount) @@ -346,13 +350,15 @@ describe('When there is an on-chain DID', () => { // Check that the Web3 name has been linked to the DID const encodedQueryByW3n = await api.call.did.queryByWeb3Name('test-name') const queryByW3n = Did.linkedInfoFromChain(encodedQueryByW3n) - expect(queryByW3n.document.uri).toStrictEqual(did.uri) + expect(queryByW3n.document.id).toStrictEqual(did.id) // Check that it is possible to retrieve the web3 name from the account linked to the DID const encodedQueryByAccount = await api.call.did.queryByAccount( Did.accountToChain(genericAccount.address) ) const queryByAccount = Did.linkedInfoFromChain(encodedQueryByAccount) - expect(queryByAccount.web3Name).toStrictEqual('test-name') + expect(queryByAccount.document.alsoKnownAs).toStrictEqual([ + 'w3n:test-name', + ]) }) it('should be possible for the sender to remove the link', async () => { diff --git a/tests/integration/Attestation.spec.ts b/tests/integration/Attestation.spec.ts index 09f205af0..01651e6a6 100644 --- a/tests/integration/Attestation.spec.ts +++ b/tests/integration/Attestation.spec.ts @@ -7,13 +7,9 @@ import type { ApiPromise } from '@polkadot/api' -import { - Attestation, - Claim, - Credential, - CType, - disconnect, -} from '@kiltprotocol/core' +import { Attestation, CType } from '@kiltprotocol/credentials' +import { disconnect } from '@kiltprotocol/chain-helpers' +import { Claim, Credential } from '@kiltprotocol/legacy-credentials' import * as Did from '@kiltprotocol/did' import type { DidDocument, @@ -53,9 +49,9 @@ beforeAll(async () => { beforeAll(async () => { tokenHolder = await createEndowedTestAccount() - attesterKey = makeSigningKeyTool() - anotherAttesterKey = makeSigningKeyTool() - claimerKey = makeSigningKeyTool() + attesterKey = await makeSigningKeyTool() + anotherAttesterKey = await makeSigningKeyTool() + claimerKey = await makeSigningKeyTool() attester = await createFullDidFromSeed(tokenHolder, attesterKey.keypair) anotherAttester = await createFullDidFromSeed( tokenHolder, @@ -82,9 +78,9 @@ describe('handling attestations that do not exist', () => { it('Attestation.getRevokeTx', async () => { const draft = api.tx.attestation.revoke(claimHash, null) const authorized = await Did.authorizeTx( - attester.uri, + attester.id, draft, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await expect(submitTx(authorized, tokenHolder)).rejects.toMatchObject({ @@ -96,9 +92,9 @@ describe('handling attestations that do not exist', () => { it('Attestation.getRemoveTx', async () => { const draft = api.tx.attestation.remove(claimHash, null) const authorized = await Did.authorizeTx( - attester.uri, + attester.id, draft, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await expect(submitTx(authorized, tokenHolder)).rejects.toMatchObject({ @@ -113,9 +109,9 @@ describe('When there is an attester, claimer and ctype drivers license', () => { const ctypeExists = await isCtypeOnChain(driversLicenseCType) if (ctypeExists) return const tx = await Did.authorizeTx( - attester.uri, + attester.id, api.tx.ctype.add(CType.toChain(driversLicenseCType)), - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await submitTx(tx, tokenHolder) @@ -126,12 +122,12 @@ describe('When there is an attester, claimer and ctype drivers license', () => { const claim = Claim.fromCTypeAndClaimContents( driversLicenseCType, content, - claimer.uri + claimer.id ) const credential = Credential.fromClaim(claim) const presentation = await Credential.createPresentation({ credential, - signCallback: claimerKey.getSignCallback(claimer), + signers: await claimerKey.getSigners(claimer), }) expect(() => Credential.verifyDataIntegrity(presentation)).not.toThrow() await expect( @@ -146,14 +142,14 @@ describe('When there is an attester, claimer and ctype drivers license', () => { const claim = Claim.fromCTypeAndClaimContents( driversLicenseCType, content, - claimer.uri + claimer.id ) const credential = Credential.fromClaim(claim) expect(() => Credential.verifyDataIntegrity(credential)).not.toThrow() const presentation = await Credential.createPresentation({ credential, - signCallback: claimerKey.getSignCallback(claimer), + signers: await claimerKey.getSigners(claimer), }) await expect( Credential.verifySignature(presentation) @@ -162,7 +158,7 @@ describe('When there is an attester, claimer and ctype drivers license', () => { const attestation = Attestation.fromCredentialAndDid( presentation, - attester.uri + attester.id ) const storeTx = api.tx.attestation.add( attestation.claimHash, @@ -170,9 +166,9 @@ describe('When there is an attester, claimer and ctype drivers license', () => { null ) const authorizedStoreTx = await Did.authorizeTx( - attester.uri, + attester.id, storeTx, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await submitTx(authorizedStoreTx, tokenHolder) @@ -185,7 +181,7 @@ describe('When there is an attester, claimer and ctype drivers license', () => { await expect( Credential.verifyPresentation(presentation) - ).resolves.toMatchObject({ attester: attester.uri, revoked: false }) + ).resolves.toMatchObject({ attester: attester.id, revoked: false }) // Claim the deposit back by submitting the reclaimDeposit extrinsic with the deposit payer's account. const reclaimTx = api.tx.attestation.reclaimDeposit(attestation.claimHash) @@ -207,14 +203,14 @@ describe('When there is an attester, claimer and ctype drivers license', () => { const claim = Claim.fromCTypeAndClaimContents( driversLicenseCType, content, - claimer.uri + claimer.id ) const credential = Credential.fromClaim(claim) expect(() => Credential.verifyDataIntegrity(credential)).not.toThrow() const presentation = await Credential.createPresentation({ credential, - signCallback: claimerKey.getSignCallback(claimer), + signers: await claimerKey.getSigners(claimer), }) await expect( Credential.verifySignature(presentation) @@ -222,9 +218,9 @@ describe('When there is an attester, claimer and ctype drivers license', () => { const attestation = Attestation.fromCredentialAndDid( presentation, - attester.uri + attester.id ) - const { keypair, getSignCallback } = makeSigningKeyTool() + const { keypair, getSigners } = await makeSigningKeyTool() const storeTx = api.tx.attestation.add( attestation.claimHash, @@ -232,9 +228,9 @@ describe('When there is an attester, claimer and ctype drivers license', () => { null ) const authorizedStoreTx = await Did.authorizeTx( - attester.uri, + attester.id, storeTx, - getSignCallback(attester), + await getSigners(attester), keypair.address ) await expect( @@ -259,15 +255,11 @@ describe('When there is an attester, claimer and ctype drivers license', () => { }) const content = { name: 'Ralph', weight: 120 } - const claim = Claim.fromCTypeAndClaimContents( - badCtype, - content, - claimer.uri - ) + const claim = Claim.fromCTypeAndClaimContents(badCtype, content, claimer.id) const credential = Credential.fromClaim(claim) const attestation = Attestation.fromCredentialAndDid( credential, - attester.uri + attester.id ) const storeTx = api.tx.attestation.add( attestation.claimHash, @@ -275,9 +267,9 @@ describe('When there is an attester, claimer and ctype drivers license', () => { null ) const authorizedStoreTx = await Did.authorizeTx( - attester.uri, + attester.id, storeTx, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) @@ -298,23 +290,23 @@ describe('When there is an attester, claimer and ctype drivers license', () => { const claim = Claim.fromCTypeAndClaimContents( driversLicenseCType, content, - claimer.uri + claimer.id ) credential = Credential.fromClaim(claim) const presentation = await Credential.createPresentation({ credential, - signCallback: claimerKey.getSignCallback(claimer), + signers: await claimerKey.getSigners(claimer), }) - attestation = Attestation.fromCredentialAndDid(credential, attester.uri) + attestation = Attestation.fromCredentialAndDid(credential, attester.id) const storeTx = api.tx.attestation.add( attestation.claimHash, attestation.cTypeHash, null ) const authorizedStoreTx = await Did.authorizeTx( - attester.uri, + attester.id, storeTx, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await submitTx(authorizedStoreTx, tokenHolder) @@ -335,9 +327,9 @@ describe('When there is an attester, claimer and ctype drivers license', () => { null ) const authorizedStoreTx = await Did.authorizeTx( - attester.uri, + attester.id, storeTx, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) @@ -354,25 +346,21 @@ describe('When there is an attester, claimer and ctype drivers license', () => { const claim = Claim.fromCTypeAndClaimContents( driversLicenseCType, content, - claimer.uri + claimer.id ) const fakeCredential = Credential.fromClaim(claim) - await Credential.createPresentation({ - credential, - signCallback: claimerKey.getSignCallback(claimer), - }) expect(() => - Attestation.verifyAgainstCredential(attestation, fakeCredential) + Credential.verifyAgainstAttestation(attestation, fakeCredential) ).toThrow() }, 15_000) it('should not be possible for the claimer to revoke an attestation', async () => { const revokeTx = api.tx.attestation.revoke(attestation.claimHash, null) const authorizedRevokeTx = await Did.authorizeTx( - claimer.uri, + claimer.id, revokeTx, - claimerKey.getSignCallback(claimer), + await claimerKey.getSigners(claimer), tokenHolder.address ) @@ -400,9 +388,9 @@ describe('When there is an attester, claimer and ctype drivers license', () => { const revokeTx = api.tx.attestation.revoke(attestation.claimHash, null) const authorizedRevokeTx = await Did.authorizeTx( - attester.uri, + attester.id, revokeTx, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await submitTx(authorizedRevokeTx, tokenHolder) @@ -416,15 +404,15 @@ describe('When there is an attester, claimer and ctype drivers license', () => { await expect( Credential.verifyCredential(credential) - ).resolves.toMatchObject({ attester: attester.uri, revoked: true }) + ).resolves.toMatchObject({ attester: attester.id, revoked: true }) }, 40_000) it('should be possible for the deposit payer to remove an attestation', async () => { const removeTx = api.tx.attestation.remove(attestation.claimHash, null) const authorizedRemoveTx = await Did.authorizeTx( - attester.uri, + attester.id, removeTx, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await submitTx(authorizedRemoveTx, tokenHolder) @@ -451,9 +439,9 @@ describe('When there is an attester, claimer and ctype drivers license', () => { CType.toChain(officialLicenseAuthorityCType) ) const authorizedStoreTx = await Did.authorizeTx( - attester.uri, + attester.id, storeTx, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await submitTx(authorizedStoreTx, tokenHolder) @@ -469,16 +457,12 @@ describe('When there is an attester, claimer and ctype drivers license', () => { LicenseType: "Driver's License", LicenseSubtypes: 'sports cars, tanks', }, - attester.uri + attester.id ) const credential1 = Credential.fromClaim(licenseAuthorization) - await Credential.createPresentation({ - credential: credential1, - signCallback: claimerKey.getSignCallback(claimer), - }) const licenseAuthorizationGranted = Attestation.fromCredentialAndDid( credential1, - anotherAttester.uri + anotherAttester.id ) const storeTx = api.tx.attestation.add( licenseAuthorizationGranted.claimHash, @@ -486,9 +470,9 @@ describe('When there is an attester, claimer and ctype drivers license', () => { null ) const authorizedStoreTx = await Did.authorizeTx( - anotherAttester.uri, + anotherAttester.id, storeTx, - anotherAttesterKey.getSignCallback(anotherAttester), + await anotherAttesterKey.getSigners(anotherAttester), tokenHolder.address ) await submitTx(authorizedStoreTx, tokenHolder) @@ -497,18 +481,15 @@ describe('When there is an attester, claimer and ctype drivers license', () => { const iBelieveICanDrive = Claim.fromCTypeAndClaimContents( driversLicenseCType, { name: 'Dominic Toretto', age: 52 }, - claimer.uri + claimer.id ) const credential2 = Credential.fromClaim(iBelieveICanDrive, { legitimations: [credential1], }) - await Credential.createPresentation({ - credential: credential2, - signCallback: claimerKey.getSignCallback(claimer), - }) + const licenseGranted = Attestation.fromCredentialAndDid( credential2, - attester.uri + attester.id ) const storeTx2 = api.tx.attestation.add( licenseGranted.claimHash, @@ -516,9 +497,9 @@ describe('When there is an attester, claimer and ctype drivers license', () => { null ) const authorizedStoreTx2 = await Did.authorizeTx( - attester.uri, + attester.id, storeTx2, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await submitTx(authorizedStoreTx2, tokenHolder) @@ -541,14 +522,23 @@ describe('When there is an attester, claimer and ctype drivers license', () => { expect(storedAttAuthorized.revoked).toBe(false) expect(() => - Attestation.verifyAgainstCredential(licenseGranted, credential2) + Credential.verifyAgainstAttestation(licenseGranted, credential2) ).not.toThrow() expect(() => - Attestation.verifyAgainstCredential( + Credential.verifyAgainstAttestation( licenseAuthorizationGranted, credential1 ) ).not.toThrow() + + const presentation = await Credential.createPresentation({ + credential: credential2, + signers: await claimerKey.getSigners(claimer), + }) + + await expect( + Credential.verifyPresentation(presentation) + ).resolves.toMatchObject({ revoked: false }) }, 70_000) }) }) diff --git a/tests/integration/Balance.spec.ts b/tests/integration/Balance.spec.ts index c05d58cc0..7451d4400 100644 --- a/tests/integration/Balance.spec.ts +++ b/tests/integration/Balance.spec.ts @@ -10,7 +10,7 @@ import { jest } from '@jest/globals' import { ApiPromise } from '@polkadot/api' import { BN } from '@polkadot/util' -import { disconnect } from '@kiltprotocol/core' +import { disconnect } from '@kiltprotocol/chain-helpers' import type { KeyringPair } from '@kiltprotocol/types' import { makeSigningKeyTool } from '../testUtils/index.js' @@ -88,10 +88,10 @@ describe('When there are haves and have-nots', () => { let faucet: KeyringPair beforeAll(async () => { - bobbyBroke = makeSigningKeyTool().keypair + bobbyBroke = (await makeSigningKeyTool()).keypair richieRich = devAlice faucet = devFaucet - stormyD = makeSigningKeyTool().keypair + stormyD = (await makeSigningKeyTool()).keypair }) it('can transfer tokens from the rich to the poor', async () => { diff --git a/tests/integration/Blockchain.spec.ts b/tests/integration/Blockchain.spec.ts index d54729eb0..e1a087148 100644 --- a/tests/integration/Blockchain.spec.ts +++ b/tests/integration/Blockchain.spec.ts @@ -8,8 +8,11 @@ import type { ApiPromise } from '@polkadot/api' import { BN } from '@polkadot/util' -import { Blockchain } from '@kiltprotocol/chain-helpers' -import { BalanceUtils, disconnect } from '@kiltprotocol/core' +import { + Blockchain, + BalanceUtils, + disconnect, +} from '@kiltprotocol/chain-helpers' import type { KeyringPair } from '@kiltprotocol/types' import { makeSigningKeyTool } from '../testUtils/index.js' @@ -26,7 +29,7 @@ describe('Chain returns specific errors, that we check for', () => { let charlie: KeyringPair beforeAll(async () => { faucet = devFaucet - testIdentity = makeSigningKeyTool().keypair + testIdentity = (await makeSigningKeyTool()).keypair charlie = devCharlie const transferTx = api.tx.balances.transfer( diff --git a/tests/integration/Ctypes.spec.ts b/tests/integration/Ctypes.spec.ts index 253a76ef8..72b59372a 100644 --- a/tests/integration/Ctypes.spec.ts +++ b/tests/integration/Ctypes.spec.ts @@ -7,7 +7,8 @@ import type { ApiPromise } from '@polkadot/api' -import { CType, disconnect } from '@kiltprotocol/core' +import { CType } from '@kiltprotocol/credentials' +import { disconnect } from '@kiltprotocol/chain-helpers' import * as Did from '@kiltprotocol/did' import type { DidDocument, ICType, KiltKeyringPair } from '@kiltprotocol/types' import { Crypto, UUID } from '@kiltprotocol/utils' @@ -46,18 +47,18 @@ describe('When there is an CtypeCreator and a verifier', () => { beforeAll(async () => { paymentAccount = await createEndowedTestAccount() - key = makeSigningKeyTool() + key = await makeSigningKeyTool() ctypeCreator = await createFullDidFromSeed(paymentAccount, key.keypair) }, 60_000) it('should not be possible to create a claim type w/o tokens', async () => { const cType = makeCType() - const { keypair, getSignCallback } = makeSigningKeyTool() + const { keypair, getSigners } = await makeSigningKeyTool() const storeTx = api.tx.ctype.add(CType.toChain(cType)) const authorizedStoreTx = await Did.authorizeTx( - ctypeCreator.uri, + ctypeCreator.id, storeTx, - getSignCallback(ctypeCreator), + await getSigners(ctypeCreator), keypair.address ) await expect(submitTx(authorizedStoreTx, keypair)).rejects.toThrowError() @@ -71,9 +72,9 @@ describe('When there is an CtypeCreator and a verifier', () => { const cType = makeCType() const storeTx = api.tx.ctype.add(CType.toChain(cType)) const authorizedStoreTx = await Did.authorizeTx( - ctypeCreator.uri, + ctypeCreator.id, storeTx, - key.getSignCallback(ctypeCreator), + await key.getSigners(ctypeCreator), paymentAccount.address ) await submitTx(authorizedStoreTx, paymentAccount) @@ -83,7 +84,7 @@ describe('When there is an CtypeCreator and a verifier', () => { cType.$id ) expect(originalCtype).toStrictEqual(cType) - expect(creator).toBe(ctypeCreator.uri) + expect(creator).toBe(ctypeCreator.id) await expect(CType.verifyStored(originalCtype)).resolves.not.toThrow() } }, 40_000) @@ -92,18 +93,18 @@ describe('When there is an CtypeCreator and a verifier', () => { const cType = makeCType() const storeTx = api.tx.ctype.add(CType.toChain(cType)) const authorizedStoreTx = await Did.authorizeTx( - ctypeCreator.uri, + ctypeCreator.id, storeTx, - key.getSignCallback(ctypeCreator), + await key.getSigners(ctypeCreator), paymentAccount.address ) await submitTx(authorizedStoreTx, paymentAccount) const storeTx2 = api.tx.ctype.add(CType.toChain(cType)) const authorizedStoreTx2 = await Did.authorizeTx( - ctypeCreator.uri, + ctypeCreator.id, storeTx2, - key.getSignCallback(ctypeCreator), + await key.getSigners(ctypeCreator), paymentAccount.address ) await expect( @@ -115,7 +116,7 @@ describe('When there is an CtypeCreator and a verifier', () => { if (hasBlockNumbers) { const retrievedCType = await CType.fetchFromChain(cType.$id) - expect(retrievedCType.creator).toBe(ctypeCreator.uri) + expect(retrievedCType.creator).toBe(ctypeCreator.id) } }, 45_000) diff --git a/tests/integration/Delegation.spec.ts b/tests/integration/Delegation.spec.ts index 325ab53e0..c953cbc62 100644 --- a/tests/integration/Delegation.spec.ts +++ b/tests/integration/Delegation.spec.ts @@ -8,23 +8,22 @@ import { ApiPromise } from '@polkadot/api' import { randomAsHex } from '@polkadot/util-crypto' +import { CType, DelegationNode } from '@kiltprotocol/credentials' +import * as Did from '@kiltprotocol/did' import { Attestation, - CType, Claim, Credential, - DelegationNode, - disconnect, -} from '@kiltprotocol/core' -import * as Did from '@kiltprotocol/did' +} from '@kiltprotocol/legacy-credentials' +import { disconnect } from '@kiltprotocol/sdk-js' import type { DidDocument, ICType, IDelegationNode, KiltKeyringPair, - SignCallback, + SignerInterface, } from '@kiltprotocol/types' -import { Permission, PermissionType } from '@kiltprotocol/types' +import { Permission, type PermissionType } from '@kiltprotocol/types' import { KeyTool, @@ -55,19 +54,19 @@ let attesterKey: KeyTool async function writeHierarchy( delegator: DidDocument, cTypeId: ICType['$id'], - sign: SignCallback + signers: readonly SignerInterface[] ): Promise { const rootNode = DelegationNode.newRoot({ - account: delegator.uri, + account: delegator.id, permissions: [Permission.DELEGATE], cTypeHash: CType.idToHash(cTypeId), }) const storeTx = await rootNode.getStoreTx() const authorizedStoreTx = await Did.authorizeTx( - delegator.uri, + delegator.id, storeTx, - sign, + signers, paymentAccount.address ) await submitTx(authorizedStoreTx, paymentAccount) @@ -80,20 +79,20 @@ async function addDelegation( parentId: DelegationNode['id'], delegator: DidDocument, delegate: DidDocument, - delegatorSign: SignCallback, - delegateSign: SignCallback, + delegatorSign: SignerInterface[], + delegateSign: SignerInterface[], permissions: PermissionType[] = [Permission.ATTEST, Permission.DELEGATE] ): Promise { const delegationNode = DelegationNode.newNode({ hierarchyId, parentId, - account: delegate.uri, + account: delegate.id, permissions, }) const signature = await delegationNode.delegateSign(delegate, delegateSign) const storeTx = await delegationNode.getStoreTx(signature) const authorizedStoreTx = await Did.authorizeTx( - delegator.uri, + delegator.id, storeTx, delegatorSign, paymentAccount.address @@ -108,9 +107,9 @@ beforeAll(async () => { beforeAll(async () => { paymentAccount = await createEndowedTestAccount() - rootKey = makeSigningKeyTool() - claimerKey = makeSigningKeyTool() - attesterKey = makeSigningKeyTool() + rootKey = await makeSigningKeyTool() + claimerKey = await makeSigningKeyTool() + attesterKey = await makeSigningKeyTool() attester = await createFullDidFromSeed(paymentAccount, attesterKey.keypair) root = await createFullDidFromSeed(paymentAccount, rootKey.keypair) claimer = await createFullDidFromSeed(paymentAccount, claimerKey.keypair) @@ -119,9 +118,9 @@ beforeAll(async () => { const storeTx = api.tx.ctype.add(CType.toChain(driversLicenseCType)) const authorizedStoreTx = await Did.authorizeTx( - attester.uri, + attester.id, storeTx, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), paymentAccount.address ) await submitTx(authorizedStoreTx, paymentAccount) @@ -136,15 +135,15 @@ it('should be possible to delegate attestation rights', async () => { const rootNode = await writeHierarchy( root, driversLicenseCType.$id, - rootKey.getSignCallback(root) + await rootKey.getSigners(root) ) const delegatedNode = await addDelegation( rootNode.id, rootNode.id, root, attester, - rootKey.getSignCallback(root), - attesterKey.getSignCallback(attester) + await rootKey.getSigners(root), + await attesterKey.getSigners(attester) ) await expect(rootNode.verify()).resolves.not.toThrow() await expect(delegatedNode.verify()).resolves.not.toThrow() @@ -158,15 +157,15 @@ describe('and attestation rights have been delegated', () => { rootNode = await writeHierarchy( root, driversLicenseCType.$id, - rootKey.getSignCallback(root) + await rootKey.getSigners(root) ) delegatedNode = await addDelegation( rootNode.id, rootNode.id, root, attester, - rootKey.getSignCallback(root), - attesterKey.getSignCallback(attester) + await rootKey.getSigners(root), + await attesterKey.getSigners(attester) ) await expect(rootNode.verify()).resolves.not.toThrow() @@ -181,14 +180,14 @@ describe('and attestation rights have been delegated', () => { const claim = Claim.fromCTypeAndClaimContents( driversLicenseCType, content, - claimer.uri + claimer.id ) const credential = Credential.fromClaim(claim, { delegationId: delegatedNode.id, }) const presentation = await Credential.createPresentation({ credential, - signCallback: claimerKey.getSignCallback(claimer), + signers: await claimerKey.getSigners(claimer), }) expect(() => Credential.verifyDataIntegrity(credential)).not.toThrow() await expect( @@ -198,7 +197,7 @@ describe('and attestation rights have been delegated', () => { const attestation = Attestation.fromCredentialAndDid( credential, - attester.uri + attester.id ) const storeTx = api.tx.attestation.add( attestation.claimHash, @@ -206,9 +205,9 @@ describe('and attestation rights have been delegated', () => { { Delegation: { subjectNodeId: delegatedNode.id } } ) const authorizedStoreTx = await Did.authorizeTx( - attester.uri, + attester.id, storeTx, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), paymentAccount.address ) await submitTx(authorizedStoreTx, paymentAccount) @@ -225,9 +224,9 @@ describe('and attestation rights have been delegated', () => { Delegation: { maxChecks: 1 }, }) const authorizedStoreTx2 = await Did.authorizeTx( - root.uri, + root.id, revokeTx, - rootKey.getSignCallback(root), + await rootKey.getSigners(root), paymentAccount.address ) await submitTx(authorizedStoreTx2, paymentAccount) @@ -243,19 +242,19 @@ describe('and attestation rights have been delegated', () => { describe('revocation', () => { let delegator: DidDocument - let delegatorSign: SignCallback + let delegatorSign: SignerInterface[] let firstDelegate: DidDocument - let firstDelegateSign: SignCallback + let firstDelegateSign: SignerInterface[] let secondDelegate: DidDocument - let secondDelegateSign: SignCallback + let secondDelegateSign: SignerInterface[] - beforeAll(() => { + beforeAll(async () => { delegator = root - delegatorSign = rootKey.getSignCallback(root) + delegatorSign = await rootKey.getSigners(root) firstDelegate = attester - firstDelegateSign = attesterKey.getSignCallback(attester) + firstDelegateSign = await attesterKey.getSigners(attester) secondDelegate = claimer - secondDelegateSign = claimerKey.getSignCallback(claimer) + secondDelegateSign = await claimerKey.getSigners(claimer) }) it('delegator can revoke but not remove delegation', async () => { @@ -274,9 +273,9 @@ describe('revocation', () => { ) // Test revocation - const revokeTx = await delegationA.getRevokeTx(delegator.uri) + const revokeTx = await delegationA.getRevokeTx(delegator.id) const authorizedRevokeTx = await Did.authorizeTx( - delegator.uri, + delegator.id, revokeTx, delegatorSign, paymentAccount.address @@ -289,7 +288,7 @@ describe('revocation', () => { // Change introduced in https://github.com/KILTprotocol/mashnet-node/pull/304 const removeTx = await delegationA.getRemoveTx() const authorizedRemoveTx = await Did.authorizeTx( - delegator.uri, + delegator.id, removeTx, delegatorSign, paymentAccount.address @@ -322,7 +321,7 @@ describe('revocation', () => { ) const revokeTx = api.tx.delegation.revokeDelegation(delegationRoot.id, 1, 1) const authorizedRevokeTx = await Did.authorizeTx( - firstDelegate.uri, + firstDelegate.id, revokeTx, firstDelegateSign, paymentAccount.address @@ -335,9 +334,9 @@ describe('revocation', () => { }) await expect(delegationRoot.verify()).resolves.not.toThrow() - const revokeTx2 = await delegationA.getRevokeTx(firstDelegate.uri) + const revokeTx2 = await delegationA.getRevokeTx(firstDelegate.id) const authorizedRevokeTx2 = await Did.authorizeTx( - firstDelegate.uri, + firstDelegate.id, revokeTx2, firstDelegateSign, paymentAccount.address @@ -369,9 +368,9 @@ describe('revocation', () => { secondDelegateSign ) delegationRoot = await delegationRoot.getLatestState() - const revokeTx = await delegationRoot.getRevokeTx(delegator.uri) + const revokeTx = await delegationRoot.getRevokeTx(delegator.id) const authorizedRevokeTx = await Did.authorizeTx( - delegator.uri, + delegator.id, revokeTx, delegatorSign, paymentAccount.address @@ -390,23 +389,23 @@ describe('Deposit claiming', () => { const rootNode = await writeHierarchy( root, driversLicenseCType.$id, - rootKey.getSignCallback(root) + await rootKey.getSigners(root) ) const delegatedNode = await addDelegation( rootNode.id, rootNode.id, root, root, - rootKey.getSignCallback(root), - rootKey.getSignCallback(root) + await rootKey.getSigners(root), + await rootKey.getSigners(root) ) const subDelegatedNode = await addDelegation( rootNode.id, delegatedNode.id, root, root, - rootKey.getSignCallback(root), - rootKey.getSignCallback(root) + await rootKey.getSigners(root), + await rootKey.getSigners(root) ) expect(await DelegationNode.fetch(delegatedNode.id)).not.toBeNull() @@ -439,7 +438,7 @@ describe('handling queries to data not on chain', () => { permissions: [0], hierarchyId: randomAsHex(32), parentId: randomAsHex(32), - account: attester.uri, + account: attester.id, }).getAttestationHashes() ).toEqual([]) }) @@ -450,15 +449,15 @@ describe('hierarchyDetails', () => { const rootNode = await writeHierarchy( root, driversLicenseCType.$id, - rootKey.getSignCallback(root) + await rootKey.getSigners(root) ) const delegatedNode = await addDelegation( rootNode.id, rootNode.id, root, attester, - rootKey.getSignCallback(root), - attesterKey.getSignCallback(attester) + await rootKey.getSigners(root), + await attesterKey.getSigners(attester) ) const details = await delegatedNode.getHierarchyDetails() diff --git a/tests/integration/Deposit.spec.ts b/tests/integration/Deposit.spec.ts index 92f4f2da1..429afaad7 100644 --- a/tests/integration/Deposit.spec.ts +++ b/tests/integration/Deposit.spec.ts @@ -8,13 +8,9 @@ import type { ApiPromise } from '@polkadot/api' import { BN } from '@polkadot/util' -import { - Attestation, - Claim, - Credential, - CType, - disconnect, -} from '@kiltprotocol/core' +import { Attestation, CType } from '@kiltprotocol/credentials' +import { disconnect } from '@kiltprotocol/chain-helpers' +import { Claim, Credential } from '@kiltprotocol/legacy-credentials' import * as Did from '@kiltprotocol/did' import type { DidDocument, @@ -22,7 +18,7 @@ import type { ICredential, KeyringPair, KiltKeyringPair, - SignCallback, + SignerInterface, SubmittableExtrinsic, } from '@kiltprotocol/types' import { @@ -50,21 +46,21 @@ let storedEndpointsCount: BN async function checkDeleteFullDid( identity: KiltKeyringPair, fullDid: DidDocument, - sign: SignCallback + sign: SignerInterface[] ): Promise { storedEndpointsCount = await api.query.did.didEndpointsCount( - Did.toChain(fullDid.uri) + Did.toChain(fullDid.id) ) const deleteDid = api.tx.did.delete(storedEndpointsCount) - tx = await Did.authorizeTx(fullDid.uri, deleteDid, sign, identity.address) + tx = await Did.authorizeTx(fullDid.id, deleteDid, sign, identity.address) const balanceBeforeDeleting = ( await api.query.system.account(identity.address) ).data const didResult = Did.documentFromChain( - await api.query.did.did(Did.toChain(fullDid.uri)) + await api.query.did.did(Did.toChain(fullDid.id)) ) const didDeposit = didResult.deposit @@ -84,16 +80,16 @@ async function checkReclaimFullDid( fullDid: DidDocument ): Promise { storedEndpointsCount = await api.query.did.didEndpointsCount( - Did.toChain(fullDid.uri) + Did.toChain(fullDid.id) ) - tx = api.tx.did.reclaimDeposit(Did.toChain(fullDid.uri), storedEndpointsCount) + tx = api.tx.did.reclaimDeposit(Did.toChain(fullDid.id), storedEndpointsCount) const balanceBeforeRevoking = ( await api.query.system.account(identity.address) ).data const didResult = Did.documentFromChain( - await api.query.did.did(Did.toChain(fullDid.uri)) + await api.query.did.did(Did.toChain(fullDid.id)) ) const didDeposit = didResult.deposit @@ -111,17 +107,17 @@ async function checkReclaimFullDid( async function checkRemoveFullDidAttestation( identity: KiltKeyringPair, fullDid: DidDocument, - sign: SignCallback, + sign: SignerInterface[], credential: ICredential ): Promise { - attestation = Attestation.fromCredentialAndDid(credential, fullDid.uri) + attestation = Attestation.fromCredentialAndDid(credential, fullDid.id) tx = api.tx.attestation.add( attestation.claimHash, attestation.cTypeHash, null ) - authorizedTx = await Did.authorizeTx(fullDid.uri, tx, sign, identity.address) + authorizedTx = await Did.authorizeTx(fullDid.id, tx, sign, identity.address) await submitTx(authorizedTx, identity) @@ -135,10 +131,10 @@ async function checkRemoveFullDidAttestation( const balanceBeforeRemoving = ( await api.query.system.account(identity.address) ).data - attestation = Attestation.fromCredentialAndDid(credential, fullDid.uri) + attestation = Attestation.fromCredentialAndDid(credential, fullDid.id) tx = api.tx.attestation.remove(attestation.claimHash, null) - authorizedTx = await Did.authorizeTx(fullDid.uri, tx, sign, identity.address) + authorizedTx = await Did.authorizeTx(fullDid.id, tx, sign, identity.address) await submitTx(authorizedTx, identity) @@ -154,24 +150,24 @@ async function checkRemoveFullDidAttestation( async function checkReclaimFullDidAttestation( identity: KiltKeyringPair, fullDid: DidDocument, - sign: SignCallback, + sign: SignerInterface[], credential: ICredential ): Promise { - attestation = Attestation.fromCredentialAndDid(credential, fullDid.uri) + attestation = Attestation.fromCredentialAndDid(credential, fullDid.id) tx = api.tx.attestation.add( attestation.claimHash, attestation.cTypeHash, null ) - authorizedTx = await Did.authorizeTx(fullDid.uri, tx, sign, identity.address) + authorizedTx = await Did.authorizeTx(fullDid.id, tx, sign, identity.address) await submitTx(authorizedTx, identity) const balanceBeforeReclaiming = ( await api.query.system.account(identity.address) ).data - attestation = Attestation.fromCredentialAndDid(credential, fullDid.uri) + attestation = Attestation.fromCredentialAndDid(credential, fullDid.id) tx = api.tx.attestation.reclaimDeposit(attestation.claimHash) @@ -196,28 +192,28 @@ async function checkReclaimFullDidAttestation( async function checkDeletedDidReclaimAttestation( identity: KiltKeyringPair, fullDid: DidDocument, - sign: SignCallback, + sign: SignerInterface[], credential: ICredential ): Promise { - attestation = Attestation.fromCredentialAndDid(credential, fullDid.uri) + attestation = Attestation.fromCredentialAndDid(credential, fullDid.id) tx = api.tx.attestation.add( attestation.claimHash, attestation.cTypeHash, null ) - authorizedTx = await Did.authorizeTx(fullDid.uri, tx, sign, identity.address) + authorizedTx = await Did.authorizeTx(fullDid.id, tx, sign, identity.address) await submitTx(authorizedTx, identity) storedEndpointsCount = await api.query.did.didEndpointsCount( - Did.toChain(fullDid.uri) + Did.toChain(fullDid.id) ) - attestation = Attestation.fromCredentialAndDid(credential, fullDid.uri) + attestation = Attestation.fromCredentialAndDid(credential, fullDid.id) const deleteDid = api.tx.did.delete(storedEndpointsCount) - tx = await Did.authorizeTx(fullDid.uri, deleteDid, sign, identity.address) + tx = await Did.authorizeTx(fullDid.id, deleteDid, sign, identity.address) await submitTx(tx, identity) @@ -229,7 +225,7 @@ async function checkDeletedDidReclaimAttestation( async function checkWeb3Deposit( identity: KiltKeyringPair, fullDid: DidDocument, - sign: SignCallback + sign: SignerInterface[] ): Promise { const web3Name = 'test-web3name' const balanceBeforeClaiming = ( @@ -239,7 +235,7 @@ async function checkWeb3Deposit( const depositAmount = api.consts.web3Names.deposit.toBn() const claimTx = api.tx.web3Names.claim(web3Name) let didAuthorizedTx = await Did.authorizeTx( - fullDid.uri, + fullDid.id, claimTx, sign, identity.address @@ -258,7 +254,7 @@ async function checkWeb3Deposit( const releaseTx = api.tx.web3Names.releaseByOwner() didAuthorizedTx = await Did.authorizeTx( - fullDid.uri, + fullDid.id, releaseTx, sign, identity.address @@ -283,26 +279,28 @@ beforeAll(async () => { }, 30_000) beforeAll(async () => { - keys = new Array(10).fill(0).map(() => makeSigningKeyTool()) + keys = await Promise.all( + new Array(10).fill(0).map(() => makeSigningKeyTool()) + ) const testAddresses = keys.map((val) => val.keypair.address) await endowAccounts(devFaucet, testAddresses) - const claimer = makeSigningKeyTool() + const claimer = await makeSigningKeyTool() const claimerLightDid = await createMinimalLightDidFromKeypair( claimer.keypair ) - const attesterKey = makeSigningKeyTool() + const attesterKey = await makeSigningKeyTool() const attester = await createFullDidFromSeed(devFaucet, attesterKey.keypair) const ctypeExists = await isCtypeOnChain(driversLicenseCType) if (!ctypeExists) { const extrinsic = await Did.authorizeTx( - attester.uri, + attester.id, api.tx.ctype.add(CType.toChain(driversLicenseCType)), - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), devFaucet.address ) await submitTx(extrinsic, devFaucet) @@ -316,13 +314,13 @@ beforeAll(async () => { const claim = Claim.fromCTypeAndClaimContents( driversLicenseCType, rawClaim, - claimerLightDid.uri + claimerLightDid.id ) credential = Credential.fromClaim(claim) await Credential.createPresentation({ credential, - signCallback: claimer.getSignCallback(claimerLightDid), + signers: await claimer.getSigners(claimerLightDid), }) }, 120_000) @@ -364,27 +362,27 @@ describe('Different deposits scenarios', () => { testFullDidFive = await createFullDidFromLightDid( keys[4].keypair, testDidFive, - keys[4].storeDidCallback + [keys[4].storeDidSigner] ) testFullDidSix = await createFullDidFromLightDid( keys[5].keypair, testDidSix, - keys[5].storeDidCallback + [keys[5].storeDidSigner] ) testFullDidSeven = await createFullDidFromLightDid( keys[6].keypair, testDidSeven, - keys[6].storeDidCallback + [keys[6].storeDidSigner] ) testFullDidEight = await createFullDidFromLightDid( keys[7].keypair, testDidEight, - keys[7].storeDidCallback + [keys[7].storeDidSigner] ) testFullDidNine = await createFullDidFromLightDid( keys[8].keypair, testDidNine, - keys[8].storeDidCallback + [keys[8].storeDidSigner] ) testFullDidTen = await createFullDidFromSeed( keys[9].keypair, @@ -397,7 +395,7 @@ describe('Different deposits scenarios', () => { await checkDeleteFullDid( keys[0].keypair, testFullDidOne, - keys[0].getSignCallback(testFullDidOne) + await keys[0].getSigners(testFullDidOne) ) ).toBe(true) }, 45_000) @@ -411,7 +409,7 @@ describe('Different deposits scenarios', () => { await checkRemoveFullDidAttestation( keys[2].keypair, testFullDidThree, - keys[2].getSignCallback(testFullDidThree), + await keys[2].getSigners(testFullDidThree), credential ) ).toBe(true) @@ -421,7 +419,7 @@ describe('Different deposits scenarios', () => { await checkReclaimFullDidAttestation( keys[3].keypair, testFullDidFour, - keys[3].getSignCallback(testFullDidFour), + await keys[3].getSigners(testFullDidFour), credential ) ).toBe(true) @@ -431,7 +429,7 @@ describe('Different deposits scenarios', () => { await checkDeleteFullDid( keys[4].keypair, testFullDidFive, - keys[4].getSignCallback(testFullDidFive) + await keys[4].getSigners(testFullDidFive) ) ).toBe(true) }, 90_000) @@ -445,7 +443,7 @@ describe('Different deposits scenarios', () => { await checkRemoveFullDidAttestation( keys[6].keypair, testFullDidSeven, - keys[6].getSignCallback(testFullDidSeven), + await keys[6].getSigners(testFullDidSeven), credential ) ).toBe(true) @@ -455,7 +453,7 @@ describe('Different deposits scenarios', () => { await checkReclaimFullDidAttestation( keys[7].keypair, testFullDidEight, - keys[7].getSignCallback(testFullDidEight), + await keys[7].getSigners(testFullDidEight), credential ) ).toBe(true) @@ -464,7 +462,7 @@ describe('Different deposits scenarios', () => { await checkDeletedDidReclaimAttestation( keys[8].keypair, testFullDidNine, - keys[8].getSignCallback(testFullDidNine), + await keys[8].getSigners(testFullDidNine), credential ) }, 120_000) @@ -473,7 +471,7 @@ describe('Different deposits scenarios', () => { await checkWeb3Deposit( keys[9].keypair, testFullDidTen, - keys[9].getSignCallback(testFullDidTen) + await keys[9].getSigners(testFullDidTen) ) ).toBe(true) }, 120_000) diff --git a/tests/integration/Did.spec.ts b/tests/integration/Did.spec.ts index c81635f47..b893e4a48 100644 --- a/tests/integration/Did.spec.ts +++ b/tests/integration/Did.spec.ts @@ -5,29 +5,31 @@ * found in the LICENSE file in the root directory of this source tree. */ +import type { + DidDocument, + KiltKeyringPair, + ResolutionResult, + Service, + SignerInterface, + VerificationMethod, +} from '@kiltprotocol/types' import type { ApiPromise } from '@polkadot/api' + import { BN } from '@polkadot/util' -import { CType, DelegationNode, disconnect } from '@kiltprotocol/core' +import { CType, DelegationNode } from '@kiltprotocol/credentials' import * as Did from '@kiltprotocol/did' -import { - DidDocument, - DidResolutionResult, - DidServiceEndpoint, - KiltKeyringPair, - NewDidEncryptionKey, - NewDidVerificationKey, - NewLightDidVerificationKey, - Permission, - SignCallback, -} from '@kiltprotocol/types' +import { disconnect } from '@kiltprotocol/sdk-js' +import { Permission } from '@kiltprotocol/types' import { UUID } from '@kiltprotocol/utils' +import type { KeyTool } from '../testUtils/index.js' + import { createFullDidFromSeed, createMinimalLightDidFromKeypair, - KeyTool, - makeEncryptionKeyTool, + getStoreTxFromDidDocument, + makeEncryptionKey, makeSigningKeyTool, } from '../testUtils/index.js' import { @@ -51,21 +53,19 @@ beforeAll(async () => { describe('write and didDeleteTx', () => { let did: DidDocument let key: KeyTool - let signCallback: SignCallback + let signers: SignerInterface[] beforeAll(async () => { - key = makeSigningKeyTool() + key = await makeSigningKeyTool() did = await createMinimalLightDidFromKeypair(key.keypair) - signCallback = key.getSignCallback(did) + signers = await key.getSigners(did) }) it('fails to create a new DID on chain with a different submitter than the one in the creation operation', async () => { const otherAccount = devBob - const tx = await Did.getStoreTx( - did, - otherAccount.address, - key.storeDidCallback - ) + const tx = await getStoreTxFromDidDocument(did, otherAccount.address, [ + key.storeDidSigner, + ]) await expect(submitTx(tx, paymentAccount)).rejects.toMatchObject({ isBadOrigin: true, @@ -73,8 +73,15 @@ describe('write and didDeleteTx', () => { }, 60_000) it('writes a new DID record to chain', async () => { - const newDid = Did.createLightDidDocument({ - authentication: did.authentication as [NewLightDidVerificationKey], + const { publicKeyMultibase } = did.verificationMethod?.find( + (vm) => vm.id === did.authentication?.[0] + ) as VerificationMethod + const { keyType, publicKey: authPublicKey } = + Did.multibaseKeyToDidKey(publicKeyMultibase) + const input: Did.CreateDocumentInput = { + authentication: [{ publicKey: authPublicKey, type: keyType }] as [ + Did.NewLightDidVerificationKey + ], service: [ { id: '#test-id-1', @@ -87,29 +94,32 @@ describe('write and didDeleteTx', () => { serviceEndpoint: ['x:test-url-2'], }, ], - }) + } - const tx = await Did.getStoreTx( - newDid, - paymentAccount.address, - key.storeDidCallback - ) + const tx = await Did.getStoreTx(input, paymentAccount.address, [ + key.storeDidSigner, + ]) await submitTx(tx, paymentAccount) - const fullDidUri = Did.getFullDidUri(newDid.uri) - const fullDidLinkedInfo = await api.call.did.query(Did.toChain(fullDidUri)) - const { document: fullDid } = Did.linkedInfoFromChain(fullDidLinkedInfo) + const fullDid = Did.getFullDidFromVerificationMethod({ + publicKeyMultibase, + }) + const fullDidLinkedInfo = await api.call.did.query(Did.toChain(fullDid)) + const { document: fullDidDocument } = + Did.linkedInfoFromChain(fullDidLinkedInfo) + + // this is to make sure we have signers for the full DID available (same keys, but different id) + signers.push( + ...signers.map(({ algorithm, sign }) => ({ + id: fullDidDocument.id + fullDidDocument.authentication?.[0], + algorithm, + sign, + })) + ) - expect(fullDid).toMatchObject({ - uri: fullDidUri, - authentication: [ - expect.objectContaining({ - // We cannot match the ID of the key because it will be defined by the blockchain while saving - publicKey: newDid.authentication[0].publicKey, - type: 'sr25519', - }), - ], + expect(fullDidDocument).toMatchObject({ + id: fullDid, service: [ { id: '#test-id-1', @@ -122,12 +132,27 @@ describe('write and didDeleteTx', () => { type: ['test-type-2'], }, ], + verificationMethod: [ + expect.objectContaining(>{ + controller: fullDid, + type: 'Multikey', + // We cannot match the ID of the key because it will be defined by the blockchain while saving + publicKeyMultibase: Did.keypairToMultibaseKey({ + type: 'sr25519', + publicKey: authPublicKey, + }), + }), + ], }) + expect(fullDidDocument.authentication).toHaveLength(1) + expect(fullDidDocument.keyAgreement).toBe(undefined) + expect(fullDidDocument.assertionMethod).toBe(undefined) + expect(fullDidDocument.capabilityDelegation).toBe(undefined) }, 60_000) it('should return no results for empty accounts', async () => { - const emptyDid = Did.getFullDidUriFromKey( - makeSigningKeyTool().authentication[0] + const emptyDid = Did.getFullDid( + (await makeSigningKeyTool()).keypair.address ) const encodedDid = Did.toChain(emptyDid) @@ -137,7 +162,7 @@ describe('write and didDeleteTx', () => { it('fails to delete the DID using a different submitter than the one specified in the DID operation or using a services count that is too low', async () => { // We verify that the DID to delete is on chain. const fullDidLinkedInfo = await api.call.did.query( - Did.toChain(Did.getFullDidUri(did.uri)) + Did.toChain(Did.getFullDid(did.id)) ) const { document: fullDid } = Did.linkedInfoFromChain(fullDidLinkedInfo) expect(fullDid).not.toBeNull() @@ -148,9 +173,9 @@ describe('write and didDeleteTx', () => { let call = api.tx.did.delete(new BN(10)) let submittable = await Did.authorizeTx( - fullDid.uri, + fullDid.id, call, - signCallback, + signers, // Use a different account than the submitter one otherAccount.address ) @@ -160,13 +185,13 @@ describe('write and didDeleteTx', () => { name: 'BadDidOrigin', }) - // We use 1 here and this should fail as there are two service endpoints stored. + // We use 1 here and this should fail as there are two services stored. call = api.tx.did.delete(new BN(1)) submittable = await Did.authorizeTx( - fullDid.uri, + fullDid.id, call, - signCallback, + signers, paymentAccount.address ) @@ -182,12 +207,12 @@ describe('write and didDeleteTx', () => { it('deletes DID from previous step', async () => { // We verify that the DID to delete is on chain. const fullDidLinkedInfo = await api.call.did.query( - Did.toChain(Did.getFullDidUri(did.uri)) + Did.toChain(Did.getFullDid(did.id)) ) const { document: fullDid } = Did.linkedInfoFromChain(fullDidLinkedInfo) expect(fullDid).not.toBeNull() - const encodedDid = Did.toChain(fullDid.uri) + const encodedDid = Did.toChain(fullDid.id) const linkedInfo = Did.linkedInfoFromChain( await api.call.did.query(encodedDid) ) @@ -195,9 +220,9 @@ describe('write and didDeleteTx', () => { const call = api.tx.did.delete(storedEndpointsCount) const submittable = await Did.authorizeTx( - fullDid.uri, + fullDid.id, call, - signCallback, + signers, paymentAccount.address ) @@ -214,32 +239,30 @@ describe('write and didDeleteTx', () => { }) it('creates and updates DID, and then reclaims the deposit back', async () => { - const { keypair, getSignCallback, storeDidCallback } = makeSigningKeyTool() + const { keypair, getSigners, storeDidSigner } = await makeSigningKeyTool() const newDid = await createMinimalLightDidFromKeypair(keypair) - const tx = await Did.getStoreTx( - newDid, - paymentAccount.address, - storeDidCallback - ) + const tx = await getStoreTxFromDidDocument(newDid, paymentAccount.address, [ + storeDidSigner, + ]) await submitTx(tx, paymentAccount) // This will better be handled once we have the UpdateBuilder class, which encapsulates all the logic. let fullDidLinkedInfo = await api.call.did.query( - Did.toChain(Did.getFullDidUri(newDid.uri)) + Did.toChain(Did.getFullDid(newDid.id)) ) let { document: fullDid } = Did.linkedInfoFromChain(fullDidLinkedInfo) - const newKey = makeSigningKeyTool() + const newKey = await makeSigningKeyTool() const updateAuthenticationKeyCall = api.tx.did.setAuthenticationKey( Did.publicKeyToChain(newKey.authentication[0]) ) const tx2 = await Did.authorizeTx( - fullDid.uri, + fullDid.id, updateAuthenticationKeyCall, - getSignCallback(fullDid), + await getSigners(fullDid), paymentAccount.address ) await submitTx(tx2, paymentAccount) @@ -247,12 +270,12 @@ it('creates and updates DID, and then reclaims the deposit back', async () => { // Authentication key changed, so did must be updated. // Also this will better be handled once we have the UpdateBuilder class, which encapsulates all the logic. fullDidLinkedInfo = await api.call.did.query( - Did.toChain(Did.getFullDidUri(newDid.uri)) + Did.toChain(Did.getFullDid(newDid.id)) ) fullDid = Did.linkedInfoFromChain(fullDidLinkedInfo).document - // Add a new service endpoint - const newEndpoint: DidServiceEndpoint = { + // Add a new service + const newEndpoint: Did.NewService = { id: '#new-endpoint', type: ['new-type'], serviceEndpoint: ['x:new-url'], @@ -262,29 +285,29 @@ it('creates and updates DID, and then reclaims the deposit back', async () => { ) const tx3 = await Did.authorizeTx( - fullDid.uri, + fullDid.id, updateEndpointCall, - newKey.getSignCallback(fullDid), + await newKey.getSigners(fullDid), paymentAccount.address ) await submitTx(tx3, paymentAccount) - const encodedDid = Did.toChain(fullDid.uri) + const encodedDid = Did.toChain(fullDid.id) const linkedInfo = Did.linkedInfoFromChain( await api.call.did.query(encodedDid) ) - expect(Did.getService(linkedInfo.document, newEndpoint.id)).toStrictEqual( - newEndpoint - ) + expect( + linkedInfo.document.service?.find((s) => s.id === newEndpoint.id) + ).toStrictEqual(newEndpoint) - // Delete the added service endpoint + // Delete the added service const removeEndpointCall = api.tx.did.removeServiceEndpoint( - Did.resourceIdToChain(newEndpoint.id) + Did.fragmentIdToChain(newEndpoint.id) ) const tx4 = await Did.authorizeTx( - fullDid.uri, + fullDid.id, removeEndpointCall, - newKey.getSignCallback(fullDid), + await newKey.getSigners(fullDid), paymentAccount.address ) await submitTx(tx4, paymentAccount) @@ -293,7 +316,9 @@ it('creates and updates DID, and then reclaims the deposit back', async () => { const linkedInfo2 = Did.linkedInfoFromChain( await api.call.did.query(encodedDid) ) - expect(Did.getService(linkedInfo2.document, newEndpoint.id)).toBe(undefined) + expect( + linkedInfo2.document.service?.find((s) => s.id === newEndpoint.id) + ).toBe(undefined) // Claim the deposit back const storedEndpointsCount = linkedInfo2.document.service?.length ?? 0 @@ -308,8 +333,10 @@ it('creates and updates DID, and then reclaims the deposit back', async () => { describe('DID migration', () => { it('migrates light DID with ed25519 auth key and encryption key', async () => { - const { storeDidCallback, authentication } = makeSigningKeyTool('ed25519') - const { keyAgreement } = makeEncryptionKeyTool( + const { storeDidSigner, authentication } = await makeSigningKeyTool( + 'ed25519' + ) + const { keyAgreement } = makeEncryptionKey( '0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' ) const lightDid = Did.createLightDidDocument({ @@ -317,98 +344,116 @@ describe('DID migration', () => { keyAgreement, }) - const storeTx = await Did.getStoreTx( + const storeTx = await getStoreTxFromDidDocument( lightDid, paymentAccount.address, - storeDidCallback + [storeDidSigner] ) await submitTx(storeTx, paymentAccount) - const migratedFullDidUri = Did.getFullDidUri(lightDid.uri) + const migratedFullDid = Did.getFullDid(lightDid.id) const migratedFullDidLinkedInfo = await api.call.did.query( - Did.toChain(migratedFullDidUri) + Did.toChain(migratedFullDid) ) - const { document: migratedFullDid } = Did.linkedInfoFromChain( + const { document: migratedFullDidDocument } = Did.linkedInfoFromChain( migratedFullDidLinkedInfo ) - expect(migratedFullDid).toMatchObject({ - uri: migratedFullDidUri, - authentication: [ - expect.objectContaining({ - publicKey: lightDid.authentication[0].publicKey, - type: 'ed25519', + expect(migratedFullDidDocument).toMatchObject(>{ + id: migratedFullDid, + verificationMethod: [ + expect.objectContaining(>{ + controller: migratedFullDid, + type: 'Multikey', + // We cannot match the ID of the key because it will be defined by the blockchain while saving + publicKeyMultibase: Did.keypairToMultibaseKey(authentication[0]), }), - ], - keyAgreement: [ - expect.objectContaining({ - publicKey: lightDid.keyAgreement?.[0].publicKey, - type: 'x25519', + expect.objectContaining(>{ + controller: migratedFullDid, + type: 'Multikey', + // We cannot match the ID of the key because it will be defined by the blockchain while saving + publicKeyMultibase: Did.keypairToMultibaseKey(keyAgreement[0]), }), ], }) + expect(migratedFullDidDocument.authentication).toHaveLength(1) + expect(migratedFullDidDocument.keyAgreement).toHaveLength(1) + expect(migratedFullDidDocument.assertionMethod).toBe(undefined) + expect(migratedFullDidDocument.capabilityDelegation).toBe(undefined) expect( - (await api.call.did.query(Did.toChain(migratedFullDid.uri))).isSome + (await api.call.did.query(Did.toChain(migratedFullDidDocument.id))).isSome ).toBe(true) - const { metadata } = (await Did.resolve( - lightDid.uri - )) as DidResolutionResult + const { didDocumentMetadata } = (await Did.resolve( + lightDid.id + )) as ResolutionResult - expect(metadata.canonicalId).toStrictEqual(migratedFullDid.uri) - expect(metadata.deactivated).toBe(false) + expect(didDocumentMetadata.canonicalId).toStrictEqual( + migratedFullDidDocument.id + ) + expect(didDocumentMetadata.deactivated).toBe(undefined) }) it('migrates light DID with sr25519 auth key', async () => { - const { authentication, storeDidCallback } = makeSigningKeyTool() + const { authentication, storeDidSigner } = await makeSigningKeyTool() const lightDid = Did.createLightDidDocument({ authentication, }) - const storeTx = await Did.getStoreTx( + const storeTx = await getStoreTxFromDidDocument( lightDid, paymentAccount.address, - storeDidCallback + [storeDidSigner] ) await submitTx(storeTx, paymentAccount) - const migratedFullDidUri = Did.getFullDidUri(lightDid.uri) + const migratedFullDid = Did.getFullDid(lightDid.id) const migratedFullDidLinkedInfo = await api.call.did.query( - Did.toChain(migratedFullDidUri) + Did.toChain(migratedFullDid) ) - const { document: migratedFullDid } = Did.linkedInfoFromChain( + const { document: migratedFullDidDocument } = Did.linkedInfoFromChain( migratedFullDidLinkedInfo ) - expect(migratedFullDid).toMatchObject({ - uri: migratedFullDidUri, - authentication: [ - expect.objectContaining({ - publicKey: lightDid.authentication[0].publicKey, - type: 'sr25519', + expect(migratedFullDidDocument).toMatchObject(>{ + id: migratedFullDid, + verificationMethod: [ + expect.objectContaining(>{ + controller: migratedFullDid, + type: 'Multikey', + // We cannot match the ID of the key because it will be defined by the blockchain while saving + publicKeyMultibase: Did.keypairToMultibaseKey(authentication[0]), }), ], }) + expect(migratedFullDidDocument.authentication).toHaveLength(1) + expect(migratedFullDidDocument.keyAgreement).toBe(undefined) + expect(migratedFullDidDocument.assertionMethod).toBe(undefined) + expect(migratedFullDidDocument.capabilityDelegation).toBe(undefined) expect( - (await api.call.did.query(Did.toChain(migratedFullDid.uri))).isSome + (await api.call.did.query(Did.toChain(migratedFullDidDocument.id))).isSome ).toBe(true) - const { metadata } = (await Did.resolve( - lightDid.uri - )) as DidResolutionResult + const { didDocumentMetadata } = (await Did.resolve( + lightDid.id + )) as ResolutionResult - expect(metadata.canonicalId).toStrictEqual(migratedFullDid.uri) - expect(metadata.deactivated).toBe(false) + expect(didDocumentMetadata.canonicalId).toStrictEqual( + migratedFullDidDocument.id + ) + expect(didDocumentMetadata.deactivated).toBe(undefined) }) - it('migrates light DID with ed25519 auth key, encryption key, and service endpoints', async () => { - const { storeDidCallback, authentication } = makeSigningKeyTool('ed25519') - const { keyAgreement } = makeEncryptionKeyTool( + it('migrates light DID with ed25519 auth key, encryption key, and services', async () => { + const { storeDidSigner, authentication } = await makeSigningKeyTool( + 'ed25519' + ) + const { keyAgreement } = makeEncryptionKey( '0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' ) - const service: DidServiceEndpoint[] = [ + const service: Did.NewService[] = [ { id: '#id-1', type: ['type-1'], @@ -421,33 +466,35 @@ describe('DID migration', () => { service, }) - const storeTx = await Did.getStoreTx( + const storeTx = await getStoreTxFromDidDocument( lightDid, paymentAccount.address, - storeDidCallback + [storeDidSigner] ) await submitTx(storeTx, paymentAccount) - const migratedFullDidUri = Did.getFullDidUri(lightDid.uri) + const migratedFullDid = Did.getFullDid(lightDid.id) const migratedFullDidLinkedInfo = await api.call.did.query( - Did.toChain(migratedFullDidUri) + Did.toChain(migratedFullDid) ) - const { document: migratedFullDid } = Did.linkedInfoFromChain( + const { document: migratedFullDidDocument } = Did.linkedInfoFromChain( migratedFullDidLinkedInfo ) - expect(migratedFullDid).toMatchObject({ - uri: migratedFullDidUri, - authentication: [ - expect.objectContaining({ - publicKey: lightDid.authentication[0].publicKey, - type: 'ed25519', + expect(migratedFullDidDocument).toMatchObject(>{ + id: migratedFullDid, + verificationMethod: [ + expect.objectContaining(>{ + controller: migratedFullDid, + type: 'Multikey', + // We cannot match the ID of the key because it will be defined by the blockchain while saving + publicKeyMultibase: Did.keypairToMultibaseKey(authentication[0]), }), - ], - keyAgreement: [ - expect.objectContaining({ - publicKey: lightDid.keyAgreement?.[0].publicKey, - type: 'x25519', + expect.objectContaining(>{ + controller: migratedFullDid, + type: 'Multikey', + // We cannot match the ID of the key because it will be defined by the blockchain while saving + publicKeyMultibase: Did.keypairToMultibaseKey(keyAgreement[0]), }), ], service: [ @@ -458,16 +505,22 @@ describe('DID migration', () => { }, ], }) + expect(migratedFullDidDocument.authentication).toHaveLength(1) + expect(migratedFullDidDocument.keyAgreement).toHaveLength(1) + expect(migratedFullDidDocument.assertionMethod).toBe(undefined) + expect(migratedFullDidDocument.capabilityDelegation).toBe(undefined) - const encodedDid = Did.toChain(migratedFullDid.uri) + const encodedDid = Did.toChain(migratedFullDidDocument.id) expect((await api.call.did.query(encodedDid)).isSome).toBe(true) - const { metadata } = (await Did.resolve( - lightDid.uri - )) as DidResolutionResult + const { didDocumentMetadata } = (await Did.resolve( + lightDid.id + )) as ResolutionResult - expect(metadata.canonicalId).toStrictEqual(migratedFullDid.uri) - expect(metadata.deactivated).toBe(false) + expect(didDocumentMetadata.canonicalId).toStrictEqual( + migratedFullDidDocument.id + ) + expect(didDocumentMetadata.deactivated).toBe(undefined) // Remove and claim the deposit back const linkedInfo = Did.linkedInfoFromChain( @@ -488,10 +541,12 @@ describe('DID migration', () => { describe('DID authorization', () => { // Light DIDs cannot authorize extrinsics let did: DidDocument - const { getSignCallback, storeDidCallback, authentication } = - makeSigningKeyTool('ed25519') + let signers: SignerInterface[] beforeAll(async () => { + const { getSigners, storeDidSigner, authentication } = + await makeSigningKeyTool('ed25519') + const createTx = await Did.getStoreTx( { authentication, @@ -499,22 +554,27 @@ describe('DID authorization', () => { capabilityDelegation: authentication, }, paymentAccount.address, - storeDidCallback + [storeDidSigner] ) await submitTx(createTx, paymentAccount) const didLinkedInfo = await api.call.did.query( - Did.toChain(Did.getFullDidUriFromKey(authentication[0])) + Did.toChain( + Did.getFullDidFromVerificationMethod({ + publicKeyMultibase: Did.keypairToMultibaseKey(authentication[0]), + }) + ) ) did = Did.linkedInfoFromChain(didLinkedInfo).document + signers = await getSigners(did) }, 60_000) it('authorizes ctype creation with DID signature', async () => { const cType = CType.fromProperties(UUID.generate(), {}) const call = api.tx.ctype.add(CType.toChain(cType)) const tx = await Did.authorizeTx( - did.uri, + did.id, call, - getSignCallback(did), + signers, paymentAccount.address ) await submitTx(tx, paymentAccount) @@ -524,14 +584,14 @@ describe('DID authorization', () => { it('no longer authorizes ctype creation after DID deletion', async () => { const linkedInfo = Did.linkedInfoFromChain( - await api.call.did.query(Did.toChain(did.uri)) + await api.call.did.query(Did.toChain(did.id)) ) const storedEndpointsCount = linkedInfo.document.service?.length ?? 0 const deleteCall = api.tx.did.delete(storedEndpointsCount) const tx = await Did.authorizeTx( - did.uri, + did.id, deleteCall, - getSignCallback(did), + signers, paymentAccount.address ) await submitTx(tx, paymentAccount) @@ -539,9 +599,9 @@ describe('DID authorization', () => { const cType = CType.fromProperties(UUID.generate(), {}) const call = api.tx.ctype.add(CType.toChain(cType)) const tx2 = await Did.authorizeTx( - did.uri, + did, // this is to trick the signer into signing the tx although the DID has been deactivated call, - getSignCallback(did), + signers, paymentAccount.address ) await expect(submitTx(tx2, paymentAccount)).rejects.toMatchObject({ @@ -556,7 +616,7 @@ describe('DID authorization', () => { describe('DID management batching', () => { describe('FullDidCreationBuilder', () => { it('Build a complete full DID', async () => { - const { keypair, storeDidCallback, authentication } = makeSigningKeyTool() + const { storeDidSigner, authentication } = await makeSigningKeyTool() const extrinsic = await Did.getStoreTx( { authentication, @@ -605,48 +665,75 @@ describe('DID management batching', () => { ], }, paymentAccount.address, - storeDidCallback + [storeDidSigner] ) await submitTx(extrinsic, paymentAccount) const fullDidLinkedInfo = await api.call.did.query( - Did.toChain(Did.getFullDidUriFromKey(authentication[0])) + Did.toChain( + Did.getFullDidFromVerificationMethod({ + publicKeyMultibase: Did.keypairToMultibaseKey(authentication[0]), + }) + ) ) const { document: fullDid } = Did.linkedInfoFromChain(fullDidLinkedInfo) expect(fullDid).not.toBeNull() - expect(fullDid).toMatchObject({ - authentication: [ + expect(fullDid.verificationMethod).toEqual>( + expect.arrayContaining([ expect.objectContaining({ - publicKey: keypair.publicKey, - type: 'sr25519', + // Authentication + controller: fullDid.id, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey(authentication[0]), }), - ], - assertionMethod: [ + // Assertion method expect.objectContaining({ - publicKey: new Uint8Array(32).fill(1), - type: 'sr25519', + controller: fullDid.id, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + type: 'sr25519', + publicKey: new Uint8Array(32).fill(1), + }), }), - ], - capabilityDelegation: [ + // Capability delegation expect.objectContaining({ - publicKey: new Uint8Array(33).fill(1), - type: 'ecdsa', + controller: fullDid.id, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + type: 'ecdsa', + publicKey: new Uint8Array(33).fill(1), + }), }), - ], - keyAgreement: [ + // Key agreement 1 expect.objectContaining({ - publicKey: new Uint8Array(32).fill(3), - type: 'x25519', + controller: fullDid.id, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + type: 'x25519', + publicKey: new Uint8Array(32).fill(1), + }), }), + // Key agreement 2 expect.objectContaining({ - publicKey: new Uint8Array(32).fill(2), - type: 'x25519', + controller: fullDid.id, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + type: 'x25519', + publicKey: new Uint8Array(32).fill(2), + }), }), + // Key agreement 3 expect.objectContaining({ - publicKey: new Uint8Array(32).fill(1), - type: 'x25519', + controller: fullDid.id, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + type: 'x25519', + publicKey: new Uint8Array(32).fill(3), + }), }), - ], + ]) + ) + expect(fullDid).toMatchObject(>{ service: [ { id: '#id-3', @@ -665,11 +752,15 @@ describe('DID management batching', () => { }, ], }) + expect(fullDid.authentication).toHaveLength(1) + expect(fullDid.assertionMethod).toHaveLength(1) + expect(fullDid.capabilityDelegation).toHaveLength(1) + expect(fullDid.keyAgreement).toHaveLength(3) }) it('Build a minimal full DID with an Ecdsa key', async () => { - const { keypair, storeDidCallback } = makeSigningKeyTool('ecdsa') - const didAuthKey: NewDidVerificationKey = { + const { keypair, storeDidSigner } = await makeSigningKeyTool('ecdsa') + const didAuthKey: Did.NewDidVerificationKey = { publicKey: keypair.publicKey, type: 'ecdsa', } @@ -677,29 +768,41 @@ describe('DID management batching', () => { const extrinsic = await Did.getStoreTx( { authentication: [didAuthKey] }, paymentAccount.address, - storeDidCallback + [storeDidSigner] ) await submitTx(extrinsic, paymentAccount) const fullDidLinkedInfo = await api.call.did.query( - Did.toChain(Did.getFullDidUriFromKey(didAuthKey)) + Did.toChain( + Did.getFullDidFromVerificationMethod({ + publicKeyMultibase: Did.keypairToMultibaseKey(didAuthKey), + }) + ) ) const { document: fullDid } = Did.linkedInfoFromChain(fullDidLinkedInfo) expect(fullDid).not.toBeNull() - expect(fullDid?.authentication).toMatchObject([ - { - publicKey: keypair.publicKey, - type: 'ecdsa', - }, - ]) + expect(fullDid).toMatchObject(>{ + verificationMethod: [ + // Authentication + expect.objectContaining(>{ + controller: fullDid.id, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey(didAuthKey), + }), + ], + }) + expect(fullDid.authentication).toHaveLength(1) + expect(fullDid.assertionMethod).toBe(undefined) + expect(fullDid.capabilityDelegation).toBe(undefined) + expect(fullDid.keyAgreement).toBe(undefined) }) }) describe('FullDidUpdateBuilder', () => { it('Build from a complete full DID and remove everything but the authentication key', async () => { - const { keypair, getSignCallback, storeDidCallback, authentication } = - makeSigningKeyTool() + const { keypair, getSigners, storeDidSigner, authentication } = + await makeSigningKeyTool() const createTx = await Did.getStoreTx( { @@ -740,12 +843,16 @@ describe('DID management batching', () => { ], }, paymentAccount.address, - storeDidCallback + [storeDidSigner] ) await submitTx(createTx, paymentAccount) const initialFullDidLinkedInfo = await api.call.did.query( - Did.toChain(Did.getFullDidUriFromKey(authentication[0])) + Did.toChain( + Did.getFullDidFromVerificationMethod({ + publicKeyMultibase: Did.keypairToMultibaseKey(authentication[0]), + }) + ) ) const { document: initialFullDid } = Did.linkedInfoFromChain( initialFullDidLinkedInfo @@ -756,26 +863,34 @@ describe('DID management batching', () => { const extrinsic = await Did.authorizeBatch({ batchFunction: api.tx.utility.batchAll, - did: initialFullDid.uri, + did: initialFullDid.id, extrinsics: [ api.tx.did.removeKeyAgreementKey( - Did.resourceIdToChain(encryptionKeys[0].id) + Did.fragmentIdToChain( + initialFullDid.verificationMethod!.find( + (vm) => vm.id === encryptionKeys[0] + )!.id + ) ), api.tx.did.removeKeyAgreementKey( - Did.resourceIdToChain(encryptionKeys[1].id) + Did.fragmentIdToChain( + initialFullDid.verificationMethod!.find( + (vm) => vm.id === encryptionKeys[1] + )!.id + ) ), api.tx.did.removeAttestationKey(), api.tx.did.removeDelegationKey(), api.tx.did.removeServiceEndpoint('id-1'), api.tx.did.removeServiceEndpoint('id-2'), ], - sign: getSignCallback(initialFullDid), + signers: await getSigners(initialFullDid), submitter: paymentAccount.address, }) await submitTx(extrinsic, paymentAccount) const finalFullDidLinkedInfo = await api.call.did.query( - Did.toChain(initialFullDid.uri) + Did.toChain(initialFullDid.id) ) const { document: finalFullDid } = Did.linkedInfoFromChain( finalFullDidLinkedInfo @@ -783,35 +898,45 @@ describe('DID management batching', () => { expect(finalFullDid).not.toBeNull() - expect( - finalFullDid.authentication[0] - ).toMatchObject({ - publicKey: keypair.publicKey, - type: 'sr25519', + expect(finalFullDid).toMatchObject(>{ + verificationMethod: [ + // Authentication + expect.objectContaining(>{ + controller: finalFullDid.id, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: keypair.publicKey, + type: 'sr25519', + }), + }), + ], }) - - expect(finalFullDid.keyAgreement).toBeUndefined() - expect(finalFullDid.assertionMethod).toBeUndefined() - expect(finalFullDid.capabilityDelegation).toBeUndefined() - expect(finalFullDid.service).toBeUndefined() + expect(finalFullDid.authentication).toHaveLength(1) + expect(finalFullDid.assertionMethod).toBe(undefined) + expect(finalFullDid.capabilityDelegation).toBe(undefined) + expect(finalFullDid.keyAgreement).toBe(undefined) }, 40_000) it('Correctly handles rotation of the authentication key', async () => { - const { authentication, getSignCallback, storeDidCallback } = - makeSigningKeyTool() + const { authentication, getSigners, storeDidSigner } = + await makeSigningKeyTool() const { authentication: [newAuthKey], - } = makeSigningKeyTool('ed25519') + } = await makeSigningKeyTool('ed25519') const createTx = await Did.getStoreTx( { authentication }, paymentAccount.address, - storeDidCallback + [storeDidSigner] ) await submitTx(createTx, paymentAccount) const initialFullDidLinkedInfo = await api.call.did.query( - Did.toChain(Did.getFullDidUriFromKey(authentication[0])) + Did.toChain( + Did.getFullDidFromVerificationMethod({ + publicKeyMultibase: Did.keypairToMultibaseKey(authentication[0]), + }) + ) ) const { document: initialFullDid } = Did.linkedInfoFromChain( initialFullDidLinkedInfo @@ -819,7 +944,7 @@ describe('DID management batching', () => { const extrinsic = await Did.authorizeBatch({ batchFunction: api.tx.utility.batchAll, - did: initialFullDid.uri, + did: initialFullDid.id, extrinsics: [ api.tx.did.addServiceEndpoint( Did.serviceToChain({ @@ -837,35 +962,55 @@ describe('DID management batching', () => { }) ), ], - sign: getSignCallback(initialFullDid), + signers: await getSigners(initialFullDid), submitter: paymentAccount.address, }) await submitTx(extrinsic, paymentAccount) const finalFullDidLinkedInfo = await api.call.did.query( - Did.toChain(initialFullDid.uri) + Did.toChain(initialFullDid.id) ) const { document: finalFullDid } = Did.linkedInfoFromChain( finalFullDidLinkedInfo ) expect(finalFullDid).not.toBeNull() - - expect(finalFullDid.authentication[0]).toMatchObject({ - publicKey: newAuthKey.publicKey, - type: newAuthKey.type, + expect(finalFullDid).toMatchObject(>{ + verificationMethod: [ + // Authentication + expect.objectContaining(>{ + controller: finalFullDid.id, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey({ + publicKey: newAuthKey.publicKey, + type: 'ed25519', + }), + }), + ], + service: [ + { + id: '#id-1', + type: ['type-1'], + serviceEndpoint: ['x:url-1'], + }, + { + id: '#id-2', + type: ['type-2'], + serviceEndpoint: ['x:url-2'], + }, + ], }) + expect(finalFullDid.authentication).toHaveLength(1) expect(finalFullDid.keyAgreement).toBeUndefined() expect(finalFullDid.assertionMethod).toBeUndefined() expect(finalFullDid.capabilityDelegation).toBeUndefined() - expect(finalFullDid.service).toHaveLength(2) }, 40_000) it('simple `batch` succeeds despite failures of some extrinsics', async () => { - const { authentication, getSignCallback, storeDidCallback } = - makeSigningKeyTool() + const { authentication, getSigners, storeDidSigner } = + await makeSigningKeyTool() const tx = await Did.getStoreTx( { authentication, @@ -878,21 +1023,25 @@ describe('DID management batching', () => { ], }, paymentAccount.address, - storeDidCallback + [storeDidSigner] ) - // Create the full DID with a service endpoint + // Create the full DIgetStoreTx await submitTx(tx, paymentAccount) const fullDidLinkedInfo = await api.call.did.query( - Did.toChain(Did.getFullDidUriFromKey(authentication[0])) + Did.toChain( + Did.getFullDidFromVerificationMethod({ + publicKeyMultibase: Did.keypairToMultibaseKey(authentication[0]), + }) + ) ) const { document: fullDid } = Did.linkedInfoFromChain(fullDidLinkedInfo) expect(fullDid.assertionMethod).toBeUndefined() - // Try to set a new attestation key and a duplicate service endpoint + // Try to set a new attestation key and a duplicate service const updateTx = await Did.authorizeBatch({ batchFunction: api.tx.utility.batch, - did: fullDid.uri, + did: fullDid.id, extrinsics: [ api.tx.did.setAttestationKey(Did.publicKeyToChain(authentication[0])), api.tx.did.addServiceEndpoint( @@ -903,34 +1052,50 @@ describe('DID management batching', () => { }) ), ], - sign: getSignCallback(fullDid), + signers: await getSigners(fullDid), submitter: paymentAccount.address, }) // Now the second operation fails but the batch succeeds await submitTx(updateTx, paymentAccount) const updatedFullDidLinkedInfo = await api.call.did.query( - Did.toChain(fullDid.uri) + Did.toChain(fullDid.id) ) const { document: updatedFullDid } = Did.linkedInfoFromChain( updatedFullDidLinkedInfo ) - // .setAttestationKey() extrinsic went through in the batch - expect(updatedFullDid.assertionMethod?.[0]).toBeDefined() - // The service endpoint will match the one manually added, and not the one set in the batch - expect( - Did.getService(updatedFullDid, '#id-1') - ).toStrictEqual({ - id: '#id-1', - type: ['type-1'], - serviceEndpoint: ['x:url-1'], + expect(updatedFullDid).toMatchObject>({ + verificationMethod: [ + expect.objectContaining({ + // Authentication and assertionMethod + controller: fullDid.id, + type: 'Multikey', + publicKeyMultibase: Did.keypairToMultibaseKey(authentication[0]), + }), + ], + // Old service maintained + service: [ + { + id: '#id-1', + type: ['type-1'], + serviceEndpoint: ['x:url-1'], + }, + ], }) + + expect(updatedFullDid.authentication).toHaveLength(1) + expect(updatedFullDid.keyAgreement).toBeUndefined() + // .setAttestationKey() extrinsic went through in the batch + expect(updatedFullDid.assertionMethod).toStrictEqual( + updatedFullDid.authentication + ) + expect(updatedFullDid.capabilityDelegation).toBeUndefined() }, 60_000) it('batchAll fails if any extrinsics fails', async () => { - const { authentication, getSignCallback, storeDidCallback } = - makeSigningKeyTool() + const { authentication, getSigners, storeDidSigner } = + await makeSigningKeyTool() const createTx = await Did.getStoreTx( { authentication, @@ -943,20 +1108,24 @@ describe('DID management batching', () => { ], }, paymentAccount.address, - storeDidCallback + [storeDidSigner] ) await submitTx(createTx, paymentAccount) const fullDidLinkedInfo = await api.call.did.query( - Did.toChain(Did.getFullDidUriFromKey(authentication[0])) + Did.toChain( + Did.getFullDidFromVerificationMethod({ + publicKeyMultibase: Did.keypairToMultibaseKey(authentication[0]), + }) + ) ) const { document: fullDid } = Did.linkedInfoFromChain(fullDidLinkedInfo) expect(fullDid.assertionMethod).toBeUndefined() - // Use batchAll to set a new attestation key and a duplicate service endpoint + // Use batchAll to set a new attestation key and a duplicate service const updateTx = await Did.authorizeBatch({ batchFunction: api.tx.utility.batchAll, - did: fullDid.uri, + did: fullDid.id, extrinsics: [ api.tx.did.setAttestationKey(Did.publicKeyToChain(authentication[0])), api.tx.did.addServiceEndpoint( @@ -967,7 +1136,7 @@ describe('DID management batching', () => { }) ), ], - sign: getSignCallback(fullDid), + signers: await getSigners(fullDid), submitter: paymentAccount.address, }) @@ -978,17 +1147,17 @@ describe('DID management batching', () => { }) const updatedFullDidLinkedInfo = await api.call.did.query( - Did.toChain(fullDid.uri) + Did.toChain(fullDid.id) ) const { document: updatedFullDid } = Did.linkedInfoFromChain( updatedFullDidLinkedInfo ) // .setAttestationKey() extrinsic went through but it was then reverted expect(updatedFullDid.assertionMethod).toBeUndefined() - // The service endpoint will match the one manually added, and not the one set in the builder. + // The service will match the one manually added, and not the one set in the builder. expect( - Did.getService(updatedFullDid, '#id-1') - ).toStrictEqual({ + updatedFullDid.service?.find((s) => s.id === '#id-1') + ).toStrictEqual({ id: '#id-1', type: ['type-1'], serviceEndpoint: ['x:url-1'], @@ -1002,7 +1171,7 @@ describe('DID extrinsics batching', () => { let key: KeyTool beforeAll(async () => { - key = makeSigningKeyTool() + key = await makeSigningKeyTool() fullDid = await createFullDidFromSeed(paymentAccount, key.keypair) }, 50_000) @@ -1010,22 +1179,22 @@ describe('DID extrinsics batching', () => { const cType = CType.fromProperties(UUID.generate(), {}) const ctypeStoreTx = api.tx.ctype.add(CType.toChain(cType)) const rootNode = DelegationNode.newRoot({ - account: fullDid.uri, + account: fullDid.id, permissions: [Permission.DELEGATE], cTypeHash: CType.idToHash(cType.$id), }) const delegationStoreTx = await rootNode.getStoreTx() - const delegationRevocationTx = await rootNode.getRevokeTx(fullDid.uri) + const delegationRevocationTx = await rootNode.getRevokeTx(fullDid.id) const tx = await Did.authorizeBatch({ batchFunction: api.tx.utility.batch, - did: fullDid.uri, + did: fullDid.id, extrinsics: [ ctypeStoreTx, // Will fail since the delegation cannot be revoked before it is added delegationRevocationTx, delegationStoreTx, ], - sign: key.getSignCallback(fullDid), + signers: await key.getSigners(fullDid), submitter: paymentAccount.address, }) @@ -1040,22 +1209,22 @@ describe('DID extrinsics batching', () => { const cType = CType.fromProperties(UUID.generate(), {}) const ctypeStoreTx = api.tx.ctype.add(CType.toChain(cType)) const rootNode = DelegationNode.newRoot({ - account: fullDid.uri, + account: fullDid.id, permissions: [Permission.DELEGATE], cTypeHash: CType.idToHash(cType.$id), }) const delegationStoreTx = await rootNode.getStoreTx() - const delegationRevocationTx = await rootNode.getRevokeTx(fullDid.uri) + const delegationRevocationTx = await rootNode.getRevokeTx(fullDid.id) const tx = await Did.authorizeBatch({ batchFunction: api.tx.utility.batchAll, - did: fullDid.uri, + did: fullDid.id, extrinsics: [ ctypeStoreTx, // Will fail since the delegation cannot be revoked before it is added delegationRevocationTx, delegationStoreTx, ], - sign: key.getSignCallback(fullDid), + signers: await key.getSigners(fullDid), submitter: paymentAccount.address, }) @@ -1072,9 +1241,9 @@ describe('DID extrinsics batching', () => { it('can batch extrinsics for the same required key type', async () => { const web3NameClaimTx = api.tx.web3Names.claim('test-1') const authorizedTx = await Did.authorizeTx( - fullDid.uri, + fullDid.id, web3NameClaimTx, - key.getSignCallback(fullDid), + await key.getSigners(fullDid), paymentAccount.address ) await submitTx(authorizedTx, paymentAccount) @@ -1083,9 +1252,9 @@ describe('DID extrinsics batching', () => { const web3Name2ClaimExt = api.tx.web3Names.claim('test-2') const tx = await Did.authorizeBatch({ batchFunction: api.tx.utility.batch, - did: fullDid.uri, + did: fullDid.id, extrinsics: [web3Name1ReleaseExt, web3Name2ClaimExt], - sign: key.getSignCallback(fullDid), + signers: await key.getSigners(fullDid), submitter: paymentAccount.address, }) await submitTx(tx, paymentAccount) @@ -1095,8 +1264,8 @@ describe('DID extrinsics batching', () => { expect(encoded1.isSome).toBe(false) // Test for correct creation of second web3 name const encoded2 = await api.call.did.queryByWeb3Name('test-2') - expect(Did.linkedInfoFromChain(encoded2).document.uri).toStrictEqual( - fullDid.uri + expect(Did.linkedInfoFromChain(encoded2).document.id).toStrictEqual( + fullDid.id ) }, 30_000) @@ -1108,7 +1277,7 @@ describe('DID extrinsics batching', () => { const ctype1Creation = api.tx.ctype.add(CType.toChain(ctype1)) // Delegation key const rootNode = DelegationNode.newRoot({ - account: fullDid.uri, + account: fullDid.id, permissions: [Permission.DELEGATE], cTypeHash: CType.idToHash(ctype1.$id), }) @@ -1120,11 +1289,11 @@ describe('DID extrinsics batching', () => { const ctype2 = CType.fromProperties(UUID.generate(), {}) const ctype2Creation = api.tx.ctype.add(CType.toChain(ctype2)) // Delegation key - const delegationHierarchyRemoval = await rootNode.getRevokeTx(fullDid.uri) + const delegationHierarchyRemoval = await rootNode.getRevokeTx(fullDid.id) const batchedExtrinsics = await Did.authorizeBatch({ batchFunction: api.tx.utility.batchAll, - did: fullDid.uri, + did: fullDid.id, extrinsics: [ web3NameReleaseExt, ctype1Creation, @@ -1133,7 +1302,7 @@ describe('DID extrinsics batching', () => { ctype2Creation, delegationHierarchyRemoval, ], - sign: key.getSignCallback(fullDid), + signers: await key.getSigners(fullDid), submitter: paymentAccount.address, }) @@ -1144,9 +1313,9 @@ describe('DID extrinsics batching', () => { expect(encoded.isSome).toBe(false) const { - document: { uri }, + document: { id }, } = Did.linkedInfoFromChain(await api.call.did.queryByWeb3Name('test-2')) - expect(uri).toStrictEqual(fullDid.uri) + expect(id).toStrictEqual(fullDid.id) // Test correct use of attestation keys await expect(CType.verifyStored(ctype1)).resolves.not.toThrow() @@ -1159,20 +1328,21 @@ describe('DID extrinsics batching', () => { }) describe('Runtime constraints', () => { - let testAuthKey: NewDidVerificationKey - const { keypair, storeDidCallback } = makeSigningKeyTool('ed25519') - + let testAuthKey: Did.NewDidVerificationKey + let storeDidSigner: SignerInterface beforeAll(async () => { + const tool = await makeSigningKeyTool('ed25519') testAuthKey = { - publicKey: keypair.publicKey, + publicKey: tool.keypair.publicKey, type: 'ed25519', } + storeDidSigner = tool.storeDidSigner }) describe('DID creation', () => { it('should not be possible to create a DID with too many encryption keys', async () => { // Maximum is 10 const newKeyAgreementKeys = Array(10).map( - (_, index): NewDidEncryptionKey => ({ + (_, index): Did.NewDidEncryptionKey => ({ publicKey: Uint8Array.from(new Array(32).fill(index)), type: 'x25519', }) @@ -1183,7 +1353,7 @@ describe('Runtime constraints', () => { keyAgreement: newKeyAgreementKeys, }, paymentAccount.address, - storeDidCallback + [storeDidSigner] ) // One more than the maximum newKeyAgreementKeys.push({ @@ -1198,17 +1368,17 @@ describe('Runtime constraints', () => { }, paymentAccount.address, - storeDidCallback + [storeDidSigner] ) ).rejects.toThrowErrorMatchingInlineSnapshot( `"The number of key agreement keys in the creation operation is greater than the maximum allowed, which is 10"` ) }, 30_000) - it('should not be possible to create a DID with too many service endpoints', async () => { - // Maximum is 25 + it('should not be possible to create a DID with too many services', async () => { + // MaxgetStoreTx const newServiceEndpoints = Array(25).map( - (_, index): DidServiceEndpoint => ({ + (_, index): Did.NewService => ({ id: `#service-${index}`, type: [`type-${index}`], serviceEndpoint: [`x:url-${index}`], @@ -1220,7 +1390,7 @@ describe('Runtime constraints', () => { service: newServiceEndpoints, }, paymentAccount.address, - storeDidCallback + [storeDidSigner] ) // One more than the maximum newServiceEndpoints.push({ @@ -1236,38 +1406,38 @@ describe('Runtime constraints', () => { }, paymentAccount.address, - storeDidCallback + [storeDidSigner] ) ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Cannot store more than 25 service endpoints per DID"` + `"Cannot store more than 25 services per DID"` ) }, 30_000) - it('should not be possible to create a DID with a service endpoint that is too long', async () => { - const serviceId = '#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + it('should not be possible to create a DID with a service that is too long', async () => { + const serviceId = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' const limit = api.consts.did.maxServiceIdLength.toNumber() expect(serviceId.length).toBeGreaterThan(limit) }) - it('should not be possible to create a DID with a service endpoint that has too many types', async () => { + it('should not be possible to create a DID with a service that has too many types', async () => { const types = ['type-1', 'type-2'] const limit = api.consts.did.maxNumberOfTypesPerService.toNumber() expect(types.length).toBeGreaterThan(limit) }) - it('should not be possible to create a DID with a service endpoint that has too many URIs', async () => { + it('should not be possible to create a DID with a service that has too many URIs', async () => { const uris = ['x:url-1', 'x:url-2', 'x:url-3'] const limit = api.consts.did.maxNumberOfUrlsPerService.toNumber() expect(uris.length).toBeGreaterThan(limit) }) - it('should not be possible to create a DID with a service endpoint that has a type that is too long', async () => { + it('should not be possible to create a DID with a service that has a type that is too long', async () => { const type = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' const limit = api.consts.did.maxServiceTypeLength.toNumber() expect(type.length).toBeGreaterThan(limit) }) - it('should not be possible to create a DID with a service endpoint that has a URI that is too long', async () => { + it('should not be possible to create a DID with a service that has a URI that is too long', async () => { const uri = 'a:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' const limit = api.consts.did.maxServiceUrlLength.toNumber() diff --git a/tests/integration/ErrorHandler.spec.ts b/tests/integration/ErrorHandler.spec.ts index 26f7a6e9e..027d3e68e 100644 --- a/tests/integration/ErrorHandler.spec.ts +++ b/tests/integration/ErrorHandler.spec.ts @@ -7,7 +7,7 @@ import { ApiPromise } from '@polkadot/api' -import { disconnect } from '@kiltprotocol/core' +import { disconnect } from '@kiltprotocol/chain-helpers' import * as Did from '@kiltprotocol/did' import type { DidDocument, @@ -39,7 +39,7 @@ beforeAll(async () => { beforeAll(async () => { paymentAccount = await createEndowedTestAccount() - key = makeSigningKeyTool() + key = await makeSigningKeyTool() someDid = await createFullDidFromSeed(paymentAccount, key.keypair) }, 60_000) @@ -76,7 +76,7 @@ it('records an extrinsic error when ctype does not exist', async () => { cTypeHash: '0x103752ecd8e284b1c9677337ccc91ea255ac8e6651dc65d90f0504f31d7e54f0', delegationId: null, - owner: someDid.uri, + owner: someDid.id, revoked: false, } const storeTx = api.tx.attestation.add( @@ -85,9 +85,9 @@ it('records an extrinsic error when ctype does not exist', async () => { null ) const tx = await Did.authorizeTx( - someDid.uri, + someDid.id, storeTx, - key.getSignCallback(someDid), + await key.getSigners(someDid), paymentAccount.address ) await expect(submitTx(tx, paymentAccount)).rejects.toMatchObject({ diff --git a/tests/integration/PublicCredentials.spec.ts b/tests/integration/PublicCredentials.spec.ts index b6c93c949..032cce314 100644 --- a/tests/integration/PublicCredentials.spec.ts +++ b/tests/integration/PublicCredentials.spec.ts @@ -6,7 +6,7 @@ */ import type { - AssetDidUri, + AssetDid, DidDocument, HexString, IPublicCredential, @@ -18,7 +18,8 @@ import { BN } from '@polkadot/util' import { randomAsHex } from '@polkadot/util-crypto' import { PublicCredentials } from '@kiltprotocol/asset-credentials' -import { CType, disconnect } from '@kiltprotocol/core' +import { CType } from '@kiltprotocol/credentials' +import { disconnect } from '@kiltprotocol/chain-helpers' import * as Did from '@kiltprotocol/did' import { UUID } from '@kiltprotocol/utils' @@ -42,16 +43,16 @@ let attesterKey: KeyTool let api: ApiPromise // Generate a random asset ID -let assetId: AssetDidUri = `did:asset:eip155:1.erc20:${randomAsHex(20)}` +let assetId: AssetDid = `did:asset:eip155:1.erc20:${randomAsHex(20)}` let latestCredential: IPublicCredentialInput async function issueCredential( credential: IPublicCredentialInput ): Promise { const authorizedStoreTx = await Did.authorizeTx( - attester.uri, + attester.id, api.tx.publicCredentials.add(PublicCredentials.toChain(credential)), - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await submitTx(authorizedStoreTx, tokenHolder) @@ -60,15 +61,15 @@ async function issueCredential( beforeAll(async () => { api = await initializeApi() tokenHolder = await createEndowedTestAccount() - attesterKey = makeSigningKeyTool() + attesterKey = await makeSigningKeyTool() attester = await createFullDidFromSeed(tokenHolder, attesterKey.keypair) const ctypeExists = await isCtypeOnChain(nftNameCType) if (ctypeExists) return const tx = await Did.authorizeTx( - attester.uri, + attester.id, api.tx.ctype.add(CType.toChain(nftNameCType)), - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await submitTx(tx, tokenHolder) @@ -87,7 +88,7 @@ describe('When there is an attester and ctype NFT name', () => { await issueCredential(latestCredential) const credentialId = PublicCredentials.getIdForCredential( latestCredential, - attester.uri + attester.id ) const publicCredentialEntry = await api.call.publicCredentials.getById( @@ -104,7 +105,7 @@ describe('When there is an attester and ctype NFT name', () => { expect.objectContaining({ ...latestCredential, id: credentialId, - attester: attester.uri, + attester: attester.id, revoked: false, }) ) @@ -147,9 +148,9 @@ describe('When there is an attester and ctype NFT name', () => { }) const authorizedBatch = await Did.authorizeBatch({ batchFunction: api.tx.utility.batchAll, - did: attester.uri, + did: attester.id, extrinsics: credentialCreationTxs, - sign: attesterKey.getSignCallback(attester), + signers: await attesterKey.getSigners(attester), submitter: tokenHolder.address, }) await submitTx(authorizedBatch, tokenHolder) @@ -165,7 +166,7 @@ describe('When there is an attester and ctype NFT name', () => { it('should be possible to revoke a credential', async () => { const credentialId = PublicCredentials.getIdForCredential( latestCredential, - attester.uri + attester.id ) let assetCredential = await PublicCredentials.fetchCredentialFromChain( credentialId @@ -176,9 +177,9 @@ describe('When there is an attester and ctype NFT name', () => { expect(assetCredential.revoked).toBe(false) const revocationTx = api.tx.publicCredentials.revoke(credentialId, null) const authorizedTx = await Did.authorizeTx( - attester.uri, + attester.id, revocationTx, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await submitTx(authorizedTx, tokenHolder) @@ -199,7 +200,7 @@ describe('When there is an attester and ctype NFT name', () => { it('should be possible to unrevoke a credential', async () => { const credentialId = PublicCredentials.getIdForCredential( latestCredential, - attester.uri + attester.id ) let assetCredential = await PublicCredentials.fetchCredentialFromChain( credentialId @@ -211,9 +212,9 @@ describe('When there is an attester and ctype NFT name', () => { const unrevocationTx = api.tx.publicCredentials.unrevoke(credentialId, null) const authorizedTx = await Did.authorizeTx( - attester.uri, + attester.id, unrevocationTx, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await submitTx(authorizedTx, tokenHolder) @@ -234,7 +235,7 @@ describe('When there is an attester and ctype NFT name', () => { it('should be possible to remove a credential', async () => { const credentialId = PublicCredentials.getIdForCredential( latestCredential, - attester.uri + attester.id ) let encodedAssetCredential = await api.call.publicCredentials.getById( credentialId @@ -246,9 +247,9 @@ describe('When there is an attester and ctype NFT name', () => { const removalTx = api.tx.publicCredentials.remove(credentialId, null) const authorizedTx = await Did.authorizeTx( - attester.uri, + attester.id, removalTx, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await submitTx(authorizedTx, tokenHolder) @@ -284,7 +285,7 @@ describe('When there is an issued public credential', () => { await issueCredential(latestCredential) const credentialId = PublicCredentials.getIdForCredential( latestCredential, - attester.uri + attester.id ) credential = await PublicCredentials.fetchCredentialFromChain(credentialId) }) @@ -345,7 +346,7 @@ describe('When there is an issued public credential', () => { const credentialWithDifferentSubject = { ...credential, subject: - 'did:asset:eip155:1.erc721:0x6d19295A5E47199D823D8793942b21a256ef1A4d' as AssetDidUri, + 'did:asset:eip155:1.erc721:0x6d19295A5E47199D823D8793942b21a256ef1A4d' as AssetDid, } await expect( PublicCredentials.verifyCredential(credentialWithDifferentSubject) @@ -383,7 +384,7 @@ describe('When there is an issued public credential', () => { it('should not be verified when another party receives it if it has different attester info', async () => { const credentialWithDifferentAttester = { ...credential, - attester: Did.getFullDidUri(devAlice.address), + attester: Did.getFullDid(devAlice.address), } await expect( PublicCredentials.verifyCredential(credentialWithDifferentAttester) @@ -433,9 +434,9 @@ describe('When there is an issued public credential', () => { // Revoke first const revocationTx = api.tx.publicCredentials.revoke(credential.id, null) const authorizedTx = await Did.authorizeTx( - attester.uri, + attester.id, revocationTx, - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address ) await submitTx(authorizedTx, tokenHolder) @@ -485,31 +486,31 @@ describe('When there is a batch which contains a credential creation', () => { } // A batchAll with a DID call, and a nested batch with a second DID call and a nested forceBatch batch with a third DID call. const currentAttesterNonce = Did.documentFromChain( - await api.query.did.did(Did.toChain(attester.uri)) + await api.query.did.did(Did.toChain(attester.id)) ).lastTxCounter const batchTx = api.tx.utility.batchAll([ await Did.authorizeTx( - attester.uri, + attester.id, api.tx.publicCredentials.add(PublicCredentials.toChain(credential1)), - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address, { txCounter: currentAttesterNonce.addn(1) } ), api.tx.utility.batch([ await Did.authorizeTx( - attester.uri, + attester.id, api.tx.publicCredentials.add(PublicCredentials.toChain(credential2)), - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address, { txCounter: currentAttesterNonce.addn(2) } ), api.tx.utility.forceBatch([ await Did.authorizeTx( - attester.uri, + attester.id, api.tx.publicCredentials.add( PublicCredentials.toChain(credential3) ), - attesterKey.getSignCallback(attester), + await attesterKey.getSigners(attester), tokenHolder.address, { txCounter: currentAttesterNonce.addn(3) } ), diff --git a/tests/integration/Web3Names.spec.ts b/tests/integration/Web3Names.spec.ts index 1c00908e5..c6d137fea 100644 --- a/tests/integration/Web3Names.spec.ts +++ b/tests/integration/Web3Names.spec.ts @@ -8,7 +8,7 @@ import type { ApiPromise } from '@polkadot/api' import { randomAsHex } from '@polkadot/util-crypto' -import { disconnect } from '@kiltprotocol/core' +import { disconnect } from '@kiltprotocol/chain-helpers' import * as Did from '@kiltprotocol/did' import type { DidDocument, @@ -37,14 +37,14 @@ describe('When there is an Web3NameCreator and a payer', () => { let otherWeb3NameCreator: DidDocument let paymentAccount: KiltKeyringPair let otherPaymentAccount: KeyringPair - let nick: Did.Web3Name - let differentNick: Did.Web3Name + let nick: string + let differentNick: string beforeAll(async () => { nick = `nick_${randomAsHex(2)}` differentNick = `different_${randomAsHex(2)}` - w3nCreatorKey = makeSigningKeyTool() - otherW3NCreatorKey = makeSigningKeyTool() + w3nCreatorKey = await makeSigningKeyTool() + otherW3NCreatorKey = await makeSigningKeyTool() paymentAccount = await createEndowedTestAccount() otherPaymentAccount = await createEndowedTestAccount() w3nCreator = await createFullDidFromSeed( @@ -66,11 +66,11 @@ describe('When there is an Web3NameCreator and a payer', () => { it('should not be possible to create a w3n name w/o tokens', async () => { const tx = api.tx.web3Names.claim(nick) - const bobbyBroke = makeSigningKeyTool().keypair + const bobbyBroke = (await makeSigningKeyTool()).keypair const authorizedTx = await Did.authorizeTx( - w3nCreator.uri, + w3nCreator.id, tx, - w3nCreatorKey.getSignCallback(w3nCreator), + await w3nCreatorKey.getSigners(w3nCreator), bobbyBroke.address ) @@ -82,34 +82,34 @@ describe('When there is an Web3NameCreator and a payer', () => { it('should be possible to create a w3n name with enough tokens', async () => { const tx = api.tx.web3Names.claim(nick) const authorizedTx = await Did.authorizeTx( - w3nCreator.uri, + w3nCreator.id, tx, - w3nCreatorKey.getSignCallback(w3nCreator), + await w3nCreatorKey.getSigners(w3nCreator), paymentAccount.address ) await submitTx(authorizedTx, paymentAccount) }, 30_000) - it('should be possible to lookup the DID uri with the given nick', async () => { + it('should be possible to lookup the DID with the given nick', async () => { const { - document: { uri }, + document: { id }, } = Did.linkedInfoFromChain(await api.call.did.queryByWeb3Name(nick)) - expect(uri).toStrictEqual(w3nCreator.uri) + expect(id).toStrictEqual(w3nCreator.id) }, 30_000) - it('should be possible to lookup the nick with the given DID uri', async () => { - const encodedDidInfo = await api.call.did.query(Did.toChain(w3nCreator.uri)) + it('should be possible to lookup the nick with the given DID', async () => { + const encodedDidInfo = await api.call.did.query(Did.toChain(w3nCreator.id)) const didInfo = Did.linkedInfoFromChain(encodedDidInfo) - expect(didInfo.web3Name).toBe(nick) + expect(didInfo.document.alsoKnownAs).toStrictEqual([`w3n:${nick}`]) }, 30_000) it('should not be possible to create the same w3n twice', async () => { const tx = api.tx.web3Names.claim(nick) const authorizedTx = await Did.authorizeTx( - otherWeb3NameCreator.uri, + otherWeb3NameCreator.id, tx, - otherW3NCreatorKey.getSignCallback(otherWeb3NameCreator), + await otherW3NCreatorKey.getSigners(otherWeb3NameCreator), paymentAccount.address ) @@ -124,9 +124,9 @@ describe('When there is an Web3NameCreator and a payer', () => { it('should not be possible to create a second w3n for the same did', async () => { const tx = api.tx.web3Names.claim('nick2') const authorizedTx = await Did.authorizeTx( - w3nCreator.uri, + w3nCreator.id, tx, - w3nCreatorKey.getSignCallback(w3nCreator), + await w3nCreatorKey.getSigners(w3nCreator), paymentAccount.address ) @@ -156,18 +156,18 @@ describe('When there is an Web3NameCreator and a payer', () => { // prepare the w3n on chain const prepareTx = api.tx.web3Names.claim(differentNick) const prepareAuthorizedTx = await Did.authorizeTx( - w3nCreator.uri, + w3nCreator.id, prepareTx, - w3nCreatorKey.getSignCallback(w3nCreator), + await w3nCreatorKey.getSigners(w3nCreator), paymentAccount.address ) await submitTx(prepareAuthorizedTx, paymentAccount) const tx = api.tx.web3Names.releaseByOwner() const authorizedTx = await Did.authorizeTx( - w3nCreator.uri, + w3nCreator.id, tx, - w3nCreatorKey.getSignCallback(w3nCreator), + await w3nCreatorKey.getSigners(w3nCreator), paymentAccount.address ) await submitTx(authorizedTx, paymentAccount) diff --git a/tests/integration/utils.ts b/tests/integration/utils.ts index 93d888092..0f4bd29a3 100644 --- a/tests/integration/utils.ts +++ b/tests/integration/utils.ts @@ -10,12 +10,13 @@ import type { ApiPromise } from '@polkadot/api' import { BN } from '@polkadot/util' +import { randomAsU8a, encodeAddress } from '@polkadot/util-crypto' import { GenericContainer, StartedTestContainer, Wait } from 'testcontainers' -import { Blockchain } from '@kiltprotocol/chain-helpers' +import { Blockchain, connect, init } from '@kiltprotocol/chain-helpers' import { ConfigService } from '@kiltprotocol/config' -import { CType, connect, init } from '@kiltprotocol/core' +import { CType } from '@kiltprotocol/credentials' import type { ICType, KeyringPair, @@ -109,7 +110,7 @@ export const devBob = Crypto.makeKeypairFromUri('//Bob') export const devCharlie = Crypto.makeKeypairFromUri('//Charlie') export function addressFromRandom(): KiltAddress { - return makeSigningKeyTool('ed25519').keypair.address + return encodeAddress(randomAsU8a()) } export async function isCtypeOnChain(cType: ICType): Promise { @@ -154,7 +155,7 @@ export const nftNameCType = CType.fromProperties('NFT collection name', { // Submits resolving when IS_IN_BLOCK export async function submitTx( extrinsic: SubmittableExtrinsic, - submitter: KeyringPair, + submitter: KeyringPair | Blockchain.TransactionSigner, resolveOn?: SubscriptionPromise.ResultEvaluator ): Promise { await Blockchain.signAndSubmitTx(extrinsic, submitter, { @@ -163,7 +164,7 @@ export async function submitTx( } export async function endowAccounts( - faucet: KeyringPair, + faucet: KeyringPair | Blockchain.TransactionSigner, addresses: string[], resolveOn?: SubscriptionPromise.ResultEvaluator ): Promise { @@ -187,7 +188,7 @@ export async function fundAccount( export async function createEndowedTestAccount( amount: BN = ENDOWMENT ): Promise { - const { keypair } = makeSigningKeyTool() + const { keypair } = await makeSigningKeyTool() await fundAccount(keypair.address, amount) return keypair } diff --git a/tests/testUtils/TestUtils.ts b/tests/testUtils/TestUtils.ts index 10b14efa2..9ed1c3737 100644 --- a/tests/testUtils/TestUtils.ts +++ b/tests/testUtils/TestUtils.ts @@ -8,86 +8,49 @@ import { blake2AsHex, blake2AsU8a } from '@polkadot/util-crypto' import type { - DecryptCallback, DidDocument, - DidKey, - DidServiceEndpoint, - DidVerificationKey, + DidUrl, EncryptCallback, - KeyRelationship, KeyringPair, + KiltAddress, KiltEncryptionKeypair, KiltKeyringPair, - LightDidSupportedVerificationKeyType, - NewLightDidVerificationKey, - SignCallback, + SignerInterface, + SubmittableExtrinsic, + UriFragment, + VerificationMethod, + VerificationRelationship, } from '@kiltprotocol/types' -import { Crypto } from '@kiltprotocol/utils' -import * as Did from '@kiltprotocol/did' - +import { ConfigService } from '@kiltprotocol/sdk-js' import { Blockchain } from '@kiltprotocol/chain-helpers' -import { ConfigService } from '@kiltprotocol/config' -import { linkedInfoFromChain, toChain } from '@kiltprotocol/did' +import { Crypto, Signers, SDKErrors } from '@kiltprotocol/utils' +import { + type BaseNewDidKey, + type ChainDidKey, + type DidVerificationMethodType, + type LightDidSupportedVerificationKeyType, + type NewLightDidVerificationKey, + type NewDidVerificationKey, + type NewDidEncryptionKey, + type NewService, + getStoreTx, + didKeyToVerificationMethod, + createLightDidDocument, + keypairToMultibaseKey, + getFullDidFromVerificationMethod, + multibaseKeyToDidKey, + isValidDidVerificationType, + isValidEncryptionMethodType, + toChain, + linkedInfoFromChain, +} from '@kiltprotocol/did' export type EncryptionKeyToolCallback = ( didDocument: DidDocument ) => EncryptCallback -/** - * Generates a callback that can be used for encryption. - * - * @param secretKey The options parameter. - * @param secretKey.secretKey The key to use for encryption. - * @returns The callback. - */ -export function makeEncryptCallback({ - secretKey, -}: KiltEncryptionKeypair): EncryptionKeyToolCallback { - return (didDocument) => { - return async function encryptCallback({ data, peerPublicKey }) { - const keyId = didDocument.keyAgreement?.[0].id - if (!keyId) { - throw new Error(`Encryption key not found in did "${didDocument.uri}"`) - } - const { box, nonce } = Crypto.encryptAsymmetric( - data, - peerPublicKey, - secretKey - ) - return { - nonce, - data: box, - keyUri: `${didDocument.uri}${keyId}`, - } - } - } -} - -/** - * Generates a callback that can be used for decryption. - * - * @param secretKey The options parameter. - * @param secretKey.secretKey The key to use for decryption. - * @returns The callback. - */ -export function makeDecryptCallback({ - secretKey, -}: KiltEncryptionKeypair): DecryptCallback { - return async function decryptCallback({ data, nonce, peerPublicKey }) { - const decrypted = Crypto.decryptAsymmetric( - { box: data, nonce }, - peerPublicKey, - secretKey - ) - if (decrypted === false) throw new Error('Decryption failed') - return { data: decrypted } - } -} - export interface EncryptionKeyTool { keyAgreement: [KiltEncryptionKeypair] - encrypt: EncryptionKeyToolCallback - decrypt: DecryptCallback } /** @@ -96,48 +59,15 @@ export interface EncryptionKeyTool { * @param seed {string} Input to generate the keypair from. * @returns Object with secret and public key and the key type. */ -export function makeEncryptionKeyTool(seed: string): EncryptionKeyTool { +export function makeEncryptionKey(seed: string): EncryptionKeyTool { const keypair = Crypto.makeEncryptionKeypairFromSeed(blake2AsU8a(seed, 256)) - const encrypt = makeEncryptCallback(keypair) - const decrypt = makeDecryptCallback(keypair) - return { keyAgreement: [keypair], - encrypt, - decrypt, } } -export type KeyToolSignCallback = (didDocument: DidDocument) => SignCallback - -/** - * Generates a callback that can be used for signing. - * - * @param keypair The keypair to use for signing. - * @returns The callback. - */ -export function makeSignCallback(keypair: KeyringPair): KeyToolSignCallback { - return (didDocument) => - async function sign({ data, keyRelationship }) { - const keyId = didDocument[keyRelationship]?.[0].id - const keyType = didDocument[keyRelationship]?.[0].type - if (keyId === undefined || keyType === undefined) { - throw new Error( - `Key for purpose "${keyRelationship}" not found in did "${didDocument.uri}"` - ) - } - const signature = keypair.sign(data, { withType: false }) - - return { - signature, - keyUri: `${didDocument.uri}${keyId}`, - keyType, - } - } -} - -type StoreDidCallback = Parameters['2'] +type StoreDidCallback = Parameters['2'] /** * Generates a callback that can be used for signing. @@ -145,22 +75,39 @@ type StoreDidCallback = Parameters['2'] * @param keypair The keypair to use for signing. * @returns The callback. */ -export function makeStoreDidCallback( +export async function makeStoreDidSigner( keypair: KiltKeyringPair -): StoreDidCallback { - return async function sign({ data }) { - const signature = keypair.sign(data, { withType: false }) - return { - signature, - keyType: keypair.type, - } +): Promise> { + const signers = await Signers.getSignersForKeypair({ + keypair, + id: keypair.address, + }) + const signer = Signers.selectSigner( + signers, + Signers.select.verifiableOnChain() + ) + if (!signer) { + throw new SDKErrors.NoSuitableSignerError( + `Failed to derive DID creation signer from keypair ${JSON.stringify( + keypair + )}`, + { + availableSigners: signers, + signerRequirements: { + algorithm: Signers.DID_PALLET_SUPPORTED_ALGORITHMS, + }, + } + ) } + return signer } export interface KeyTool { keypair: KiltKeyringPair - getSignCallback: KeyToolSignCallback - storeDidCallback: StoreDidCallback + getSigners: ( + doc: DidDocument + ) => Promise>> + storeDidSigner: SignerInterface authentication: [NewLightDidVerificationKey] } @@ -170,21 +117,75 @@ export interface KeyTool { * @param type The type to use for the keypair. * @returns The keypair, matching sign callback, a key usable as DID authentication key. */ -export function makeSigningKeyTool( +export async function makeSigningKeyTool( type: KiltKeyringPair['type'] = 'sr25519' -): KeyTool { +): Promise { const keypair = Crypto.makeKeypairFromSeed(undefined, type) - const getSignCallback = makeSignCallback(keypair) - const storeDidCallback = makeStoreDidCallback(keypair) + const getSigners: ( + didDocument: DidDocument + ) => Promise>> = async ( + didDocument + ) => { + return ( + await Promise.all( + didDocument.verificationMethod?.map(({ id }) => + Signers.getSignersForKeypair({ + keypair, + id: `${didDocument.id}${id}`, + }) + ) ?? [] + ) + ).flat() + } + + const storeDidSigner = await makeStoreDidSigner(keypair) return { keypair, - getSignCallback, - storeDidCallback, + getSigners, + storeDidSigner, authentication: [keypair as NewLightDidVerificationKey], } } +function doesVerificationMethodExist( + didDocument: DidDocument, + { id }: Pick +): boolean { + return ( + didDocument.verificationMethod?.find((vm) => vm.id === id) !== undefined + ) +} + +function addVerificationMethod( + didDocument: DidDocument, + verificationMethod: VerificationMethod, + relationship: VerificationRelationship +): void { + const existingRelationship = didDocument[relationship] ?? [] + existingRelationship.push(verificationMethod.id) + // eslint-disable-next-line no-param-reassign + didDocument[relationship] = existingRelationship + if (!doesVerificationMethodExist(didDocument, verificationMethod)) { + const existingVerificationMethod = didDocument.verificationMethod ?? [] + existingVerificationMethod.push(verificationMethod) + // eslint-disable-next-line no-param-reassign + didDocument.verificationMethod = existingVerificationMethod + } +} + +function addKeypairAsVerificationMethod( + didDocument: DidDocument, + { id, publicKey, type: keyType }: BaseNewDidKey & { id: UriFragment }, + relationship: VerificationRelationship +): void { + const verificationMethod = didKeyToVerificationMethod(didDocument.id, id, { + keyType: keyType as DidVerificationMethodType, + publicKey, + }) + addVerificationMethod(didDocument, verificationMethod, relationship) +} + /** * Given a keypair, creates a light DID with an authentication and an encryption key. * @@ -195,22 +196,21 @@ export async function createMinimalLightDidFromKeypair( keypair: KeyringPair ): Promise { const type = keypair.type as LightDidSupportedVerificationKeyType - return Did.createLightDidDocument({ + return createLightDidDocument({ authentication: [{ publicKey: keypair.publicKey, type }], - keyAgreement: makeEncryptionKeyTool(`${keypair.publicKey}//enc`) - .keyAgreement, + keyAgreement: makeEncryptionKey(`${keypair.publicKey}//enc`).keyAgreement, }) } // Mock function to generate a key ID without having to rely on a real chain metadata. -export function computeKeyId(key: DidKey['publicKey']): DidKey['id'] { +export function computeKeyId(key: ChainDidKey['publicKey']): ChainDidKey['id'] { return `#${blake2AsHex(key, 256)}` } function makeDidKeyFromKeypair({ publicKey, type, -}: KiltKeyringPair): DidVerificationKey { +}: KiltKeyringPair): ChainDidKey { return { id: computeKeyId(publicKey), publicKey, @@ -219,58 +219,96 @@ function makeDidKeyFromKeypair({ } /** - * Creates [[DidDocument]] for local use, e.g., in testing. Will not work on-chain because key IDs are generated ad-hoc. + * Creates {@link DidDocument} for local use, e.g., in testing. Will not work on-chain because key IDs are generated ad-hoc. * * @param keypair The KeyringPair for authentication key, other keys derived from it. * @param generationOptions The additional options for generation. - * @param generationOptions.keyRelationships The set of key relationships to indicate which keys must be added to the DID. - * @param generationOptions.endpoints The set of service endpoints that must be added to the DID. + * @param generationOptions.verificationRelationships The set of verification relationships to indicate which keys must be added to the DID. + * @param generationOptions.endpoints The set of services that must be added to the DID. * - * @returns A promise resolving to a [[DidDocument]] object. The resulting object is NOT stored on chain. + * @returns A promise resolving to a {@link DidDocument} object. The resulting object is NOT stored on chain. */ export async function createLocalDemoFullDidFromKeypair( keypair: KiltKeyringPair, { - keyRelationships = new Set([ + verificationRelationships = new Set([ 'assertionMethod', 'capabilityDelegation', 'keyAgreement', ]), endpoints = [], }: { - keyRelationships?: Set> - endpoints?: DidServiceEndpoint[] + verificationRelationships?: Set< + Omit + > + endpoints?: NewService[] } = {} ): Promise { - const authKey = makeDidKeyFromKeypair(keypair) - const uri = Did.getFullDidUriFromKey(authKey) + const { + type: keyType, + publicKey, + id: authKeyId, + } = makeDidKeyFromKeypair(keypair) + const id = getFullDidFromVerificationMethod({ + publicKeyMultibase: keypairToMultibaseKey({ + type: keyType, + publicKey, + }), + }) const result: DidDocument = { - uri, - authentication: [authKey], + id, + authentication: [authKeyId], + verificationMethod: [ + didKeyToVerificationMethod(id, authKeyId, { + keyType, + publicKey, + }), + ], service: endpoints, } - if (keyRelationships.has('keyAgreement')) { - const encryptionKeypair = makeEncryptionKeyTool(`${keypair.publicKey}//enc`) - .keyAgreement[0] - const encKey = { - ...encryptionKeypair, - id: computeKeyId(encryptionKeypair.publicKey), - } - result.keyAgreement = [encKey] + if (verificationRelationships.has('keyAgreement')) { + const { publicKey: encPublicKey, type } = makeEncryptionKey( + `${keypair.publicKey}//enc` + ).keyAgreement[0] + addKeypairAsVerificationMethod( + result, + { + id: computeKeyId(encPublicKey), + publicKey: encPublicKey, + type, + }, + 'keyAgreement' + ) } - if (keyRelationships.has('assertionMethod')) { - const attKey = makeDidKeyFromKeypair( + if (verificationRelationships.has('assertionMethod')) { + const { publicKey: encPublicKey, type } = makeDidKeyFromKeypair( keypair.derive('//att') as KiltKeyringPair ) - result.assertionMethod = [attKey] + addKeypairAsVerificationMethod( + result, + { + id: computeKeyId(encPublicKey), + publicKey: encPublicKey, + type, + }, + 'assertionMethod' + ) } - if (keyRelationships.has('capabilityDelegation')) { - const delKey = makeDidKeyFromKeypair( + if (verificationRelationships.has('capabilityDelegation')) { + const { publicKey: encPublicKey, type } = makeDidKeyFromKeypair( keypair.derive('//del') as KiltKeyringPair ) - result.capabilityDelegation = [delKey] + addKeypairAsVerificationMethod( + result, + { + id: computeKeyId(encPublicKey), + publicKey: encPublicKey, + type, + }, + 'capabilityDelegation' + ) } return result @@ -286,10 +324,10 @@ export async function createLocalDemoFullDidFromKeypair( export async function createLocalDemoFullDidFromLightDid( lightDid: DidDocument ): Promise { - const { uri, authentication } = lightDid + const { id, authentication } = lightDid return { - uri: Did.getFullDidUri(uri), + id, authentication, assertionMethod: authentication, capabilityDelegation: authentication, @@ -297,29 +335,119 @@ export async function createLocalDemoFullDidFromLightDid( } } +/** + * Create a DID creation operation which would write to chain the DID Document provided as input. + * Only the first authentication, assertion, and capability delegation verification methods are considered from the input DID Document. + * All the input DID Document key agreement verification methods are considered. + * + * The resulting extrinsic can be submitted to create an on-chain DID that has the provided verification methods and services. + * + * A DID creation operation can contain at most 25 new services. + * Additionally, each service must respect the following conditions: + * - The service ID is at most 50 bytes long and is a valid URI fragment according to RFC#3986. + * - The service has at most 1 service type, with a value that is at most 50 bytes long. + * - The service has at most 1 URI, with a value that is at most 200 bytes long, and which is a valid URI according to RFC#3986. + * + * @param input The DID Document to store. + * @param submitter The KILT address authorized to submit the creation operation. + * @param signers An array of signer interfaces. A suitable signer will be selected if available. + * The signer has to use the authentication public key encoded as a Kilt Address or as a hex string as its id. + * + * @returns The SubmittableExtrinsic for the DID creation operation. + */ +export async function getStoreTxFromDidDocument( + input: DidDocument, + submitter: KiltAddress, + signers: readonly SignerInterface[] +): Promise { + const { + authentication, + assertionMethod, + keyAgreement, + capabilityDelegation, + service, + verificationMethod, + } = input + + const [authKey, assertKey, delKey, ...encKeys] = [ + authentication?.[0], + assertionMethod?.[0], + capabilityDelegation?.[0], + ...(keyAgreement ?? []), + ].map((keyId): BaseNewDidKey | undefined => { + if (!keyId) { + return undefined + } + const key = verificationMethod?.find((vm) => vm.id === keyId) + if (key === undefined) { + throw new SDKErrors.DidError( + `A verification method with ID "${keyId}" was not found in the \`verificationMethod\` property of the provided DID Document.` + ) + } + const { keyType, publicKey } = multibaseKeyToDidKey(key.publicKeyMultibase) + if ( + !isValidDidVerificationType(keyType) && + !isValidEncryptionMethodType(keyType) + ) { + throw new SDKErrors.DidError( + `Verification method with ID "${keyId}" has an unsupported type "${keyType}".` + ) + } + return { + type: keyType, + publicKey, + } + }) + + if (authKey === undefined) { + throw new SDKErrors.DidError( + 'Cannot create a DID without an authentication method.' + ) + } + + const storeTxInput: Parameters[0] = { + authentication: [authKey as NewDidVerificationKey], + assertionMethod: assertKey + ? [assertKey as NewDidVerificationKey] + : undefined, + capabilityDelegation: delKey + ? [delKey as NewDidVerificationKey] + : undefined, + keyAgreement: encKeys as NewDidEncryptionKey[], + service, + } + + return getStoreTx(storeTxInput, submitter, signers) +} + // It takes the auth key from the light DID and use it as attestation and delegation key as well. export async function createFullDidFromLightDid( - payer: KiltKeyringPair, + payer: KiltKeyringPair | Blockchain.TransactionSigner, lightDidForId: DidDocument, - sign: StoreDidCallback + signer: StoreDidCallback ): Promise { const api = ConfigService.get('api') - const { authentication, uri } = lightDidForId - const tx = await Did.getStoreTx( - { - authentication, - assertionMethod: authentication, - capabilityDelegation: authentication, - keyAgreement: lightDidForId.keyAgreement, - service: lightDidForId.service, - }, - payer.address, - sign + const fullDidDocumentToBeCreated = lightDidForId + fullDidDocumentToBeCreated.assertionMethod = [ + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + fullDidDocumentToBeCreated.authentication![0], + ] + fullDidDocumentToBeCreated.capabilityDelegation = [ + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + fullDidDocumentToBeCreated.authentication![0], + ] + const tx = await getStoreTxFromDidDocument( + fullDidDocumentToBeCreated, + 'address' in payer ? payer.address : payer.id, + signer ) await Blockchain.signAndSubmitTx(tx, payer) const queryFunction = api.call.did?.query ?? api.call.didApi.queryDid - const encodedDidDetails = await queryFunction(toChain(Did.getFullDidUri(uri))) - return linkedInfoFromChain(encodedDidDetails).document + const encodedDidDetails = await queryFunction( + toChain(fullDidDocumentToBeCreated.id) + ) + const { document } = linkedInfoFromChain(encodedDidDetails) + return document } export async function createFullDidFromSeed( @@ -327,6 +455,6 @@ export async function createFullDidFromSeed( keypair: KiltKeyringPair ): Promise { const lightDid = await createMinimalLightDidFromKeypair(keypair) - const sign = makeStoreDidCallback(keypair) - return createFullDidFromLightDid(payer, lightDid, sign) + const signer = await makeStoreDidSigner(keypair) + return createFullDidFromLightDid(payer, lightDid, [signer]) } diff --git a/tests/testUtils/testData.ts b/tests/testUtils/testData.ts new file mode 100644 index 000000000..c306fa71f --- /dev/null +++ b/tests/testUtils/testData.ts @@ -0,0 +1,206 @@ +/** + * Copyright (c) 2018-2023, BOTLabs GmbH. + * + * This source code is licensed under the BSD 4-Clause "Original" license + * found in the LICENSE file in the root directory of this source tree. + */ + +import { + hexToU8a, + stringToU8a, + u8aCmp, + u8aConcat, + u8aToU8a, +} from '@polkadot/util' +import { base58Encode, randomAsU8a } from '@polkadot/util-crypto' + +import { Credential } from '@kiltprotocol/legacy-credentials' +import type { IAttestation, ICType, ICredential } from '@kiltprotocol/types' +import { + KiltCredentialV1, + KiltAttestationProofV1, +} from '@kiltprotocol/credentials' + +import { createAugmentedApi } from './mocks/index.js' + +export const mockedApi = createAugmentedApi() + +// index of the attestation pallet, according to the metadata used +const attestationPalletIndex = 62 +// asynchronously check that pallet index is correct +mockedApi.once('ready', () => { + const idx = mockedApi.runtimeMetadata.asLatest.pallets.find((x) => + x.name.match(/attestation/i) + )?.index + if (!idx?.eqn(attestationPalletIndex)) { + console.warn( + `The attestation pallet index is expected to be ${attestationPalletIndex}, but the metadata used lists it as ${idx?.toNumber()}. This may lead to tests not behaving as expected!` + ) + } +}) +const attestationCreatedIndex = u8aToU8a([ + attestationPalletIndex, + mockedApi.events.attestation.AttestationCreated.meta.index.toNumber(), +]) +export function makeAttestationCreatedEvents(events: unknown[][]) { + return mockedApi.createType( + 'Vec', + events.map((eventData) => ({ + event: u8aConcat( + attestationCreatedIndex, + new (mockedApi.registry.findMetaEvent(attestationCreatedIndex))( + mockedApi.registry, + eventData + ).toU8a() + ), + })) + ) +} + +export const cType: ICType = { + $schema: 'http://kilt-protocol.org/draft-01/ctype#', + title: 'membership', + properties: { + birthday: { + type: 'string', + format: 'date', + }, + name: { + type: 'string', + }, + premium: { + type: 'boolean', + }, + }, + type: 'object', + $id: 'kilt:ctype:0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf', +} + +const _legacyCredential: ICredential = { + claim: { + contents: { + birthday: '1991-01-01', + name: 'Kurt', + premium: true, + }, + owner: 'did:kilt:4r1WkS3t8rbCb11H8t3tJvGVCynwDXSUBiuGB6sLRHzCLCjs', + cTypeHash: + '0xf0fd09f9ed6233b2627d37eb5d6c528345e8945e0b610e70997ed470728b2ebf', + }, + claimHashes: [ + '0x0586412d7b8adf811c288211c9c704b3331bb3adb61fba6448c89453568180f6', + '0x3856178f49d3c379e00793125678eeb8db61cfa4ed32cd7a4b67ac8e27714fc1', + '0x683428497edeba0198f02a45a7015fc2c010fa75994bc1d1372349c25e793a10', + '0x8804cc546c4597b2ab0541dd3a6532e338b0b5b4d2458eb28b4d909a5d4caf4e', + ], + claimNonceMap: { + '0xe5a099ea4f8be89227af8a5d74b0371e1c13232978c8b8edce1ecec698eb2665': + 'eab8a98c-0ef3-4a33-a5c7-c9821b3bec45', + '0x14a06c5955ebc9247c9f54b30e0f1714e6ebd54ae05ad7b16fa9a4643dff1dc2': + 'fda7a7d4-770c-4cae-9cd9-6deebdb3ed80', + '0xb102f462e4cde1b48e7936085cef1e2ab6ae4f7ca46cd3fab06074c00546a33d': + 'ed28443a-ec36-4a54-9caa-6bf014df257d', + '0xf42b46c4a7a3bad68650069bd81fdf2085c9ea02df1c27a82282e97e3f71ef8e': + 'adc7dc71-ab0a-45f9-a091-9f3ec1bb96c7', + }, + legitimations: [], + delegationId: + '0xb102f462e4cde1b48e7936085cef1e2ab6ae4f7ca46cd3fab06074c00546a33d', + rootHash: '0x', +} +_legacyCredential.rootHash = Credential.calculateRootHash(_legacyCredential) + +// eslint-disable-next-line import/no-mutable-exports +export let legacyCredential: ICredential = JSON.parse( + JSON.stringify(_legacyCredential) +) +beforeEach(() => { + legacyCredential = JSON.parse(JSON.stringify(_legacyCredential)) +}) + +export const attestation: IAttestation = { + claimHash: _legacyCredential.rootHash, + cTypeHash: _legacyCredential.claim.cTypeHash, + delegationId: _legacyCredential.delegationId, + owner: 'did:kilt:4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + revoked: false, +} + +export const timestamp = new Date(1234567) +export const blockHash = randomAsU8a(32) +export const genesisHash = randomAsU8a(32) + +const _credential = JSON.stringify({ + ...KiltCredentialV1.fromInput({ + claims: _legacyCredential.claim.contents, + claimHash: _legacyCredential.rootHash, + subject: _legacyCredential.claim.owner, + delegationId: _legacyCredential.delegationId ?? undefined, + cType: cType.$id, + issuer: attestation.owner, + chainGenesisHash: genesisHash, + timestamp, + }), + proof: { + type: KiltAttestationProofV1.PROOF_TYPE, + // `block` field is base58 encoding of block hash + block: base58Encode(blockHash), + // `commitments` (claimHashes) are base58 encoded in new format + commitments: _legacyCredential.claimHashes.map((i) => + base58Encode(hexToU8a(i)) + ), + // salt/nonces must be sorted by statement digest (keys) and base58 encoded + salt: Object.entries(_legacyCredential.claimNonceMap) + .map(([hsh, slt]) => [hexToU8a(hsh), stringToU8a(slt)]) + .sort((a, b) => u8aCmp(a[0], b[0])) + .map((i) => base58Encode(i[1])), + }, +}) + +// eslint-disable-next-line import/no-mutable-exports +export let credential: KiltCredentialV1.Interface = JSON.parse(_credential) +beforeEach(() => { + credential = JSON.parse(_credential) +}) + +jest.spyOn(mockedApi, 'at').mockImplementation(() => Promise.resolve(mockedApi)) +jest + .spyOn(mockedApi, 'queryMulti') + .mockImplementation((calls) => + Promise.all( + calls.map((call) => (Array.isArray(call) ? call[0](call[1]) : call())) + ) + ) +jest + .spyOn(mockedApi, 'genesisHash', 'get') + .mockImplementation(() => genesisHash as any) +mockedApi.query.attestation = { + attestations: jest.fn().mockResolvedValue( + mockedApi.createType('Option', { + ctypeHash: attestation.cTypeHash, + attester: '4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + revoked: false, + authorizationId: { Delegation: attestation.delegationId }, + }) + ), +} as any +mockedApi.query.timestamp = { + now: jest + .fn() + .mockResolvedValue(mockedApi.createType('u64', timestamp.getTime())), +} as any + +mockedApi.query.system = { + events: jest + .fn() + .mockResolvedValue( + makeAttestationCreatedEvents([ + [ + '4sejigvu6STHdYmmYf2SuN92aNp8TbrsnBBDUj7tMrJ9Z3cG', + attestation.claimHash, + attestation.cTypeHash, + { Delegation: attestation.delegationId }, + ], + ]) + ), +} as any diff --git a/tsconfig.docs.json b/tsconfig.docs.json index 6dd82a73b..edcb6e8e1 100644 --- a/tsconfig.docs.json +++ b/tsconfig.docs.json @@ -4,28 +4,27 @@ "typedocOptions": { "entryPointStrategy": "resolve", "entryPoints": [ - "packages/types/src/index.ts", - "packages/augment-api/src/index.ts", - "packages/utils/src/index.ts", "packages/asset-credentials/src/index.ts", - "packages/config/src/index.ts", + "packages/augment-api/src/index.ts", "packages/chain-helpers/src/index.ts", + "packages/config/src/index.ts", + "packages/credentials/src/index.ts", "packages/did/src/index.ts", + "packages/legacy-credentials/src/index.ts", + "packages/sdk-js/src/index.ts", "packages/type-definitions/src/index.ts", - "packages/core/src/index.ts", - "packages/messaging/src/index.ts", + "packages/types/src/index.ts", + "packages/utils/src/index.ts", "packages/vc-export/src/index.ts", - "packages/sdk-js/src/index.ts", ], "out": "docs/api", "theme": "default", "exclude": [ "**/*spec.ts", "**/__mocks__/**", - "**/testingTools/**", + "**/tests/**", "**/*.js", "**/node_modules/**", - "**/__integrationtests__/**" ], "excludeExternals": true, "excludePrivate": true, diff --git a/tsconfig.json b/tsconfig.json index 186eb2f1b..6caa62b5f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,7 +8,7 @@ "@kiltprotocol/asset-credentials": ["asset-credentials/src"], "@kiltprotocol/chain-helpers": ["chain-helpers/src"], "@kiltprotocol/config": ["config/src"], - "@kiltprotocol/core": ["core/src"], + "@kiltprotocol/credentials": ["credentials/src"], "@kiltprotocol/sdk-js": ["sdk-js/src"], "@kiltprotocol/types": ["types/src"], "@kiltprotocol/utils": ["utils/src"], @@ -18,6 +18,7 @@ "@kiltprotocol/augment-api": ["augment-api/src"], "@kiltprotocol/augment-api/extraDefs": ["augment-api/src/interfaces/extraDefs"], "@kiltprotocol/type-definitions": ["type-definitions/src"], + "@kiltprotocol/legacy-credentials": ["legacy-credentials/src"] } }, } diff --git a/yarn.lock b/yarn.lock index 59a8cee15..540e2a2c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1533,6 +1533,13 @@ __metadata: languageName: node linkType: hard +"@digitalbazaar/multikey-context@npm:^1.0.0": + version: 1.0.0 + resolution: "@digitalbazaar/multikey-context@npm:1.0.0" + checksum: e651253ce101a0a5de0e46de5c6f7c936aa07fd14e5b14d38ba57c105eaa2490c256245482bc1f5173269a992cab2ebe5eec6c26523f0e61aae03d3a6788cc6b + languageName: node + linkType: hard + "@digitalbazaar/security-context@npm:^1.0.0": version: 1.0.0 resolution: "@digitalbazaar/security-context@npm:1.0.0" @@ -1929,7 +1936,7 @@ __metadata: dependencies: "@kiltprotocol/chain-helpers": "workspace:*" "@kiltprotocol/config": "workspace:*" - "@kiltprotocol/core": "workspace:*" + "@kiltprotocol/credentials": "workspace:*" "@kiltprotocol/did": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" @@ -1963,11 +1970,14 @@ __metadata: resolution: "@kiltprotocol/chain-helpers@workspace:packages/chain-helpers" dependencies: "@kiltprotocol/config": "workspace:*" + "@kiltprotocol/type-definitions": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" "@polkadot/api": ^10.4.0 "@polkadot/keyring": ^12.0.0 "@polkadot/types": ^10.4.0 + "@polkadot/util": ^12.0.0 + "@polkadot/util-crypto": ^12.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 languageName: unknown @@ -1985,14 +1995,18 @@ __metadata: languageName: unknown linkType: soft -"@kiltprotocol/core@workspace:*, @kiltprotocol/core@workspace:packages/core": +"@kiltprotocol/credentials@workspace:*, @kiltprotocol/credentials@workspace:packages/credentials": version: 0.0.0-use.local - resolution: "@kiltprotocol/core@workspace:packages/core" + resolution: "@kiltprotocol/credentials@workspace:packages/credentials" dependencies: "@kiltprotocol/augment-api": "workspace:*" "@kiltprotocol/chain-helpers": "workspace:*" "@kiltprotocol/config": "workspace:*" "@kiltprotocol/did": "workspace:*" + "@kiltprotocol/eddsa-jcs-2022": 0.1.0-rc.1 + "@kiltprotocol/es256k-jcs-2023": 0.1.0-rc.1 + "@kiltprotocol/jcs-data-integrity-proofs-common": 0.1.0-rc.1 + "@kiltprotocol/sr25519-jcs-2023": 0.1.0-rc.1 "@kiltprotocol/type-definitions": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" @@ -2001,7 +2015,9 @@ __metadata: "@polkadot/types": ^10.4.0 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 + "@types/json-pointer": ^1.0.34 "@types/uuid": ^8.0.0 + json-pointer: ^0.6.2 rimraf: ^3.0.2 testcontainers: ^9.0.0 typescript: ^4.8.3 @@ -2012,6 +2028,7 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/did@workspace:packages/did" dependencies: + "@digitalbazaar/multikey-context": ^1.0.0 "@digitalbazaar/security-context": ^1.0.0 "@kiltprotocol/augment-api": "workspace:*" "@kiltprotocol/config": "workspace:*" @@ -2023,6 +2040,55 @@ __metadata: "@polkadot/types-codec": ^10.4.0 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 + multibase: ^4.0.6 + rimraf: ^3.0.2 + typescript: ^4.8.3 + languageName: unknown + linkType: soft + +"@kiltprotocol/eddsa-jcs-2022@npm:0.1.0-rc.1": + version: 0.1.0-rc.1 + resolution: "@kiltprotocol/eddsa-jcs-2022@npm:0.1.0-rc.1" + dependencies: + "@kiltprotocol/jcs-data-integrity-proofs-common": ^0.1.0-rc.1 + "@noble/curves": ^1.0.0 + "@scure/base": ^1.1.1 + checksum: c3127e4f98e37216752e52314aa3e173d32327819fc88ba69fdba7bfbb014ca61cf271eb01864274c1c25813edbf07975c8dc829708dc525f7425ea2a38ab7d9 + languageName: node + linkType: hard + +"@kiltprotocol/es256k-jcs-2023@npm:0.1.0-rc.1": + version: 0.1.0-rc.1 + resolution: "@kiltprotocol/es256k-jcs-2023@npm:0.1.0-rc.1" + dependencies: + "@kiltprotocol/jcs-data-integrity-proofs-common": ^0.1.0-rc.1 + "@noble/curves": ^1.0.0 + "@scure/base": ^1.1.1 + checksum: 843437a6806c10728fedc6cfa45f408aa9278263d64fce7c5057515d06fed74bc9ea702d932cc24543daff66a1b9935389b0a1453ea45d59111b46b59b19ad56 + languageName: node + linkType: hard + +"@kiltprotocol/jcs-data-integrity-proofs-common@npm:0.1.0-rc.1, @kiltprotocol/jcs-data-integrity-proofs-common@npm:^0.1.0-rc.1": + version: 0.1.0-rc.1 + resolution: "@kiltprotocol/jcs-data-integrity-proofs-common@npm:0.1.0-rc.1" + dependencies: + canonicalize: ^2.0.0 + multibase: ^4.0.6 + checksum: fefc3c86bdb0a732f5851155cedf1743eedace4cf03fa5fbeb37f321c3cf87e9ac1704328e0d69d3cb80203e9afc07b6849907816c402bcd90b7c18b99177d40 + languageName: node + linkType: hard + +"@kiltprotocol/legacy-credentials@workspace:packages/legacy-credentials": + version: 0.0.0-use.local + resolution: "@kiltprotocol/legacy-credentials@workspace:packages/legacy-credentials" + dependencies: + "@kiltprotocol/config": "workspace:*" + "@kiltprotocol/credentials": "workspace:*" + "@kiltprotocol/did": "workspace:*" + "@kiltprotocol/types": "workspace:*" + "@kiltprotocol/utils": "workspace:*" + "@polkadot/util": ^12.0.0 + "@polkadot/util-crypto": ^12.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 languageName: unknown @@ -2034,7 +2100,7 @@ __metadata: dependencies: "@kiltprotocol/chain-helpers": "workspace:*" "@kiltprotocol/config": "workspace:*" - "@kiltprotocol/core": "workspace:*" + "@kiltprotocol/credentials": "workspace:*" "@kiltprotocol/did": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" @@ -2046,6 +2112,17 @@ __metadata: languageName: unknown linkType: soft +"@kiltprotocol/sr25519-jcs-2023@npm:0.1.0-rc.1": + version: 0.1.0-rc.1 + resolution: "@kiltprotocol/sr25519-jcs-2023@npm:0.1.0-rc.1" + dependencies: + "@kiltprotocol/jcs-data-integrity-proofs-common": ^0.1.0-rc.1 + "@polkadot/util-crypto": ^12.0.1 + "@scure/base": ^1.1.1 + checksum: 8253c03b8c9daef61bc2155ee64894a568f4b591c941dc0bb668839475ed8d8fcf1048339710805e3046cb3ea603ed58c5e857887c4c67b602af098c2a92fb52 + languageName: node + linkType: hard + "@kiltprotocol/type-definitions@workspace:*, @kiltprotocol/type-definitions@workspace:packages/type-definitions": version: 0.0.0-use.local resolution: "@kiltprotocol/type-definitions@workspace:packages/type-definitions" @@ -2073,6 +2150,10 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/utils@workspace:packages/utils" dependencies: + "@kiltprotocol/eddsa-jcs-2022": 0.1.0-rc.1 + "@kiltprotocol/es256k-jcs-2023": 0.1.0-rc.1 + "@kiltprotocol/jcs-data-integrity-proofs-common": 0.1.0-rc.1 + "@kiltprotocol/sr25519-jcs-2023": 0.1.0-rc.1 "@kiltprotocol/types": "workspace:*" "@polkadot/api": ^10.4.0 "@polkadot/keyring": ^12.0.0 @@ -2092,27 +2173,29 @@ __metadata: dependencies: "@digitalbazaar/ed25519-signature-2020": ^5.2.0 "@digitalbazaar/vc": ^6.0.1 - "@kiltprotocol/chain-helpers": "workspace:*" "@kiltprotocol/config": "workspace:*" - "@kiltprotocol/core": "workspace:*" + "@kiltprotocol/credentials": "workspace:*" "@kiltprotocol/did": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^10.4.0 - "@polkadot/types": ^10.4.0 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 crypto-ld: ^6.0.0 - did-jwt: ^7.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 peerDependencies: - "@digitalbazaar/vc": ^2.1.0 || ^6.0.1 - jsonld: ^5.2.0 || ^8.1.0 - jsonld-signatures: ^9.3.0 || ^11.0.0 + jsonld: ^8.1.0 + jsonld-signatures: ^11.0.0 languageName: unknown linkType: soft +"@multiformats/base-x@npm:^4.0.1": + version: 4.0.1 + resolution: "@multiformats/base-x@npm:4.0.1" + checksum: ecbf84bdd7613fd795e4a41f20f3e8cc7df8bbee84690b7feed383d45a638ed228a80ff6f5c930373cbf24539f64857b66023ee3c1e914f6bac9995c76414a87 + languageName: node + linkType: hard + "@noble/curves@npm:1.0.0, @noble/curves@npm:^1.0.0": version: 1.0.0 resolution: "@noble/curves@npm:1.0.0" @@ -2129,7 +2212,7 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.3.0, @noble/hashes@npm:^1.3.0": +"@noble/hashes@npm:1.3.0": version: 1.3.0 resolution: "@noble/hashes@npm:1.3.0" checksum: d7ddb6d7c60f1ce1f87facbbef5b724cdea536fc9e7f59ae96e0fc9de96c8f1a2ae2bdedbce10f7dcc621338dfef8533daa73c873f2b5c87fa1a4e05a95c2e2e @@ -2445,7 +2528,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/util-crypto@npm:12.2.1, @polkadot/util-crypto@npm:^12.0.0, @polkadot/util-crypto@npm:^12.2.1": +"@polkadot/util-crypto@npm:12.2.1, @polkadot/util-crypto@npm:^12.0.0, @polkadot/util-crypto@npm:^12.0.1, @polkadot/util-crypto@npm:^12.2.1": version: 12.2.1 resolution: "@polkadot/util-crypto@npm:12.2.1" dependencies: @@ -2634,7 +2717,7 @@ __metadata: languageName: node linkType: hard -"@scure/base@npm:1.1.1": +"@scure/base@npm:1.1.1, @scure/base@npm:^1.1.1": version: 1.1.1 resolution: "@scure/base@npm:1.1.1" checksum: b4fc810b492693e7e8d0107313ac74c3646970c198bbe26d7332820886fa4f09441991023ec9aa3a2a51246b74409ab5ebae2e8ef148bbc253da79ac49130309 @@ -2666,101 +2749,6 @@ __metadata: languageName: node linkType: hard -"@stablelib/aead@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/aead@npm:1.0.1" - checksum: 1a6f68d138f105d17dd65349751515bd252ab0498c77255b8555478d28415600dde493f909eb718245047a993f838dfae546071e1687566ffb7b8c3e10c918d9 - languageName: node - linkType: hard - -"@stablelib/binary@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/binary@npm:1.0.1" - dependencies: - "@stablelib/int": ^1.0.1 - checksum: dca9b98eb1f56a4002b5b9e7351fbc49f3d8616af87007c01e833bd763ac89214eb5f3b7e18673c91ce59d4a0e4856a2eb661ace33d39f17fb1ad267271fccd8 - languageName: node - linkType: hard - -"@stablelib/chacha20poly1305@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/chacha20poly1305@npm:1.0.1" - dependencies: - "@stablelib/aead": ^1.0.1 - "@stablelib/binary": ^1.0.1 - "@stablelib/chacha": ^1.0.1 - "@stablelib/constant-time": ^1.0.1 - "@stablelib/poly1305": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: 81f1a32330838d31e4dc3144d76eba7244b56d9ea38c1f604f2c34d93ed8e67e9a6167d2cfd72254c13cc46dfc1f5ce5157b37939a575295d69d9144abb4e4fb - languageName: node - linkType: hard - -"@stablelib/chacha@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/chacha@npm:1.0.1" - dependencies: - "@stablelib/binary": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: f061f36c4ca4bf177dd7cac11e7c65ced164f141b6065885141ae5a55f32e16ba0209aefcdcc966aef013f1da616ce901a3a80653b4b6f833cf7e3397ae2d6bd - languageName: node - linkType: hard - -"@stablelib/constant-time@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/constant-time@npm:1.0.1" - checksum: dba4f4bf508de2ff15f7f0cbd875e70391aa3ba3698290fe1ed2feb151c243ba08a90fc6fb390ec2230e30fcc622318c591a7c0e35dcb8150afb50c797eac3d7 - languageName: node - linkType: hard - -"@stablelib/int@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/int@npm:1.0.1" - checksum: 65bfbf50a382eea70c68e05366bf379cfceff8fbc076f1c267ef2f2411d7aed64fd140c415cb6c29f19a3910d3b8b7805d4b32ad5721a5007a8e744a808c7ae3 - languageName: node - linkType: hard - -"@stablelib/poly1305@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/poly1305@npm:1.0.1" - dependencies: - "@stablelib/constant-time": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: 70b845bb0481c66b7ba3f3865d01e4c67a4dffc9616fc6de1d23efc5e828ec09de25f8e3be4e1f15a23b8e87e3036ee3d949c2fd4785047e6f7028bbec0ead18 - languageName: node - linkType: hard - -"@stablelib/wipe@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/wipe@npm:1.0.1" - checksum: 287802eb146810a46ba72af70b82022caf83a8aeebde23605f5ee0decf64fe2b97a60c856e43b6617b5801287c30cfa863cfb0469e7fcde6f02d143cf0c6cbf4 - languageName: node - linkType: hard - -"@stablelib/xchacha20@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/xchacha20@npm:1.0.1" - dependencies: - "@stablelib/binary": ^1.0.1 - "@stablelib/chacha": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - checksum: e1aa210d7a10090bf86034922b8bd4713656fc01fb0b9f3a2dffdbea254ed6d47803c9e31c1f35d4c3c0d96398ebac00df3f91a2ffc006070600429e70ce785e - languageName: node - linkType: hard - -"@stablelib/xchacha20poly1305@npm:^1.0.1": - version: 1.0.1 - resolution: "@stablelib/xchacha20poly1305@npm:1.0.1" - dependencies: - "@stablelib/aead": ^1.0.1 - "@stablelib/chacha20poly1305": ^1.0.1 - "@stablelib/constant-time": ^1.0.1 - "@stablelib/wipe": ^1.0.1 - "@stablelib/xchacha20": ^1.0.1 - checksum: 74d1ad0c0772f1a528a7a677df29687a5e6bd5eeb33a7abf2f861537005630bb231fd29015d5d68eac04f4e21f2addae19513ec0a899609779050d4117675d11 - languageName: node - linkType: hard - "@substrate/connect-extension-protocol@npm:^1.0.1": version: 1.0.1 resolution: "@substrate/connect-extension-protocol@npm:1.0.1" @@ -2981,6 +2969,13 @@ __metadata: languageName: node linkType: hard +"@types/json-pointer@npm:^1.0.34": + version: 1.0.34 + resolution: "@types/json-pointer@npm:1.0.34" + checksum: 7ecfa30d0b92819819c8dfefa27118dd4798cf415c60fe9d17c3ba667af420bfe36b8a38f46b8bd90f59bccf438819878f7371dcb9f814b60ed043c35a9daa0a + languageName: node + linkType: hard + "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.10 resolution: "@types/json-schema@npm:7.0.10" @@ -3899,13 +3894,6 @@ __metadata: languageName: node linkType: hard -"bech32@npm:^2.0.0": - version: 2.0.0 - resolution: "bech32@npm:2.0.0" - checksum: fa15acb270b59aa496734a01f9155677b478987b773bf701f465858bf1606c6a970085babd43d71ce61895f1baa594cb41a2cd1394bd2c6698f03cc2d811300e - languageName: node - linkType: hard - "bl@npm:^4.0.3": version: 4.1.0 resolution: "bl@npm:4.1.0" @@ -4684,29 +4672,6 @@ __metadata: languageName: node linkType: hard -"did-jwt@npm:^7.0.0": - version: 7.1.0 - resolution: "did-jwt@npm:7.1.0" - dependencies: - "@noble/curves": ^1.0.0 - "@noble/hashes": ^1.3.0 - "@stablelib/xchacha20poly1305": ^1.0.1 - bech32: ^2.0.0 - canonicalize: ^2.0.0 - did-resolver: ^4.0.0 - multiformats: ^9.6.5 - uint8arrays: ^3.0.0 - checksum: 1a23f201f9eb1abe68193067a28c37ead56fbce5e8147cbfdcc0d41dc374bf60c20d9e8529294ca35f8106d0ae26d9a7ace77f974125c3ac63ac990399b465fa - languageName: node - linkType: hard - -"did-resolver@npm:^4.0.0": - version: 4.0.1 - resolution: "did-resolver@npm:4.0.1" - checksum: 1d039ce4da70b004f7679a65122c698e5b7c492eb9b2771daef6a3742b35be5cf3bb4b60af45aee3048bc1cf3161ac1dc4e2dbfcb956a0a47ea2efb405cce76d - languageName: node - linkType: hard - "diff-sequences@npm:^29.4.3": version: 29.4.3 resolution: "diff-sequences@npm:29.4.3" @@ -5473,6 +5438,13 @@ __metadata: languageName: node linkType: hard +"foreach@npm:^2.0.4": + version: 2.0.6 + resolution: "foreach@npm:2.0.6" + checksum: f7b68494545ee41cbd0b0425ebf5386c265dc38ef2a9b0d5cd91a1b82172e939b4cf9387f8e0ebf6db4e368fc79ed323f2198424d5c774515ac3ed9b08901c0e + languageName: node + linkType: hard + "formdata-polyfill@npm:^4.0.10": version: 4.0.10 resolution: "formdata-polyfill@npm:4.0.10" @@ -6790,6 +6762,15 @@ fsevents@^2.3.2: languageName: node linkType: hard +"json-pointer@npm:^0.6.2": + version: 0.6.2 + resolution: "json-pointer@npm:0.6.2" + dependencies: + foreach: ^2.0.4 + checksum: 668143014b16d7f90e6f0e6c2d756b00b799424f58d750794a79a24cbce595855b224f7861986aaff719579558fbab81fb83c7371f5e24aded9dc33b3838de30 + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -7157,7 +7138,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"marked@npm:^4.2.12": +"marked@npm:^4.3.0": version: 4.3.0 resolution: "marked@npm:4.3.0" bin: @@ -7248,12 +7229,12 @@ fsevents@^2.3.2: languageName: node linkType: hard -"minimatch@npm:^7.1.3": - version: 7.4.6 - resolution: "minimatch@npm:7.4.6" +"minimatch@npm:^9.0.0": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" dependencies: brace-expansion: ^2.0.1 - checksum: 1a6c8d22618df9d2a88aabeef1de5622eb7b558e9f8010be791cb6b0fa6e102d39b11c28d75b855a1e377b12edc7db8ff12a99c20353441caa6a05e78deb5da9 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 languageName: node linkType: hard @@ -7389,10 +7370,12 @@ fsevents@^2.3.2: languageName: node linkType: hard -"multiformats@npm:^9.4.2, multiformats@npm:^9.6.5": - version: 9.9.0 - resolution: "multiformats@npm:9.9.0" - checksum: d3e8c1be400c09a014f557ea02251a2710dbc9fca5aa32cc702ff29f636c5471e17979f30bdcb0a9cbb556f162a8591dc2e1219c24fc21394a56115b820bb84e +"multibase@npm:^4.0.6": + version: 4.0.6 + resolution: "multibase@npm:4.0.6" + dependencies: + "@multiformats/base-x": ^4.0.1 + checksum: 891ce47f509c6070d2306e7e00aef3ef41fbb50a848a1e1bec5e75ca63c5032015a436cf09e9e3939b5b2ca81e74804151eb410a388f10e9aabf7a2f5a35d272 languageName: node linkType: hard @@ -8322,7 +8305,7 @@ fsevents@^2.3.2: testcontainers: ^9.0.0 ts-jest: ^29.1.1 ts-jest-resolver: ^2.0.1 - typedoc: ^0.23.0 + typedoc: ^0.24.8 typescript: ^4.8.3 languageName: unknown linkType: soft @@ -9301,19 +9284,19 @@ fsevents@^2.3.2: languageName: node linkType: hard -"typedoc@npm:^0.23.0": - version: 0.23.28 - resolution: "typedoc@npm:0.23.28" +"typedoc@npm:^0.24.8": + version: 0.24.8 + resolution: "typedoc@npm:0.24.8" dependencies: lunr: ^2.3.9 - marked: ^4.2.12 - minimatch: ^7.1.3 + marked: ^4.3.0 + minimatch: ^9.0.0 shiki: ^0.14.1 peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x bin: typedoc: bin/typedoc - checksum: 40eb4e207aac1b734e09400cf03f543642cc7b11000895198dd5a0d3166315759ccf4ac30a2915153597c5c186101c72bac2f1fc12b428184a9274d3a0e44c5e + checksum: a46a14497f789fb3594e6c3af2e45276934ac46df40b7ed15a504ee51dc7a8013a2ffb3a54fd73abca6a2b71f97d3ec9ad356fa9aa81d29743e4645a965a2ae0 languageName: node linkType: hard @@ -9355,15 +9338,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"uint8arrays@npm:^3.0.0": - version: 3.1.1 - resolution: "uint8arrays@npm:3.1.1" - dependencies: - multiformats: ^9.4.2 - checksum: b93b6c3f0a526b116799f3a3409bd4b5d5553eb3e73e485998ece7974742254fbc0d2f7988dd21ac86c4b974552f45d9ae9cf9cba9647e529f8eb1fdd2ed84d0 - languageName: node - linkType: hard - "unbox-primitive@npm:^1.0.1": version: 1.0.1 resolution: "unbox-primitive@npm:1.0.1" @@ -9714,9 +9688,9 @@ typescript@^4.8.3: linkType: hard "word-wrap@npm:^1.2.3": - version: 1.2.3 - resolution: "word-wrap@npm:1.2.3" - checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb languageName: node linkType: hard From 3b3d838711e10eac869f017672d091b0ebf9f7b6 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Fri, 15 Dec 2023 16:21:28 +0100 Subject: [PATCH 083/130] chore: depchecks (#824) --- packages/asset-credentials/package.json | 1 + packages/augment-api/package.json | 6 +++++- packages/chain-helpers/package.json | 2 +- packages/credentials/package.json | 3 --- packages/did/package.json | 1 - packages/sdk-js/package.json | 1 - packages/type-definitions/package.json | 3 +++ packages/utils/package.json | 2 +- yarn.lock | 25 +++++++++++++------------ 9 files changed, 24 insertions(+), 20 deletions(-) diff --git a/packages/asset-credentials/package.json b/packages/asset-credentials/package.json index 6bafc7815..7958667ed 100644 --- a/packages/asset-credentials/package.json +++ b/packages/asset-credentials/package.json @@ -34,6 +34,7 @@ "typescript": "^4.8.3" }, "dependencies": { + "@kiltprotocol/augment-api": "workspace:*", "@kiltprotocol/chain-helpers": "workspace:*", "@kiltprotocol/config": "workspace:*", "@kiltprotocol/credentials": "workspace:*", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 4a5b4be59..24b9b02a3 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -50,6 +50,10 @@ "yargs": "^16.2.0" }, "dependencies": { - "@kiltprotocol/type-definitions": "workspace:*" + "@kiltprotocol/type-definitions": "workspace:*", + "@polkadot/api-base": "^10.0.0", + "@polkadot/rpc-core": "^10.0.0", + "@polkadot/types": "^10.0.0", + "@polkadot/types-codec": "^10.0.0" } } diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index d7386b014..b534cfe94 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -30,7 +30,6 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { - "@polkadot/keyring": "^12.0.0", "rimraf": "^3.0.2", "typescript": "^4.8.3" }, @@ -40,6 +39,7 @@ "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", "@polkadot/api": "^10.4.0", + "@polkadot/api-derive": "^10.0.0", "@polkadot/types": "^10.4.0", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0" diff --git a/packages/credentials/package.json b/packages/credentials/package.json index 75d16b400..265e89cce 100644 --- a/packages/credentials/package.json +++ b/packages/credentials/package.json @@ -31,9 +31,7 @@ "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { "@types/json-pointer": "^1.0.34", - "@types/uuid": "^8.0.0", "rimraf": "^3.0.2", - "testcontainers": "^9.0.0", "typescript": "^4.8.3" }, "dependencies": { @@ -45,7 +43,6 @@ "@kiltprotocol/es256k-jcs-2023": "0.1.0-rc.1", "@kiltprotocol/jcs-data-integrity-proofs-common": "0.1.0-rc.1", "@kiltprotocol/sr25519-jcs-2023": "0.1.0-rc.1", - "@kiltprotocol/type-definitions": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", "@polkadot/api": "^10.4.0", diff --git a/packages/did/package.json b/packages/did/package.json index 95bdd77c8..6e631b6e6 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -43,7 +43,6 @@ "@polkadot/api": "^10.4.0", "@polkadot/keyring": "^12.0.0", "@polkadot/types": "^10.4.0", - "@polkadot/types-codec": "^10.4.0", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0", "multibase": "^4.0.6" diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index f0bde215c..9fad6e6d2 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -43,7 +43,6 @@ "@kiltprotocol/config": "workspace:*", "@kiltprotocol/credentials": "workspace:*", "@kiltprotocol/did": "workspace:*", - "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*" } } diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 41de4abad..56ae2df9e 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -32,5 +32,8 @@ "devDependencies": { "rimraf": "^3.0.2", "typescript": "^4.8.3" + }, + "dependencies": { + "@polkadot/types": "^10.0.0" } } diff --git a/packages/utils/package.json b/packages/utils/package.json index 457473926..caa903731 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -30,13 +30,13 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { + "@types/uuid": "^8.0.0", "rimraf": "^3.0.2", "typescript": "^4.8.3" }, "dependencies": { "@kiltprotocol/eddsa-jcs-2022": "0.1.0-rc.1", "@kiltprotocol/es256k-jcs-2023": "0.1.0-rc.1", - "@kiltprotocol/jcs-data-integrity-proofs-common": "0.1.0-rc.1", "@kiltprotocol/sr25519-jcs-2023": "0.1.0-rc.1", "@kiltprotocol/types": "workspace:*", "@polkadot/api": "^10.4.0", diff --git a/yarn.lock b/yarn.lock index 540e2a2c3..dc137fca6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1934,6 +1934,7 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/asset-credentials@workspace:packages/asset-credentials" dependencies: + "@kiltprotocol/augment-api": "workspace:*" "@kiltprotocol/chain-helpers": "workspace:*" "@kiltprotocol/config": "workspace:*" "@kiltprotocol/credentials": "workspace:*" @@ -1955,7 +1956,11 @@ __metadata: dependencies: "@kiltprotocol/type-definitions": "workspace:*" "@polkadot/api": ^10.4.0 + "@polkadot/api-base": ^10.0.0 + "@polkadot/rpc-core": ^10.0.0 "@polkadot/typegen": ^10.4.0 + "@polkadot/types": ^10.0.0 + "@polkadot/types-codec": ^10.0.0 "@types/node": ^16.11.7 glob: ^7.1.1 rimraf: ^3.0.2 @@ -1974,7 +1979,7 @@ __metadata: "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" "@polkadot/api": ^10.4.0 - "@polkadot/keyring": ^12.0.0 + "@polkadot/api-derive": ^10.0.0 "@polkadot/types": ^10.4.0 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 @@ -2007,7 +2012,6 @@ __metadata: "@kiltprotocol/es256k-jcs-2023": 0.1.0-rc.1 "@kiltprotocol/jcs-data-integrity-proofs-common": 0.1.0-rc.1 "@kiltprotocol/sr25519-jcs-2023": 0.1.0-rc.1 - "@kiltprotocol/type-definitions": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" "@polkadot/api": ^10.4.0 @@ -2016,10 +2020,8 @@ __metadata: "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 "@types/json-pointer": ^1.0.34 - "@types/uuid": ^8.0.0 json-pointer: ^0.6.2 rimraf: ^3.0.2 - testcontainers: ^9.0.0 typescript: ^4.8.3 languageName: unknown linkType: soft @@ -2037,7 +2039,6 @@ __metadata: "@polkadot/api": ^10.4.0 "@polkadot/keyring": ^12.0.0 "@polkadot/types": ^10.4.0 - "@polkadot/types-codec": ^10.4.0 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 multibase: ^4.0.6 @@ -2102,7 +2103,6 @@ __metadata: "@kiltprotocol/config": "workspace:*" "@kiltprotocol/credentials": "workspace:*" "@kiltprotocol/did": "workspace:*" - "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" rimraf: ^3.0.2 terser-webpack-plugin: ^5.1.1 @@ -2127,6 +2127,7 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/type-definitions@workspace:packages/type-definitions" dependencies: + "@polkadot/types": ^10.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 languageName: unknown @@ -2152,13 +2153,13 @@ __metadata: dependencies: "@kiltprotocol/eddsa-jcs-2022": 0.1.0-rc.1 "@kiltprotocol/es256k-jcs-2023": 0.1.0-rc.1 - "@kiltprotocol/jcs-data-integrity-proofs-common": 0.1.0-rc.1 "@kiltprotocol/sr25519-jcs-2023": 0.1.0-rc.1 "@kiltprotocol/types": "workspace:*" "@polkadot/api": ^10.4.0 "@polkadot/keyring": ^12.0.0 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 + "@types/uuid": ^8.0.0 cbor-web: ^9.0.0 rimraf: ^3.0.2 tweetnacl: ^1.0.3 @@ -2293,7 +2294,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-base@npm:10.7.3": +"@polkadot/api-base@npm:10.7.3, @polkadot/api-base@npm:^10.0.0": version: 10.7.3 resolution: "@polkadot/api-base@npm:10.7.3" dependencies: @@ -2306,7 +2307,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-derive@npm:10.7.3": +"@polkadot/api-derive@npm:10.7.3, @polkadot/api-derive@npm:^10.0.0": version: 10.7.3 resolution: "@polkadot/api-derive@npm:10.7.3" dependencies: @@ -2387,7 +2388,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/rpc-core@npm:10.7.3": +"@polkadot/rpc-core@npm:10.7.3, @polkadot/rpc-core@npm:^10.0.0": version: 10.7.3 resolution: "@polkadot/rpc-core@npm:10.7.3" dependencies: @@ -2466,7 +2467,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/types-codec@npm:10.7.3, @polkadot/types-codec@npm:^10.4.0": +"@polkadot/types-codec@npm:10.7.3, @polkadot/types-codec@npm:^10.0.0": version: 10.7.3 resolution: "@polkadot/types-codec@npm:10.7.3" dependencies: @@ -2512,7 +2513,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/types@npm:10.7.3, @polkadot/types@npm:^10.4.0": +"@polkadot/types@npm:10.7.3, @polkadot/types@npm:^10.0.0, @polkadot/types@npm:^10.4.0": version: 10.7.3 resolution: "@polkadot/types@npm:10.7.3" dependencies: From c5b4f095cb3303c92c3001340520a73902b94cc3 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:22:17 +0100 Subject: [PATCH 084/130] chore: rename vc export package (#828) * chore: rename vc-export package to jsonld-suites * docs: update readme of jsonld-suites * refactor!: replace KiltAttestationProofV1Purpose with NoProofPurpose --- packages/credentials/src/V1/index.ts | 2 +- packages/jsonld-suites/README.md | 50 ++++++++++++++ .../{vc-export => jsonld-suites}/package.json | 2 +- .../src/context/context.ts | 0 .../src/context/index.ts | 0 .../src/documentLoader.ts | 0 .../src/examples/KiltCredentialV1.json | 0 .../{vc-export => jsonld-suites}/src/index.ts | 0 .../src/purposes/NoProofPurpose.ts} | 10 +-- .../src/purposes/index.ts | 2 +- .../src/suites/KiltAttestationProofV1.spec.ts | 12 ++-- .../src/suites/KiltAttestationProofV1.ts | 0 .../src/suites/Sr25519Signature2020.spec.ts | 0 .../src/suites/Sr25519Signature2020.ts | 0 .../src/suites/Sr25519VerificationKey.ts | 0 .../suites/Sr25519VerificationKey2020.spec.ts | 0 .../src/suites/index.ts | 0 .../src/suites/types.ts | 0 .../src/suites/utils.ts | 0 .../{vc-export => jsonld-suites}/src/types.ts | 0 .../tsconfig.build.json | 0 .../tsconfig.esm.json | 0 packages/vc-export/README.md | 67 ------------------- tsconfig.docs.json | 2 +- tsconfig.json | 2 +- yarn.lock | 44 ++++++------ 26 files changed, 89 insertions(+), 104 deletions(-) create mode 100644 packages/jsonld-suites/README.md rename packages/{vc-export => jsonld-suites}/package.json (97%) rename packages/{vc-export => jsonld-suites}/src/context/context.ts (100%) rename packages/{vc-export => jsonld-suites}/src/context/index.ts (100%) rename packages/{vc-export => jsonld-suites}/src/documentLoader.ts (100%) rename packages/{vc-export => jsonld-suites}/src/examples/KiltCredentialV1.json (100%) rename packages/{vc-export => jsonld-suites}/src/index.ts (100%) rename packages/{vc-export/src/purposes/KiltAttestationProofV1Purpose.ts => jsonld-suites/src/purposes/NoProofPurpose.ts} (80%) rename packages/{vc-export => jsonld-suites}/src/purposes/index.ts (79%) rename packages/{vc-export => jsonld-suites}/src/suites/KiltAttestationProofV1.spec.ts (97%) rename packages/{vc-export => jsonld-suites}/src/suites/KiltAttestationProofV1.ts (100%) rename packages/{vc-export => jsonld-suites}/src/suites/Sr25519Signature2020.spec.ts (100%) rename packages/{vc-export => jsonld-suites}/src/suites/Sr25519Signature2020.ts (100%) rename packages/{vc-export => jsonld-suites}/src/suites/Sr25519VerificationKey.ts (100%) rename packages/{vc-export => jsonld-suites}/src/suites/Sr25519VerificationKey2020.spec.ts (100%) rename packages/{vc-export => jsonld-suites}/src/suites/index.ts (100%) rename packages/{vc-export => jsonld-suites}/src/suites/types.ts (100%) rename packages/{vc-export => jsonld-suites}/src/suites/utils.ts (100%) rename packages/{vc-export => jsonld-suites}/src/types.ts (100%) rename packages/{vc-export => jsonld-suites}/tsconfig.build.json (100%) rename packages/{vc-export => jsonld-suites}/tsconfig.esm.json (100%) delete mode 100644 packages/vc-export/README.md diff --git a/packages/credentials/src/V1/index.ts b/packages/credentials/src/V1/index.ts index 08bb2bb01..4036e1434 100644 --- a/packages/credentials/src/V1/index.ts +++ b/packages/credentials/src/V1/index.ts @@ -6,7 +6,7 @@ */ /** - * @module @kiltprotocol/vc-export + * @module @kiltprotocol/jsonld-suites */ export * as KiltCredentialV1 from './KiltCredentialV1.js' diff --git a/packages/jsonld-suites/README.md b/packages/jsonld-suites/README.md new file mode 100644 index 000000000..7e31848f3 --- /dev/null +++ b/packages/jsonld-suites/README.md @@ -0,0 +1,50 @@ +[![](https://user-images.githubusercontent.com/39338561/122415864-8d6a7c00-cf88-11eb-846f-a98a936f88da.png) +](https://kilt.io) + +![Lint and Test](https://github.com/KILTprotocol/sdk-js/workflows/Lint%20and%20Test/badge.svg) + +Data sovereignty and interoperability + +# Linked Data Proofs Compatibility Package + +This package helps integrating KILT credentials with the popular `@digitalbazaar/vc` library (formerly known as `vc-js`) for issuing and verifying Verifiable Credentials and related tool chain (`jsonld-signatures`, `crypto-ld` & `jsonld`). +It provides you with Linked Data Proof suites and documentLoader implementations that act as plugins to these libraries, enhancing them with support for the proof types and DIDs used in KILT credentials. + +## Installation + +NPM: + +``` +npm install @kiltprotocol/jsonld-suites +``` + +YARN: + +``` +yarn add @kiltprotocol/jsonld-suites +``` + +## Contents + +- `KiltAttestationProofV1` + - When used as a `suite` in `@digitalbazaar/vc` or `jsonld-signatures`, you can: + - verify VCs with a proof type `KiltAttestationProofV1`. + - issue a `KiltAttestationProofV1` type proof for a `KiltCredentialV1` type VC. + - check the revocation status of a `KiltCredentialV1`. +- `NoProofPurpose` + - `ProofPurpose` class to be used in combination with the attestation proof suite above. +- `Sr25519Signature2020` + - A `suite` implementation for creating and verifying sr25519 linked data signatures. +- `Sr25519VerificationKey2020` + - A key class for use with the above signature suite. +- `contexts` + - JSON-LD context defintions for all types and fields used by our suites and credentials. +- `defaultDocumentLoader` + - a `documentLoader` implementation that loads all KILT-specific contexts and credential schemas as well as KILT DID documents and their verification methods. + +## Examples + +See unit test files for usage examples. + +- [Issuing & verifying a `KiltAttestationProofV1` as well as Verifiable Presentations via `@digitalbazaar/vc` & `jsonld-signatures`](./src/suites/KiltAttestationProofV1.spec.ts) +- [Signing Linked Data documents using your DIDs Sr25519 keys](./src/suites/Sr25519Signature2020.spec.ts) diff --git a/packages/vc-export/package.json b/packages/jsonld-suites/package.json similarity index 97% rename from packages/vc-export/package.json rename to packages/jsonld-suites/package.json index ab03c0726..721910d7e 100644 --- a/packages/vc-export/package.json +++ b/packages/jsonld-suites/package.json @@ -1,5 +1,5 @@ { - "name": "@kiltprotocol/vc-export", + "name": "@kiltprotocol/jsonld-suites", "version": "0.34.0", "description": "", "main": "./lib/cjs/index.js", diff --git a/packages/vc-export/src/context/context.ts b/packages/jsonld-suites/src/context/context.ts similarity index 100% rename from packages/vc-export/src/context/context.ts rename to packages/jsonld-suites/src/context/context.ts diff --git a/packages/vc-export/src/context/index.ts b/packages/jsonld-suites/src/context/index.ts similarity index 100% rename from packages/vc-export/src/context/index.ts rename to packages/jsonld-suites/src/context/index.ts diff --git a/packages/vc-export/src/documentLoader.ts b/packages/jsonld-suites/src/documentLoader.ts similarity index 100% rename from packages/vc-export/src/documentLoader.ts rename to packages/jsonld-suites/src/documentLoader.ts diff --git a/packages/vc-export/src/examples/KiltCredentialV1.json b/packages/jsonld-suites/src/examples/KiltCredentialV1.json similarity index 100% rename from packages/vc-export/src/examples/KiltCredentialV1.json rename to packages/jsonld-suites/src/examples/KiltCredentialV1.json diff --git a/packages/vc-export/src/index.ts b/packages/jsonld-suites/src/index.ts similarity index 100% rename from packages/vc-export/src/index.ts rename to packages/jsonld-suites/src/index.ts diff --git a/packages/vc-export/src/purposes/KiltAttestationProofV1Purpose.ts b/packages/jsonld-suites/src/purposes/NoProofPurpose.ts similarity index 80% rename from packages/vc-export/src/purposes/KiltAttestationProofV1Purpose.ts rename to packages/jsonld-suites/src/purposes/NoProofPurpose.ts index 7c6c43d2c..abf51ae4b 100644 --- a/packages/vc-export/src/purposes/KiltAttestationProofV1Purpose.ts +++ b/packages/jsonld-suites/src/purposes/NoProofPurpose.ts @@ -11,10 +11,10 @@ // @ts-expect-error not a typescript module import jsigs from 'jsonld-signatures' // cjs module -import { KiltAttestationProofV1, Types } from '@kiltprotocol/credentials' +import type { Types } from '@kiltprotocol/credentials' import type { JsonLdObj } from '../documentLoader.js' -export class KiltAttestationProofV1Purpose extends jsigs.purposes.ProofPurpose { +export class NoProofPurpose extends jsigs.purposes.ProofPurpose { constructor({ date, maxTimestampDelta = Infinity, @@ -41,7 +41,9 @@ export class KiltAttestationProofV1Purpose extends jsigs.purposes.ProofPurpose { /* document, suite, documentLoader, expansionMap */ } ): Promise { - return { ...proof, type: KiltAttestationProofV1.PROOF_TYPE } + const proofCopy = { ...proof } + delete (proofCopy as { proofPurpose?: string }).proofPurpose + return proofCopy } async match( @@ -50,6 +52,6 @@ export class KiltAttestationProofV1Purpose extends jsigs.purposes.ProofPurpose { /* document, documentLoader, expansionMap */ } ): Promise { - return proof.type === KiltAttestationProofV1.PROOF_TYPE + return !Object.keys(proof).includes('proofPurpose') } } diff --git a/packages/vc-export/src/purposes/index.ts b/packages/jsonld-suites/src/purposes/index.ts similarity index 79% rename from packages/vc-export/src/purposes/index.ts rename to packages/jsonld-suites/src/purposes/index.ts index 573353c26..c18e4ba47 100644 --- a/packages/vc-export/src/purposes/index.ts +++ b/packages/jsonld-suites/src/purposes/index.ts @@ -5,4 +5,4 @@ * found in the LICENSE file in the root directory of this source tree. */ -export * from './KiltAttestationProofV1Purpose.js' +export * from './NoProofPurpose.js' diff --git a/packages/vc-export/src/suites/KiltAttestationProofV1.spec.ts b/packages/jsonld-suites/src/suites/KiltAttestationProofV1.spec.ts similarity index 97% rename from packages/vc-export/src/suites/KiltAttestationProofV1.spec.ts rename to packages/jsonld-suites/src/suites/KiltAttestationProofV1.spec.ts index da9bdd610..e7b7c4070 100644 --- a/packages/vc-export/src/suites/KiltAttestationProofV1.spec.ts +++ b/packages/jsonld-suites/src/suites/KiltAttestationProofV1.spec.ts @@ -50,13 +50,13 @@ import { kiltDidLoader, } from '../documentLoader.js' import ingosCredential from '../examples/KiltCredentialV1.json' -import { KiltAttestationProofV1Purpose } from '../purposes/KiltAttestationProofV1Purpose.js' +import { NoProofPurpose } from '../purposes/NoProofPurpose.js' import { CredentialStub, KiltAttestationV1Suite, } from './KiltAttestationProofV1.js' import { Sr25519Signature2020 } from './Sr25519Signature2020.js' -import { makeFakeDid } from './Sr25519Signature2020.spec' +import { makeFakeDid } from './Sr25519Signature2020.spec.js' jest.mock('@kiltprotocol/did', () => ({ ...jest.requireActual('@kiltprotocol/did'), @@ -152,7 +152,7 @@ const documentLoader = combineDocumentLoaders([ ]) let suite: KiltAttestationV1Suite -let purpose: KiltAttestationProofV1Purpose +let purpose: NoProofPurpose let proof: KiltAttestationProofV1.Interface let keypair: KiltKeyringPair let didDocument: DidDocument @@ -161,7 +161,7 @@ beforeAll(async () => { suite = new KiltAttestationV1Suite({ ctypes: [cType, emailCType], }) - purpose = new KiltAttestationProofV1Purpose() + purpose = new NoProofPurpose() proof = attestedVc.proof as KiltAttestationProofV1.Interface ;({ keypair, didDocument } = await makeFakeDid()) }) @@ -334,7 +334,7 @@ describe('vc-js', () => { const result = await vcjs.verify({ presentation, suite: [suite, new Sr25519Signature2020()], - purpose: new KiltAttestationProofV1Purpose(), + purpose: new NoProofPurpose(), challenge: '0x1234', documentLoader, checkStatus: suite.checkStatus, @@ -385,7 +385,7 @@ describe('vc-js', () => { challenge: '0x1234', documentLoader: extendedDocLoader, checkStatus: suite.checkStatus, - purpose: new KiltAttestationProofV1Purpose(), + purpose: new NoProofPurpose(), }) expect(result.presentationResult).not.toHaveProperty( diff --git a/packages/vc-export/src/suites/KiltAttestationProofV1.ts b/packages/jsonld-suites/src/suites/KiltAttestationProofV1.ts similarity index 100% rename from packages/vc-export/src/suites/KiltAttestationProofV1.ts rename to packages/jsonld-suites/src/suites/KiltAttestationProofV1.ts diff --git a/packages/vc-export/src/suites/Sr25519Signature2020.spec.ts b/packages/jsonld-suites/src/suites/Sr25519Signature2020.spec.ts similarity index 100% rename from packages/vc-export/src/suites/Sr25519Signature2020.spec.ts rename to packages/jsonld-suites/src/suites/Sr25519Signature2020.spec.ts diff --git a/packages/vc-export/src/suites/Sr25519Signature2020.ts b/packages/jsonld-suites/src/suites/Sr25519Signature2020.ts similarity index 100% rename from packages/vc-export/src/suites/Sr25519Signature2020.ts rename to packages/jsonld-suites/src/suites/Sr25519Signature2020.ts diff --git a/packages/vc-export/src/suites/Sr25519VerificationKey.ts b/packages/jsonld-suites/src/suites/Sr25519VerificationKey.ts similarity index 100% rename from packages/vc-export/src/suites/Sr25519VerificationKey.ts rename to packages/jsonld-suites/src/suites/Sr25519VerificationKey.ts diff --git a/packages/vc-export/src/suites/Sr25519VerificationKey2020.spec.ts b/packages/jsonld-suites/src/suites/Sr25519VerificationKey2020.spec.ts similarity index 100% rename from packages/vc-export/src/suites/Sr25519VerificationKey2020.spec.ts rename to packages/jsonld-suites/src/suites/Sr25519VerificationKey2020.spec.ts diff --git a/packages/vc-export/src/suites/index.ts b/packages/jsonld-suites/src/suites/index.ts similarity index 100% rename from packages/vc-export/src/suites/index.ts rename to packages/jsonld-suites/src/suites/index.ts diff --git a/packages/vc-export/src/suites/types.ts b/packages/jsonld-suites/src/suites/types.ts similarity index 100% rename from packages/vc-export/src/suites/types.ts rename to packages/jsonld-suites/src/suites/types.ts diff --git a/packages/vc-export/src/suites/utils.ts b/packages/jsonld-suites/src/suites/utils.ts similarity index 100% rename from packages/vc-export/src/suites/utils.ts rename to packages/jsonld-suites/src/suites/utils.ts diff --git a/packages/vc-export/src/types.ts b/packages/jsonld-suites/src/types.ts similarity index 100% rename from packages/vc-export/src/types.ts rename to packages/jsonld-suites/src/types.ts diff --git a/packages/vc-export/tsconfig.build.json b/packages/jsonld-suites/tsconfig.build.json similarity index 100% rename from packages/vc-export/tsconfig.build.json rename to packages/jsonld-suites/tsconfig.build.json diff --git a/packages/vc-export/tsconfig.esm.json b/packages/jsonld-suites/tsconfig.esm.json similarity index 100% rename from packages/vc-export/tsconfig.esm.json rename to packages/jsonld-suites/tsconfig.esm.json diff --git a/packages/vc-export/README.md b/packages/vc-export/README.md deleted file mode 100644 index 9a73bbbcd..000000000 --- a/packages/vc-export/README.md +++ /dev/null @@ -1,67 +0,0 @@ -[![](https://user-images.githubusercontent.com/39338561/122415864-8d6a7c00-cf88-11eb-846f-a98a936f88da.png) -](https://kilt.io) - -![Lint and Test](https://github.com/KILTprotocol/sdk-js/workflows/Lint%20and%20Test/badge.svg) - -Data sovereignty and interoperability - -# Verifiable Credentials Compatibility Package - -This package helps you to translate KILT credentials to the popular [Verifiable Credential](https://www.w3.org/TR/vc-data-model/) format and structure. -It provides you with tools to export your existing KILT credentials to the widely understood Verifiable Credential, produce Verifiable Presentations from a Verifiable Credential, and to verify the associated proofs. - -## Installation - -NPM: - -``` -npm install @kiltprotocol/vc-export -``` - -YARN: - -``` -yarn add @kiltprotocol/vc-export -``` - -## Contents - -- exporting - - `exportICredentialToVc()`: translates an existing `ICredential` object to a `VerifiableCredential` with an embedded proof. - The resulting VC still verifies against the original attestation record and thus is valid as long as the original credential remains valid (i.e., not revoked). -- `KiltCredentialV1` - - functions that create a VC of type `KiltCredentialV1` either from claims and other input, or of an existing `ICredential`. - - a JSON-schema and functions to validate the structure and data model of a `KiltCredentialV1` type VC. -- `KiltAttestationProofV1` - - functions that verify VCs with a proof type `KiltAttestationProofV1`. - - functions that help in creating a new `KiltAttestationProofV1` type proof for a `KiltCredentialV1` type VC. - - functions that produce a `KiltAttestationProofV1` type from an existing `ICredential`. - - functions that update a `KiltAttestationProofV1` after applying selective disclosure. -- `KiltRevocationStatusV1` - - a function to check the revocation status of a VC with a `KiltAttestationProofV1`. - - a function to help create a `credentialStatus` object of type `KiltRevocationStatusV1`. -- `CredentialSchema` - - a function to validate the disclosed `credentialSubject` properties against the schema of a KILT CType, which is a prescriptive schema detailing fields and their data types. -- `Presentation` - - Tools for creating and verifying Verifiable Presentations and signing them in the JSON Web Token (JWT) serialization. -- `DidJWT` - - Tools for signing JWTs using your KILT DID. Used by the `Presentation` tools. -- `vcjs` - - Various tools needed to integrate KILT VCs & DIDs with the popular `@digitalbazaar/vc` library (formerly known as `vc-js`) and related tool chain (`jsonld-signatures`, `crypto-ld` & `jsonld` libraries), including: - - A `jsonld-signatures` suite for creating and verifying `KiltAttestationProofV1` type proofs. - - Addionally, a `ProofPurpose` class to be used in combination with that suite. - - A `jsonld-signatures` suite for creating and verifying sr25519 linked data signatures. - - Includes a `Sr25519VerificationKey2020` key class for use with `crypto-ld`. - - JSON-LD context defintions for all types introduced here. - - `documentLoader` implementations to load these contexts as well as KILT DID documents and their verification methods. - -## Examples - -See unit test files for usage examples. - -- [Transforing an `ICredential` to a `KiltCredentialV1` with a `KiltAttestationProofV1`](./src/exportToVerifiableCredential.spec.ts) -- [Producing, verifying, and modifying (->selective disclosure) a `KiltAttestationProofV1`](./src/KiltAttestationProofV1.spec.ts) -- [Producing, DID-signing and verifying a Verifiable Presentation](./src/Presentation.spec.ts) -- [Signing and verifying JWTs using your DID keys](./src/DidJwt.spec.ts) -- [Issuing & verifying a `KiltAttestationProofV1` as well as Verifiable Presentations via `@digitalbazaar/vc` & `jsonld-signatures`](./src/vc-js/suites/KiltAttestationProofV1.spec.ts) -- [Signing Linked Data documents using your DIDs Sr25519 keys](./src/vc-js/suites/Sr25519Signature2020.spec.ts) diff --git a/tsconfig.docs.json b/tsconfig.docs.json index edcb6e8e1..d28b8e082 100644 --- a/tsconfig.docs.json +++ b/tsconfig.docs.json @@ -15,7 +15,7 @@ "packages/type-definitions/src/index.ts", "packages/types/src/index.ts", "packages/utils/src/index.ts", - "packages/vc-export/src/index.ts", + "packages/jsonld-suites/src/index.ts", ], "out": "docs/api", "theme": "default", diff --git a/tsconfig.json b/tsconfig.json index 6caa62b5f..2b9e6075f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,7 @@ "@kiltprotocol/sdk-js": ["sdk-js/src"], "@kiltprotocol/types": ["types/src"], "@kiltprotocol/utils": ["utils/src"], - "@kiltprotocol/vc-export": ["vc-export/src"], + "@kiltprotocol/jsonld-suites": ["jsonld-suites/src"], "@kiltprotocol/did": ["did/src"], "@kiltprotocol/docs": ["docs/src"], "@kiltprotocol/augment-api": ["augment-api/src"], diff --git a/yarn.lock b/yarn.lock index dc137fca6..0eff7602d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2079,6 +2079,28 @@ __metadata: languageName: node linkType: hard +"@kiltprotocol/jsonld-suites@workspace:packages/jsonld-suites": + version: 0.0.0-use.local + resolution: "@kiltprotocol/jsonld-suites@workspace:packages/jsonld-suites" + dependencies: + "@digitalbazaar/ed25519-signature-2020": ^5.2.0 + "@digitalbazaar/vc": ^6.0.1 + "@kiltprotocol/config": "workspace:*" + "@kiltprotocol/credentials": "workspace:*" + "@kiltprotocol/did": "workspace:*" + "@kiltprotocol/types": "workspace:*" + "@kiltprotocol/utils": "workspace:*" + "@polkadot/util": ^12.0.0 + "@polkadot/util-crypto": ^12.0.0 + crypto-ld: ^6.0.0 + rimraf: ^3.0.2 + typescript: ^4.8.3 + peerDependencies: + jsonld: ^8.1.0 + jsonld-signatures: ^11.0.0 + languageName: unknown + linkType: soft + "@kiltprotocol/legacy-credentials@workspace:packages/legacy-credentials": version: 0.0.0-use.local resolution: "@kiltprotocol/legacy-credentials@workspace:packages/legacy-credentials" @@ -2168,28 +2190,6 @@ __metadata: languageName: unknown linkType: soft -"@kiltprotocol/vc-export@workspace:packages/vc-export": - version: 0.0.0-use.local - resolution: "@kiltprotocol/vc-export@workspace:packages/vc-export" - dependencies: - "@digitalbazaar/ed25519-signature-2020": ^5.2.0 - "@digitalbazaar/vc": ^6.0.1 - "@kiltprotocol/config": "workspace:*" - "@kiltprotocol/credentials": "workspace:*" - "@kiltprotocol/did": "workspace:*" - "@kiltprotocol/types": "workspace:*" - "@kiltprotocol/utils": "workspace:*" - "@polkadot/util": ^12.0.0 - "@polkadot/util-crypto": ^12.0.0 - crypto-ld: ^6.0.0 - rimraf: ^3.0.2 - typescript: ^4.8.3 - peerDependencies: - jsonld: ^8.1.0 - jsonld-signatures: ^11.0.0 - languageName: unknown - linkType: soft - "@multiformats/base-x@npm:^4.0.1": version: 4.0.1 resolution: "@multiformats/base-x@npm:4.0.1" From af2a95e1a3e8bfbc9767ac99ad7b467f0ca4fd69 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Tue, 19 Dec 2023 12:09:23 +0100 Subject: [PATCH 085/130] ci: add tag parameter to npmpublish-rc --- .github/workflows/npmpublish-rc.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/npmpublish-rc.yml b/.github/workflows/npmpublish-rc.yml index 32757d77c..4dc3d513d 100644 --- a/.github/workflows/npmpublish-rc.yml +++ b/.github/workflows/npmpublish-rc.yml @@ -1,6 +1,17 @@ name: Publish candidate package -on: workflow_dispatch +on: + workflow_dispatch: + inputs: + npm_tag: + description: The tag with which the package is tagged on npm. + required: true + options: + - dev + - alpha + - beta + - rc + type: choice jobs: build: From eaa2e12bf9383e4b61c2b429f2728a3779b1e567 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner Date: Tue, 19 Dec 2023 12:58:20 +0100 Subject: [PATCH 086/130] ci: fix & default value for npm tag --- .github/workflows/npmpublish-rc.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/npmpublish-rc.yml b/.github/workflows/npmpublish-rc.yml index 4dc3d513d..97b7586b2 100644 --- a/.github/workflows/npmpublish-rc.yml +++ b/.github/workflows/npmpublish-rc.yml @@ -12,6 +12,7 @@ on: - beta - rc type: choice + default: dev jobs: build: @@ -45,7 +46,7 @@ jobs: id: package_version run: echo "package_version=$(node -pe "require('./package.json').version")" >> $GITHUB_OUTPUT - name: Publish to NPM - run: yarn run publish --tag rc + run: yarn run publish --tag ${{ inputs.npm_tag }} env: YARN_NPM_AUTH_TOKEN: ${{secrets.npm_token}} - name: Repository Dispatch From 7e72b95f3a2b4ee188c55c406f0d63dd6304a74a Mon Sep 17 00:00:00 2001 From: Albrecht Date: Mon, 15 Jan 2024 13:06:03 +0100 Subject: [PATCH 087/130] chore: update 2024 (#829) chore: update 2024 https://github.com/KILTprotocol/ticket/issues/3072 --- LICENSE | 2 +- license-header.js | 2 +- .../asset-credentials/src/credentials/PublicCredential.chain.ts | 2 +- .../asset-credentials/src/credentials/PublicCredential.spec.ts | 2 +- packages/asset-credentials/src/credentials/PublicCredential.ts | 2 +- packages/asset-credentials/src/credentials/index.ts | 2 +- packages/asset-credentials/src/dids/index.ts | 2 +- packages/asset-credentials/src/index.ts | 2 +- packages/augment-api/index.cjs | 2 +- packages/augment-api/index.mjs | 2 +- packages/augment-api/scripts/fixTypes.mjs | 2 +- packages/augment-api/src/index.ts | 2 +- packages/augment-api/src/types.ts | 2 +- packages/chain-helpers/src/balance/Balance.utils.spec.ts | 2 +- packages/chain-helpers/src/balance/Balance.utils.ts | 2 +- packages/chain-helpers/src/blockchain/Blockchain.spec.ts | 2 +- packages/chain-helpers/src/blockchain/Blockchain.ts | 2 +- .../chain-helpers/src/blockchain/SubscriptionPromise.spec.ts | 2 +- packages/chain-helpers/src/blockchain/SubscriptionPromise.ts | 2 +- packages/chain-helpers/src/blockchain/index.ts | 2 +- packages/chain-helpers/src/connect/index.ts | 2 +- packages/chain-helpers/src/errorhandling/ErrorHandler.spec.ts | 2 +- packages/chain-helpers/src/errorhandling/ErrorHandler.ts | 2 +- packages/chain-helpers/src/errorhandling/index.ts | 2 +- packages/chain-helpers/src/index.ts | 2 +- packages/config/src/ConfigService.spec.ts | 2 +- packages/config/src/ConfigService.ts | 2 +- packages/config/src/index.ts | 2 +- packages/credentials/src/V1/KiltAttestationProofV1.spec.ts | 2 +- packages/credentials/src/V1/KiltAttestationProofV1.ts | 2 +- packages/credentials/src/V1/KiltCredentialV1.spec.ts | 2 +- packages/credentials/src/V1/KiltCredentialV1.ts | 2 +- packages/credentials/src/V1/KiltRevocationStatusV1.ts | 2 +- packages/credentials/src/V1/common.ts | 2 +- packages/credentials/src/V1/constants.ts | 2 +- packages/credentials/src/V1/index.ts | 2 +- packages/credentials/src/V1/types.ts | 2 +- packages/credentials/src/attestation/Attestation.chain.ts | 2 +- packages/credentials/src/attestation/Attestation.spec.ts | 2 +- packages/credentials/src/attestation/Attestation.ts | 2 +- packages/credentials/src/attestation/index.ts | 2 +- packages/credentials/src/ctype/CType.chain.ts | 2 +- packages/credentials/src/ctype/CType.metadata.spec.ts | 2 +- packages/credentials/src/ctype/CType.schemas.ts | 2 +- packages/credentials/src/ctype/CType.spec.ts | 2 +- packages/credentials/src/ctype/CType.ts | 2 +- packages/credentials/src/ctype/CTypeLoader.ts | 2 +- packages/credentials/src/ctype/Ctype.nested.spec.ts | 2 +- packages/credentials/src/ctype/index.ts | 2 +- packages/credentials/src/delegation/DelegationDecoder.ts | 2 +- .../src/delegation/DelegationHierarchyDetails.chain.ts | 2 +- packages/credentials/src/delegation/DelegationNode.chain.ts | 2 +- packages/credentials/src/delegation/DelegationNode.spec.ts | 2 +- packages/credentials/src/delegation/DelegationNode.ts | 2 +- packages/credentials/src/delegation/DelegationNode.utils.ts | 2 +- packages/credentials/src/delegation/index.ts | 2 +- packages/credentials/src/holder.ts | 2 +- packages/credentials/src/index.ts | 2 +- packages/credentials/src/interfaces.ts | 2 +- packages/credentials/src/issuer.ts | 2 +- packages/credentials/src/presentation/Presentation.spec.ts | 2 +- packages/credentials/src/presentation/Presentation.ts | 2 +- packages/credentials/src/presentation/index.ts | 2 +- packages/credentials/src/proofs/DataIntegrity.ts | 2 +- packages/credentials/src/proofs/utils.ts | 2 +- packages/credentials/src/verifier.ts | 2 +- packages/did/src/Did.chain.spec.ts | 2 +- packages/did/src/Did.chain.ts | 2 +- packages/did/src/Did.rpc.ts | 2 +- packages/did/src/Did.signature.spec.ts | 2 +- packages/did/src/Did.signature.ts | 2 +- packages/did/src/Did.utils.ts | 2 +- packages/did/src/DidDetails/DidDetails.ts | 2 +- packages/did/src/DidDetails/FullDidDetails.spec.ts | 2 +- packages/did/src/DidDetails/FullDidDetails.ts | 2 +- packages/did/src/DidDetails/LightDidDetails.spec.ts | 2 +- packages/did/src/DidDetails/LightDidDetails.ts | 2 +- packages/did/src/DidDetails/index.ts | 2 +- packages/did/src/DidLinks/AccountLinks.chain.ts | 2 +- packages/did/src/DidLinks/index.ts | 2 +- packages/did/src/DidResolver/DidContexts.ts | 2 +- packages/did/src/DidResolver/DidResolver.spec.ts | 2 +- packages/did/src/DidResolver/DidResolver.ts | 2 +- packages/did/src/DidResolver/index.ts | 2 +- packages/did/src/index.ts | 2 +- packages/jsonld-suites/src/context/context.ts | 2 +- packages/jsonld-suites/src/context/index.ts | 2 +- packages/jsonld-suites/src/documentLoader.ts | 2 +- packages/jsonld-suites/src/index.ts | 2 +- packages/jsonld-suites/src/purposes/NoProofPurpose.ts | 2 +- packages/jsonld-suites/src/purposes/index.ts | 2 +- .../jsonld-suites/src/suites/KiltAttestationProofV1.spec.ts | 2 +- packages/jsonld-suites/src/suites/KiltAttestationProofV1.ts | 2 +- packages/jsonld-suites/src/suites/Sr25519Signature2020.spec.ts | 2 +- packages/jsonld-suites/src/suites/Sr25519Signature2020.ts | 2 +- packages/jsonld-suites/src/suites/Sr25519VerificationKey.ts | 2 +- .../jsonld-suites/src/suites/Sr25519VerificationKey2020.spec.ts | 2 +- packages/jsonld-suites/src/suites/index.ts | 2 +- packages/jsonld-suites/src/suites/types.ts | 2 +- packages/jsonld-suites/src/suites/utils.ts | 2 +- packages/jsonld-suites/src/types.ts | 2 +- packages/legacy-credentials/src/Claim.spec.ts | 2 +- packages/legacy-credentials/src/Claim.ts | 2 +- packages/legacy-credentials/src/Credential.spec.ts | 2 +- packages/legacy-credentials/src/Credential.ts | 2 +- packages/legacy-credentials/src/index.ts | 2 +- packages/legacy-credentials/src/utils.ts | 2 +- packages/legacy-credentials/src/vcInterop.spec.ts | 2 +- packages/legacy-credentials/src/vcInterop.ts | 2 +- packages/sdk-js/src/index.ts | 2 +- packages/sdk-js/webpack.config.js | 2 +- packages/type-definitions/src/index.ts | 2 +- packages/type-definitions/src/mergeType.ts | 2 +- packages/type-definitions/src/runtime/did.ts | 2 +- packages/type-definitions/src/runtime/dipProvider.ts | 2 +- packages/type-definitions/src/runtime/publicCredentials.ts | 2 +- packages/type-definitions/src/runtime/staking.ts | 2 +- packages/type-definitions/src/types_10.ts | 2 +- packages/type-definitions/src/types_10410.ts | 2 +- packages/type-definitions/src/types_10720.ts | 2 +- packages/type-definitions/src/types_10800.ts | 2 +- packages/type-definitions/src/types_10900.ts | 2 +- packages/type-definitions/src/types_11200.ts | 2 +- packages/type-definitions/src/types_12.ts | 2 +- packages/type-definitions/src/types_17.ts | 2 +- packages/type-definitions/src/types_18.ts | 2 +- packages/type-definitions/src/types_19.ts | 2 +- packages/type-definitions/src/types_20.ts | 2 +- packages/type-definitions/src/types_21.ts | 2 +- packages/type-definitions/src/types_23.ts | 2 +- packages/type-definitions/src/types_25.ts | 2 +- packages/type-definitions/src/types_2700.ts | 2 +- packages/type-definitions/src/types_8.ts | 2 +- packages/type-definitions/src/types_9.ts | 2 +- packages/types/src/Address.ts | 2 +- packages/types/src/AssetDid.ts | 2 +- packages/types/src/Attestation.ts | 2 +- packages/types/src/Balance.ts | 2 +- packages/types/src/CType.ts | 2 +- packages/types/src/CTypeMetadata.ts | 2 +- packages/types/src/Claim.ts | 2 +- packages/types/src/Credential.ts | 2 +- packages/types/src/CryptoCallbacks.ts | 2 +- packages/types/src/Delegation.ts | 2 +- packages/types/src/Deposit.ts | 2 +- packages/types/src/Did.ts | 2 +- packages/types/src/DidResolver.ts | 2 +- packages/types/src/Imported.ts | 2 +- packages/types/src/PublicCredential.ts | 2 +- packages/types/src/Signers.ts | 2 +- packages/types/src/SubscriptionPromise.ts | 2 +- packages/types/src/index.ts | 2 +- packages/utils/src/CAIP/CAIP.spec.ts | 2 +- packages/utils/src/CAIP/caip19.ts | 2 +- packages/utils/src/CAIP/caip2.ts | 2 +- packages/utils/src/CAIP/index.ts | 2 +- packages/utils/src/Crypto.spec.ts | 2 +- packages/utils/src/Crypto.ts | 2 +- packages/utils/src/DataUtils.spec.ts | 2 +- packages/utils/src/DataUtils.ts | 2 +- packages/utils/src/SDKErrors.ts | 2 +- packages/utils/src/Signers.ts | 2 +- packages/utils/src/UUID.spec.ts | 2 +- packages/utils/src/UUID.ts | 2 +- packages/utils/src/cbor.ts | 2 +- packages/utils/src/index.ts | 2 +- packages/utils/src/ss58Format.ts | 2 +- tests/breakingChanges/BreakingChanges.spec.ts | 2 +- tests/bundle/bundle-test.ts | 2 +- tests/bundle/bundle.spec.ts | 2 +- tests/bundle/playwright.config.ts | 2 +- tests/integration/AccountLinking.spec.ts | 2 +- tests/integration/Attestation.spec.ts | 2 +- tests/integration/Balance.spec.ts | 2 +- tests/integration/Blockchain.spec.ts | 2 +- tests/integration/Ctypes.spec.ts | 2 +- tests/integration/Delegation.spec.ts | 2 +- tests/integration/Deposit.spec.ts | 2 +- tests/integration/Did.spec.ts | 2 +- tests/integration/ErrorHandler.spec.ts | 2 +- tests/integration/PublicCredentials.spec.ts | 2 +- tests/integration/Web3Names.spec.ts | 2 +- tests/integration/utils.ts | 2 +- tests/testUtils/TestUtils.ts | 2 +- tests/testUtils/index.ts | 2 +- tests/testUtils/metadata/spiritnet.ts | 2 +- tests/testUtils/mocks/index.ts | 2 +- tests/testUtils/mocks/mockedApi.ts | 2 +- tests/testUtils/mocks/mockedApi.utils.ts | 2 +- tests/testUtils/mocks/typeRegistry.ts | 2 +- tests/testUtils/testData.ts | 2 +- 191 files changed, 191 insertions(+), 191 deletions(-) diff --git a/LICENSE b/LICENSE index 5330e4207..349e35567 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2018-2023, Built on KILT +Copyright (c) 2018-2024, Built on KILT All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. diff --git a/license-header.js b/license-header.js index 884d5c8fd..59e55e28c 100644 --- a/license-header.js +++ b/license-header.js @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/asset-credentials/src/credentials/PublicCredential.chain.ts b/packages/asset-credentials/src/credentials/PublicCredential.chain.ts index 2e0f39731..d8884a5ff 100644 --- a/packages/asset-credentials/src/credentials/PublicCredential.chain.ts +++ b/packages/asset-credentials/src/credentials/PublicCredential.chain.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/asset-credentials/src/credentials/PublicCredential.spec.ts b/packages/asset-credentials/src/credentials/PublicCredential.spec.ts index d4906477e..563ad5b1e 100644 --- a/packages/asset-credentials/src/credentials/PublicCredential.spec.ts +++ b/packages/asset-credentials/src/credentials/PublicCredential.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/asset-credentials/src/credentials/PublicCredential.ts b/packages/asset-credentials/src/credentials/PublicCredential.ts index f1ce774fb..63dd6c196 100644 --- a/packages/asset-credentials/src/credentials/PublicCredential.ts +++ b/packages/asset-credentials/src/credentials/PublicCredential.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/asset-credentials/src/credentials/index.ts b/packages/asset-credentials/src/credentials/index.ts index 9cd59fbb3..ba1be95bc 100644 --- a/packages/asset-credentials/src/credentials/index.ts +++ b/packages/asset-credentials/src/credentials/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/asset-credentials/src/dids/index.ts b/packages/asset-credentials/src/dids/index.ts index 88d2c860a..6c3ac4945 100644 --- a/packages/asset-credentials/src/dids/index.ts +++ b/packages/asset-credentials/src/dids/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/asset-credentials/src/index.ts b/packages/asset-credentials/src/index.ts index e9d8be7c3..4ba650a74 100644 --- a/packages/asset-credentials/src/index.ts +++ b/packages/asset-credentials/src/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/augment-api/index.cjs b/packages/augment-api/index.cjs index 4356e3d34..c6b24226f 100644 --- a/packages/augment-api/index.cjs +++ b/packages/augment-api/index.cjs @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/augment-api/index.mjs b/packages/augment-api/index.mjs index 1a8271966..8c2eaca0d 100644 --- a/packages/augment-api/index.mjs +++ b/packages/augment-api/index.mjs @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/augment-api/scripts/fixTypes.mjs b/packages/augment-api/scripts/fixTypes.mjs index 215a7f458..2d8dc4599 100755 --- a/packages/augment-api/scripts/fixTypes.mjs +++ b/packages/augment-api/scripts/fixTypes.mjs @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/augment-api/src/index.ts b/packages/augment-api/src/index.ts index c16a0f63e..c19fe29fa 100644 --- a/packages/augment-api/src/index.ts +++ b/packages/augment-api/src/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/augment-api/src/types.ts b/packages/augment-api/src/types.ts index 511b41bc0..92aebb0ee 100644 --- a/packages/augment-api/src/types.ts +++ b/packages/augment-api/src/types.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/chain-helpers/src/balance/Balance.utils.spec.ts b/packages/chain-helpers/src/balance/Balance.utils.spec.ts index aad9d30e4..fe6be3834 100644 --- a/packages/chain-helpers/src/balance/Balance.utils.spec.ts +++ b/packages/chain-helpers/src/balance/Balance.utils.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/chain-helpers/src/balance/Balance.utils.ts b/packages/chain-helpers/src/balance/Balance.utils.ts index cf9c13db0..90438f1c0 100644 --- a/packages/chain-helpers/src/balance/Balance.utils.ts +++ b/packages/chain-helpers/src/balance/Balance.utils.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/chain-helpers/src/blockchain/Blockchain.spec.ts b/packages/chain-helpers/src/blockchain/Blockchain.spec.ts index 95a197f5e..3d2bff534 100644 --- a/packages/chain-helpers/src/blockchain/Blockchain.spec.ts +++ b/packages/chain-helpers/src/blockchain/Blockchain.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/chain-helpers/src/blockchain/Blockchain.ts b/packages/chain-helpers/src/blockchain/Blockchain.ts index e9736e0f1..c9e3a6512 100644 --- a/packages/chain-helpers/src/blockchain/Blockchain.ts +++ b/packages/chain-helpers/src/blockchain/Blockchain.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/chain-helpers/src/blockchain/SubscriptionPromise.spec.ts b/packages/chain-helpers/src/blockchain/SubscriptionPromise.spec.ts index b78ad6e9a..6e0581413 100644 --- a/packages/chain-helpers/src/blockchain/SubscriptionPromise.spec.ts +++ b/packages/chain-helpers/src/blockchain/SubscriptionPromise.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/chain-helpers/src/blockchain/SubscriptionPromise.ts b/packages/chain-helpers/src/blockchain/SubscriptionPromise.ts index bd4265f79..6b0c1f1e6 100644 --- a/packages/chain-helpers/src/blockchain/SubscriptionPromise.ts +++ b/packages/chain-helpers/src/blockchain/SubscriptionPromise.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/chain-helpers/src/blockchain/index.ts b/packages/chain-helpers/src/blockchain/index.ts index 9fa18bf42..16b881c18 100644 --- a/packages/chain-helpers/src/blockchain/index.ts +++ b/packages/chain-helpers/src/blockchain/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/chain-helpers/src/connect/index.ts b/packages/chain-helpers/src/connect/index.ts index af3a79d73..f566945b3 100644 --- a/packages/chain-helpers/src/connect/index.ts +++ b/packages/chain-helpers/src/connect/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/chain-helpers/src/errorhandling/ErrorHandler.spec.ts b/packages/chain-helpers/src/errorhandling/ErrorHandler.spec.ts index e9b27395c..0e919bf63 100644 --- a/packages/chain-helpers/src/errorhandling/ErrorHandler.spec.ts +++ b/packages/chain-helpers/src/errorhandling/ErrorHandler.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/chain-helpers/src/errorhandling/ErrorHandler.ts b/packages/chain-helpers/src/errorhandling/ErrorHandler.ts index daa30d912..0340f9b1b 100644 --- a/packages/chain-helpers/src/errorhandling/ErrorHandler.ts +++ b/packages/chain-helpers/src/errorhandling/ErrorHandler.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/chain-helpers/src/errorhandling/index.ts b/packages/chain-helpers/src/errorhandling/index.ts index cdd845bfb..f9a477c36 100644 --- a/packages/chain-helpers/src/errorhandling/index.ts +++ b/packages/chain-helpers/src/errorhandling/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/chain-helpers/src/index.ts b/packages/chain-helpers/src/index.ts index 5ece0d279..eb8c015a8 100644 --- a/packages/chain-helpers/src/index.ts +++ b/packages/chain-helpers/src/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/config/src/ConfigService.spec.ts b/packages/config/src/ConfigService.spec.ts index 7e1c3381a..9e769839b 100644 --- a/packages/config/src/ConfigService.spec.ts +++ b/packages/config/src/ConfigService.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/config/src/ConfigService.ts b/packages/config/src/ConfigService.ts index 38d22fc3c..375dbdcff 100644 --- a/packages/config/src/ConfigService.ts +++ b/packages/config/src/ConfigService.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts index bc58062c7..06cbf2fad 100644 --- a/packages/config/src/index.ts +++ b/packages/config/src/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/V1/KiltAttestationProofV1.spec.ts b/packages/credentials/src/V1/KiltAttestationProofV1.spec.ts index 2752ae1b5..d5dbabd50 100644 --- a/packages/credentials/src/V1/KiltAttestationProofV1.spec.ts +++ b/packages/credentials/src/V1/KiltAttestationProofV1.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/V1/KiltAttestationProofV1.ts b/packages/credentials/src/V1/KiltAttestationProofV1.ts index ee7fc4f01..ec9f1194e 100644 --- a/packages/credentials/src/V1/KiltAttestationProofV1.ts +++ b/packages/credentials/src/V1/KiltAttestationProofV1.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/V1/KiltCredentialV1.spec.ts b/packages/credentials/src/V1/KiltCredentialV1.spec.ts index a3bb37665..06ee1fa84 100644 --- a/packages/credentials/src/V1/KiltCredentialV1.spec.ts +++ b/packages/credentials/src/V1/KiltCredentialV1.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/V1/KiltCredentialV1.ts b/packages/credentials/src/V1/KiltCredentialV1.ts index 1a44d5166..557322099 100644 --- a/packages/credentials/src/V1/KiltCredentialV1.ts +++ b/packages/credentials/src/V1/KiltCredentialV1.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/V1/KiltRevocationStatusV1.ts b/packages/credentials/src/V1/KiltRevocationStatusV1.ts index a38840836..16130a9d7 100644 --- a/packages/credentials/src/V1/KiltRevocationStatusV1.ts +++ b/packages/credentials/src/V1/KiltRevocationStatusV1.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/V1/common.ts b/packages/credentials/src/V1/common.ts index 42917dcbc..ade89432a 100644 --- a/packages/credentials/src/V1/common.ts +++ b/packages/credentials/src/V1/common.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/V1/constants.ts b/packages/credentials/src/V1/constants.ts index 2abf98d99..63ae9c050 100644 --- a/packages/credentials/src/V1/constants.ts +++ b/packages/credentials/src/V1/constants.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/V1/index.ts b/packages/credentials/src/V1/index.ts index 4036e1434..bb3156d41 100644 --- a/packages/credentials/src/V1/index.ts +++ b/packages/credentials/src/V1/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/V1/types.ts b/packages/credentials/src/V1/types.ts index 84ec3d61d..0972f927d 100644 --- a/packages/credentials/src/V1/types.ts +++ b/packages/credentials/src/V1/types.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/attestation/Attestation.chain.ts b/packages/credentials/src/attestation/Attestation.chain.ts index 8753d5fd0..2d8d50942 100644 --- a/packages/credentials/src/attestation/Attestation.chain.ts +++ b/packages/credentials/src/attestation/Attestation.chain.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/attestation/Attestation.spec.ts b/packages/credentials/src/attestation/Attestation.spec.ts index 792623d05..265dd53cd 100644 --- a/packages/credentials/src/attestation/Attestation.spec.ts +++ b/packages/credentials/src/attestation/Attestation.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/attestation/Attestation.ts b/packages/credentials/src/attestation/Attestation.ts index 51aac51b3..a0757ede4 100644 --- a/packages/credentials/src/attestation/Attestation.ts +++ b/packages/credentials/src/attestation/Attestation.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/attestation/index.ts b/packages/credentials/src/attestation/index.ts index 545aa92d9..108a33f69 100644 --- a/packages/credentials/src/attestation/index.ts +++ b/packages/credentials/src/attestation/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/ctype/CType.chain.ts b/packages/credentials/src/ctype/CType.chain.ts index 6171f1d8e..2b0a75beb 100644 --- a/packages/credentials/src/ctype/CType.chain.ts +++ b/packages/credentials/src/ctype/CType.chain.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/ctype/CType.metadata.spec.ts b/packages/credentials/src/ctype/CType.metadata.spec.ts index 9fee50fc8..5946d4e86 100644 --- a/packages/credentials/src/ctype/CType.metadata.spec.ts +++ b/packages/credentials/src/ctype/CType.metadata.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/ctype/CType.schemas.ts b/packages/credentials/src/ctype/CType.schemas.ts index 0ee74c940..c441852b5 100644 --- a/packages/credentials/src/ctype/CType.schemas.ts +++ b/packages/credentials/src/ctype/CType.schemas.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/ctype/CType.spec.ts b/packages/credentials/src/ctype/CType.spec.ts index 31df3b86a..c8e382b49 100644 --- a/packages/credentials/src/ctype/CType.spec.ts +++ b/packages/credentials/src/ctype/CType.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/ctype/CType.ts b/packages/credentials/src/ctype/CType.ts index 6084dd51e..790d198b1 100644 --- a/packages/credentials/src/ctype/CType.ts +++ b/packages/credentials/src/ctype/CType.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/ctype/CTypeLoader.ts b/packages/credentials/src/ctype/CTypeLoader.ts index 15aedffc0..4cf5f5009 100644 --- a/packages/credentials/src/ctype/CTypeLoader.ts +++ b/packages/credentials/src/ctype/CTypeLoader.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/ctype/Ctype.nested.spec.ts b/packages/credentials/src/ctype/Ctype.nested.spec.ts index c493e9e4a..594080f5a 100644 --- a/packages/credentials/src/ctype/Ctype.nested.spec.ts +++ b/packages/credentials/src/ctype/Ctype.nested.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/ctype/index.ts b/packages/credentials/src/ctype/index.ts index 9ba5a57d5..935751e04 100644 --- a/packages/credentials/src/ctype/index.ts +++ b/packages/credentials/src/ctype/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/delegation/DelegationDecoder.ts b/packages/credentials/src/delegation/DelegationDecoder.ts index 9ef7e9637..38aeb04bf 100644 --- a/packages/credentials/src/delegation/DelegationDecoder.ts +++ b/packages/credentials/src/delegation/DelegationDecoder.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/delegation/DelegationHierarchyDetails.chain.ts b/packages/credentials/src/delegation/DelegationHierarchyDetails.chain.ts index b2c35bf5e..02ce5cf43 100644 --- a/packages/credentials/src/delegation/DelegationHierarchyDetails.chain.ts +++ b/packages/credentials/src/delegation/DelegationHierarchyDetails.chain.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/delegation/DelegationNode.chain.ts b/packages/credentials/src/delegation/DelegationNode.chain.ts index c66226c83..2a217969e 100644 --- a/packages/credentials/src/delegation/DelegationNode.chain.ts +++ b/packages/credentials/src/delegation/DelegationNode.chain.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/delegation/DelegationNode.spec.ts b/packages/credentials/src/delegation/DelegationNode.spec.ts index a56d97c55..7eb04e9a5 100644 --- a/packages/credentials/src/delegation/DelegationNode.spec.ts +++ b/packages/credentials/src/delegation/DelegationNode.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/delegation/DelegationNode.ts b/packages/credentials/src/delegation/DelegationNode.ts index 5517251f7..dd84aaa80 100644 --- a/packages/credentials/src/delegation/DelegationNode.ts +++ b/packages/credentials/src/delegation/DelegationNode.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/delegation/DelegationNode.utils.ts b/packages/credentials/src/delegation/DelegationNode.utils.ts index b34a3a764..4c1fe52d9 100644 --- a/packages/credentials/src/delegation/DelegationNode.utils.ts +++ b/packages/credentials/src/delegation/DelegationNode.utils.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/delegation/index.ts b/packages/credentials/src/delegation/index.ts index eb4605343..cbe198225 100644 --- a/packages/credentials/src/delegation/index.ts +++ b/packages/credentials/src/delegation/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/holder.ts b/packages/credentials/src/holder.ts index 08ba9c4e5..ef981f433 100644 --- a/packages/credentials/src/holder.ts +++ b/packages/credentials/src/holder.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/index.ts b/packages/credentials/src/index.ts index eb92c4008..f8da76293 100644 --- a/packages/credentials/src/index.ts +++ b/packages/credentials/src/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/interfaces.ts b/packages/credentials/src/interfaces.ts index 864d4eda9..b2033729a 100644 --- a/packages/credentials/src/interfaces.ts +++ b/packages/credentials/src/interfaces.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/issuer.ts b/packages/credentials/src/issuer.ts index 9e13479ad..b08e584e6 100644 --- a/packages/credentials/src/issuer.ts +++ b/packages/credentials/src/issuer.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/presentation/Presentation.spec.ts b/packages/credentials/src/presentation/Presentation.spec.ts index 466a30c1e..09c62d30b 100644 --- a/packages/credentials/src/presentation/Presentation.spec.ts +++ b/packages/credentials/src/presentation/Presentation.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/presentation/Presentation.ts b/packages/credentials/src/presentation/Presentation.ts index 96173ceb7..10b9979f5 100644 --- a/packages/credentials/src/presentation/Presentation.ts +++ b/packages/credentials/src/presentation/Presentation.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/presentation/index.ts b/packages/credentials/src/presentation/index.ts index 6132e2991..aad19b346 100644 --- a/packages/credentials/src/presentation/index.ts +++ b/packages/credentials/src/presentation/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/proofs/DataIntegrity.ts b/packages/credentials/src/proofs/DataIntegrity.ts index 03a7fc0f4..6503fc536 100644 --- a/packages/credentials/src/proofs/DataIntegrity.ts +++ b/packages/credentials/src/proofs/DataIntegrity.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/proofs/utils.ts b/packages/credentials/src/proofs/utils.ts index e77231805..8c5ce5b3a 100644 --- a/packages/credentials/src/proofs/utils.ts +++ b/packages/credentials/src/proofs/utils.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/credentials/src/verifier.ts b/packages/credentials/src/verifier.ts index 6ddc001db..7c2465a78 100644 --- a/packages/credentials/src/verifier.ts +++ b/packages/credentials/src/verifier.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/Did.chain.spec.ts b/packages/did/src/Did.chain.spec.ts index 2efc9368d..3d86bd499 100644 --- a/packages/did/src/Did.chain.spec.ts +++ b/packages/did/src/Did.chain.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/Did.chain.ts b/packages/did/src/Did.chain.ts index 0803a9e6e..14c6bcd61 100644 --- a/packages/did/src/Did.chain.ts +++ b/packages/did/src/Did.chain.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/Did.rpc.ts b/packages/did/src/Did.rpc.ts index 272a74e99..87b7c8593 100644 --- a/packages/did/src/Did.rpc.ts +++ b/packages/did/src/Did.rpc.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/Did.signature.spec.ts b/packages/did/src/Did.signature.spec.ts index 73e3ea40b..bf43012a3 100644 --- a/packages/did/src/Did.signature.spec.ts +++ b/packages/did/src/Did.signature.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/Did.signature.ts b/packages/did/src/Did.signature.ts index bcab953db..fcd0f45c0 100644 --- a/packages/did/src/Did.signature.ts +++ b/packages/did/src/Did.signature.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/Did.utils.ts b/packages/did/src/Did.utils.ts index 917c800ca..5cf0b3325 100644 --- a/packages/did/src/Did.utils.ts +++ b/packages/did/src/Did.utils.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/DidDetails/DidDetails.ts b/packages/did/src/DidDetails/DidDetails.ts index fa6153480..e129e0d49 100644 --- a/packages/did/src/DidDetails/DidDetails.ts +++ b/packages/did/src/DidDetails/DidDetails.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/DidDetails/FullDidDetails.spec.ts b/packages/did/src/DidDetails/FullDidDetails.spec.ts index 95f8b3ef1..17aa0598d 100644 --- a/packages/did/src/DidDetails/FullDidDetails.spec.ts +++ b/packages/did/src/DidDetails/FullDidDetails.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/DidDetails/FullDidDetails.ts b/packages/did/src/DidDetails/FullDidDetails.ts index 014babfc5..8c8281e60 100644 --- a/packages/did/src/DidDetails/FullDidDetails.ts +++ b/packages/did/src/DidDetails/FullDidDetails.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/DidDetails/LightDidDetails.spec.ts b/packages/did/src/DidDetails/LightDidDetails.spec.ts index a4e608993..c950c4fd5 100644 --- a/packages/did/src/DidDetails/LightDidDetails.spec.ts +++ b/packages/did/src/DidDetails/LightDidDetails.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/DidDetails/LightDidDetails.ts b/packages/did/src/DidDetails/LightDidDetails.ts index d65ee4268..4930e4c64 100644 --- a/packages/did/src/DidDetails/LightDidDetails.ts +++ b/packages/did/src/DidDetails/LightDidDetails.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/DidDetails/index.ts b/packages/did/src/DidDetails/index.ts index daceeda2f..a80411c9d 100644 --- a/packages/did/src/DidDetails/index.ts +++ b/packages/did/src/DidDetails/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/DidLinks/AccountLinks.chain.ts b/packages/did/src/DidLinks/AccountLinks.chain.ts index 745e6777d..124bcf24c 100644 --- a/packages/did/src/DidLinks/AccountLinks.chain.ts +++ b/packages/did/src/DidLinks/AccountLinks.chain.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/DidLinks/index.ts b/packages/did/src/DidLinks/index.ts index 9f8b08853..9da3ab0c7 100644 --- a/packages/did/src/DidLinks/index.ts +++ b/packages/did/src/DidLinks/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/DidResolver/DidContexts.ts b/packages/did/src/DidResolver/DidContexts.ts index 7552eed08..a2434dbcc 100644 --- a/packages/did/src/DidResolver/DidContexts.ts +++ b/packages/did/src/DidResolver/DidContexts.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/DidResolver/DidResolver.spec.ts b/packages/did/src/DidResolver/DidResolver.spec.ts index 4080ee6f2..ba2baefc7 100644 --- a/packages/did/src/DidResolver/DidResolver.spec.ts +++ b/packages/did/src/DidResolver/DidResolver.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/DidResolver/DidResolver.ts b/packages/did/src/DidResolver/DidResolver.ts index baa651b03..96df9e522 100644 --- a/packages/did/src/DidResolver/DidResolver.ts +++ b/packages/did/src/DidResolver/DidResolver.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/DidResolver/index.ts b/packages/did/src/DidResolver/index.ts index 4c7d68c72..5a829e541 100644 --- a/packages/did/src/DidResolver/index.ts +++ b/packages/did/src/DidResolver/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/did/src/index.ts b/packages/did/src/index.ts index f9aa46843..83ff30e68 100644 --- a/packages/did/src/index.ts +++ b/packages/did/src/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/context/context.ts b/packages/jsonld-suites/src/context/context.ts index 8f7cd43a6..c94ed7cc6 100644 --- a/packages/jsonld-suites/src/context/context.ts +++ b/packages/jsonld-suites/src/context/context.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/context/index.ts b/packages/jsonld-suites/src/context/index.ts index 8a07a7357..2b4b847fd 100644 --- a/packages/jsonld-suites/src/context/index.ts +++ b/packages/jsonld-suites/src/context/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/documentLoader.ts b/packages/jsonld-suites/src/documentLoader.ts index 8fe4bae41..e17db4b21 100644 --- a/packages/jsonld-suites/src/documentLoader.ts +++ b/packages/jsonld-suites/src/documentLoader.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/index.ts b/packages/jsonld-suites/src/index.ts index 007510879..6bacb602b 100644 --- a/packages/jsonld-suites/src/index.ts +++ b/packages/jsonld-suites/src/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/purposes/NoProofPurpose.ts b/packages/jsonld-suites/src/purposes/NoProofPurpose.ts index abf51ae4b..e5b5e02cf 100644 --- a/packages/jsonld-suites/src/purposes/NoProofPurpose.ts +++ b/packages/jsonld-suites/src/purposes/NoProofPurpose.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/purposes/index.ts b/packages/jsonld-suites/src/purposes/index.ts index c18e4ba47..bbafeb5d4 100644 --- a/packages/jsonld-suites/src/purposes/index.ts +++ b/packages/jsonld-suites/src/purposes/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/suites/KiltAttestationProofV1.spec.ts b/packages/jsonld-suites/src/suites/KiltAttestationProofV1.spec.ts index e7b7c4070..5d239db80 100644 --- a/packages/jsonld-suites/src/suites/KiltAttestationProofV1.spec.ts +++ b/packages/jsonld-suites/src/suites/KiltAttestationProofV1.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/suites/KiltAttestationProofV1.ts b/packages/jsonld-suites/src/suites/KiltAttestationProofV1.ts index 4f6699ca2..7b6366dc6 100644 --- a/packages/jsonld-suites/src/suites/KiltAttestationProofV1.ts +++ b/packages/jsonld-suites/src/suites/KiltAttestationProofV1.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/suites/Sr25519Signature2020.spec.ts b/packages/jsonld-suites/src/suites/Sr25519Signature2020.spec.ts index 53efce5e9..dc79cc87c 100644 --- a/packages/jsonld-suites/src/suites/Sr25519Signature2020.spec.ts +++ b/packages/jsonld-suites/src/suites/Sr25519Signature2020.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/suites/Sr25519Signature2020.ts b/packages/jsonld-suites/src/suites/Sr25519Signature2020.ts index 15e0dd192..932c5bcd0 100644 --- a/packages/jsonld-suites/src/suites/Sr25519Signature2020.ts +++ b/packages/jsonld-suites/src/suites/Sr25519Signature2020.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/suites/Sr25519VerificationKey.ts b/packages/jsonld-suites/src/suites/Sr25519VerificationKey.ts index d13a502e9..b86bd3a68 100644 --- a/packages/jsonld-suites/src/suites/Sr25519VerificationKey.ts +++ b/packages/jsonld-suites/src/suites/Sr25519VerificationKey.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/suites/Sr25519VerificationKey2020.spec.ts b/packages/jsonld-suites/src/suites/Sr25519VerificationKey2020.spec.ts index 2e717b1c4..db3e2fe49 100644 --- a/packages/jsonld-suites/src/suites/Sr25519VerificationKey2020.spec.ts +++ b/packages/jsonld-suites/src/suites/Sr25519VerificationKey2020.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/suites/index.ts b/packages/jsonld-suites/src/suites/index.ts index a280d2797..830e1e284 100644 --- a/packages/jsonld-suites/src/suites/index.ts +++ b/packages/jsonld-suites/src/suites/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/suites/types.ts b/packages/jsonld-suites/src/suites/types.ts index 7e5362515..ff0b4b52d 100644 --- a/packages/jsonld-suites/src/suites/types.ts +++ b/packages/jsonld-suites/src/suites/types.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/suites/utils.ts b/packages/jsonld-suites/src/suites/utils.ts index 0b9d9dc19..3598d60fa 100644 --- a/packages/jsonld-suites/src/suites/utils.ts +++ b/packages/jsonld-suites/src/suites/utils.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/jsonld-suites/src/types.ts b/packages/jsonld-suites/src/types.ts index 083e851da..973a92b95 100644 --- a/packages/jsonld-suites/src/types.ts +++ b/packages/jsonld-suites/src/types.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/legacy-credentials/src/Claim.spec.ts b/packages/legacy-credentials/src/Claim.spec.ts index 3bd91d069..9ed71b407 100644 --- a/packages/legacy-credentials/src/Claim.spec.ts +++ b/packages/legacy-credentials/src/Claim.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/legacy-credentials/src/Claim.ts b/packages/legacy-credentials/src/Claim.ts index b7c11f3e2..ce7c9e422 100644 --- a/packages/legacy-credentials/src/Claim.ts +++ b/packages/legacy-credentials/src/Claim.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/legacy-credentials/src/Credential.spec.ts b/packages/legacy-credentials/src/Credential.spec.ts index ec4bc83e1..47a00b5dc 100644 --- a/packages/legacy-credentials/src/Credential.spec.ts +++ b/packages/legacy-credentials/src/Credential.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/legacy-credentials/src/Credential.ts b/packages/legacy-credentials/src/Credential.ts index 0f45bf054..6f2d8f21f 100644 --- a/packages/legacy-credentials/src/Credential.ts +++ b/packages/legacy-credentials/src/Credential.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/legacy-credentials/src/index.ts b/packages/legacy-credentials/src/index.ts index 3749a4e9c..6e39ecb05 100644 --- a/packages/legacy-credentials/src/index.ts +++ b/packages/legacy-credentials/src/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/legacy-credentials/src/utils.ts b/packages/legacy-credentials/src/utils.ts index 12e006f38..bdaba4cd9 100644 --- a/packages/legacy-credentials/src/utils.ts +++ b/packages/legacy-credentials/src/utils.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/legacy-credentials/src/vcInterop.spec.ts b/packages/legacy-credentials/src/vcInterop.spec.ts index d19c542ca..2b986f341 100644 --- a/packages/legacy-credentials/src/vcInterop.spec.ts +++ b/packages/legacy-credentials/src/vcInterop.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/legacy-credentials/src/vcInterop.ts b/packages/legacy-credentials/src/vcInterop.ts index 397d80f8a..b741a6e37 100644 --- a/packages/legacy-credentials/src/vcInterop.ts +++ b/packages/legacy-credentials/src/vcInterop.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/sdk-js/src/index.ts b/packages/sdk-js/src/index.ts index 67247af5d..c1ef1bff2 100644 --- a/packages/sdk-js/src/index.ts +++ b/packages/sdk-js/src/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/sdk-js/webpack.config.js b/packages/sdk-js/webpack.config.js index 6fc6cd1bb..65b389d91 100644 --- a/packages/sdk-js/webpack.config.js +++ b/packages/sdk-js/webpack.config.js @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/index.ts b/packages/type-definitions/src/index.ts index 41020d8a1..d956b7df0 100644 --- a/packages/type-definitions/src/index.ts +++ b/packages/type-definitions/src/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/mergeType.ts b/packages/type-definitions/src/mergeType.ts index 1c366667f..b6803ec13 100644 --- a/packages/type-definitions/src/mergeType.ts +++ b/packages/type-definitions/src/mergeType.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/runtime/did.ts b/packages/type-definitions/src/runtime/did.ts index b5ec62df2..421bc5518 100644 --- a/packages/type-definitions/src/runtime/did.ts +++ b/packages/type-definitions/src/runtime/did.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/runtime/dipProvider.ts b/packages/type-definitions/src/runtime/dipProvider.ts index b5cb5afc2..f5933d96f 100644 --- a/packages/type-definitions/src/runtime/dipProvider.ts +++ b/packages/type-definitions/src/runtime/dipProvider.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/runtime/publicCredentials.ts b/packages/type-definitions/src/runtime/publicCredentials.ts index 84ca464fa..6c4b0207c 100644 --- a/packages/type-definitions/src/runtime/publicCredentials.ts +++ b/packages/type-definitions/src/runtime/publicCredentials.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/runtime/staking.ts b/packages/type-definitions/src/runtime/staking.ts index 9d08c6306..144f6a61a 100644 --- a/packages/type-definitions/src/runtime/staking.ts +++ b/packages/type-definitions/src/runtime/staking.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_10.ts b/packages/type-definitions/src/types_10.ts index c7cc2237d..99ba04f7c 100644 --- a/packages/type-definitions/src/types_10.ts +++ b/packages/type-definitions/src/types_10.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_10410.ts b/packages/type-definitions/src/types_10410.ts index b4a8a457f..e741539eb 100644 --- a/packages/type-definitions/src/types_10410.ts +++ b/packages/type-definitions/src/types_10410.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_10720.ts b/packages/type-definitions/src/types_10720.ts index 3c6091cc4..ebe547813 100644 --- a/packages/type-definitions/src/types_10720.ts +++ b/packages/type-definitions/src/types_10720.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_10800.ts b/packages/type-definitions/src/types_10800.ts index b22ecff75..b802a2332 100644 --- a/packages/type-definitions/src/types_10800.ts +++ b/packages/type-definitions/src/types_10800.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_10900.ts b/packages/type-definitions/src/types_10900.ts index f5900c64a..4a7d859b6 100644 --- a/packages/type-definitions/src/types_10900.ts +++ b/packages/type-definitions/src/types_10900.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_11200.ts b/packages/type-definitions/src/types_11200.ts index 9cbcf7117..3f4f25496 100644 --- a/packages/type-definitions/src/types_11200.ts +++ b/packages/type-definitions/src/types_11200.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_12.ts b/packages/type-definitions/src/types_12.ts index 61b520f01..938e4d168 100644 --- a/packages/type-definitions/src/types_12.ts +++ b/packages/type-definitions/src/types_12.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_17.ts b/packages/type-definitions/src/types_17.ts index 39cd09fd2..58f995a2f 100644 --- a/packages/type-definitions/src/types_17.ts +++ b/packages/type-definitions/src/types_17.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_18.ts b/packages/type-definitions/src/types_18.ts index b0033ab63..a94790f6b 100644 --- a/packages/type-definitions/src/types_18.ts +++ b/packages/type-definitions/src/types_18.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_19.ts b/packages/type-definitions/src/types_19.ts index f12f8e519..5a2d73af4 100644 --- a/packages/type-definitions/src/types_19.ts +++ b/packages/type-definitions/src/types_19.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_20.ts b/packages/type-definitions/src/types_20.ts index ba98ad3be..bd55d34fe 100644 --- a/packages/type-definitions/src/types_20.ts +++ b/packages/type-definitions/src/types_20.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_21.ts b/packages/type-definitions/src/types_21.ts index f1f74b729..e230969ba 100644 --- a/packages/type-definitions/src/types_21.ts +++ b/packages/type-definitions/src/types_21.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_23.ts b/packages/type-definitions/src/types_23.ts index ba4a74f91..dedb35bda 100644 --- a/packages/type-definitions/src/types_23.ts +++ b/packages/type-definitions/src/types_23.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_25.ts b/packages/type-definitions/src/types_25.ts index e50f1a069..0324bf107 100644 --- a/packages/type-definitions/src/types_25.ts +++ b/packages/type-definitions/src/types_25.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_2700.ts b/packages/type-definitions/src/types_2700.ts index c0b25b116..7583235b9 100644 --- a/packages/type-definitions/src/types_2700.ts +++ b/packages/type-definitions/src/types_2700.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_8.ts b/packages/type-definitions/src/types_8.ts index b7fb8c27a..ca46e6af6 100644 --- a/packages/type-definitions/src/types_8.ts +++ b/packages/type-definitions/src/types_8.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/type-definitions/src/types_9.ts b/packages/type-definitions/src/types_9.ts index a44924f69..f6b024b29 100644 --- a/packages/type-definitions/src/types_9.ts +++ b/packages/type-definitions/src/types_9.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/Address.ts b/packages/types/src/Address.ts index 9ee9edfd5..7bbd2b6b7 100644 --- a/packages/types/src/Address.ts +++ b/packages/types/src/Address.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/AssetDid.ts b/packages/types/src/AssetDid.ts index b114e4c6e..3107542b9 100644 --- a/packages/types/src/AssetDid.ts +++ b/packages/types/src/AssetDid.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/Attestation.ts b/packages/types/src/Attestation.ts index 2b4d58270..bac1811ee 100644 --- a/packages/types/src/Attestation.ts +++ b/packages/types/src/Attestation.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/Balance.ts b/packages/types/src/Balance.ts index a8381b130..36c9f5b1b 100644 --- a/packages/types/src/Balance.ts +++ b/packages/types/src/Balance.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/CType.ts b/packages/types/src/CType.ts index 7ab4452f1..2376230d8 100644 --- a/packages/types/src/CType.ts +++ b/packages/types/src/CType.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/CTypeMetadata.ts b/packages/types/src/CTypeMetadata.ts index 733afdb7b..0cc2e0221 100644 --- a/packages/types/src/CTypeMetadata.ts +++ b/packages/types/src/CTypeMetadata.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/Claim.ts b/packages/types/src/Claim.ts index 6a7b341ff..13687f8b4 100644 --- a/packages/types/src/Claim.ts +++ b/packages/types/src/Claim.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/Credential.ts b/packages/types/src/Credential.ts index cd63793ef..4fff234ec 100644 --- a/packages/types/src/Credential.ts +++ b/packages/types/src/Credential.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/CryptoCallbacks.ts b/packages/types/src/CryptoCallbacks.ts index d5c51570b..c0889f50d 100644 --- a/packages/types/src/CryptoCallbacks.ts +++ b/packages/types/src/CryptoCallbacks.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/Delegation.ts b/packages/types/src/Delegation.ts index 2139eb611..d20a3f665 100644 --- a/packages/types/src/Delegation.ts +++ b/packages/types/src/Delegation.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/Deposit.ts b/packages/types/src/Deposit.ts index 6cc0a583c..f09ef7523 100644 --- a/packages/types/src/Deposit.ts +++ b/packages/types/src/Deposit.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/Did.ts b/packages/types/src/Did.ts index fc0d458a0..5397598c1 100644 --- a/packages/types/src/Did.ts +++ b/packages/types/src/Did.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/DidResolver.ts b/packages/types/src/DidResolver.ts index 39338b2e0..c968b13fd 100644 --- a/packages/types/src/DidResolver.ts +++ b/packages/types/src/DidResolver.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/Imported.ts b/packages/types/src/Imported.ts index f83228443..1d46e3095 100644 --- a/packages/types/src/Imported.ts +++ b/packages/types/src/Imported.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/PublicCredential.ts b/packages/types/src/PublicCredential.ts index 0b863cd01..8528062f8 100644 --- a/packages/types/src/PublicCredential.ts +++ b/packages/types/src/PublicCredential.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/Signers.ts b/packages/types/src/Signers.ts index dbe15db31..cbfe18add 100644 --- a/packages/types/src/Signers.ts +++ b/packages/types/src/Signers.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/SubscriptionPromise.ts b/packages/types/src/SubscriptionPromise.ts index 08707490a..31b3ded14 100644 --- a/packages/types/src/SubscriptionPromise.ts +++ b/packages/types/src/SubscriptionPromise.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 0b119e907..5e3bcf88e 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/CAIP/CAIP.spec.ts b/packages/utils/src/CAIP/CAIP.spec.ts index 86d917b2a..1ee43609a 100644 --- a/packages/utils/src/CAIP/CAIP.spec.ts +++ b/packages/utils/src/CAIP/CAIP.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/CAIP/caip19.ts b/packages/utils/src/CAIP/caip19.ts index 98fe8db89..fa6251730 100644 --- a/packages/utils/src/CAIP/caip19.ts +++ b/packages/utils/src/CAIP/caip19.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/CAIP/caip2.ts b/packages/utils/src/CAIP/caip2.ts index 50458e292..7625e9ded 100644 --- a/packages/utils/src/CAIP/caip2.ts +++ b/packages/utils/src/CAIP/caip2.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/CAIP/index.ts b/packages/utils/src/CAIP/index.ts index b8d671be2..69191caa6 100644 --- a/packages/utils/src/CAIP/index.ts +++ b/packages/utils/src/CAIP/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/Crypto.spec.ts b/packages/utils/src/Crypto.spec.ts index fd08e586a..975d1b2fe 100644 --- a/packages/utils/src/Crypto.spec.ts +++ b/packages/utils/src/Crypto.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/Crypto.ts b/packages/utils/src/Crypto.ts index 345f17812..0bd6e6661 100644 --- a/packages/utils/src/Crypto.ts +++ b/packages/utils/src/Crypto.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/DataUtils.spec.ts b/packages/utils/src/DataUtils.spec.ts index c53cfc4c5..63267a6d2 100644 --- a/packages/utils/src/DataUtils.spec.ts +++ b/packages/utils/src/DataUtils.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/DataUtils.ts b/packages/utils/src/DataUtils.ts index a473f2f8a..1011cc9b6 100644 --- a/packages/utils/src/DataUtils.ts +++ b/packages/utils/src/DataUtils.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/SDKErrors.ts b/packages/utils/src/SDKErrors.ts index 6844d45a1..d96e4cde8 100644 --- a/packages/utils/src/SDKErrors.ts +++ b/packages/utils/src/SDKErrors.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/Signers.ts b/packages/utils/src/Signers.ts index c5dabe493..c09e95a30 100644 --- a/packages/utils/src/Signers.ts +++ b/packages/utils/src/Signers.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/UUID.spec.ts b/packages/utils/src/UUID.spec.ts index fdc61a48a..4dc07c157 100644 --- a/packages/utils/src/UUID.spec.ts +++ b/packages/utils/src/UUID.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/UUID.ts b/packages/utils/src/UUID.ts index 9a252fcb4..243c11ef2 100644 --- a/packages/utils/src/UUID.ts +++ b/packages/utils/src/UUID.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/cbor.ts b/packages/utils/src/cbor.ts index b12205bcd..644e1000a 100644 --- a/packages/utils/src/cbor.ts +++ b/packages/utils/src/cbor.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 72796680f..6a0424605 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/packages/utils/src/ss58Format.ts b/packages/utils/src/ss58Format.ts index fa5d763ed..8252021f7 100644 --- a/packages/utils/src/ss58Format.ts +++ b/packages/utils/src/ss58Format.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/breakingChanges/BreakingChanges.spec.ts b/tests/breakingChanges/BreakingChanges.spec.ts index c2d3252f5..763032bd0 100644 --- a/tests/breakingChanges/BreakingChanges.spec.ts +++ b/tests/breakingChanges/BreakingChanges.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/bundle/bundle-test.ts b/tests/bundle/bundle-test.ts index 312e600ed..06e28b208 100644 --- a/tests/bundle/bundle-test.ts +++ b/tests/bundle/bundle-test.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/bundle/bundle.spec.ts b/tests/bundle/bundle.spec.ts index 76ca8a0e5..0eb516a67 100644 --- a/tests/bundle/bundle.spec.ts +++ b/tests/bundle/bundle.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/bundle/playwright.config.ts b/tests/bundle/playwright.config.ts index 8c7aed8af..dd7741393 100644 --- a/tests/bundle/playwright.config.ts +++ b/tests/bundle/playwright.config.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/integration/AccountLinking.spec.ts b/tests/integration/AccountLinking.spec.ts index 00591e07b..1babb61a0 100644 --- a/tests/integration/AccountLinking.spec.ts +++ b/tests/integration/AccountLinking.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/integration/Attestation.spec.ts b/tests/integration/Attestation.spec.ts index 01651e6a6..65c0969c5 100644 --- a/tests/integration/Attestation.spec.ts +++ b/tests/integration/Attestation.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/integration/Balance.spec.ts b/tests/integration/Balance.spec.ts index 7451d4400..8d01c4753 100644 --- a/tests/integration/Balance.spec.ts +++ b/tests/integration/Balance.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/integration/Blockchain.spec.ts b/tests/integration/Blockchain.spec.ts index e1a087148..a13d458da 100644 --- a/tests/integration/Blockchain.spec.ts +++ b/tests/integration/Blockchain.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/integration/Ctypes.spec.ts b/tests/integration/Ctypes.spec.ts index 72b59372a..a3f5ff2e6 100644 --- a/tests/integration/Ctypes.spec.ts +++ b/tests/integration/Ctypes.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/integration/Delegation.spec.ts b/tests/integration/Delegation.spec.ts index c953cbc62..6fd957bd3 100644 --- a/tests/integration/Delegation.spec.ts +++ b/tests/integration/Delegation.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/integration/Deposit.spec.ts b/tests/integration/Deposit.spec.ts index 429afaad7..97f2203a5 100644 --- a/tests/integration/Deposit.spec.ts +++ b/tests/integration/Deposit.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/integration/Did.spec.ts b/tests/integration/Did.spec.ts index b893e4a48..f7d723b90 100644 --- a/tests/integration/Did.spec.ts +++ b/tests/integration/Did.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/integration/ErrorHandler.spec.ts b/tests/integration/ErrorHandler.spec.ts index 027d3e68e..48965cf17 100644 --- a/tests/integration/ErrorHandler.spec.ts +++ b/tests/integration/ErrorHandler.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/integration/PublicCredentials.spec.ts b/tests/integration/PublicCredentials.spec.ts index 032cce314..cbdd65e80 100644 --- a/tests/integration/PublicCredentials.spec.ts +++ b/tests/integration/PublicCredentials.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/integration/Web3Names.spec.ts b/tests/integration/Web3Names.spec.ts index c6d137fea..da26b84d4 100644 --- a/tests/integration/Web3Names.spec.ts +++ b/tests/integration/Web3Names.spec.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/integration/utils.ts b/tests/integration/utils.ts index 0f4bd29a3..dfe8970a7 100644 --- a/tests/integration/utils.ts +++ b/tests/integration/utils.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/testUtils/TestUtils.ts b/tests/testUtils/TestUtils.ts index 9ed1c3737..e7117412c 100644 --- a/tests/testUtils/TestUtils.ts +++ b/tests/testUtils/TestUtils.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/testUtils/index.ts b/tests/testUtils/index.ts index 093a7233d..21c612125 100644 --- a/tests/testUtils/index.ts +++ b/tests/testUtils/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/testUtils/metadata/spiritnet.ts b/tests/testUtils/metadata/spiritnet.ts index 26dba2867..ff33e2a4a 100644 --- a/tests/testUtils/metadata/spiritnet.ts +++ b/tests/testUtils/metadata/spiritnet.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/testUtils/mocks/index.ts b/tests/testUtils/mocks/index.ts index 87626de87..07d273922 100644 --- a/tests/testUtils/mocks/index.ts +++ b/tests/testUtils/mocks/index.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/testUtils/mocks/mockedApi.ts b/tests/testUtils/mocks/mockedApi.ts index 5f098ea7e..ae3337f5e 100644 --- a/tests/testUtils/mocks/mockedApi.ts +++ b/tests/testUtils/mocks/mockedApi.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/testUtils/mocks/mockedApi.utils.ts b/tests/testUtils/mocks/mockedApi.utils.ts index 177ceaa08..476c80822 100644 --- a/tests/testUtils/mocks/mockedApi.utils.ts +++ b/tests/testUtils/mocks/mockedApi.utils.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/testUtils/mocks/typeRegistry.ts b/tests/testUtils/mocks/typeRegistry.ts index a2aa7f1ae..1753cd2df 100644 --- a/tests/testUtils/mocks/typeRegistry.ts +++ b/tests/testUtils/mocks/typeRegistry.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. diff --git a/tests/testUtils/testData.ts b/tests/testUtils/testData.ts index c306fa71f..956a17870 100644 --- a/tests/testUtils/testData.ts +++ b/tests/testUtils/testData.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2023, BOTLabs GmbH. + * Copyright (c) 2018-2024, BOTLabs GmbH. * * This source code is licensed under the BSD 4-Clause "Original" license * found in the LICENSE file in the root directory of this source tree. From 727174d4b87d301a1efcf0ed24506990ec357050 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Tue, 6 Feb 2024 09:58:17 +0100 Subject: [PATCH 088/130] chore(deps): bump node to v18 (#833) --- .github/workflows/tests-polkadot-deps.yml | 6 +++--- .github/workflows/tests.yml | 4 ++-- .nvmrc | 2 +- packages/asset-credentials/package.json | 2 +- packages/augment-api/package.json | 2 +- packages/chain-helpers/package.json | 2 +- packages/config/package.json | 2 +- packages/credentials/package.json | 2 +- packages/did/package.json | 2 +- packages/jsonld-suites/package.json | 2 +- packages/legacy-credentials/package.json | 2 +- packages/sdk-js/package.json | 2 +- packages/type-definitions/package.json | 2 +- packages/types/package.json | 2 +- packages/utils/package.json | 2 +- 15 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/tests-polkadot-deps.yml b/.github/workflows/tests-polkadot-deps.yml index ce47e76b5..14cd09c03 100644 --- a/.github/workflows/tests-polkadot-deps.yml +++ b/.github/workflows/tests-polkadot-deps.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: - node-version: [16.x, 18.x, 20.x] + node-version: [18.x, 20.x] steps: - uses: actions/checkout@v3 @@ -58,10 +58,10 @@ jobs: strategy: matrix: - node-version: [16.x, 18.x] + node-version: [18.x, 20.x] required: ['required'] include: - - node-version: 20.x + - node-version: 16.x required: 'optional' continue-on-error: ${{ matrix.required == 'optional' }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 20904ac9d..837de26ee 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -80,10 +80,10 @@ jobs: strategy: matrix: - node-version: [16, 18] + node-version: [18, 20] required: ['required'] include: - - node-version: 20 + - node-version: 16 required: 'optional' continue-on-error: ${{ matrix.required == 'optional' }} diff --git a/.nvmrc b/.nvmrc index 27cb0ee2c..00b326931 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -lts/Gallium +lts/Iron diff --git a/packages/asset-credentials/package.json b/packages/asset-credentials/package.json index 7958667ed..a00b1b040 100644 --- a/packages/asset-credentials/package.json +++ b/packages/asset-credentials/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=16.0" + "node": ">=18.0" }, "author": "", "license": "BSD-4-Clause", diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 24b9b02a3..5427e15ef 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -33,7 +33,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=16.0" + "node": ">=18.0" }, "author": "", "license": "BSD-4-Clause", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index b534cfe94..b4d875734 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=16.0" + "node": ">=18.0" }, "author": "", "license": "BSD-4-Clause", diff --git a/packages/config/package.json b/packages/config/package.json index 5ae6f8ff2..6e31fc84c 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -25,7 +25,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=16.0" + "node": ">=18.0" }, "author": "", "license": "BSD-4-Clause", diff --git a/packages/credentials/package.json b/packages/credentials/package.json index 265e89cce..1e287e639 100644 --- a/packages/credentials/package.json +++ b/packages/credentials/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=16.0" + "node": ">=18.0" }, "author": "", "license": "BSD-4-Clause", diff --git a/packages/did/package.json b/packages/did/package.json index 6e631b6e6..90918f12a 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=16.0" + "node": ">=18.0" }, "author": "", "license": "BSD-4-Clause", diff --git a/packages/jsonld-suites/package.json b/packages/jsonld-suites/package.json index 721910d7e..428a79740 100644 --- a/packages/jsonld-suites/package.json +++ b/packages/jsonld-suites/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=16.0" + "node": ">=18.0" }, "author": "", "license": "BSD-4-Clause", diff --git a/packages/legacy-credentials/package.json b/packages/legacy-credentials/package.json index 47034893f..460f3e07b 100644 --- a/packages/legacy-credentials/package.json +++ b/packages/legacy-credentials/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=16.0" + "node": ">=18.0" }, "author": "", "license": "BSD-4-Clause", diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index 9fad6e6d2..cc56acd51 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -25,7 +25,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=16.0" + "node": ">=18.0" }, "author": "", "license": "BSD-4-Clause", diff --git a/packages/type-definitions/package.json b/packages/type-definitions/package.json index 56ae2df9e..e696bc7b4 100644 --- a/packages/type-definitions/package.json +++ b/packages/type-definitions/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=16.0" + "node": ">=18.0" }, "author": "", "license": "BSD-4-Clause", diff --git a/packages/types/package.json b/packages/types/package.json index 312f91d2a..3b113ba87 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=16.0" + "node": ">=18.0" }, "author": "", "license": "BSD-4-Clause", diff --git a/packages/utils/package.json b/packages/utils/package.json index caa903731..6b4dcf50e 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -23,7 +23,7 @@ }, "repository": "github:kiltprotocol/sdk-js", "engines": { - "node": ">=16.0" + "node": ">=18.0" }, "author": "", "license": "BSD-4-Clause", From ce12c52f746f0283729bd7c7b4b89cb467547173 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Tue, 6 Feb 2024 09:59:02 +0100 Subject: [PATCH 089/130] fix: require multikey^2.0.1 as earlier versions are broken (#834) --- packages/did/package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/did/package.json b/packages/did/package.json index 90918f12a..8b7d7f961 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -34,7 +34,7 @@ "typescript": "^4.8.3" }, "dependencies": { - "@digitalbazaar/multikey-context": "^1.0.0", + "@digitalbazaar/multikey-context": "^2.0.1", "@digitalbazaar/security-context": "^1.0.0", "@kiltprotocol/augment-api": "workspace:*", "@kiltprotocol/config": "workspace:*", diff --git a/yarn.lock b/yarn.lock index 0eff7602d..e7edd7694 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1533,10 +1533,10 @@ __metadata: languageName: node linkType: hard -"@digitalbazaar/multikey-context@npm:^1.0.0": - version: 1.0.0 - resolution: "@digitalbazaar/multikey-context@npm:1.0.0" - checksum: e651253ce101a0a5de0e46de5c6f7c936aa07fd14e5b14d38ba57c105eaa2490c256245482bc1f5173269a992cab2ebe5eec6c26523f0e61aae03d3a6788cc6b +"@digitalbazaar/multikey-context@npm:^2.0.1": + version: 2.0.1 + resolution: "@digitalbazaar/multikey-context@npm:2.0.1" + checksum: 74e0d65110fa84167d899bcdfb69ed3612b664564866089a9b8a1402648f9a4900cc82260922c1a2a3128218f7ecd95a98e3854b43be5216642d5e9c6694b339 languageName: node linkType: hard @@ -2030,7 +2030,7 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/did@workspace:packages/did" dependencies: - "@digitalbazaar/multikey-context": ^1.0.0 + "@digitalbazaar/multikey-context": ^2.0.1 "@digitalbazaar/security-context": ^1.0.0 "@kiltprotocol/augment-api": "workspace:*" "@kiltprotocol/config": "workspace:*" From 052eecef2a54ca7d71a6feb98ba4ab631995078f Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Wed, 14 Feb 2024 13:57:11 +0100 Subject: [PATCH 090/130] chore: cherry pick release 0.35.0 (#840) * chore: update references to mashnet-node * chore: require @polkadot/api^10.7.3 --- dc.build.node.yml | 8 ++--- docker-compose.yml | 6 ++-- package.json | 2 +- packages/asset-credentials/package.json | 4 +-- packages/augment-api/package.json | 4 +-- packages/chain-helpers/package.json | 4 +-- packages/config/package.json | 2 +- packages/credentials/package.json | 4 +-- packages/did/package.json | 4 +-- packages/did/src/DidDetails/FullDidDetails.ts | 2 +- packages/types/package.json | 4 +-- packages/utils/package.json | 2 +- tests/integration/Delegation.spec.ts | 2 +- tests/integration/utils.ts | 2 +- yarn.lock | 34 +++++++++---------- 15 files changed, 42 insertions(+), 42 deletions(-) diff --git a/dc.build.node.yml b/dc.build.node.yml index 40d2e89d3..73ed2267a 100644 --- a/dc.build.node.yml +++ b/dc.build.node.yml @@ -2,9 +2,9 @@ version: '3.2' services: dev-node: - image: local/mashnet-node + image: local/standalone-node build: - context: https://github.com/KILTprotocol/mashnet-node.git + context: https://github.com/KILTprotocol/kilt-node.git cache_from: - - kiltprotocol/mashnet-node - - local/mashnet-node + - kiltprotocol/standalone-node + - local/standalone-node diff --git a/docker-compose.yml b/docker-compose.yml index dfc272da8..e756bddd8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,9 @@ # allows running tests and integration tests in a dockerized environment # `docker-compose run sdk` will run integration tests using the latest -# mashnet-node image on dockerhub. The src/ directory is mounted, so rebuilding +# standalone-node image on dockerhub. The src/ directory is mounted, so rebuilding # is not required to integrate changes in this directory. # `docker-compose run sdk yarn test:integration:run Attestation` would run specific tests. -# In order to test against the current state of the develop branch, you can build a mashnet-node +# In order to test against the current state of the develop branch, you can build a standalone-node # image locally by telling docker-compose to use the override file `dc.build.node.yml` like so: # `docker-compose -f docker-compose.yml -f dc.build.node.yml run sdk`. Alternatively you could # rename `dc.build.node.yml` to `docker-compose.override.yml`, in which case docker-compose @@ -13,7 +13,7 @@ version: '3.2' services: dev-node: - image: kiltprotocol/mashnet-node:develop + image: kiltprotocol/standalone-node:develop command: '--dev --ws-port 9944 --ws-external' sdk: diff --git a/package.json b/package.json index b15a71a51..6c1de8a95 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "test:integration": "jest -c tests/integration/jest.config.integration.js", "build:esm-tests": "rimraf tests/integration/dist && tsc -p tests/integration/tsconfig.esm.json && echo '{\"type\":\"module\"}' > tests/integration/dist/package.json", "test:integration:esm": "yarn build:esm-tests && yarn node --experimental-vm-modules $(yarn bin jest) -c tests/integration/jest.config.integration.esm.js", - "test:integration:latest-develop": "TESTCONTAINERS_NODE_IMG=kiltprotocol/mashnet-node:latest-develop yarn test:integration", + "test:integration:latest-develop": "TESTCONTAINERS_NODE_IMG=kiltprotocol/standalone-node:latest-develop yarn test:integration", "test:watch": "yarn test --watch", "test:bundle": "tsc -p tests/bundle/tsconfig.json && yarn ./tests/bundle playwright test --config playwright.config.ts", "test:ci:bundle": "yarn test:ci:bundle:preparation && yarn test:bundle", diff --git a/packages/asset-credentials/package.json b/packages/asset-credentials/package.json index a00b1b040..afd6bc89c 100644 --- a/packages/asset-credentials/package.json +++ b/packages/asset-credentials/package.json @@ -41,8 +41,8 @@ "@kiltprotocol/did": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^10.4.0", - "@polkadot/types": "^10.4.0", + "@polkadot/api": "^10.7.3", + "@polkadot/types": "^10.7.3", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0" } diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 5427e15ef..5878f626c 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -40,8 +40,8 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { - "@polkadot/api": "^10.4.0", - "@polkadot/typegen": "^10.4.0", + "@polkadot/api": "^10.7.3", + "@polkadot/typegen": "^10.7.3", "@types/node": "^16.11.7", "glob": "^7.1.1", "rimraf": "^3.0.2", diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index b4d875734..2353b53ae 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -38,9 +38,9 @@ "@kiltprotocol/type-definitions": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^10.4.0", + "@polkadot/api": "^10.7.3", "@polkadot/api-derive": "^10.0.0", - "@polkadot/types": "^10.4.0", + "@polkadot/types": "^10.7.3", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0" } diff --git a/packages/config/package.json b/packages/config/package.json index 6e31fc84c..bca9bb7c1 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@kiltprotocol/types": "workspace:*", - "@polkadot/api": "^10.4.0", + "@polkadot/api": "^10.7.3", "typescript-logging": "^1.0.0" } } diff --git a/packages/credentials/package.json b/packages/credentials/package.json index 1e287e639..d3865dce9 100644 --- a/packages/credentials/package.json +++ b/packages/credentials/package.json @@ -45,9 +45,9 @@ "@kiltprotocol/sr25519-jcs-2023": "0.1.0-rc.1", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^10.4.0", + "@polkadot/api": "^10.7.3", "@polkadot/keyring": "^12.0.0", - "@polkadot/types": "^10.4.0", + "@polkadot/types": "^10.7.3", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0", "json-pointer": "^0.6.2" diff --git a/packages/did/package.json b/packages/did/package.json index 8b7d7f961..7659b83ec 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -40,9 +40,9 @@ "@kiltprotocol/config": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", - "@polkadot/api": "^10.4.0", + "@polkadot/api": "^10.7.3", "@polkadot/keyring": "^12.0.0", - "@polkadot/types": "^10.4.0", + "@polkadot/types": "^10.7.3", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0", "multibase": "^4.0.6" diff --git a/packages/did/src/DidDetails/FullDidDetails.ts b/packages/did/src/DidDetails/FullDidDetails.ts index 8c8281e60..7d4c9dbe1 100644 --- a/packages/did/src/DidDetails/FullDidDetails.ts +++ b/packages/did/src/DidDetails/FullDidDetails.ts @@ -31,7 +31,7 @@ import { parse } from '../Did.utils.js' import { resolve } from '../DidResolver/DidResolver.js' // Must be in sync with what's implemented in impl did::DeriveDidCallAuthorizationVerificationKeyRelationship for Call -// in https://github.com/KILTprotocol/mashnet-node/blob/develop/runtimes/spiritnet/src/lib.rs +// in https://github.com/KILTprotocol/kilt-node/blob/develop/runtimes/spiritnet/src/lib.rs // TODO: Should have an RPC or something similar to avoid inconsistencies in the future. const methodMapping: Record< string, diff --git a/packages/types/package.json b/packages/types/package.json index 3b113ba87..21bb8e6ad 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -30,9 +30,9 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "dependencies": { - "@polkadot/api": "^10.4.0", + "@polkadot/api": "^10.7.3", "@polkadot/keyring": "^12.0.0", - "@polkadot/types": "^10.4.0", + "@polkadot/types": "^10.7.3", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0" }, diff --git a/packages/utils/package.json b/packages/utils/package.json index 6b4dcf50e..6e88775e2 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -39,7 +39,7 @@ "@kiltprotocol/es256k-jcs-2023": "0.1.0-rc.1", "@kiltprotocol/sr25519-jcs-2023": "0.1.0-rc.1", "@kiltprotocol/types": "workspace:*", - "@polkadot/api": "^10.4.0", + "@polkadot/api": "^10.7.3", "@polkadot/keyring": "^12.0.0", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0", diff --git a/tests/integration/Delegation.spec.ts b/tests/integration/Delegation.spec.ts index 6fd957bd3..ebc284b93 100644 --- a/tests/integration/Delegation.spec.ts +++ b/tests/integration/Delegation.spec.ts @@ -285,7 +285,7 @@ describe('revocation', () => { // Delegation removal can only be done by either the delegation owner themselves via DID call // or the deposit owner as a regular signed call. - // Change introduced in https://github.com/KILTprotocol/mashnet-node/pull/304 + // Change introduced in https://github.com/KILTprotocol/kilt-node/pull/304 const removeTx = await delegationA.getRemoveTx() const authorizedRemoveTx = await Did.authorizeTx( delegator.id, diff --git a/tests/integration/utils.ts b/tests/integration/utils.ts index dfe8970a7..6a20a9ffc 100644 --- a/tests/integration/utils.ts +++ b/tests/integration/utils.ts @@ -38,7 +38,7 @@ export async function getStartedTestContainer( hostPort?: number ): Promise { const image = - process.env.TESTCONTAINERS_NODE_IMG || 'kiltprotocol/mashnet-node' + process.env.TESTCONTAINERS_NODE_IMG || 'kiltprotocol/standalone-node' console.log(`using testcontainer with image ${image}`) const strategies = [ ['--dev', '--ws-external', `--ws-port=${WS_PORT}`], diff --git a/yarn.lock b/yarn.lock index e7edd7694..1855db57a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1941,8 +1941,8 @@ __metadata: "@kiltprotocol/did": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^10.4.0 - "@polkadot/types": ^10.4.0 + "@polkadot/api": ^10.7.3 + "@polkadot/types": ^10.7.3 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 rimraf: ^3.0.2 @@ -1955,10 +1955,10 @@ __metadata: resolution: "@kiltprotocol/augment-api@workspace:packages/augment-api" dependencies: "@kiltprotocol/type-definitions": "workspace:*" - "@polkadot/api": ^10.4.0 + "@polkadot/api": ^10.7.3 "@polkadot/api-base": ^10.0.0 "@polkadot/rpc-core": ^10.0.0 - "@polkadot/typegen": ^10.4.0 + "@polkadot/typegen": ^10.7.3 "@polkadot/types": ^10.0.0 "@polkadot/types-codec": ^10.0.0 "@types/node": ^16.11.7 @@ -1978,9 +1978,9 @@ __metadata: "@kiltprotocol/type-definitions": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^10.4.0 + "@polkadot/api": ^10.7.3 "@polkadot/api-derive": ^10.0.0 - "@polkadot/types": ^10.4.0 + "@polkadot/types": ^10.7.3 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 rimraf: ^3.0.2 @@ -1993,7 +1993,7 @@ __metadata: resolution: "@kiltprotocol/config@workspace:packages/config" dependencies: "@kiltprotocol/types": "workspace:*" - "@polkadot/api": ^10.4.0 + "@polkadot/api": ^10.7.3 rimraf: ^3.0.2 typescript: ^4.8.3 typescript-logging: ^1.0.0 @@ -2014,9 +2014,9 @@ __metadata: "@kiltprotocol/sr25519-jcs-2023": 0.1.0-rc.1 "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^10.4.0 + "@polkadot/api": ^10.7.3 "@polkadot/keyring": ^12.0.0 - "@polkadot/types": ^10.4.0 + "@polkadot/types": ^10.7.3 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 "@types/json-pointer": ^1.0.34 @@ -2036,9 +2036,9 @@ __metadata: "@kiltprotocol/config": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" - "@polkadot/api": ^10.4.0 + "@polkadot/api": ^10.7.3 "@polkadot/keyring": ^12.0.0 - "@polkadot/types": ^10.4.0 + "@polkadot/types": ^10.7.3 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 multibase: ^4.0.6 @@ -2159,9 +2159,9 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/types@workspace:packages/types" dependencies: - "@polkadot/api": ^10.4.0 + "@polkadot/api": ^10.7.3 "@polkadot/keyring": ^12.0.0 - "@polkadot/types": ^10.4.0 + "@polkadot/types": ^10.7.3 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 rimraf: ^3.0.2 @@ -2177,7 +2177,7 @@ __metadata: "@kiltprotocol/es256k-jcs-2023": 0.1.0-rc.1 "@kiltprotocol/sr25519-jcs-2023": 0.1.0-rc.1 "@kiltprotocol/types": "workspace:*" - "@polkadot/api": ^10.4.0 + "@polkadot/api": ^10.7.3 "@polkadot/keyring": ^12.0.0 "@polkadot/util": ^12.0.0 "@polkadot/util-crypto": ^12.0.0 @@ -2325,7 +2325,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/api@npm:10.7.3, @polkadot/api@npm:^10.4.0": +"@polkadot/api@npm:10.7.3, @polkadot/api@npm:^10.7.3": version: 10.7.3 resolution: "@polkadot/api@npm:10.7.3" dependencies: @@ -2426,7 +2426,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/typegen@npm:^10.4.0": +"@polkadot/typegen@npm:^10.7.3": version: 10.7.3 resolution: "@polkadot/typegen@npm:10.7.3" dependencies: @@ -2513,7 +2513,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/types@npm:10.7.3, @polkadot/types@npm:^10.0.0, @polkadot/types@npm:^10.4.0": +"@polkadot/types@npm:10.7.3, @polkadot/types@npm:^10.0.0, @polkadot/types@npm:^10.7.3": version: 10.7.3 resolution: "@polkadot/types@npm:10.7.3" dependencies: From 63ab8c729cc80bb853c2259a68b0038dca50dacc Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Wed, 14 Feb 2024 13:57:54 +0100 Subject: [PATCH 091/130] test: disable pointless and breaking did integration tests (#841) test: disable pointless and breakind did integration tests --- tests/integration/Did.spec.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/integration/Did.spec.ts b/tests/integration/Did.spec.ts index f7d723b90..87862755e 100644 --- a/tests/integration/Did.spec.ts +++ b/tests/integration/Did.spec.ts @@ -1413,31 +1413,33 @@ describe('Runtime constraints', () => { ) }, 30_000) - it('should not be possible to create a DID with a service that is too long', async () => { + // TODO: these tests do not actually test anything; they just make an assertion about the value of a runtime const. + // This does not really make sense; and even if we wanted it, it would be better to just make a snapshot on the value. + it.skip('should not be possible to create a DID with a service that is too long', async () => { const serviceId = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' const limit = api.consts.did.maxServiceIdLength.toNumber() expect(serviceId.length).toBeGreaterThan(limit) }) - it('should not be possible to create a DID with a service that has too many types', async () => { + it.skip('should not be possible to create a DID with a service that has too many types', async () => { const types = ['type-1', 'type-2'] const limit = api.consts.did.maxNumberOfTypesPerService.toNumber() expect(types.length).toBeGreaterThan(limit) }) - it('should not be possible to create a DID with a service that has too many URIs', async () => { + it.skip('should not be possible to create a DID with a service that has too many URIs', async () => { const uris = ['x:url-1', 'x:url-2', 'x:url-3'] const limit = api.consts.did.maxNumberOfUrlsPerService.toNumber() expect(uris.length).toBeGreaterThan(limit) }) - it('should not be possible to create a DID with a service that has a type that is too long', async () => { + it.skip('should not be possible to create a DID with a service that has a type that is too long', async () => { const type = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' const limit = api.consts.did.maxServiceTypeLength.toNumber() expect(type.length).toBeGreaterThan(limit) }) - it('should not be possible to create a DID with a service that has a URI that is too long', async () => { + it.skip('should not be possible to create a DID with a service that has a URI that is too long', async () => { const uri = 'a:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' const limit = api.consts.did.maxServiceUrlLength.toNumber() From a2def698aa960850cf4a0dfe9fc13518363a2a38 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Wed, 14 Feb 2024 14:12:53 +0100 Subject: [PATCH 092/130] fix: type augmentation (#838) * fix: type augmentation * fix: rename clashing property 'key' * chore: update metadata to 1.12.1 --- packages/augment-api/metadata/spiritnet.json | 2 +- packages/augment-api/package.json | 7 +- .../src/interfaces/augment-api-consts.ts | 6 + .../src/interfaces/augment-api-errors.ts | 3 + .../src/interfaces/augment-api-events.ts | 123 +- .../src/interfaces/augment-api-query.ts | 82 +- .../src/interfaces/augment-api-tx.ts | 2522 ++--------------- .../src/interfaces/augment-types.ts | 24 +- .../src/interfaces/extraDefs/types.ts | 126 +- packages/augment-api/src/interfaces/lookup.ts | 765 +++-- .../augment-api/src/interfaces/registry.ts | 20 +- .../src/interfaces/types-lookup.ts | 741 +++-- packages/augment-api/tsconfig.build.json | 1 - packages/type-definitions/src/types_11200.ts | 2 +- yarn.lock | 422 ++- 15 files changed, 1768 insertions(+), 3078 deletions(-) diff --git a/packages/augment-api/metadata/spiritnet.json b/packages/augment-api/metadata/spiritnet.json index 1d741a4cb..111c53b6f 100644 --- a/packages/augment-api/metadata/spiritnet.json +++ b/packages/augment-api/metadata/spiritnet.json @@ -1 +1 @@ -{"result":"0x6d6574610eed07000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273200120526566436f756e7400012470726f766964657273200120526566436f756e7400012c73756666696369656e7473200120526566436f756e740001106461746114012c4163636f756e74446174610000100000050600140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200000050500240c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540128000c01186e6f726d616c2801045400012c6f7065726174696f6e616c280104540001246d616e6461746f7279280104540000280c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d652c010c75363400012870726f6f665f73697a652c010c75363400002c000006100030083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000034000002080038102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f67733c013c5665633c4469676573744974656d3e00003c000002400040102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e00060024436f6e73656e7375730800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000400105365616c0800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000500144f74686572040034011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e74557064617465640008000044000003040000000800480000024c004c08306672616d655f73797374656d2c4576656e745265636f7264080445015004540130000c011470686173658d02011450686173650001146576656e7450010445000118746f70696373910201185665633c543e00005008447370697269746e65745f72756e74696d653052756e74696d654576656e7400017c1853797374656d04005401706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c496e6469636573040078017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e0005002042616c616e63657304007c017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000600485472616e73616374696f6e5061796d656e7404008401a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0007001c53657373696f6e040088015470616c6c65745f73657373696f6e3a3a4576656e740016004050617261636861696e5374616b696e6704008c018470617261636861696e5f7374616b696e673a3a4576656e743c52756e74696d653e0015002444656d6f6372616379040094018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e001e001c436f756e63696c0400a801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400b801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020004c546563686e6963616c4d656d626572736869700400bc01fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365313e0022002054726561737572790400c0017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0023001c5574696c6974790400c4015470616c6c65745f7574696c6974793a3a4576656e740028001c56657374696e670400c8017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e002900245363686564756c65720400cc018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e002a001450726f78790400d8017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002b0020507265696d6167650400e4017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e002c0038546970734d656d626572736869700400e801fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365323e002d0010546970730400ec016c70616c6c65745f746970733a3a4576656e743c52756e74696d653e002e00204d756c74697369670400f0017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e002f001443747970650400f8015463747970653a3a4576656e743c52756e74696d653e003d002c4174746573746174696f6e0400fc016c6174746573746174696f6e3a3a4576656e743c52756e74696d653e003e002844656c65676174696f6e04000901016864656c65676174696f6e3a3a4576656e743c52756e74696d653e003f000c44696404001101014c6469643a3a4576656e743c52756e74696d653e004000244469644c6f6f6b757004001501018470616c6c65745f6469645f6c6f6f6b75703a3a4576656e743c52756e74696d653e00430024576562334e616d657304002501018470616c6c65745f776562335f6e616d65733a3a4576656e743c52756e74696d653e004400445075626c696343726564656e7469616c730400310101887075626c69635f63726564656e7469616c733a3a4576656e743c52756e74696d653e0045003c50617261636861696e53797374656d0400a10101bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0050002458636d7051756575650400a50101a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e0052002c506f6c6b61646f7458636d0400b101016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e0053002843756d756c757358636d04008502018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e00540020446d7051756575650400890201a063756d756c75735f70616c6c65745f646d705f71756575653a3a4576656e743c52756e74696d653e00550000540c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5801304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7264013444697370617463684572726f7200013464697370617463685f696e666f5801304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736830011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e580c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874280118576569676874000114636c6173735c01344469737061746368436c617373000120706179735f6665656001105061797300005c0c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000600c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000064082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040068012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e04006c0128546f6b656e4572726f720007002841726974686d65746963040070013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007401485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d000068082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7244018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d00006c082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000070083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000074082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000780c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909097c0c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001541c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738001185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098014346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000840c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909880c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657820013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098c0c4470617261636861696e5f7374616b696e671870616c6c6574144576656e74040454000154204e6577526f756e640800100138543a3a426c6f636b4e756d626572000020013053657373696f6e496e6465780000088041206e6577207374616b696e6720726f756e642068617320737461727465642e785c5b626c6f636b206e756d6265722c20726f756e64206e756d6265725c5d50456e7465726564546f7043616e646964617465730400000130543a3a4163636f756e744964000108cc41206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d444c656674546f7043616e646964617465730400000130543a3a4163636f756e744964000208d8416e206163636f756e74207761732072656d6f7665642066726f6d2074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d604a6f696e6564436f6c6c61746f7243616e646964617465730800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000308e041206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620636f6c6c61746f722063616e646964617465732ebc5c5b6163636f756e742c20616d6f756e74207374616b656420627920746865206e65772063616e6469646174655c5d48436f6c6c61746f725374616b65644d6f72650c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00040801014120636f6c6c61746f722063616e6469646174652068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d48436f6c6c61746f725374616b65644c6573730c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00050801014120636f6c6c61746f722063616e64696461746520686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d54436f6c6c61746f725363686564756c6564457869740c0020013053657373696f6e496e6465780000000130543a3a4163636f756e744964000020013053657373696f6e496e64657800061001014120636f6c6c61746f722063616e646964617465206861732073746172746564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e646964617465732e205c5b726f756e64206e756d6265722c20636f6c6c61746f722773206163636f756e742c20726f756e64206e756d626572207768656ee074686520636f6c6c61746f722077696c6c206265206566666563746976656c792072656d6f7665642066726f6d2074686520736574206f663063616e646964617465735c5d50436f6c6c61746f7243616e63656c6564457869740400000130543a3a4163636f756e74496400070c05014120636f6c6c61746f722063616e646964617465206861732063616e63656c6564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e6469646174657320616e6420776173206164646564206261636b20746f207468652063616e64696461746520706f6f6c2e205c5b636f6c6c61746f722773246163636f756e745c5d3443616e6469646174654c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000808cc416e206163636f756e7420686173206c6566742074686520736574206f6620636f6c6c61746f722063616e646964617465732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d3c436f6c6c61746f7252656d6f7665640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000908e4416e206163636f756e742077617320666f726365646c792072656d6f7665642066726f6d207468652020736574206f6620636f6c6c61746f72c863616e646964617465732e205c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d604d617843616e6469646174655374616b654368616e676564040018013042616c616e63654f663c543e000a08b4546865206d6178696d756d2063616e646964617465207374616b6520686173206265656e206368616e6765642e485c5b6e6577206d617820616d6f756e745c5d4c44656c656761746f725374616b65644d6f72651000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000b0cf0412064656c656761746f722068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d4c44656c656761746f725374616b65644c6573731000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000c0cf0412064656c656761746f7220686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d3444656c656761746f724c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000d08a8416e206163636f756e7420686173206c6566742074686520736574206f662064656c656761746f72732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d2844656c65676174696f6e1000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000e0cc8416e206163636f756e74206861732064656c6567617465642061206e657720636f6c6c61746f722063616e6469646174652e11015c5b6163636f756e742c20616d6f756e74206f662066756e6473207374616b65642c20746f74616c20616d6f756e74206f662064656c656761746f7273272066756e64738c7374616b656420666f722074686520636f6c6c61746f722063616e6469646174655c5d4844656c65676174696f6e5265706c616365641800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000f180d0141206e65772064656c65676174696f6e20686173207265706c6163656420616e206578697374696e67206f6e6520696e2074686520736574206f66206f6e676f696e67010164656c65676174696f6e7320666f72206120636f6c6c61746f722063616e6469646174652e205c5b6e65772064656c656761746f722773206163636f756e742c0901616d6f756e74206f662066756e6473207374616b656420696e20746865206e65772064656c65676174696f6e2c207265706c616365642064656c656761746f7227730d016163636f756e742c20616d6f756e74206f662066756e6473207374616b656420696e20746865207265706c6163652064656c65676174696f6e2c20636f6c6c61746f72050163616e6469646174652773206163636f756e742c206e657720746f74616c20616d6f756e74206f662064656c656761746f7273272066756e6473207374616b656470666f722074686520636f6c6c61746f722063616e6469646174655c5d5444656c656761746f724c656674436f6c6c61746f721000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00100cdc416e206163636f756e74206861732073746f707065642064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e09015c5b6163636f756e742c20636f6c6c61746f722063616e6469646174652773206163636f756e742c206f6c6420616d6f756e74206f662064656c656761746f727327d866756e6473207374616b65642c206e657720616d6f756e74206f662064656c656761746f7273272066756e6473207374616b65645c5d2052657761726465640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e001108c04120636f6c6c61746f72206f7220612064656c656761746f72206861732072656365697665642061207265776172642e745c5b6163636f756e742c20616d6f756e74206f66207265776172645c5d44526f756e64496e666c6174696f6e536574100090012c5065727175696e74696c6c000090012c5065727175696e74696c6c000090012c5065727175696e74696c6c000090012c5065727175696e74696c6c00120c0501496e666c6174696f6e20636f6e66696775726174696f6e20666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e09015c5b6d6178696d756d20636f6c6c61746f722773207374616b696e6720726174652c206d6178696d756d20636f6c6c61746f7227732072657761726420726174652c0d016d6178696d756d2064656c656761746f722773207374616b696e6720726174652c206d6178696d756d2064656c656761746f7227732072657761726420726174655c5d604d617853656c656374656443616e64696461746573536574080020010c753332000020010c753332001308f0546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c656374656420696e20667574757265dc76616c69646174696f6e20726f756e647320686173206368616e6765642e205c5b6f6c642076616c75652c206e65772076616c75655c5d44426c6f636b73506572526f756e64536574100020013053657373696f6e496e6465780000100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d6265720000100138543a3a426c6f636b4e756d62657200140cf8546865206c656e67746820696e20626c6f636b7320666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e01015c5b726f756e64206e756d6265722c20666972737420626c6f636b20696e207468652063757272656e7420726f756e642c206f6c642076616c75652c206e65771c76616c75655c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909900c3473705f61726974686d65746963287065725f7468696e67732c5065727175696e74696c6c0000040010010c7536340000940c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001442050726f706f73656408013870726f706f73616c5f696e64657820012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e64657820012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e64657820013c5265666572656e64756d496e6465780001247468726573686f6c64980134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e64657820013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e64657820013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e64657820013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011048323536000114756e74696c100138543a3a426c6f636b4e756d62657200090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f6861736830011048323536000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e64657820013c5265666572656e64756d496e646578000110766f74659c01644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e64657820012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e64657820012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e2c4d657461646174615365740801146f776e6572a401344d657461646174614f776e6572043c4d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e0e04d44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c65617265640801146f776e6572a401344d657461646174614f776e6572043c4d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e0f04e44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e20636c65617265642e4c4d657461646174615472616e736665727265640c0128707265765f6f776e6572a401344d657461646174614f776e6572046050726576696f7573206d65746164617461206f776e65722e01146f776e6572a401344d657461646174614f776e6572044c4e6577206d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e1004ac4d6574616461746120686173206265656e207472616e7366657272656420746f206e6577206f776e65722e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909980c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f72697479000200009c0c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f7465a00110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e636500010000a00c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000a40c4070616c6c65745f64656d6f6372616379147479706573344d657461646174614f776e657200010c2045787465726e616c0000002050726f706f73616c040020012450726f70496e646578000100285265666572656e64756d040020013c5265666572656e64756d496e64657800020000a80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6420012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f746564ac0110626f6f6c00010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ac0000050000b00418526573756c7408045401b4044501640108084f6b0400b4000000000c4572720400640000010000b40000040000b80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6420012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f746564ac0110626f6f6c00010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909bc0c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c00c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001242050726f706f73656404013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c40c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657820010c7533320001146572726f7264013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7264013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74b001384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909c80c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909cc0c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657820010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100138543a3a426c6f636b4e756d626572000114696e64657820010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736bd0016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d401404f7074696f6e3c5461736b4e616d653e000118726573756c74b001384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736bd0016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d401404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736bd0016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d401404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736bd0016c5461736b416464726573733c543a3a426c6f636b4e756d6265723e0001086964d401404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652ed000000408102000d404184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000d80c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74b001384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e646578e0010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736830013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200040450412070726f7879207761732072656d6f7665642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909dc08447370697269746e65745f72756e74696d652450726f7879547970650001180c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e63650002004050617261636861696e5374616b696e670003002c43616e63656c50726f7879000400484e6f6e4465706f736974436c61696d696e6700050000e00000050400e40c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f7465640401106861736830011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e245265717565737465640401106861736830011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c65617265640401106861736830011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909e80c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ec0c2c70616c6c65745f746970731870616c6c6574144576656e74080454000449000114184e65775469700401207469705f6861736830011c543a3a486173680000049441206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e28546970436c6f73696e670401207469705f6861736830011c543a3a48617368000104d841207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e24546970436c6f7365640c01207469705f6861736830011c543a3a4861736800010c77686f000130543a3a4163636f756e7449640001187061796f757418013c42616c616e63654f663c542c20493e0002048441207469702073756767657374696f6e20686173206265656e20636c6f7365642e305469705265747261637465640401207469705f6861736830011c543a3a486173680003049041207469702073756767657374696f6e20686173206265656e207265747261637465642e28546970536c61736865640c01207469705f6861736830011c543a3a4861736800011866696e646572000130543a3a4163636f756e74496400011c6465706f73697418013c42616c616e63654f663c542c20493e0004048841207469702073756767657374696f6e20686173206265656e20736c61736865642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f00c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c74b001384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4016454696d65706f696e743c543a3a426c6f636b4e756d6265723e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909f4083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657820010c7533320000f80c1463747970651870616c6c6574144576656e74040454000108304354797065437265617465640800000144437479706543726561746f724f663c543e00003001384374797065486173684f663c543e0000087441206e657720435479706520686173206265656e20637265617465642e885c5b63726561746f72206964656e7469666965722c20435479706520686173685c5d3043547970655570646174656404003001384374797065486173684f663c543e000108ac496e666f726d6174696f6e2061626f7574206120435479706520686173206265656e20757064617465642e385c5b435479706520686173685c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909fc0c2c6174746573746174696f6e1870616c6c6574144576656e74040454000110484174746573746174696f6e43726561746564100000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00003001384374797065486173684f663c543e0000010101704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e0000088c41206e6577206174746573746174696f6e20686173206265656e20637265617465642e05015c5b61747465737465722049442c20636c61696d20686173682c20435479706520686173682c20286f7074696f6e616c292064656c65676174696f6e2049445c5d484174746573746174696f6e5265766f6b6564080000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00010880416e206174746573746174696f6e20686173206265656e207265766f6b65642e685c5b6163636f756e742069642c20636c61696d20686173685c5d484174746573746174696f6e52656d6f766564080000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00020880416e206174746573746174696f6e20686173206265656e2072656d6f7665642e685c5b6163636f756e742069642c20636c61696d20686173685c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e0000300138436c61696d486173684f663c543e0003080501546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e2e685c5b6163636f756e742069642c20636c61696d20686173685c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909010104184f7074696f6e0404540105010108104e6f6e6500000010536f6d6504000501000001000005010c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c417574686f72697a6174696f6e4964043044656c65676174696f6e4964013001042844656c65676174696f6e040030013044656c65676174696f6e49640000000009010c2864656c65676174696f6e1870616c6c6574144576656e7404045400011c40486965726172636879437265617465640c0000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00003001384374797065486173684f663c543e0000088441206e65772068696572617263687920686173206265656e20637265617465642ea05c5b63726561746f722049442c20726f6f74206e6f64652049442c20435459504520686173685c5d404869657261726368795265766f6b6564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00010874412068696572617263687920686173206265656e207265766f6b65642e705c5b7265766f6b65722049442c20726f6f74206e6f64652049445c5d4048696572617263687952656d6f766564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000208dc412068696572617263687920686173206265656e2072656d6f7665642066726f6d207468652073746f72616765206f6e20636861696e2e705c5b72656d6f7665722049442c20726f6f74206e6f64652049445c5d4444656c65676174696f6e43726561746564180000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000000014044656c656761746f7249644f663c543e00000d01012c5065726d697373696f6e7300030c8841206e65772064656c65676174696f6e20686173206265656e20637265617465642efc5c5b63726561746f722049442c20726f6f74206e6f64652049442c2064656c65676174696f6e206e6f64652049442c20706172656e74206e6f64652049442c6864656c65676174652049442c207065726d697373696f6e735c5d4444656c65676174696f6e5265766f6b6564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00040878412064656c65676174696f6e20686173206265656e207265766f6b65642e885c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d4444656c65676174696f6e52656d6f76656408000001384163636f756e7449644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00050878412064656c65676174696f6e20686173206265656e2072656d6f7665642e885c5b72656d6f7665722049442c2064656c65676174696f6e206e6f64652049445c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000608f8546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720612064656c65676174696f6eac737562747265652e205c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909090d010c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368792c5065726d697373696f6e7300000401106269747320010c753332000011010c0c6469641870616c6c6574144576656e74040454000110284469644372656174656408000001384163636f756e7449644f663c543e00000001484469644964656e7469666965724f663c543e0000086c41206e65772044494420686173206265656e20637265617465642e985c5b7472616e73616374696f6e207369676e65722c20444944206964656e7469666965725c5d284469645570646174656404000001484469644964656e7469666965724f663c543e0001085c412044494420686173206265656e20757064617465642e485c5b444944206964656e7469666965725c5d2844696444656c6574656404000001484469644964656e7469666965724f663c543e0002085c412044494420686173206265656e2064656c657465642e485c5b444944206964656e7469666965725c5d4444696443616c6c4469737061746368656408000001484469644964656e7469666965724f663c543e0000b001384469737061746368526573756c74000308a041204449442d617574686f72697365642063616c6c20686173206265656e2065786563757465642e7c5c5b4449442063616c6c65722c20646973706174636820726573756c745c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090915010c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144576656e74040454000110584173736f63696174696f6e45737461626c69736865640800190101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000004f841206e6577206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e742049442077617320637265617465642e484173736f63696174696f6e52656d6f7665640800190101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000104ec416e206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e74204944207761732072656d6f7665642e444d6967726174696f6e50726f6772657373000204c454686572652077617320736f6d652070726f677265737320696e20746865206d6967726174696f6e2070726f636573732e484d6967726174696f6e436f6d706c65746564000304dc416c6c204163636f756e744964732068617665206265656e206d6967726174656420746f204c696e6b61626c654163636f756e7449642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090919010c4470616c6c65745f6469645f6c6f6f6b7570406c696e6b61626c655f6163636f756e74444c696e6b61626c654163636f756e7449640001082c4163636f756e744964323004001d01012c4163636f756e74496432300000002c4163636f756e7449643332040000012c4163636f756e7449643332000100001d010c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e742c4163636f756e744964323000000400210101205b75383b2032305d0000210100000314000000080025010c4470616c6c65745f776562335f6e616d65731870616c6c6574144576656e740404540001103c576562334e616d65436c61696d65640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6529010134576562334e616d654f663c543e0000047041206e6577206e616d6520686173206265656e20636c61696d65642e40576562334e616d6552656c65617365640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6529010134576562334e616d654f663c543e0001046441206e616d6520686173206265656e2072656c65617365642e38576562334e616d6542616e6e65640401106e616d6529010134576562334e616d654f663c543e0002045c41206e616d6520686173206265656e2062616e6e65642e40576562334e616d65556e62616e6e65640401106e616d6529010134576562334e616d654f663c543e0003046441206e616d6520686173206265656e20756e62616e6e65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090929010c4470616c6c65745f776562335f6e616d657324776562335f6e616d65344173636969576562334e616d65040454000004002d010180426f756e6465645665633c75382c20543a3a4d61784e616d654c656e6774683e00002d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000031010c487075626c69635f63726564656e7469616c731870616c6c6574144576656e740404540001104043726564656e7469616c53746f7265640801287375626a6563745f696435010130543a3a5375626a65637449640488546865207375626a656374206f6620746865206e65772063726564656e7469616c2e013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0474546865206964206f6620746865206e65772063726564656e7469616c2e0004a041206e6577207075626c69632063726564656e7469616c20686173206265656e206973737565642e4443726564656e7469616c52656d6f7665640801287375626a6563745f696435010130543a3a5375626a65637449640498546865207375626a656374206f66207468652072656d6f7665642063726564656e7469616c2e013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0484546865206964206f66207468652072656d6f7665642063726564656e7469616c2e01049841207075626c69632063726564656e7469616c7320686173206265656e2072656d6f7665642e4443726564656e7469616c5265766f6b656404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0484546865206964206f6620746865207265766f6b65642063726564656e7469616c2e02049441207075626c69632063726564656e7469616c20686173206265656e207265766f6b65642e4c43726564656e7469616c556e7265766f6b656404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e048c546865206964206f662074686520756e7265766f6b65642063726564656e7469616c2e03049c41207075626c69632063726564656e7469616c20686173206265656e20756e7265766f6b65642e0490546865206576656e74732067656e65726174656420627920746869732070616c6c65742e35010c3872756e74696d655f636f6d6d6f6e18617373657473204173736574446964000004003901013c41737365744964656e746966696572000039010c3c6b696c745f61737365745f646964730876312041737365744469640000080120636861696e5f69643d01011c436861696e496400012061737365745f69646501011c4173736574496400003d01103c6b696c745f61737365745f6469647314636861696e0876311c436861696e49640001141845697031353504004101013c4569703135355265666572656e63650000001842697031323204004501016447656e657369734865784861736833325265666572656e63650001001c446f7473616d6104004501016447656e657369734865784861736833325265666572656e636500020018536f6c616e6104004d01017047656e657369734261736535384861736833325265666572656e63650003001c47656e6572696304005501013847656e65726963436861696e4964000400004101103c6b696c745f61737365745f6469647314636861696e0876313c4569703135355265666572656e6365000004001801107531323800004501103c6b696c745f61737365745f6469647314636861696e0876316447656e657369734865784861736833325265666572656e636500000400490101205b75383b2031365d000049010000031000000008004d01103c6b696c745f61737365745f6469647314636861696e0876317047656e657369734261736535384861736833325265666572656e63650000040051010170426f756e6465645665633c75382c20436f6e73745533323c33323e3e000051010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00005501103c6b696c745f61737365745f6469647314636861696e0876313847656e65726963436861696e496400000801246e616d6573706163655901015447656e65726963436861696e4e616d6573706163650001247265666572656e63656101015447656e65726963436861696e5265666572656e636500005901103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e4e616d657370616365000004005d0101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f434841494e5f4e414d4553504143455f4c454e4754485f5533323e3e00005d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00006101103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e5265666572656e636500000400510101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f434841494e5f5245464552454e43455f4c454e4754485f5533323e3e00006501103c6b696c745f61737365745f646964731461737365740876311c4173736574496400011418536c6970343404006901013c536c697034345265666572656e636500000014457263323004007501018445766d536d617274436f6e747261637446756e6769626c655265666572656e63650001001845726337323104007901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650002001c4572633131353504007901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650003001c47656e6572696304008901013847656e6572696341737365744964000400006901103c6b696c745f61737365745f646964731461737365740876313c536c697034345265666572656e6365000004006d0101105532353600006d01083c7072696d69746976655f7479706573105532353600000400710101205b7536343b20345d000071010000030400000010007501103c6b696c745f61737365745f646964731461737365740876318445766d536d617274436f6e747261637446756e6769626c655265666572656e636500000400210101205b75383b2032305d00007901103c6b696c745f61737365745f646964731461737365740876319045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e6365000008007501018445766d536d617274436f6e747261637446756e6769626c655265666572656e636500007d0101b44f7074696f6e3c45766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e7469666965723e00007d0104184f7074696f6e0404540181010108104e6f6e6500000010536f6d650400810100000100008101103c6b696c745f61737365745f646964731461737365740876319445766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e74696669657200000400850101f4426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4944454e5449464945525f4c454e4754485f5533323e3e000085010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00008901103c6b696c745f61737365745f646964731461737365740876313847656e657269634173736574496400000c01246e616d6573706163658d01015447656e6572696341737365744e616d6573706163650001247265666572656e63659101015447656e6572696341737365745265666572656e63650001086964990101784f7074696f6e3c47656e6572696341737365744964656e7469666965723e00008d01103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365744e616d657370616365000004005d0101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4e414d4553504143455f4c454e4754485f5533323e3e00009101103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365745265666572656e636500000400950101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f5245464552454e43455f4c454e4754485f5533323e3e000095010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000990104184f7074696f6e040454019d010108104e6f6e6500000010536f6d6504009d0100000100009d01103c6b696c745f61737365745f646964731461737365740876315847656e6572696341737365744964656e74696669657200000400850101f4426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4944454e5449464945525f4c454e4754485f5533323e3e0000a1010c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e7404045400011c6056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d20015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e4455706772616465417574686f72697a6564040124636f64655f6861736830011c543a3a486173680003047c416e207570677261646520686173206265656e20617574686f72697a65642e60446f776e776172644d657373616765735265636569766564040114636f756e7420010c7533320004040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564280118576569676874000120646d715f6865616430014472656c61795f636861696e3a3a48617368000504e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e000604b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a5010c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e7404045400011c1c537563636573730801306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e00011877656967687428011857656967687400000464536f6d652058434d20776173206578656375746564206f6b2e104661696c0c01306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e0001146572726f72a901012058636d4572726f7200011877656967687428011857656967687400010440536f6d652058434d206661696c65642e2842616456657273696f6e0401306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e000204544261642058434d2076657273696f6e20757365642e24426164466f726d61740401306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e000304504261642058434d20666f726d617420757365642e3c58636d704d65737361676553656e740401306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e000404c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e484f766572776569676874456e71756575656410011873656e646572ad01011850617261496400011c73656e745f617420014052656c6179426c6f636b4e756d626572000114696e64657810013c4f766572776569676874496e6465780001207265717569726564280118576569676874000504d4416e2058434d2065786365656465642074686520696e646976696475616c206d65737361676520776569676874206275646765742e484f7665727765696768745365727669636564080114696e64657810013c4f766572776569676874496e646578000110757365642801185765696768740006044101416e2058434d2066726f6d20746865206f7665727765696768742071756575652077617320657865637574656420776974682074686520676976656e2061637475616c2077656967687420757365642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909a901100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002801185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d697400270000ad010c48706f6c6b61646f745f70617261636861696e287072696d6974697665730849640000040020010c7533320000b1010c2870616c6c65745f78636d1870616c6c6574144576656e7404045400015c24417474656d707465640400b501015078636d3a3a6c61746573743a3a4f7574636f6d6500000ca8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e00345c5b206f7574636f6d65205c5d1053656e740c00b90101344d756c74694c6f636174696f6e0000b90101344d756c74694c6f636174696f6e0000dd01011c58636d3c28293e00010c5c412058434d206d657373616765207761732073656e742e00885c5b206f726967696e2c2064657374696e6174696f6e2c206d657373616765205c5d48556e6578706563746564526573706f6e73650800b90101344d756c74694c6f636174696f6e000010011c517565727949640002145901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e73655265616479080010011c51756572794964000005020120526573706f6e73650003105d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e00485c5b2069642c20726573706f6e7365205c5d204e6f7469666965640c0010011c5175657279496400000801087538000008010875380004105901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d404e6f746966794f766572776569676874140010011c517565727949640000080108753800000801087538000028011857656967687400002801185765696768740005146101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20636f756c6441016e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e0019015c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e6465782c2061637475616c207765696768742c206d617820627564676574656420776569676874205c5d4c4e6f7469667944697370617463684572726f720c0010011c5175657279496400000801087538000008010875380006105501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d484e6f746966794465636f64654661696c65640c0010011c5175657279496400000801087538000008010875380007145101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e00885c5b2069642c2070616c6c657420696e6465782c2063616c6c20696e646578205c5d40496e76616c6964526573706f6e6465720c00b90101344d756c74694c6f636174696f6e000010011c517565727949640000290201544f7074696f6e3c4d756c74694c6f636174696f6e3e0008145901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e00b05c5b206f726967696e206c6f636174696f6e2c2069642c206578706563746564206c6f636174696f6e205c5d5c496e76616c6964526573706f6e64657256657273696f6e0800b90101344d756c74694c6f636174696f6e000010011c517565727949640009245101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d34526573706f6e736554616b656e040010011c51756572794964000a0cc8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e00205c5b206964205c5d34417373657473547261707065640c00300110483235360000b90101344d756c74694c6f636174696f6e00004902015056657273696f6e65644d756c7469417373657473000b0cb8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e00685c5b20686173682c206f726967696e2c20617373657473205c5d5456657273696f6e4368616e67654e6f7469666965640c00b90101344d756c74694c6f636174696f6e000020012858636d56657273696f6e0000e901012c4d756c7469417373657473000c142501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e007c5c5b2064657374696e6174696f6e2c20726573756c742c20636f7374205c5d5c537570706f7274656456657273696f6e4368616e6765640800b90101344d756c74694c6f636174696f6e000020012858636d56657273696f6e000d10390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e006c5c5b206c6f636174696f6e2c2058434d2076657273696f6e205c5d504e6f7469667954617267657453656e644661696c0c00b90101344d756c74694c6f636174696f6e000010011c517565727949640000a901012058636d4572726f72000e1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e007c5c5b206c6f636174696f6e2c2071756572792049442c206572726f72205c5d644e6f746966795461726765744d6967726174696f6e4661696c08008102015856657273696f6e65644d756c74694c6f636174696f6e000010011c51756572794964000f1059014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e00605c5b206c6f636174696f6e2c207175657279204944205c5d54496e76616c69645175657269657256657273696f6e0800b90101344d756c74694c6f636174696f6e000010011c517565727949640010245501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e00645c5b206f726967696e206c6f636174696f6e2c206964205c5d38496e76616c6964517565726965721000b90101344d756c74694c6f636174696f6e000010011c517565727949640000b90101344d756c74694c6f636174696f6e0000290201544f7074696f6e3c4d756c74694c6f636174696f6e3e0011145d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e0005015c5b206f726967696e206c6f636174696f6e2c2069642c20657870656374656420717565726965722c206d617962652061637475616c2071756572696572205c5d5056657273696f6e4e6f74696679537461727465640800b90101344d756c74694c6f636174696f6e0000e901012c4d756c74694173736574730012105901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d5856657273696f6e4e6f746966795265717565737465640800b90101344d756c74694c6f636174696f6e0000e901012c4d756c746941737365747300130c41015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e64732075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d6056657273696f6e4e6f74696679556e7265717565737465640800b90101344d756c74694c6f636174696f6e0000e901012c4d756c746941737365747300140c61015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e00805c5b2064657374696e6174696f6e206c6f636174696f6e2c20636f7374205c5d2046656573506169640800b90101344d756c74694c6f636174696f6e0000e901012c4d756c746941737365747300150c310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e006c5c5b20706179696e67206c6f636174696f6e2c2066656573205c5d34417373657473436c61696d65640c00300110483235360000b90101344d756c74694c6f636174696f6e00004902015056657273696f6e65644d756c746941737365747300160cc0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e206173736574207472617000685c5b20686173682c206f726967696e2c20617373657473205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909b501100c78636d087633187472616974731c4f7574636f6d6500010c20436f6d706c657465040028011857656967687400000028496e636f6d706c65746508002801185765696768740000a90101144572726f72000100144572726f720400a90101144572726f7200020000b901100c78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72bd0101244a756e6374696f6e730000bd01100c78636d087633246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400c10101204a756e6374696f6e0001000858320800c10101204a756e6374696f6e0000c10101204a756e6374696f6e0002000858330c00c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0003000858341000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0004000858351400c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0005000858361800c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0006000858371c00c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0007000858382000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e0000c10101204a756e6374696f6e00080000c101100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400c501010c7533320000002c4163636f756e744964333208011c6e6574776f726bc90101444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726bc90101444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726bc90101444f7074696f6e3c4e6574776f726b49643e00010c6b6579210101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400d1010110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c6974790801086964d5010118426f6479496400011070617274d9010120426f6479506172740008003c476c6f62616c436f6e73656e7375730400cd0101244e6574776f726b496400090000c5010000062000c90104184f7074696f6e04045401cd010108104e6f6e6500000010536f6d650400cd010000010000cd01100c78636d087633206a756e6374696f6e244e6574776f726b496400012824427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657210010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090000d1010000061800d501100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040044011c5b75383b20345d00010014496e6465780400c501010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000d901100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74c501010c753332000100204672616374696f6e08010c6e6f6dc501010c75333200011464656e6f6dc501010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dc501010c75333200011464656e6f6dc501010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dc501010c75333200011464656e6f6dc501010c75333200040000dd010c0c78636d0876330c58636d041043616c6c00000400e10101585665633c496e737472756374696f6e3c43616c6c3e3e0000e101000002e50100e5010c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400e901012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400e901012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400e901012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736505020120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572290201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473e901012c4d756c746941737365747300012c62656e6566696369617279b90101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473e901012c4d756c746941737365747300011064657374b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e642d0201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c3102014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c501010c7533320001406d61785f6d6573736167655f73697a65c501010c7533320001306d61785f6361706163697479c501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c501010c75333200011873656e646572c501010c753332000124726563697069656e74c501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400bd010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400350201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473390201404d756c7469417373657446696c74657200012c62656e6566696369617279b90101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473390201404d756c7469417373657446696c74657200011064657374b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e000e003445786368616e676541737365740c011067697665390201404d756c7469417373657446696c74657200011077616e74e901012c4d756c746941737365747300011c6d6178696d616cac0110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473390201404d756c7469417373657446696c74657200011c72657365727665b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473390201404d756c7469417373657446696c74657200011064657374b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f350201445175657279526573706f6e7365496e666f000118617373657473390201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573f10101284d756c746941737365740001307765696768745f6c696d69744502012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400dd01012458636d3c43616c6c3e0015002c536574417070656e6469780400dd01012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473e901012c4d756c74694173736574730001187469636b6574b90101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400e901012c4d756c7469417373657473001c002c45787065637441737365740400e901012c4d756c7469417373657473001d00304578706563744f726967696e0400290201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400090201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400210201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6534011c5665633c75383e000134726573706f6e73655f696e666f350201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578c501010c7533320001106e616d6534011c5665633c75383e00012c6d6f64756c655f6e616d6534011c5665633c75383e00012c63726174655f6d616a6f72c501010c75333200013c6d696e5f63726174655f6d696e6f72c501010c753332002200505265706f72745472616e736163745374617475730400350201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400c10101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bcd0101244e6574776f726b496400012c64657374696e6174696f6ebd010154496e746572696f724d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e002600244c6f636b41737365740801146173736574f10101284d756c74694173736574000120756e6c6f636b6572b90101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574f10101284d756c74694173736574000118746172676574b90101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574f10101284d756c746941737365740001146f776e6572b90101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574f10101284d756c746941737365740001186c6f636b6572b90101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177ac0110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400b90101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69744502012c5765696768744c696d6974000130636865636b5f6f726967696e290201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000e901100c78636d087633286d756c746961737365742c4d756c746941737365747300000400ed01013c5665633c4d756c746941737365743e0000ed01000002f10100f101100c78636d087633286d756c74696173736574284d756c7469417373657400000801086964f501011c4173736574496400010c66756ef901012c46756e676962696c6974790000f501100c78636d087633286d756c746961737365741c4173736574496400010820436f6e63726574650400b90101344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d00010000f901100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400d1010110753132380000002c4e6f6e46756e6769626c650400fd0101344173736574496e7374616e636500010000fd01100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400d10101107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804000102011c5b75383b20385d0003001c417272617931360400490101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050000010200000308000000080005020c0c78636d08763320526573706f6e7365000118104e756c6c000000184173736574730400e901012c4d756c74694173736574730001003c457865637574696f6e526573756c740400090201504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040020013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f040011020198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c740400210201384d617962654572726f72436f646500050000090204184f7074696f6e040454010d020108104e6f6e6500000010536f6d6504000d0200000100000d020000040820a9010011020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540115020453000004001d0201185665633c543e000015020c0c78636d0876332850616c6c6574496e666f0000180114696e646578c501010c7533320001106e616d6519020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d6519020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72c501010c7533320001146d696e6f72c501010c7533320001147061746368c501010c753332000019020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00001d0200000215020021020c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f7204002502018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000100385472756e63617465644572726f7204002502018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e0002000025020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000290204184f7074696f6e04045401b9010108104e6f6e6500000010536f6d650400b90100000100002d020c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d0003000031020c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656434011c5665633c75383e000035020c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6eb90101344d756c74694c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f77656967687428011857656967687400003902100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e6974650400e901012c4d756c74694173736574730000001057696c6404003d02013857696c644d756c74694173736574000100003d02100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f660801086964f501011c4173736574496400010c66756e4102013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400c501010c75333200020030416c6c4f66436f756e7465640c01086964f501011c4173736574496400010c66756e4102013c57696c6446756e676962696c697479000114636f756e74c501010c753332000300004102100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000045020c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400280118576569676874000100004902080c78636d5056657273696f6e65644d756c746941737365747300010808563204004d02013c76323a3a4d756c74694173736574730001000856330400e901013c76333a3a4d756c7469417373657473000300004d02100c78636d087632286d756c746961737365742c4d756c7469417373657473000004005102013c5665633c4d756c746941737365743e000051020000025502005502100c78636d087632286d756c74696173736574284d756c74694173736574000008010869645902011c4173736574496400010c66756e7902012c46756e676962696c69747900005902100c78636d087632286d756c746961737365741c4173736574496400010820436f6e637265746504005d0201344d756c74694c6f636174696f6e000000204162737472616374040034011c5665633c75383e000100005d02100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72610201244a756e6374696f6e7300006102100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e7300012410486572650000000858310400650201204a756e6374696f6e0001000858320800650201204a756e6374696f6e0000650201204a756e6374696f6e0002000858330c00650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0003000858341000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0004000858351400650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0005000858361800650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0006000858371c00650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0007000858382000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e0000650201204a756e6374696f6e000800006502100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400c501010c7533320000002c4163636f756e744964333208011c6e6574776f726b690201244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b690201244e6574776f726b4964000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726b690201244e6574776f726b496400010c6b6579210101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e6465780400d1010110753132380005002847656e6572616c4b657904006d0201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c697479080108696471020118426f647949640001107061727475020120426f6479506172740008000069020c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d656404006d0201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d61000300006d020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003401185665633c543e000071020c0c78636d08763218426f6479496400012810556e6974000000144e616d656404006d0201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400c501010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e0008002054726561737572790009000075020c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74c501010c753332000100204672616374696f6e08010c6e6f6dc501010c75333200011464656e6f6dc501010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dc501010c75333200011464656e6f6dc501010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dc501010c75333200011464656e6f6dc501010c753332000400007902100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c650400d1010110753132380000002c4e6f6e46756e6769626c6504007d0201344173736574496e7374616e6365000100007d02100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400d10101107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804000102011c5b75383b20385d0003001c417272617931360400490101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040034011c5665633c75383e000600008102080c78636d5856657273696f6e65644d756c74694c6f636174696f6e00010808563204005d02014476323a3a4d756c74694c6f636174696f6e0001000856330400b901014476333a3a4d756c74694c6f636174696f6e0003000085020c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d0000b501011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090989020c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144576656e7404045400011c34496e76616c6964466f726d61740401286d6573736167655f69640401244d657373616765496400000480446f776e77617264206d65737361676520697320696e76616c69642058434d2e48556e737570706f7274656456657273696f6e0401286d6573736167655f69640401244d6573736167654964000104bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e404578656375746564446f776e776172640801286d6573736167655f69640401244d657373616765496400011c6f7574636f6d65b501011c4f7574636f6d65000204c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e3c5765696768744578686175737465640c01286d6573736167655f69640401244d657373616765496400014072656d61696e696e675f77656967687428011857656967687400013c72657175697265645f776569676874280118576569676874000304f054686520776569676874206c696d697420666f722068616e646c696e6720646f776e77617264206d657373616765732077617320726561636865642e484f766572776569676874456e7175657565640c01286d6573736167655f69640401244d65737361676549640001406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800013c72657175697265645f7765696768742801185765696768740004041901446f776e77617264206d657373616765206973206f76657277656967687420616e642077617320706c6163656420696e20746865206f7665727765696768742071756575652e484f76657277656967687453657276696365640801406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800012c7765696768745f75736564280118576569676874000504e0446f776e77617264206d6573736167652066726f6d20746865206f766572776569676874207175657565207761732065786563757465642e504d61784d657373616765734578686175737465640401286d6573736167655f69640401244d6573736167654964000604b0546865206d6178696d756d206e756d626572206f6620646f776e77617264206d65737361676573207761732e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909098d0208306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040020010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000910200000230009502000002d000990208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6ec501014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d659d02016473705f72756e74696d653a3a52756e74696d65537472696e6700009d020000050200a1020c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b34011c5665633c75383e00000c684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e00202d20604f28312960387365745f686561705f7061676573040114706167657310010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646534011c5665633c75383e0002046453657420746865206e65772072756e74696d6520636f64652e5c7365745f636f64655f776974686f75745f636865636b73040110636f646534011c5665633c75383e000304190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e2c7365745f73746f726167650401146974656d73a50201345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973ad0201205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697834010c4b657900011c7375626b65797320010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b34011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea502000002a90200a90200000408343400ad020000023400b1020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2801185765696768740001246d61785f626c6f636b2801185765696768740001247065725f636c617373b50201845065724469737061746368436c6173733c57656967687473506572436c6173733e0000b5020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401b902000c01186e6f726d616cb90201045400012c6f7065726174696f6e616cb9020104540001246d616e6461746f7279b9020104540000b9020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632801185765696768740001346d61785f65787472696e736963bd0201384f7074696f6e3c5765696768743e0001246d61785f746f74616cbd0201384f7074696f6e3c5765696768743e0001207265736572766564bd0201384f7074696f6e3c5765696768743e0000bd0204184f7074696f6e04045401280108104e6f6e6500000010536f6d650400280000010000c1020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178c50201545065724469737061746368436c6173733c7533323e0000c5020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f7279200104540000c902082873705f776569676874733c52756e74696d65446257656967687400000801107265616410010c753634000114777269746510010c7536340000cd02082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d659d02013452756e74696d65537472696e67000124696d706c5f6e616d659d02013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e20010c753332000130737065635f76657273696f6e20010c753332000130696d706c5f76657273696f6e20010c75333200011061706973d102011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e20010c75333200013473746174655f76657273696f6e08010875380000d102040c436f7704045401d502000400d502000000d502000002d90200d9020000040801022000dd020c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c6574e1020c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f772c0124543a3a4d6f6d656e7400003c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee5020000040c0018ac00e9020c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e6465780000309841737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e00dc5061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00f02d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e207472616e7366657208010c6e6577ed0201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e6465780001305d0141737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6eb86973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0025012d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e1066726565040114696e64657810013c543a3a4163636f756e74496e646578000230944672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e005d015061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e005501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e000d012d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e0084456d6974732060496e646578467265656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e38666f7263655f7472616e736665720c010c6e6577ed0201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65ac0110626f6f6c0003345501466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c7265616479e868656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00a42d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e5d012d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e41012d2060667265657a65603a2069662073657420746f206074727565602c2077696c6c20667265657a652074686520696e64657820736f2069742063616e6e6f74206265207472616e736665727265642e0090456d6974732060496e64657841737369676e656460206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004304101467265657a6520616e20696e64657820736f2069742077696c6c20616c7761797320706f696e7420746f207468652073656e646572206163636f756e742e205468697320636f6e73756d657320746865206465706f7369742e005901546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d757374206861766520616c6e6f6e2d66726f7a656e206163636f756e742060696e646578602e00ac2d2060696e646578603a2074686520696e64657820746f2062652066726f7a656e20696e20706c6163652e0088456d6974732060496e64657846726f7a656e60206966207375636365737366756c2e0034232320436f6d706c6578697479242d20604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eed020c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801b4011408496404000001244163636f756e74496400000014496e6465780400f10201304163636f756e74496e6465780001000c526177040034011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400210101205b75383b2032305d00040000f102000006b400f5020c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909f9020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401fd02045300000400050301185665633c543e0000fd020c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964010201384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e730103011c526561736f6e73000001030c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c000200000503000002fd020009030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010d03045300000400110301185665633c543e00000d030c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e7469666965720101021c42616c616e6365011800080108696401020144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e6365000011030000020d030015030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011903045300000400390301185665633c543e000019030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e7408084964011d031c42616c616e636501180008010869641d0301084964000118616d6f756e7418011c42616c616e636500001d0308447370697269746e65745f72756e74696d654452756e74696d65486f6c64526561736f6e0001182c4174746573746174696f6e04002103015c6174746573746174696f6e3a3a486f6c64526561736f6e003e002844656c65676174696f6e04002503015864656c65676174696f6e3a3a486f6c64526561736f6e003f000c44696404002903013c6469643a3a486f6c64526561736f6e004000244469644c6f6f6b757004002d03017470616c6c65745f6469645f6c6f6f6b75703a3a486f6c64526561736f6e00430024576562334e616d657304003103017470616c6c65745f776562335f6e616d65733a3a486f6c64526561736f6e004400445075626c696343726564656e7469616c730400350301787075626c69635f63726564656e7469616c733a3a486f6c64526561736f6e0045000021030c2c6174746573746174696f6e1870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000025030c2864656c65676174696f6e1870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000029030c0c6469641870616c6c657428486f6c64526561736f6e0001041c4465706f736974000000002d030c4470616c6c65745f6469645f6c6f6f6b75701870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000031030c4470616c6c65745f776562335f6e616d65731870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000035030c487075626c69635f63726564656e7469616c731870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000039030000021903003d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540141030453000004004d0301185665633c543e000041030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640145031c42616c616e63650118000801086964450301084964000118616d6f756e7418011c42616c616e63650000450308447370697269746e65745f72756e74696d654c52756e74696d65467265657a65526561736f6e0001044050617261636861696e5374616b696e6704004903017c70617261636861696e5f7374616b696e673a3a467265657a65526561736f6e0015000049030c4470617261636861696e5f7374616b696e671870616c6c657430467265657a65526561736f6e0001041c5374616b696e67000000004d0300000241030051030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000124507472616e736665725f616c6c6f775f646561746808011064657374ed0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565d1010128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e587365745f62616c616e63655f646570726563617465640c010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565d1010128543a3a42616c616e63650001306f6c645f7265736572766564d1010128543a3a42616c616e636500011855015365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e743b20697420616c736f2074616b657320612072657365727665642062616c616e6365206275742074686973ec6d757374206265207468652073616d6520617320746865206163636f756e7427732063757272656e742072657365727665642062616c616e63652e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e0009015741524e494e473a20546869732063616c6c206973204445505245434154454421205573652060666f7263655f7365745f62616c616e63656020696e73746561642e38666f7263655f7472616e736665720c0118736f75726365ed0201504163636f756e7449644c6f6f6b75704f663c543e00011064657374ed0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565d1010128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374ed0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565d1010128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374ed0201504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665ac0110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686f550301445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f72207468655c706f73736962696c696c7479206f6620636875726e292e207472616e7366657208011064657374ed0201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565d1010128543a3a42616c616e636500070c3101416c69617320666f7220607472616e736665725f616c6c6f775f6465617468602c2070726f7669646564206f6e6c7920666f72206e616d652d7769736520636f6d7061746962696c6974792e0001015741524e494e473a2044455052454341544544212057696c6c2062652072656c656173656420696e20617070726f78696d6174656c792033206d6f6e7468732e44666f7263655f7365745f62616c616e636508010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565d1010128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e5503000002000059030c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001283856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804884e756d626572206f6620686f6c64732065786365656420604d6178486f6c6473602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909095d030c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800006103086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e740000000856320001000065030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016903045300000400710301185665633c543e00006903104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c6963000004006d03013c737232353531393a3a5075626c696300006d030c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d000071030000026903007503084873705f636f6e73656e7375735f736c6f747310536c6f740000040010010c753634000079030000027d03007d030000040800810300810308447370697269746e65745f72756e74696d652c53657373696f6e4b657973000004011061757261690301c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c69630000850300000220008903000004088d0334008d030c1c73705f636f72651863727970746f244b65795479706549640000040044011c5b75383b20345d000091030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b6579738103011c543a3a4b65797300011470726f6f6634011c5665633c75383e000024e453657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e1d01416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722ec05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e00d0546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e0034232320436f6d706c657869747959012d20604f283129602e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f69647328296020776869636820697320202066697865642e2870757267655f6b657973000130c852656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e00c05468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e005501546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265205369676e656420616e6420746865206163636f756e74206d757374206265206569746865722062655d01636f6e7665727469626c6520746f20612076616c696461746f72204944207573696e672074686520636861696e2773207479706963616c2061646472657373696e672073797374656d20287468697320757375616c6c7951016d65616e73206265696e67206120636f6e74726f6c6c6572206163636f756e7429206f72206469726563746c7920636f6e7665727469626c6520696e746f20612076616c696461746f722049442028776869636894757375616c6c79206d65616e73206265696e672061207374617368206163636f756e74292e0034232320436f6d706c65786974793d012d20604f2831296020696e206e756d626572206f66206b65792074797065732e2041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f6698202060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e95030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742e99030c4470617261636861696e5f7374616b696e6714747970657324526f756e64496e666f042c426c6f636b4e756d6265720110000c011c63757272656e7420013053657373696f6e496e646578000114666972737410012c426c6f636b4e756d6265720001186c656e67746810012c426c6f636b4e756d62657200009d030c4470617261636861696e5f7374616b696e671474797065734444656c65676174696f6e436f756e7465720000080114726f756e6420013053657373696f6e496e64657800011c636f756e74657220010c7533320000a1030c4470617261636861696e5f7374616b696e67147479706573145374616b6508244163636f756e74496401001c42616c616e63650118000801146f776e65720001244163636f756e744964000118616d6f756e7418011c42616c616e63650000a5030c4470617261636861696e5f7374616b696e671474797065732443616e6469646174650c244163636f756e74496401001c42616c616e63650118644d617844656c656761746f727350657243616e646964617465000014010869640001244163636f756e7449640001147374616b6518011c42616c616e636500012864656c656761746f7273a9030101014f7264657265645365743c5374616b653c4163636f756e7449642c2042616c616e63653e2c204d617844656c656761746f727350657243616e6469646174653e000114746f74616c18011c42616c616e6365000118737461747573b503013c43616e6469646174655374617475730000a9030c4470617261636861696e5f7374616b696e670c736574284f72646572656453657408045401a103045300000400ad030140426f756e6465645665633c542c20533e0000ad030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a103045300000400b10301185665633c543e0000b103000002a10300b5030c4470617261636861696e5f7374616b696e671474797065733c43616e646964617465537461747573000108184163746976650000001c4c656176696e67040020013053657373696f6e496e64657800010000b9030c4470617261636861696e5f7374616b696e6714747970657328546f74616c5374616b65041c42616c616e6365011800080124636f6c6c61746f727318011c42616c616e636500012864656c656761746f727318011c42616c616e63650000bd030c4470617261636861696e5f7374616b696e670c736574284f72646572656453657408045401a103045300000400c1030140426f756e6465645665633c542c20533e0000c1030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a103045300000400b10301185665633c543e0000c5030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e34496e666c6174696f6e496e666f0000080120636f6c6c61746f72c903012c5374616b696e67496e666f00012464656c656761746f72c903012c5374616b696e67496e666f0000c9030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e2c5374616b696e67496e666f00000801206d61785f7261746590012c5065727175696e74696c6c00012c7265776172645f72617465cd030128526577617264526174650000cd030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e28526577617264526174650000080118616e6e75616c90012c5065727175696e74696c6c0001247065725f626c6f636b90012c5065727175696e74696c6c0000d1030c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b011004560118045300000400d503013842547265654d61703c4b2c20563e0000d503042042547265654d617008044b011004560118000400d903000000d903000002dd0300dd0300000408101800e1030c4470617261636861696e5f7374616b696e671870616c6c65741043616c6c0404540001543c666f7263655f6e65775f726f756e64000018d0466f7263657320746865207374617274206f6620746865206e657720726f756e6420696e20746865206e65787420626c6f636b2e00a0546865206e657720726f756e642077696c6c20626520656e666f7263656420766961203c54206173a453686f756c64456e6453657373696f6e3c5f3e3e3a3a73686f756c645f656e645f73657373696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e347365745f696e666c6174696f6e100170636f6c6c61746f725f6d61785f726174655f70657263656e7461676590012c5065727175696e74696c6c000198636f6c6c61746f725f616e6e75616c5f7265776172645f726174655f70657263656e7461676590012c5065727175696e74696c6c00017464656c656761746f725f6d61785f726174655f70657263656e7461676590012c5065727175696e74696c6c00019c64656c656761746f725f616e6e75616c5f7265776172645f726174655f70657263656e7461676590012c5065727175696e74696c6c00013cf05365742074686520616e6e75616c20696e666c6174696f6e207261746520746f20646572697665207065722d726f756e6420696e666c6174696f6e2e00110154686520696e666c6174696f6e2064657461696c732061726520636f6e736964657265642076616c69642069662074686520616e6e75616c207265776172642072617465f0697320617070726f78696d6174656c7920746865207065722d626c6f636b207265776172642072617465206d756c7469706c69656420627920746865ac657374696d617465642a20746f74616c206e756d626572206f6620626c6f636b732070657220796561722e00cc54686520657374696d61746564206176657261676520626c6f636b2074696d65206973207477656c7665207365636f6e64732e000d014e4f54453a204974657261746573206f7665722043616e646964617465506f6f6c20616e6420666f7220656163682063616e646964617465206f766572207468656972090164656c656761746f727320746f207570646174652074686569722072657761726473206265666f72652074686520726577617264207261746573206368616e67652ee04e6565647320746f20626520696d70726f766564207768656e207363616c696e6720757020604d6178546f7043616e64696461746573602e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0068456d6974732060526f756e64496e666c6174696f6e536574602e6c7365745f6d61785f73656c65637465645f63616e6469646174657304010c6e657720010c75333200022c090153657420746865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e6469646174657320746861742063616e2062652073656c6563746564a861742074686520626567696e6e696e67206f6620656163682076616c69646174696f6e20726f756e642e00e84368616e67657320617265206e6f74206170706c69656420756e74696c20746865207374617274206f6620746865206e65787420726f756e642e000d01546865206e65772076616c7565206d75737420626520686967686572207468616e20746865206d696e696d756d20616c6c6f7765642061732073657420696e207468655c70616c6c6574277320636f6e66696775726174696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0084456d69747320604d617853656c656374656443616e64696461746573536574602e507365745f626c6f636b735f7065725f726f756e6404010c6e6577100138543a3a426c6f636b4e756d62657200032cd453657420746865206e756d626572206f6620626c6f636b7320656163682076616c69646174696f6e20726f756e64206c617374732e000901496620746865206e65772076616c7565206973206c657373207468616e20746865206c656e677468206f66207468652063757272656e7420726f756e642c20746865050173797374656d2077696c6c20696d6d6564696174656c79206d6f766520746f20746865206e65787420726f756e6420696e20746865206e65787420626c6f636b2e000d01546865206e65772076616c7565206d75737420626520686967686572207468616e20746865206d696e696d756d20616c6c6f7765642061732073657420696e207468655c70616c6c6574277320636f6e66696775726174696f6e2e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0068456d6974732060426c6f636b73506572526f756e64536574602e5c7365745f6d61785f63616e6469646174655f7374616b6504010c6e657718013042616c616e63654f663c543e000418110153657420746865206d6178696d616c20616d6f756e74206120636f6c6c61746f722063616e207374616b652e204578697374696e67207374616b657320617265206e6f74206368616e6765642e0084546865206469737061746368206f726967696e206d75737420626520526f6f742e0084456d69747320604d617843616e6469646174655374616b654368616e676564602e58666f7263655f72656d6f76655f63616e646964617465040120636f6c6c61746f72ed02018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650005300101466f726365646c792072656d6f766573206120636f6c6c61746f722063616e6469646174652066726f6d2074686520546f7043616e6469646174657320616e64e4636c6561727320616c6c206173736f6369617465642073746f7261676520666f72207468652063616e64696461746520616e642074686569722c64656c656761746f72732e00fc507265706172657320756e7374616b696e67206f66207468652063616e6469646174657320616e642074686569722064656c656761746f7273207374616b65f477686963682063616e20626520756e667265657a6564207669612060756e6c6f636b5f756e7374616b6564602061667465722077616974696e6720617409016c6561737420605374616b654475726174696f6e60206d616e7920626c6f636b732e20416c736f20696e6372656d656e7473207265776172647320666f722074686578636f6c6c61746f7220616e642074686569722064656c656761746f72732e00d4496e6372656d656e74732072657761726473206f662063616e64696461746520616e642074686569722064656c656761746f72732e0064456d697473206043616e64696461746552656d6f766564602e3c6a6f696e5f63616e646964617465730401147374616b6518013042616c616e63654f663c543e000644904a6f696e2074686520736574206f6620636f6c6c61746f722063616e646964617465732e00f8496e20746865206e65787420626c6f636b732c2069662074686520636f6c6c61746f722063616e6469646174652068617320656e6f7567682066756e6473fc7374616b656420746f20626520696e636c7564656420696e20616e79206f662074686520746f7020604d617853656c656374656443616e64696461746573600d01706f736974696f6e732c2069742077696c6c20626520696e636c7564656420696e2074686520736574206f6620706f74656e7469616c20617574686f72732074686174050177696c6c2062652073656c656374656420627920746865207374616b652d77656967687465642072616e646f6d2073656c656374696f6e2066756e6374696f6e2e00fc546865207374616b65642066756e6473206f6620746865206e657720636f6c6c61746f722063616e6469646174652061726520616464656420746f2074686568746f74616c207374616b65206f66207468652073797374656d2e00110154686520746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e2074686520616c6c6f7765642072616e67652061738873657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e00f0546865206469737061746368206f726967696e206d757374206e6f7420626520616c72656164792070617274206f662074686520636f6c6c61746f729463616e64696461746573206e6f72206f66207468652064656c656761746f7273207365742e0084456d69747320604a6f696e6564436f6c6c61746f7243616e64696461746573602e54696e69745f6c656176655f63616e6469646174657300076cc05265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e0005014f6e20737563636573732c20746865206163636f756e7420697320696d6d6564696174656c792072656d6f7665642066726f6d207468652063616e6469646174651101706f6f6c20746f2070726576656e742073656c656374696f6e206173206120636f6c6c61746f7220696e206675747572652076616c69646174696f6e20726f756e64732cd862757420756e7374616b696e67206f66207468652066756e6473206973206578656375746564207769746820612064656c6179206f665c605374616b654475726174696f6e6020626c6f636b732e00ac546865206578697420726571756573742063616e2062652072657665727365642062792063616c6c696e67686063616e63656c5f6c656176655f63616e64696461746573602e00f454686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e204974206973110175706461746564206576656e2074686f756768207468652066756e6473206f66207468652063616e6469646174652077686f207369676e616c656420746f206c65617665fc617265207374696c6c206c6f636b656420666f7220604578697444656c617960202b20605374616b654475726174696f6e60206d6f726520626c6f636b732e000d014e4f544520313a2055706f6e207374617274696e672061206e65772073657373696f6e5f6920696e20606e65775f73657373696f6e602c207468652063757272656e741101746f702063616e64696461746573206172652073656c656374656420746f20626520626c6f636b20617574686f727320666f722073657373696f6e5f692b312e20416e7905016368616e67657320746f2074686520746f702063616e64696461746573206166746572776172647320646f206e6f74206566666563742074686520736574206f6660617574686f727320666f722073657373696f6e5f692b312ed8546875732c207765206861766520746f206d616b652073757265206e6f6e65206f6620746865736520636f6c6c61746f72732063616ebc6c65617665206265666f72652073657373696f6e5f692b3120656e64732062792064656c6179696e67207468656972846578697420666f7220604578697444656c617960206d616e7920626c6f636b732e00f04e4f544520323a20576520646f206e6f7420696e6372656d656e74207265776172647320696e20746869732065787472696e73696320617320746865110163616e64696461746520636f756c64207374696c6c20617574686f7220626c6f636b732c20616e64207468757320626520656c696769626c6520746f2072656365697665ac726577617264732c20756e74696c2074686520656e64206f6620746865206e6578742073657373696f6e2e0078456d6974732060436f6c6c61746f725363686564756c656445786974602e60657865637574655f6c656176655f63616e64696461746573040120636f6c6c61746f72ed02018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500084405014578656375746520746865206e6574776f726b2065786974206f6620612063616e6469646174652077686f2072657175657374656420746f206c65617665206174f06c65617374206045786974517565756544656c61796020726f756e64732061676f2e20507265706172657320756e7374616b696e67206f6620746865010163616e6469646174657320616e642074686569722064656c656761746f7273207374616b652077686963682063616e20626520756e667265657a656420766961f460756e6c6f636b5f756e7374616b6564602061667465722077616974696e67206174206c6561737420605374616b654475726174696f6e60206d616e791c626c6f636b732e00c05265717569726573207468652063616e64696461746520746f2070726576696f75736c7920686176652063616c6c65646060696e69745f6c656176655f63616e64696461746573602e00ac546865206578697420726571756573742063616e2062652072657665727365642062792063616c6c696e67686063616e63656c5f6c656176655f63616e64696461746573602e00fc4e4f54453a204974657261746573206f7665722043616e646964617465506f6f6c20666f7220656163682063616e646964617465206f766572207468656972fc64656c656761746f727320746f2073657420726577617264732e204e6565647320746f20626520696d70726f766564207768656e207363616c696e672075704c604d6178546f7043616e64696461746573602e0054456d6974732060436f6c6c61746f724c656674602e5c63616e63656c5f6c656176655f63616e646964617465730009200501526576657274207468652070726576696f75736c79207265717565737465642065786974206f6620746865206e6574776f726b206f66206120636f6c6c61746f720d0163616e6469646174652e204f6e20737563636573732c2061646473206261636b207468652063616e64696461746520746f2074686520546f7043616e6469646174657368616e6420757064617465732074686520636f6c6c61746f72732e00c05265717569726573207468652063616e64696461746520746f2070726576696f75736c7920686176652063616c6c65646060696e69745f6c656176655f63616e64696461746573602e0074456d6974732060436f6c6c61746f7243616e63656c656445786974602e5063616e6469646174655f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000a30a85374616b65206d6f72652066756e647320666f72206120636f6c6c61746f722063616e6469646174652e0001014966206e6f7420696e2074686520736574206f662063616e646964617465732c207374616b696e6720656e6f7567682066756e647320616c6c6f77732074686505016163636f756e7420746f20626520616464656420746f2069742e20546865206c617267657220616d6f756e74206f662066756e64732c2074686520686967686572dc6368616e63657320746f2062652073656c65637465642061732074686520617574686f72206f6620746865206e65787420626c6f636b2e00dc54686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e006c456d6974732060436f6c6c61746f725374616b65644d6f7265602e5063616e6469646174655f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000b3ca85374616b65206c6573732066756e647320666f72206120636f6c6c61746f722063616e6469646174652e000501496620746865206e657720616d6f756e74206f66207374616b65642066756e64206973206e6f74206c6172676520656e6f7567682c20746865206163636f756e74fc636f756c642062652072656d6f7665642066726f6d2074686520736574206f6620636f6c6c61746f722063616e6469646174657320616e64206e6f74206265a4636f6e7369646572656420666f7220617574686f72696e6720746865206e65787420626c6f636b732e00dc54686973206f7065726174696f6e2061666665637473207468652070616c6c6574277320746f74616c207374616b6520616d6f756e742e000d0154686520756e7374616b65642066756e647320617265206e6f742072656c656173656420696d6d6564696174656c7920746f20746865206163636f756e742c20627574d0746865792077696c6c20626520617661696c61626c6520616674657220605374616b654475726174696f6e6020626c6f636b732e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e006c456d6974732060436f6c6c61746f725374616b65644c657373602e3c6a6f696e5f64656c656761746f7273080120636f6c6c61746f72ed02018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e7418013042616c616e63654f663c543e000c5805014a6f696e2074686520736574206f662064656c656761746f72732062792064656c65676174696e6720746f206120636f6c6c61746f722063616e6469646174652e000501546865206163636f756e7420746861742077616e747320746f2064656c65676174652063616e6e6f742062652070617274206f662074686520636f6c6c61746f725c63616e64696461746573207365742061732077656c6c2e0009015468652063616c6c6572206d757374205f6e6f745f206861766520612064656c65676174696f6e2e20496620746861742069732074686520636173652c2074686579b061726520726571756972656420746f2066697273742072656d6f7665207468652064656c65676174696f6e2e00110154686520616d6f756e74207374616b6564206d757374206265206c6172676572207468616e20746865206d696e696d756d20726571756972656420746f206265636f6d65c4612064656c656761746f722061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e0009014173206f6e6c7920604d617844656c656761746f7273506572436f6c6c61746f72602061726520616c6c6f77656420746f2064656c6567617465206120676976656e0501636f6c6c61746f722c2074686520616d6f756e74207374616b6564206d757374206265206c6172676572207468616e20746865206c6f77657374206f6e6520696e01017468652063757272656e7420736574206f662064656c656761746f7220666f7220746865206f7065726174696f6e20746f206265206d65616e696e6766756c2e00090154686520636f6c6c61746f72277320746f74616c207374616b652061732077656c6c206173207468652070616c6c6574277320746f74616c207374616b652061726558696e63726561736564206163636f7264696e676c792e004c456d697473206044656c65676174696f6e602ebc456d697473206044656c65676174696f6e5265706c6163656460206966207468652063616e64696461746520686173f8604d617844656c656761746f7273506572436f6c6c61746f7260206d616e792064656c65676174696f6e732062757420746869732064656c656761746f72fc7374616b6564206d6f7265207468616e206f6e65206f6620746865206f746865722064656c656761746f7273206f6620746869732063616e6469646174652e406c656176655f64656c656761746f7273000d400d014c656176652074686520736574206f662064656c656761746f727320616e642c20627920696d706c69636174696f6e2c207265766f6b6520746865206f6e676f696e672c64656c65676174696f6e2e001101416c6c207374616b65642066756e647320617265206e6f7420756e6c6f636b656420696d6d6564696174656c792c2062757420746865792061726520616464656420746f0101746865207175657565206f662070656e64696e6720756e7374616b696e672c20616e642077696c6c206566666563746976656c792062652072656c65617365640901616674657220605374616b654475726174696f6e6020626c6f636b732066726f6d20746865206d6f6d656e74207468652064656c656761746f72206c65617665732e000d0154686973206f7065726174696f6e20726564756365732074686520746f74616c207374616b65206f66207468652070616c6c65742061732077656c6c2061732074686509017374616b6573206f6620616c6c20636f6c6c61746f7273207468617420776572652064656c6567617465642c20706f74656e7469616c6c7920616666656374696e6705017468656972206368616e63657320746f20626520696e636c7564656420696e2074686520736574206f662063616e6469646174657320696e20746865206e6578741c726f756e64732e0005014175746f6d61746963616c6c7920696e6372656d656e74732074686520616363756d756c617465642072657761726473206f6620746865206f726967696e206f665c7468652063757272656e742064656c65676174696f6e2e0058456d697473206044656c656761746f724c656674602e5064656c656761746f725f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000e18dc496e63726561736520746865207374616b6520666f722064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e0001014966206e6f7420696e2074686520736574206f662063616e646964617465732c207374616b696e6720656e6f7567682066756e647320616c6c6f77732074686594636f6c6c61746f722063616e64696461746520746f20626520616464656420746f2069742e0070456d697473206044656c656761746f725374616b65644d6f7265602e5064656c656761746f725f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000f40d452656475636520746865207374616b6520666f722064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e000901496620746865206e657720616d6f756e74206f66207374616b65642066756e64206973206e6f74206c6172676520656e6f7567682c2074686520636f6c6c61746f72fc636f756c642062652072656d6f7665642066726f6d2074686520736574206f6620636f6c6c61746f722063616e6469646174657320616e64206e6f74206265a4636f6e7369646572656420666f7220617574686f72696e6720746865206e65787420626c6f636b732e00090154686520756e7374616b65642066756e647320617265206e6f742072656c6561736520696d6d6564696174656c7920746f20746865206163636f756e742c20627574d0746865792077696c6c20626520617661696c61626c6520616674657220605374616b654475726174696f6e6020626c6f636b732e0001015468652072656d61696e696e67207374616b65642066756e6473206d757374207374696c6c206265206c6172676572207468616e20746865206d696e696d756df0726571756972656420627920746869732070616c6c657420746f206d61696e7461696e2074686520737461747573206f662064656c656761746f722e00f454686520726573756c74696e6720746f74616c20616d6f756e74206f662066756e6473207374616b6564206d7573742062652077697468696e20746865cc616c6c6f7765642072616e67652061732073657420696e207468652070616c6c6574277320636f6e66696775726174696f6e2e0070456d697473206044656c656761746f725374616b65644c657373602e3c756e6c6f636b5f756e7374616b6564040118746172676574ed02018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365001028f4556e6c6f636b20616c6c2070726576696f75736c79207374616b65642066756e6473207468617420617265206e6f7720617661696c61626c6520666f720501756e6c6f636b696e6720627920746865206f726967696e206163636f756e7420616674657220605374616b654475726174696f6e6020626c6f636b73206861766520656c61707365642e00fc5765696768743a204f285529207768657265205520697320746865206e756d626572206f66206c6f636b656420756e7374616b696e6720726571756573747380626f756e64656420627920604d6178556e7374616b655265717565737473602eb42d2052656164733a205b4f726967696e204163636f756e745d2c20556e7374616b696e672c20467265657a6573702d205772697465733a20556e7374616b696e672c20467265657a6573f02d204b696c6c733a20556e7374616b696e67202620467265657a6573206966206e6f2062616c616e6365206973206c6f636b656420616e796d6f72652c23203c2f7765696768743e34636c61696d5f7265776172647300113cd4436c61696d20626c6f636b20617574686f72696e67207265776172647320666f72207468652074617267657420616464726573732e00090152657175697265732060526577617264736020746f20626520736574206265666f726568616e642c2077686963682063616e2062792074726967676572656420627970616e79206f662074686520666f6c6c6f77696e67206f7074696f6e73e82a2043616c6c696e6720696e6372656d656e745f7b636f6c6c61746f722c2064656c656761746f727d5f72657761726473202861637469766529782a20416c746572696e6720796f7572207374616b65202861637469766529b02a204c656176696e6720746865206e6574776f726b206173206120636f6c6c61746f72202861637469766529bc2a205265766f6b696e6720612064656c65676174696f6e20617320612064656c656761746f7220286163746976652909012a204265696e6720612064656c656761746f722077686f736520636f6c6c61746f72206c65667420746865206e6574776f726b2c20616c7465726564207468656972a020207374616b65206f7220696e6372656d656e746564207265776172647320287061737369766529000501546865206469737061746368206f726967696e2063616e20626520616e79207369676e6564206f6e652c20652e672e2c20616e796f6e652063616e20636c61696d2c666f7220616e796f6e652e0044456d69747320605265776172646564602e68696e6372656d656e745f636f6c6c61746f725f72657761726473001218b44163746976656c7920696e6372656d656e74207468652072657761726473206f66206120636f6c6c61746f722e0005015468652073616d652065666665637420697320747269676765726564206279206368616e67696e6720746865207374616b65206f72206c656176696e6720746865206e6574776f726b2e009c546865206469737061746368206f726967696e206d757374206265206120636f6c6c61746f722e6c696e6372656d656e745f64656c656761746f725f72657761726473001318b84163746976656c7920696e6372656d656e74207468652072657761726473206f6620612064656c656761746f722e00f85468652073616d652065666665637420697320747269676765726564206279206368616e67696e6720746865207374616b65206f72207265766f6b696e673064656c65676174696f6e732e00a0546865206469737061746368206f726967696e206d75737420626520612064656c656761746f722e7c657865637574655f7363686564756c65645f7265776172645f6368616e67650014280d0145786563757465732074686520616e6e75616c20726564756374696f6e206f66207468652072657761726420726174657320666f7220636f6c6c61746f727320616e642c64656c656761746f72732e00dc4d6f72656f7665722c2073657473207265776172647320666f7220616c6c20636f6c6c61746f727320616e642064656c656761746f72737c6265666f72652061646a757374696e672074686520696e666c6174696f6e2e000d01546865206469737061746368206f726967696e2063616e20626520616e79207369676e6564206f6e652062656361757365207765206261696c2069662063616c6c656428746f6f206561726c792e0068456d6974732060526f756e64496e666c6174696f6e536574602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ee5030c4470617261636861696e5f7374616b696e671870616c6c6574144572726f7204045400017c4444656c656761746f724e6f74466f756e64000004b8546865206163636f756e74206973206e6f742070617274206f66207468652064656c656761746f7273207365742e4443616e6469646174654e6f74466f756e64000104dc546865206163636f756e74206973206e6f742070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3c44656c656761746f72457869737473000204c8546865206163636f756e7420697320616c72656164792070617274206f66207468652064656c656761746f7273207365742e3c43616e646964617465457869737473000304ec546865206163636f756e7420697320616c72656164792070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3056616c5374616b655a65726f000404e4546865206163636f756e7420747269656420746f207374616b65206d6f7265206f72206c657373207769746820616d6f756e74207a65726f2e4056616c5374616b6542656c6f774d696e0005080d01546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f20626520616464656420746f2074686520636f6c6c61746f723c63616e64696461746573207365742e4056616c5374616b6541626f76654d61780006041101546865206163636f756e742068617320616c7265616479207374616b656420746865206d6178696d756d20616d6f756e74206f662066756e647320706f737369626c652e4844656c65676174696f6e42656c6f774d696e000708f8546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f2064656c6567617465206120636f6c6c61746f722863616e6469646174652e38416c72656164794c656176696e670008080d0154686520636f6c6c61746f722063616e6469646174652068617320616c72656164792074726967676572207468652070726f6365737320746f206c65617665207468656c736574206f6620636f6c6c61746f722063616e646964617465732e284e6f744c656176696e67000908f454686520636f6c6c61746f722063616e6469646174652077616e74656420746f20657865637574652074686520657869742062757420686173206e6f74f472657175657374656420746f206c65617665206265666f72652062792063616c6c696e672060696e69745f6c656176655f63616e64696461746573602e3843616e6e6f744c65617665596574000a08dc54686520636f6c6c61746f7220747269656420746f206c65617665206265666f72652077616974696e67206174206c6561737420666f72746045786974517565756544656c617960206d616e7920726f756e64732e6443616e6e6f744a6f696e4265666f7265556e6c6f636b696e67000b10f8546865206163636f756e742068617320612066756c6c206c697374206f6620756e7374616b696e6720726571756573747320616e64206e6565647320746ffc756e6c6f636b206174206c65617374206f6e65206f66207468657365206265666f7265206265696e672061626c6520746f206a6f696e2028616761696e292edc4e4f54453a2043616e206f6e6c792068617070656e20696620746865206163636f756e742077617320612063616e646964617465206f72f464656c656761746f72206265666f726520616e642065697468657220676f74206b69636b6564206f722065786974656420766f6c756e746172696c792e44416c726561647944656c65676174696e67000c04e4546865206163636f756e7420697320616c72656164792064656c65676174696e672074686520636f6c6c61746f722063616e6469646174652e404e6f7459657444656c65676174696e67000d080901546865206163636f756e7420686173206e6f742064656c65676174656420616e7920636f6c6c61746f722063616e646964617465207965742c2068656e6365206974806973206e6f7420696e2074686520736574206f662064656c656761746f72732e6c44656c65676174696f6e73506572526f756e644578636565646564000e1811015468652064656c656761746f722068617320657863656564656420746865206e756d626572206f662064656c65676174696f6e732070657220726f756e6420776869636894697320657175616c20746f204d617844656c656761746f7273506572436f6c6c61746f722e000901546869732070726f746563747320616761696e73742061747461636b7320696e20776869636820612064656c656761746f722063616e2072652d64656c6567617465010166726f6d206120636f6c6c61746f722077686f2068617320616c726561647920617574686f726564206120626c6f636b2c20746f20616e6f74686572206f6e6570776869636820686173206e6f7420696e207468697320726f756e642e44546f6f4d616e7944656c656761746f7273000f14010154686520636f6c6c61746f722063616e6469646174652068617320616c7265616479207265616368656420746865206d6178696d756d206e756d626572206f662c64656c656761746f72732e00050154686973206572726f722069732067656e65726174656420696e20636173652061206e65772064656c65676174696f6e207265717565737420646f6573206e6f74f47374616b6520656e6f7567682066756e647320746f207265706c61636520736f6d65206f74686572206578697374696e672064656c65676174696f6e2e60546f6f466577436f6c6c61746f7243616e64696461746573001008110154686520736574206f6620636f6c6c61746f722063616e6469646174657320776f756c642066616c6c2062656c6f7720746865207265717569726564206d696e696d756d5469662074686520636f6c6c61746f72206c6566742e5043616e6e6f745374616b6549664c656176696e67001108f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66010163616e6469646174657320616e642063616e6e6f7420706572666f726d20616e79206f7468657220616374696f6e7320696e20746865206d65616e74696d652e5c43616e6e6f7444656c656761746549664c656176696e67001208f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66ac63616e6469646174657320616e6420746875732063616e6e6f742062652064656c65676174656420746f2e804d6178436f6c6c61746f727350657244656c656761746f72457863656564656400130811015468652064656c656761746f722068617320616c72656164792064656c65676174656420746865206d6178696d756d206e756d626572206f662063616e6469646174657320616c6c6f7765642e60416c726561647944656c656761746564436f6c6c61746f72001408ec5468652064656c656761746f722068617320616c72656164792070726576696f75736c792064656c6567617465642074686520636f6c6c61746f722863616e6469646174652e4844656c65676174696f6e4e6f74466f756e64001504f854686520676976656e2064656c65676174696f6e20646f6573206e6f7420657869737420696e2074686520736574206f662064656c65676174696f6e732e24556e646572666c6f77001608050154686520636f6c6c61746f722064656c6567617465206f72207468652064656c656761746f7220697320747279696e6720746f20756e2d7374616b65206d6f72658066756e64732074686174206172652063757272656e746c79207374616b65642e4443616e6e6f7453657441626f76654d6178001708d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738061626f766520746865206d6178696d756d2076616c756520616c6c6f7765642e4443616e6e6f7453657442656c6f774d696e001808d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738062656c6f7720746865206d696e696d756d2076616c756520616c6c6f7765642e3c496e76616c69645363686564756c65001904dc416e20696e76616c696420696e666c6174696f6e20636f6e66696775726174696f6e20697320747279696e6720746f206265207365742e3c4e6f4d6f7265556e7374616b696e67001a08c4546865207374616b696e6720726577617264206265696e6720756e6c6f636b656420646f6573206e6f742065786973742e7c4d617820756e6c6f636b696e6720726571756573747320726561636865642e20546f6f4561726c79001b0801015468652072657761726420726174652063616e6e6f742062652061646a75737465642079657420617320616e20656e74697265207965617220686173206e6f741c7061737365642e345374616b654e6f74466f756e64001c04d850726f7669646564207374616b65642076616c7565206973207a65726f2e2053686f756c64206e65766572206265207468726f776e2e40556e7374616b696e674973456d707479001d049443616e6e6f7420756e6c6f636b207768656e20556e7374616b656420697320656d7074792e3c526577617264734e6f74466f756e64001e047843616e6e6f7420636c61696d207265776172647320696620656d7074792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e9030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401ed03045300000400b10501185665633c543e0000ed030000040c20f1030000f10310346672616d655f737570706f72741874726169747324707265696d616765731c426f756e64656404045401f503010c184c6567616379040110686173683001104861736800000018496e6c696e65040095010134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173683001104861736800010c6c656e20010c75333200020000f50308447370697269746e65745f72756e74696d652c52756e74696d6543616c6c0001781853797374656d0400a10201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400e10201b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c496e64696365730400e90201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e0005002042616c616e6365730400510301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0006001c53657373696f6e0400910301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0016004050617261636861696e5374616b696e670400e10301d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e5374616b696e672c2052756e74696d653e0015002444656d6f63726163790400f90301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e001e001c436f756e63696c0400090401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e001f0048546563686e6963616c436f6d6d69747465650400110401dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465652c2052756e74696d653e0020004c546563686e6963616c4d656d626572736869700400150401e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c4d656d626572736869702c2052756e74696d653e0022002054726561737572790400190401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e0023001c5574696c69747904001d0401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e0028001c56657374696e670400450401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e002900245363686564756c657204004d0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e002a001450726f78790400550401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002b0020507265696d61676504005d0401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e002c0038546970734d656d626572736869700400610401cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970734d656d626572736869702c2052756e74696d653e002d0010546970730400650401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970732c2052756e74696d653e002e00204d756c74697369670400690401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e002f001443747970650400710401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43747970652c2052756e74696d653e003d002c4174746573746174696f6e0400750401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4174746573746174696f6e2c2052756e74696d653e003e002844656c65676174696f6e0400890401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656c65676174696f6e2c2052756e74696d653e003f000c4469640400a50401a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469642c2052756e74696d653e004000244469644c6f6f6b75700400fd0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469644c6f6f6b75702c2052756e74696d653e00430024576562334e616d657304000d0501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c576562334e616d65732c2052756e74696d653e004400445075626c696343726564656e7469616c730400110501d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5075626c696343726564656e7469616c732c2052756e74696d653e0045003c50617261636861696e53797374656d0400210501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0050002458636d7051756575650400550501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e0052002c506f6c6b61646f7458636d0400590501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e00530020446d7051756575650400ad0501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446d7051756575652c2052756e74696d653e00550000f9030c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c04045400014c1c70726f706f736508012070726f706f73616cf1030140426f756e64656443616c6c4f663c543e00011476616c7565d101013042616c616e63654f663c543e0000249c50726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e001501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737480686176652066756e647320746f20636f76657220746865206465706f7369742e00d42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e15012d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e0044456d697473206050726f706f736564602e187365636f6e6404012070726f706f73616cc501012450726f70496e646578000118b45369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e64657211016d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e00c82d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e10766f74650801247265665f696e646578c501013c5265666572656e64756d496e646578000110766f74659c01644163636f756e74566f74653c42616c616e63654f663c543e3e00021c3101566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3bb86f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00dc2d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e842d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e40656d657267656e63795f63616e63656c0401247265665f696e64657820013c5265666572656e64756d496e6465780003204d015363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d652c7265666572656e64756d2e00f8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e00d02d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e003c5765696768743a20604f283129602e4065787465726e616c5f70726f706f736504012070726f706f73616cf1030140426f756e64656443616c6c4f663c543e0004182d015363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c2c7265666572656e64756d2e00e8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616cf1030140426f756e64656443616c6c4f663c543e00052c55015363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c655c616e2065787465726e616c207265666572656e64756d2e00ec546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f283129606065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616cf1030140426f756e64656443616c6c4f663c543e00062c45015363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f807363686564756c6520616e2065787465726e616c207265666572656e64756d2e00e8546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e00d42d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e004901556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061987072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e00385765696768743a20604f2831296028666173745f747261636b0c013470726f706f73616c5f6861736830011048323536000134766f74696e675f706572696f64100138543a3a426c6f636b4e756d62657200011464656c6179100138543a3a426c6f636b4e756d6265720007404d015363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c65646101696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e65e8627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e00d0546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e00f42d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e5d012d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f88094d75737420626520616c776179732067726561746572207468616e207a65726f2e350109466f72206046617374547261636b4f726967696e60206d75737420626520657175616c206f722067726561746572207468616e206046617374547261636b566f74696e67506572696f64602e51012d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265b82020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e0040456d697473206053746172746564602e00385765696768743a20604f28312960347665746f5f65787465726e616c04013470726f706f73616c5f6861736830011048323536000824b85665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e00d8546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e002d012d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e003c456d69747320605665746f6564602e00fc5765696768743a20604f2856202b206c6f6728562929602077686572652056206973206e756d626572206f6620606578697374696e67207665746f657273604463616e63656c5f7265666572656e64756d0401247265665f696e646578c501013c5265666572656e64756d496e64657800091c5052656d6f76652061207265666572656e64756d2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e00d42d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e004423205765696768743a20604f283129602e2064656c65676174650c0108746fed0201504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6efd030128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a50390144656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e742e0055015468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f7220746865c874696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e005d01546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a7420202d2062652064656c65676174696e6720616c72656164793b206f72590120202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f7665642f636f6e736f6c69646174656494202020207468726f7567682060726561705f766f746560206f722060756e766f746560292e0045012d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e55012d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e20746865410120206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e61012d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d757374206e6f74b420206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e0048456d697473206044656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e28756e64656c6567617465000b30cc556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e742e005d01546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f64dc6f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e20776173206973737565642e004501546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062655463757272656e746c792064656c65676174696e672e0050456d6974732060556e64656c656761746564602e003d015765696768743a20604f28522960207768657265205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722064656c65676174696e6720746f20686173c82020766f746564206f6e2e205765696768742069732063686172676564206173206966206d6178696d756d20766f7465732e58636c6561725f7075626c69635f70726f706f73616c73000c1470436c6561727320616c6c207075626c69632070726f706f73616c732e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e003c5765696768743a20604f283129602e18756e6c6f636b040118746172676574ed0201504163636f756e7449644c6f6f6b75704f663c543e000d1ca0556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e00b82d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e00bc5765696768743a20604f2852296020776974682052206e756d626572206f6620766f7465206f66207461726765742e2c72656d6f76655f766f7465040114696e64657820013c5265666572656e64756d496e646578000e6c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e000c49663a882d20746865207265666572656e64756d207761732063616e63656c6c65642c206f727c2d20746865207265666572656e64756d206973206f6e676f696e672c206f72902d20746865207265666572656e64756d2068617320656e64656420737563682074686174fc20202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f72d420202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f728420202d20746865206163636f756e74206d61646520612073706c697420766f74655d012e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72655866756e6473206265696e6720617661696c61626c652e00a849662c20686f77657665722c20746865207265666572656e64756d2068617320656e64656420616e643aec2d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64dc2d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64bc2d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f76657259012e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c766559012a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756de46f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e004901546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465887265676973746572656420666f72207265666572656e64756d2060696e646578602e00f42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e4472656d6f76655f6f746865725f766f7465080118746172676574ed0201504163636f756e7449644c6f6f6b75704f663c543e000114696e64657820013c5265666572656e64756d496e646578000f3c7c52656d6f7665206120766f746520666f722061207265666572656e64756d2e004d0149662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f2d016072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c5501656974686572206265636175736520746865207265666572656e64756d207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f737420746865207265666572656e64756d206f7298626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e00c8546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e004d012d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f725420207265666572656e64756d2060696e646578602ef42d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e0055015765696768743a20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2ed820205765696768742069732063616c63756c6174656420666f7220746865206d6178696d756d206e756d626572206f6620766f74652e24626c61636b6c69737408013470726f706f73616c5f686173683001104832353600013c6d617962655f7265665f696e6465780104015c4f7074696f6e3c5265666572656e64756d496e6465783e00103c45015065726d616e656e746c7920706c61636520612070726f706f73616c20696e746f2074686520626c61636b6c6973742e20546869732070726576656e74732069742066726f6d2065766572206265696e673c70726f706f73656420616761696e2e00510149662063616c6c6564206f6e206120717565756564207075626c6963206f722065787465726e616c2070726f706f73616c2c207468656e20746869732077696c6c20726573756c7420696e206974206265696e67510172656d6f7665642e2049662074686520607265665f696e6465786020737570706c69656420697320616e20616374697665207265666572656e64756d2077697468207468652070726f706f73616c20686173682c687468656e2069742077696c6c2062652063616e63656c6c65642e00ec546865206469737061746368206f726967696e206f6620746869732063616c6c206d7573742062652060426c61636b6c6973744f726967696e602e00f82d206070726f706f73616c5f68617368603a205468652070726f706f73616c206861736820746f20626c61636b6c697374207065726d616e656e746c792e45012d20607265665f696e646578603a20416e206f6e676f696e67207265666572656e64756d2077686f73652068617368206973206070726f706f73616c5f68617368602c2077686963682077696c6c2062652863616e63656c6c65642e0041015765696768743a20604f28702960202874686f756768206173207468697320697320616e20686967682d70726976696c6567652064697370617463682c20776520617373756d65206974206861732061502020726561736f6e61626c652076616c7565292e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578c501012450726f70496e64657800111c4852656d6f766520612070726f706f73616c2e000101546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c50726f706f73616c4f726967696e602e00d02d206070726f705f696e646578603a2054686520696e646578206f66207468652070726f706f73616c20746f2063616e63656c2e00e45765696768743a20604f28702960207768657265206070203d205075626c696350726f70733a3a3c543e3a3a6465636f64655f6c656e282960307365745f6d657461646174610801146f776e6572a401344d657461646174614f776e65720001286d617962655f68617368050401504f7074696f6e3c507265696d616765486173683e00123cd8536574206f7220636c6561722061206d65746164617461206f6620612070726f706f73616c206f722061207265666572656e64756d2e002c506172616d65746572733acc2d20606f726967696e603a204d75737420636f72726573706f6e6420746f2074686520604d657461646174614f776e6572602e3d01202020202d206045787465726e616c4f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053757065724d616a6f72697479417070726f766560402020202020207468726573686f6c642e5901202020202d206045787465726e616c44656661756c744f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053757065724d616a6f72697479416761696e737460402020202020207468726573686f6c642e4501202020202d206045787465726e616c4d616a6f726974794f726967696e6020666f7220616e2065787465726e616c2070726f706f73616c207769746820746865206053696d706c654d616a6f7269747960402020202020207468726573686f6c642ec8202020202d20605369676e65646020627920612063726561746f7220666f722061207075626c69632070726f706f73616c2ef4202020202d20605369676e65646020746f20636c6561722061206d6574616461746120666f7220612066696e6973686564207265666572656e64756d2ee4202020202d2060526f6f746020746f207365742061206d6574616461746120666f7220616e206f6e676f696e67207265666572656e64756d2eb42d20606f776e6572603a20616e206964656e746966696572206f662061206d65746164617461206f776e65722e51012d20606d617962655f68617368603a205468652068617368206f6620616e206f6e2d636861696e2073746f72656420707265696d6167652e20604e6f6e656020746f20636c6561722061206d657461646174612e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632efd030c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000010404184f7074696f6e04045401200108104e6f6e6500000010536f6d650400200000010000050404184f7074696f6e04045401300108104e6f6e6500000010536f6d65040030000001000009040c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273550301445665633c543a3a4163636f756e7449643e0001147072696d650d0401504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7420012c4d656d626572436f756e74000060805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e00d4546865206469737061746368206f6620746869732063616c6c206d75737420626520605365744d656d626572734f726967696e602e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e0038232320436f6d706c65786974793a502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564291c6578656375746508012070726f706f73616cf503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c501010c753332000124f0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e0038232320436f6d706c65786974793a5c2d20604f2842202b204d202b205029602077686572653ad82d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429882d20604d60206d656d626572732d636f756e742028636f64652d626f756e64656429a82d2060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c601c70726f706f73650c01247468726573686f6c64c501012c4d656d626572436f756e7400012070726f706f73616cf503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c501010c753332000238f84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e0034232320436f6d706c6578697479ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d2032602910766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578c501013450726f706f73616c496e64657800011c617070726f7665ac0110626f6f6c000324f041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e34232320436f6d706c657869747909012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564294c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a486173680005285901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e0034232320436f6d706c6578697479ac4f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c7314636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578c501013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642801185765696768740001306c656e6774685f626f756e64c501010c7533320006604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e0d0404184f7074696f6e04045401000108104e6f6e6500000010536f6d65040000000001000011040c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273550301445665633c543a3a4163636f756e7449643e0001147072696d650d0401504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7420012c4d656d626572436f756e74000060805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e00d4546865206469737061746368206f6620746869732063616c6c206d75737420626520605365744d656d626572734f726967696e602e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e0038232320436f6d706c65786974793a502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564291c6578656375746508012070726f706f73616cf503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c501010c753332000124f0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e0038232320436f6d706c65786974793a5c2d20604f2842202b204d202b205029602077686572653ad82d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429882d20604d60206d656d626572732d636f756e742028636f64652d626f756e64656429a82d2060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c601c70726f706f73650c01247468726573686f6c64c501012c4d656d626572436f756e7400012070726f706f73616cf503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64c501010c753332000238f84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e0034232320436f6d706c6578697479ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d2032602910766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578c501013450726f706f73616c496e64657800011c617070726f7665ac0110626f6f6c000324f041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e34232320436f6d706c657869747909012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564294c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a486173680005285901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e0034232320436f6d706c6578697479ac4f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c7314636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578c501013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642801185765696768740001306c656e6774685f626f756e64c501010c7533320006604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e15040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665ed0201504163636f756e7449644c6f6f6b75704f663c543e00010c616464ed0201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d62657273550301445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577ed0201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e19040c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001143470726f706f73655f7370656e6408011476616c7565d101013c42616c616e63654f663c542c20493e00012c62656e6566696369617279ed0201504163636f756e7449644c6f6f6b75704f663c543e000018290150757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c75653101697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e6365207468655070726f706f73616c20697320617761726465642e0034232320436f6d706c6578697479182d204f2831293c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964c501013450726f706f73616c496e646578000118f852656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e0034232320436f6d706c6578697479182d204f28312940617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964c501013450726f706f73616c496e64657800021c5901417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e6566696369617279a8616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e00ac4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a417070726f76654f726967696e602e0034232320436f6d706c657869747920202d204f2831292e147370656e64080118616d6f756e74d101013c42616c616e63654f663c542c20493e00012c62656e6566696369617279ed0201504163636f756e7449644c6f6f6b75704f663c543e000320b850726f706f736520616e6420617070726f76652061207370656e64206f662074726561737572792066756e64732e004d012d20606f726967696e603a204d75737420626520605370656e644f726967696e60207769746820746865206053756363657373602076616c7565206265696e67206174206c656173742060616d6f756e74602e41012d2060616d6f756e74603a2054686520616d6f756e7420746f206265207472616e736665727265642066726f6d2074686520747265617375727920746f20746865206062656e6566696369617279602ee82d206062656e6566696369617279603a205468652064657374696e6174696f6e206163636f756e7420666f7220746865207472616e736665722e0045014e4f54453a20466f72207265636f72642d6b656570696e6720707572706f7365732c207468652070726f706f736572206973206465656d656420746f206265206571756976616c656e7420746f207468653062656e65666963696172792e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964c501013450726f706f73616c496e6465780004342d01466f72636520612070726576696f75736c7920617070726f7665642070726f706f73616c20746f2062652072656d6f7665642066726f6d2074686520617070726f76616c2071756575652ec0546865206f726967696e616c206465706f7369742077696c6c206e6f206c6f6e6765722062652072657475726e65642e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602ea02d206070726f706f73616c5f6964603a2054686520696e646578206f6620612070726f706f73616c0034232320436f6d706c6578697479ac2d204f2841292077686572652060416020697320746865206e756d626572206f6620617070726f76616c73001c4572726f72733a61012d206050726f706f73616c4e6f74417070726f766564603a20546865206070726f706f73616c5f69646020737570706c69656420776173206e6f7420666f756e6420696e2074686520617070726f76616c2071756575652c5101692e652e2c207468652070726f706f73616c20686173206e6f74206265656e20617070726f7665642e205468697320636f756c6420616c736f206d65616e207468652070726f706f73616c20646f6573206e6f745901657869737420616c746f6765746865722c2074687573207468657265206973206e6f2077617920697420776f756c642068617665206265656e20617070726f76656420696e2074686520666972737420706c6163652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e1d040c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c732104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e646578e0010c75313600011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c732104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696e25040154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c732104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874280118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2104000002f50300250408447370697269746e65745f72756e74696d65304f726967696e43616c6c657200011c1873797374656d0400290401746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c04002d0401010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400310401010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020000c4469640400350401506469643a3a4f726967696e3c52756e74696d653e0040002c506f6c6b61646f7458636d04003904014870616c6c65745f78636d3a3a4f726967696e0053002843756d756c757358636d04003d04016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e00540010566f69640400410401110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f69640006000029040c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200002d04084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080020012c4d656d626572436f756e74000020012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d000200003104084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080020012c4d656d626572436f756e74000020012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d0002000035040c0c646964186f726967696e304469645261774f726967696e08344469644964656e7469666965720100244163636f756e74496401000008010869640001344469644964656e7469666965720001247375626d69747465720001244163636f756e744964000039040c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400b90101344d756c74694c6f636174696f6e00000020526573706f6e73650400b90101344d756c74694c6f636174696f6e000100003d040c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e0400ad010118506172614964000100004104081c73705f636f726510566f69640001000045040c3870616c6c65745f76657374696e671870616c6c65741043616c6c0404540001141076657374000024b8556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e005d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e28766573745f6f74686572040118746172676574ed0201504163636f756e7449644c6f6f6b75704f663c543e00012cb8556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051012d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c646c6f636b656420756e64657220746869732070616c6c65742e00d0456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e0034232320436f6d706c6578697479242d20604f283129602e3c7665737465645f7472616e73666572080118746172676574ed0201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65490401a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00023464437265617465206120766573746564207472616e736665722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00cc2d2060746172676574603a20546865206163636f756e7420726563656976696e6720746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e54666f7263655f7665737465645f7472616e736665720c0118736f75726365ed0201504163636f756e7449644c6f6f6b75704f663c543e000118746172676574ed0201504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65490401a456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e00033860466f726365206120766573746564207472616e736665722e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e00e82d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e11012d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732ef02d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e005c456d697473206056657374696e6743726561746564602e00fc4e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b2e0034232320436f6d706c6578697479242d20604f283129602e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657820010c75333200013c7363686564756c65325f696e64657820010c7533320004545d014d657267652074776f2076657374696e67207363686564756c657320746f6765746865722c206372656174696e672061206e65772076657374696e67207363686564756c65207468617420756e6c6f636b73206f7665725501746865206869676865737420706f737369626c6520737461727420616e6420656e6420626c6f636b732e20496620626f7468207363686564756c6573206861766520616c7265616479207374617274656420746865590163757272656e7420626c6f636b2077696c6c206265207573656420617320746865207363686564756c652073746172743b207769746820746865206361766561742074686174206966206f6e65207363686564756c655d0169732066696e6973686564206279207468652063757272656e7420626c6f636b2c20746865206f746865722077696c6c206265207472656174656420617320746865206e6577206d6572676564207363686564756c652c2c756e6d6f6469666965642e00f84e4f54453a20496620607363686564756c65315f696e646578203d3d207363686564756c65325f696e6465786020746869732069732061206e6f2d6f702e41014e4f54453a20546869732077696c6c20756e6c6f636b20616c6c207363686564756c6573207468726f756768207468652063757272656e7420626c6f636b207072696f7220746f206d657267696e672e61014e4f54453a20496620626f7468207363686564756c6573206861766520656e646564206279207468652063757272656e7420626c6f636b2c206e6f206e6577207363686564756c652077696c6c206265206372656174656464616e6420626f74682077696c6c2062652072656d6f7665642e006c4d6572676564207363686564756c6520617474726962757465733a35012d20607374617274696e675f626c6f636b603a20604d4158287363686564756c65312e7374617274696e675f626c6f636b2c207363686564756c6564322e7374617274696e675f626c6f636b2c48202063757272656e745f626c6f636b29602e21012d2060656e64696e675f626c6f636b603a20604d4158287363686564756c65312e656e64696e675f626c6f636b2c207363686564756c65322e656e64696e675f626c6f636b29602e59012d20606c6f636b6564603a20607363686564756c65312e6c6f636b65645f61742863757272656e745f626c6f636b29202b207363686564756c65322e6c6f636b65645f61742863757272656e745f626c6f636b29602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00e82d20607363686564756c65315f696e646578603a20696e646578206f6620746865206669727374207363686564756c6520746f206d657267652eec2d20607363686564756c65325f696e646578603a20696e646578206f6620746865207365636f6e64207363686564756c6520746f206d657267652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e49040c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d62657200004d040c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963510401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100138543a3a426c6f636b4e756d626572000114696e64657820010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963510401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963510401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000404a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100138543a3a426c6f636b4e756d6265720001386d617962655f706572696f646963510401a04f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000504905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e510404184f7074696f6e04045401d00108104e6f6e6500000010536f6d650400d0000001000055040c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616ced0201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065590401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465ed0201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d6265720001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465ed0201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d62657200021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100138543a3a426c6f636b4e756d626572000114696e646578e0010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572ed0201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f787954797065000114696e646578e0010c7531360001186865696768742c0138543a3a426c6f636b4e756d6265720001246578745f696e646578c501010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616ced0201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616ced0201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465ed0201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465ed0201504163636f756e7449644c6f6f6b75704f663c543e0001107265616ced0201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065590401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e590404184f7074696f6e04045401dc0108104e6f6e6500000010536f6d650400dc00000100005d040c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657334011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d6167650401106861736830011c543a3a48617368000118dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e00fc496620606c656e602069732070726f76696465642c207468656e2069742077696c6c2062652061206d7563682063686561706572206f7065726174696f6e2e0001012d206068617368603a205468652068617368206f662074686520707265696d61676520746f2062652072656d6f7665642066726f6d207468652073746f72652eb82d20606c656e603a20546865206c656e677468206f662074686520707265696d616765206f66206068617368602e40726571756573745f707265696d6167650401106861736830011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d6167650401106861736830011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e61040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665ed0201504163636f756e7449644c6f6f6b75704f663c543e00010c616464ed0201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d62657273550301445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577ed0201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e65040c2c70616c6c65745f746970731870616c6c65741043616c6c080454000449000118387265706f72745f617765736f6d65080118726561736f6e34011c5665633c75383e00010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e00004059015265706f727420736f6d657468696e672060726561736f6e60207468617420646573657276657320612074697020616e6420636c61696d20616e79206576656e7475616c207468652066696e6465722773206665652e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0051015061796d656e743a20605469705265706f72744465706f73697442617365602077696c6c2062652072657365727665642066726f6d20746865206f726967696e206163636f756e742c2061732077656c6c206173bc60446174614465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e0074456d69747320604e657754697060206966207375636365737366756c2e0034232320436f6d706c6578697479982d20604f2852296020776865726520605260206c656e677468206f662060726561736f6e602e9020202d20656e636f64696e6720616e642068617368696e67206f662027726561736f6e272c726574726163745f7469700401106861736830011c543a3a486173680001405101526574726163742061207072696f72207469702d7265706f72742066726f6d20607265706f72745f617765736f6d65602c20616e642063616e63656c207468652070726f63657373206f662074697070696e672e00dc4966207375636365737366756c2c20746865206f726967696e616c206465706f7369742077696c6c20626520756e72657365727665642e004d01546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642074686520746970206964656e7469666965642062792060686173686041016d7573742068617665206265656e207265706f7274656420627920746865207369676e696e67206163636f756e74207468726f75676820607265706f72745f617765736f6d65602028616e64206e6f744c7468726f75676820607469705f6e657760292e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e008c456d697473206054697052657472616374656460206966207375636365737366756c2e0034232320436f6d706c6578697479202d20604f28312960d820202d20446570656e6473206f6e20746865206c656e677468206f662060543a3a48617368602077686963682069732066697865642e1c7469705f6e65770c0118726561736f6e34011c5665633c75383e00010c77686fed0201504163636f756e7449644c6f6f6b75704f663c543e0001247469705f76616c7565d101013c42616c616e63654f663c542c20493e00024cf04769766520612074697020666f7220736f6d657468696e67206e65773b206e6f2066696e6465722773206665652077696c6c2062652074616b656e2e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e005d012d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626558202061205554462d382d656e636f6465642055524c2ee82d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e0074456d69747320604e657754697060206966207375636365737366756c2e0034232320436f6d706c657869747921012d20604f2852202b2054296020776865726520605260206c656e677468206f662060726561736f6e602c2060546020697320746865206e756d626572206f6620746970706572732e5d0120202d20604f285429603a206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792d012020202060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f66442020202060543a3a54697070657273602ee020202d20604f285229603a2068617368696e6720616e6420656e636f64696e67206f6620726561736f6e206f66206c656e677468206052600c7469700801106861736830011c543a3a486173680001247469705f76616c7565d101013c42616c616e63654f663c542c20493e000354b04465636c6172652061207469702076616c756520666f7220616e20616c72656164792d6f70656e207469702e005101546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061706d656d626572206f662074686520605469707065727360207365742e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f66207468652068617368206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e65666963696172793420206163636f756e742049442e4d012d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e20746970d4202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e006101456d6974732060546970436c6f73696e676020696620746865207468726573686f6c64206f66207469707065727320686173206265656e207265616368656420616e642074686520636f756e74646f776e20706572696f643068617320737461727465642e0034232320436f6d706c657869747961012d20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e677468206054602c20696e736572745901202074697020616e6420636865636b20636c6f73696e672c20605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e010120205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e005d01202041637475616c6c792077656967687420636f756c64206265206c6f77657220617320697420646570656e6473206f6e20686f77206d616e7920746970732061726520696e20604f70656e5469706020627574206974d02020697320776569676874656420617320696620616c6d6f73742066756c6c20692e65206f66206c656e6774682060542d31602e24636c6f73655f7469700401106861736830011c543a3a486173680004345c436c6f736520616e64207061796f75742061207469702e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e00150154686520746970206964656e74696669656420627920606861736860206d75737420686176652066696e69736865642069747320636f756e74646f776e20706572696f642e0061012d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65645d0120206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e0034232320436f6d706c65786974795d012d203a20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e20605460590120206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e205468652061637475616c20636f737420646570656e6473206f6e94202074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e24736c6173685f7469700401106861736830011c543a3a486173680005289452656d6f766520616e6420736c61736820616e20616c72656164792d6f70656e207469702e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656a6563744f726967696e602e00f44173206120726573756c742c207468652066696e64657220697320736c617368656420616e6420746865206465706f7369747320617265206c6f73742e0084456d6974732060546970536c617368656460206966207375636365737366756c2e0034232320436f6d706c65786974791c2d204f2831292e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e69040c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573550301445665633c543a3a4163636f756e7449643e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000305101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e0034232320436f6d706c657869747919014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e2061735f6d756c74691401247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573550301445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e746d0401844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00011063616c6cf503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687428011857656967687400019c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e0034232320436f6d706c6578697479502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e40617070726f76655f61735f6d756c74691401247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573550301445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e746d0401844f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f7765696768742801185765696768740002785501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e3c63616e63656c5f61735f6d756c74691001247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573550301445665633c543a3a4163636f756e7449643e00012474696d65706f696e74f4016454696d65706f696e743c543a3a426c6f636b4e756d6265723e00012463616c6c5f686173680401205b75383b2033325d000354550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e6d0404184f7074696f6e04045401f40108104e6f6e6500000010536f6d650400f4000001000071040c1463747970651870616c6c65741043616c6c0404540001080c616464040114637479706534011c5665633c75383e00003009014372656174652061206e65772043547970652066726f6d2074686520676976656e20756e69717565204354797065206861736820616e64206173736f6369617465735069742077697468206974732063726561746f722e00dc412043547970652077697468207468652073616d652068617368206d757374206e6f742062652073746f726564206f6e20636861696e2e0054456d6974732060435479706543726561746564602e002823203c7765696768743e305765696768743a204f283129602d2052656164733a204374797065732c2042616c616e6365642d205772697465733a204374797065732c2042616c616e63652c23203c2f7765696768743e407365745f626c6f636b5f6e756d62657208012863747970655f686173683001384374797065486173684f663c543e000130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e00010ce853657420746865206372656174696f6e20626c6f636b206e756d62657220666f72206120676976656e2043547970652c20696620666f756e642e0054456d6974732060435479706555706461746564602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e75040c2c6174746573746174696f6e1870616c6c65741043616c6c0404540001180c6164640c0128636c61696d5f68617368300138436c61696d486173684f663c543e00012863747970655f686173683001384374797065486173684f663c543e000134617574686f72697a6174696f6e790401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000054644372656174652061206e6577206174746573746174696f6e2e00f85468652061747465737465722063616e206f7074696f6e616c6c792070726f766964652061207265666572656e636520746f20616e206578697374696e67090164656c65676174696f6e20746861742077696c6c20626520736176656420616c6f6e67207769746820746865206174746573746174696f6e20697473656c6620696e8c74686520666f726d206f6620616e2061747465737465642064656c65676174696f6e2e00ec546865207265666572656e6365642043547970652068617368206d75737420616c72656164792062652070726573656e74206f6e20636861696e2e000901496620616e206f7074696f6e616c2064656c65676174696f6e2069642069732070726f76696465642c20746865206469737061746368206f726967696e206d757374e8626520746865206f776e6572206f66207468652064656c65676174696f6e2e204f74686572776973652c20697420636f756c6420626520616e79546044656c65676174696f6e456e746974794964602e006c456d69747320604174746573746174696f6e43726561746564602e002823203c7765696768743e305765696768743a204f283129b82d2052656164733a205b4f726967696e204163636f756e745d2c2043747970652c204174746573746174696f6e73e42d2052656164732069662064656c65676174696f6e2069642069732070726f76696465643a2044656c65676174696f6e732c20526f6f74732c5c202044656c6567617465644174746573746174696f6e73bc2d205772697465733a204174746573746174696f6e732c202844656c6567617465644174746573746174696f6e73292c23203c2f7765696768743e187265766f6b65080128636c61696d5f68617368300138436c61696d486173684f663c543e000134617574686f72697a6174696f6e790401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0001447c5265766f6b6520616e206578697374696e67206174746573746174696f6e2e00fc546865207265766f6b6572206d75737420626520656974686572207468652063726561746f72206f6620746865206174746573746174696f6e206265696e6709017265766f6b6564206f7220616e20656e74697479207468617420696e207468652064656c65676174696f6e207472656520697320616e20616e636573746f72206f6609017468652061747465737465722c20692e652e2c2069742077617320656974686572207468652064656c656761746f72206f6620746865206174746573746572206f7250616e20616e636573746f722074686572656f662e006c456d69747320604174746573746174696f6e5265766f6b6564602e002823203c7765696768743e0d015765696768743a204f285029207768657265205020697320746865206e756d626572206f6620737465707320726571756972656420746f2076657269667920746861740901746865206469737061746368204f726967696e20636f6e74726f6c73207468652064656c65676174696f6e20656e7469746c656420746f207265766f6b6520746865c86174746573746174696f6e2e20497420697320626f756e64656420627920606d61785f706172656e745f636865636b73602ee82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2064656c65676174696f6e3a3a526f6f7473d82d205265616473207065722064656c65676174696f6e207374657020503a2064656c65676174696f6e3a3a44656c65676174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e1872656d6f7665080128636c61696d5f68617368300138436c61696d486173684f663c543e000134617574686f72697a6174696f6e790401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0002445852656d6f766520616e206174746573746174696f6e2e00f8546865206f726967696e206d75737420626520656974686572207468652063726561746f72206f6620746865206174746573746174696f6e206f7220616e0d01656e7469747920776869636820697320616e20616e636573746f72206f662074686520617474657374657220696e207468652064656c65676174696f6e20747265652c0101692e652e2c2069742077617320656974686572207468652064656c656761746f72206f6620746865206174746573746572206f7220616e20616e636573746f722074686572656f662e006c456d69747320604174746573746174696f6e52656d6f766564602e002823203c7765696768743e0d015765696768743a204f285029207768657265205020697320746865206e756d626572206f6620737465707320726571756972656420746f2076657269667920746861740901746865206469737061746368204f726967696e20636f6e74726f6c73207468652064656c65676174696f6e20656e7469746c656420746f207265766f6b6520746865c86174746573746174696f6e2e20497420697320626f756e64656420627920606d61785f706172656e745f636865636b73602ee82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2064656c65676174696f6e3a3a526f6f7473d82d205265616473207065722064656c65676174696f6e207374657020503a2064656c65676174696f6e3a3a44656c65676174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e3c7265636c61696d5f6465706f736974040128636c61696d5f68617368300138436c61696d486173684f663c543e000324d05265636c61696d20612073746f72616765206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e0064456d69747320604465706f7369745265636c61696d6564602e002823203c7765696768743e305765696768743a204f283129f82d2052656164733a205b4f726967696e204163636f756e745d2c204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e73b42d205772697465733a204174746573746174696f6e732c2044656c6567617465644174746573746174696f6e732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e6572040128636c61696d5f68617368300138436c61696d486173684f663c543e00041c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00ec546865207375626a656374206f66207468652063616c6c206d757374206265207468652061747465737465722077686f206973737565732074686509016174746573746174696f6e2e205468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f736974040128636c61696d5f68617368300138436c61696d486173684f663c543e00050cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e790404184f7074696f6e040454017d040108104e6f6e6500000010536f6d6504007d0400000100007d040c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c50616c6c6574417574686f72697a65043044656c65676174696f6e416301810401042844656c65676174696f6e04008104013044656c65676174696f6e41630000000081040c2864656c65676174696f6e386163636573735f636f6e74726f6c3044656c65676174696f6e41630404540185040008013c7375626a6563745f6e6f64655f696430015444656c65676174696f6e4e6f646549644f663c543e0001286d61785f636865636b7320010c7533320000850408447370697269746e65745f72756e74696d651c52756e74696d650000000089040c2864656c65676174696f6e1870616c6c65741043616c6c04045400011c406372656174655f686965726172636879080130726f6f745f6e6f64655f696430015444656c65676174696f6e4e6f646549644f663c543e00012863747970655f686173683001384374797065486173684f663c543e00006401014372656174652061206e65772064656c65676174696f6e20726f6f74206173736f6369617465642077697468206120676976656e20435479706520686173682e00f8546865206e657720726f6f742077696c6c20616c6c6f772061206e65772074727573742068696572617263687920746f2062652063726561746564206279a0616464696e67206368696c6472656e2064656c65676174696f6e7320746f2074686520726f6f742e000d015468657265206d757374206265206e6f2064656c65676174696f6e2077697468207468652073616d652049442073746f726564206f6e20636861696e2c207768696c65fc7468657265206d75737420626520616c7265616479206120435479706520776974682074686520676976656e20686173682073746f72656420696e207468653443547970652070616c6c65742e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e000d015265717569726573207468652073656e646572206f6620746865207472616e73616374696f6e20746f206861766520612072657365727661626c652062616c616e6365886f66206174206c6561737420604465706f73697460206d616e7920746f6b656e732e0050456d6974732060526f6f7443726561746564602e002823203c7765696768743e305765696768743a204f283129a02d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c204354797065733c2d205772697465733a20526f6f74732c23203c2f7765696768743e386164645f64656c65676174696f6e14013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e000124706172656e745f696430015444656c65676174696f6e4e6f646549644f663c543e00012064656c656761746500014044656c656761746f7249644f663c543e00012c7065726d697373696f6e730d01012c5065726d697373696f6e7300014864656c65676174655f7369676e61747572658d04016844656c65676174655369676e6174757265547970654f663c543e000180744372656174652061206e65772064656c65676174696f6e206e6f64652e00f4546865206e65772064656c65676174696f6e206e6f646520726570726573656e74732061206e65772074727573742068696572617263687920746861740d01636f6e73696465727320746865206e6577206e6f64652061732069747320726f6f742e20546865206f776e6572206f662074686973206e6f6465206861732066756c6ce0636f6e74726f6c206f76657220616e79206f66206974732064697265637420616e6420696e6469726563742064657363656e64616e74732e00fc466f7220746865206372656174696f6e20746f20737563636565642c207468652064656c656761746565206d7573742070726f7669646520612076616c696411017369676e6174757265206f766572207468652028626c616b65323536292068617368206f6620746865206372656174696f6e206f7065726174696f6e2064657461696c731101776869636820696e636c7564652028696e206f72646572292064656c65676174696f6e2069642c20726f6f74206e6f64652069642c20706172656e742069642c20616e64707065726d697373696f6e73206f6620746865206e6577206e6f64652e00f45468657265206d757374206265206e6f2064656c65676174696f6e2077697468207468652073616d652069642073746f726564206f6e20636861696e2e0501467572746865726d6f72652c20746865207265666572656e63656420726f6f7420616e6420706172656e74206e6f646573206d75737420616c7265616479206265050170726573656e74206f6e20636861696e20616e6420636f6e7461696e207468652076616c6964207065726d697373696f6e7320616e64207265766f636174696f6e6c7374617475732028692e652e2c206e6f74207265766f6b6564292e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e000d015265717569726573207468652073656e646572206f6620746865207472616e73616374696f6e20746f206861766520612072657365727661626c652062616c616e6365886f66206174206c6561737420604465706f73697460206d616e7920746f6b656e732e0068456d697473206044656c65676174696f6e43726561746564602e002823203c7765696768743e305765696768743a204f283129b42d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2044656c65676174696f6e73542d205772697465733a2044656c65676174696f6e732c23203c2f7765696768743e447265766f6b655f64656c65676174696f6e0c013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001446d61785f706172656e745f636865636b7320010c75333200013c6d61785f7265766f636174696f6e7320010c753332000274f85265766f6b6520612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74206e6f64652920616e6420616c6c20697473246368696c6472656e2e00fc446f6573206e6f7420726566756e64207468652064656c65676174696f6e206261636b20746f20746865206465706f736974206f776e657220617320746865f06e6f6465206973207374696c6c2073746f726564206f6e20636861696e2e20526571756972657320746f206164646974696f6e616c6c792063616c6cb46072656d6f76655f64656c65676174696f6e6020746f20756e7265736572766520746865206465706f7369742e0009015265766f6b696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67090166726f6d2074686520676976656e206e6f6465206265696e67207265766f6b65642e204e657665727468656c6573732c207265766f636174696f6e20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f6465206973207265766f6b65642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e73696465726564207265766f6b65642e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e0078456d6974732043202a206044656c65676174696f6e5265766f6b6564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f6368696c6472656e602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e802d205772697465733a20526f6f74732c2043202a2044656c65676174696f6e732c23203c2f7765696768743e4472656d6f76655f64656c65676174696f6e08013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c7320010c753332000370f852656d6f766520612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74206e6f64652920616e6420616c6c20697473246368696c6472656e2e00f052657475726e73207468652064656c65676174696f6e206465706f73697420746f20746865206465706f736974206f776e657220666f722065616368a472656d6f7665642044656c65676174696f6e4e6f646520627920756e726573657276696e672069742e00090152656d6f76696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67fc66726f6d2074686520676976656e206e6f6465206265696e672072656d6f7665642e204e657665727468656c6573732c2072656d6f76616c20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f64652069732072656d6f7665642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e736964657265642072656d6f7665642e0098546865206469737061746368206f726967696e206d7573742062652073706c697420696e746f0d012a2061207375626d6974746572206f66207479706520604163636f756e744964602077686f20697320726573706f6e7369626c6520666f7220706179696e67207468655420207472616e73616374696f6e2066656520616e6409012a206120444944207375626a656374206f662074797065206044656c65676174696f6e456e746974794964602077686f20637265617465732c206f776e7320616e6470202063616e207265766f6b65207468652064656c65676174696f6e2e0078456d6974732043202a206044656c65676174696f6e52656d6f766564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f6368696c6472656e602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e902d205772697465733a20526f6f74732c2032202a2043202a2044656c65676174696f6e732c23203c2f7765696768743e3c7265636c61696d5f6465706f73697408013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c7320010c753332000460f45265636c61696d20746865206465706f73697420666f7220612064656c65676174696f6e206e6f64652028706f74656e7469616c6c79206120726f6f74b86e6f6465292c2072656d6f76696e6720746865206e6f646520616e6420616c6c20697473206368696c6472656e2e00f052657475726e73207468652064656c65676174696f6e206465706f73697420746f20746865206465706f736974206f776e657220666f722065616368a472656d6f7665642044656c65676174696f6e4e6f646520627920756e726573657276696e672069742e00090152656d6f76696e6720612064656c65676174696f6e206e6f646520726573756c747320696e2074686520747275737420686965726172636879207374617274696e67fc66726f6d2074686520676976656e206e6f6465206265696e672072656d6f7665642e204e657665727468656c6573732c2072656d6f76616c20737461727473090166726f6d20746865206c65617665206e6f64657320757077617264732c20736f20696620746865206f7065726174696f6e20656e6473207072656d61747572656c791101626563617573652069742072756e73206f7574206f66206761732c207468652064656c65676174696f6e20737461746520776f756c6420626520636f6e73697374656e7401016173206e6f206368696c6420776f756c64202273757276697665222069747320706172656e742e204173206120636f6e73657175656e63652c206966207468650d01676976656e206e6f64652069732072656d6f7665642c2074686520747275737420686965726172636879207769746820746865206e6f646520617320726f6f7420697364746f20626520636f6e736964657265642072656d6f7665642e000d01546865206469737061746368206f726967696e206d757374206265207369676e6564206279207468652064656c65676174696f6e206465706f736974206f776e65722e004c604465706f7369745265636c61696d6564602e002823203c7765696768743e01015765696768743a204f284329207768657265204320697320746865206e756d626572206f66206368696c6472656e206f66207468652064656c65676174696f6ea06e6f646520776869636820697320626f756e64656420627920606d61785f72656d6f76616c73602e01012d2052656164733a205b4f726967696e204163636f756e745d2c20526f6f74732c2043202a2044656c65676174696f6e732c2043202a204368696c6472656e2e902d205772697465733a20526f6f74732c2032202a2043202a2044656c65676174696f6e732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657204013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e00051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e000501546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f66207468652064656c65676174696f6e206e6f64652ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8d040c0c6469642c6469645f64657461696c73304469645369676e617475726500010c1c45643235353139040091040148656432353531393a3a5369676e61747572650000001c53723235353139040099040148737232353531393a3a5369676e617475726500010014456364736104009d04014065636473613a3a5369676e61747572650002000091040c1c73705f636f72651c65643235353139245369676e617475726500000400950401205b75383b2036345d0000950400000340000000080099040c1c73705f636f72651c73723235353139245369676e617475726500000400950401205b75383b2036345d00009d040c1c73705f636f7265146563647361245369676e617475726500000400a10401205b75383b2036355d0000a104000003410000000800a5040c0c6469641870616c6c65741043616c6c04045400013c1863726561746508011c64657461696c73a9040170426f783c4469644372656174696f6e44657461696c734f663c543e3e0001247369676e61747572658d0401304469645369676e617475726500007cec53746f72652061206e657720444944206f6e20636861696e2c20616674657220766572696679696e67207468617420746865206372656174696f6e05016f7065726174696f6e20686173206265656e207369676e656420627920746865204b494c54206163636f756e74206173736f63696174656420776974682074686501016964656e746966696572206f662074686520444944206265696e67206372656174656420616e6420746861742061204449442077697468207468652073616d6511016964656e74696669657220686173206e6f742070726576696f75736c792065786973746564206f6e2028616e64207468656e2064656c657465642066726f6d292074686518636861696e2e000d015468657265206d757374206265206e6f2044494420696e666f726d6174696f6e2073746f726564206f6e20636861696e20756e646572207468652073616d65204449442c6964656e7469666965722e00fc546865206e6577206b65797320616464656420776974682074686973206f7065726174696f6e206172652073746f72656420756e646572207468652044494405016964656e74696669657220616c6f6e6720776974682074686520626c6f636b206e756d62657220696e20776869636820746865206f7065726174696f6e207761732465786563757465642e000101546865206469737061746368206f726967696e2063616e20626520616e79204b494c54206163636f756e74207769746820656e6f7567682066756e647320746f0d0165786563757465207468652065787472696e73696320616e6420697420646f6573206e6f74206861766520746f206265207469656420696e20616e792077617920746fb4746865204b494c54206163636f756e74206964656e74696679696e672074686520444944207375626a6563742e004c456d697473206044696443726561746564602e002823203c7765696768743e0d012d20546865207472616e73616374696f6e277320636f6d706c6578697479206973206d61696e6c7920646570656e64656e74206f6e20746865206e756d626572206f66010120206e6577206b65792061677265656d656e74206b65797320616e6420746865206e756d626572206f66206e6577207365727669636520656e64706f696e7473702020696e636c7564656420696e20746865206f7065726174696f6e2e242d2d2d2d2d2d2d2d2df85765696768743a204f284b29202b204f284e29207768657265204b20697320746865206e756d626572206f66206e6577206b65792061677265656d656e7409016b65797320626f756e64656420627920604d61784e65774b657941677265656d656e744b657973602c207768696c65204e20697320746865206e756d626572206f66f46e6577207365727669636520656e64706f696e747320626f756e64656420627920604d61784e756d6265724f665365727669636573506572446964602eb02d2052656164733a205b4f726967696e204163636f756e745d2c204469642c20446964426c61636b6c697374fc2d205772697465733a20446964202877697468204b206e6577206b65792061677265656d656e74206b657973292c2053657276696365456e64706f696e7473cc20202877697468204e206e6577207365727669636520656e64706f696e7473292c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e587365745f61757468656e7469636174696f6e5f6b657904011c6e65775f6b6579e5040148446964566572696669636174696f6e4b65790001408855706461746520746865204449442061757468656e7469636174696f6e206b65792e00ec546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696620697420697309016e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f207468654c736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e487365745f64656c65676174696f6e5f6b657904011c6e65775f6b6579e5040148446964566572696669636174696f6e4b657900024094536574206f722075706461746520746865204449442064656c65676174696f6e206b65792e000d01496620616e206f6c64206b657920657869737465642c2069742069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696611016974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f5c74686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e5472656d6f76655f64656c65676174696f6e5f6b657900033c7852656d6f766520746865204449442064656c65676174696f6e206b65792e00d4546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b657973206966b06974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e4c7365745f6174746573746174696f6e5f6b657904011c6e65775f6b6579e5040148446964566572696669636174696f6e4b657900044098536574206f72207570646174652074686520444944206174746573746174696f6e206b65792e000d01496620616e206f6c64206b657920657869737465642c2069742069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b65797320696611016974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e20546865206e6577206b657920697320616464656420746f5c74686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e5872656d6f76655f6174746573746174696f6e5f6b657900053c7c52656d6f76652074686520444944206174746573746174696f6e206b65792e00d4546865206f6c64206b65792069732064656c657465642066726f6d2074686520736574206f66207075626c6963206b657973206966b06974206973206e6f74207573656420696e20616e79206f746865722070617274206f6620746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e546164645f6b65795f61677265656d656e745f6b657904011c6e65775f6b6579d5040140446964456e6372797074696f6e4b6579000638b841646420612073696e676c65206e6577206b65792061677265656d656e74206b657920746f20746865204449442e00bc546865206e6577206b657920697320616464656420746f2074686520736574206f66207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e6072656d6f76655f6b65795f61677265656d656e745f6b65790401186b65795f69643001284b657949644f663c543e000734050152656d6f7665206120444944206b65792061677265656d656e74206b65792066726f6d20626f74682069747320736574206f66206b65792061677265656d656e74906b65797320616e642061732077656c6c20617320697473207075626c6963206b6579732e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e506164645f736572766963655f656e64706f696e74040140736572766963655f656e64706f696e74b1040138446964456e64706f696e743c543e000830bc4164642061206e6577207365727669636520656e64706f696e7420756e6465722074686520676976656e204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f2831290d012d2052656164733a205b4f726967696e204163636f756e745d2c204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e74c82d205772697465733a204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e5c72656d6f76655f736572766963655f656e64706f696e74040128736572766963655f6964b504015053657276696365456e64706f696e7449643c543e000930d452656d6f76652074686520736572766963652077697468207468652070726f76696465642049442066726f6d20746865204449442e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696455706461746564602e002823203c7765696768743e305765696768743a204f283129f82d2052656164733a205b4f726967696e204163636f756e745d2c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e74c82d205772697465733a204469642c2053657276696365456e64706f696e74732c20446964456e64706f696e7473436f756e742c23203c2f7765696768743e1864656c65746504014c656e64706f696e74735f746f5f72656d6f766520010c753332000a600d0144656c6574652061204449442066726f6d2074686520636861696e20616e6420616c6c20696e666f726d6174696f6e206173736f63696174656420776974682069742c1101616674657220766572696679696e672074686174207468652064656c657465206f7065726174696f6e20686173206265656e207369676e65642062792074686520444944fc7375626a656374207573696e67207468652061757468656e7469636174696f6e206b65792063757272656e746c792073746f726564206f6e20636861696e2e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f7265207468657864656c657465206f7065726174696f6e206973206576616c75617465642e00f441667465722069742069732064656c657465642c2061204449442077697468207468652073616d65206964656e7469666965722063616e6e6f742062655872652d63726561746564206576657220616761696e2e00010141732074686520726573756c74206f66207468652064656c6574696f6e2c20616c6c20747261636573206f662074686520444944206172652072656d6f766564e866726f6d207468652073746f726167652c20776869636820726573756c747320696e2074686520696e76616c69646174696f6e206f6620616c6c9c6174746573746174696f6e73206973737565642062792074686520444944207375626a6563742e00e0546865206469737061746368206f726967696e206d757374206265206120444944206f726967696e2070726f78696564207669612074686570607375626d69745f6469645f63616c6c602065787472696e7369632e004c456d697473206044696444656c65746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964cc2d204b696c6c733a2044696420656e747279206173736f63696174656420746f2074686520444944206964656e7469666965722c23203c2f7765696768743e3c7265636c61696d5f6465706f73697408012c6469645f7375626a6563740001484469644964656e7469666965724f663c543e00014c656e64706f696e74735f746f5f72656d6f766520010c753332000b54f45265636c61696d2061206465706f73697420666f722061204449442e20546869732077696c6c2064656c657465207468652044494420616e6420616c6c0901696e666f726d6174696f6e206173736f63696174656420776974682069742c20616674657220766572696679696e672074686174207468652063616c6c657220697364746865206f776e6572206f6620746865206465706f7369742e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f7265207468657864656c657465206f7065726174696f6e206973206576616c75617465642e00f441667465722069742069732064656c657465642c2061204449442077697468207468652073616d65206964656e7469666965722063616e6e6f742062655872652d63726561746564206576657220616761696e2e00010141732074686520726573756c74206f66207468652064656c6574696f6e2c20616c6c20747261636573206f662074686520444944206172652072656d6f766564e866726f6d207468652073746f726167652c20776869636820726573756c747320696e2074686520696e76616c69646174696f6e206f6620616c6c9c6174746573746174696f6e73206973737565642062792074686520444944207375626a6563742e004c456d697473206044696444656c65746564602e002823203c7765696768743e305765696768743a204f283129782d2052656164733a205b4f726967696e204163636f756e745d2c20446964cc2d204b696c6c733a2044696420656e747279206173736f63696174656420746f2074686520444944206964656e7469666965722c23203c2f7765696768743e3c7375626d69745f6469645f63616c6c0801206469645f63616c6cf9040190426f783c446964417574686f72697a656443616c6c4f7065726174696f6e4f663c543e3e0001247369676e61747572658d0401304469645369676e6174757265000c8cec50726f7879206120646973706174636861626c652063616c6c206f6620616e6f746865722072756e74696d652065787472696e736963207468617458737570706f727473206120444944206f726967696e2e000501546865207265666572656e63656420444944206964656e746966696572206d7573742062652070726573656e74206f6e20636861696e206265666f726520746865606f7065726174696f6e20697320646973706174636865642e00fc412063616c6c207375626d6974746564207468726f75676820746869732065787472696e736963206d757374206265207369676e65642077697468207468650901726967687420444944206b65792c20646570656e64696e67206f6e207468652063616c6c2e205468697320696e666f726d6174696f6e2069732070726f766964656409016279207468652060446964417574686f72697a656443616c6c4f7065726174696f6e6020706172616d657465722c20776869636820737065636966696573207468650901444944207375626a65637420616374696e6720617320746865206f726967696e206f66207468652063616c6c2c2074686520444944277320747820636f756e7465720101286e6f6e6365292c2074686520646973706174636861626c6520746f2063616c6c20696e2063617365207369676e617475726520766572696669636174696f6ef073756363656564732c207468652074797065206f6620444944206b657920746f2075736520746f2076657269667920746865206f7065726174696f6efc7369676e61747572652c20616e642074686520626c6f636b206e756d62657220746865206f7065726174696f6e2077617320746172676574696e6720666f72a8696e636c7573696f6e2c207768656e20697420776173206372656174656420616e64207369676e65642e00fc496e206361736520746865207369676e617475726520697320696e636f72726563742c20746865206e6f6e6365206973206e6f742076616c69642c20746865fc7265717569726564206b6579206973206e6f742070726573656e7420666f722074686520737065636966696564204449442c206f722074686520626c6f636bfc73706563696669656420697320746f6f206f6c642074686520766572696669636174696f6e206661696c7320616e64207468652063616c6c206973206e6f74f4646973706174636865642e204f74686572776973652c207468652063616c6c2069732070726f7065726c79206469737061746368656420776974682061b8604469644f726967696e60206f726967696e20696e6469636174696e672074686520444944207375626a6563742e00110141207375636365737366756c206469737061746368206f7065726174696f6e20726573756c747320696e2074686520747820636f756e746572206173736f6369617465640501776974682074686520676976656e2044494420746f20626520696e6372656d656e7465642c20746f206d69746967617465207265706c61792061747461636b732e000101546865206469737061746368206f726967696e2063616e20626520616e79204b494c54206163636f756e74207769746820656e6f7567682066756e647320746f0d0165786563757465207468652065787472696e73696320616e6420697420646f6573206e6f74206861766520746f206265207469656420696e20616e792077617920746fb4746865204b494c54206163636f756e74206964656e74696679696e672074686520444944207375626a6563742e0068456d697473206044696443616c6c44697370617463686564602e002823203c7765696768743eb05765696768743a204f283129202b20776569676874206f662074686520646973706174636865642063616c6c782d2052656164733a205b4f726967696e204163636f756e745d2c20446964342d205772697465733a204469642c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e6572000d1c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00b8546865207375626a656374206f66207468652063616c6c206d7573742062652074686520646964206f776e65722ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404010c6469640001484469644964656e7469666965724f663c543e000e0cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632ea9040c0c6469642c6469645f64657461696c73484469644372656174696f6e44657461696c7310344469644964656e7469666965720100244163636f756e7449640100584d61784e65774b657941677265656d656e744b65797301ad042c446964456e64706f696e7401b1040018010c6469640001344469644964656e7469666965720001247375626d69747465720001244163636f756e7449640001586e65775f6b65795f61677265656d656e745f6b657973d10401c04469644e65774b657941677265656d656e744b65795365743c4d61784e65774b657941677265656d656e744b6579733e00014c6e65775f6174746573746174696f6e5f6b6579e10401684f7074696f6e3c446964566572696669636174696f6e4b65793e0001486e65775f64656c65676174696f6e5f6b6579e10401684f7074696f6e3c446964566572696669636174696f6e4b65793e00014c6e65775f736572766963655f64657461696c73f50401405665633c446964456e64706f696e743e0000ad04103872756e74696d655f636f6d6d6f6e24636f6e7374616e74730c646964584d61784e65774b657941677265656d656e744b65797300000000b1040c0c64696444736572766963655f656e64706f696e74732c446964456e64706f696e7404045400000c01086964b504015053657276696365456e64706f696e7449643c543e000134736572766963655f7479706573b904017453657276696365456e64706f696e7454797065456e74726965733c543e00011075726c73c504017053657276696365456e64706f696e7455726c456e74726965733c543e0000b5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000b9040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401bd04045300000400c10401185665633c543e0000bd040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000c104000002bd0400c5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401c904045300000400cd0401185665633c543e0000c9040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000cd04000002c90400d1040c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401d504045300000400d904012c42547265655365743c543e0000d5040c0c6469642c6469645f64657461696c7340446964456e6372797074696f6e4b65790001041858323535313904000401205b75383b2033325d00000000d9040420425472656553657404045401d504000400dd04000000dd04000002d50400e10404184f7074696f6e04045401e5040108104e6f6e6500000010536f6d650400e5040000010000e5040c0c6469642c6469645f64657461696c7348446964566572696669636174696f6e4b657900010c1c456432353531390400e904013c656432353531393a3a5075626c69630000001c5372323535313904006d03013c737232353531393a3a5075626c69630001001445636473610400ed04013465636473613a3a5075626c696300020000e9040c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d0000ed040c1c73705f636f7265146563647361185075626c696300000400f10401205b75383b2033335d0000f104000003210000000800f504000002b10400f9040c0c6469642c6469645f64657461696c7368446964417574686f72697a656443616c6c4f7065726174696f6e14344469644964656e74696669657201002c44696443616c6c61626c6501f5032c426c6f636b4e756d6265720110244163636f756e7449640100245478436f756e74657201100014010c6469640001344469644964656e74696669657200012874785f636f756e7465721001245478436f756e74657200011063616c6cf503012c44696443616c6c61626c65000130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720001247375626d69747465720001244163636f756e7449640000fd040c4470616c6c65745f6469645f6c6f6f6b75701870616c6c65741043616c6c04045400011c446173736f63696174655f6163636f756e7408010c7265710105015c4173736f63696174654163636f756e745265717565737400012865787069726174696f6e1001a03c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a426c6f636b4e756d62657200004405014173736f63696174652074686520676976656e206163636f756e7420746f2074686520444944207468617420617574686f72697a656420746869732063616c6c2e000501546865206163636f756e742068617320746f207369676e207468652044494420616e64206120626c6f636b6e756d62657220616674657220776869636820746865e07369676e6174757265206578706972657320696e206f7264657220746f20617574686f72697a6520746865206173736f63696174696f6e2e001101546865207369676e61747572652077696c6c20626520636865636b656420616761696e737420746865207363616c6520656e636f646564207475706c65206f66207468650d016d6574686f64207370656369666963206964206f662074686520646964206964656e74696669657220616e642074686520626c6f636b206e756d626572206166746572bc776869636820746865207369676e61747572652073686f756c6420626520726567617264656420696e76616c69642e001101456d69747320604173736f63696174696f6e45737461626c69736865646020616e642c206f7074696f6e616c6c792c20604173736f63696174696f6e52656d6f76656460d069662074686572652077617320612070726576696f7573206173736f63696174696f6e20666f7220746865206163636f756e742e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e406173736f63696174655f73656e64657200012c01014173736f6369617465207468652073656e646572206f66207468652063616c6c20746f2074686520444944207468617420617574686f72697a656420746869731463616c6c2e001101456d69747320604173736f63696174696f6e45737461626c69736865646020616e642c206f7074696f6e616c6c792c20604173736f63696174696f6e52656d6f76656460d069662074686572652077617320612070726576696f7573206173736f63696174696f6e20666f7220746865206163636f756e742e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e6472656d6f76655f73656e6465725f6173736f63696174696f6e000228fc52656d6f766520746865206173736f63696174696f6e206f66207468652073656e646572206163636f756e742e20546869732063616c6c20646f65736e27740d01726571756972652074686520617574686f72697a6174696f6e206f6620746865204449442c206275742072657175697265732061207369676e6564206f726967696e2e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e6872656d6f76655f6163636f756e745f6173736f63696174696f6e04011c6163636f756e74190101444c696e6b61626c654163636f756e74496400032c110152656d6f766520746865206173736f63696174696f6e206f66207468652070726f7669646564206163636f756e742049442e20546869732063616c6c20646f65736e27740d01726571756972652074686520617574686f72697a6174696f6e206f6620746865206163636f756e742049442c2062757420746865206173736f63696174656420444944c46e6565647320746f206d617463682074686520444944207468617420617574686f72697a656420746869732063616c6c2e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129f42d2052656164733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e7473202b20444944204f726967696e20436865636bac2d205772697465733a20436f6e6e656374656444696473202b20436f6e6e65637465644163636f756e74732c23203c2f7765696768743e3c7265636c61696d5f6465706f73697404011c6163636f756e74190101444c696e6b61626c654163636f756e74496400042c090152656d6f766520746865206173736f63696174696f6e206f66207468652070726f7669646564206163636f756e742e20546869732063616c6c2063616e206f6e6c79f862652063616c6c65642066726f6d20746865206465706f736974206f776e65722e20546865207265736572766564206465706f7369742077696c6c2062651866726565642e006c456d69747320604173736f63696174696f6e52656d6f766564602e002823203c7765696768743e305765696768743a204f283129582d2052656164733a20436f6e6e6563746564446964735c2d205772697465733a20436f6e6e6563746564446964732c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657204011c6163636f756e74190101444c696e6b61626c654163636f756e74496400051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00d8546865207375626a656374206f66207468652063616c6c206d757374206265206c696e6b656420746f20746865206163636f756e742ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404011c6163636f756e74190101444c696e6b61626c654163636f756e74496400060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e01050c4470616c6c65745f6469645f6c6f6f6b7570646173736f63696174655f6163636f756e745f726571756573745c4173736f63696174654163636f756e745265717565737400010820506f6c6b61646f74080000012c4163636f756e74496433320000050501384d756c74695369676e617475726500000020457468657265756d08001d01012c4163636f756e7449643230000009050144457468657265756d5369676e6174757265000100000505082873705f72756e74696d65384d756c74695369676e617475726500010c1c45643235353139040091040148656432353531393a3a5369676e61747572650000001c53723235353139040099040148737232353531393a3a5369676e617475726500010014456364736104009d04014065636473613a3a5369676e61747572650002000009050c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e7444457468657265756d5369676e6174757265000004009d04014065636473613a3a5369676e617475726500000d050c4470616c6c65745f776562335f6e616d65731870616c6c65741043616c6c04045400011c14636c61696d0401106e616d652d010140576562334e616d65496e7075743c543e00003ce841737369676e2074686520737065636966696564206e616d6520746f20746865206f776e65722061732073706563696669656420696e207468651c6f726967696e2e000d01546865206e616d65206d757374206e6f74206861766520616c7265616479206265656e20636c61696d656420627920736f6d656f6e6520656c736520616e6420746865a06f776e6572206d757374206e6f7420616c7265616479206f776e20616e6f74686572206e616d652e00dc456d6974732060576562334e616d65436c61696d65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f28312909012d2052656164733a204e616d65732c204f776e65722c2042616e6e65642073746f7261676520656e7472696573202b20617661696c61626c652063757272656e6379582020636865636b202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f73697420726573657276652c23203c2f7765696768743e4072656c656173655f62795f6f776e6572000130a452656c65617365207468652070726f7669646564206e616d652066726f6d20697473206f776e65722e00cc546865206f726967696e206d75737420626520746865206f776e6572206f662074686520737065636966696564206e616d652e00e0456d6974732060576562334e616d6552656c65617365646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129ac2d2052656164733a204e616d65732073746f7261676520656e747279202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f7369742072656c656173652c23203c2f7765696768743e3c7265636c61696d5f6465706f7369740401106e616d652d010140576562334e616d65496e7075743c543e000230a452656c65617365207468652070726f7669646564206e616d652066726f6d20697473206f776e65722e000101546865206f726967696e206d75737420626520746865206163636f756e742074686174207061696420666f7220746865206e616d652773206465706f7369742e00e0456d6974732060576562334e616d6552656c65617365646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129ac2d2052656164733a204f776e65722073746f7261676520656e747279202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722073746f7261676520656e7472696573202b2063757272656e6379206465706f7369742072656c656173652c23203c2f7765696768743e0c62616e0401106e616d652d010140576562334e616d65496e7075743c543e0003402c42616e2061206e616d652e00f4412062616e6e6564206e616d652063616e6e6f7420626520636c61696d656420627920616e796f6e652e20546865206e616d652773206465706f7369748869732072657475726e656420746f20746865206f726967696e616c2070617965722e0088546865206f726967696e206d757374206265207468652062616e206f726967696e2e00d8456d6974732060576562334e616d6542616e6e65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129f02d2052656164733a2042616e6e65642c204f776e65722c204e616d65732073746f7261676520656e7472696573202b206f726967696e20636865636b05012d205772697465733a204e616d65732c204f776e65722c2042616e6e65642073746f7261676520656e7472696573202b2063757272656e6379206465706f73697424202072656c656173652c23203c2f7765696768743e14756e62616e0401106e616d652d010140576562334e616d65496e7075743c543e00043834556e62616e2061206e616d652e00704d616b652061206e616d6520636c61696d61626c6520616761696e2e0088546865206f726967696e206d757374206265207468652062616e206f726967696e2e00e0456d6974732060576562334e616d65556e62616e6e65646020696620746865206f7065726174696f6e2069732063617272696564206f7574347375636365737366756c6c792e002823203c7765696768743e305765696768743a204f283129b02d2052656164733a2042616e6e65642073746f7261676520656e747279202b206f726967696e20636865636bb82d205772697465733a2042616e6e65642073746f7261676520656e747279206465706f7369742072656c656173652c23203c2f7765696768743e506368616e67655f6465706f7369745f6f776e657200051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00e8546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f662074686520776562336e616d652ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f7369740401286e616d655f696e7075742d010140576562334e616d65496e7075743c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e11050c487075626c69635f63726564656e7469616c731870616c6c65741043616c6c04045400011c0c61646404012863726564656e7469616c15050164426f783c496e70757443726564656e7469616c4f663c543e3e000018a852656769737465722061206e6577207075626c69632063726564656e7469616c206f6e20636861696e2e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c2077697468207468652073616d65206964656e74696669657220616c72656164798465786973747320666f722074686520737065636966696564207375626a6563742e0064456d697473206043726564656e7469616c53746f726564602e187265766f6b6508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e790401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000120705265766f6b65732061207075626c69632063726564656e7469616c2e001101496620612063726564656e7469616c2077617320616c7265616479207265766f6b65642c20746869732066756e6374696f6e20646f6573206e6f74206661696c206275746473696d706c7920726573756c747320696e2061206e6f6f702e000101546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f207265766f6b65207468652063726564656e7469616c2e0068456d697473206043726564656e7469616c5265766f6b6564602e20756e7265766f6b6508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e790401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e00022478556e7265766f6b65732061207075626c69632063726564656e7469616c2e000101496620612063726564656e7469616c20776173206e6f74207265766f6b65642c20746869732066756e6374696f6e20646f6573206e6f74206661696c206275746473696d706c7920726573756c747320696e2061206e6f6f702e00d8546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f20756e7265766f6b65207468652c63726564656e7469616c2e0070456d697473206043726564656e7469616c556e7265766f6b6564602e1872656d6f766508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6e790401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e000344fc52656d6f7665732074686520696e666f726d6174696f6e207065727461696e696e672061207075626c69632063726564656e7469616c2066726f6d2074686518636861696e2e0009015468652072656d6f76616c206f66207468652063726564656e7469616c20646f6573206e6f742064656c65746520697420656e746972656c792066726f6d207468650501626c6f636b636861696e20686973746f72792c20627574206f6e6c7920697473206c696e6b202a66726f6d2a2074686520626c6f636b636861696e2073746174659c2a746f2a2074686520626c6f636b636861696e20686973746f72792069732072656d6f7665642e00cc436c69656e74732070617273696e67207075626c69632063726564656e7469616c732073686f756c6420696e746572707265740101746865206c61636b206f6620737563682061206c696e6b2061732074686520666163742074686174207468652063726564656e7469616c20686173206265656eb872656d6f7665642062792069747320617474657374657220736f6d652074696d6520696e2074686520706173742e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c20616c72656164792065786973747320666f722074686520737065636966696564207375626a6563742e000101546865206469737061746368206f726967696e206d75737420626520617574686f72697a656420746f2072656d6f7665207468652063726564656e7469616c2e0068456d697473206043726564656e7469616c52656d6f766564602e3c7265636c61696d5f6465706f73697404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000448fc52656d6f7665732074686520696e666f726d6174696f6e207065727461696e696e672061207075626c69632063726564656e7469616c2066726f6d20746865ac636861696e20616e642072657475726e7320746865206465706f73697420746f206974732070617965722e0009015468652072656d6f76616c206f66207468652063726564656e7469616c20646f6573206e6f742064656c65746520697420656e746972656c792066726f6d207468650501626c6f636b636861696e20686973746f72792c20627574206f6e6c7920697473206c696e6b202a66726f6d2a2074686520626c6f636b636861696e2073746174659c2a746f2a2074686520626c6f636b636861696e20686973746f72792069732072656d6f7665642e00cc436c69656e74732070617273696e67207075626c69632063726564656e7469616c732073686f756c6420696e746572707265740101746865206c61636b206f6620737563682061206c696e6b2061732074686520666163742074686174207468652063726564656e7469616c20686173206265656eb872656d6f7665642062792069747320617474657374657220736f6d652074696d6520696e2074686520706173742e001101546869732066756e6374696f6e206661696c7320696620612063726564656e7469616c20616c72656164792065786973747320666f722074686520737065636966696564207375626a6563742e000d01546865206469737061746368206f726967696e206d75737420626520746865206f776e6572206f6620746865206465706f7369742c2068656e6365206e6f74207468655863726564656e7469616c27732061747465737465722e0068456d697473206043726564656e7469616c52656d6f766564602e506368616e67655f6465706f7369745f6f776e657204013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e00051c684368616e67657320746865206465706f736974206f776e65722e0005015468652062616c616e63652074686174206973207265736572766564206279207468652063757272656e74206465706f736974206f776e65722077696c6c206265f4667265656420616e642062616c616e6365206f6620746865206e6577206465706f736974206f776e65722077696c6c206765742072657365727665642e00f0546865207375626a656374206f66207468652063616c6c206d75737420626520746865206f776e6572206f66207468652063726564656e7469616c2ed45468652073656e646572206f66207468652063616c6c2077696c6c20626520746865206e6577206465706f736974206f776e65722e387570646174655f6465706f73697404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e00060cdc5570646174657320746865206465706f73697420616d6f756e7420746f207468652063757272656e74206465706f73697420726174652e00945468652073656e646572206d75737420626520746865206465706f736974206f776e65722e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e15050c487075626c69635f63726564656e7469616c732c63726564656e7469616c732843726564656e7469616c10244374797065486173680130445375626a6563744964656e74696669657201190518436c61696d73011d0534416363657373436f6e74726f6c017d040010012863747970655f6861736830012443747970654861736800011c7375626a656374190501445375626a6563744964656e746966696572000118636c61696d731d050118436c61696d73000134617574686f72697a6174696f6e790401544f7074696f6e3c416363657373436f6e74726f6c3e000019050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00001d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000021050c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f64617461040110646174612505015450617261636861696e496e686572656e744461746100002480536574207468652063757272656e742076616c69646174696f6e20646174612e004101546869732073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e887068617365206966207468652063616c6c20776173206e6f7420696e766f6b65642e00d0546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e7460002101417320612073696465206566666563742c20746869732066756e6374696f6e207570677261646573207468652063757272656e742076616c69646174696f6e2066756e6374696f6e8469662074686520617070726f7072696174652074696d652068617320636f6d652e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653401345570776172644d65737361676500010044617574686f72697a655f75706772616465080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6eac0110626f6f6c0002206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015468652060636865636b5f76657273696f6e6020706172616d657465722073657473206120626f6f6c65616e20666c616720666f722077686574686572206f72206e6f74207468652072756e74696d6527732073706563610176657273696f6e20616e64206e616d652073686f756c64206265207665726966696564206f6e20757067726164652e2053696e63652074686520617574686f72697a6174696f6e206f6e6c7920686173206120686173682cb069742063616e6e6f742061637475616c6c7920706572666f726d2074686520766572696669636174696f6e2e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e60656e6163745f617574686f72697a65645f75706772616465040110636f646534011c5665633c75383e000324550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005d014e6f7465207468617420746869732066756e6374696f6e2077696c6c206e6f74206170706c7920746865206e65772060636f6465602c20627574206f6e6c7920617474656d707420746f207363686564756c652074686574757067726164652077697468207468652052656c617920436861696e2e0060416c6c206f726967696e732061726520616c6c6f7765642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e2505089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f646174612905015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f73746174653105015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d657373616765733905016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573410501a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e000029050c4c706f6c6b61646f745f7072696d6974697665730876345c50657273697374656456616c69646174696f6e446174610804480130044e01200010012c706172656e745f686561642d050120486561644461746100014c72656c61795f706172656e745f6e756d6265722001044e00016472656c61795f706172656e745f73746f726167655f726f6f74300104480001306d61785f706f765f73697a6520010c75333200002d050c48706f6c6b61646f745f70617261636861696e287072696d6974697665732048656164446174610000040034011c5665633c75383e000031050c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f6465733505014442547265655365743c5665633c75383e3e00003505042042547265655365740404540134000400ad0200000039050000023d05003d050860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d62657201200008011c73656e745f617420012c426c6f636b4e756d62657200010c6d736734013c446f776e776172644d65737361676500004105042042547265654d617008044b01ad0104560145050004004d05000000450500000249050049050860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d62657201200008011c73656e745f617420012c426c6f636b4e756d6265720001106461746134015073705f7374643a3a7665633a3a5665633c75383e00004d05000002510500510500000408ad0145050055050c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c04045400012448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d697428011857656967687400003484536572766963657320612073696e676c65206f7665727765696768742058434d2e00c02d20606f726967696e603a204d75737420706173732060457865637574654f7665727765696768744f726967696e602ed42d2060696e646578603a2054686520696e646578206f6620746865206f7665727765696768742058434d20746f20736572766963650d012d20607765696768745f6c696d6974603a2054686520616d6f756e74206f662077656967687420746861742058434d20657865637574696f6e206d61792074616b652e001c4572726f72733a5d012d20604261644f766572776569676874496e646578603a2058434d20756e6465722060696e64657860206973206e6f7420666f756e6420696e2074686520604f766572776569676874602073746f72616765206d61702e45012d206042616458636d603a2058434d20756e6465722060696e646578602063616e6e6f742062652070726f7065726c79206465636f64656420696e746f20612076616c69642058434d20666f726d61742e09012d20605765696768744f7665724c696d6974603a2058434d20657865637574696f6e206d617920757365206772656174657220607765696768745f6c696d6974602e001c4576656e74733a8c2d20604f7665727765696768745365727669636564603a204f6e20737563636573732e5473757370656e645f78636d5f657865637574696f6e00010c490153757370656e647320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652c207265676172646c657373206f66207468652073656e6465722773206f726967696e2e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e50726573756d655f78636d5f657865637574696f6e000214b8526573756d657320616c6c2058434d20657865637574696f6e7320666f72207468652058434d502071756575652e003d014e6f7465207468617420746869732066756e6374696f6e20646f65736e2774206368616e67652074686520737461747573206f662074686520696e2f6f757420626f756e64206368616e6e656c732e00a42d20606f726967696e603a204d75737420706173732060436f6e74726f6c6c65724f726967696e602e607570646174655f73757370656e645f7468726573686f6c6404010c6e657720010c75333200031499014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e2074686520717565756520666f7220746865206f74686572207369646520746f20626520746f6c6420746f5873757370656e642074686569722073656e64696e672e00742d20606f726967696e603a204d75737420706173732060526f6f74602ee82d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e73757370656e645f76616c756560547570646174655f64726f705f7468726573686f6c6404010c6e657720010c75333200041495014f76657277726974657320746865206e756d626572206f66207061676573206f66206d65737361676573207768696368206d75737420626520696e207468652071756575652061667465722077686963682077652064726f7020616e792066757274686572686d657373616765732066726f6d20746865206368616e6e656c2e00742d20606f726967696e603a204d75737420706173732060526f6f74602eec2d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e64726f705f7468726573686f6c64605c7570646174655f726573756d655f7468726573686f6c6404010c6e657720010c75333200051491014f76657277726974657320746865206e756d626572206f66207061676573206f66206d6573736167657320776869636820746865207175657565206d757374206265207265647563656420746f206265666f7265206974207369676e616c732074686174ec6d6573736167652073656e64696e67206d6179207265636f6d6d656e636520616674657220697420686173206265656e2073757370656e6465642e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e726573756d655f7468726573686f6c64605c7570646174655f7468726573686f6c645f77656967687404010c6e657728011857656967687400061049014f7665727772697465732074686520616d6f756e74206f662072656d61696e696e672077656967687420756e6465722077686963682077652073746f702070726f63657373696e67206d657373616765732e00742d20606f726967696e603a204d75737420706173732060526f6f74602ef42d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7468726573686f6c645f77656967687460707570646174655f7765696768745f72657374726963745f646563617904010c6e657728011857656967687400071445014f7665727772697465732074686520737065656420746f2077686963682074686520617661696c61626c652077656967687420617070726f616368657320746865206d6178696d756d207765696768742ea50141206c6f776572206e756d62657220726573756c747320696e2061206661737465722070726f6772657373696f6e2e20412076616c7565206f662031206d616b65732074686520656e746972652077656967687420617661696c61626c6520696e697469616c6c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e0d012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e7765696768745f72657374726963745f6465636179602e847570646174655f78636d705f6d61785f696e646976696475616c5f77656967687404010c6e657728011857656967687400081429014f766572777269746520746865206d6178696d756d20616d6f756e74206f662077656967687420616e7920696e646976696475616c206d657373616765206d617920636f6e73756d652e71014d657373616765732061626f766520746869732077656967687420676f20696e746f20746865206f76657277656967687420717565756520616e64206d6179206f6e6c79206265207365727669636564206578706c696369746c792e00742d20606f726967696e603a204d75737420706173732060526f6f74602e21012d20606e6577603a20446573697265642076616c756520666f7220605175657565436f6e666967446174612e78636d705f6d61785f696e646976696475616c5f776569676874602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e59050c2870616c6c65745f78636d1870616c6c65741043616c6c04045400012c1073656e64080110646573748102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011c6d6573736167655d050154426f783c56657273696f6e656458636d3c28293e3e0000003c74656c65706f72745f617373657473100110646573748102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172798102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747349020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c75333200013c110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e5c726573657276655f7472616e736665725f617373657473100110646573748102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172798102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747349020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c7533320002404d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602e2054686520776569676874206c696d697420666f722066656573206973206e6f742070726f766964656420616e64207468757320697320756e6c696d697465642cb47769746820616c6c20666565732074616b656e206173206e65656465642066726f6d207468652061737365742e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e1c6578656375746508011c6d6573736167658d0501c0426f783c56657273696f6e656458636d3c3c5420617320537973436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f77656967687428011857656967687400032cd04578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e004d01416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79287061727469616c6c792e006d014e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e2074686559016d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f20657865637574696f6e54617474656d70742077696c6c206265206d6164652e006d014e4f54453a2041207375636365737366756c2072657475726e20746f207468697320646f6573202a6e6f742a20696d706c7920746861742074686520606d73676020776173206578656375746564207375636365737366756c6c79cc746f20636f6d706c6574696f6e3b206f6e6c792074686174202a736f6d652a206f66206974207761732065786563757465642e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6eb9010148426f783c4d756c74694c6f636174696f6e3e00012c78636d5f76657273696f6e20012858636d56657273696f6e00041849014578746f6c6c2074686174206120706172746963756c61722064657374696e6174696f6e2063616e20626520636f6d6d756e6963617465642077697468207468726f756768206120706172746963756c61723c76657273696f6e206f662058434d2e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed82d20606c6f636174696f6e603a205468652064657374696e6174696f6e2074686174206973206265696e67206465736372696265642e11012d206078636d5f76657273696f6e603a20546865206c61746573742076657273696f6e206f662058434d207468617420606c6f636174696f6e6020737570706f7274732e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6e010401484f7074696f6e3c58636d56657273696f6e3e0005145901536574206120736166652058434d2076657273696f6e20287468652076657273696f6e20746861742058434d2073686f756c6420626520656e636f646564207769746820696620746865206d6f737420726563656e74b476657273696f6e20612064657374696e6174696f6e2063616e2061636365707420697320756e6b6e6f776e292e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e39012d20606d617962655f78636d5f76657273696f6e603a205468652064656661756c742058434d20656e636f64696e672076657273696f6e2c206f7220604e6f6e656020746f2064697361626c652e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e8102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000610390141736b2061206c6f636174696f6e20746f206e6f7469667920757320726567617264696e672074686569722058434d2076657273696f6e20616e6420616e79206368616e67657320746f2069742e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e59012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f2077686963682077652073686f756c642073756273637269626520666f722058434d2076657273696f6e206e6f74696669636174696f6e732e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6e8102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e0007184901526571756972652074686174206120706172746963756c61722064657374696e6174696f6e2073686f756c64206e6f206c6f6e676572206e6f7469667920757320726567617264696e6720616e792058434d4076657273696f6e206368616e6765732e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2e3d012d20606c6f636174696f6e603a20546865206c6f636174696f6e20746f207768696368207765206172652063757272656e746c79207375627363726962656420666f722058434d2076657273696f6ea820206e6f74696669636174696f6e73207768696368207765206e6f206c6f6e676572206465736972652e7c6c696d697465645f726573657276655f7472616e736665725f617373657473140110646573748102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172798102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747349020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c7533320001307765696768745f6c696d69744502012c5765696768744c696d69740008484d015472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e94636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652e85012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686538202060646573746020736964652e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e5c6c696d697465645f74656c65706f72745f617373657473140110646573748102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e65666963696172798102016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747349020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c7533320001307765696768745f6c696d69744502012c5765696768744c696d6974000944110154656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e005101466565207061796d656e74206f6e207468652064657374696e6174696f6e2073696465206973206d6164652066726f6d2074686520617373657420696e2074686520606173736574736020766563746f72206f666101696e64657820606665655f61737365745f6974656d602c20757020746f20656e6f75676820746f2070617920666f7220607765696768745f6c696d697460206f66207765696768742e204966206d6f72652077656967687459016973206e6565646564207468616e20607765696768745f6c696d6974602c207468656e20746865206f7065726174696f6e2077696c6c206661696c20616e6420746865206173736574732073656e64206d6179206265206174207269736b2e0029012d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e8d012d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e645901202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e89012d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265642020616e20604163636f756e7449643332602076616c75652ead012d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546865206669727374206974656d2073686f756c64206265207468652063757272656e6379207573656420746f20746f207061792074686520666565206f6e2074686580202060646573746020736964652e204d6179206e6f7420626520656d7074792e4d012d20606665655f61737365745f6974656d603a2054686520696e64657820696e746f206061737365747360206f6620746865206974656d2077686963682073686f756c64206265207573656420746f207061791c2020666565732e45012d20607765696768745f6c696d6974603a205468652072656d6f74652d7369646520776569676874206c696d69742c20696620616e792c20666f72207468652058434d206665652070757263686173652e40666f7263655f73757370656e73696f6e04012473757370656e646564ac0110626f6f6c000a10f4536574206f7220756e7365742074686520676c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e00dc2d20606f726967696e603a204d75737420626520616e206f726967696e207370656369666965642062792041646d696e4f726967696e2ed02d206073757370656e646564603a2060747275656020746f2073757370656e642c206066616c73656020746f20726573756d652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e5d05080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204006105015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400dd01015076333a3a58636d3c52756e74696d6543616c6c3e0003000061050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400650501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000650500000269050069050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404004d02012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404004d02012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404004d02012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e73656d050120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574734d02012c4d756c746941737365747300012c62656e65666963696172795d0201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574734d02012c4d756c7469417373657473000110646573745d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f747970652d0201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c31020168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c501010c7533320001406d61785f6d6573736167655f73697a65c501010c7533320001306d61785f6361706163697479c501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c501010c75333200011873656e646572c501010c753332000124726563697069656e74c501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040061020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c51756572794964000110646573745d0201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c01186173736574737d0501404d756c7469417373657446696c7465720001286d61785f617373657473c501010c75333200012c62656e65666963696172795d0201344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365741001186173736574737d0501404d756c7469417373657446696c7465720001286d61785f617373657473c501010c753332000110646573745d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e000e003445786368616e67654173736574080110676976657d0501404d756c7469417373657446696c74657200011c726563656976654d02012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c01186173736574737d0501404d756c7469417373657446696c74657200011c726573657276655d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574737d0501404d756c7469417373657446696c746572000110646573745d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c51756572794964000110646573745d0201344d756c74694c6f636174696f6e0001186173736574737d0501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573550201284d756c746941737365740001307765696768745f6c696d69748905012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204006105014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804006105014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574734d02012c4d756c74694173736574730001187469636b65745d0201344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b00006d050c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304004d02012c4d756c74694173736574730001003c457865637574696f6e526573756c740400710501504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040020013873757065723a3a56657273696f6e00030000710504184f7074696f6e0404540175050108104e6f6e6500000010536f6d65040075050000010000750500000408207905007905100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404001001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c65001900007d05100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504004d02012c4d756c74694173736574730000001057696c6404008105013857696c644d756c74694173736574000100008105100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869645902011c4173736574496400010c66756e8505013c57696c6446756e676962696c697479000100008505100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c650001000089050c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d6974656404002c010c753634000100008d05080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204009105015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400a105015076333a3a58636d3c52756e74696d6543616c6c3e0003000091050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400950501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000950500000299050099050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404004d02012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404004d02012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404004d02012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e73656d050120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574734d02012c4d756c746941737365747300012c62656e65666963696172795d0201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574734d02012c4d756c7469417373657473000110646573745d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f747970652d0201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c9d050168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c501010c7533320001406d61785f6d6573736167655f73697a65c501010c7533320001306d61785f6361706163697479c501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c501010c75333200011873656e646572c501010c753332000124726563697069656e74c501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040061020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c51756572794964000110646573745d0201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c01186173736574737d0501404d756c7469417373657446696c7465720001286d61785f617373657473c501010c75333200012c62656e65666963696172795d0201344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365741001186173736574737d0501404d756c7469417373657446696c7465720001286d61785f617373657473c501010c753332000110646573745d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e000e003445786368616e67654173736574080110676976657d0501404d756c7469417373657446696c74657200011c726563656976654d02012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c01186173736574737d0501404d756c7469417373657446696c74657200011c726573657276655d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e00100040496e69746961746554656c65706f72740c01186173736574737d0501404d756c7469417373657446696c746572000110646573745d0201344d756c74694c6f636174696f6e00010c78636d6105011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c51756572794964000110646573745d0201344d756c74694c6f636174696f6e0001186173736574737d0501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e08011066656573550201284d756c746941737365740001307765696768745f6c696d69748905012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204009105014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804009105014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574734d02012c4d756c74694173736574730001187469636b65745d0201344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b00009d050c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656434011c5665633c75383e0000a1050c0c78636d0876330c58636d041043616c6c00000400a50501585665633c496e737472756374696f6e3c43616c6c3e3e0000a505000002a90500a9050c0c78636d0876332c496e737472756374696f6e041043616c6c0001c034576974686472617741737365740400e901012c4d756c7469417373657473000000545265736572766541737365744465706f73697465640400e901012c4d756c7469417373657473000100585265636569766554656c65706f7274656441737365740400e901012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e736505020120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572290201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e736665724173736574080118617373657473e901012c4d756c746941737365747300012c62656e6566696369617279b90101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c0118617373657473e901012c4d756c746941737365747300011064657374b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e642d0201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c9d05014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572c501010c7533320001406d61785f6d6573736167655f73697a65c501010c7533320001306d61785f6361706163697479c501010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74c501010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72c501010c75333200011873656e646572c501010c753332000124726563697069656e74c501010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400bd010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720400350201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473390201404d756c7469417373657446696c74657200012c62656e6566696369617279b90101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473390201404d756c7469417373657446696c74657200011064657374b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e000e003445786368616e676541737365740c011067697665390201404d756c7469417373657446696c74657200011077616e74e901012c4d756c746941737365747300011c6d6178696d616cac0110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473390201404d756c7469417373657446696c74657200011c72657365727665b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473390201404d756c7469417373657446696c74657200011064657374b90101344d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f350201445175657279526573706f6e7365496e666f000118617373657473390201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573f10101284d756c746941737365740001307765696768745f6c696d69744502012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400a105012458636d3c43616c6c3e0015002c536574417070656e6469780400a105012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d4173736574080118617373657473e901012c4d756c74694173736574730001187469636b6574b90101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e41737365740400e901012c4d756c7469417373657473001c002c45787065637441737365740400e901012c4d756c7469417373657473001d00304578706563744f726967696e0400290201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400090201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400210201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6534011c5665633c75383e000134726573706f6e73655f696e666f350201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578c501010c7533320001106e616d6534011c5665633c75383e00012c6d6f64756c655f6e616d6534011c5665633c75383e00012c63726174655f6d616a6f72c501010c75333200013c6d696e5f63726174655f6d696e6f72c501010c753332002200505265706f72745472616e736163745374617475730400350201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400c10101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726bcd0101244e6574776f726b496400012c64657374696e6174696f6ebd010154496e746572696f724d756c74694c6f636174696f6e00010c78636ddd01011c58636d3c28293e002600244c6f636b41737365740801146173736574f10101284d756c74694173736574000120756e6c6f636b6572b90101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574f10101284d756c74694173736574000118746172676574b90101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574f10101284d756c746941737365740001146f776e6572b90101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574f10101284d756c746941737365740001186c6f636b6572b90101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177ac0110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400b90101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69744502012c5765696768744c696d6974000130636865636b5f6f726967696e290201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000ad050c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c65741043616c6c04045400010448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d6974280118576569676874000004905365727669636520612073696e676c65206f766572776569676874206d6573736167652e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eb105000002ed0300b50500000408b9051800b9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400550301185665633c543e0000bd050c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d62657201102050726f706f73616c01f1031c42616c616e6365011801081c4f6e676f696e670400c10501c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564ac0110626f6f6c00010c656e6410012c426c6f636b4e756d62657200010000c1050c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d62657201102050726f706f73616c01f1031c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200012070726f706f73616cf103012050726f706f73616c0001247468726573686f6c64980134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c79c505013854616c6c793c42616c616e63653e0000c5050c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e63650000c9050c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f746573000108184469726563740c0114766f746573cd0501f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e73d905015044656c65676174696f6e733c42616c616e63653e0001147072696f72dd05017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6efd030128436f6e76696374696f6e00012c64656c65676174696f6e73d905015044656c65676174696f6e733c42616c616e63653e0001147072696f72dd05017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e00010000cd050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d105045300000400d50501185665633c543e0000d10500000408209c00d505000002d10500d9050c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e63650000dd050c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e63650000e10500000408f1039800e5050000040810b90500e9050c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f720404540001602056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7740507265696d6167654e6f7445786973740017047054686520707265696d61676520646f6573206e6f742065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909ed050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400910201185665633c543e0000f105084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e64657820013450726f706f73616c496e6465780001247468726573686f6c6420012c4d656d626572436f756e7400011061796573550301385665633c4163636f756e7449643e0001106e617973550301385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d6265720000f5050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909f9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400910201185665633c543e0000fd050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090901060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400550301185665633c543e000005060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909090906083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e636500000d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540120045300000400850301185665633c543e000011060c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040020010c7533320000150604184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000190608346672616d655f737570706f72742050616c6c65744964000004000102011c5b75383b20385d00001d060c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900011470496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e04784572726f7220666f72207468652074726561737572792070616c6c65742e21060c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090925060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014904045300000400290601185665633c543e000029060000024904002d06083870616c6c65745f76657374696e672052656c65617365730001080856300000000856310001000031060c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742e35060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454013906045300000400410601185665633c543e0000390604184f7074696f6e040454013d060108104e6f6e6500000010536f6d6504003d0600000100003d06084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c01f1032c426c6f636b4e756d62657201103450616c6c6574734f726967696e012504244163636f756e7449640100001401206d617962655f6964d401304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cf103011043616c6c0001386d617962655f706572696f646963510401944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e2504013450616c6c6574734f726967696e0000410600000239060045060c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909094906000004084d0618004d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454015106045300000400550601185665633c543e00005106083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501dc2c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065dc012450726f78795479706500011464656c617910012c426c6f636b4e756d626572000055060000025106005906000004085d0618005d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016106045300000400650601185665633c543e00006106083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801302c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173683001104861736800011868656967687410012c426c6f636b4e756d6265720000650600000261060069060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909096d06083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f73697471060150284163636f756e7449642c2042616c616e63652900010c6c656e20010c753332000000245265717565737465640c011c6465706f736974750601704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7420010c75333200010c6c656e0104012c4f7074696f6e3c7533323e00010000710600000408001800750604184f7074696f6e0404540171060108104e6f6e6500000010536f6d650400710600000100007906000004083020007d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000081060c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090985060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400550301185665633c543e000089060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909098d06082c70616c6c65745f746970731c4f70656e54697010244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572011010486173680130001c0118726561736f6e3001104861736800010c77686f0001244163636f756e74496400011866696e6465720001244163636f756e74496400011c6465706f73697418011c42616c616e6365000118636c6f7365739106014c4f7074696f6e3c426c6f636b4e756d6265723e00011074697073950601645665633c284163636f756e7449642c2042616c616e6365293e00012c66696e646572735f666565ac0110626f6f6c0000910604184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000950600000271060099060c3473705f61726974686d65746963287065725f7468696e67731c50657263656e7400000400080108753800009d060c2c70616c6c65745f746970731870616c6c6574144572726f7208045400044900011830526561736f6e546f6f4269670000048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e30416c72656164794b6e6f776e00010488546865207469702077617320616c726561647920666f756e642f737461727465642e28556e6b6e6f776e5469700002046054686520746970206861736820697320756e6b6e6f776e2e244e6f7446696e6465720003041d01546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e245374696c6c4f70656e0004042901546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e245072656d61747572650005043101546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a10600000408000400a506083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656ef4015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c73a906018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e0000a9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400550301185665633c543e0000ad060c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b1060c1463747970652c63747970655f656e747279284374797065456e747279081c43726561746f7201002c426c6f636b4e756d62657201100008011c63726561746f7200011c43726561746f72000128637265617465645f617410012c426c6f636b4e756d6265720000b5060c1463747970651870616c6c6574144572726f7204045400010c204e6f74466f756e64000004985468657265206973206e6f20435479706520776974682074686520676976656e20686173682e34416c72656164794578697374730001046454686520435479706520616c7265616479206578697374732e3c556e61626c65546f506179466565730002040d0154686520706179696e67206163636f756e742077617320756e61626c6520746f2070617920746865206665657320666f72206372656174696e6720612063747970652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b9060c2c6174746573746174696f6e306174746573746174696f6e73484174746573746174696f6e44657461696c7314244374797065486173680130284174746573746572496401003c417574686f72697a6174696f6e4964010501244163636f756e74496401001c42616c616e636501180014012863747970655f68617368300124437479706548617368000120617474657374657200012841747465737465724964000140617574686f72697a6174696f6e5f69640101015c4f7074696f6e3c417574686f72697a6174696f6e49643e00011c7265766f6b6564ac0110626f6f6c00011c6465706f736974bd06016c4465706f7369743c4163636f756e7449642c2042616c616e63653e0000bd060c306b696c745f737570706f72741c6465706f7369741c4465706f736974081c4163636f756e7401001c42616c616e63650118000801146f776e657200011c4163636f756e74000118616d6f756e7418011c42616c616e63650000c1060000040805013000c5060c2c6174746573746174696f6e1870616c6c6574144572726f720404540001183c416c726561647941747465737465640000080901546865726520697320616c726561647920616e206174746573746174696f6e2077697468207468652073616d6520636c61696d20686173682073746f726564206f6e18636861696e2e38416c72656164795265766f6b6564000104a4546865206174746573746174696f6e2068617320616c7265616479206265656e207265766f6b65642e204e6f74466f756e64000204c04e6f206174746573746174696f6e206f6e20636861696e206d61746368696e672074686520636c61696d20686173682e3443547970654d69736d61746368000308fc546865206174746573746174696f6e20435479706520646f6573206e6f74206d61746368207468652043547970652073706563696669656420696e207468656864656c65676174696f6e2068696572617263687920726f6f742e344e6f74417574686f72697a6564000404f05468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f206368616e676520746865206174746573746174696f6e2e804d617844656c6567617465644174746573746174696f6e73457863656564656400050cf4546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732068617320616c7265616479206265656e05017265616368656420666f722074686520636f72726573706f6e64696e672064656c65676174696f6e2069642073756368207468617420616e6f74686572206f6e654063616e6e6f742062652061646465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909c9060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368793844656c65676174696f6e4e6f6465144044656c65676174696f6e4e6f6465496401302c4d61784368696c6472656e01cd064444656c65676174696f6e44657461696c7301d106244163636f756e74496401001c42616c616e63650118001401446869657261726368795f726f6f745f696430014044656c65676174696f6e4e6f64654964000118706172656e74050401604f7074696f6e3c44656c65676174696f6e4e6f646549643e0001206368696c6472656ed50601b8426f756e64656442547265655365743c44656c65676174696f6e4e6f646549642c204d61784368696c6472656e3e00011c64657461696c73d106014444656c65676174696f6e44657461696c7300011c6465706f736974bd06016c4465706f7369743c4163636f756e7449642c2042616c616e63653e0000cd06103872756e74696d655f636f6d6d6f6e24636f6e7374616e74732864656c65676174696f6e2c4d61784368696c6472656e00000000d1060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368794444656c65676174696f6e44657461696c73042c44656c656761746f7249640100000c01146f776e657200012c44656c656761746f72496400011c7265766f6b6564ac0110626f6f6c00012c7065726d697373696f6e730d01012c5065726d697373696f6e730000d5060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540130045300000400d906012c42547265655365743c543e0000d9060420425472656553657404045401300004009102000000dd060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368796844656c65676174696f6e48696572617263687944657461696c73042443747970654861736801300004012863747970655f686173683001244374797065486173680000e1060c2864656c65676174696f6e1870616c6c6574144572726f720404540001585c44656c65676174696f6e416c72656164794578697374730000041101546865726520697320616c726561647920612064656c65676174696f6e206e6f64652077697468207468652073616d652049442073746f726564206f6e20636861696e2e60496e76616c696444656c65676174655369676e617475726500010805015468652064656c65676174652773207369676e617475726520666f72207468652064656c65676174696f6e206372656174696f6e206f7065726174696f6e20697320696e76616c69642e4844656c65676174696f6e4e6f74466f756e64000204c04e6f2064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e4044656c65676174654e6f74466f756e64000304b84e6f2064656c656761746520776974682074686520676976656e2049442073746f726564206f6e20636861696e2e58486965726172636879416c7265616479457869737473000404f8546865726520697320616c72656164792061206869657261726368792077697468207468652073616d652049442073746f726564206f6e20636861696e2e444869657261726368794e6f74466f756e64000504bc4e6f2068696572617263687920776974682074686520676976656e2049442073746f726564206f6e20636861696e2e544d617853656172636844657074685265616368656400060409014d6178206e756d626572206f66206e6f64657320636865636b656420776974686f757420766572696679696e672074686520676976656e20636f6e646974696f6e2e684e6f744f776e65724f66506172656e7444656c65676174696f6e000708f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6ef462656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20706172656e74206e6f64652e744e6f744f776e65724f6644656c65676174696f6e486965726172636879000808f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6eec62656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20726f6f74206e6f64652e60506172656e7444656c65676174696f6e4e6f74466f756e64000904dc4e6f20706172656e742064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e5c506172656e7444656c65676174696f6e5265766f6b6564000a04c854686520706172656e742064656c65676174696f6e206861732070726576696f75736c79206265656e207265766f6b65642e58556e617574686f72697a65645265766f636174696f6e000b04fc5468652064656c65676174696f6e207265766f6b6572206973206e6f7420616c6c6f77656420746f207265766f6b65207468652064656c65676174696f6e2e4c556e617574686f72697a656452656d6f76616c000c04ec5468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f2072656d6f7665207468652064656c65676174696f6e2e58556e617574686f72697a656444656c65676174696f6e000d04fc5468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f20637265617465207468652064656c65676174696f6e2e3041636365737344656e696564000e04f0546865206f7065726174696f6e207761736e277420616c6c6f7765642062656361757365206f6620696e73756666696369656e74207269676874732e6045786365656465645265766f636174696f6e426f756e6473000f080d014d6178206e756d626572206f66207265766f636174696f6e7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7238746865206f7065726174696f6e2e54457863656564656452656d6f76616c426f756e647300100811014d6178206e756d626572206f662072656d6f76616c7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7220746865286f7065726174696f6e2e584d61785265766f636174696f6e73546f6f4c61726765001104f8546865206d6178206e756d626572206f66207265766f636174696f6e206578636565647320746865206c696d697420666f72207468652070616c6c65742e4c4d617852656d6f76616c73546f6f4c61726765001204f0546865206d6178206e756d626572206f662072656d6f76616c73206578636565647320746865206c696d697420666f72207468652070616c6c65742e5c4d6178506172656e74436865636b73546f6f4c617267650013040501546865206d6178206e756d626572206f6620706172656e7420636865636b73206578636565647320746865206c696d697420666f72207468652070616c6c65742e20496e7465726e616c001404f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e4c4d61784368696c6472656e4578636565646564001508dc546865206d6178206e756d626572206f6620616c6c206368696c6472656e20686173206265656e207265616368656420666f722074686578636f72726573706f6e64696e672064656c65676174696f6e206e6f64652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909e5060c0c6469642c6469645f64657461696c732844696444657461696c7304045400001c014861757468656e7469636174696f6e5f6b65793001284b657949644f663c543e0001486b65795f61677265656d656e745f6b657973e90601684469644b657941677265656d656e744b65795365744f663c543e00013864656c65676174696f6e5f6b6579050401484f7074696f6e3c4b657949644f663c543e3e00013c6174746573746174696f6e5f6b6579050401484f7074696f6e3c4b657949644f663c543e3e00012c7075626c69635f6b657973ed0601504469645075626c69634b65794d61704f663c543e00013c6c6173745f74785f636f756e74657210010c75363400011c6465706f736974bd0601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e0000e9060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540130045300000400d906012c42547265655365743c543e0000ed060c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0130045601f106045300000400f906013842547265654d61703c4b2c20563e0000f1060c0c6469642c6469645f64657461696c734c4469645075626c69634b657944657461696c73042c426c6f636b4e756d62657201100008010c6b6579f50601304469645075626c69634b6579000130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720000f5060c0c6469642c6469645f64657461696c73304469645075626c69634b6579000108545075626c6963566572696669636174696f6e4b65790400e5040148446964566572696669636174696f6e4b65790000004c5075626c6963456e6372797074696f6e4b65790400d5040140446964456e6372797074696f6e4b657900010000f906042042547265654d617008044b0130045601f106000400fd06000000fd0600000201070001070000040830f1060005070000040800b5040009070c0c6469641870616c6c6574144572726f7204045400016c58496e76616c69645369676e6174757265466f726d6174000008050154686520444944206f7065726174696f6e207369676e6174757265206973206e6f7420696e2074686520666f726d61742074686520766572696669636174696f6e306b657920657870656374732e40496e76616c69645369676e6174757265000108f854686520444944206f7065726174696f6e207369676e617475726520697320696e76616c696420666f7220746865207061796c6f616420616e642074686568766572696669636174696f6e206b65792070726f76696465642e34416c7265616479457869737473000204f85468652044494420776974682074686520676976656e206964656e74696669657220697320616c72656164792070726573656e74206f6e20636861696e2e204e6f74466f756e64000304d44e6f2044494420776974682074686520676976656e206964656e7469666965722069732070726573656e74206f6e20636861696e2e5c566572696669636174696f6e4b65794e6f74466f756e6400040809014f6e65206f72206d6f726520766572696669636174696f6e206b657973207265666572656e63656420617265206e6f742073746f72656420696e2074686520736574546f6620766572696669636174696f6e206b6579732e30496e76616c69644e6f6e6365000504090154686520444944206f7065726174696f6e206e6f6e6365206973206e6f7420657175616c20746f207468652063757272656e7420444944206e6f6e6365202b20312e7c556e737570706f72746564446964417574686f72697a6174696f6e43616c6c000604e05468652063616c6c65642065787472696e73696320646f6573206e6f7420737570706f72742044494420617574686f7269736174696f6e2e6c496e76616c6964446964417574686f72697a6174696f6e43616c6c000708dc5468652063616c6c2068616420706172616d6574657273207468617420636f6e666c696374656420776974682065616368206f74686572406f72207765726520696e76616c69642e8c4d61784e65774b657941677265656d656e744b6579734c696d697445786365656465640008080d0141206e756d626572206f66206e6577206b65792061677265656d656e74206b6579732067726561746572207468616e20746865206d6178696d756d20616c6c6f77656448686173206265656e2070726f76696465642e544d61785075626c69634b65797345786365656465640009080501546865206d6178696d756d206e756d626572206f66207075626c6963206b65797320666f72207468697320444944206b6579206964656e74696669657220686173346265656e20726561636865642e6c4d61784b657941677265656d656e744b6579734578636565646564000a080501546865206d6178696d756d206e756d626572206f66206b65792061677265656d656e747320686173206265656e207265616368656420666f722074686520444944207375626a6563742e304261644469644f726967696e000b04bc546865204449442063616c6c20776173207375626d6974746564206279207468652077726f6e67206163636f756e74485472616e73616374696f6e45787069726564000c040d0154686520626c6f636b206e756d6265722070726f766964656420696e2061204449442d617574686f72697a6564206f7065726174696f6e20697320696e76616c69642e38416c726561647944656c65746564000d04b0546865204449442068617320616c7265616479206265656e2070726576696f75736c792064656c657465642e444e6f744f776e65724f664465706f736974000e04fc4f6e6c7920746865206f776e6572206f6620746865206465706f7369742063616e207265636c61696d206974732072657365727665642062616c616e63652e3c556e61626c65546f50617946656573000f04f0546865206f726967696e20697320756e61626c6520746f207265736572766520746865206465706f73697420616e642070617920746865206665652e6c4d61784e756d6265724f66536572766963657345786365656465640010041101546865206d6178696d756d206e756d626572206f66207365727669636520656e64706f696e747320666f7220612044494420686173206265656e2065786365656465642e684d61785365727669636549644c656e6774684578636565646564001104f0546865207365727669636520656e64706f696e7420494420657863656564656420746865206d6178696d756d20616c6c6f776564206c656e6774682e704d617853657276696365547970654c656e6774684578636565646564001208f84f6e65206f6620746865207365727669636520656e64706f696e7420747970657320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e884d61784e756d6265724f665479706573506572536572766963654578636565646564001308ec546865206d6178696d756d206e756d626572206f6620747970657320666f722061207365727669636520656e64706f696e7420686173206265656e2465786365656465642e6c4d61785365727669636555726c4c656e6774684578636565646564001408f44f6e65206f6620746865207365727669636520656e64706f696e742055524c7320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e844d61784e756d6265724f6655726c735065725365727669636545786365656465640015041101546865206d6178696d756d206e756d626572206f662055524c7320666f722061207365727669636520656e64706f696e7420686173206265656e2065786365656465642e5053657276696365416c726561647945786973747300160411014120736572766963652077697468207468652070726f766964656420494420697320616c72656164792070726573656e7420666f722074686520676976656e204449442e3c536572766963654e6f74466f756e6400170409014120736572766963652077697468207468652070726f7669646564204944206973206e6f742070726573656e7420756e6465722074686520676976656e204449442e58496e76616c696453657276696365456e636f64696e6700180409014f6e65206f6620746865207365727669636520656e64706f696e742064657461696c7320636f6e7461696e73206e6f6e2d415343494920636861726163746572732e7c4d617853746f726564456e64706f696e7473436f756e7445786365656465640019080d01546865206e756d626572206f66207365727669636520656e64706f696e74732073746f72656420756e6465722074686520444944206973206c6172676572207468616e88746865206e756d626572206f6620656e64706f696e747320746f2064656c6574652e20496e7465726e616c001a04f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909090d070c4470616c6c65745f6469645f6c6f6f6b757044636f6e6e656374696f6e5f7265636f726440436f6e6e656374696f6e5265636f72640c344469644964656e74696669657201001c4163636f756e7401001c42616c616e636501180008010c6469640001344469644964656e74696669657200011c6465706f736974bd0601644465706f7369743c4163636f756e742c2042616c616e63653e00001107000004080019010015070c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144572726f72040454000114204e6f74466f756e640000047c546865206173736f63696174696f6e20646f6573206e6f742065786973742e344e6f74417574686f72697a65640001081101546865206f726967696e20776173206e6f7420616c6c6f77656420746f206d616e61676520746865206173736f63696174696f6e206265747765656e20746865204449444c616e6420746865206163636f756e742049442e344f7574646174656450726f6f66000204b454686520737570706c6965642070726f6f66206f66206f776e65727368697020776173206f757464617465642e44496e73756666696369656e7446756e64730003081101546865206163636f756e742068617320696e73756666696369656e742066756e647320616e642063616e277420706179207468652066656573206f72207265736572766530746865206465706f7369742e244d6967726174696f6e00040c010154686520436f6e6e65637465644163636f756e747320616e6420436f6e6e6563746564446964732073746f7261676520617265206f7574206f662073796e632e0011014e4f54453a20746869732077696c6c206f6e6c792062652072657475726e6564206966207468652073746f726167652068617320696e636f6e73697374656e636965732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090919070c4470616c6c65745f776562335f6e616d657324776562335f6e616d6544576562334e616d654f776e6572736869700c144f776e657201001c4465706f73697401bd062c426c6f636b4e756d6265720110000c01146f776e65720001144f776e6572000128636c61696d65645f617410012c426c6f636b4e756d62657200011c6465706f736974bd06011c4465706f73697400001d070c4470616c6c65745f776562335f6e616d65731870616c6c6574144572726f7204045400013044496e73756666696369656e7446756e64730000040d01546865207478207375626d697474657220646f6573206e6f74206861766520656e6f7567682066756e647320746f2070617920666f7220746865206465706f7369742e34416c7265616479457869737473000104dc54686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c7920636c61696d65642e204e6f74466f756e640002048854686520737065636966696564206e616d6520646f6573206e6f742065786973742e484f776e6572416c7265616479457869737473000304a054686520737065636966696564206f776e657220616c7265616479206f776e732061206e616d652e344f776e65724e6f74466f756e64000404ac54686520737065636966696564206f776e657220646f6573206e6f74206f776e20616e79206e616d65732e1842616e6e6564000508ec54686520737065636966696564206e616d6520686173206265656e2062616e6e656420616e642063616e6e6f7420626520696e746572616374656414776974682e244e6f7442616e6e6564000604ac54686520737065636966696564206e616d65206973206e6f742063757272656e746c792062616e6e65642e34416c726561647942616e6e6564000704d854686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c792062616e6e65642e344e6f74417574686f72697a6564000804cc546865206163746f722063616e6e6f7420706572666f726d65642074686520737065636966696564206f7065726174696f6e2e20546f6f53686f7274000904a841206e616d65207468617420697320746f6f2073686f7274206973206265696e6720636c61696d65642e1c546f6f4c6f6e67000a04a441206e616d65207468617420697320746f6f206c6f6e67206973206265696e6720636c61696d65642e40496e76616c6964436861726163746572000b04f441206e616d65207468617420636f6e7461696e73206e6f7420616c6c6f7765642063686172616374657273206973206265696e6720636c61696d65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909092107000004083501300025070c487075626c69635f63726564656e7469616c732c63726564656e7469616c733c43726564656e7469616c456e7472791824435479706548617368013020417474657374657201002c426c6f636b4e756d6265720110244163636f756e74496401001c42616c616e636501183c417574686f72697a6174696f6e49640105010018012863747970655f686173683001244354797065486173680001206174746573746572000120417474657374657200011c7265766f6b6564ac0110626f6f6c000130626c6f636b5f6e756d62657210012c426c6f636b4e756d62657200011c6465706f736974bd06016c4465706f7369743c4163636f756e7449642c2042616c616e63653e000140617574686f72697a6174696f6e5f69640101015c4f7074696f6e3c417574686f72697a6174696f6e49643e000029070c487075626c69635f63726564656e7469616c731870616c6c6574144572726f720404540001183c416c72656164794174746573746564000008f8412063726564656e7469616c2077697468207468652073616d6520726f6f7420686173682068617320616c72656164792069737375656420746f2074686548737065636966696564207375626a6563742e204e6f74466f756e6400010805014e6f2063726564656e7469616c2077697468207468652073706563696669656420726f6f74206861736820686173206265656e2069737375656420746f2074686548737065636966696564207375626a6563742e3c556e61626c65546f50617946656573000204d44e6f7420656e6f75676820746f6b656e7320746f2070617920666f72207468652066656573206f7220746865206465706f7369742e30496e76616c6964496e707574000304805468652063726564656e7469616c20696e70757420697320696e76616c69642e344e6f74417574686f72697a6564000404e05468652063616c6c6572206973206e6f7420617574686f72697a656420746f20706572666f726d656420746865206f7065726174696f6e2e20496e7465726e616c000508f443617463682d616c6c20666f7220616e79206f74686572206572726f727320746861742073686f756c64206e6f742068617070656e2c207965742069742468617070656e65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909092d0704184f7074696f6e0404540131070108104e6f6e6500000010536f6d6504003107000001000031070c4c706f6c6b61646f745f7072696d69746976657308763448557067726164655265737472696374696f6e0001041c50726573656e740000000035070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f6865616430014472656c61795f636861696e3a3a4861736800016472656c61795f64697370617463685f71756575655f73697a653907015452656c617944697370616368517565756553697a65000140696e67726573735f6368616e6e656c733d0701885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c733d0701885665633c285061726149642c20416272696467656448726d704368616e6e656c293e000039070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f745452656c617944697370616368517565756553697a65000008013c72656d61696e696e675f636f756e7420010c75333200013872656d61696e696e675f73697a6520010c75333200003d07000002410700410700000408ad0145070045070c4c706f6c6b61646f745f7072696d6974697665730876344c416272696467656448726d704368616e6e656c00001801306d61785f636170616369747920010c7533320001386d61785f746f74616c5f73697a6520010c7533320001406d61785f6d6573736167655f73697a6520010c7533320001246d73675f636f756e7420010c753332000128746f74616c5f73697a6520010c7533320001206d71635f68656164050401304f7074696f6e3c486173683e000049070c4c706f6c6b61646f745f7072696d697469766573087634644162726964676564486f7374436f6e66696775726174696f6e00002401346d61785f636f64655f73697a6520010c7533320001486d61785f686561645f646174615f73697a6520010c7533320001586d61785f7570776172645f71756575655f636f756e7420010c7533320001546d61785f7570776172645f71756575655f73697a6520010c75333200015c6d61785f7570776172645f6d6573736167655f73697a6520010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746520010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746520010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e20012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c617920012c426c6f636b4e756d62657200004d07089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e0000040030012452656c61794861736800005107042042547265654d617008044b01ad010456014d0700040055070000005507000002590700590700000408ad014d07005d0700000261070061070860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401ad0100080124726563697069656e74ad01010849640001106461746134015073705f7374643a3a7665633a3a5665633c75383e00006507087c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6eac0110626f6f6c000069070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041901417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e672e5050726f686962697465644279506f6c6b61646f740001044d01506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e2e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733c77696c6c696e6720746f2072756e2e6856616c69646174696f6e446174614e6f74417661696c61626c650003041d0154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b2e74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404290154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b2e304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909096d070000027107007107086463756d756c75735f70616c6c65745f78636d705f717565756554496e626f756e644368616e6e656c44657461696c7300000c011873656e646572ad010118506172614964000114737461746575070130496e626f756e6453746174650001406d6573736167655f6d65746164617461790701a85665633c2852656c6179426c6f636b4e756d6265722c2058636d704d657373616765466f726d6174293e00007507086463756d756c75735f70616c6c65745f78636d705f717565756530496e626f756e645374617465000108084f6b0000002453757370656e6465640001000079070000027d07007d07000004082081070081070c48706f6c6b61646f745f70617261636861696e287072696d6974697665734458636d704d657373616765466f726d617400010c60436f6e636174656e6174656456657273696f6e656458636d0000005c436f6e636174656e61746564456e636f646564426c6f620001001c5369676e616c7300020000850700000408ad01200089070000028d07008d07086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74ad0101185061726149640001147374617465910701344f7574626f756e6453746174650001347369676e616c735f6578697374ac0110626f6f6c00012c66697273745f696e646578e0010c7531360001286c6173745f696e646578e0010c75313600009107086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000950700000408ad01e0009907086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e66696744617461000018014473757370656e645f7468726573686f6c6420010c75333200013864726f705f7468726573686f6c6420010c753332000140726573756d655f7468726573686f6c6420010c7533320001407468726573686f6c645f7765696768742801185765696768740001547765696768745f72657374726963745f646563617928011857656967687400016878636d705f6d61785f696e646976696475616c5f77656967687428011857656967687400009d070000040cad01203400a1070c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f72040454000114304661696c6564546f53656e640000046c4661696c656420746f2073656e642058434d206d6573736167652e3042616458636d4f726967696e0001043c4261642058434d206f726967696e2e1842616458636d000204344261642058434d20646174612e484261644f766572776569676874496e64657800030454426164206f76657277656967687420696e6465782e3c5765696768744f7665724c696d6974000404f850726f76696465642077656967687420697320706f737369626c79206e6f7420656e6f75676820746f206578656375746520746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a5070c2870616c6c65745f78636d1870616c6c6574144572726f720404540001502c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108610154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652e2050657268617073a861206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e30496e76616c69644173736574000d0480496e76616c696420617373657420666f7220746865206f7065726174696f6e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304490154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c20636f6e73756d657273206f6620746865206c6f636b2e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909a9070c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144572726f7204045400010004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909ad07086063756d756c75735f70616c6c65745f646d705f717565756528436f6e6669674461746100000401386d61785f696e646976696475616c2801185765696768740000b107086063756d756c75735f70616c6c65745f646d705f71756575653450616765496e6465784461746100000c0128626567696e5f7573656420012c50616765436f756e746572000120656e645f7573656420012c50616765436f756e7465720001406f7665727765696768745f636f756e7410013c4f766572776569676874496e6465780000b507000002b90700b90700000408203400bd070c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144572726f720404540001081c556e6b6e6f776e0000048c546865206d65737361676520696e64657820676976656e20697320756e6b6e6f776e2e244f7665724c696d6974000104310154686520616d6f756e74206f662077656967687420676976656e20697320706f737369626c79206e6f7420656e6f75676820666f7220657865637574696e6720746865206d6573736167652e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909c107102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301ed021043616c6c01f503245369676e617475726501050514457874726101c50700040034000000c50700000420c907cd07d107d507d907e107e507e90700c90710306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000cd0710306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000d10710306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000d50710306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000d90710306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400dd07010c4572610000dd07102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000e10710306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e6365040454000004002c0120543a3a496e6465780000e50710306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000e907086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400d101013042616c616e63654f663c543e0000941853797374656d011853797374656d401c4163636f756e7401010402000c510100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000020040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010024180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000020040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510308000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040520340400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d626572010010200000000000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003080000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010038040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004804001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010020100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104023095020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000990204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100ac0400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100ac0400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500008d02040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01a10201541830426c6f636b57656967687473b1026d010203815d00070088526a7402004001c2e9171b0001079077bca44b0200d000010700e6bd4f570200f000010000c2e9171b000107901951bf680200200101070088526a7402004001010700a2941a1d02005000c2e9171b0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468c1023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e7410206009000000000000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874c90240089d26020000000000dce704000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6ecd026103386b696c742d7370697269746e6574386b696c742d7370697269746e657401000000c02b00000000000038df6acb689907609b0400000037e397fc7c91f5e402000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000f3ff14d5ab5270590300000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000dd718d5cc53262d401000000ea93e3f16f3d69620200000026609555c065660302000000a47b7d544994c99b0100000045bfba51a310b2230100000006000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e2853533538507265666978e008260014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01dd02002454696d657374616d70012454696d657374616d70080c4e6f7701001020000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100ac040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f01e1020004344d696e696d756d506572696f6410207017000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00021c496e6469636573011c496e646963657304204163636f756e74730001040210e5020400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e01e9020178041c4465706f736974184000b47cf328350000000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e01f502052042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200f902040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e20526573657276657301010402000903040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e14486f6c6473010104020015030400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a657301010402003d030400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e015103017c14484578697374656e7469616c4465706f736974184000a0724e18090000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7320103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573201032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e204d6178486f6c647320103200000004190120546865206d6178696d756d206e756d626572206f6620686f6c647320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e284d6178467265657a657320103200000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01590306485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c69657201005d0340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100610304000000018404604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00071041757261011041757261082c417574686f726974696573010065030400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f74010075032000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000171c53657373696f6e011c53657373696f6e1c2856616c696461746f7273010055030400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010020100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e6765640100ac040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b657973010079030400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f7273010085030400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b657973000104050081030400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405890300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e019103018800019503164050617261636861696e5374616b696e67014050617261636861696e5374616b696e6740544d617853656c656374656443616e64696461746573010020100000000004090120546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c6563746564206174206561636820726f756e642e14526f756e640100990350000000000000000000000000140000000000000004e82043757272656e7420726f756e64206e756d62657220616e64206e65787420726f756e64207363686564756c6564207472616e736974696f6e2e384c61737444656c65676174696f6e01010405009d03200000000000000000140d012044656c65676174696f6e20696e666f726d6174696f6e20666f7220746865206c61746573742073657373696f6e20696e20776869636820612064656c656761746f722c2064656c6567617465642e000501204974206d6170732066726f6d20616e206163636f756e7420746f20746865206e756d626572206f662064656c65676174696f6e7320696e20746865206c617374982073657373696f6e20696e2077686963682074686579202872652d2964656c6567617465642e3844656c656761746f7253746174650001040500a10304000c802044656c65676174696f6e207374616b696e6720696e666f726d6174696f6e2e00cc204974206d6170732066726f6d20616e206163636f756e7420746f206974732064656c65676174696f6e2064657461696c732e3443616e646964617465506f6f6c0001040500a503040010a420546865207374616b696e6720696e666f726d6174696f6e20666f7220612063616e6469646174652e00b0204974206d6170732066726f6d20616e206163636f756e7420746f2069747320696e666f726d6174696f6e2eb8204d6f72656f7665722c20697420636f756e747320746865206e756d626572206f662063616e646964617465732e5c436f756e746572466f7243616e646964617465506f6f6c010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617048546f74616c436f6c6c61746f725374616b650100b90380000000000000000000000000000000000000000000000000000000000000000014f420546f74616c2066756e6473206c6f636b656420746f206261636b207468652063757272656e746c792073656c656374656420636f6c6c61746f72732ed0205468652073756d206f6620616c6c20636f6c6c61746f7220616e642074686569722064656c656761746f72207374616b65732e002101204e6f74653a20546865726520617265206d6f72652066756e6473206c6f636b656420627920746869732070616c6c65742c2073696e636520746865206261636b696e6720666f720901206e6f6e20636f6c6c6174696e672063616e64696461746573206973206e6f7420696e636c7564656420696e205b546f74616c436f6c6c61746f725374616b655d2e34546f7043616e646964617465730100bd03040028e82054686520636f6c6c61746f722063616e64696461746573207769746820746865206869676865737420616d6f756e74206f66207374616b652e00190120456163682074696d6520746865207374616b65206f66206120636f6c6c61746f7220697320696e637265617365642c20697420697320636865636b65642077686574686572050120746869732070757368657320616e6f746865722063616e646964617465206f7574206f6620746865206c6973742e205768656e20746865207374616b652069732101207265647563656420686f77657665722c206974206973206e6f7420636865636b656420696620616e6f746865722063616e64696461746520686173206d6f7265207374616b652c11012073696e6365207468697320776f756c64207265717569726520697465726174696e67206f7665722074686520656e74697265205b43616e646964617465506f6f6c5d2e001501205468657265206d75737420616c77617973206265206d6f72652063616e64696461746573207468616e205b4d617853656c656374656443616e646964617465735d20736f0d012074686174206120636f6c6c61746f722063616e2064726f70206f7574206f662074686520636f6c6c61746f7220736574206279207265647563696e672074686569721c207374616b652e3c496e666c6174696f6e436f6e6669670100c503c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046420496e666c6174696f6e20636f6e66696775726174696f6e2e24556e7374616b696e670101040500d10304001088205468652066756e64732077616974696e6720746f20626520756e7374616b65642e001d01204974206d6170732066726f6d206163636f756e747320746f20616c6c207468652066756e64732061646472657373656420746f207468656d20696e20746865206675747572652020626c6f636b732e644d6178436f6c6c61746f7243616e6469646174655374616b65010018400000000000000000000000000000000004cc20546865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e6469646174652063616e207374616b652e4c4c617374526577617264526564756374696f6e010010200000000000000000140d0120546865207965617220696e20776869636820746865206c617374206175746f6d6174696320726564756374696f6e206f66207468652072657761726420726174657328206f636375727265642e00250120497420737461727473206174207a65726f2061742067656e6573697320616e6420696e6372656d656e7473206279206f6e6520657665727920424c4f434b535f5045525f5945415234206d616e7920626c6f636b732e38426c6f636b73417574686f726564010104050010200000000000000000080d0120546865206e756d626572206f6620617574686f72656420626c6f636b7320666f7220636f6c6c61746f72732e20497420697320757064617465642076696120746865b020606e6f74655f617574686f726020686f6f6b207768656e20617574686f72696e67206120626c6f636b202e38426c6f636b73526577617264656401010405001020000000000000000024210120546865206e756d626572206f6620626c6f636b7320666f7220776869636820726577617264732068617665206265656e20636c61696d656420627920616e20616464726573732e00190120466f7220636f6c6c61746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f7265642e2049742069732075706461746564207768656ecc20696e6372656d656e74696e6720636f6c6c61746f7220726577617264732c20656974686572207768656e2063616c6c696e67e02060696e635f636f6c6c61746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e00250120466f722064656c656761746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f726564206f662074686520636f6c6c61746f722e497420697305012075706461746564207768656e20696e6372656d656e74696e672064656c656761746f7220726577617264732c20656974686572207768656e2063616c6c696e67e42060696e635f64656c656761746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e1c5265776172647301010405001840000000000000000000000000000000000c01012054686520616363756d756c61746564207265776172647320666f7220636f6c6c61746f722063616e6469646174657320616e642064656c656761746f72732e001101204974206d6170732066726f6d206163636f756e747320746f20746865697220746f74616c20726577617264732073696e636520746865206c617374207061796f75742e34466f7263654e6577526f756e640100ac04000001e103018c3c444d696e426c6f636b73506572526f756e6410202c0100000000000004d4204d696e696d756d206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e64732063616e206c6173742e5444656661756c74426c6f636b73506572526f756e641020580200000000000008fc2044656661756c74206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e6473206c6173742c2061732073657420696e207468655c2067656e6573697320636f6e66696775726174696f6e2e345374616b654475726174696f6e1020e0c40000000000000c0501204e756d626572206f6620626c6f636b7320666f7220776869636820756e7374616b65642062616c616e63652077696c6c207374696c6c206265206c6f636b6564f0206265666f72652069742063616e20626520756e6c6f636b6564206279206163746976656c792063616c6c696e67207468652065787472696e7369634c2060756e6c6f636b5f756e7374616b6564602e3845786974517565756544656c6179201002000000080901204e756d626572206f6620726f756e6473206120636f6c6c61746f722068617320746f207374617920616374697665206166746572207375626d697474696e672061c4207265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e304d696e436f6c6c61746f7273201010000000080d01204d696e696d756d206e756d626572206f6620636f6c6c61746f72732073656c65637465642066726f6d2074686520736574206f662063616e64696461746573206174602065766572792076616c69646174696f6e20726f756e642e504d696e5265717569726564436f6c6c61746f7273201004000000081101204d696e696d756d206e756d626572206f6620636f6c6c61746f72732077686963682063616e6e6f74206c6561766520746865206e6574776f726b2069662074686572653c20617265206e6f206f74686572732e584d617844656c65676174696f6e73506572526f756e64201001000000140101204d6178696d756d206e756d626572206f662064656c65676174696f6e732077686963682063616e206265206d6164652077697468696e207468652073616d651c20726f756e642e000d01204e4f54453a20546f2070726576656e742072652d64656c65676174696f6e2d7265776172642061747461636b732c2077652073686f756c64206b65657020746869732c20746f206265206f6e652e604d617844656c656761746f7273506572436f6c6c61746f7220102300000004e4204d6178696d756d206e756d626572206f662064656c656761746f727320612073696e676c6520636f6c6c61746f722063616e20686176652e404d6178546f7043616e6469646174657320104b00000004a0204d6178696d756d2073697a65206f662074686520746f702063616e64696461746573207365742e404d696e436f6c6c61746f725374616b6518400000e8890423c78a0000000000000000080901204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520656c65637465642061732076616c696461746f723420666f72206120726f756e642e644d696e436f6c6c61746f7243616e6469646174655374616b6518400000e8890423c78a0000000000000000080501204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520616464656420746f2074686520736574206f66302063616e646964617465732e444d696e44656c656761746f725374616b651840000082dfe40d4700000000000000000004f8204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f206265636f6d6520612064656c656761746f722e484d6178556e7374616b65526571756573747320100a00000028e8204d6178206e756d626572206f6620636f6e63757272656e742061637469766520756e7374616b696e67207265717565737473206265666f72652c20756e6c6f636b696e672e001501204e4f54453a20546f2070726f7465637420616761696e737420697272656d6f766162696c697479206f6620612063616e646964617465206f722064656c656761746f722cf4207765206f6e6c7920616c6c6f7720666f72204d6178556e7374616b655265717565737473202d2031206d616e79206d616e75616c20756e7374616b6501012072657175657374732e20546865206c617374206f6e6520736572766573206173206120706c616365686f6c64657220666f7220746865206361736573206f66f02063616c6c696e672065697468657220606b69636b5f64656c656761746f72602c20666f7263655f72656d6f76655f63616e64696461746560206f7209012060657865637574655f6c656176655f63616e64696461746573602e204f74686572776973652c2061207573657220636f756c64206d6178206f75742074686569720d0120756e7374616b6520726571756573747320616e642070726576656e74207468656d73656c7665732066726f6d206265696e67206b69636b65642066726f6d20746865f020736574206f662063616e646964617465732f64656c656761746f727320756e74696c207468657920756e6c6f636b2074686569722066756e64732e484e6574776f726b5265776172645374617274102048a3c800000000000c110120546865207374617274696e6720626c6f636b206e756d62657220666f7220746865206e6574776f726b20726577617264732e204f6e6365207468652063757272656e74090120626c6f636b206e756d626572206578636565647320746869732073746172742c207468652062656e65666963696172792077696c6c2072656365697665207468658420636f6e666967757265642072657761726420696e206561636820626c6f636b2e444e6574776f726b52657761726452617465902000008a5d784563010c0d0120546865207261746520696e2070657263656e7420666f7220746865206e6574776f726b207265776172647320776869636820617265206261736564206f6e207468650901206d6178696d756d206e756d626572206f6620636f6c6c61746f727320616e6420746865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e1c207374616b652e01e5031528417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000141c41757261457874011c41757261457874042c417574686f72697469657301006503040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c790120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c20616c77617973f0206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e00000000182444656d6f6372616379012444656d6f6372616379303c5075626c696350726f70436f756e74010020100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f70730100e903040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f660001040520b50504000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e74010020100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b6564010020100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f660001040520bd0504000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f660101040500c905e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100ac0400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c0000e105040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c6973740001040630e50504000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e730101040630ac0400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e284d657461646174614f6600010402a430040018ec2047656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720616e792070726f706f73616c206f72207265666572656e64756d2e6901205468652060507265696d61676548617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e01f9030194303c456e6163746d656e74506572696f641020201c00000000000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f641020e0c400000000000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f641020e0c400000000000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f641020e0c4000000000000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400080c6a47e8d0300000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f776564ac04010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f641020840300000000000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f641020e0c400000000000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f74657320106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c73201064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f73697473201064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c697374656420106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e01e9051e1c436f756e63696c011c436f756e63696c182450726f706f73616c730100ed05040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f660001040630f503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e670001040630f105040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010020100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010055030400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01090401a804444d617850726f706f73616c576569676874282807004429353a0200a00004250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e01f5051f48546563686e6963616c436f6d6d69747465650148546563686e6963616c436f6d6d6974746565182450726f706f73616c730100f905040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f660001040630f503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e670001040630f105040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010020100000000004482050726f706f73616c7320736f206661722e1c4d656d62657273010055030400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01110401b804444d617850726f706f73616c576569676874282807004429353a0200a00004250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e01fd05204c546563686e6963616c4d656d62657273686970014c546563686e6963616c4d656d62657273686970081c4d656d6265727301000106040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01150401bc000105062220547265617375727901205472656173757279103450726f706f73616c436f756e74010020100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c73000104052009060400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c7301000d06040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e01190401c01c3050726f706f73616c426f6e6411061050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d1840000082dfe40d47000000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756d15060400044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f641020c0a8000000000000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726e110610000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c657449641906206b696c742f7473790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c732010640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e011d06231c5574696c69747900011d0401c4044c626174636865645f63616c6c735f6c696d69742010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e012106281c56657374696e67011c56657374696e67081c56657374696e6700010402002506040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e01002d0604000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01450401c808444d696e5665737465645472616e73666572184000407a10f35a0000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657320101c0000000001310629245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e6461010104051035060400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b75700001040504d0040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e014d0401cc08344d6178696d756d57656967687428280700a0db215d0200000104290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b201032000000141d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0018204e4f54453a5101202b20446570656e64656e742070616c6c657473272062656e63686d61726b73206d696768742072657175697265206120686967686572206c696d697420666f72207468652073657474696e672e205365742061c420686967686572206c696d697420756e646572206072756e74696d652d62656e63686d61726b736020666561747572652e0145062a1450726f7879011450726f7879081c50726f78696573010104050049064400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e74730101040500590644000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01550401d8184050726f78794465706f7369744261736518400020f7a54b330000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f72184000f4a92b80010000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657320100a00000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6720100a00000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f7369744261736518400020f7a54b330000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72184000e8535700030000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e0169062b20507265696d6167650120507265696d6167650824537461747573466f7200010406306d060400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f720001040679067d06040000015d0401e4000181062c38546970734d656d626572736869700138546970734d656d62657273686970081c4d656d6265727301008506040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01610401e8000189062d105469707301105469707308105469707300010405308d0604000c650120546970734d6170207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e3d012054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c7265616479802067756172616e7465656420746f20626520612073656375726520686173682e1c526561736f6e7300010406303404000849012053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e610120696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e01650401ec144c4d6178696d756d526561736f6e4c656e6774682010004000000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756548446174614465706f73697450657242797465184000743ba40b00000000000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e30546970436f756e74646f776e1020201c0000000000000445012054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e3454697046696e6465727346656599060400043501205468652070657263656e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e505469705265706f72744465706f73697442617365184000f45628fa320000000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e019d062e204d756c746973696701204d756c746973696704244d756c7469736967730001080502a106a506040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01690401f00c2c4465706f73697442617365184000801b84ee320000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f72184000743ba40b00000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657320104000000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e01ad062f1443747970650114437479706504184374797065730001040230b10604001060204354797065732073746f726564206f6e20636861696e2e001901204974206d6170732066726f6d2061204354797065206861736820746f206974732063726561746f7220616e6420626c6f636b206e756d62657220696e207768696368206974342077617320637265617465642e01710401f80001b5063d2c4174746573746174696f6e012c4174746573746174696f6e08304174746573746174696f6e730001040230b90604000c78204174746573746174696f6e732073746f726564206f6e20636861696e2e00cc204974206d6170732066726f6d206120636c61696d206861736820746f207468652066756c6c206174746573746174696f6e2e5045787465726e616c4174746573746174696f6e730101080502c106ac04000ca02044656c656761746564206174746573746174696f6e732073746f726564206f6e20636861696e2e00e8204974206d6170732066726f6d20612064656c65676174696f6e20494420746f206120766563746f72206f6620636c61696d206861736865732e01750401fc081c4465706f7369741840001cc9dd006e0000000000000000000004e420546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720616e206174746573746174696f6e2e604d617844656c6567617465644174746573746174696f6e732010e803000008090120546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732077686963682063616e206265206d61646520627954207468652073616d652064656c65676174696f6e2e01c5063e2844656c65676174696f6e012844656c65676174696f6e083c44656c65676174696f6e4e6f6465730001040230c90604000c882044656c65676174696f6e206e6f6465732073746f726564206f6e20636861696e2e00b0204974206d6170732066726f6d2061206e6f646520494420746f20746865206e6f64652064657461696c732e5444656c65676174696f6e48696572617263686965730001040230dd0604000ca02044656c65676174696f6e2068696572617263686965732073746f726564206f6e20636861696e2e00dc204974206d61707320666f7220612028726f6f7429206e6f646520494420746f20746865206869657261726368792064657461696c732e018904010901181c4465706f73697418400080c6a47e8d0300000000000000000004dc20546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720612064656c65676174696f6e2e584d61785369676e6174757265427974654c656e677468e008400000384d61785265766f636174696f6e73201005000000047c204d6178696d756d206e756d626572206f66207265766f636174696f6e732e2c4d617852656d6f76616c7320100500000004f4204d6178696d756d206e756d626572206f662072656d6f76616c732e2053686f756c642062652073616d65206173204d61785265766f636174696f6e733c4d6178506172656e74436865636b73201005000000080d01204d6178696d756d206e756d626572206f6620757077617264732074726176657273616c73206f66207468652064656c65676174696f6e20747265652066726f6d2061f0206e6f646520746f2074686520726f6f7420616e64207468757320746865206465707468206f66207468652064656c65676174696f6e20747265652e2c4d61784368696c6472656e2010e80300000c0d01204d6178696d756d206e756d626572206f6620616c6c206368696c6472656e20666f7220612064656c65676174696f6e206e6f64652e20466f7220612062696e617279fc20747265652c20746869732073686f756c6420626520747769636520746865206d6178696d756d206465707468206f662074686520747265652c20692e652e5c206032205e204d6178506172656e74436865636b73602e01e1063f0c446964010c446964100c4469640001040200e50604000c5820444944732073746f726564206f6e20636861696e2e00c8204974206d6170732066726f6d206120444944206964656e74696669657220746f20746865204449442064657461696c732e4053657276696365456e64706f696e747300010805020507b10404000ca0205365727669636520656e64706f696e7473206173736f636961746564207769746820444944732e000901204974206d6170732066726f6d2028444944206964656e7469666965722c20736572766963652049442920746f2074686520736572766963652064657461696c732e44446964456e64706f696e7473436f756e7401010402002010000000000cac20436f756e746572206f66207365727669636520656e64706f696e747320666f722065616368204449442e00cc204974206d6170732066726f6d2028444944206964656e7469666965722920746f20612033322d62697420636f756e7465722e30446964426c61636b6c6973740001040200b40400141d012054686520736574206f66204449447320746861742068617665206265656e2064656c6574656420616e642063616e6e6f74207468657265666f726520626520637265617465647020616761696e20666f7220736563757269747920726561736f6e732e002101204974206d6170732066726f6d206120444944206964656e74696669657220746f206120756e6974207475706c652c20666f72207468652073616b65206f6620747261636b696e674420444944206964656e746966696572732e01a504011101382c426173654465706f736974184000008d49fd1a07000000000000000000100d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974f820746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f73697473fc20696e6372656173652062792074686520616d6f756e74206f662075736564206b65797320616e64207365727669636520656e64706f696e74732e20546865c8206465706f7369742063616e206265207265636c61696d6564207768656e20746865204449442069732064656c657465642e5853657276696365456e64706f696e744465706f736974184000b0156a084a00000000000000000000100d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368207365727669636520656e64706f696e7409012061732061206465706f73697420746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e205468651501206465706f7369742063616e206265207265636c61696d6564207768656e20746865207365727669636520656e64706f696e742069732072656d6f766564206f722074686534204449442064656c657465642e284b65794465706f736974184000dc20749701000000000000000000000805012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368206164646564206b65792061732061e4206465706f73697420746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e0c466565184000203d88792d000000000000000000000c09012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f7220656163682044494420617320612066656520746f0d0120696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206665652077696c6c206e6f74206765748820726566756e646564207768656e20746865204449442069732064656c657465642e4c4d61785075626c69634b6579735065724469642010140000000c1101204d6178696d756d206e756d626572206f6620746f74616c207075626c6963206b6579732077686963682063616e2062652073746f7265642070657220444944206b6579d8206964656e7469666965722e205468697320696e636c7564657320746865206f6e65732063757272656e746c79207573656420666f72f02061757468656e7469636174696f6e2c206b65792061677265656d656e742c206174746573746174696f6e2c20616e642064656c65676174696f6e2e584d61784e65774b657941677265656d656e744b65797320100a000000081501204d6178696d756d206e756d626572206f66206b65792061677265656d656e74206b65797320746861742063616e20626520616464656420696e2061206372656174696f6e2c206f7065726174696f6e2e604d6178546f74616c4b657941677265656d656e744b657973201013000000101101204d6178696d756d206e756d626572206f6620746f74616c206b65792061677265656d656e74206b65797320746861742063616e2062652073746f72656420666f7220613420444944207375626a6563742e00c42053686f756c642062652067726561746572207468616e20604d61784e65774b657941677265656d656e744b657973602e4c4d6178426c6f636b73547856616c696469747910202c0100000000000008ec20546865206d6178696d756d206e756d626572206f6620626c6f636b732061204449442d617574686f72697a6564206f7065726174696f6e2069739420636f6e736964657265642076616c696420616674657220697473206372656174696f6e2e644d61784e756d6265724f66536572766963657350657244696420101900000004fc20546865206d6178696d756d206e756d626572206f6620736572766963657320746861742063616e2062652073746f72656420756e6465722061204449442e484d61785365727669636549644c656e677468201032000000049020546865206d6178696d756d206c656e677468206f66206120736572766963652049442e504d617853657276696365547970654c656e67746820103200000004c820546865206d6178696d756d206c656e677468206f66206120736572766963652074797065206465736372697074696f6e2e684d61784e756d6265724f6654797065735065725365727669636520100100000004090120546865206d6178696d756d206e756d626572206f662061207479706573206465736372697074696f6e20666f722061207365727669636520656e64706f696e742e4c4d61785365727669636555726c4c656e6774682010c8000000049420546865206d6178696d756d206c656e677468206f66206120736572766963652055524c2e644d61784e756d6265724f6655726c735065725365727669636520100200000004d420546865206d6178696d756d206e756d626572206f6620612055524c7320666f722061207365727669636520656e64706f696e742e0109074024496e666c6174696f6e000000084c496e697469616c506572696f644c656e677468102048a3c800000000000c050120546865206c656e677468206f662074686520696e697469616c20706572696f6420696e2077686963682074686520636f6e7374616e74207265776172642069731101206d696e7465642e204f6e6365207468652063757272656e7420626c6f636b206578636565647320746869732c207265776172647320617265206e6f206675727468657220206973737565642e4c496e697469616c506572696f64526577617264184036f539fdaeb30200000000000000000008fc2054686520616d6f756e74206f66206e65776c792069737375656420746f6b656e732070657220626c6f636b20647572696e672074686520696e697469616c2020706572696f642e0042244469644c6f6f6b757001244469644c6f6f6b75700834436f6e6e6563746564446964730001040219010d07040004a8204d617070696e672066726f6d206163636f756e74206964656e7469666965727320746f20444944732e44436f6e6e65637465644163636f756e747300010802021107b404000cbc204d617070696e672066726f6d2028444944202b206163636f756e74206964656e74696669657229202d3e2028292e0d012054686520656d707479207475706c65206973207573656420617320612073656e74696e656c2076616c756520746f2073696d706c7920696e64696361746520746865982070726573656e6365206f66206120676976656e207475706c6520696e20746865206d61702e01fd04011501041c4465706f736974184000c0afd69136000000000000000000000c0d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974110120746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f7369742063616e2062658c207265636c61696d6564207768656e20746865204449442069732064656c657465642e0115074324576562334e616d65730124576562334e616d65730c144f776e6572000104022901190704000488204d6170206f66206e616d65202d3e206f776e6572736869702064657461696c732e144e616d65730001040200290104000458204d6170206f66206f776e6572202d3e206e616d652e1842616e6e6564000104022901b404000c4c204d6170206f66206e616d65202d3e2028292e00e02049662061206e616d65206b65792069732070726573656e742c20746865206e616d652069732063757272656e746c792062616e6e65642e010d050125010c1c4465706f736974184000d450a85d6b0000000000000000000004bc2054686520616d6f756e74206f66204b494c5420746f206465706f73697420746f20636c61696d2061206e616d652e344d696e4e616d654c656e677468201003000000048820546865206d696e20656e636f646564206c656e677468206f662061206e616d652e344d61784e616d654c656e677468201020000000048820546865206d617820656e636f646564206c656e677468206f662061206e616d652e011d0744445075626c696343726564656e7469616c7301445075626c696343726564656e7469616c73082c43726564656e7469616c7300010805022107250704000cc020546865206d6170206f66207075626c69632063726564656e7469616c7320616c72656164792061747465737465642ef0204974206d6170732066726f6d206120287375626a656374206964202b2063726564656e7469616c20696429202d3e20746865206372656174696f6e6c2064657461696c73206f66207468652063726564656e7469616c2e4843726564656e7469616c5375626a656374730001040230350104001025012041207265766572736520696e646578206d617070696e672066726f6d2063726564656e7469616c20494420746f20746865207375626a656374207468652063726564656e7469616c3c207761732069737375656420746f2e001901204974206974207573656420746f20706572666f726d20656666696369656e74206c6f6f6b7570206f662063726564656e7469616c7320676976656e2074686569722049442e0111050131010c1c4465706f7369741840005c6a51fc45000000000000000000000411012054686520616d6f756e74206f6620746f6b656e7320746f2072657365727665207768656e20617474657374696e672061207075626c69632063726564656e7469616c2e584d6178456e636f646564436c61696d734c656e6774682010a0860100040d0120546865206d6178696d756d206c656e67746820696e206279746573206f662074686520656e636f64656420636c61696d73206f6620612063726564656e7469616c2e484d61785375626a65637449644c656e67746820100c01000008e820546865206d6178696d756d206c656e67746820696e206279746573206f6620746865207261772063726564656e7469616c207375626a65637430206964656e7469666965722e012907453c50617261636861696e53797374656d013c50617261636861696e53797374656d545450656e64696e6756616c69646174696f6e436f64650100340400187d0120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f206265206170706c6965642e00c10120417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f766572777269746520746865205b603a636f6465605d5b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455dad012077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f63657373207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e000501205b77656c6c5f6b6e6f776e5f6b6579733a3a434f44455d3a2073705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f4445444e657756616c69646174696f6e436f64650000340400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000290504000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f64650100ac040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d6265720100201000000000041d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e60557067726164655265737472696374696f6e5369676e616c01002d0704001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f6600003105040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000350704001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e000049070400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d71634865616401004d0780000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d7163486561647301005107040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301002010000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01002010000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d6573736167657301005d0704000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d657373616765730100ad0204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d657373616765730100ad02040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e84416e6e6f756e63656448726d704d6573736167657350657243616e646964617465010020100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000280400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000280400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e44417574686f72697a65645570677261646500006507040004b820546865206e65787420617574686f72697a656420757067726164652c206966207468657265206973206f6e652e60437573746f6d56616c69646174696f6e486561644461746100003404000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00190120536565205b6050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f64617461605d20666f72206d6f726520696e666f726d6174696f6e2e01210501a10100016907503450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100ad0110640000000000000000512458636d705175657565012458636d7051756575652844496e626f756e6458636d7053746174757301006d070400049420537461747573206f662074686520696e626f756e642058434d50206368616e6e656c732e4c496e626f756e6458636d704d657373616765730101080205850734040004190120496e626f756e64206167677265676174652058434d50206d657373616765732e2049742063616e206f6e6c79206265206f6e6520706572205061726149642f626c6f636b2e484f7574626f756e6458636d70537461747573010089070400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205950734040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402ad0134040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e6669670100990774020000000500000001000000821a06000008000700c817a804020004000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e284f76657277656967687400010405109d07040010050120546865206d657373616765732074686174206578636565646564206d617820696e646976696475616c206d65737361676520776569676874206275646765742e003901205468657365206d657373616765207374617920696e20746869732073746f72616765206d617020756e74696c207468657920617265206d616e75616c6c79206469737061746368656420766961582060736572766963655f6f766572776569676874602e50436f756e746572466f724f766572776569676874010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c4f766572776569676874436f756e7401001020000000000000000008690120546865206e756d626572206f66206f766572776569676874206d657373616765732065766572207265636f7264656420696e20604f766572776569676874602e20416c736f20646f75626c657320617320746865206e6578748420617661696c61626c652066726565206f76657277656967687420696e6465782e38517565756553757370656e6465640100ac04000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e01550501a5010001a107522c506f6c6b61646f7458636d0001590501b1010001a507532843756d756c757358636d00000185020001a9075420446d7051756575650120446d7051756575651434436f6e66696775726174696f6e0100ad07280700e40b540202000400044c2054686520636f6e66696775726174696f6e2e2450616765496e6465780100b1074000000000000000000000000000000000044020546865207061676520696e6465782e1450616765730101040220b50704000444205468652071756575652070616765732e284f7665727765696768740001040210b9070400046420546865206f766572776569676874206d657373616765732e50436f756e746572466f724f766572776569676874010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617001ad050189020001bd0755c107042048436865636b4e6f6e5a65726f53656e646572c907b440436865636b5370656356657273696f6ecd072038436865636b547856657273696f6ed1072030436865636b47656e65736973d5073038436865636b4d6f7274616c697479d9073028436865636b4e6f6e6365e107b42c436865636b576569676874e507b4604368617267655472616e73616374696f6e5061796d656e74e907b48504"} \ No newline at end of file +{"result":"0x6d6574610e7508000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273200120526566436f756e7400012470726f766964657273200120526566436f756e7400012c73756666696369656e7473200120526566436f756e740001106461746114012c4163636f756e74446174610000100000050600140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200000050500240c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540128000c01186e6f726d616c2801045400012c6f7065726174696f6e616c280104540001246d616e6461746f7279280104540000280c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d652c010c75363400012870726f6f665f73697a652c010c75363400002c000006100030083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000034000002080038102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f67733c013c5665633c4469676573744974656d3e00003c000002400040102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e00060024436f6e73656e7375730800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000400105365616c0800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000500144f74686572040034011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e74557064617465640008000044000003040000000800480000024c004c08306672616d655f73797374656d2c4576656e745265636f7264080445015004540130000c01147068617365c502011450686173650001146576656e7450010445000118746f70696373b10101185665633c543e00005008447370697269746e65745f72756e74696d653052756e74696d654576656e740001801853797374656d04005401706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c496e6469636573040078017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e0005002042616c616e63657304007c017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000600485472616e73616374696f6e5061796d656e7404008401a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0007001c53657373696f6e040088015470616c6c65745f73657373696f6e3a3a4576656e740016004050617261636861696e5374616b696e6704008c018470617261636861696e5f7374616b696e673a3a4576656e743c52756e74696d653e0015002444656d6f6372616379040094018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e001e001c436f756e63696c0400a801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400b801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020004c546563686e6963616c4d656d626572736869700400bc01fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365313e0022002054726561737572790400c0017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0023001c5574696c6974790400c4015470616c6c65745f7574696c6974793a3a4576656e740028001c56657374696e670400c8017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e002900245363686564756c65720400cc018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e002a001450726f78790400d8017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002b0020507265696d6167650400e4017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e002c0038546970734d656d626572736869700400e801fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365323e002d0010546970730400ec016c70616c6c65745f746970733a3a4576656e743c52756e74696d653e002e00204d756c74697369670400f0017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e002f001443747970650400f8015463747970653a3a4576656e743c52756e74696d653e003d002c4174746573746174696f6e0400fc016c6174746573746174696f6e3a3a4576656e743c52756e74696d653e003e002844656c65676174696f6e04000901016864656c65676174696f6e3a3a4576656e743c52756e74696d653e003f000c44696404001101014c6469643a3a4576656e743c52756e74696d653e004000244469644c6f6f6b757004001501018470616c6c65745f6469645f6c6f6f6b75703a3a4576656e743c52756e74696d653e00430024576562334e616d657304002501018470616c6c65745f776562335f6e616d65733a3a4576656e743c52756e74696d653e004400445075626c696343726564656e7469616c730400310101887075626c69635f63726564656e7469616c733a3a4576656e743c52756e74696d653e004500244d6967726174696f6e0400a101018070616c6c65745f6d6967726174696f6e3a3a4576656e743c52756e74696d653e0046003c50617261636861696e53797374656d0400d90101bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0050002458636d7051756575650400dd0101a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e0052002c506f6c6b61646f7458636d0400e901016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e0053002843756d756c757358636d0400bd02018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e00540020446d7051756575650400c10201a063756d756c75735f70616c6c65745f646d705f71756575653a3a4576656e743c52756e74696d653e00550000540c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5801304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7264013444697370617463684572726f7200013464697370617463685f696e666f5801304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736830011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e580c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874280118576569676874000114636c6173735c01344469737061746368436c617373000120706179735f6665656001105061797300005c0c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000600c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000064082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040068012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e04006c0128546f6b656e4572726f720007002841726974686d65746963040070013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007401485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d000068082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7244018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d00006c082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000070083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000074082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000780c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e047c54686520604576656e746020656e756d206f6620746869732070616c6c65747c0c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001541c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738001185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748014346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000840c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574880c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657820013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748c0c4470617261636861696e5f7374616b696e671870616c6c6574144576656e74040454000154204e6577526f756e640800100144426c6f636b4e756d626572466f723c543e000020013053657373696f6e496e6465780000088041206e6577207374616b696e6720726f756e642068617320737461727465642e785c5b626c6f636b206e756d6265722c20726f756e64206e756d6265725c5d50456e7465726564546f7043616e646964617465730400000130543a3a4163636f756e744964000108cc41206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d444c656674546f7043616e646964617465730400000130543a3a4163636f756e744964000208d8416e206163636f756e74207761732072656d6f7665642066726f6d2074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d604a6f696e6564436f6c6c61746f7243616e646964617465730800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000308e041206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620636f6c6c61746f722063616e646964617465732ebc5c5b6163636f756e742c20616d6f756e74207374616b656420627920746865206e65772063616e6469646174655c5d48436f6c6c61746f725374616b65644d6f72650c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00040801014120636f6c6c61746f722063616e6469646174652068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d48436f6c6c61746f725374616b65644c6573730c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00050801014120636f6c6c61746f722063616e64696461746520686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d54436f6c6c61746f725363686564756c6564457869740c0020013053657373696f6e496e6465780000000130543a3a4163636f756e744964000020013053657373696f6e496e64657800061001014120636f6c6c61746f722063616e646964617465206861732073746172746564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e646964617465732e205c5b726f756e64206e756d6265722c20636f6c6c61746f722773206163636f756e742c20726f756e64206e756d626572207768656ee074686520636f6c6c61746f722077696c6c206265206566666563746976656c792072656d6f7665642066726f6d2074686520736574206f663063616e646964617465735c5d50436f6c6c61746f7243616e63656c6564457869740400000130543a3a4163636f756e74496400070c05014120636f6c6c61746f722063616e646964617465206861732063616e63656c6564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e6469646174657320616e6420776173206164646564206261636b20746f207468652063616e64696461746520706f6f6c2e205c5b636f6c6c61746f722773246163636f756e745c5d3443616e6469646174654c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000808cc416e206163636f756e7420686173206c6566742074686520736574206f6620636f6c6c61746f722063616e646964617465732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d3c436f6c6c61746f7252656d6f7665640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000908e4416e206163636f756e742077617320666f726365646c792072656d6f7665642066726f6d207468652020736574206f6620636f6c6c61746f72c863616e646964617465732e205c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d604d617843616e6469646174655374616b654368616e676564040018013042616c616e63654f663c543e000a08b4546865206d6178696d756d2063616e646964617465207374616b6520686173206265656e206368616e6765642e485c5b6e6577206d617820616d6f756e745c5d4c44656c656761746f725374616b65644d6f72651000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000b0cf0412064656c656761746f722068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d4c44656c656761746f725374616b65644c6573731000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000c0cf0412064656c656761746f7220686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d3444656c656761746f724c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000d08a8416e206163636f756e7420686173206c6566742074686520736574206f662064656c656761746f72732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d2844656c65676174696f6e1000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000e0cc8416e206163636f756e74206861732064656c6567617465642061206e657720636f6c6c61746f722063616e6469646174652e11015c5b6163636f756e742c20616d6f756e74206f662066756e6473207374616b65642c20746f74616c20616d6f756e74206f662064656c656761746f7273272066756e64738c7374616b656420666f722074686520636f6c6c61746f722063616e6469646174655c5d4844656c65676174696f6e5265706c616365641800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000f180d0141206e65772064656c65676174696f6e20686173207265706c6163656420616e206578697374696e67206f6e6520696e2074686520736574206f66206f6e676f696e67010164656c65676174696f6e7320666f72206120636f6c6c61746f722063616e6469646174652e205c5b6e65772064656c656761746f722773206163636f756e742c0901616d6f756e74206f662066756e6473207374616b656420696e20746865206e65772064656c65676174696f6e2c207265706c616365642064656c656761746f7227730d016163636f756e742c20616d6f756e74206f662066756e6473207374616b656420696e20746865207265706c6163652064656c65676174696f6e2c20636f6c6c61746f72050163616e6469646174652773206163636f756e742c206e657720746f74616c20616d6f756e74206f662064656c656761746f7273272066756e6473207374616b656470666f722074686520636f6c6c61746f722063616e6469646174655c5d5444656c656761746f724c656674436f6c6c61746f721000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00100cdc416e206163636f756e74206861732073746f707065642064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e09015c5b6163636f756e742c20636f6c6c61746f722063616e6469646174652773206163636f756e742c206f6c6420616d6f756e74206f662064656c656761746f727327d866756e6473207374616b65642c206e657720616d6f756e74206f662064656c656761746f7273272066756e6473207374616b65645c5d2052657761726465640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e001108c04120636f6c6c61746f72206f7220612064656c656761746f72206861732072656365697665642061207265776172642e745c5b6163636f756e742c20616d6f756e74206f66207265776172645c5d44526f756e64496e666c6174696f6e536574100090012c5065727175696e74696c6c000090012c5065727175696e74696c6c000090012c5065727175696e74696c6c000090012c5065727175696e74696c6c00120c0501496e666c6174696f6e20636f6e66696775726174696f6e20666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e09015c5b6d6178696d756d20636f6c6c61746f722773207374616b696e6720726174652c206d6178696d756d20636f6c6c61746f7227732072657761726420726174652c0d016d6178696d756d2064656c656761746f722773207374616b696e6720726174652c206d6178696d756d2064656c656761746f7227732072657761726420726174655c5d604d617853656c656374656443616e64696461746573536574080020010c753332000020010c753332001308f0546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c656374656420696e20667574757265dc76616c69646174696f6e20726f756e647320686173206368616e6765642e205c5b6f6c642076616c75652c206e65772076616c75655c5d44426c6f636b73506572526f756e64536574100020013053657373696f6e496e6465780000100144426c6f636b4e756d626572466f723c543e0000100144426c6f636b4e756d626572466f723c543e0000100144426c6f636b4e756d626572466f723c543e00140cf8546865206c656e67746820696e20626c6f636b7320666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e01015c5b726f756e64206e756d6265722c20666972737420626c6f636b20696e207468652063757272656e7420726f756e642c206f6c642076616c75652c206e65771c76616c75655c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574900c3473705f61726974686d65746963287065725f7468696e67732c5065727175696e74696c6c0000040010010c7536340000940c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001442050726f706f73656408013870726f706f73616c5f696e64657820012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e64657820012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e64657820013c5265666572656e64756d496e6465780001247468726573686f6c64980134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e64657820013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e64657820013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e64657820013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011048323536000114756e74696c100144426c6f636b4e756d626572466f723c543e00090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f6861736830011048323536000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e64657820013c5265666572656e64756d496e646578000110766f74659c01644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e64657820012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e64657820012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e2c4d657461646174615365740801146f776e6572a401344d657461646174614f776e6572043c4d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e0e04d44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c65617265640801146f776e6572a401344d657461646174614f776e6572043c4d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e0f04e44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e20636c65617265642e4c4d657461646174615472616e736665727265640c0128707265765f6f776e6572a401344d657461646174614f776e6572046050726576696f7573206d65746164617461206f776e65722e01146f776e6572a401344d657461646174614f776e6572044c4e6577206d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e1004ac4d6574616461746120686173206265656e207472616e7366657272656420746f206e6577206f776e65722e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574980c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f72697479000200009c0c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f7465a00110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e636500010000a00c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000a40c4070616c6c65745f64656d6f6372616379147479706573344d657461646174614f776e657200010c2045787465726e616c0000002050726f706f73616c040020012450726f70496e646578000100285265666572656e64756d040020013c5265666572656e64756d496e64657800020000a80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6420012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f746564ac0110626f6f6c00010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ac0000050000b00418526573756c7408045401b4044501640108084f6b0400b4000000000c4572720400640000010000b40000040000b80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6420012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f746564ac0110626f6f6c00010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574bc0c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c00c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001242050726f706f73656404013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c40c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657820010c7533320001146572726f7264013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7264013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74b001384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c80c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cc0c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657820010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657820010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736bd001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964d401404f7074696f6e3c5461736b4e616d653e000118726573756c74b001384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736bd001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964d401404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736bd001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964d401404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736bd001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964d401404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652ed000000408102000d404184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000d80c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74b001384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e646578e0010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736830013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00040450412070726f7879207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574dc08447370697269746e65745f72756e74696d652450726f7879547970650001180c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e63650002004050617261636861696e5374616b696e670003002c43616e63656c50726f7879000400484e6f6e4465706f736974436c61696d696e6700050000e00000050400e40c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f7465640401106861736830011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e245265717565737465640401106861736830011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c65617265640401106861736830011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e80c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ec0c2c70616c6c65745f746970731870616c6c6574144576656e74080454000449000114184e65775469700401207469705f6861736830011c543a3a486173680000049441206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e28546970436c6f73696e670401207469705f6861736830011c543a3a48617368000104d841207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e24546970436c6f7365640c01207469705f6861736830011c543a3a4861736800010c77686f000130543a3a4163636f756e7449640001187061796f757418013c42616c616e63654f663c542c20493e0002048441207469702073756767657374696f6e20686173206265656e20636c6f7365642e305469705265747261637465640401207469705f6861736830011c543a3a486173680003049041207469702073756767657374696f6e20686173206265656e207265747261637465642e28546970536c61736865640c01207469705f6861736830011c543a3a4861736800011866696e646572000130543a3a4163636f756e74496400011c6465706f73697418013c42616c616e63654f663c542c20493e0004048841207469702073756767657374696f6e20686173206265656e20736c61736865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f00c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c74b001384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f4083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657820010c7533320000f80c1463747970651870616c6c6574144576656e74040454000108304354797065437265617465640800000144437479706543726561746f724f663c543e00003001384374797065486173684f663c543e0000087441206e657720435479706520686173206265656e20637265617465642e885c5b63726561746f72206964656e7469666965722c20435479706520686173685c5d3043547970655570646174656404003001384374797065486173684f663c543e000108ac496e666f726d6174696f6e2061626f7574206120435479706520686173206265656e20757064617465642e385c5b435479706520686173685c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574fc0c2c6174746573746174696f6e1870616c6c6574144576656e74040454000110484174746573746174696f6e43726561746564100000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00003001384374797065486173684f663c543e0000010101704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e0000088c41206e6577206174746573746174696f6e20686173206265656e20637265617465642e05015c5b61747465737465722049442c20636c61696d20686173682c20435479706520686173682c20286f7074696f6e616c292064656c65676174696f6e2049445c5d484174746573746174696f6e5265766f6b6564080000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00010880416e206174746573746174696f6e20686173206265656e207265766f6b65642e685c5b6163636f756e742069642c20636c61696d20686173685c5d484174746573746174696f6e52656d6f766564080000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00020880416e206174746573746174696f6e20686173206265656e2072656d6f7665642e685c5b6163636f756e742069642c20636c61696d20686173685c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e0000300138436c61696d486173684f663c543e0003080501546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e2e685c5b6163636f756e742069642c20636c61696d20686173685c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574010104184f7074696f6e0404540105010108104e6f6e6500000010536f6d6504000501000001000005010c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c417574686f72697a6174696f6e4964043044656c65676174696f6e4964013001042844656c65676174696f6e040030013044656c65676174696f6e49640000000009010c2864656c65676174696f6e1870616c6c6574144576656e7404045400011c40486965726172636879437265617465640c0000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00003001384374797065486173684f663c543e0000088441206e65772068696572617263687920686173206265656e20637265617465642ea05c5b63726561746f722049442c20726f6f74206e6f64652049442c20435459504520686173685c5d404869657261726368795265766f6b6564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00010874412068696572617263687920686173206265656e207265766f6b65642e705c5b7265766f6b65722049442c20726f6f74206e6f64652049445c5d4048696572617263687952656d6f766564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000208dc412068696572617263687920686173206265656e2072656d6f7665642066726f6d207468652073746f72616765206f6e20636861696e2e705c5b72656d6f7665722049442c20726f6f74206e6f64652049445c5d4444656c65676174696f6e43726561746564180000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000000014044656c656761746f7249644f663c543e00000d01012c5065726d697373696f6e7300030c8841206e65772064656c65676174696f6e20686173206265656e20637265617465642efc5c5b63726561746f722049442c20726f6f74206e6f64652049442c2064656c65676174696f6e206e6f64652049442c20706172656e74206e6f64652049442c6864656c65676174652049442c207065726d697373696f6e735c5d4444656c65676174696f6e5265766f6b6564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00040878412064656c65676174696f6e20686173206265656e207265766f6b65642e885c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d4444656c65676174696f6e52656d6f76656408000001384163636f756e7449644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00050878412064656c65676174696f6e20686173206265656e2072656d6f7665642e885c5b72656d6f7665722049442c2064656c65676174696f6e206e6f64652049445c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000608f8546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720612064656c65676174696f6eac737562747265652e205c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c65740d010c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368792c5065726d697373696f6e7300000401106269747320010c753332000011010c0c6469641870616c6c6574144576656e74040454000110284469644372656174656408000001384163636f756e7449644f663c543e00000001484469644964656e7469666965724f663c543e0000086c41206e65772044494420686173206265656e20637265617465642e985c5b7472616e73616374696f6e207369676e65722c20444944206964656e7469666965725c5d284469645570646174656404000001484469644964656e7469666965724f663c543e0001085c412044494420686173206265656e20757064617465642e485c5b444944206964656e7469666965725c5d2844696444656c6574656404000001484469644964656e7469666965724f663c543e0002085c412044494420686173206265656e2064656c657465642e485c5b444944206964656e7469666965725c5d4444696443616c6c4469737061746368656408000001484469644964656e7469666965724f663c543e0000b001384469737061746368526573756c74000308a041204449442d617574686f72697365642063616c6c20686173206265656e2065786563757465642e7c5c5b4449442063616c6c65722c20646973706174636820726573756c745c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c657415010c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144576656e74040454000110584173736f63696174696f6e45737461626c69736865640800190101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000004f841206e6577206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e742049442077617320637265617465642e484173736f63696174696f6e52656d6f7665640800190101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000104ec416e206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e74204944207761732072656d6f7665642e444d6967726174696f6e50726f6772657373000204c454686572652077617320736f6d652070726f677265737320696e20746865206d6967726174696f6e2070726f636573732e484d6967726174696f6e436f6d706c65746564000304dc416c6c204163636f756e744964732068617665206265656e206d6967726174656420746f204c696e6b61626c654163636f756e7449642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657419010c4470616c6c65745f6469645f6c6f6f6b7570406c696e6b61626c655f6163636f756e74444c696e6b61626c654163636f756e7449640001082c4163636f756e744964323004001d01012c4163636f756e74496432300000002c4163636f756e7449643332040000012c4163636f756e7449643332000100001d010c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e742c4163636f756e744964323000000400210101205b75383b2032305d0000210100000314000000080025010c4470616c6c65745f776562335f6e616d65731870616c6c6574144576656e740404540001103c576562334e616d65436c61696d65640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6529010134576562334e616d654f663c543e0000047041206e6577206e616d6520686173206265656e20636c61696d65642e40576562334e616d6552656c65617365640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6529010134576562334e616d654f663c543e0001046441206e616d6520686173206265656e2072656c65617365642e38576562334e616d6542616e6e65640401106e616d6529010134576562334e616d654f663c543e0002045c41206e616d6520686173206265656e2062616e6e65642e40576562334e616d65556e62616e6e65640401106e616d6529010134576562334e616d654f663c543e0003046441206e616d6520686173206265656e20756e62616e6e65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657429010c4470616c6c65745f776562335f6e616d657324776562335f6e616d65344173636969576562334e616d65040454000004002d010180426f756e6465645665633c75382c20543a3a4d61784e616d654c656e6774683e00002d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000031010c487075626c69635f63726564656e7469616c731870616c6c6574144576656e740404540001104043726564656e7469616c53746f7265640801287375626a6563745f696435010130543a3a5375626a65637449640488546865207375626a656374206f6620746865206e65772063726564656e7469616c2e013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0474546865206964206f6620746865206e65772063726564656e7469616c2e0004a041206e6577207075626c69632063726564656e7469616c20686173206265656e206973737565642e4443726564656e7469616c52656d6f7665640801287375626a6563745f696435010130543a3a5375626a65637449640498546865207375626a656374206f66207468652072656d6f7665642063726564656e7469616c2e013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0484546865206964206f66207468652072656d6f7665642063726564656e7469616c2e01049841207075626c69632063726564656e7469616c7320686173206265656e2072656d6f7665642e4443726564656e7469616c5265766f6b656404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0484546865206964206f6620746865207265766f6b65642063726564656e7469616c2e02049441207075626c69632063726564656e7469616c20686173206265656e207265766f6b65642e4c43726564656e7469616c556e7265766f6b656404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e048c546865206964206f662074686520756e7265766f6b65642063726564656e7469616c2e03049c41207075626c69632063726564656e7469616c20686173206265656e20756e7265766f6b65642e0490546865206576656e74732067656e65726174656420627920746869732070616c6c65742e35010c3872756e74696d655f636f6d6d6f6e18617373657473204173736574446964000004003901013c41737365744964656e746966696572000039010c3c6b696c745f61737365745f646964730876312041737365744469640000080120636861696e5f69643d01011c436861696e496400012061737365745f69646501011c4173736574496400003d01103c6b696c745f61737365745f6469647314636861696e0876311c436861696e49640001141845697031353504004101013c4569703135355265666572656e63650000001842697031323204004501016447656e657369734865784861736833325265666572656e63650001001c446f7473616d6104004501016447656e657369734865784861736833325265666572656e636500020018536f6c616e6104004d01017047656e657369734261736535384861736833325265666572656e63650003001c47656e6572696304005501013847656e65726963436861696e4964000400004101103c6b696c745f61737365745f6469647314636861696e0876313c4569703135355265666572656e6365000004001801107531323800004501103c6b696c745f61737365745f6469647314636861696e0876316447656e657369734865784861736833325265666572656e636500000400490101205b75383b2031365d000049010000031000000008004d01103c6b696c745f61737365745f6469647314636861696e0876317047656e657369734261736535384861736833325265666572656e63650000040051010170426f756e6465645665633c75382c20436f6e73745533323c33323e3e000051010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00005501103c6b696c745f61737365745f6469647314636861696e0876313847656e65726963436861696e496400000801246e616d6573706163655901015447656e65726963436861696e4e616d6573706163650001247265666572656e63656101015447656e65726963436861696e5265666572656e636500005901103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e4e616d657370616365000004005d0101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f434841494e5f4e414d4553504143455f4c454e4754485f5533323e3e00005d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00006101103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e5265666572656e636500000400510101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f434841494e5f5245464552454e43455f4c454e4754485f5533323e3e00006501103c6b696c745f61737365745f646964731461737365740876311c4173736574496400011418536c6970343404006901013c536c697034345265666572656e636500000014457263323004007501018445766d536d617274436f6e747261637446756e6769626c655265666572656e63650001001845726337323104007901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650002001c4572633131353504007901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650003001c47656e6572696304008901013847656e6572696341737365744964000400006901103c6b696c745f61737365745f646964731461737365740876313c536c697034345265666572656e6365000004006d0101105532353600006d01083c7072696d69746976655f7479706573105532353600000400710101205b7536343b20345d000071010000030400000010007501103c6b696c745f61737365745f646964731461737365740876318445766d536d617274436f6e747261637446756e6769626c655265666572656e636500000400210101205b75383b2032305d00007901103c6b696c745f61737365745f646964731461737365740876319045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e6365000008007501018445766d536d617274436f6e747261637446756e6769626c655265666572656e636500007d0101b44f7074696f6e3c45766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e7469666965723e00007d0104184f7074696f6e0404540181010108104e6f6e6500000010536f6d650400810100000100008101103c6b696c745f61737365745f646964731461737365740876319445766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e74696669657200000400850101f4426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4944454e5449464945525f4c454e4754485f5533323e3e000085010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00008901103c6b696c745f61737365745f646964731461737365740876313847656e657269634173736574496400000c01246e616d6573706163658d01015447656e6572696341737365744e616d6573706163650001247265666572656e63659101015447656e6572696341737365745265666572656e63650001086964990101784f7074696f6e3c47656e6572696341737365744964656e7469666965723e00008d01103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365744e616d657370616365000004005d0101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4e414d4553504143455f4c454e4754485f5533323e3e00009101103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365745265666572656e636500000400950101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f5245464552454e43455f4c454e4754485f5533323e3e000095010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000990104184f7074696f6e040454019d010108104e6f6e6500000010536f6d6504009d0100000100009d01103c6b696c745f61737365745f646964731461737365740876315847656e6572696341737365744964656e74696669657200000400850101f4426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4944454e5449464945525f4c454e4754485f5533323e3e0000a1010c4070616c6c65745f6d6967726174696f6e1870616c6c6574144576656e7404045400010438456e7472696573557064617465640400a501014c456e7472696573546f4d6967726174653c543e000000047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a5010c4070616c6c65745f6d6967726174696f6e1870616c6c657440456e7472696573546f4d69677261746504045401a9010018012c6174746573746174696f6ead01010101426f756e6465645665633c436c61696d486173684f663c543e2c3c5420617320436f6e6669673e3a3a4d61784d6967726174696f6e7350657250616c6c65743e00012864656c65676174696f6ead01012101426f756e6465645665633c44656c65676174696f6e4e6f646549644f663c543e2c3c5420617320436f6e6669673e3a3a0a4d61784d6967726174696f6e7350657250616c6c65743e00010c646964b501011501426f756e6465645665633c4469644964656e7469666965724f663c543e2c3c5420617320436f6e6669673e3a3a4d61784d6967726174696f6e7350657250616c6c65740a3e0001186c6f6f6b7570bd01010d01426f756e6465645665633c4c696e6b61626c654163636f756e7449642c3c5420617320436f6e6669673e3a3a4d61784d6967726174696f6e7350657250616c6c65743e00010c77336ec50101fc426f756e6465645665633c576562334e616d654f663c543e2c3c5420617320436f6e6669673e3a3a4d61784d6967726174696f6e7350657250616c6c65743e0001487075626c69635f63726564656e7469616c73cd01015901426f756e6465645665633c285375626a65637449644f663c543e2c2043726564656e7469616c49644f663c543e292c3c5420617320436f6e6669673e3a3a0a4d61784d6967726174696f6e7350657250616c6c65743e0000a90108447370697269746e65745f72756e74696d651c52756e74696d6500000000ad010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400b10101185665633c543e0000b1010000023000b5010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e0000b9010000020000bd010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011901045300000400c10101185665633c543e0000c101000002190100c5010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012901045300000400c90101185665633c543e0000c901000002290100cd010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d101045300000400d50101185665633c543e0000d1010000040835013000d501000002d10100d9010c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e7404045400011c6056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d20015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e4455706772616465417574686f72697a6564040124636f64655f6861736830011c543a3a486173680003047c416e207570677261646520686173206265656e20617574686f72697a65642e60446f776e776172644d657373616765735265636569766564040114636f756e7420010c7533320004040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564280118576569676874000120646d715f6865616430014472656c61795f636861696e3a3a48617368000504e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e000604b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574dd010c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e7404045400011c1c537563636573730c01306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d4861736800011877656967687428011857656967687400000464536f6d652058434d20776173206578656375746564206f6b2e104661696c1001306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d486173680001146572726f72e101012058636d4572726f7200011877656967687428011857656967687400010440536f6d652058434d206661696c65642e2842616456657273696f6e0401306d6573736167655f6861736804011c58636d48617368000204544261642058434d2076657273696f6e20757365642e24426164466f726d61740401306d6573736167655f6861736804011c58636d48617368000304504261642058434d20666f726d617420757365642e3c58636d704d65737361676553656e740401306d6573736167655f6861736804011c58636d48617368000404c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e484f766572776569676874456e71756575656410011873656e646572e501011850617261496400011c73656e745f617420014052656c6179426c6f636b4e756d626572000114696e64657810013c4f766572776569676874496e6465780001207265717569726564280118576569676874000504d4416e2058434d2065786365656465642074686520696e646976696475616c206d65737361676520776569676874206275646765742e484f7665727765696768745365727669636564080114696e64657810013c4f766572776569676874496e646578000110757365642801185765696768740006044101416e2058434d2066726f6d20746865206f7665727765696768742071756575652077617320657865637574656420776974682074686520676976656e2061637475616c2077656967687420757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e101100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002801185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d697400270000e5010c48706f6c6b61646f745f70617261636861696e287072696d6974697665730849640000040020010c7533320000e9010c2870616c6c65745f78636d1870616c6c6574144576656e7404045400015c24417474656d7074656404011c6f7574636f6d65ed01015078636d3a3a6c61746573743a3a4f7574636f6d65000004a8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e1053656e741001186f726967696ef10101344d756c74694c6f636174696f6e00012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e00011c6d6573736167651502011c58636d3c28293e0001286d6573736167655f696404011c58636d486173680001045c412058434d206d657373616765207761732073656e742e48556e6578706563746564526573706f6e73650801186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400020c5901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e34526573706f6e7365526561647908012071756572795f696410011c51756572794964000120726573706f6e73653d020120526573706f6e73650003085d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e204e6f7469666965640c012071756572795f696410011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380004085901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e404e6f746966794f76657277656967687414012071756572795f696410011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800013461637475616c5f77656967687428011857656967687400014c6d61785f62756467657465645f77656967687428011857656967687400050c6101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20636f756c6441016e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e4c4e6f7469667944697370617463684572726f720c012071756572795f696410011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380006085501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e484e6f746966794465636f64654661696c65640c012071756572795f696410011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800070c5101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e40496e76616c6964526573706f6e6465720c01186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400014465787065637465645f6c6f636174696f6e610201544f7074696f6e3c4d756c74694c6f636174696f6e3e00080c5901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5c496e76616c6964526573706f6e64657256657273696f6e0801186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400091c5101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e34526573706f6e736554616b656e04012071756572795f696410011c51756572794964000a04c8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e34417373657473547261707065640c011068617368300110483235360001186f726967696ef10101344d756c74694c6f636174696f6e0001186173736574738102015056657273696f6e65644d756c7469417373657473000b04b8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e5456657273696f6e4368616e67654e6f74696669656410012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e000118726573756c7420012858636d56657273696f6e000110636f73742102012c4d756c74694173736574730001286d6573736167655f696404011c58636d48617368000c0c2501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e5c537570706f7274656456657273696f6e4368616e6765640801206c6f636174696f6ef10101344d756c74694c6f636174696f6e00011c76657273696f6e20012858636d56657273696f6e000d08390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e504e6f7469667954617267657453656e644661696c0c01206c6f636174696f6ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c517565727949640001146572726f72e101012058636d4572726f72000e0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e644e6f746966795461726765744d6967726174696f6e4661696c0801206c6f636174696f6eb902015856657273696f6e65644d756c74694c6f636174696f6e00012071756572795f696410011c51756572794964000f0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e54496e76616c69645175657269657256657273696f6e0801186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400101c5501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e38496e76616c6964517565726965721001186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400014065787065637465645f71756572696572f10101344d756c74694c6f636174696f6e0001506d617962655f61637475616c5f71756572696572610201544f7074696f6e3c4d756c74694c6f636174696f6e3e00110c5d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5056657273696f6e4e6f74696679537461727465640c012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e000110636f73742102012c4d756c74694173736574730001286d6573736167655f696404011c58636d486173680012085901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e5856657273696f6e4e6f746966795265717565737465640c012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e000110636f73742102012c4d756c74694173736574730001286d6573736167655f696404011c58636d486173680013043d015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e642075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e6056657273696f6e4e6f74696679556e7265717565737465640c012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e000110636f73742102012c4d756c74694173736574730001286d6573736167655f696404011c58636d4861736800140461015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e204665657350616964080118706179696e67f10101344d756c74694c6f636174696f6e000110666565732102012c4d756c7469417373657473001504310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e34417373657473436c61696d65640c011068617368300110483235360001186f726967696ef10101344d756c74694c6f636174696f6e0001186173736574738102015056657273696f6e65644d756c7469417373657473001604c0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e2061737365742074726170047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ed01100c78636d087633187472616974731c4f7574636f6d6500010c20436f6d706c657465040028011857656967687400000028496e636f6d706c65746508002801185765696768740000e10101144572726f72000100144572726f720400e10101144572726f7200020000f101100c78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72f50101244a756e6374696f6e730000f501100c78636d087633246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400f90101204a756e6374696f6e0001000858320800f90101204a756e6374696f6e0000f90101204a756e6374696f6e0002000858330c00f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0003000858341000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0004000858351400f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0005000858361800f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0006000858371c00f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0007000858382000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e00080000f901100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400fd01010c7533320000002c4163636f756e744964333208011c6e6574776f726b010201444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b010201444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726b010201444f7074696f6e3c4e6574776f726b49643e00010c6b6579210101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e646578040009020110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c69747908010869640d020118426f647949640001107061727411020120426f6479506172740008003c476c6f62616c436f6e73656e7375730400050201244e6574776f726b496400090000fd010000062000010204184f7074696f6e0404540105020108104e6f6e6500000010536f6d650400050200000100000502100c78636d087633206a756e6374696f6e244e6574776f726b496400012824427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657210010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090000090200000618000d02100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040044011c5b75383b20345d00010014496e6465780400fd01010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e000800205472656173757279000900001102100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74fd01010c753332000100204672616374696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c7533320004000015020c0c78636d0876330c58636d041043616c6c00000400190201585665633c496e737472756374696f6e3c43616c6c3e3e000019020000021d02001d020c0c78636d0876332c496e737472756374696f6e041043616c6c0001c0345769746864726177417373657404002102012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404002102012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404002102012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e73653d020120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572610201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e7366657241737365740801186173736574732102012c4d756c746941737365747300012c62656e6566696369617279f10101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574732102012c4d756c746941737365747300011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64650201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c6902014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572fd01010c7533320001406d61785f6d6573736167655f73697a65fd01010c7533320001306d61785f6361706163697479fd01010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74fd01010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72fd01010c75333200011873656e646572fd01010c753332000124726563697069656e74fd01010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400f5010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f7204006d0201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473710201404d756c7469417373657446696c74657200012c62656e6566696369617279f10101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473710201404d756c7469417373657446696c74657200011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e000e003445786368616e676541737365740c011067697665710201404d756c7469417373657446696c74657200011077616e742102012c4d756c746941737365747300011c6d6178696d616cac0110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473710201404d756c7469417373657446696c74657200011c72657365727665f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473710201404d756c7469417373657446696c74657200011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f6d0201445175657279526573706f6e7365496e666f000118617373657473710201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573290201284d756c746941737365740001307765696768745f6c696d69747d02012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204001502012458636d3c43616c6c3e0015002c536574417070656e64697804001502012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574732102012c4d756c74694173736574730001187469636b6574f10101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e417373657404002102012c4d756c7469417373657473001c002c457870656374417373657404002102012c4d756c7469417373657473001d00304578706563744f726967696e0400610201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400410201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400590201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6534011c5665633c75383e000134726573706f6e73655f696e666f6d0201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578fd01010c7533320001106e616d6534011c5665633c75383e00012c6d6f64756c655f6e616d6534011c5665633c75383e00012c63726174655f6d616a6f72fd01010c75333200013c6d696e5f63726174655f6d696e6f72fd01010c753332002200505265706f72745472616e7361637453746174757304006d0201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400f90101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726b050201244e6574776f726b496400012c64657374696e6174696f6ef5010154496e746572696f724d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e002600244c6f636b41737365740801146173736574290201284d756c74694173736574000120756e6c6f636b6572f10101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574290201284d756c74694173736574000118746172676574f10101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574290201284d756c746941737365740001146f776e6572f10101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574290201284d756c746941737365740001186c6f636b6572f10101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177ac0110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400f10101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747d02012c5765696768744c696d6974000130636865636b5f6f726967696e610201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f00002102100c78636d087633286d756c746961737365742c4d756c7469417373657473000004002502013c5665633c4d756c746941737365743e000025020000022902002902100c78636d087633286d756c74696173736574284d756c74694173736574000008010869642d02011c4173736574496400010c66756e3102012c46756e676962696c69747900002d02100c78636d087633286d756c746961737365741c4173736574496400010820436f6e63726574650400f10101344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d000100003102100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c65040009020110753132380000002c4e6f6e46756e6769626c650400350201344173736574496e7374616e6365000100003502100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400090201107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804003902011c5b75383b20385d0003001c417272617931360400490101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d0005000039020000030800000008003d020c0c78636d08763320526573706f6e7365000118104e756c6c0000001841737365747304002102012c4d756c74694173736574730001003c457865637574696f6e526573756c740400410201504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040020013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f040049020198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c740400590201384d617962654572726f72436f646500050000410204184f7074696f6e0404540145020108104e6f6e6500000010536f6d6504004502000001000045020000040820e1010049020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d02045300000400550201185665633c543e00004d020c0c78636d0876332850616c6c6574496e666f0000180114696e646578fd01010c7533320001106e616d6551020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d6551020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72fd01010c7533320001146d696e6f72fd01010c7533320001147061746368fd01010c753332000051020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000055020000024d020059020c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f7204005d02018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000100385472756e63617465644572726f7204005d02018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000200005d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000610204184f7074696f6e04045401f1010108104e6f6e6500000010536f6d650400f101000001000065020c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d0003000069020c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656434011c5665633c75383e00006d020c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f77656967687428011857656967687400007102100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504002102012c4d756c74694173736574730000001057696c6404007502013857696c644d756c74694173736574000100007502100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f6608010869642d02011c4173736574496400010c66756e7902013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400fd01010c75333200020030416c6c4f66436f756e7465640c010869642d02011c4173736574496400010c66756e7902013c57696c6446756e676962696c697479000114636f756e74fd01010c753332000300007902100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c65000100007d020c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400280118576569676874000100008102080c78636d5056657273696f6e65644d756c746941737365747300010808563204008502013c76323a3a4d756c746941737365747300010008563304002102013c76333a3a4d756c7469417373657473000300008502100c78636d087632286d756c746961737365742c4d756c7469417373657473000004008902013c5665633c4d756c746941737365743e000089020000028d02008d02100c78636d087632286d756c74696173736574284d756c74694173736574000008010869649102011c4173736574496400010c66756eb102012c46756e676962696c69747900009102100c78636d087632286d756c746961737365741c4173736574496400010820436f6e63726574650400950201344d756c74694c6f636174696f6e000000204162737472616374040034011c5665633c75383e000100009502100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72990201244a756e6374696f6e7300009902100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e73000124104865726500000008583104009d0201204a756e6374696f6e00010008583208009d0201204a756e6374696f6e00009d0201204a756e6374696f6e0002000858330c009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00030008583410009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00040008583514009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00050008583618009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e0006000858371c009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00070008583820009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e000800009d02100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400fd01010c7533320000002c4163636f756e744964333208011c6e6574776f726ba10201244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726ba10201244e6574776f726b4964000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726ba10201244e6574776f726b496400010c6b6579210101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e646578040009020110753132380005002847656e6572616c4b65790400a50201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c6974790801086964a9020118426f6479496400011070617274ad020120426f64795061727400080000a1020c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d65640400a50201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d6100030000a5020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003401185665633c543e0000a9020c0c78636d08763218426f6479496400012810556e6974000000144e616d65640400a50201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400fd01010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000ad020c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74fd01010c753332000100204672616374696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c75333200040000b102100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c65040009020110753132380000002c4e6f6e46756e6769626c650400b50201344173736574496e7374616e636500010000b502100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400090201107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804003902011c5b75383b20385d0003001c417272617931360400490101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040034011c5665633c75383e00060000b902080c78636d5856657273696f6e65644d756c74694c6f636174696f6e00010808563204009502014476323a3a4d756c74694c6f636174696f6e0001000856330400f101014476333a3a4d756c74694c6f636174696f6e00030000bd020c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d0000ed01011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c1020c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144576656e7404045400011c34496e76616c6964466f726d61740401306d6573736167655f6861736804011c58636d4861736800000480446f776e77617264206d65737361676520697320696e76616c69642058434d2e48556e737570706f7274656456657273696f6e0401306d6573736167655f6861736804011c58636d48617368000104bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e404578656375746564446f776e776172640c01306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d4861736800011c6f7574636f6d65ed01011c4f7574636f6d65000204c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e3c5765696768744578686175737465641001306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d4861736800014072656d61696e696e675f77656967687428011857656967687400013c72657175697265645f776569676874280118576569676874000304f054686520776569676874206c696d697420666f722068616e646c696e6720646f776e77617264206d657373616765732077617320726561636865642e484f766572776569676874456e7175657565641001306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d486173680001406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800013c72657175697265645f7765696768742801185765696768740004041901446f776e77617264206d657373616765206973206f76657277656967687420616e642077617320706c6163656420696e20746865206f7665727765696768742071756575652e484f76657277656967687453657276696365640801406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800012c7765696768745f75736564280118576569676874000504e0446f776e77617264206d6573736167652066726f6d20746865206f766572776569676874207175657565207761732065786563757465642e504d61784d657373616765734578686175737465640401306d6573736167655f6861736804011c58636d48617368000604d0546865206d6178696d756d206e756d626572206f6620646f776e77617264206d657373616765732077617320726561636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c50208306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040020010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000c902000002d000cd0208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6efd01014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65d102016473705f72756e74696d653a3a52756e74696d65537472696e670000d1020000050200d5020c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b34011c5665633c75383e0000045c536565205b6050616c6c65743a3a72656d61726b605d2e387365745f686561705f7061676573040114706167657310010c7536340001047c536565205b6050616c6c65743a3a7365745f686561705f7061676573605d2e207365745f636f6465040110636f646534011c5665633c75383e00020464536565205b6050616c6c65743a3a7365745f636f6465605d2e5c7365745f636f64655f776974686f75745f636865636b73040110636f646534011c5665633c75383e000304a0536565205b6050616c6c65743a3a7365745f636f64655f776974686f75745f636865636b73605d2e2c7365745f73746f726167650401146974656d73d90201345665633c4b657956616c75653e00040470536565205b6050616c6c65743a3a7365745f73746f72616765605d2e306b696c6c5f73746f726167650401106b657973e10201205665633c4b65793e00050474536565205b6050616c6c65743a3a6b696c6c5f73746f72616765605d2e2c6b696c6c5f70726566697808011870726566697834010c4b657900011c7375626b65797320010c75333200060470536565205b6050616c6c65743a3a6b696c6c5f707265666978605d2e4472656d61726b5f776974685f6576656e7404011872656d61726b34011c5665633c75383e00070488536565205b6050616c6c65743a3a72656d61726b5f776974685f6576656e74605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed902000002dd0200dd0200000408343400e1020000023400e5020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2801185765696768740001246d61785f626c6f636b2801185765696768740001247065725f636c617373e90201845065724469737061746368436c6173733c57656967687473506572436c6173733e0000e9020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401ed02000c01186e6f726d616ced0201045400012c6f7065726174696f6e616ced020104540001246d616e6461746f7279ed020104540000ed020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632801185765696768740001346d61785f65787472696e736963f10201384f7074696f6e3c5765696768743e0001246d61785f746f74616cf10201384f7074696f6e3c5765696768743e0001207265736572766564f10201384f7074696f6e3c5765696768743e0000f10204184f7074696f6e04045401280108104e6f6e6500000010536f6d650400280000010000f5020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178f90201545065724469737061746368436c6173733c7533323e0000f9020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f7279200104540000fd02082873705f776569676874733c52756e74696d65446257656967687400000801107265616410010c753634000114777269746510010c75363400000103082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65d102013452756e74696d65537472696e67000124696d706c5f6e616d65d102013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e20010c753332000130737065635f76657273696f6e20010c753332000130696d706c5f76657273696f6e20010c753332000110617069730503011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e20010c75333200013473746174655f76657273696f6e080108753800000503040c436f77040454010903000400090300000009030000020d03000d03000004083902200011030c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c657415030c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f772c0124543a3a4d6f6d656e7400000450536565205b6050616c6c65743a3a736574605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e19030000040c0018ac001d030c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e64657800000458536565205b6050616c6c65743a3a636c61696d605d2e207472616e7366657208010c6e6577210301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e64657800010464536565205b6050616c6c65743a3a7472616e73666572605d2e1066726565040114696e64657810013c543a3a4163636f756e74496e64657800020454536565205b6050616c6c65743a3a66726565605d2e38666f7263655f7472616e736665720c010c6e6577210301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65ac0110626f6f6c0003047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004045c536565205b6050616c6c65743a3a667265657a65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e21030c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801b4011408496404000001244163636f756e74496400000014496e6465780400250301304163636f756e74496e6465780001000c526177040034011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400210101205b75383b2032305d000400002503000006b40029030c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e2d030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454013103045300000400390301185665633c543e000031030c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964390201384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e733503011c526561736f6e73000035030c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c0002000039030000023103003d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014103045300000400450301185665633c543e000041030c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e7469666965720139021c42616c616e6365011800080108696439020144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000450300000241030049030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d030453000004006d0301185665633c543e00004d030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640151031c42616c616e63650118000801086964510301084964000118616d6f756e7418011c42616c616e63650000510308447370697269746e65745f72756e74696d654452756e74696d65486f6c64526561736f6e0001182c4174746573746174696f6e04005503015c6174746573746174696f6e3a3a486f6c64526561736f6e003e002844656c65676174696f6e04005903015864656c65676174696f6e3a3a486f6c64526561736f6e003f000c44696404005d03013c6469643a3a486f6c64526561736f6e004000244469644c6f6f6b757004006103017470616c6c65745f6469645f6c6f6f6b75703a3a486f6c64526561736f6e00430024576562334e616d657304006503017470616c6c65745f776562335f6e616d65733a3a486f6c64526561736f6e004400445075626c696343726564656e7469616c730400690301787075626c69635f63726564656e7469616c733a3a486f6c64526561736f6e0045000055030c2c6174746573746174696f6e1870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000059030c2864656c65676174696f6e1870616c6c657428486f6c64526561736f6e0001041c4465706f736974000000005d030c0c6469641870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000061030c4470616c6c65745f6469645f6c6f6f6b75701870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000065030c4470616c6c65745f776562335f6e616d65731870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000069030c487075626c69635f63726564656e7469616c731870616c6c657428486f6c64526561736f6e0001041c4465706f736974000000006d030000024d030071030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017503045300000400810301185665633c543e000075030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640179031c42616c616e63650118000801086964790301084964000118616d6f756e7418011c42616c616e63650000790308447370697269746e65745f72756e74696d654c52756e74696d65467265657a65526561736f6e0001044050617261636861696e5374616b696e6704007d03017c70617261636861696e5f7374616b696e673a3a467265657a65526561736f6e001500007d030c4470617261636861696e5f7374616b696e671870616c6c657430467265657a65526561736f6e0001041c5374616b696e6700000000810300000275030085030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000124507472616e736665725f616c6c6f775f646561746808011064657374210301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756509020128543a3a42616c616e636500000494536565205b6050616c6c65743a3a7472616e736665725f616c6c6f775f6465617468605d2e587365745f62616c616e63655f646570726563617465640c010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f6672656509020128543a3a42616c616e63650001306f6c645f726573657276656409020128543a3a42616c616e63650001049c536565205b6050616c6c65743a3a7365745f62616c616e63655f64657072656361746564605d2e38666f7263655f7472616e736665720c0118736f75726365210301504163636f756e7449644c6f6f6b75704f663c543e00011064657374210301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756509020128543a3a42616c616e63650002047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e4c7472616e736665725f6b6565705f616c69766508011064657374210301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756509020128543a3a42616c616e636500030490536565205b6050616c6c65743a3a7472616e736665725f6b6565705f616c697665605d2e307472616e736665725f616c6c08011064657374210301504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665ac0110626f6f6c00040474536565205b6050616c6c65743a3a7472616e736665725f616c6c605d2e3c666f7263655f756e7265736572766508010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050480536565205b6050616c6c65743a3a666f7263655f756e72657365727665605d2e40757067726164655f6163636f756e747304010c77686fb90101445665633c543a3a4163636f756e7449643e00060484536565205b6050616c6c65743a3a757067726164655f6163636f756e7473605d2e207472616e7366657208011064657374210301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756509020128543a3a42616c616e636500070464536565205b6050616c6c65743a3a7472616e73666572605d2e44666f7263655f7365745f62616c616e636508010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f6672656509020128543a3a42616c616e636500080488536565205b6050616c6c65743a3a666f7263655f7365745f62616c616e6365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e89030c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001283856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804884e756d626572206f6620686f6c64732065786365656420604d6178486f6c6473602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e8d030c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800009103086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e740000000856320001000095030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019903045300000400a10301185665633c543e00009903104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c6963000004009d03013c737232353531393a3a5075626c696300009d030c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000a103000002990300a503084873705f636f6e73656e7375735f736c6f747310536c6f740000040010010c7536340000a903000002ad0300ad030000040800b10300b10308447370697269746e65745f72756e74696d652c53657373696f6e4b657973000004011061757261990301c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c69630000b5030000022000b90300000408bd033400bd030c1c73705f636f72651863727970746f244b65795479706549640000040044011c5b75383b20345d0000c1030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b657973b103011c543a3a4b65797300011470726f6f6634011c5665633c75383e00000464536565205b6050616c6c65743a3a7365745f6b657973605d2e2870757267655f6b6579730001046c536565205b6050616c6c65743a3a70757267655f6b657973605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec5030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742ec9030c4470617261636861696e5f7374616b696e6714747970657324526f756e64496e666f042c426c6f636b4e756d6265720110000c011c63757272656e7420013053657373696f6e496e646578000114666972737410012c426c6f636b4e756d6265720001186c656e67746810012c426c6f636b4e756d6265720000cd030c4470617261636861696e5f7374616b696e671474797065734444656c65676174696f6e436f756e7465720000080114726f756e6420013053657373696f6e496e64657800011c636f756e74657220010c7533320000d1030c4470617261636861696e5f7374616b696e67147479706573145374616b6508244163636f756e74496401001c42616c616e63650118000801146f776e65720001244163636f756e744964000118616d6f756e7418011c42616c616e63650000d5030c4470617261636861696e5f7374616b696e671474797065732443616e6469646174650c244163636f756e74496401001c42616c616e63650118644d617844656c656761746f727350657243616e646964617465000014010869640001244163636f756e7449640001147374616b6518011c42616c616e636500012864656c656761746f7273d9030101014f7264657265645365743c5374616b653c4163636f756e7449642c2042616c616e63653e2c204d617844656c656761746f727350657243616e6469646174653e000114746f74616c18011c42616c616e6365000118737461747573e503013c43616e6469646174655374617475730000d9030c4470617261636861696e5f7374616b696e670c736574284f72646572656453657408045401d103045300000400dd030140426f756e6465645665633c542c20533e0000dd030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d103045300000400e10301185665633c543e0000e103000002d10300e5030c4470617261636861696e5f7374616b696e671474797065733c43616e646964617465537461747573000108184163746976650000001c4c656176696e67040020013053657373696f6e496e64657800010000e9030c4470617261636861696e5f7374616b696e6714747970657328546f74616c5374616b65041c42616c616e6365011800080124636f6c6c61746f727318011c42616c616e636500012864656c656761746f727318011c42616c616e63650000ed030c4470617261636861696e5f7374616b696e670c736574284f72646572656453657408045401d103045300000400f1030140426f756e6465645665633c542c20533e0000f1030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d103045300000400e10301185665633c543e0000f5030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e34496e666c6174696f6e496e666f0000080120636f6c6c61746f72f903012c5374616b696e67496e666f00012464656c656761746f72f903012c5374616b696e67496e666f0000f9030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e2c5374616b696e67496e666f00000801206d61785f7261746590012c5065727175696e74696c6c00012c7265776172645f72617465fd030128526577617264526174650000fd030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e28526577617264526174650000080118616e6e75616c90012c5065727175696e74696c6c0001247065725f626c6f636b90012c5065727175696e74696c6c000001040c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601180453000004000504013842547265654d61703c4b2c20563e00000504042042547265654d617008044b011004560118000400090400000009040000020d04000d040000040810180011040c4470617261636861696e5f7374616b696e671870616c6c65741043616c6c0404540001543c666f7263655f6e65775f726f756e6400000480536565205b6050616c6c65743a3a666f7263655f6e65775f726f756e64605d2e347365745f696e666c6174696f6e100170636f6c6c61746f725f6d61785f726174655f70657263656e7461676590012c5065727175696e74696c6c000198636f6c6c61746f725f616e6e75616c5f7265776172645f726174655f70657263656e7461676590012c5065727175696e74696c6c00017464656c656761746f725f6d61785f726174655f70657263656e7461676590012c5065727175696e74696c6c00019c64656c656761746f725f616e6e75616c5f7265776172645f726174655f70657263656e7461676590012c5065727175696e74696c6c00010478536565205b6050616c6c65743a3a7365745f696e666c6174696f6e605d2e6c7365745f6d61785f73656c65637465645f63616e6469646174657304010c6e657720010c753332000204b0536565205b6050616c6c65743a3a7365745f6d61785f73656c65637465645f63616e64696461746573605d2e507365745f626c6f636b735f7065725f726f756e6404010c6e6577100144426c6f636b4e756d626572466f723c543e00030494536565205b6050616c6c65743a3a7365745f626c6f636b735f7065725f726f756e64605d2e5c7365745f6d61785f63616e6469646174655f7374616b6504010c6e657718013042616c616e63654f663c543e000404a0536565205b6050616c6c65743a3a7365745f6d61785f63616e6469646174655f7374616b65605d2e58666f7263655f72656d6f76655f63616e646964617465040120636f6c6c61746f722103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650005049c536565205b6050616c6c65743a3a666f7263655f72656d6f76655f63616e646964617465605d2e3c6a6f696e5f63616e646964617465730401147374616b6518013042616c616e63654f663c543e00060480536565205b6050616c6c65743a3a6a6f696e5f63616e64696461746573605d2e54696e69745f6c656176655f63616e6469646174657300070498536565205b6050616c6c65743a3a696e69745f6c656176655f63616e64696461746573605d2e60657865637574655f6c656176655f63616e64696461746573040120636f6c6c61746f722103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000804a4536565205b6050616c6c65743a3a657865637574655f6c656176655f63616e64696461746573605d2e5c63616e63656c5f6c656176655f63616e64696461746573000904a0536565205b6050616c6c65743a3a63616e63656c5f6c656176655f63616e64696461746573605d2e5063616e6469646174655f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000a0494536565205b6050616c6c65743a3a63616e6469646174655f7374616b655f6d6f7265605d2e5063616e6469646174655f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000b0494536565205b6050616c6c65743a3a63616e6469646174655f7374616b655f6c657373605d2e3c6a6f696e5f64656c656761746f7273080120636f6c6c61746f722103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e7418013042616c616e63654f663c543e000c0480536565205b6050616c6c65743a3a6a6f696e5f64656c656761746f7273605d2e406c656176655f64656c656761746f7273000d0484536565205b6050616c6c65743a3a6c656176655f64656c656761746f7273605d2e5064656c656761746f725f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000e0494536565205b6050616c6c65743a3a64656c656761746f725f7374616b655f6d6f7265605d2e5064656c656761746f725f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000f0494536565205b6050616c6c65743a3a64656c656761746f725f7374616b655f6c657373605d2e3c756e6c6f636b5f756e7374616b65640401187461726765742103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500100480536565205b6050616c6c65743a3a756e6c6f636b5f756e7374616b6564605d2e34636c61696d5f7265776172647300110478536565205b6050616c6c65743a3a636c61696d5f72657761726473605d2e68696e6372656d656e745f636f6c6c61746f725f72657761726473001204ac536565205b6050616c6c65743a3a696e6372656d656e745f636f6c6c61746f725f72657761726473605d2e6c696e6372656d656e745f64656c656761746f725f72657761726473001304b0536565205b6050616c6c65743a3a696e6372656d656e745f64656c656761746f725f72657761726473605d2e7c657865637574655f7363686564756c65645f7265776172645f6368616e6765001404c0536565205b6050616c6c65743a3a657865637574655f7363686564756c65645f7265776172645f6368616e6765605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e15040c4470617261636861696e5f7374616b696e671870616c6c6574144572726f7204045400017c4444656c656761746f724e6f74466f756e64000004b8546865206163636f756e74206973206e6f742070617274206f66207468652064656c656761746f7273207365742e4443616e6469646174654e6f74466f756e64000104dc546865206163636f756e74206973206e6f742070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3c44656c656761746f72457869737473000204c8546865206163636f756e7420697320616c72656164792070617274206f66207468652064656c656761746f7273207365742e3c43616e646964617465457869737473000304ec546865206163636f756e7420697320616c72656164792070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3056616c5374616b655a65726f000404e4546865206163636f756e7420747269656420746f207374616b65206d6f7265206f72206c657373207769746820616d6f756e74207a65726f2e4056616c5374616b6542656c6f774d696e0005080d01546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f20626520616464656420746f2074686520636f6c6c61746f723c63616e64696461746573207365742e4056616c5374616b6541626f76654d61780006041101546865206163636f756e742068617320616c7265616479207374616b656420746865206d6178696d756d20616d6f756e74206f662066756e647320706f737369626c652e4844656c65676174696f6e42656c6f774d696e000708f8546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f2064656c6567617465206120636f6c6c61746f722863616e6469646174652e38416c72656164794c656176696e670008080d0154686520636f6c6c61746f722063616e6469646174652068617320616c72656164792074726967676572207468652070726f6365737320746f206c65617665207468656c736574206f6620636f6c6c61746f722063616e646964617465732e284e6f744c656176696e67000908f454686520636f6c6c61746f722063616e6469646174652077616e74656420746f20657865637574652074686520657869742062757420686173206e6f74f472657175657374656420746f206c65617665206265666f72652062792063616c6c696e672060696e69745f6c656176655f63616e64696461746573602e3843616e6e6f744c65617665596574000a08dc54686520636f6c6c61746f7220747269656420746f206c65617665206265666f72652077616974696e67206174206c6561737420666f72746045786974517565756544656c617960206d616e7920726f756e64732e6443616e6e6f744a6f696e4265666f7265556e6c6f636b696e67000b10f8546865206163636f756e742068617320612066756c6c206c697374206f6620756e7374616b696e6720726571756573747320616e64206e6565647320746ffc756e6c6f636b206174206c65617374206f6e65206f66207468657365206265666f7265206265696e672061626c6520746f206a6f696e2028616761696e292edc4e4f54453a2043616e206f6e6c792068617070656e20696620746865206163636f756e742077617320612063616e646964617465206f72f464656c656761746f72206265666f726520616e642065697468657220676f74206b69636b6564206f722065786974656420766f6c756e746172696c792e44416c726561647944656c65676174696e67000c04e4546865206163636f756e7420697320616c72656164792064656c65676174696e672074686520636f6c6c61746f722063616e6469646174652e404e6f7459657444656c65676174696e67000d080901546865206163636f756e7420686173206e6f742064656c65676174656420616e7920636f6c6c61746f722063616e646964617465207965742c2068656e6365206974806973206e6f7420696e2074686520736574206f662064656c656761746f72732e6c44656c65676174696f6e73506572526f756e644578636565646564000e1811015468652064656c656761746f722068617320657863656564656420746865206e756d626572206f662064656c65676174696f6e732070657220726f756e6420776869636894697320657175616c20746f204d617844656c656761746f7273506572436f6c6c61746f722e000901546869732070726f746563747320616761696e73742061747461636b7320696e20776869636820612064656c656761746f722063616e2072652d64656c6567617465010166726f6d206120636f6c6c61746f722077686f2068617320616c726561647920617574686f726564206120626c6f636b2c20746f20616e6f74686572206f6e6570776869636820686173206e6f7420696e207468697320726f756e642e44546f6f4d616e7944656c656761746f7273000f14010154686520636f6c6c61746f722063616e6469646174652068617320616c7265616479207265616368656420746865206d6178696d756d206e756d626572206f662c64656c656761746f72732e00050154686973206572726f722069732067656e65726174656420696e20636173652061206e65772064656c65676174696f6e207265717565737420646f6573206e6f74f47374616b6520656e6f7567682066756e647320746f207265706c61636520736f6d65206f74686572206578697374696e672064656c65676174696f6e2e60546f6f466577436f6c6c61746f7243616e64696461746573001008110154686520736574206f6620636f6c6c61746f722063616e6469646174657320776f756c642066616c6c2062656c6f7720746865207265717569726564206d696e696d756d5469662074686520636f6c6c61746f72206c6566742e5043616e6e6f745374616b6549664c656176696e67001108f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66010163616e6469646174657320616e642063616e6e6f7420706572666f726d20616e79206f7468657220616374696f6e7320696e20746865206d65616e74696d652e5c43616e6e6f7444656c656761746549664c656176696e67001208f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66ac63616e6469646174657320616e6420746875732063616e6e6f742062652064656c65676174656420746f2e804d6178436f6c6c61746f727350657244656c656761746f72457863656564656400130811015468652064656c656761746f722068617320616c72656164792064656c65676174656420746865206d6178696d756d206e756d626572206f662063616e6469646174657320616c6c6f7765642e60416c726561647944656c656761746564436f6c6c61746f72001408ec5468652064656c656761746f722068617320616c72656164792070726576696f75736c792064656c6567617465642074686520636f6c6c61746f722863616e6469646174652e4844656c65676174696f6e4e6f74466f756e64001504f854686520676976656e2064656c65676174696f6e20646f6573206e6f7420657869737420696e2074686520736574206f662064656c65676174696f6e732e24556e646572666c6f77001608050154686520636f6c6c61746f722064656c6567617465206f72207468652064656c656761746f7220697320747279696e6720746f20756e2d7374616b65206d6f72658066756e64732074686174206172652063757272656e746c79207374616b65642e4443616e6e6f7453657441626f76654d6178001708d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738061626f766520746865206d6178696d756d2076616c756520616c6c6f7765642e4443616e6e6f7453657442656c6f774d696e001808d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738062656c6f7720746865206d696e696d756d2076616c756520616c6c6f7765642e3c496e76616c69645363686564756c65001904dc416e20696e76616c696420696e666c6174696f6e20636f6e66696775726174696f6e20697320747279696e6720746f206265207365742e3c4e6f4d6f7265556e7374616b696e67001a08c4546865207374616b696e6720726577617264206265696e6720756e6c6f636b656420646f6573206e6f742065786973742e7c4d617820756e6c6f636b696e6720726571756573747320726561636865642e20546f6f4561726c79001b0801015468652072657761726420726174652063616e6e6f742062652061646a75737465642079657420617320616e20656e74697265207965617220686173206e6f741c7061737365642e345374616b654e6f74466f756e64001c04d850726f7669646564207374616b65642076616c7565206973207a65726f2e2053686f756c64206e65766572206265207468726f776e2e40556e7374616b696e674973456d707479001d049443616e6e6f7420756e6c6f636b207768656e20556e7374616b656420697320656d7074792e3c526577617264734e6f74466f756e64001e047843616e6e6f7420636c61696d207265776172647320696620656d7074792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e19040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011d04045300000400e50501185665633c543e00001d040000040c2021040000210410346672616d655f737570706f72741874726169747324707265696d616765731c426f756e646564040454012504010c184c6567616379040110686173683001104861736800000018496e6c696e65040095010134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173683001104861736800010c6c656e20010c75333200020000250408447370697269746e65745f72756e74696d652c52756e74696d6543616c6c0001801853797374656d0400d50201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400150301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c496e646963657304001d0301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e0005002042616c616e6365730400850301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0006001c53657373696f6e0400c10301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0016004050617261636861696e5374616b696e670400110401d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e5374616b696e672c2052756e74696d653e0015002444656d6f63726163790400290401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e001e001c436f756e63696c0400390401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e001f0048546563686e6963616c436f6d6d69747465650400410401dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465652c2052756e74696d653e0020004c546563686e6963616c4d656d626572736869700400450401e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c4d656d626572736869702c2052756e74696d653e0022002054726561737572790400490401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e0023001c5574696c69747904004d0401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e0028001c56657374696e670400750401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e002900245363686564756c657204007d0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e002a001450726f78790400850401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002b0020507265696d61676504008d0401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e002c0038546970734d656d626572736869700400910401cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970734d656d626572736869702c2052756e74696d653e002d0010546970730400950401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970732c2052756e74696d653e002e00204d756c74697369670400990401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e002f001443747970650400a10401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43747970652c2052756e74696d653e003d002c4174746573746174696f6e0400a50401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4174746573746174696f6e2c2052756e74696d653e003e002844656c65676174696f6e0400b50401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656c65676174696f6e2c2052756e74696d653e003f000c4469640400d10401a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469642c2052756e74696d653e004000244469644c6f6f6b75700400290501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469644c6f6f6b75702c2052756e74696d653e00430024576562334e616d65730400390501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c576562334e616d65732c2052756e74696d653e004400445075626c696343726564656e7469616c7304003d0501d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5075626c696343726564656e7469616c732c2052756e74696d653e004500244d6967726174696f6e04004d0501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d6967726174696f6e2c2052756e74696d653e0046003c50617261636861696e53797374656d0400510501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0050003450617261636861696e496e666f0400850501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e496e666f2c2052756e74696d653e0051002458636d7051756575650400890501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e0052002c506f6c6b61646f7458636d04008d0501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e00530020446d7051756575650400e10501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446d7051756575652c2052756e74696d653e0055000029040c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c04045400014c1c70726f706f736508012070726f706f73616c21040140426f756e64656443616c6c4f663c543e00011476616c75650902013042616c616e63654f663c543e00000460536565205b6050616c6c65743a3a70726f706f7365605d2e187365636f6e6404012070726f706f73616cfd01012450726f70496e6465780001045c536565205b6050616c6c65743a3a7365636f6e64605d2e10766f74650801247265665f696e646578fd01013c5265666572656e64756d496e646578000110766f74659c01644163636f756e74566f74653c42616c616e63654f663c543e3e00020454536565205b6050616c6c65743a3a766f7465605d2e40656d657267656e63795f63616e63656c0401247265665f696e64657820013c5265666572656e64756d496e64657800030484536565205b6050616c6c65743a3a656d657267656e63795f63616e63656c605d2e4065787465726e616c5f70726f706f736504012070726f706f73616c21040140426f756e64656443616c6c4f663c543e00040484536565205b6050616c6c65743a3a65787465726e616c5f70726f706f7365605d2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616c21040140426f756e64656443616c6c4f663c543e000504a8536565205b6050616c6c65743a3a65787465726e616c5f70726f706f73655f6d616a6f72697479605d2e6065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616c21040140426f756e64656443616c6c4f663c543e000604a4536565205b6050616c6c65743a3a65787465726e616c5f70726f706f73655f64656661756c74605d2e28666173745f747261636b0c013470726f706f73616c5f6861736830011048323536000134766f74696e675f706572696f64100144426c6f636b4e756d626572466f723c543e00011464656c6179100144426c6f636b4e756d626572466f723c543e0007046c536565205b6050616c6c65743a3a666173745f747261636b605d2e347665746f5f65787465726e616c04013470726f706f73616c5f686173683001104832353600080478536565205b6050616c6c65743a3a7665746f5f65787465726e616c605d2e4463616e63656c5f7265666572656e64756d0401247265665f696e646578fd01013c5265666572656e64756d496e64657800090488536565205b6050616c6c65743a3a63616e63656c5f7265666572656e64756d605d2e2064656c65676174650c0108746f210301504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6e2d040128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a0464536565205b6050616c6c65743a3a64656c6567617465605d2e28756e64656c6567617465000b046c536565205b6050616c6c65743a3a756e64656c6567617465605d2e58636c6561725f7075626c69635f70726f706f73616c73000c049c536565205b6050616c6c65743a3a636c6561725f7075626c69635f70726f706f73616c73605d2e18756e6c6f636b040118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e000d045c536565205b6050616c6c65743a3a756e6c6f636b605d2e2c72656d6f76655f766f7465040114696e64657820013c5265666572656e64756d496e646578000e0470536565205b6050616c6c65743a3a72656d6f76655f766f7465605d2e4472656d6f76655f6f746865725f766f7465080118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657820013c5265666572656e64756d496e646578000f0488536565205b6050616c6c65743a3a72656d6f76655f6f746865725f766f7465605d2e24626c61636b6c69737408013470726f706f73616c5f686173683001104832353600013c6d617962655f7265665f696e6465783104015c4f7074696f6e3c5265666572656e64756d496e6465783e00100468536565205b6050616c6c65743a3a626c61636b6c697374605d2e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578fd01012450726f70496e64657800110480536565205b6050616c6c65743a3a63616e63656c5f70726f706f73616c605d2e307365745f6d657461646174610801146f776e6572a401344d657461646174614f776e65720001286d617962655f68617368350401504f7074696f6e3c507265696d616765486173683e00120474536565205b6050616c6c65743a3a7365745f6d65746164617461605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d040c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000310404184f7074696f6e04045401200108104e6f6e6500000010536f6d650400200000010000350404184f7074696f6e04045401300108104e6f6e6500000010536f6d65040030000001000039040c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273b90101445665633c543a3a4163636f756e7449643e0001147072696d653d0401504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7420012c4d656d626572436f756e7400000470536565205b6050616c6c65743a3a7365745f6d656d62657273605d2e1c6578656375746508012070726f706f73616c2504017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64fd01010c75333200010460536565205b6050616c6c65743a3a65786563757465605d2e1c70726f706f73650c01247468726573686f6c64fd01012c4d656d626572436f756e7400012070726f706f73616c2504017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64fd01010c75333200020460536565205b6050616c6c65743a3a70726f706f7365605d2e10766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578fd01013450726f706f73616c496e64657800011c617070726f7665ac0110626f6f6c00030454536565205b6050616c6c65743a3a766f7465605d2e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a4861736800050490536565205b6050616c6c65743a3a646973617070726f76655f70726f706f73616c605d2e14636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578fd01013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642801185765696768740001306c656e6774685f626f756e64fd01010c75333200060458536565205b6050616c6c65743a3a636c6f7365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3d0404184f7074696f6e04045401000108104e6f6e6500000010536f6d65040000000001000041040c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273b90101445665633c543a3a4163636f756e7449643e0001147072696d653d0401504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7420012c4d656d626572436f756e7400000470536565205b6050616c6c65743a3a7365745f6d656d62657273605d2e1c6578656375746508012070726f706f73616c2504017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64fd01010c75333200010460536565205b6050616c6c65743a3a65786563757465605d2e1c70726f706f73650c01247468726573686f6c64fd01012c4d656d626572436f756e7400012070726f706f73616c2504017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64fd01010c75333200020460536565205b6050616c6c65743a3a70726f706f7365605d2e10766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578fd01013450726f706f73616c496e64657800011c617070726f7665ac0110626f6f6c00030454536565205b6050616c6c65743a3a766f7465605d2e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a4861736800050490536565205b6050616c6c65743a3a646973617070726f76655f70726f706f73616c605d2e14636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578fd01013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642801185765696768740001306c656e6774685f626f756e64fd01010c75333200060458536565205b6050616c6c65743a3a636c6f7365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e45040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0000046c536565205b6050616c6c65743a3a6164645f6d656d626572605d2e3472656d6f76655f6d656d62657204010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e00010478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e2c737761705f6d656d62657208011872656d6f7665210301504163636f756e7449644c6f6f6b75704f663c543e00010c616464210301504163636f756e7449644c6f6f6b75704f663c543e00020470536565205b6050616c6c65743a3a737761705f6d656d626572605d2e3472657365745f6d656d6265727304011c6d656d62657273b90101445665633c543a3a4163636f756e7449643e00030478536565205b6050616c6c65743a3a72657365745f6d656d62657273605d2e286368616e67655f6b657904010c6e6577210301504163636f756e7449644c6f6f6b75704f663c543e0004046c536565205b6050616c6c65743a3a6368616e67655f6b6579605d2e247365745f7072696d6504010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e00050468536565205b6050616c6c65743a3a7365745f7072696d65605d2e2c636c6561725f7072696d6500060470536565205b6050616c6c65743a3a636c6561725f7072696d65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e49040c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001143470726f706f73655f7370656e6408011476616c75650902013c42616c616e63654f663c542c20493e00012c62656e6566696369617279210301504163636f756e7449644c6f6f6b75704f663c543e00000478536565205b6050616c6c65743a3a70726f706f73655f7370656e64605d2e3c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964fd01013450726f706f73616c496e64657800010480536565205b6050616c6c65743a3a72656a6563745f70726f706f73616c605d2e40617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964fd01013450726f706f73616c496e64657800020484536565205b6050616c6c65743a3a617070726f76655f70726f706f73616c605d2e147370656e64080118616d6f756e740902013c42616c616e63654f663c542c20493e00012c62656e6566696369617279210301504163636f756e7449644c6f6f6b75704f663c543e00030458536565205b6050616c6c65743a3a7370656e64605d2e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964fd01013450726f706f73616c496e64657800040480536565205b6050616c6c65743a3a72656d6f76655f617070726f76616c605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d040c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c735104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000458536565205b6050616c6c65743a3a6261746368605d2e3461735f64657269766174697665080114696e646578e0010c75313600011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00010478536565205b6050616c6c65743a3a61735f64657269766174697665605d2e2462617463685f616c6c04011463616c6c735104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00020468536565205b6050616c6c65743a3a62617463685f616c6c605d2e2c64697370617463685f617308012461735f6f726967696e55040154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00030470536565205b6050616c6c65743a3a64697370617463685f6173605d2e2c666f7263655f626174636804011463616c6c735104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00040470536565205b6050616c6c65743a3a666f7263655f6261746368605d2e2c776974685f77656967687408011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00011877656967687428011857656967687400050470536565205b6050616c6c65743a3a776974685f776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5104000002250400550408447370697269746e65745f72756e74696d65304f726967696e43616c6c657200011c1873797374656d0400590401746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c04005d0401010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400610401010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020000c4469640400650401506469643a3a4f726967696e3c52756e74696d653e0040002c506f6c6b61646f7458636d04006904014870616c6c65745f78636d3a3a4f726967696e0053002843756d756c757358636d04006d04016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e00540010566f69640400710401110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f69640006000059040c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200005d04084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080020012c4d656d626572436f756e74000020012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d000200006104084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080020012c4d656d626572436f756e74000020012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d0002000065040c0c646964186f726967696e304469645261774f726967696e08344469644964656e7469666965720100244163636f756e74496401000008010869640001344469644964656e7469666965720001247375626d69747465720001244163636f756e744964000069040c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400f10101344d756c74694c6f636174696f6e00000020526573706f6e73650400f10101344d756c74694c6f636174696f6e000100006d040c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e0400e5010118506172614964000100007104081c73705f636f726510566f69640001000075040c3870616c6c65745f76657374696e671870616c6c65741043616c6c040454000114107665737400000454536565205b6050616c6c65743a3a76657374605d2e28766573745f6f74686572040118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e0001046c536565205b6050616c6c65743a3a766573745f6f74686572605d2e3c7665737465645f7472616e73666572080118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65790401b056657374696e67496e666f3c42616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e3e00020480536565205b6050616c6c65743a3a7665737465645f7472616e73666572605d2e54666f7263655f7665737465645f7472616e736665720c0118736f75726365210301504163636f756e7449644c6f6f6b75704f663c543e000118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65790401b056657374696e67496e666f3c42616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e3e00030498536565205b6050616c6c65743a3a666f7263655f7665737465645f7472616e73666572605d2e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657820010c75333200013c7363686564756c65325f696e64657820010c75333200040480536565205b6050616c6c65743a3a6d657267655f7363686564756c6573605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e79040c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d62657200007d040c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963810401ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000464536565205b6050616c6c65743a3a7363686564756c65605d2e1863616e63656c0801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657820010c7533320001045c536565205b6050616c6c65743a3a63616e63656c605d2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963810401ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0002047c536565205b6050616c6c65743a3a7363686564756c655f6e616d6564605d2e3063616e63656c5f6e616d656404010869640401205461736b4e616d6500030474536565205b6050616c6c65743a3a63616e63656c5f6e616d6564605d2e387363686564756c655f61667465721001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963810401ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004047c536565205b6050616c6c65743a3a7363686564756c655f6166746572605d2e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963810401ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00050494536565205b6050616c6c65743a3a7363686564756c655f6e616d65645f6166746572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e810404184f7074696f6e04045401d00108104e6f6e6500000010536f6d650400d0000001000085040c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616c210301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065890401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000458536565205b6050616c6c65743a3a70726f7879605d2e246164645f70726f78790c012064656c6567617465210301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00010468536565205b6050616c6c65743a3a6164645f70726f7879605d2e3072656d6f76655f70726f78790c012064656c6567617465210301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00020474536565205b6050616c6c65743a3a72656d6f76655f70726f7879605d2e3872656d6f76655f70726f786965730003047c536565205b6050616c6c65743a3a72656d6f76655f70726f78696573605d2e2c6372656174655f707572650c012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e000114696e646578e0010c75313600040470536565205b6050616c6c65743a3a6372656174655f70757265605d2e246b696c6c5f7075726514011c737061776e6572210301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f787954797065000114696e646578e0010c7531360001186865696768742c0144426c6f636b4e756d626572466f723c543e0001246578745f696e646578fd01010c75333200050468536565205b6050616c6c65743a3a6b696c6c5f70757265605d2e20616e6e6f756e63650801107265616c210301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00060464536565205b6050616c6c65743a3a616e6e6f756e6365605d2e4c72656d6f76655f616e6e6f756e63656d656e740801107265616c210301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00070490536565205b6050616c6c65743a3a72656d6f76655f616e6e6f756e63656d656e74605d2e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465210301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00080490536565205b6050616c6c65743a3a72656a6563745f616e6e6f756e63656d656e74605d2e3c70726f78795f616e6e6f756e63656410012064656c6567617465210301504163636f756e7449644c6f6f6b75704f663c543e0001107265616c210301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065890401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00090480536565205b6050616c6c65743a3a70726f78795f616e6e6f756e636564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e890404184f7074696f6e04045401dc0108104e6f6e6500000010536f6d650400dc00000100008d040c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657334011c5665633c75383e00000478536565205b6050616c6c65743a3a6e6f74655f707265696d616765605d2e3c756e6e6f74655f707265696d6167650401106861736830011c543a3a4861736800010480536565205b6050616c6c65743a3a756e6e6f74655f707265696d616765605d2e40726571756573745f707265696d6167650401106861736830011c543a3a4861736800020484536565205b6050616c6c65743a3a726571756573745f707265696d616765605d2e48756e726571756573745f707265696d6167650401106861736830011c543a3a486173680003048c536565205b6050616c6c65743a3a756e726571756573745f707265696d616765605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e91040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0000046c536565205b6050616c6c65743a3a6164645f6d656d626572605d2e3472656d6f76655f6d656d62657204010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e00010478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e2c737761705f6d656d62657208011872656d6f7665210301504163636f756e7449644c6f6f6b75704f663c543e00010c616464210301504163636f756e7449644c6f6f6b75704f663c543e00020470536565205b6050616c6c65743a3a737761705f6d656d626572605d2e3472657365745f6d656d6265727304011c6d656d62657273b90101445665633c543a3a4163636f756e7449643e00030478536565205b6050616c6c65743a3a72657365745f6d656d62657273605d2e286368616e67655f6b657904010c6e6577210301504163636f756e7449644c6f6f6b75704f663c543e0004046c536565205b6050616c6c65743a3a6368616e67655f6b6579605d2e247365745f7072696d6504010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e00050468536565205b6050616c6c65743a3a7365745f7072696d65605d2e2c636c6561725f7072696d6500060470536565205b6050616c6c65743a3a636c6561725f7072696d65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e95040c2c70616c6c65745f746970731870616c6c65741043616c6c080454000449000118387265706f72745f617765736f6d65080118726561736f6e34011c5665633c75383e00010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0000047c536565205b6050616c6c65743a3a7265706f72745f617765736f6d65605d2e2c726574726163745f7469700401106861736830011c543a3a4861736800010470536565205b6050616c6c65743a3a726574726163745f746970605d2e1c7469705f6e65770c0118726561736f6e34011c5665633c75383e00010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0001247469705f76616c75650902013c42616c616e63654f663c542c20493e00020460536565205b6050616c6c65743a3a7469705f6e6577605d2e0c7469700801106861736830011c543a3a486173680001247469705f76616c75650902013c42616c616e63654f663c542c20493e00030450536565205b6050616c6c65743a3a746970605d2e24636c6f73655f7469700401106861736830011c543a3a4861736800040468536565205b6050616c6c65743a3a636c6f73655f746970605d2e24736c6173685f7469700401106861736830011c543a3a4861736800050468536565205b6050616c6c65743a3a736c6173685f746970605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e99040c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573b90101445665633c543a3a4163636f756e7449643e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000494536565205b6050616c6c65743a3a61735f6d756c74695f7468726573686f6c645f31605d2e2061735f6d756c74691401247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573b90101445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e749d0401904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687428011857656967687400010464536565205b6050616c6c65743a3a61735f6d756c7469605d2e40617070726f76655f61735f6d756c74691401247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573b90101445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e749d0401904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f77656967687428011857656967687400020484536565205b6050616c6c65743a3a617070726f76655f61735f6d756c7469605d2e3c63616e63656c5f61735f6d756c74691001247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573b90101445665633c543a3a4163636f756e7449643e00012474696d65706f696e74f4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e00012463616c6c5f686173680401205b75383b2033325d00030480536565205b6050616c6c65743a3a63616e63656c5f61735f6d756c7469605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e9d0404184f7074696f6e04045401f40108104e6f6e6500000010536f6d650400f40000010000a1040c1463747970651870616c6c65741043616c6c0404540001080c616464040114637479706534011c5665633c75383e00000450536565205b6050616c6c65743a3a616464605d2e407365745f626c6f636b5f6e756d62657208012863747970655f686173683001384374797065486173684f663c543e000130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e00010484536565205b6050616c6c65743a3a7365745f626c6f636b5f6e756d626572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea5040c2c6174746573746174696f6e1870616c6c65741043616c6c0404540001180c6164640c0128636c61696d5f68617368300138436c61696d486173684f663c543e00012863747970655f686173683001384374797065486173684f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e00000450536565205b6050616c6c65743a3a616464605d2e187265766f6b65080128636c61696d5f68617368300138436c61696d486173684f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0001045c536565205b6050616c6c65743a3a7265766f6b65605d2e1872656d6f7665080128636c61696d5f68617368300138436c61696d486173684f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0002045c536565205b6050616c6c65743a3a72656d6f7665605d2e3c7265636c61696d5f6465706f736974040128636c61696d5f68617368300138436c61696d486173684f663c543e00030480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e506368616e67655f6465706f7369745f6f776e6572040128636c61696d5f68617368300138436c61696d486173684f663c543e00040494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f736974040128636c61696d5f68617368300138436c61696d486173684f663c543e0005047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea90404184f7074696f6e04045401ad040108104e6f6e6500000010536f6d650400ad040000010000ad040c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c50616c6c6574417574686f72697a65043044656c65676174696f6e416301b10401042844656c65676174696f6e0400b104013044656c65676174696f6e416300000000b1040c2864656c65676174696f6e386163636573735f636f6e74726f6c3044656c65676174696f6e416304045401a9010008013c7375626a6563745f6e6f64655f696430015444656c65676174696f6e4e6f646549644f663c543e0001286d61785f636865636b7320010c7533320000b5040c2864656c65676174696f6e1870616c6c65741043616c6c04045400011c406372656174655f686965726172636879080130726f6f745f6e6f64655f696430015444656c65676174696f6e4e6f646549644f663c543e00012863747970655f686173683001384374797065486173684f663c543e00000484536565205b6050616c6c65743a3a6372656174655f686965726172636879605d2e386164645f64656c65676174696f6e14013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e000124706172656e745f696430015444656c65676174696f6e4e6f646549644f663c543e00012064656c656761746500014044656c656761746f7249644f663c543e00012c7065726d697373696f6e730d01012c5065726d697373696f6e7300014864656c65676174655f7369676e6174757265b904016844656c65676174655369676e6174757265547970654f663c543e0001047c536565205b6050616c6c65743a3a6164645f64656c65676174696f6e605d2e447265766f6b655f64656c65676174696f6e0c013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001446d61785f706172656e745f636865636b7320010c75333200013c6d61785f7265766f636174696f6e7320010c75333200020488536565205b6050616c6c65743a3a7265766f6b655f64656c65676174696f6e605d2e4472656d6f76655f64656c65676174696f6e08013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c7320010c75333200030488536565205b6050616c6c65743a3a72656d6f76655f64656c65676174696f6e605d2e3c7265636c61696d5f6465706f73697408013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c7320010c75333200040480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e506368616e67655f6465706f7369745f6f776e657204013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e00050494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f73697404013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0006047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb9040c0c6469642c6469645f64657461696c73304469645369676e617475726500010c1c456432353531390400bd040148656432353531393a3a5369676e61747572650000001c537232353531390400c5040148737232353531393a3a5369676e61747572650001001445636473610400c904014065636473613a3a5369676e617475726500020000bd040c1c73705f636f72651c65643235353139245369676e617475726500000400c10401205b75383b2036345d0000c104000003400000000800c5040c1c73705f636f72651c73723235353139245369676e617475726500000400c10401205b75383b2036345d0000c9040c1c73705f636f7265146563647361245369676e617475726500000400cd0401205b75383b2036355d0000cd04000003410000000800d1040c0c6469641870616c6c65741043616c6c0404540001441863726561746508011c64657461696c73d5040170426f783c4469644372656174696f6e44657461696c734f663c543e3e0001247369676e6174757265b90401304469645369676e61747572650000045c536565205b6050616c6c65743a3a637265617465605d2e587365745f61757468656e7469636174696f6e5f6b657904011c6e65775f6b657911050188446964566572696669636174696f6e4b65793c4163636f756e7449644f663c543e3e0001049c536565205b6050616c6c65743a3a7365745f61757468656e7469636174696f6e5f6b6579605d2e487365745f64656c65676174696f6e5f6b657904011c6e65775f6b657911050188446964566572696669636174696f6e4b65793c4163636f756e7449644f663c543e3e0002048c536565205b6050616c6c65743a3a7365745f64656c65676174696f6e5f6b6579605d2e5472656d6f76655f64656c65676174696f6e5f6b657900030498536565205b6050616c6c65743a3a72656d6f76655f64656c65676174696f6e5f6b6579605d2e4c7365745f6174746573746174696f6e5f6b657904011c6e65775f6b657911050188446964566572696669636174696f6e4b65793c4163636f756e7449644f663c543e3e00040490536565205b6050616c6c65743a3a7365745f6174746573746174696f6e5f6b6579605d2e5872656d6f76655f6174746573746174696f6e5f6b65790005049c536565205b6050616c6c65743a3a72656d6f76655f6174746573746174696f6e5f6b6579605d2e546164645f6b65795f61677265656d656e745f6b657904011c6e65775f6b657901050140446964456e6372797074696f6e4b657900060498536565205b6050616c6c65743a3a6164645f6b65795f61677265656d656e745f6b6579605d2e6072656d6f76655f6b65795f61677265656d656e745f6b65790401186b65795f69643001284b657949644f663c543e000704a4536565205b6050616c6c65743a3a72656d6f76655f6b65795f61677265656d656e745f6b6579605d2e506164645f736572766963655f656e64706f696e74040140736572766963655f656e64706f696e74dd040138446964456e64706f696e743c543e00080494536565205b6050616c6c65743a3a6164645f736572766963655f656e64706f696e74605d2e5c72656d6f76655f736572766963655f656e64706f696e74040128736572766963655f6964e104015053657276696365456e64706f696e7449643c543e000904a0536565205b6050616c6c65743a3a72656d6f76655f736572766963655f656e64706f696e74605d2e1864656c65746504014c656e64706f696e74735f746f5f72656d6f766520010c753332000a045c536565205b6050616c6c65743a3a64656c657465605d2e3c7265636c61696d5f6465706f73697408012c6469645f7375626a6563740001484469644964656e7469666965724f663c543e00014c656e64706f696e74735f746f5f72656d6f766520010c753332000b0480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e3c7375626d69745f6469645f63616c6c0801206469645f63616c6c25050190426f783c446964417574686f72697a656443616c6c4f7065726174696f6e4f663c543e3e0001247369676e6174757265b90401304469645369676e6174757265000c0480536565205b6050616c6c65743a3a7375626d69745f6469645f63616c6c605d2e506368616e67655f6465706f7369745f6f776e6572000d0494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f73697404010c6469640001484469644964656e7469666965724f663c543e000e047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e2c64697370617463685f61730801386469645f6964656e7469666965720001484469644964656e7469666965724f663c543e00011063616c6c25040154426f783c44696443616c6c61626c654f663c543e3e000f0470536565205b6050616c6c65743a3a64697370617463685f6173605d2e4c6372656174655f66726f6d5f6163636f756e7404014861757468656e7469636174696f6e5f6b657911050188446964566572696669636174696f6e4b65793c4163636f756e7449644f663c543e3e00100490536565205b6050616c6c65743a3a6372656174655f66726f6d5f6163636f756e74605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed5040c0c6469642c6469645f64657461696c73484469644372656174696f6e44657461696c7310344469644964656e7469666965720100244163636f756e7449640100584d61784e65774b657941677265656d656e744b65797301d9042c446964456e64706f696e7401dd040018010c6469640001344469644964656e7469666965720001247375626d69747465720001244163636f756e7449640001586e65775f6b65795f61677265656d656e745f6b657973fd0401c04469644e65774b657941677265656d656e744b65795365743c4d61784e65774b657941677265656d656e744b6579733e00014c6e65775f6174746573746174696f6e5f6b65790d0501944f7074696f6e3c446964566572696669636174696f6e4b65793c4163636f756e7449643e3e0001486e65775f64656c65676174696f6e5f6b65790d0501944f7074696f6e3c446964566572696669636174696f6e4b65793c4163636f756e7449643e3e00014c6e65775f736572766963655f64657461696c73210501405665633c446964456e64706f696e743e0000d904103872756e74696d655f636f6d6d6f6e24636f6e7374616e74730c646964584d61784e65774b657941677265656d656e744b65797300000000dd040c0c64696444736572766963655f656e64706f696e74732c446964456e64706f696e7404045400000c01086964e104015053657276696365456e64706f696e7449643c543e000134736572766963655f7479706573e504017453657276696365456e64706f696e7454797065456e74726965733c543e00011075726c73f104017053657276696365456e64706f696e7455726c456e74726965733c543e0000e1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000e5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e904045300000400ed0401185665633c543e0000e9040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000ed04000002e90400f1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f504045300000400f90401185665633c543e0000f5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000f904000002f50400fd040c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540101050453000004000505012c42547265655365743c543e000001050c0c6469642c6469645f64657461696c7340446964456e6372797074696f6e4b65790001041858323535313904000401205b75383b2033325d00000000050504204254726565536574040454010105000400090500000009050000020105000d0504184f7074696f6e0404540111050108104e6f6e6500000010536f6d6504001105000001000011050c0c6469642c6469645f64657461696c7348446964566572696669636174696f6e4b657904244163636f756e744964010001101c4564323535313904001505013c656432353531393a3a5075626c69630000001c5372323535313904009d03013c737232353531393a3a5075626c696300010014456364736104001905013465636473613a3a5075626c69630002001c4163636f756e7404000001244163636f756e7449640003000015050c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d000019050c1c73705f636f7265146563647361185075626c6963000004001d0501205b75383b2033335d00001d050000032100000008002105000002dd040025050c0c6469642c6469645f64657461696c7368446964417574686f72697a656443616c6c4f7065726174696f6e14344469644964656e74696669657201002c44696443616c6c61626c650125042c426c6f636b4e756d6265720110244163636f756e7449640100245478436f756e74657201100014010c6469640001344469644964656e74696669657200012874785f636f756e7465721001245478436f756e74657200011063616c6c2504012c44696443616c6c61626c65000130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720001247375626d69747465720001244163636f756e744964000029050c4470616c6c65745f6469645f6c6f6f6b75701870616c6c65741043616c6c04045400011c446173736f63696174655f6163636f756e7408010c7265712d05015c4173736f63696174654163636f756e745265717565737400012865787069726174696f6e100144426c6f636b4e756d626572466f723c543e00000488536565205b6050616c6c65743a3a6173736f63696174655f6163636f756e74605d2e406173736f63696174655f73656e64657200010484536565205b6050616c6c65743a3a6173736f63696174655f73656e646572605d2e6472656d6f76655f73656e6465725f6173736f63696174696f6e000204a8536565205b6050616c6c65743a3a72656d6f76655f73656e6465725f6173736f63696174696f6e605d2e6872656d6f76655f6163636f756e745f6173736f63696174696f6e04011c6163636f756e74190101444c696e6b61626c654163636f756e744964000304ac536565205b6050616c6c65743a3a72656d6f76655f6163636f756e745f6173736f63696174696f6e605d2e3c7265636c61696d5f6465706f73697404011c6163636f756e74190101444c696e6b61626c654163636f756e74496400040480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e506368616e67655f6465706f7369745f6f776e657204011c6163636f756e74190101444c696e6b61626c654163636f756e74496400050494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f73697404011c6163636f756e74190101444c696e6b61626c654163636f756e7449640006047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d050c4470616c6c65745f6469645f6c6f6f6b7570646173736f63696174655f6163636f756e745f726571756573745c4173736f63696174654163636f756e745265717565737400010820506f6c6b61646f74080000012c4163636f756e74496433320000310501384d756c74695369676e617475726500000020457468657265756d08001d01012c4163636f756e7449643230000035050144457468657265756d5369676e6174757265000100003105082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400bd040148656432353531393a3a5369676e61747572650000001c537232353531390400c5040148737232353531393a3a5369676e61747572650001001445636473610400c904014065636473613a3a5369676e61747572650002000035050c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e7444457468657265756d5369676e617475726500000400c904014065636473613a3a5369676e6174757265000039050c4470616c6c65745f776562335f6e616d65731870616c6c65741043616c6c04045400011c14636c61696d0401106e616d652d010140576562334e616d65496e7075743c543e00000458536565205b6050616c6c65743a3a636c61696d605d2e4072656c656173655f62795f6f776e657200010484536565205b6050616c6c65743a3a72656c656173655f62795f6f776e6572605d2e3c7265636c61696d5f6465706f7369740401106e616d652d010140576562334e616d65496e7075743c543e00020480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e0c62616e0401106e616d652d010140576562334e616d65496e7075743c543e00030450536565205b6050616c6c65743a3a62616e605d2e14756e62616e0401106e616d652d010140576562334e616d65496e7075743c543e00040458536565205b6050616c6c65743a3a756e62616e605d2e506368616e67655f6465706f7369745f6f776e657200050494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f7369740401286e616d655f696e7075742d010140576562334e616d65496e7075743c543e0006047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3d050c487075626c69635f63726564656e7469616c731870616c6c65741043616c6c04045400011c0c61646404012863726564656e7469616c41050164426f783c496e70757443726564656e7469616c4f663c543e3e00000450536565205b6050616c6c65743a3a616464605d2e187265766f6b6508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0001045c536565205b6050616c6c65743a3a7265766f6b65605d2e20756e7265766f6b6508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e00020464536565205b6050616c6c65743a3a756e7265766f6b65605d2e1872656d6f766508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0003045c536565205b6050616c6c65743a3a72656d6f7665605d2e3c7265636c61696d5f6465706f73697404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e00040480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e506368616e67655f6465706f7369745f6f776e657204013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e00050494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f73697404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0006047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e41050c487075626c69635f63726564656e7469616c732c63726564656e7469616c732843726564656e7469616c10244374797065486173680130445375626a6563744964656e74696669657201450518436c61696d7301490534416363657373436f6e74726f6c01ad040010012863747970655f6861736830012443747970654861736800011c7375626a656374450501445375626a6563744964656e746966696572000118636c61696d7349050118436c61696d73000134617574686f72697a6174696f6ea90401544f7074696f6e3c416363657373436f6e74726f6c3e000045050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000049050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00004d050c4070616c6c65745f6d6967726174696f6e1870616c6c65741043616c6c040454000104387570646174655f62616c616e63650401507265717565737465645f6d6967726174696f6e73a501014c456e7472696573546f4d6967726174653c543e0000047c536565205b6050616c6c65743a3a7570646174655f62616c616e6365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e51050c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f64617461040110646174615505015450617261636861696e496e686572656e744461746100000490536565205b6050616c6c65743a3a7365745f76616c69646174696f6e5f64617461605d2e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653401345570776172644d657373616765000104a4536565205b6050616c6c65743a3a7375646f5f73656e645f7570776172645f6d657373616765605d2e44617574686f72697a655f75706772616465080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6eac0110626f6f6c00020488536565205b6050616c6c65743a3a617574686f72697a655f75706772616465605d2e60656e6163745f617574686f72697a65645f75706772616465040110636f646534011c5665633c75383e000304a4536565205b6050616c6c65743a3a656e6163745f617574686f72697a65645f75706772616465605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5505089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f646174615905015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f73746174656105015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d657373616765736905016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573710501a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e000059050c4c706f6c6b61646f745f7072696d6974697665730876355c50657273697374656456616c69646174696f6e446174610804480130044e01200010012c706172656e745f686561645d050120486561644461746100014c72656c61795f706172656e745f6e756d6265722001044e00016472656c61795f706172656e745f73746f726167655f726f6f74300104480001306d61785f706f765f73697a6520010c75333200005d050c48706f6c6b61646f745f70617261636861696e287072696d6974697665732048656164446174610000040034011c5665633c75383e000061050c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f6465736505014442547265655365743c5665633c75383e3e00006505042042547265655365740404540134000400e10200000069050000026d05006d050860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d62657201200008011c73656e745f617420012c426c6f636b4e756d62657200010c6d736734013c446f776e776172644d65737361676500007105042042547265654d617008044b01e50104560175050004007d05000000750500000279050079050860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d62657201200008011c73656e745f617420012c426c6f636b4e756d6265720001106461746134015073705f7374643a3a7665633a3a5665633c75383e00007d05000002810500810500000408e50175050085050c3870617261636861696e5f696e666f1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e89050c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c04045400012448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d69742801185765696768740000048c536565205b6050616c6c65743a3a736572766963655f6f766572776569676874605d2e5473757370656e645f78636d5f657865637574696f6e00010498536565205b6050616c6c65743a3a73757370656e645f78636d5f657865637574696f6e605d2e50726573756d655f78636d5f657865637574696f6e00020494536565205b6050616c6c65743a3a726573756d655f78636d5f657865637574696f6e605d2e607570646174655f73757370656e645f7468726573686f6c6404010c6e657720010c753332000304a4536565205b6050616c6c65743a3a7570646174655f73757370656e645f7468726573686f6c64605d2e547570646174655f64726f705f7468726573686f6c6404010c6e657720010c75333200040498536565205b6050616c6c65743a3a7570646174655f64726f705f7468726573686f6c64605d2e5c7570646174655f726573756d655f7468726573686f6c6404010c6e657720010c753332000504a0536565205b6050616c6c65743a3a7570646174655f726573756d655f7468726573686f6c64605d2e5c7570646174655f7468726573686f6c645f77656967687404010c6e6577280118576569676874000604a0536565205b6050616c6c65743a3a7570646174655f7468726573686f6c645f776569676874605d2e707570646174655f7765696768745f72657374726963745f646563617904010c6e6577280118576569676874000704b4536565205b6050616c6c65743a3a7570646174655f7765696768745f72657374726963745f6465636179605d2e847570646174655f78636d705f6d61785f696e646976696475616c5f77656967687404010c6e6577280118576569676874000804c8536565205b6050616c6c65743a3a7570646174655f78636d705f6d61785f696e646976696475616c5f776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e8d050c2870616c6c65745f78636d1870616c6c65741043616c6c04045400012c1073656e6408011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011c6d65737361676591050154426f783c56657273696f6e656458636d3c28293e3e00000454536565205b6050616c6c65743a3a73656e64605d2e3c74656c65706f72745f61737365747310011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747381020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c75333200010480536565205b6050616c6c65743a3a74656c65706f72745f617373657473605d2e5c726573657276655f7472616e736665725f61737365747310011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747381020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c753332000204a0536565205b6050616c6c65743a3a726573657276655f7472616e736665725f617373657473605d2e1c6578656375746508011c6d657373616765c10501c0426f783c56657273696f6e656458636d3c3c5420617320537973436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f77656967687428011857656967687400030460536565205b6050616c6c65743a3a65786563757465605d2e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6ef1010148426f783c4d756c74694c6f636174696f6e3e00011c76657273696f6e20012858636d56657273696f6e00040488536565205b6050616c6c65743a3a666f7263655f78636d5f76657273696f6e605d2e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6e310401484f7074696f6e3c58636d56657273696f6e3e000504a8536565205b6050616c6c65743a3a666f7263655f64656661756c745f78636d5f76657273696f6e605d2e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6eb902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000604bc536565205b6050616c6c65743a3a666f7263655f7375627363726962655f76657273696f6e5f6e6f74696679605d2e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6eb902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000704c4536565205b6050616c6c65743a3a666f7263655f756e7375627363726962655f76657273696f6e5f6e6f74696679605d2e7c6c696d697465645f726573657276655f7472616e736665725f61737365747314011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747381020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c7533320001307765696768745f6c696d69747d02012c5765696768744c696d6974000804c0536565205b6050616c6c65743a3a6c696d697465645f726573657276655f7472616e736665725f617373657473605d2e5c6c696d697465645f74656c65706f72745f61737365747314011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747381020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c7533320001307765696768745f6c696d69747d02012c5765696768744c696d6974000904a0536565205b6050616c6c65743a3a6c696d697465645f74656c65706f72745f617373657473605d2e40666f7263655f73757370656e73696f6e04012473757370656e646564ac0110626f6f6c000a0484536565205b6050616c6c65743a3a666f7263655f73757370656e73696f6e605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e9105080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204009505015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304001502015076333a3a58636d3c52756e74696d6543616c6c3e0003000095050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400990501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e000099050000029d05009d050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404008502012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404008502012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404008502012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e7365a1050120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574738502012c4d756c746941737365747300012c62656e6566696369617279950201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574738502012c4d756c746941737365747300011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065650201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c69020168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572fd01010c7533320001406d61785f6d6573736167655f73697a65fd01010c7533320001306d61785f6361706163697479fd01010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74fd01010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72fd01010c75333200011873656e646572fd01010c753332000124726563697069656e74fd01010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040099020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374950201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473b10501404d756c7469417373657446696c7465720001286d61785f617373657473fd01010c75333200012c62656e6566696369617279950201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473b10501404d756c7469417373657446696c7465720001286d61785f617373657473fd01010c75333200011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e000e003445786368616e6765417373657408011067697665b10501404d756c7469417373657446696c74657200011c726563656976658502012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473b10501404d756c7469417373657446696c74657200011c72657365727665950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473b10501404d756c7469417373657446696c74657200011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374950201344d756c74694c6f636174696f6e000118617373657473b10501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e080110666565738d0201284d756c746941737365740001307765696768745f6c696d6974bd05012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204009505014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804009505014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574738502012c4d756c74694173736574730001187469636b6574950201344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b0000a1050c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304008502012c4d756c74694173736574730001003c457865637574696f6e526573756c740400a50501504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040020013873757065723a3a56657273696f6e00030000a50504184f7074696f6e04045401a9050108104e6f6e6500000010536f6d650400a9050000010000a9050000040820ad0500ad05100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404001001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c6500190000b105100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504008502012c4d756c74694173736574730000001057696c640400b505013857696c644d756c7469417373657400010000b505100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869649102011c4173736574496400010c66756eb905013c57696c6446756e676962696c69747900010000b905100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c6500010000bd050c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d6974656404002c010c75363400010000c105080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c0001080856320400c505015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400d505015076333a3a58636d3c52756e74696d6543616c6c3e00030000c5050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400c90501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000c905000002cd0500cd050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404008502012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404008502012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404008502012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e7365a1050120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574738502012c4d756c746941737365747300012c62656e6566696369617279950201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574738502012c4d756c746941737365747300011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065650201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6cd1050168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572fd01010c7533320001406d61785f6d6573736167655f73697a65fd01010c7533320001306d61785f6361706163697479fd01010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74fd01010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72fd01010c75333200011873656e646572fd01010c753332000124726563697069656e74fd01010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040099020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374950201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473b10501404d756c7469417373657446696c7465720001286d61785f617373657473fd01010c75333200012c62656e6566696369617279950201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473b10501404d756c7469417373657446696c7465720001286d61785f617373657473fd01010c75333200011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e000e003445786368616e6765417373657408011067697665b10501404d756c7469417373657446696c74657200011c726563656976658502012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473b10501404d756c7469417373657446696c74657200011c72657365727665950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473b10501404d756c7469417373657446696c74657200011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374950201344d756c74694c6f636174696f6e000118617373657473b10501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e080110666565738d0201284d756c746941737365740001307765696768745f6c696d6974bd05012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400c505014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e6469780400c505014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574738502012c4d756c74694173736574730001187469636b6574950201344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b0000d1050c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656434011c5665633c75383e0000d5050c0c78636d0876330c58636d041043616c6c00000400d90501585665633c496e737472756374696f6e3c43616c6c3e3e0000d905000002dd0500dd050c0c78636d0876332c496e737472756374696f6e041043616c6c0001c0345769746864726177417373657404002102012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404002102012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404002102012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e73653d020120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572610201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e7366657241737365740801186173736574732102012c4d756c746941737365747300012c62656e6566696369617279f10101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574732102012c4d756c746941737365747300011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64650201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6cd105014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572fd01010c7533320001406d61785f6d6573736167655f73697a65fd01010c7533320001306d61785f6361706163697479fd01010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74fd01010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72fd01010c75333200011873656e646572fd01010c753332000124726563697069656e74fd01010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400f5010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f7204006d0201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473710201404d756c7469417373657446696c74657200012c62656e6566696369617279f10101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473710201404d756c7469417373657446696c74657200011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e000e003445786368616e676541737365740c011067697665710201404d756c7469417373657446696c74657200011077616e742102012c4d756c746941737365747300011c6d6178696d616cac0110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473710201404d756c7469417373657446696c74657200011c72657365727665f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473710201404d756c7469417373657446696c74657200011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f6d0201445175657279526573706f6e7365496e666f000118617373657473710201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573290201284d756c746941737365740001307765696768745f6c696d69747d02012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400d505012458636d3c43616c6c3e0015002c536574417070656e6469780400d505012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574732102012c4d756c74694173736574730001187469636b6574f10101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e417373657404002102012c4d756c7469417373657473001c002c457870656374417373657404002102012c4d756c7469417373657473001d00304578706563744f726967696e0400610201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400410201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400590201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6534011c5665633c75383e000134726573706f6e73655f696e666f6d0201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578fd01010c7533320001106e616d6534011c5665633c75383e00012c6d6f64756c655f6e616d6534011c5665633c75383e00012c63726174655f6d616a6f72fd01010c75333200013c6d696e5f63726174655f6d696e6f72fd01010c753332002200505265706f72745472616e7361637453746174757304006d0201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400f90101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726b050201244e6574776f726b496400012c64657374696e6174696f6ef5010154496e746572696f724d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e002600244c6f636b41737365740801146173736574290201284d756c74694173736574000120756e6c6f636b6572f10101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574290201284d756c74694173736574000118746172676574f10101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574290201284d756c746941737365740001146f776e6572f10101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574290201284d756c746941737365740001186c6f636b6572f10101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177ac0110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400f10101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747d02012c5765696768744c696d6974000130636865636b5f6f726967696e610201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000e1050c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c65741043616c6c04045400010448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d69742801185765696768740000048c536565205b6050616c6c65743a3a736572766963655f6f766572776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee5050000021d0400e90500000408ed051800ed050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e0000f1050c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d62657201102050726f706f73616c0121041c42616c616e6365011801081c4f6e676f696e670400f50501c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564ac0110626f6f6c00010c656e6410012c426c6f636b4e756d62657200010000f5050c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d62657201102050726f706f73616c0121041c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200012070726f706f73616c2104012050726f706f73616c0001247468726573686f6c64980134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c79f905013854616c6c793c42616c616e63653e0000f9050c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e63650000fd050c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f746573000108184469726563740c0114766f746573010601f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e730d06015044656c65676174696f6e733c42616c616e63653e0001147072696f721106017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6e2d040128436f6e76696374696f6e00012c64656c65676174696f6e730d06015044656c65676174696f6e733c42616c616e63653e0001147072696f721106017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0001000001060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010506045300000400090601185665633c543e0000050600000408209c0009060000020506000d060c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e6365000011060c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e636500001506000004082104980019060000040810ed05001d060c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f720404540001602056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7740507265696d6167654e6f7445786973740017047054686520707265696d61676520646f6573206e6f742065786973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e21060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400b10101185665633c543e00002506084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e64657820013450726f706f73616c496e6465780001247468726573686f6c6420012c4d656d626572436f756e7400011061796573b90101385665633c4163636f756e7449643e0001106e617973b90101385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d626572000029060c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e2d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400b10101185665633c543e000031060c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e35060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e000039060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e3d06083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e6365000041060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540120045300000400b50301185665633c543e000045060c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040020010c7533320000490604184f7074696f6e04045401180108104e6f6e6500000010536f6d6504001800000100004d0608346672616d655f737570706f72742050616c6c65744964000004003902011c5b75383b20385d000051060c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900011470496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e04784572726f7220666f72207468652074726561737572792070616c6c65742e55060c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e59060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540179040453000004005d0601185665633c543e00005d060000027904006106083870616c6c65745f76657374696e672052656c65617365730001080856300000000856310001000065060c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742e69060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016d06045300000400750601185665633c543e00006d0604184f7074696f6e0404540171060108104e6f6e6500000010536f6d650400710600000100007106084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c0121042c426c6f636b4e756d62657201103450616c6c6574734f726967696e015504244163636f756e7449640100001401206d617962655f6964d401304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2104011043616c6c0001386d617962655f706572696f646963810401944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e5504013450616c6c6574734f726967696e000075060000026d060079060c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d06000004088106180081060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018506045300000400890601185665633c543e00008506083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501dc2c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065dc012450726f78795479706500011464656c617910012c426c6f636b4e756d626572000089060000028506008d06000004089106180091060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019506045300000400990601185665633c543e00009506083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801302c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173683001104861736800011868656967687410012c426c6f636b4e756d626572000099060000029506009d060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea106083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f736974a5060150284163636f756e7449642c2042616c616e63652900010c6c656e20010c753332000000245265717565737465640c011c6465706f736974a90601704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7420010c75333200010c6c656e3104012c4f7074696f6e3c7533323e00010000a50600000408001800a90604184f7074696f6e04045401a5060108104e6f6e6500000010536f6d650400a5060000010000ad0600000408302000b1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000b5060c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e0000bd060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec106082c70616c6c65745f746970731c4f70656e54697010244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572011010486173680130001c0118726561736f6e3001104861736800010c77686f0001244163636f756e74496400011866696e6465720001244163636f756e74496400011c6465706f73697418011c42616c616e6365000118636c6f736573c506014c4f7074696f6e3c426c6f636b4e756d6265723e00011074697073c90601645665633c284163636f756e7449642c2042616c616e6365293e00012c66696e646572735f666565ac0110626f6f6c0000c50604184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000c906000002a50600cd060c3473705f61726974686d65746963287065725f7468696e67731c50657263656e740000040008010875380000d1060c2c70616c6c65745f746970731870616c6c6574144572726f7208045400044900011830526561736f6e546f6f4269670000048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e30416c72656164794b6e6f776e00010488546865207469702077617320616c726561647920666f756e642f737461727465642e28556e6b6e6f776e5469700002046054686520746970206861736820697320756e6b6e6f776e2e244e6f7446696e6465720003041d01546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e245374696c6c4f70656e0004042901546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e245072656d61747572650005043101546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed50600000408000400d906083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656ef4015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c73dd06018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e0000dd060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e0000e1060c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee5060c1463747970652c63747970655f656e747279284374797065456e747279081c43726561746f7201002c426c6f636b4e756d62657201100008011c63726561746f7200011c43726561746f72000128637265617465645f617410012c426c6f636b4e756d6265720000e9060c1463747970651870616c6c6574144572726f7204045400010c204e6f74466f756e64000004985468657265206973206e6f20435479706520776974682074686520676976656e20686173682e34416c72656164794578697374730001046454686520435479706520616c7265616479206578697374732e3c556e61626c65546f506179466565730002040d0154686520706179696e67206163636f756e742077617320756e61626c6520746f2070617920746865206665657320666f72206372656174696e6720612063747970652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eed060c2c6174746573746174696f6e306174746573746174696f6e73484174746573746174696f6e44657461696c7314244374797065486173680130284174746573746572496401003c417574686f72697a6174696f6e4964010501244163636f756e74496401001c42616c616e636501180014012863747970655f68617368300124437479706548617368000120617474657374657200012841747465737465724964000140617574686f72697a6174696f6e5f69640101015c4f7074696f6e3c417574686f72697a6174696f6e49643e00011c7265766f6b6564ac0110626f6f6c00011c6465706f736974f106016c4465706f7369743c4163636f756e7449642c2042616c616e63653e0000f1060c306b696c745f737570706f72741c6465706f7369741c4465706f736974081c4163636f756e7401001c42616c616e63650118000801146f776e657200011c4163636f756e74000118616d6f756e7418011c42616c616e63650000f5060000040805013000f9060c2c6174746573746174696f6e1870616c6c6574144572726f720404540001183c416c726561647941747465737465640000080901546865726520697320616c726561647920616e206174746573746174696f6e2077697468207468652073616d6520636c61696d20686173682073746f726564206f6e18636861696e2e38416c72656164795265766f6b6564000104a4546865206174746573746174696f6e2068617320616c7265616479206265656e207265766f6b65642e204e6f74466f756e64000204c04e6f206174746573746174696f6e206f6e20636861696e206d61746368696e672074686520636c61696d20686173682e3443547970654d69736d61746368000308fc546865206174746573746174696f6e20435479706520646f6573206e6f74206d61746368207468652043547970652073706563696669656420696e207468656864656c65676174696f6e2068696572617263687920726f6f742e344e6f74417574686f72697a6564000404f05468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f206368616e676520746865206174746573746174696f6e2e804d617844656c6567617465644174746573746174696f6e73457863656564656400050cf4546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732068617320616c7265616479206265656e05017265616368656420666f722074686520636f72726573706f6e64696e672064656c65676174696f6e2069642073756368207468617420616e6f74686572206f6e654063616e6e6f742062652061646465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368793844656c65676174696f6e4e6f6465144044656c65676174696f6e4e6f6465496401302c4d61784368696c6472656e0101074444656c65676174696f6e44657461696c73010507244163636f756e74496401001c42616c616e63650118001401446869657261726368795f726f6f745f696430014044656c65676174696f6e4e6f64654964000118706172656e74350401604f7074696f6e3c44656c65676174696f6e4e6f646549643e0001206368696c6472656e090701b8426f756e64656442547265655365743c44656c65676174696f6e4e6f646549642c204d61784368696c6472656e3e00011c64657461696c730507014444656c65676174696f6e44657461696c7300011c6465706f736974f106016c4465706f7369743c4163636f756e7449642c2042616c616e63653e00000107103872756e74696d655f636f6d6d6f6e24636f6e7374616e74732864656c65676174696f6e2c4d61784368696c6472656e0000000005070c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368794444656c65676174696f6e44657461696c73042c44656c656761746f7249640100000c01146f776e657200012c44656c656761746f72496400011c7265766f6b6564ac0110626f6f6c00012c7065726d697373696f6e730d01012c5065726d697373696f6e73000009070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401300453000004000d07012c42547265655365743c543e00000d07042042547265655365740404540130000400b10100000011070c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368796844656c65676174696f6e48696572617263687944657461696c73042443747970654861736801300004012863747970655f68617368300124437479706548617368000015070c2864656c65676174696f6e1870616c6c6574144572726f720404540001585c44656c65676174696f6e416c72656164794578697374730000041101546865726520697320616c726561647920612064656c65676174696f6e206e6f64652077697468207468652073616d652049442073746f726564206f6e20636861696e2e60496e76616c696444656c65676174655369676e617475726500010805015468652064656c65676174652773207369676e617475726520666f72207468652064656c65676174696f6e206372656174696f6e206f7065726174696f6e20697320696e76616c69642e4844656c65676174696f6e4e6f74466f756e64000204c04e6f2064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e4044656c65676174654e6f74466f756e64000304b84e6f2064656c656761746520776974682074686520676976656e2049442073746f726564206f6e20636861696e2e58486965726172636879416c7265616479457869737473000404f8546865726520697320616c72656164792061206869657261726368792077697468207468652073616d652049442073746f726564206f6e20636861696e2e444869657261726368794e6f74466f756e64000504bc4e6f2068696572617263687920776974682074686520676976656e2049442073746f726564206f6e20636861696e2e544d617853656172636844657074685265616368656400060409014d6178206e756d626572206f66206e6f64657320636865636b656420776974686f757420766572696679696e672074686520676976656e20636f6e646974696f6e2e684e6f744f776e65724f66506172656e7444656c65676174696f6e000708f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6ef462656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20706172656e74206e6f64652e744e6f744f776e65724f6644656c65676174696f6e486965726172636879000808f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6eec62656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20726f6f74206e6f64652e60506172656e7444656c65676174696f6e4e6f74466f756e64000904dc4e6f20706172656e742064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e5c506172656e7444656c65676174696f6e5265766f6b6564000a04c854686520706172656e742064656c65676174696f6e206861732070726576696f75736c79206265656e207265766f6b65642e58556e617574686f72697a65645265766f636174696f6e000b04fc5468652064656c65676174696f6e207265766f6b6572206973206e6f7420616c6c6f77656420746f207265766f6b65207468652064656c65676174696f6e2e4c556e617574686f72697a656452656d6f76616c000c04ec5468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f2072656d6f7665207468652064656c65676174696f6e2e58556e617574686f72697a656444656c65676174696f6e000d04fc5468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f20637265617465207468652064656c65676174696f6e2e3041636365737344656e696564000e04f0546865206f7065726174696f6e207761736e277420616c6c6f7765642062656361757365206f6620696e73756666696369656e74207269676874732e6045786365656465645265766f636174696f6e426f756e6473000f080d014d6178206e756d626572206f66207265766f636174696f6e7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7238746865206f7065726174696f6e2e54457863656564656452656d6f76616c426f756e647300100811014d6178206e756d626572206f662072656d6f76616c7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7220746865286f7065726174696f6e2e584d61785265766f636174696f6e73546f6f4c61726765001104f8546865206d6178206e756d626572206f66207265766f636174696f6e206578636565647320746865206c696d697420666f72207468652070616c6c65742e4c4d617852656d6f76616c73546f6f4c61726765001204f0546865206d6178206e756d626572206f662072656d6f76616c73206578636565647320746865206c696d697420666f72207468652070616c6c65742e5c4d6178506172656e74436865636b73546f6f4c617267650013040501546865206d6178206e756d626572206f6620706172656e7420636865636b73206578636565647320746865206c696d697420666f72207468652070616c6c65742e20496e7465726e616c001404f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e4c4d61784368696c6472656e4578636565646564001508dc546865206d6178206e756d626572206f6620616c6c206368696c6472656e20686173206265656e207265616368656420666f722074686578636f72726573706f6e64696e672064656c65676174696f6e206e6f64652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e19070c0c6469642c6469645f64657461696c732844696444657461696c7304045400001c014861757468656e7469636174696f6e5f6b65793001284b657949644f663c543e0001486b65795f61677265656d656e745f6b6579731d0701684469644b657941677265656d656e744b65795365744f663c543e00013864656c65676174696f6e5f6b6579350401484f7074696f6e3c4b657949644f663c543e3e00013c6174746573746174696f6e5f6b6579350401484f7074696f6e3c4b657949644f663c543e3e00012c7075626c69635f6b657973210701504469645075626c69634b65794d61704f663c543e00013c6c6173745f74785f636f756e74657210010c75363400011c6465706f736974f10601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e00001d070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401300453000004000d07012c42547265655365743c543e000021070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b013004560125070453000004002d07013842547265654d61703c4b2c20563e000025070c0c6469642c6469645f64657461696c734c4469645075626c69634b657944657461696c73082c426c6f636b4e756d6265720110244163636f756e74496401000008010c6b65792907015c4469645075626c69634b65793c4163636f756e7449643e000130626c6f636b5f6e756d62657210012c426c6f636b4e756d626572000029070c0c6469642c6469645f64657461696c73304469645075626c69634b657904244163636f756e74496401000108545075626c6963566572696669636174696f6e4b6579040011050174446964566572696669636174696f6e4b65793c4163636f756e7449643e0000004c5075626c6963456e6372797074696f6e4b6579040001050140446964456e6372797074696f6e4b6579000100002d07042042547265654d617008044b01300456012507000400310700000031070000023507003507000004083025070039070000040800e104003d070c0c6469641870616c6c6574144572726f7204045400016c58496e76616c69645369676e6174757265466f726d6174000008050154686520444944206f7065726174696f6e207369676e6174757265206973206e6f7420696e2074686520666f726d61742074686520766572696669636174696f6e306b657920657870656374732e40496e76616c69645369676e6174757265000108f854686520444944206f7065726174696f6e207369676e617475726520697320696e76616c696420666f7220746865207061796c6f616420616e642074686568766572696669636174696f6e206b65792070726f76696465642e34416c7265616479457869737473000204f85468652044494420776974682074686520676976656e206964656e74696669657220697320616c72656164792070726573656e74206f6e20636861696e2e204e6f74466f756e64000304d44e6f2044494420776974682074686520676976656e206964656e7469666965722069732070726573656e74206f6e20636861696e2e5c566572696669636174696f6e4b65794e6f74466f756e6400040809014f6e65206f72206d6f726520766572696669636174696f6e206b657973207265666572656e63656420617265206e6f742073746f72656420696e2074686520736574546f6620766572696669636174696f6e206b6579732e30496e76616c69644e6f6e6365000504090154686520444944206f7065726174696f6e206e6f6e6365206973206e6f7420657175616c20746f207468652063757272656e7420444944206e6f6e6365202b20312e7c556e737570706f72746564446964417574686f72697a6174696f6e43616c6c000604e05468652063616c6c65642065787472696e73696320646f6573206e6f7420737570706f72742044494420617574686f7269736174696f6e2e6c496e76616c6964446964417574686f72697a6174696f6e43616c6c000708dc5468652063616c6c2068616420706172616d6574657273207468617420636f6e666c696374656420776974682065616368206f74686572406f72207765726520696e76616c69642e8c4d61784e65774b657941677265656d656e744b6579734c696d697445786365656465640008080d0141206e756d626572206f66206e6577206b65792061677265656d656e74206b6579732067726561746572207468616e20746865206d6178696d756d20616c6c6f77656448686173206265656e2070726f76696465642e544d61785075626c69634b65797345786365656465640009080501546865206d6178696d756d206e756d626572206f66207075626c6963206b65797320666f72207468697320444944206b6579206964656e74696669657220686173346265656e20726561636865642e6c4d61784b657941677265656d656e744b6579734578636565646564000a080501546865206d6178696d756d206e756d626572206f66206b65792061677265656d656e747320686173206265656e207265616368656420666f722074686520444944207375626a6563742e304261644469644f726967696e000b04bc546865204449442063616c6c20776173207375626d6974746564206279207468652077726f6e67206163636f756e74485472616e73616374696f6e45787069726564000c040d0154686520626c6f636b206e756d6265722070726f766964656420696e2061204449442d617574686f72697a6564206f7065726174696f6e20697320696e76616c69642e38416c726561647944656c65746564000d04b0546865204449442068617320616c7265616479206265656e2070726576696f75736c792064656c657465642e444e6f744f776e65724f664465706f736974000e04fc4f6e6c7920746865206f776e6572206f6620746865206465706f7369742063616e207265636c61696d206974732072657365727665642062616c616e63652e3c556e61626c65546f50617946656573000f04f0546865206f726967696e20697320756e61626c6520746f207265736572766520746865206465706f73697420616e642070617920746865206665652e6c4d61784e756d6265724f66536572766963657345786365656465640010041101546865206d6178696d756d206e756d626572206f66207365727669636520656e64706f696e747320666f7220612044494420686173206265656e2065786365656465642e684d61785365727669636549644c656e6774684578636565646564001104f0546865207365727669636520656e64706f696e7420494420657863656564656420746865206d6178696d756d20616c6c6f776564206c656e6774682e704d617853657276696365547970654c656e6774684578636565646564001208f84f6e65206f6620746865207365727669636520656e64706f696e7420747970657320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e884d61784e756d6265724f665479706573506572536572766963654578636565646564001308ec546865206d6178696d756d206e756d626572206f6620747970657320666f722061207365727669636520656e64706f696e7420686173206265656e2465786365656465642e6c4d61785365727669636555726c4c656e6774684578636565646564001408f44f6e65206f6620746865207365727669636520656e64706f696e742055524c7320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e844d61784e756d6265724f6655726c735065725365727669636545786365656465640015041101546865206d6178696d756d206e756d626572206f662055524c7320666f722061207365727669636520656e64706f696e7420686173206265656e2065786365656465642e5053657276696365416c726561647945786973747300160411014120736572766963652077697468207468652070726f766964656420494420697320616c72656164792070726573656e7420666f722074686520676976656e204449442e3c536572766963654e6f74466f756e6400170409014120736572766963652077697468207468652070726f7669646564204944206973206e6f742070726573656e7420756e6465722074686520676976656e204449442e58496e76616c696453657276696365456e636f64696e6700180409014f6e65206f6620746865207365727669636520656e64706f696e742064657461696c7320636f6e7461696e73206e6f6e2d415343494920636861726163746572732e7c4d617853746f726564456e64706f696e7473436f756e7445786365656465640019080d01546865206e756d626572206f66207365727669636520656e64706f696e74732073746f72656420756e6465722074686520444944206973206c6172676572207468616e88746865206e756d626572206f6620656e64706f696e747320746f2064656c6574652e20496e7465726e616c001a04f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e41070c4470616c6c65745f6469645f6c6f6f6b757044636f6e6e656374696f6e5f7265636f726440436f6e6e656374696f6e5265636f72640c344469644964656e74696669657201001c4163636f756e7401001c42616c616e636501180008010c6469640001344469644964656e74696669657200011c6465706f736974f10601644465706f7369743c4163636f756e742c2042616c616e63653e00004507000004080019010049070c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144572726f72040454000114204e6f74466f756e640000047c546865206173736f63696174696f6e20646f6573206e6f742065786973742e344e6f74417574686f72697a65640001081101546865206f726967696e20776173206e6f7420616c6c6f77656420746f206d616e61676520746865206173736f63696174696f6e206265747765656e20746865204449444c616e6420746865206163636f756e742049442e344f7574646174656450726f6f66000204b454686520737570706c6965642070726f6f66206f66206f776e65727368697020776173206f757464617465642e44496e73756666696369656e7446756e64730003081101546865206163636f756e742068617320696e73756666696369656e742066756e647320616e642063616e277420706179207468652066656573206f72207265736572766530746865206465706f7369742e244d6967726174696f6e00040c010154686520436f6e6e65637465644163636f756e747320616e6420436f6e6e6563746564446964732073746f7261676520617265206f7574206f662073796e632e0011014e4f54453a20746869732077696c6c206f6e6c792062652072657475726e6564206966207468652073746f726167652068617320696e636f6e73697374656e636965732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4d070c4470616c6c65745f776562335f6e616d657324776562335f6e616d6544576562334e616d654f776e6572736869700c144f776e657201001c4465706f73697401f1062c426c6f636b4e756d6265720110000c01146f776e65720001144f776e6572000128636c61696d65645f617410012c426c6f636b4e756d62657200011c6465706f736974f106011c4465706f736974000051070c4470616c6c65745f776562335f6e616d65731870616c6c6574144572726f7204045400013044496e73756666696369656e7446756e64730000040d01546865207478207375626d697474657220646f6573206e6f74206861766520656e6f7567682066756e647320746f2070617920666f7220746865206465706f7369742e34416c7265616479457869737473000104dc54686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c7920636c61696d65642e204e6f74466f756e640002048854686520737065636966696564206e616d6520646f6573206e6f742065786973742e484f776e6572416c7265616479457869737473000304a054686520737065636966696564206f776e657220616c7265616479206f776e732061206e616d652e344f776e65724e6f74466f756e64000404ac54686520737065636966696564206f776e657220646f6573206e6f74206f776e20616e79206e616d65732e1842616e6e6564000508ec54686520737065636966696564206e616d6520686173206265656e2062616e6e656420616e642063616e6e6f7420626520696e746572616374656414776974682e244e6f7442616e6e6564000604ac54686520737065636966696564206e616d65206973206e6f742063757272656e746c792062616e6e65642e34416c726561647942616e6e6564000704d854686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c792062616e6e65642e344e6f74417574686f72697a6564000804cc546865206163746f722063616e6e6f7420706572666f726d65642074686520737065636966696564206f7065726174696f6e2e20546f6f53686f7274000904a841206e616d65207468617420697320746f6f2073686f7274206973206265696e6720636c61696d65642e1c546f6f4c6f6e67000a04a441206e616d65207468617420697320746f6f206c6f6e67206973206265696e6720636c61696d65642e40496e76616c6964436861726163746572000b04f441206e616d65207468617420636f6e7461696e73206e6f7420616c6c6f7765642063686172616374657273206973206265696e6720636c61696d65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e55070c487075626c69635f63726564656e7469616c732c63726564656e7469616c733c43726564656e7469616c456e7472791824435479706548617368013020417474657374657201002c426c6f636b4e756d6265720110244163636f756e74496401001c42616c616e636501183c417574686f72697a6174696f6e49640105010018012863747970655f686173683001244354797065486173680001206174746573746572000120417474657374657200011c7265766f6b6564ac0110626f6f6c000130626c6f636b5f6e756d62657210012c426c6f636b4e756d62657200011c6465706f736974f106016c4465706f7369743c4163636f756e7449642c2042616c616e63653e000140617574686f72697a6174696f6e5f69640101015c4f7074696f6e3c417574686f72697a6174696f6e49643e000059070c487075626c69635f63726564656e7469616c731870616c6c6574144572726f720404540001183c416c72656164794174746573746564000008f8412063726564656e7469616c2077697468207468652073616d6520726f6f7420686173682068617320616c72656164792069737375656420746f2074686548737065636966696564207375626a6563742e204e6f74466f756e6400010805014e6f2063726564656e7469616c2077697468207468652073706563696669656420726f6f74206861736820686173206265656e2069737375656420746f2074686548737065636966696564207375626a6563742e3c556e61626c65546f50617946656573000204d44e6f7420656e6f75676820746f6b656e7320746f2070617920666f72207468652066656573206f7220746865206465706f7369742e30496e76616c6964496e707574000304805468652063726564656e7469616c20696e70757420697320696e76616c69642e344e6f74417574686f72697a6564000404e05468652063616c6c6572206973206e6f7420617574686f72697a656420746f20706572666f726d656420746865206f7065726174696f6e2e20496e7465726e616c000508f443617463682d616c6c20666f7220616e79206f74686572206572726f727320746861742073686f756c64206e6f742068617070656e2c207965742069742468617070656e65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e5d070c4070616c6c65745f6d6967726174696f6e1870616c6c6574144572726f72040454000104204b65795061727365000000048054686520604572726f726020656e756d206f6620746869732070616c6c65742e610704184f7074696f6e0404540165070108104e6f6e6500000010536f6d6504006507000001000065070c4c706f6c6b61646f745f7072696d69746976657308763548557067726164655265737472696374696f6e0001041c50726573656e740000000069070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f6865616430014472656c61795f636861696e3a3a4861736800016472656c61795f64697370617463685f71756575655f73697a656d07015452656c617944697370616368517565756553697a65000140696e67726573735f6368616e6e656c73710701885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c73710701885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00006d070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f745452656c617944697370616368517565756553697a65000008013c72656d61696e696e675f636f756e7420010c75333200013872656d61696e696e675f73697a6520010c75333200007107000002750700750700000408e50179070079070c4c706f6c6b61646f745f7072696d6974697665730876354c416272696467656448726d704368616e6e656c00001801306d61785f636170616369747920010c7533320001386d61785f746f74616c5f73697a6520010c7533320001406d61785f6d6573736167655f73697a6520010c7533320001246d73675f636f756e7420010c753332000128746f74616c5f73697a6520010c7533320001206d71635f68656164350401304f7074696f6e3c486173683e00007d070c4c706f6c6b61646f745f7072696d697469766573087635644162726964676564486f7374436f6e66696775726174696f6e00002401346d61785f636f64655f73697a6520010c7533320001486d61785f686561645f646174615f73697a6520010c7533320001586d61785f7570776172645f71756575655f636f756e7420010c7533320001546d61785f7570776172645f71756575655f73697a6520010c75333200015c6d61785f7570776172645f6d6573736167655f73697a6520010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746520010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746520010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e20012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c617920012c426c6f636b4e756d62657200008107089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e0000040030012452656c61794861736800008507042042547265654d617008044b01e5010456018107000400890700000089070000028d07008d0700000408e501810700910700000295070095070860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401e50100080124726563697069656e74e501010849640001106461746134015073705f7374643a3a7665633a3a5665633c75383e00009907087c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6eac0110626f6f6c00009d070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041901417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e672e5050726f686962697465644279506f6c6b61646f740001044d01506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e2e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733c77696c6c696e6720746f2072756e2e6856616c69646174696f6e446174614e6f74417661696c61626c650003041d0154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b2e74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404290154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b2e304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea107000002a50700a507086463756d756c75735f70616c6c65745f78636d705f717565756554496e626f756e644368616e6e656c44657461696c7300000c011873656e646572e50101185061726149640001147374617465a9070130496e626f756e6453746174650001406d6573736167655f6d65746164617461ad0701a85665633c2852656c6179426c6f636b4e756d6265722c2058636d704d657373616765466f726d6174293e0000a907086463756d756c75735f70616c6c65745f78636d705f717565756530496e626f756e645374617465000108084f6b0000002453757370656e64656400010000ad07000002b10700b1070000040820b50700b5070c48706f6c6b61646f745f70617261636861696e287072696d6974697665734458636d704d657373616765466f726d617400010c60436f6e636174656e6174656456657273696f6e656458636d0000005c436f6e636174656e61746564456e636f646564426c6f620001001c5369676e616c7300020000b90700000408e5012000bd07000002c10700c107086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74e50101185061726149640001147374617465c50701344f7574626f756e6453746174650001347369676e616c735f6578697374ac0110626f6f6c00012c66697273745f696e646578e0010c7531360001286c6173745f696e646578e0010c7531360000c507086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000c90700000408e501e000cd07086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e66696744617461000018014473757370656e645f7468726573686f6c6420010c75333200013864726f705f7468726573686f6c6420010c753332000140726573756d655f7468726573686f6c6420010c7533320001407468726573686f6c645f7765696768742801185765696768740001547765696768745f72657374726963745f646563617928011857656967687400016878636d705f6d61785f696e646976696475616c5f7765696768742801185765696768740000d1070000040ce501203400d5070c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f72040454000114304661696c6564546f53656e640000046c4661696c656420746f2073656e642058434d206d6573736167652e3042616458636d4f726967696e0001043c4261642058434d206f726967696e2e1842616458636d000204344261642058434d20646174612e484261644f766572776569676874496e64657800030454426164206f76657277656967687420696e6465782e3c5765696768744f7665724c696d6974000404f850726f76696465642077656967687420697320706f737369626c79206e6f7420656e6f75676820746f206578656375746520746865206d6573736167652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed9070c2870616c6c65745f78636d1870616c6c65742c5175657279537461747573042c426c6f636b4e756d6265720110010c1c50656e64696e67100124726573706f6e646572b902015856657273696f6e65644d756c74694c6f636174696f6e00014c6d617962655f6d617463685f71756572696572dd0701784f7074696f6e3c56657273696f6e65644d756c74694c6f636174696f6e3e0001306d617962655f6e6f74696679e10701404f7074696f6e3c2875382c207538293e00011c74696d656f757410012c426c6f636b4e756d6265720000003c56657273696f6e4e6f7469666965720801186f726967696eb902015856657273696f6e65644d756c74694c6f636174696f6e00012469735f616374697665ac0110626f6f6c000100145265616479080120726573706f6e7365e907014456657273696f6e6564526573706f6e7365000108617410012c426c6f636b4e756d62657200020000dd0704184f7074696f6e04045401b9020108104e6f6e6500000010536f6d650400b9020000010000e10704184f7074696f6e04045401e5070108104e6f6e6500000010536f6d650400e5070000010000e50700000408080800e907080c78636d4456657273696f6e6564526573706f6e73650001080856320400a105013076323a3a526573706f6e736500020008563304003d02013076333a3a526573706f6e736500030000ed070000040820b90200f1070000040c10282000f5070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f907045300000400fd0701185665633c543e0000f90700000408b9022000fd07000002f9070001080c2870616c6c65745f78636d1870616c6c65745456657273696f6e4d6967726174696f6e53746167650001105c4d696772617465537570706f7274656456657273696f6e0000005c4d69677261746556657273696f6e4e6f74696669657273000100504e6f7469667943757272656e745461726765747304000508013c4f7074696f6e3c5665633c75383e3e000200684d696772617465416e644e6f746966794f6c645461726765747300030000050804184f7074696f6e04045401340108104e6f6e6500000010536f6d65040034000001000009080000040c20000d08000d08080c78636d4056657273696f6e65644173736574496400010408563304002d02012c76333a3a417373657449640003000011080c2870616c6c65745f78636d1870616c6c65746852656d6f74654c6f636b656446756e6769626c655265636f72640848436f6e73756d65724964656e746966696572013902304d6178436f6e73756d6572730000100118616d6f756e74180110753132380001146f776e6572b902015856657273696f6e65644d756c74694c6f636174696f6e0001186c6f636b6572b902015856657273696f6e65644d756c74694c6f636174696f6e000124636f6e73756d657273150801d0426f756e6465645665633c28436f6e73756d65724964656e7469666965722c2075313238292c204d6178436f6e73756d6572733e000015080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540119080453000004001d0801185665633c543e0000190800000408390218001d0800000219080021080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012508045300000400290801185665633c543e000025080000040818b9020029080000022508002d080c2870616c6c65745f78636d1870616c6c6574144572726f720404540001502c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108610154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652e2050657268617073a861206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e30496e76616c69644173736574000d0480496e76616c696420617373657420666f7220746865206f7065726174696f6e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304490154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c20636f6e73756d657273206f6620746865206c6f636b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e31080c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144572726f72040454000100048054686520604572726f726020656e756d206f6620746869732070616c6c65742e3508086063756d756c75735f70616c6c65745f646d705f717565756528436f6e6669674461746100000401386d61785f696e646976696475616c28011857656967687400003908086063756d756c75735f70616c6c65745f646d705f71756575653450616765496e6465784461746100000c0128626567696e5f7573656420012c50616765436f756e746572000120656e645f7573656420012c50616765436f756e7465720001406f7665727765696768745f636f756e7410013c4f766572776569676874496e64657800003d0800000241080041080000040820340045080c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144572726f720404540001081c556e6b6e6f776e0000048c546865206d65737361676520696e64657820676976656e20697320756e6b6e6f776e2e244f7665724c696d6974000104310154686520616d6f756e74206f662077656967687420676976656e20697320706f737369626c79206e6f7420656e6f75676820666f7220657865637574696e6720746865206d6573736167652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4908102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730121031043616c6c012504245369676e6174757265013105144578747261014d08000400340000004d08000004205108550859085d08610869086d08710800510810306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000550810306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000590810306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e040454000000005d0810306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000610810306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004006508010c45726100006508102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000690810306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e6365040454000004002c0120543a3a4e6f6e636500006d0810306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000007108086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e74040454000004000902013042616c616e63654f663c543e0000981853797374656d011853797374656d401c4163636f756e7401010402000c510100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000020040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010024180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000020040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510308000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040520340400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d626572010010200000000000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003080000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010038040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004804001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010020100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f706963730101040230c9020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000cd0204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100ac0400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100ac0400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000c502040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01d50201541830426c6f636b57656967687473e5026d01025b1f5d00070088526a7402004001c2a0a91d000107d00918a44b0200d000010700e6bd4f570200f000010000c2a0a91d000107d0abacbe680200200101070088526a7402004001010700a2941a1d02005000c2a0a91d0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468f5023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e7410206009000000000000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874fd0240089d26020000000000dce704000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e01036103386b696c742d7370697269746e6574386b696c742d7370697269746e657401000000ca2b00000000000038df6acb689907609b0400000037e397fc7c91f5e402000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000f3ff14d5ab5270590300000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000dd718d5cc53262d401000000ea93e3f16f3d69620200000026609555c065660302000000a47b7d544994c99b0100000045bfba51a310b2230100000008000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e2853533538507265666978e008260014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e011103002454696d657374616d70012454696d657374616d70080c4e6f7701001020000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100ac040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0115030004344d696e696d756d506572696f6410207017000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00021c496e6469636573011c496e646963657304204163636f756e7473000104021019030400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e011d030178041c4465706f736974184000b47cf328350000000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e012903052042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b7301010402002d03040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e20526573657276657301010402003d03040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e14486f6c6473010104020049030400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a6573010104020071030400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e018503017c14484578697374656e7469616c4465706f736974184000a0724e18090000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7320103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573201032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e204d6178486f6c647320103200000004190120546865206d6178696d756d206e756d626572206f6620686f6c647320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e284d6178467265657a657320103200000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01890306485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c69657201008d0340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100910304000000018404604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00071041757261011041757261082c417574686f726974696573010095030400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f740100a5032000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000171c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100b9010400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010020100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e6765640100ac040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b6579730100a9030400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f72730100b5030400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b6579730001040500b1030400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405b90300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e01c10301880001c503164050617261636861696e5374616b696e67014050617261636861696e5374616b696e6740544d617853656c656374656443616e64696461746573010020100000000004090120546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c6563746564206174206561636820726f756e642e14526f756e640100c90350000000000000000000000000140000000000000004e82043757272656e7420726f756e64206e756d62657220616e64206e65787420726f756e64207363686564756c6564207472616e736974696f6e2e384c61737444656c65676174696f6e0101040500cd03200000000000000000140d012044656c65676174696f6e20696e666f726d6174696f6e20666f7220746865206c61746573742073657373696f6e20696e20776869636820612064656c656761746f722c2064656c6567617465642e000501204974206d6170732066726f6d20616e206163636f756e7420746f20746865206e756d626572206f662064656c65676174696f6e7320696e20746865206c617374982073657373696f6e20696e2077686963682074686579202872652d2964656c6567617465642e3844656c656761746f7253746174650001040500d10304000c802044656c65676174696f6e207374616b696e6720696e666f726d6174696f6e2e00cc204974206d6170732066726f6d20616e206163636f756e7420746f206974732064656c65676174696f6e2064657461696c732e3443616e646964617465506f6f6c0001040500d503040010a420546865207374616b696e6720696e666f726d6174696f6e20666f7220612063616e6469646174652e00b0204974206d6170732066726f6d20616e206163636f756e7420746f2069747320696e666f726d6174696f6e2eb8204d6f72656f7665722c20697420636f756e747320746865206e756d626572206f662063616e646964617465732e5c436f756e746572466f7243616e646964617465506f6f6c010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617048546f74616c436f6c6c61746f725374616b650100e90380000000000000000000000000000000000000000000000000000000000000000014f420546f74616c2066756e6473206c6f636b656420746f206261636b207468652063757272656e746c792073656c656374656420636f6c6c61746f72732ed0205468652073756d206f6620616c6c20636f6c6c61746f7220616e642074686569722064656c656761746f72207374616b65732e002101204e6f74653a20546865726520617265206d6f72652066756e6473206c6f636b656420627920746869732070616c6c65742c2073696e636520746865206261636b696e6720666f720901206e6f6e20636f6c6c6174696e672063616e64696461746573206973206e6f7420696e636c7564656420696e2060546f74616c436f6c6c61746f725374616b65602e34546f7043616e646964617465730100ed03040028e82054686520636f6c6c61746f722063616e64696461746573207769746820746865206869676865737420616d6f756e74206f66207374616b652e00190120456163682074696d6520746865207374616b65206f66206120636f6c6c61746f7220697320696e637265617365642c20697420697320636865636b65642077686574686572050120746869732070757368657320616e6f746865722063616e646964617465206f7574206f6620746865206c6973742e205768656e20746865207374616b652069732101207265647563656420686f77657665722c206974206973206e6f7420636865636b656420696620616e6f746865722063616e64696461746520686173206d6f7265207374616b652c11012073696e6365207468697320776f756c64207265717569726520697465726174696e67206f7665722074686520656e74697265206043616e646964617465506f6f6c602e001501205468657265206d75737420616c77617973206265206d6f72652063616e64696461746573207468616e20604d617853656c656374656443616e646964617465736020736f0d012074686174206120636f6c6c61746f722063616e2064726f70206f7574206f662074686520636f6c6c61746f7220736574206279207265647563696e672074686569721c207374616b652e3c496e666c6174696f6e436f6e6669670100f503c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046420496e666c6174696f6e20636f6e66696775726174696f6e2e24556e7374616b696e670101040500010404001088205468652066756e64732077616974696e6720746f20626520756e7374616b65642e001d01204974206d6170732066726f6d206163636f756e747320746f20616c6c207468652066756e64732061646472657373656420746f207468656d20696e20746865206675747572652020626c6f636b732e644d6178436f6c6c61746f7243616e6469646174655374616b65010018400000000000000000000000000000000004cc20546865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e6469646174652063616e207374616b652e4c4c617374526577617264526564756374696f6e010010200000000000000000140d0120546865207965617220696e20776869636820746865206c617374206175746f6d6174696320726564756374696f6e206f66207468652072657761726420726174657328206f636375727265642e00250120497420737461727473206174207a65726f2061742067656e6573697320616e6420696e6372656d656e7473206279206f6e6520657665727920424c4f434b535f5045525f5945415234206d616e7920626c6f636b732e38426c6f636b73417574686f726564010104050010200000000000000000080d0120546865206e756d626572206f6620617574686f72656420626c6f636b7320666f7220636f6c6c61746f72732e20497420697320757064617465642076696120746865b020606e6f74655f617574686f726020686f6f6b207768656e20617574686f72696e67206120626c6f636b202e38426c6f636b73526577617264656401010405001020000000000000000024210120546865206e756d626572206f6620626c6f636b7320666f7220776869636820726577617264732068617665206265656e20636c61696d656420627920616e20616464726573732e00190120466f7220636f6c6c61746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f7265642e2049742069732075706461746564207768656ecc20696e6372656d656e74696e6720636f6c6c61746f7220726577617264732c20656974686572207768656e2063616c6c696e67e02060696e635f636f6c6c61746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e00250120466f722064656c656761746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f726564206f662074686520636f6c6c61746f722e497420697305012075706461746564207768656e20696e6372656d656e74696e672064656c656761746f7220726577617264732c20656974686572207768656e2063616c6c696e67e42060696e635f64656c656761746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e1c5265776172647301010405001840000000000000000000000000000000000c01012054686520616363756d756c61746564207265776172647320666f7220636f6c6c61746f722063616e6469646174657320616e642064656c656761746f72732e001101204974206d6170732066726f6d206163636f756e747320746f20746865697220746f74616c20726577617264732073696e636520746865206c617374207061796f75742e34466f7263654e6577526f756e640100ac040000011104018c3c444d696e426c6f636b73506572526f756e6410202c0100000000000004d4204d696e696d756d206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e64732063616e206c6173742e5444656661756c74426c6f636b73506572526f756e641020580200000000000008fc2044656661756c74206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e6473206c6173742c2061732073657420696e207468655c2067656e6573697320636f6e66696775726174696f6e2e345374616b654475726174696f6e1020e0c40000000000000c0501204e756d626572206f6620626c6f636b7320666f7220776869636820756e7374616b65642062616c616e63652077696c6c207374696c6c206265206c6f636b6564f0206265666f72652069742063616e20626520756e6c6f636b6564206279206163746976656c792063616c6c696e67207468652065787472696e7369634c2060756e6c6f636b5f756e7374616b6564602e3845786974517565756544656c6179201002000000080901204e756d626572206f6620726f756e6473206120636f6c6c61746f722068617320746f207374617920616374697665206166746572207375626d697474696e672061c4207265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e304d696e436f6c6c61746f7273201010000000080d01204d696e696d756d206e756d626572206f6620636f6c6c61746f72732073656c65637465642066726f6d2074686520736574206f662063616e64696461746573206174602065766572792076616c69646174696f6e20726f756e642e504d696e5265717569726564436f6c6c61746f7273201004000000081101204d696e696d756d206e756d626572206f6620636f6c6c61746f72732077686963682063616e6e6f74206c6561766520746865206e6574776f726b2069662074686572653c20617265206e6f206f74686572732e584d617844656c65676174696f6e73506572526f756e64201001000000140101204d6178696d756d206e756d626572206f662064656c65676174696f6e732077686963682063616e206265206d6164652077697468696e207468652073616d651c20726f756e642e000d01204e4f54453a20546f2070726576656e742072652d64656c65676174696f6e2d7265776172642061747461636b732c2077652073686f756c64206b65657020746869732c20746f206265206f6e652e604d617844656c656761746f7273506572436f6c6c61746f7220102300000004e4204d6178696d756d206e756d626572206f662064656c656761746f727320612073696e676c6520636f6c6c61746f722063616e20686176652e404d6178546f7043616e6469646174657320104b00000004a0204d6178696d756d2073697a65206f662074686520746f702063616e64696461746573207365742e404d696e436f6c6c61746f725374616b6518400000e8890423c78a0000000000000000080901204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520656c65637465642061732076616c696461746f723420666f72206120726f756e642e644d696e436f6c6c61746f7243616e6469646174655374616b6518400000e8890423c78a0000000000000000080501204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520616464656420746f2074686520736574206f66302063616e646964617465732e444d696e44656c656761746f725374616b651840000082dfe40d4700000000000000000004f8204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f206265636f6d6520612064656c656761746f722e484d6178556e7374616b65526571756573747320100a00000028e8204d6178206e756d626572206f6620636f6e63757272656e742061637469766520756e7374616b696e67207265717565737473206265666f72652c20756e6c6f636b696e672e001501204e4f54453a20546f2070726f7465637420616761696e737420697272656d6f766162696c697479206f6620612063616e646964617465206f722064656c656761746f722cf4207765206f6e6c7920616c6c6f7720666f72204d6178556e7374616b655265717565737473202d2031206d616e79206d616e75616c20756e7374616b6501012072657175657374732e20546865206c617374206f6e6520736572766573206173206120706c616365686f6c64657220666f7220746865206361736573206f66f02063616c6c696e672065697468657220606b69636b5f64656c656761746f72602c20666f7263655f72656d6f76655f63616e64696461746560206f7209012060657865637574655f6c656176655f63616e64696461746573602e204f74686572776973652c2061207573657220636f756c64206d6178206f75742074686569720d0120756e7374616b6520726571756573747320616e642070726576656e74207468656d73656c7665732066726f6d206265696e67206b69636b65642066726f6d20746865f020736574206f662063616e646964617465732f64656c656761746f727320756e74696c207468657920756e6c6f636b2074686569722066756e64732e484e6574776f726b5265776172645374617274102048a3c800000000000c110120546865207374617274696e6720626c6f636b206e756d62657220666f7220746865206e6574776f726b20726577617264732e204f6e6365207468652063757272656e74090120626c6f636b206e756d626572206578636565647320746869732073746172742c207468652062656e65666963696172792077696c6c2072656365697665207468658420636f6e666967757265642072657761726420696e206561636820626c6f636b2e444e6574776f726b52657761726452617465902000008a5d784563010c0d0120546865207261746520696e2070657263656e7420666f7220746865206e6574776f726b207265776172647320776869636820617265206261736564206f6e207468650901206d6178696d756d206e756d626572206f6620636f6c6c61746f727320616e6420746865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e1c207374616b652e0115041528417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000141c41757261457874011c41757261457874042c417574686f72697469657301009503040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c790120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c20616c77617973f0206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e00000000182444656d6f6372616379012444656d6f6372616379303c5075626c696350726f70436f756e74010020100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f707301001904040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f660001040520e90504000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e74010020100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b6564010020100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f660001040520f10504000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f660101040500fd05e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100ac0400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c00001506040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c6973740001040630190604000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e730101040630ac0400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e284d657461646174614f6600010402a430040018ec2047656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720616e792070726f706f73616c206f72207265666572656e64756d2e6901205468652060507265696d61676548617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e0129040194303c456e6163746d656e74506572696f641020201c00000000000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f641020e0c400000000000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f641020e0c400000000000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f641020e0c4000000000000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400080c6a47e8d0300000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f776564ac04010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f641020840300000000000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f641020e0c400000000000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f74657320106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c73201064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f73697473201064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c697374656420106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e011d061e1c436f756e63696c011c436f756e63696c182450726f706f73616c7301002106040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406302504040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e6700010406302506040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010020100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100b9010400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01390401a804444d617850726f706f73616c576569676874282807004429353a0200a00004250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e0129061f48546563686e6963616c436f6d6d69747465650148546563686e6963616c436f6d6d6974746565182450726f706f73616c7301002d06040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406302504040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e6700010406302506040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010020100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100b9010400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01410401b804444d617850726f706f73616c576569676874282807004429353a0200a00004250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e013106204c546563686e6963616c4d656d62657273686970014c546563686e6963616c4d656d62657273686970081c4d656d6265727301003506040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01450401bc000139062220547265617375727901205472656173757279103450726f706f73616c436f756e74010020100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c7300010405203d060400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c7301004106040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e01490401c01c3050726f706f73616c426f6e6445061050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d1840000082dfe40d47000000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756d49060400044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f641020c0a8000000000000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726e450610000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c657449644d06206b696c742f7473790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c732010640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e015106231c5574696c69747900014d0401c4044c626174636865645f63616c6c735f6c696d69742010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e015506281c56657374696e67011c56657374696e67081c56657374696e6700010402005906040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100610604000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01750401c808444d696e5665737465645472616e73666572184000407a10f35a0000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657320101c0000000001650629245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e6461010104051069060400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b75700001040504d0040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e017d0401cc08344d6178696d756d57656967687428280700a0db215d0200000104290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b201032000000141d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0018204e4f54453a5101202b20446570656e64656e742070616c6c657473272062656e63686d61726b73206d696768742072657175697265206120686967686572206c696d697420666f72207468652073657474696e672e205365742061c420686967686572206c696d697420756e646572206072756e74696d652d62656e63686d61726b736020666561747572652e0179062a1450726f7879011450726f7879081c50726f7869657301010405007d064400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e747301010405008d0644000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01850401d8184050726f78794465706f7369744261736518400020f7a54b330000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f72184000f4a92b80010000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657320100a00000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6720100a00000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f7369744261736518400020f7a54b330000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72184000e8535700030000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e019d062b20507265696d6167650120507265696d6167650824537461747573466f720001040630a1060400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f7200010406ad06b106040000018d0401e40001b5062c38546970734d656d626572736869700138546970734d656d62657273686970081c4d656d626572730100b906040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01910401e80001bd062d10546970730110546970730810546970730001040530c10604000c650120546970734d6170207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e3d012054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c7265616479802067756172616e7465656420746f20626520612073656375726520686173682e1c526561736f6e7300010406303404000849012053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e610120696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e01950401ec144c4d6178696d756d526561736f6e4c656e6774682010004000000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756548446174614465706f73697450657242797465184000743ba40b00000000000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e30546970436f756e74646f776e1020201c0000000000000445012054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e3454697046696e64657273466565cd060400043501205468652070657263656e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e505469705265706f72744465706f73697442617365184000f45628fa320000000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e01d1062e204d756c746973696701204d756c746973696704244d756c7469736967730001080502d506d906040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01990401f00c2c4465706f73697442617365184000801b84ee320000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f72184000743ba40b00000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657320104000000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e01e1062f1443747970650114437479706504184374797065730001040230e50604001060204354797065732073746f726564206f6e20636861696e2e001901204974206d6170732066726f6d2061204354797065206861736820746f206974732063726561746f7220616e6420626c6f636b206e756d62657220696e207768696368206974342077617320637265617465642e01a10401f80001e9063d2c4174746573746174696f6e012c4174746573746174696f6e08304174746573746174696f6e730001040230ed0604000c78204174746573746174696f6e732073746f726564206f6e20636861696e2e00cc204974206d6170732066726f6d206120636c61696d206861736820746f207468652066756c6c206174746573746174696f6e2e5045787465726e616c4174746573746174696f6e730101080502f506ac04000ca02044656c656761746564206174746573746174696f6e732073746f726564206f6e20636861696e2e00e8204974206d6170732066726f6d20612064656c65676174696f6e20494420746f206120766563746f72206f6620636c61696d206861736865732e01a50401fc081c4465706f7369741840001cc9dd006e0000000000000000000004e420546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720616e206174746573746174696f6e2e604d617844656c6567617465644174746573746174696f6e732010e803000008090120546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732077686963682063616e206265206d61646520627954207468652073616d652064656c65676174696f6e2e01f9063e2844656c65676174696f6e012844656c65676174696f6e083c44656c65676174696f6e4e6f6465730001040230fd0604000c882044656c65676174696f6e206e6f6465732073746f726564206f6e20636861696e2e00b0204974206d6170732066726f6d2061206e6f646520494420746f20746865206e6f64652064657461696c732e5444656c65676174696f6e48696572617263686965730001040230110704000ca02044656c65676174696f6e2068696572617263686965732073746f726564206f6e20636861696e2e00dc204974206d61707320666f7220612028726f6f7429206e6f646520494420746f20746865206869657261726368792064657461696c732e01b504010901181c4465706f73697418400080c6a47e8d0300000000000000000004dc20546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720612064656c65676174696f6e2e584d61785369676e6174757265427974654c656e677468e008400000384d61785265766f636174696f6e73201005000000047c204d6178696d756d206e756d626572206f66207265766f636174696f6e732e2c4d617852656d6f76616c7320100500000004f4204d6178696d756d206e756d626572206f662072656d6f76616c732e2053686f756c642062652073616d65206173204d61785265766f636174696f6e733c4d6178506172656e74436865636b73201005000000080d01204d6178696d756d206e756d626572206f6620757077617264732074726176657273616c73206f66207468652064656c65676174696f6e20747265652066726f6d2061f0206e6f646520746f2074686520726f6f7420616e64207468757320746865206465707468206f66207468652064656c65676174696f6e20747265652e2c4d61784368696c6472656e2010e80300000c0d01204d6178696d756d206e756d626572206f6620616c6c206368696c6472656e20666f7220612064656c65676174696f6e206e6f64652e20466f7220612062696e617279fc20747265652c20746869732073686f756c6420626520747769636520746865206d6178696d756d206465707468206f662074686520747265652c20692e652e5c206032205e204d6178506172656e74436865636b73602e0115073f0c446964010c446964100c4469640001040200190704000c5820444944732073746f726564206f6e20636861696e2e00c8204974206d6170732066726f6d206120444944206964656e74696669657220746f20746865204449442064657461696c732e4053657276696365456e64706f696e747300010805023907dd0404000ca0205365727669636520656e64706f696e7473206173736f636961746564207769746820444944732e000901204974206d6170732066726f6d2028444944206964656e7469666965722c20736572766963652049442920746f2074686520736572766963652064657461696c732e44446964456e64706f696e7473436f756e7401010402002010000000000cac20436f756e746572206f66207365727669636520656e64706f696e747320666f722065616368204449442e00cc204974206d6170732066726f6d2028444944206964656e7469666965722920746f20612033322d62697420636f756e7465722e30446964426c61636b6c6973740001040200b40400141d012054686520736574206f66204449447320746861742068617665206265656e2064656c6574656420616e642063616e6e6f74207468657265666f726520626520637265617465647020616761696e20666f7220736563757269747920726561736f6e732e002101204974206d6170732066726f6d206120444944206964656e74696669657220746f206120756e6974207475706c652c20666f72207468652073616b65206f6620747261636b696e674420444944206964656e746966696572732e01d104011101382c426173654465706f736974184000008d49fd1a07000000000000000000100d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974f820746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f73697473fc20696e6372656173652062792074686520616d6f756e74206f662075736564206b65797320616e64207365727669636520656e64706f696e74732e20546865c8206465706f7369742063616e206265207265636c61696d6564207768656e20746865204449442069732064656c657465642e5853657276696365456e64706f696e744465706f736974184000b0156a084a00000000000000000000100d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368207365727669636520656e64706f696e7409012061732061206465706f73697420746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e205468651501206465706f7369742063616e206265207265636c61696d6564207768656e20746865207365727669636520656e64706f696e742069732072656d6f766564206f722074686534204449442064656c657465642e284b65794465706f736974184000dc20749701000000000000000000000805012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368206164646564206b65792061732061e4206465706f73697420746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e0c466565184000203d88792d000000000000000000000c09012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f7220656163682044494420617320612066656520746f0d0120696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206665652077696c6c206e6f74206765748820726566756e646564207768656e20746865204449442069732064656c657465642e4c4d61785075626c69634b6579735065724469642010140000000c1101204d6178696d756d206e756d626572206f6620746f74616c207075626c6963206b6579732077686963682063616e2062652073746f7265642070657220444944206b6579d8206964656e7469666965722e205468697320696e636c7564657320746865206f6e65732063757272656e746c79207573656420666f72f02061757468656e7469636174696f6e2c206b65792061677265656d656e742c206174746573746174696f6e2c20616e642064656c65676174696f6e2e584d61784e65774b657941677265656d656e744b65797320100a000000081501204d6178696d756d206e756d626572206f66206b65792061677265656d656e74206b65797320746861742063616e20626520616464656420696e2061206372656174696f6e2c206f7065726174696f6e2e604d6178546f74616c4b657941677265656d656e744b657973201013000000101101204d6178696d756d206e756d626572206f6620746f74616c206b65792061677265656d656e74206b65797320746861742063616e2062652073746f72656420666f7220613420444944207375626a6563742e00c42053686f756c642062652067726561746572207468616e20604d61784e65774b657941677265656d656e744b657973602e4c4d6178426c6f636b73547856616c696469747910202c0100000000000008ec20546865206d6178696d756d206e756d626572206f6620626c6f636b732061204449442d617574686f72697a6564206f7065726174696f6e2069739420636f6e736964657265642076616c696420616674657220697473206372656174696f6e2e644d61784e756d6265724f66536572766963657350657244696420101900000004fc20546865206d6178696d756d206e756d626572206f6620736572766963657320746861742063616e2062652073746f72656420756e6465722061204449442e484d61785365727669636549644c656e677468201032000000049020546865206d6178696d756d206c656e677468206f66206120736572766963652049442e504d617853657276696365547970654c656e67746820103200000004c820546865206d6178696d756d206c656e677468206f66206120736572766963652074797065206465736372697074696f6e2e684d61784e756d6265724f6654797065735065725365727669636520100100000004090120546865206d6178696d756d206e756d626572206f662061207479706573206465736372697074696f6e20666f722061207365727669636520656e64706f696e742e4c4d61785365727669636555726c4c656e6774682010c8000000049420546865206d6178696d756d206c656e677468206f66206120736572766963652055524c2e644d61784e756d6265724f6655726c735065725365727669636520100200000004d420546865206d6178696d756d206e756d626572206f6620612055524c7320666f722061207365727669636520656e64706f696e742e013d074024496e666c6174696f6e000000084c496e697469616c506572696f644c656e677468102048a3c800000000000c050120546865206c656e677468206f662074686520696e697469616c20706572696f6420696e2077686963682074686520636f6e7374616e74207265776172642069731101206d696e7465642e204f6e6365207468652063757272656e7420626c6f636b206578636565647320746869732c207265776172647320617265206e6f206675727468657220206973737565642e4c496e697469616c506572696f64526577617264184036f539fdaeb30200000000000000000008fc2054686520616d6f756e74206f66206e65776c792069737375656420746f6b656e732070657220626c6f636b20647572696e672074686520696e697469616c2020706572696f642e0042244469644c6f6f6b757001244469644c6f6f6b75700834436f6e6e6563746564446964730001040219014107040004a8204d617070696e672066726f6d206163636f756e74206964656e7469666965727320746f20444944732e44436f6e6e65637465644163636f756e747300010802024507b404000cbc204d617070696e672066726f6d2028444944202b206163636f756e74206964656e74696669657229202d3e2028292e0d012054686520656d707479207475706c65206973207573656420617320612073656e74696e656c2076616c756520746f2073696d706c7920696e64696361746520746865982070726573656e6365206f66206120676976656e207475706c6520696e20746865206d61702e012905011501041c4465706f736974184000c0afd69136000000000000000000000c0d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974110120746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f7369742063616e2062658c207265636c61696d6564207768656e20746865204449442069732064656c657465642e0149074324576562334e616d65730124576562334e616d65730c144f776e65720001040229014d0704000488204d6170206f66206e616d65202d3e206f776e6572736869702064657461696c732e144e616d65730001040200290104000458204d6170206f66206f776e6572202d3e206e616d652e1842616e6e6564000104022901b404000c4c204d6170206f66206e616d65202d3e2028292e00e02049662061206e616d65206b65792069732070726573656e742c20746865206e616d652069732063757272656e746c792062616e6e65642e0139050125010c1c4465706f736974184000d450a85d6b0000000000000000000004bc2054686520616d6f756e74206f66204b494c5420746f206465706f73697420746f20636c61696d2061206e616d652e344d696e4e616d654c656e677468201003000000048820546865206d696e20656e636f646564206c656e677468206f662061206e616d652e344d61784e616d654c656e677468201020000000048820546865206d617820656e636f646564206c656e677468206f662061206e616d652e01510744445075626c696343726564656e7469616c7301445075626c696343726564656e7469616c73082c43726564656e7469616c730001080502d101550704000cc020546865206d6170206f66207075626c69632063726564656e7469616c7320616c72656164792061747465737465642ef0204974206d6170732066726f6d206120287375626a656374206964202b2063726564656e7469616c20696429202d3e20746865206372656174696f6e6c2064657461696c73206f66207468652063726564656e7469616c2e4843726564656e7469616c5375626a656374730001040230350104001025012041207265766572736520696e646578206d617070696e672066726f6d2063726564656e7469616c20494420746f20746865207375626a656374207468652063726564656e7469616c3c207761732069737375656420746f2e001901204974206974207573656420746f20706572666f726d20656666696369656e74206c6f6f6b7570206f662063726564656e7469616c7320676976656e2074686569722049442e013d050131010c1c4465706f7369741840005c6a51fc45000000000000000000000411012054686520616d6f756e74206f6620746f6b656e7320746f2072657365727665207768656e20617474657374696e672061207075626c69632063726564656e7469616c2e584d6178456e636f646564436c61696d734c656e6774682010a0860100040d0120546865206d6178696d756d206c656e67746820696e206279746573206f662074686520656e636f64656420636c61696d73206f6620612063726564656e7469616c2e484d61785375626a65637449644c656e67746820100c01000008e820546865206d6178696d756d206c656e67746820696e206279746573206f6620746865207261772063726564656e7469616c207375626a65637430206964656e7469666965722e01590745244d6967726174696f6e01244d6967726174696f6e04304d696772617465644b6579730001040230b4040000014d0501a10104584d61784d6967726174696f6e7350657250616c6c657420106400000004b420546865206d617820616d6f756e74206f6e206d6967726174696f6e7320666f7220656163682070616c6c6574015d07463c50617261636861696e53797374656d013c50617261636861696e53797374656d545450656e64696e6756616c69646174696f6e436f64650100340400107d0120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f206265206170706c6965642e00090220417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f766572777269746520746865205b603a636f6465605d5b73705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f44455dad012077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f63657373207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e444e657756616c69646174696f6e436f64650000340400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000590504000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f64650100ac040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d6265720100201000000000041d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e60557067726164655265737472696374696f6e5369676e616c0100610704001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f6600006105040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000690704001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e00007d070400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d7163486561640100810780000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d7163486561647301008507040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301002010000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01002010000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d657373616765730100910704000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d657373616765730100e10204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d657373616765730100e102040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e84416e6e6f756e63656448726d704d6573736167657350657243616e646964617465010020100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000280400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000280400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e44417574686f72697a65645570677261646500009907040004b820546865206e65787420617574686f72697a656420757067726164652c206966207468657265206973206f6e652e60437573746f6d56616c69646174696f6e486561644461746100003404000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00110120536565206050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f646174616020666f72206d6f726520696e666f726d6174696f6e2e01510501d90100019d07503450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100e501106400000000018505000000512458636d705175657565012458636d7051756575652844496e626f756e6458636d705374617475730100a1070400049420537461747573206f662074686520696e626f756e642058434d50206368616e6e656c732e4c496e626f756e6458636d704d657373616765730101080205b90734040004190120496e626f756e64206167677265676174652058434d50206d657373616765732e2049742063616e206f6e6c79206265206f6e6520706572205061726149642f626c6f636b2e484f7574626f756e6458636d705374617475730100bd070400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205c90734040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402e50134040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e6669670100cd0774020000000500000001000000821a06000008000700c817a804020004000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e284f7665727765696768740001040510d107040010050120546865206d657373616765732074686174206578636565646564206d617820696e646976696475616c206d65737361676520776569676874206275646765742e003901205468657365206d657373616765207374617920696e20746869732073746f72616765206d617020756e74696c207468657920617265206d616e75616c6c79206469737061746368656420766961582060736572766963655f6f766572776569676874602e50436f756e746572466f724f766572776569676874010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c4f766572776569676874436f756e7401001020000000000000000008690120546865206e756d626572206f66206f766572776569676874206d657373616765732065766572207265636f7264656420696e20604f766572776569676874602e20416c736f20646f75626c657320617320746865206e6578748420617661696c61626c652066726565206f76657277656967687420696e6465782e38517565756553757370656e6465640100ac04000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e01890501dd010001d507522c506f6c6b61646f7458636d012c506f6c6b61646f7458636d30305175657279436f756e746572010010200000000000000000048820546865206c617465737420617661696c61626c6520717565727920696e6465782e1c517565726965730001040210d9070400045420546865206f6e676f696e6720717565726965732e28417373657454726170730101040630201000000000106820546865206578697374696e672061737365742074726170732e007501204b65792069732074686520626c616b6532203235362068617368206f6620286f726967696e2c2076657273696f6e656420604d756c7469417373657473602920706169722e2056616c756520697320746865206e756d626572206f661d012074696d65732074686973207061697220686173206265656e20747261707065642028757375616c6c79206a75737420312069662069742065786973747320617420616c6c292e385361666558636d56657273696f6e00002004000861012044656661756c742076657273696f6e20746f20656e636f64652058434d207768656e206c61746573742076657273696f6e206f662064657374696e6174696f6e20697320756e6b6e6f776e2e20496620604e6f6e65602c3d01207468656e207468652064657374696e6174696f6e732077686f73652058434d2076657273696f6e20697320756e6b6e6f776e2061726520636f6e7369646572656420756e726561636861626c652e40537570706f7274656456657273696f6e0001080502ed0720040004f020546865204c61746573742076657273696f6e732074686174207765206b6e6f7720766172696f7573206c6f636174696f6e7320737570706f72742e4056657273696f6e4e6f746966696572730001080502ed0710040004050120416c6c206c6f636174696f6e7320746861742077652068617665207265717565737465642076657273696f6e206e6f74696669636174696f6e732066726f6d2e5056657273696f6e4e6f74696679546172676574730001080502ed07f10704000871012054686520746172676574206c6f636174696f6e73207468617420617265207375627363726962656420746f206f75722076657273696f6e206368616e6765732c2061732077656c6c20617320746865206d6f737420726563656e7494206f66206f75722076657273696f6e7320776520696e666f726d6564207468656d206f662e5456657273696f6e446973636f7665727951756575650100f50704000c65012044657374696e6174696f6e732077686f7365206c61746573742058434d2076657273696f6e20776520776f756c64206c696b6520746f206b6e6f772e204475706c696361746573206e6f7420616c6c6f7765642c20616e6471012074686520607533326020636f756e74657220697320746865206e756d626572206f662074696d6573207468617420612073656e6420746f207468652064657374696e6174696f6e20686173206265656e20617474656d707465642c8c20776869636820697320757365642061732061207072696f726974697a6174696f6e2e4043757272656e744d6967726174696f6e000001080400049c205468652063757272656e74206d6967726174696f6e27732073746167652c20696620616e792e5452656d6f74654c6f636b656446756e6769626c657300010c05020209081108040004f02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e20612072656d6f746520636861696e2e3c4c6f636b656446756e6769626c657300010402002108040004e02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e207468697320636861696e2e5458636d457865637574696f6e53757370656e6465640100ac040004b420476c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e018d0501e90100012d08532843756d756c757358636d000001bd02000131085420446d7051756575650120446d7051756575651434436f6e66696775726174696f6e01003508280700e40b540202000400044c2054686520636f6e66696775726174696f6e2e2450616765496e646578010039084000000000000000000000000000000000044020546865207061676520696e6465782e14506167657301010402203d0804000444205468652071756575652070616765732e284f766572776569676874000104021041080400046420546865206f766572776569676874206d657373616765732e50436f756e746572466f724f766572776569676874010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617001e10501c10200014508554908042048436865636b4e6f6e5a65726f53656e6465725108b440436865636b5370656356657273696f6e55082038436865636b547856657273696f6e59082030436865636b47656e657369735d083038436865636b4d6f7274616c69747961083028436865636b4e6f6e63656908b42c436865636b5765696768746d08b4604368617267655472616e73616374696f6e5061796d656e747108b4a901"} \ No newline at end of file diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json index 5878f626c..ea14260eb 100644 --- a/packages/augment-api/package.json +++ b/packages/augment-api/package.json @@ -3,7 +3,6 @@ "version": "0.34.0", "description": "", "types": "./lib/index.d.ts", - "type": "module", "main": "./index.cjs", "exports": { ".": { @@ -27,8 +26,8 @@ "build:types": "yarn generate:defs && yarn generate:meta && yarn build:fixes", "build:fixes": "node scripts/fixTypes.mjs", "build:ts": "tsc -p tsconfig.build.json", - "generate:defs": "ts-node --esm -P tsconfig.build.json ../../node_modules/.bin/polkadot-types-from-defs --package @kiltprotocol/augment-api --input ./src/interfaces --endpoint ./metadata/spiritnet.json", - "generate:meta": "ts-node --esm -P tsconfig.build.json ../../node_modules/.bin/polkadot-types-from-chain --package @kiltprotocol/augment-api --endpoint ./metadata/spiritnet.json --output ./src/interfaces --strict", + "generate:defs": "tsx ../../node_modules/.bin/polkadot-types-from-defs --package @kiltprotocol/augment-api --input ./src/interfaces --endpoint ./metadata/spiritnet.json", + "generate:meta": "tsx ../../node_modules/.bin/polkadot-types-from-chain --package @kiltprotocol/augment-api --endpoint ./metadata/spiritnet.json --output ./src/interfaces --strict", "update-metadata": "node ./scripts/fetchMetadata.cjs -o './metadata/spiritnet.json' -e 'wss://spiritnet.kilt.io/'" }, "repository": "github:kiltprotocol/sdk-js", @@ -45,7 +44,7 @@ "@types/node": "^16.11.7", "glob": "^7.1.1", "rimraf": "^3.0.2", - "ts-node": "^10.4.0", + "tsx": "^4.7.0", "typescript": "^4.8.3", "yargs": "^16.2.0" }, diff --git a/packages/augment-api/src/interfaces/augment-api-consts.ts b/packages/augment-api/src/interfaces/augment-api-consts.ts index 0e7b78351..88b816900 100644 --- a/packages/augment-api/src/interfaces/augment-api-consts.ts +++ b/packages/augment-api/src/interfaces/augment-api-consts.ts @@ -250,6 +250,12 @@ declare module '@polkadot/api-base/types/consts' { **/ initialPeriodReward: u128 & AugmentedConst; }; + migration: { + /** + * The max amount on migrations for each pallet + **/ + maxMigrationsPerPallet: u32 & AugmentedConst; + }; multisig: { /** * The base amount of currency needed to reserve for creating a multisig execution or to diff --git a/packages/augment-api/src/interfaces/augment-api-errors.ts b/packages/augment-api/src/interfaces/augment-api-errors.ts index f5e44f400..1e5e6e5ac 100644 --- a/packages/augment-api/src/interfaces/augment-api-errors.ts +++ b/packages/augment-api/src/interfaces/augment-api-errors.ts @@ -515,6 +515,9 @@ declare module '@polkadot/api-base/types/errors' { **/ Permanent: AugmentedError; }; + migration: { + KeyParse: AugmentedError; + }; multisig: { /** * Call is already approved by this signatory. diff --git a/packages/augment-api/src/interfaces/augment-api-events.ts b/packages/augment-api/src/interfaces/augment-api-events.ts index 30e69029c..2acd5b245 100644 --- a/packages/augment-api/src/interfaces/augment-api-events.ts +++ b/packages/augment-api/src/interfaces/augment-api-events.ts @@ -9,7 +9,7 @@ import type { ApiTypes, AugmentedEvent } from '@polkadot/api-base/types'; import type { Bytes, Null, Option, Result, U8aFixed, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; import type { ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, H256, Perquintill } from '@polkadot/types/interfaces/runtime'; -import type { DelegationDelegationHierarchyPermissions, FrameSupportDispatchDispatchInfo, FrameSupportTokensMiscBalanceStatus, PalletDemocracyMetadataOwner, PalletDemocracyVoteAccountVote, PalletDemocracyVoteThreshold, PalletDidLookupLinkableAccountLinkableAccountId, PalletMultisigTimepoint, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpRuntimeDispatchError, SpWeightsWeightV2Weight, SpiritnetRuntimeProxyType, XcmV3MultiLocation, XcmV3MultiassetMultiAssets, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation } from '@polkadot/types/lookup'; +import type { DelegationDelegationHierarchyPermissions, FrameSupportDispatchDispatchInfo, FrameSupportTokensMiscBalanceStatus, PalletDemocracyMetadataOwner, PalletDemocracyVoteAccountVote, PalletDemocracyVoteThreshold, PalletDidLookupLinkableAccountLinkableAccountId, PalletMigrationEntriesToMigrate, PalletMultisigTimepoint, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpRuntimeDispatchError, SpWeightsWeightV2Weight, SpiritnetRuntimeProxyType, XcmV3MultiLocation, XcmV3MultiassetMultiAssets, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation } from '@polkadot/types/lookup'; export type __AugmentedEvent = AugmentedEvent; @@ -338,19 +338,19 @@ declare module '@polkadot/api-base/types/events' { /** * Downward message executed with the given outcome. **/ - ExecutedDownward: AugmentedEvent; + ExecutedDownward: AugmentedEvent; /** * Downward message is invalid XCM. **/ - InvalidFormat: AugmentedEvent; + InvalidFormat: AugmentedEvent; /** - * The maximum number of downward messages was. + * The maximum number of downward messages was reached. **/ - MaxMessagesExhausted: AugmentedEvent; + MaxMessagesExhausted: AugmentedEvent; /** * Downward message is overweight and was placed in the overweight queue. **/ - OverweightEnqueued: AugmentedEvent; + OverweightEnqueued: AugmentedEvent; /** * Downward message from the overweight queue was executed. **/ @@ -358,11 +358,11 @@ declare module '@polkadot/api-base/types/events' { /** * Downward message is unsupported version of XCM. **/ - UnsupportedVersion: AugmentedEvent; + UnsupportedVersion: AugmentedEvent; /** * The weight limit for handling downward messages was reached. **/ - WeightExhausted: AugmentedEvent; + WeightExhausted: AugmentedEvent; }; indices: { /** @@ -378,6 +378,9 @@ declare module '@polkadot/api-base/types/events' { **/ IndexFrozen: AugmentedEvent; }; + migration: { + EntriesUpdated: AugmentedEvent; + }; multisig: { /** * A multisig operation has been approved by someone. @@ -549,36 +552,26 @@ declare module '@polkadot/api-base/types/events' { polkadotXcm: { /** * Some assets have been claimed from an asset trap - * - * \[ hash, origin, assets \] **/ - AssetsClaimed: AugmentedEvent; + AssetsClaimed: AugmentedEvent; /** * Some assets have been placed in an asset trap. - * - * \[ hash, origin, assets \] **/ - AssetsTrapped: AugmentedEvent; + AssetsTrapped: AugmentedEvent; /** * Execution of an XCM message was attempted. - * - * \[ outcome \] **/ - Attempted: AugmentedEvent; + Attempted: AugmentedEvent; /** * Fees were paid from a location for an operation (often for using `SendXcm`). - * - * \[ paying location, fees \] **/ - FeesPaid: AugmentedEvent; + FeesPaid: AugmentedEvent; /** * Expected query response has been received but the querier location of the response does * not match the expected. The query remains registered for a later, valid, response to * be received and acted upon. - * - * \[ origin location, id, expected querier, maybe actual querier \] **/ - InvalidQuerier: AugmentedEvent]>; + InvalidQuerier: AugmentedEvent], { origin: XcmV3MultiLocation, queryId: u64, expectedQuerier: XcmV3MultiLocation, maybeActualQuerier: Option }>; /** * Expected query response has been received but the expected querier location placed in * storage by this runtime previously cannot be decoded. The query remains registered. @@ -587,18 +580,14 @@ declare module '@polkadot/api-base/types/events' { * runtime should be readable prior to query timeout) and dangerous since the possibly * valid response will be dropped. Manual governance intervention is probably going to be * needed. - * - * \[ origin location, id \] **/ - InvalidQuerierVersion: AugmentedEvent; + InvalidQuerierVersion: AugmentedEvent; /** * Expected query response has been received but the origin location of the response does * not match that expected. The query remains registered for a later, valid, response to * be received and acted upon. - * - * \[ origin location, id, expected location \] **/ - InvalidResponder: AugmentedEvent]>; + InvalidResponder: AugmentedEvent], { origin: XcmV3MultiLocation, queryId: u64, expectedLocation: Option }>; /** * Expected query response has been received but the expected origin location placed in * storage by this runtime previously cannot be decoded. The query remains registered. @@ -607,115 +596,83 @@ declare module '@polkadot/api-base/types/events' { * runtime should be readable prior to query timeout) and dangerous since the possibly * valid response will be dropped. Manual governance intervention is probably going to be * needed. - * - * \[ origin location, id \] **/ - InvalidResponderVersion: AugmentedEvent; + InvalidResponderVersion: AugmentedEvent; /** * Query response has been received and query is removed. The registered notification has * been dispatched and executed successfully. - * - * \[ id, pallet index, call index \] **/ - Notified: AugmentedEvent; + Notified: AugmentedEvent; /** * Query response has been received and query is removed. The dispatch was unable to be * decoded into a `Call`; this might be due to dispatch function having a signature which * is not `(origin, QueryId, Response)`. - * - * \[ id, pallet index, call index \] **/ - NotifyDecodeFailed: AugmentedEvent; + NotifyDecodeFailed: AugmentedEvent; /** * Query response has been received and query is removed. There was a general error with * dispatching the notification call. - * - * \[ id, pallet index, call index \] **/ - NotifyDispatchError: AugmentedEvent; + NotifyDispatchError: AugmentedEvent; /** * Query response has been received and query is removed. The registered notification could * not be dispatched because the dispatch weight is greater than the maximum weight * originally budgeted by this runtime for the query result. - * - * \[ id, pallet index, call index, actual weight, max budgeted weight \] **/ - NotifyOverweight: AugmentedEvent; + NotifyOverweight: AugmentedEvent; /** * A given location which had a version change subscription was dropped owing to an error * migrating the location to our new XCM format. - * - * \[ location, query ID \] **/ - NotifyTargetMigrationFail: AugmentedEvent; + NotifyTargetMigrationFail: AugmentedEvent; /** * A given location which had a version change subscription was dropped owing to an error * sending the notification to it. - * - * \[ location, query ID, error \] **/ - NotifyTargetSendFail: AugmentedEvent; + NotifyTargetSendFail: AugmentedEvent; /** * Query response has been received and is ready for taking with `take_response`. There is * no registered notification call. - * - * \[ id, response \] **/ - ResponseReady: AugmentedEvent; + ResponseReady: AugmentedEvent; /** * Received query response has been read and removed. - * - * \[ id \] **/ - ResponseTaken: AugmentedEvent; + ResponseTaken: AugmentedEvent; /** * A XCM message was sent. - * - * \[ origin, destination, message \] **/ - Sent: AugmentedEvent; + Sent: AugmentedEvent; /** * The supported version of a location has been changed. This might be through an * automatic notification or a manual intervention. - * - * \[ location, XCM version \] **/ - SupportedVersionChanged: AugmentedEvent; + SupportedVersionChanged: AugmentedEvent; /** * Query response received which does not match a registered query. This may be because a * matching query was never registered, it may be because it is a duplicate response, or * because the query timed out. - * - * \[ origin location, id \] **/ - UnexpectedResponse: AugmentedEvent; + UnexpectedResponse: AugmentedEvent; /** * An XCM version change notification message has been attempted to be sent. * * The cost of sending it (borne by the chain) is included. - * - * \[ destination, result, cost \] **/ - VersionChangeNotified: AugmentedEvent; + VersionChangeNotified: AugmentedEvent; /** - * We have requested that a remote chain sends us XCM version change notifications. - * - * \[ destination location, cost \] + * We have requested that a remote chain send us XCM version change notifications. **/ - VersionNotifyRequested: AugmentedEvent; + VersionNotifyRequested: AugmentedEvent; /** * A remote has requested XCM version change notification from us and we have honored it. * A version information message is sent to them and its cost is included. - * - * \[ destination location, cost \] **/ - VersionNotifyStarted: AugmentedEvent; + VersionNotifyStarted: AugmentedEvent; /** * We have requested that a remote chain stops sending us XCM version change notifications. - * - * \[ destination location, cost \] **/ - VersionNotifyUnrequested: AugmentedEvent; + VersionNotifyUnrequested: AugmentedEvent; }; preimage: { /** @@ -1042,15 +999,15 @@ declare module '@polkadot/api-base/types/events' { /** * Bad XCM format used. **/ - BadFormat: AugmentedEvent], { messageHash: Option }>; + BadFormat: AugmentedEvent; /** * Bad XCM version used. **/ - BadVersion: AugmentedEvent], { messageHash: Option }>; + BadVersion: AugmentedEvent; /** * Some XCM failed. **/ - Fail: AugmentedEvent, error: XcmV3TraitsError, weight: SpWeightsWeightV2Weight], { messageHash: Option, error: XcmV3TraitsError, weight: SpWeightsWeightV2Weight }>; + Fail: AugmentedEvent; /** * An XCM exceeded the individual message weight budget. **/ @@ -1062,11 +1019,11 @@ declare module '@polkadot/api-base/types/events' { /** * Some XCM was executed ok. **/ - Success: AugmentedEvent, weight: SpWeightsWeightV2Weight], { messageHash: Option, weight: SpWeightsWeightV2Weight }>; + Success: AugmentedEvent; /** * An HRMP message was sent to a sibling parachain. **/ - XcmpMessageSent: AugmentedEvent], { messageHash: Option }>; + XcmpMessageSent: AugmentedEvent; }; } // AugmentedEvents } // declare module diff --git a/packages/augment-api/src/interfaces/augment-api-query.ts b/packages/augment-api/src/interfaces/augment-api-query.ts index b2506c179..e591421e8 100644 --- a/packages/augment-api/src/interfaces/augment-api-query.ts +++ b/packages/augment-api/src/interfaces/augment-api-query.ts @@ -9,7 +9,7 @@ import type { ApiTypes, AugmentedQuery, QueryableStorageEntry } from '@polkadot/ import type { BTreeMap, Bytes, Null, Option, U8aFixed, Vec, bool, u128, u16, u32, u64 } from '@polkadot/types-codec'; import type { AnyNumber, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, Call, H256 } from '@polkadot/types/interfaces/runtime'; -import type { AttestationAttestationsAttestationDetails, CtypeCtypeEntry, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DidDidDetails, DidServiceEndpointsDidEndpoint, FrameSupportDispatchPerDispatchClassWeight, FrameSupportPreimagesBounded, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesIdAmountRuntimeFreezeReason, PalletBalancesIdAmountRuntimeHoldReason, PalletBalancesReserveData, PalletCollectiveVotes, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupConnectionRecord, PalletDidLookupLinkableAccountLinkableAccountId, PalletMultisigMultisig, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletSchedulerScheduled, PalletTipsOpenTip, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesWeb3NameWeb3NameOwnership, ParachainStakingCandidate, ParachainStakingDelegationCounter, ParachainStakingInflationInflationInfo, ParachainStakingRoundInfo, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV4AbridgedHostConfiguration, PolkadotPrimitivesV4PersistedValidationData, PolkadotPrimitivesV4UpgradeRestriction, PublicCredentialsCredentialsCredentialEntry, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, SpiritnetRuntimeSessionKeys } from '@polkadot/types/lookup'; +import type { AttestationAttestationsAttestationDetails, CtypeCtypeEntry, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DidDidDetails, DidServiceEndpointsDidEndpoint, FrameSupportDispatchPerDispatchClassWeight, FrameSupportPreimagesBounded, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesIdAmountRuntimeFreezeReason, PalletBalancesIdAmountRuntimeHoldReason, PalletBalancesReserveData, PalletCollectiveVotes, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupConnectionRecord, PalletDidLookupLinkableAccountLinkableAccountId, PalletMultisigMultisig, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletSchedulerScheduled, PalletTipsOpenTip, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesWeb3NameWeb3NameOwnership, PalletXcmQueryStatus, PalletXcmRemoteLockedFungibleRecord, PalletXcmVersionMigrationStage, ParachainStakingCandidate, ParachainStakingDelegationCounter, ParachainStakingInflationInflationInfo, ParachainStakingRoundInfo, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV5AbridgedHostConfiguration, PolkadotPrimitivesV5PersistedValidationData, PolkadotPrimitivesV5UpgradeRestriction, PublicCredentialsCredentialsCredentialEntry, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, SpiritnetRuntimeSessionKeys, XcmVersionedAssetId, XcmVersionedMultiLocation } from '@polkadot/types/lookup'; import type { Observable } from '@polkadot/types/types'; export type __AugmentedQuery = AugmentedQuery unknown>; @@ -298,6 +298,9 @@ declare module '@polkadot/api-base/types/storage' { **/ accounts: AugmentedQuery Observable>>, [u64]>; }; + migration: { + migratedKeys: AugmentedQuery Observable>, [H256]>; + }; multisig: { /** * The set of open multisig operations. @@ -387,9 +390,9 @@ declare module '@polkadot/api-base/types/storage' { * Each time the stake of a collator is increased, it is checked whether * this pushes another candidate out of the list. When the stake is * reduced however, it is not checked if another candidate has more stake, - * since this would require iterating over the entire [CandidatePool]. + * since this would require iterating over the entire `CandidatePool`. * - * There must always be more candidates than [MaxSelectedCandidates] so + * There must always be more candidates than `MaxSelectedCandidates` so * that a collator can drop out of the collator set by reducing their * stake. **/ @@ -399,7 +402,7 @@ declare module '@polkadot/api-base/types/storage' { * The sum of all collator and their delegator stakes. * * Note: There are more funds locked by this pallet, since the backing for - * non collating candidates is not included in [TotalCollatorStake]. + * non collating candidates is not included in `TotalCollatorStake`. **/ totalCollatorStake: AugmentedQuery Observable, []>; /** @@ -423,7 +426,7 @@ declare module '@polkadot/api-base/types/storage' { /** * A custom head data that should be returned as result of `validate_block`. * - * See [`Pallet::set_custom_validation_head_data`] for more information. + * See `Pallet::set_custom_validation_head_data` for more information. **/ customValidationHeadData: AugmentedQuery Observable>, []>; /** @@ -438,7 +441,7 @@ declare module '@polkadot/api-base/types/storage' { * * This data is also absent from the genesis. **/ - hostConfiguration: AugmentedQuery Observable>, []>; + hostConfiguration: AugmentedQuery Observable>, []>; /** * HRMP messages that were sent in a block. * @@ -484,10 +487,8 @@ declare module '@polkadot/api-base/types/storage' { /** * In case of a scheduled upgrade, this storage field contains the validation code to be applied. * - * As soon as the relay chain gives us the go-ahead signal, we will overwrite the [`:code`][well_known_keys::CODE] + * As soon as the relay chain gives us the go-ahead signal, we will overwrite the [`:code`][sp_core::storage::well_known_keys::CODE] * which will result the next block process with the new validation code. This concludes the upgrade process. - * - * [well_known_keys::CODE]: sp_core::storage::well_known_keys::CODE **/ pendingValidationCode: AugmentedQuery Observable, []>; /** @@ -534,7 +535,7 @@ declare module '@polkadot/api-base/types/storage' { * relay-chain. This value is ephemeral which means it doesn't hit the storage. This value is * set after the inherent. **/ - upgradeRestrictionSignal: AugmentedQuery Observable>, []>; + upgradeRestrictionSignal: AugmentedQuery Observable>, []>; /** * Upward messages that were sent in a block. * @@ -546,7 +547,64 @@ declare module '@polkadot/api-base/types/storage' { * This value is expected to be set only once per block and it's never stored * in the trie. **/ - validationData: AugmentedQuery Observable>, []>; + validationData: AugmentedQuery Observable>, []>; + }; + polkadotXcm: { + /** + * The existing asset traps. + * + * Key is the blake2 256 hash of (origin, versioned `MultiAssets`) pair. Value is the number of + * times this pair has been trapped (usually just 1 if it exists at all). + **/ + assetTraps: AugmentedQuery Observable, [H256]>; + /** + * The current migration's stage, if any. + **/ + currentMigration: AugmentedQuery Observable>, []>; + /** + * Fungible assets which we know are locked on this chain. + **/ + lockedFungibles: AugmentedQuery Observable>>>, [AccountId32]>; + /** + * The ongoing queries. + **/ + queries: AugmentedQuery Observable>, [u64]>; + /** + * The latest available query index. + **/ + queryCounter: AugmentedQuery Observable, []>; + /** + * Fungible assets which we know are locked on a remote chain. + **/ + remoteLockedFungibles: AugmentedQuery Observable>, [u32, AccountId32, XcmVersionedAssetId]>; + /** + * Default version to encode XCM when latest version of destination is unknown. If `None`, + * then the destinations whose XCM version is unknown are considered unreachable. + **/ + safeXcmVersion: AugmentedQuery Observable>, []>; + /** + * The Latest versions that we know various locations support. + **/ + supportedVersion: AugmentedQuery Observable>, [u32, XcmVersionedMultiLocation]>; + /** + * Destinations whose latest XCM version we would like to know. Duplicates not allowed, and + * the `u32` counter is the number of times that a send to the destination has been attempted, + * which is used as a prioritization. + **/ + versionDiscoveryQueue: AugmentedQuery Observable>>, []>; + /** + * All locations that we have requested version notifications from. + **/ + versionNotifiers: AugmentedQuery Observable>, [u32, XcmVersionedMultiLocation]>; + /** + * The target locations that are subscribed to our version changes, as well as the most recent + * of our versions we informed them of. + **/ + versionNotifyTargets: AugmentedQuery Observable>>, [u32, XcmVersionedMultiLocation]>; + /** + * Global suspension state of the XCM executor. + **/ + xcmExecutionSuspended: AugmentedQuery Observable, []>; }; preimage: { preimageFor: AugmentedQuery | [H256 | string | Uint8Array, u32 | AnyNumber | Uint8Array]) => Observable>, [ITuple<[H256, u32]>]>; @@ -674,7 +732,7 @@ declare module '@polkadot/api-base/types/storage' { * allows light-clients to leverage the changes trie storage tracking mechanism and * in case of changes fetch the list of events of interest. * - * The value has the type `(T::BlockNumber, EventIndex)` because if we used only just + * The value has the type `(BlockNumberFor, EventIndex)` because if we used only just * the `EventIndex` then in case if the topic has the same contents on the next block * no notification will be triggered thus the event might be lost. **/ diff --git a/packages/augment-api/src/interfaces/augment-api-tx.ts b/packages/augment-api/src/interfaces/augment-api-tx.ts index d41d2ff88..27b9bb1d4 100644 --- a/packages/augment-api/src/interfaces/augment-api-tx.ts +++ b/packages/augment-api/src/interfaces/augment-api-tx.ts @@ -9,7 +9,7 @@ import type { ApiTypes, AugmentedSubmittable, SubmittableExtrinsic, SubmittableE import type { Bytes, Compact, Option, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types'; import type { AccountId32, Call, H256, MultiAddress, Perquintill } from '@polkadot/types/interfaces/runtime'; -import type { CumulusPrimitivesParachainInherentParachainInherentData, DelegationDelegationHierarchyPermissions, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidServiceEndpointsDidEndpoint, FrameSupportPreimagesBounded, PalletDemocracyConviction, PalletDemocracyMetadataOwner, PalletDemocracyVoteAccountVote, PalletDidLookupAssociateAccountRequest, PalletDidLookupLinkableAccountLinkableAccountId, PalletMultisigTimepoint, PalletVestingVestingInfo, PublicCredentialsCredentialsCredential, RuntimeCommonAuthorizationPalletAuthorize, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeSessionKeys, XcmV3MultiLocation, XcmV3WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; +import type { CumulusPrimitivesParachainInherentParachainInherentData, DelegationDelegationHierarchyPermissions, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidServiceEndpointsDidEndpoint, FrameSupportPreimagesBounded, PalletDemocracyConviction, PalletDemocracyMetadataOwner, PalletDemocracyVoteAccountVote, PalletDidLookupAssociateAccountRequest, PalletDidLookupLinkableAccountLinkableAccountId, PalletMigrationEntriesToMigrate, PalletMultisigTimepoint, PalletVestingVestingInfo, PublicCredentialsCredentialsCredential, RuntimeCommonAuthorizationPalletAuthorize, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeSessionKeys, XcmV3MultiLocation, XcmV3WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; export type __AugmentedSubmittable = AugmentedSubmittable<() => unknown>; export type __SubmittableExtrinsic = SubmittableExtrinsic; @@ -19,2959 +19,929 @@ declare module '@polkadot/api-base/types/submittable' { interface AugmentedSubmittables { attestation: { /** - * Create a new attestation. - * - * The attester can optionally provide a reference to an existing - * delegation that will be saved along with the attestation itself in - * the form of an attested delegation. - * - * The referenced CType hash must already be present on chain. - * - * If an optional delegation id is provided, the dispatch origin must - * be the owner of the delegation. Otherwise, it could be any - * `DelegationEntityId`. - * - * Emits `AttestationCreated`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], Ctype, Attestations - * - Reads if delegation id is provided: Delegations, Roots, - * DelegatedAttestations - * - Writes: Attestations, (DelegatedAttestations) - * # + * See [`Pallet::add`]. **/ add: AugmentedSubmittable<(claimHash: H256 | string | Uint8Array, ctypeHash: H256 | string | Uint8Array, authorization: Option | null | Uint8Array | RuntimeCommonAuthorizationPalletAuthorize | { Delegation: any } | string) => SubmittableExtrinsic, [H256, H256, Option]>; /** - * Changes the deposit owner. - * - * The balance that is reserved by the current deposit owner will be - * freed and balance of the new deposit owner will get reserved. - * - * The subject of the call must be the attester who issues the - * attestation. The sender of the call will be the new deposit owner. + * See [`Pallet::change_deposit_owner`]. **/ changeDepositOwner: AugmentedSubmittable<(claimHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Reclaim a storage deposit by removing an attestation - * - * Emits `DepositReclaimed`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], Attestations, DelegatedAttestations - * - Writes: Attestations, DelegatedAttestations - * # + * See [`Pallet::reclaim_deposit`]. **/ reclaimDeposit: AugmentedSubmittable<(claimHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Remove an attestation. - * - * The origin must be either the creator of the attestation or an - * entity which is an ancestor of the attester in the delegation tree, - * i.e., it was either the delegator of the attester or an ancestor - * thereof. - * - * Emits `AttestationRemoved`. - * - * # - * Weight: O(P) where P is the number of steps required to verify that - * the dispatch Origin controls the delegation entitled to revoke the - * attestation. It is bounded by `max_parent_checks`. - * - Reads: [Origin Account], Attestations, delegation::Roots - * - Reads per delegation step P: delegation::Delegations - * - Writes: Attestations, DelegatedAttestations - * # + * See [`Pallet::remove`]. **/ remove: AugmentedSubmittable<(claimHash: H256 | string | Uint8Array, authorization: Option | null | Uint8Array | RuntimeCommonAuthorizationPalletAuthorize | { Delegation: any } | string) => SubmittableExtrinsic, [H256, Option]>; /** - * Revoke an existing attestation. - * - * The revoker must be either the creator of the attestation being - * revoked or an entity that in the delegation tree is an ancestor of - * the attester, i.e., it was either the delegator of the attester or - * an ancestor thereof. - * - * Emits `AttestationRevoked`. - * - * # - * Weight: O(P) where P is the number of steps required to verify that - * the dispatch Origin controls the delegation entitled to revoke the - * attestation. It is bounded by `max_parent_checks`. - * - Reads: [Origin Account], Attestations, delegation::Roots - * - Reads per delegation step P: delegation::Delegations - * - Writes: Attestations, DelegatedAttestations - * # + * See [`Pallet::revoke`]. **/ revoke: AugmentedSubmittable<(claimHash: H256 | string | Uint8Array, authorization: Option | null | Uint8Array | RuntimeCommonAuthorizationPalletAuthorize | { Delegation: any } | string) => SubmittableExtrinsic, [H256, Option]>; /** - * Updates the deposit amount to the current deposit rate. - * - * The sender must be the deposit owner. + * See [`Pallet::update_deposit`]. **/ updateDeposit: AugmentedSubmittable<(claimHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; }; balances: { /** - * Set the regular balance of a given account. - * - * The dispatch origin for this call is `root`. + * See [`Pallet::force_set_balance`]. **/ forceSetBalance: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, newFree: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; /** - * Exactly as `transfer_allow_death`, except the origin must be root and the source account - * may be specified. + * See [`Pallet::force_transfer`]. **/ forceTransfer: AugmentedSubmittable<(source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress, Compact]>; /** - * Unreserve some balance from a user by force. - * - * Can only be called by ROOT. + * See [`Pallet::force_unreserve`]. **/ forceUnreserve: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u128]>; /** - * Set the regular balance of a given account; it also takes a reserved balance but this - * must be the same as the account's current reserved balance. - * - * The dispatch origin for this call is `root`. - * - * WARNING: This call is DEPRECATED! Use `force_set_balance` instead. + * See [`Pallet::set_balance_deprecated`]. **/ setBalanceDeprecated: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, newFree: Compact | AnyNumber | Uint8Array, oldReserved: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact, Compact]>; /** - * Alias for `transfer_allow_death`, provided only for name-wise compatibility. - * - * WARNING: DEPRECATED! Will be released in approximately 3 months. + * See [`Pallet::transfer`]. **/ transfer: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; /** - * Transfer the entire transferable balance from the caller account. - * - * NOTE: This function only attempts to transfer _transferable_ balances. This means that - * any locked, reserved, or existential deposits (when `keep_alive` is `true`), will not be - * transferred by this function. To ensure that this function results in a killed account, - * you might need to prepare the account by removing any reference counters, storage - * deposits, etc... - * - * The dispatch origin of this call must be Signed. - * - * - `dest`: The recipient of the transfer. - * - `keep_alive`: A boolean to determine if the `transfer_all` operation should send all - * of the funds the account has, causing the sender account to be killed (false), or - * transfer everything except at least the existential deposit, which will guarantee to - * keep the sender account alive (true). + * See [`Pallet::transfer_all`]. **/ transferAll: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, keepAlive: bool | boolean | Uint8Array) => SubmittableExtrinsic, [MultiAddress, bool]>; /** - * Transfer some liquid free balance to another account. - * - * `transfer_allow_death` will set the `FreeBalance` of the sender and receiver. - * If the sender's account is below the existential deposit as a result - * of the transfer, the account will be reaped. - * - * The dispatch origin for this call must be `Signed` by the transactor. + * See [`Pallet::transfer_allow_death`]. **/ transferAllowDeath: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; /** - * Same as the [`transfer_allow_death`] call, but with a check that the transfer will not - * kill the origin account. - * - * 99% of the time you want [`transfer_allow_death`] instead. - * - * [`transfer_allow_death`]: struct.Pallet.html#method.transfer + * See [`Pallet::transfer_keep_alive`]. **/ transferKeepAlive: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; /** - * Upgrade a specified account. - * - * - `origin`: Must be `Signed`. - * - `who`: The account to be upgraded. - * - * This will waive the transaction fee if at least all but 10% of the accounts needed to - * be upgraded. (We let some not have to be upgraded just in order to allow for the - * possibililty of churn). + * See [`Pallet::upgrade_accounts`]. **/ upgradeAccounts: AugmentedSubmittable<(who: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; }; council: { /** - * Close a vote that is either approved, disapproved or whose voting period has ended. - * - * May be called by any signed account in order to finish voting and close the proposal. - * - * If called before the end of the voting period it will only close the vote if it is - * has enough votes to be approved or disapproved. - * - * If called after the end of the voting period abstentions are counted as rejections - * unless there is a prime member set and the prime member cast an approval. - * - * If the close operation completes successfully with disapproval, the transaction fee will - * be waived. Otherwise execution of the approved operation will be charged to the caller. - * - * + `proposal_weight_bound`: The maximum amount of weight consumed by executing the closed - * proposal. - * + `length_bound`: The upper bound for the length of the proposal in storage. Checked via - * `storage::read` so it is `size_of::() == 4` larger than the pure length. - * - * ## Complexity - * - `O(B + M + P1 + P2)` where: - * - `B` is `proposal` size in bytes (length-fee-bounded) - * - `M` is members-count (code- and governance-bounded) - * - `P1` is the complexity of `proposal` preimage. - * - `P2` is proposal-count (code-bounded) + * See [`Pallet::close`]. **/ close: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, proposalWeightBound: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact, SpWeightsWeightV2Weight, Compact]>; /** - * Disapprove a proposal, close, and remove it from the system, regardless of its current - * state. - * - * Must be called by the Root origin. - * - * Parameters: - * * `proposal_hash`: The hash of the proposal that should be disapproved. - * - * ## Complexity - * O(P) where P is the number of max proposals + * See [`Pallet::disapprove_proposal`]. **/ disapproveProposal: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Dispatch a proposal from a member using the `Member` origin. - * - * Origin must be a member of the collective. - * - * ## Complexity: - * - `O(B + M + P)` where: - * - `B` is `proposal` size in bytes (length-fee-bounded) - * - `M` members-count (code-bounded) - * - `P` complexity of dispatching `proposal` + * See [`Pallet::execute`]. **/ execute: AugmentedSubmittable<(proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Call, Compact]>; /** - * Add a new proposal to either be voted on or executed directly. - * - * Requires the sender to be member. - * - * `threshold` determines whether `proposal` is executed directly (`threshold < 2`) - * or put up for voting. - * - * ## Complexity - * - `O(B + M + P1)` or `O(B + M + P2)` where: - * - `B` is `proposal` size in bytes (length-fee-bounded) - * - `M` is members-count (code- and governance-bounded) - * - branching is influenced by `threshold` where: - * - `P1` is proposal execution complexity (`threshold < 2`) - * - `P2` is proposals-count (code-bounded) (`threshold >= 2`) + * See [`Pallet::propose`]. **/ propose: AugmentedSubmittable<(threshold: Compact | AnyNumber | Uint8Array, proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Call, Compact]>; /** - * Set the collective's membership. - * - * - `new_members`: The new member list. Be nice to the chain and provide it sorted. - * - `prime`: The prime member whose vote sets the default. - * - `old_count`: The upper bound for the previous number of members in storage. Used for - * weight estimation. - * - * The dispatch of this call must be `SetMembersOrigin`. - * - * NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but - * the weight estimations rely on it to estimate dispatchable weight. - * - * # WARNING: - * - * The `pallet-collective` can also be managed by logic outside of the pallet through the - * implementation of the trait [`ChangeMembers`]. - * Any call to `set_members` must be careful that the member set doesn't get out of sync - * with other logic managing the member set. - * - * ## Complexity: - * - `O(MP + N)` where: - * - `M` old-members-count (code- and governance-bounded) - * - `N` new-members-count (code- and governance-bounded) - * - `P` proposals-count (code-bounded) + * See [`Pallet::set_members`]. **/ setMembers: AugmentedSubmittable<(newMembers: Vec | (AccountId32 | string | Uint8Array)[], prime: Option | null | Uint8Array | AccountId32 | string, oldCount: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Vec, Option, u32]>; /** - * Add an aye or nay vote for the sender to the given proposal. - * - * Requires the sender to be a member. - * - * Transaction fees will be waived if the member is voting on any particular proposal - * for the first time and the call is successful. Subsequent vote changes will charge a - * fee. - * ## Complexity - * - `O(M)` where `M` is members-count (code- and governance-bounded) + * See [`Pallet::vote`]. **/ vote: AugmentedSubmittable<(proposal: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, approve: bool | boolean | Uint8Array) => SubmittableExtrinsic, [H256, Compact, bool]>; }; ctype: { /** - * Create a new CType from the given unique CType hash and associates - * it with its creator. - * - * A CType with the same hash must not be stored on chain. - * - * Emits `CTypeCreated`. - * - * # - * Weight: O(1) - * - Reads: Ctypes, Balance - * - Writes: Ctypes, Balance - * # + * See [`Pallet::add`]. **/ add: AugmentedSubmittable<(ctype: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Set the creation block number for a given CType, if found. - * - * Emits `CTypeUpdated`. + * See [`Pallet::set_block_number`]. **/ setBlockNumber: AugmentedSubmittable<(ctypeHash: H256 | string | Uint8Array, blockNumber: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, u64]>; }; delegation: { /** - * Create a new delegation node. - * - * The new delegation node represents a new trust hierarchy that - * considers the new node as its root. The owner of this node has full - * control over any of its direct and indirect descendants. - * - * For the creation to succeed, the delegatee must provide a valid - * signature over the (blake256) hash of the creation operation details - * which include (in order) delegation id, root node id, parent id, and - * permissions of the new node. - * - * There must be no delegation with the same id stored on chain. - * Furthermore, the referenced root and parent nodes must already be - * present on chain and contain the valid permissions and revocation - * status (i.e., not revoked). - * - * The dispatch origin must be split into - * * a submitter of type `AccountId` who is responsible for paying the - * transaction fee and - * * a DID subject of type `DelegationEntityId` who creates, owns and - * can revoke the delegation. - * - * Requires the sender of the transaction to have a reservable balance - * of at least `Deposit` many tokens. - * - * Emits `DelegationCreated`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], Roots, Delegations - * - Writes: Delegations - * # + * See [`Pallet::add_delegation`]. **/ addDelegation: AugmentedSubmittable<(delegationId: H256 | string | Uint8Array, parentId: H256 | string | Uint8Array, delegate: AccountId32 | string | Uint8Array, permissions: DelegationDelegationHierarchyPermissions | { bits?: any } | string | Uint8Array, delegateSignature: DidDidDetailsDidSignature | { ed25519: any } | { sr25519: any } | { ecdsa: any } | string | Uint8Array) => SubmittableExtrinsic, [H256, H256, AccountId32, DelegationDelegationHierarchyPermissions, DidDidDetailsDidSignature]>; /** - * Changes the deposit owner. - * - * The balance that is reserved by the current deposit owner will be - * freed and balance of the new deposit owner will get reserved. - * - * The subject of the call must be the owner of the delegation node. - * The sender of the call will be the new deposit owner. + * See [`Pallet::change_deposit_owner`]. **/ changeDepositOwner: AugmentedSubmittable<(delegationId: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Create a new delegation root associated with a given CType hash. - * - * The new root will allow a new trust hierarchy to be created by - * adding children delegations to the root. - * - * There must be no delegation with the same ID stored on chain, while - * there must be already a CType with the given hash stored in the - * CType pallet. - * - * The dispatch origin must be split into - * * a submitter of type `AccountId` who is responsible for paying the - * transaction fee and - * * a DID subject of type `DelegationEntityId` who creates, owns and - * can revoke the delegation. - * - * Requires the sender of the transaction to have a reservable balance - * of at least `Deposit` many tokens. - * - * Emits `RootCreated`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], Roots, CTypes - * - Writes: Roots - * # + * See [`Pallet::create_hierarchy`]. **/ createHierarchy: AugmentedSubmittable<(rootNodeId: H256 | string | Uint8Array, ctypeHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256, H256]>; /** - * Reclaim the deposit for a delegation node (potentially a root - * node), removing the node and all its children. - * - * Returns the delegation deposit to the deposit owner for each - * removed DelegationNode by unreserving it. - * - * Removing a delegation node results in the trust hierarchy starting - * from the given node being removed. Nevertheless, removal starts - * from the leave nodes upwards, so if the operation ends prematurely - * because it runs out of gas, the delegation state would be consistent - * as no child would "survive" its parent. As a consequence, if the - * given node is removed, the trust hierarchy with the node as root is - * to be considered removed. - * - * The dispatch origin must be signed by the delegation deposit owner. - * - * `DepositReclaimed`. - * - * # - * Weight: O(C) where C is the number of children of the delegation - * node which is bounded by `max_removals`. - * - Reads: [Origin Account], Roots, C * Delegations, C * Children. - * - Writes: Roots, 2 * C * Delegations - * # + * See [`Pallet::reclaim_deposit`]. **/ reclaimDeposit: AugmentedSubmittable<(delegationId: H256 | string | Uint8Array, maxRemovals: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, u32]>; /** - * Remove a delegation node (potentially a root node) and all its - * children. - * - * Returns the delegation deposit to the deposit owner for each - * removed DelegationNode by unreserving it. - * - * Removing a delegation node results in the trust hierarchy starting - * from the given node being removed. Nevertheless, removal starts - * from the leave nodes upwards, so if the operation ends prematurely - * because it runs out of gas, the delegation state would be consistent - * as no child would "survive" its parent. As a consequence, if the - * given node is removed, the trust hierarchy with the node as root is - * to be considered removed. - * - * The dispatch origin must be split into - * * a submitter of type `AccountId` who is responsible for paying the - * transaction fee and - * * a DID subject of type `DelegationEntityId` who creates, owns and - * can revoke the delegation. - * - * Emits C * `DelegationRemoved`. - * - * # - * Weight: O(C) where C is the number of children of the delegation - * node which is bounded by `max_children`. - * - Reads: [Origin Account], Roots, C * Delegations, C * Children. - * - Writes: Roots, 2 * C * Delegations - * # + * See [`Pallet::remove_delegation`]. **/ removeDelegation: AugmentedSubmittable<(delegationId: H256 | string | Uint8Array, maxRemovals: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, u32]>; /** - * Revoke a delegation node (potentially a root node) and all its - * children. - * - * Does not refund the delegation back to the deposit owner as the - * node is still stored on chain. Requires to additionally call - * `remove_delegation` to unreserve the deposit. - * - * Revoking a delegation node results in the trust hierarchy starting - * from the given node being revoked. Nevertheless, revocation starts - * from the leave nodes upwards, so if the operation ends prematurely - * because it runs out of gas, the delegation state would be consistent - * as no child would "survive" its parent. As a consequence, if the - * given node is revoked, the trust hierarchy with the node as root is - * to be considered revoked. - * - * The dispatch origin must be split into - * * a submitter of type `AccountId` who is responsible for paying the - * transaction fee and - * * a DID subject of type `DelegationEntityId` who creates, owns and - * can revoke the delegation. - * - * Emits C * `DelegationRevoked`. - * - * # - * Weight: O(C) where C is the number of children of the delegation - * node which is bounded by `max_children`. - * - Reads: [Origin Account], Roots, C * Delegations, C * Children. - * - Writes: Roots, C * Delegations - * # + * See [`Pallet::revoke_delegation`]. **/ revokeDelegation: AugmentedSubmittable<(delegationId: H256 | string | Uint8Array, maxParentChecks: u32 | AnyNumber | Uint8Array, maxRevocations: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, u32, u32]>; /** - * Updates the deposit amount to the current deposit rate. - * - * The sender must be the deposit owner. + * See [`Pallet::update_deposit`]. **/ updateDeposit: AugmentedSubmittable<(delegationId: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; }; democracy: { /** - * Permanently place a proposal into the blacklist. This prevents it from ever being - * proposed again. - * - * If called on a queued public or external proposal, then this will result in it being - * removed. If the `ref_index` supplied is an active referendum with the proposal hash, - * then it will be cancelled. - * - * The dispatch origin of this call must be `BlacklistOrigin`. - * - * - `proposal_hash`: The proposal hash to blacklist permanently. - * - `ref_index`: An ongoing referendum whose hash is `proposal_hash`, which will be - * cancelled. - * - * Weight: `O(p)` (though as this is an high-privilege dispatch, we assume it has a - * reasonable value). + * See [`Pallet::blacklist`]. **/ blacklist: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, maybeRefIndex: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [H256, Option]>; /** - * Remove a proposal. - * - * The dispatch origin of this call must be `CancelProposalOrigin`. - * - * - `prop_index`: The index of the proposal to cancel. - * - * Weight: `O(p)` where `p = PublicProps::::decode_len()` + * See [`Pallet::cancel_proposal`]. **/ cancelProposal: AugmentedSubmittable<(propIndex: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** - * Remove a referendum. - * - * The dispatch origin of this call must be _Root_. - * - * - `ref_index`: The index of the referendum to cancel. - * - * # Weight: `O(1)`. + * See [`Pallet::cancel_referendum`]. **/ cancelReferendum: AugmentedSubmittable<(refIndex: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** - * Clears all public proposals. - * - * The dispatch origin of this call must be _Root_. - * - * Weight: `O(1)`. + * See [`Pallet::clear_public_proposals`]. **/ clearPublicProposals: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Delegate the voting power (with some given conviction) of the sending account. - * - * The balance delegated is locked for as long as it's delegated, and thereafter for the - * time appropriate for the conviction's lock period. - * - * The dispatch origin of this call must be _Signed_, and the signing account must either: - * - be delegating already; or - * - have no voting activity (if there is, then it will need to be removed/consolidated - * through `reap_vote` or `unvote`). - * - * - `to`: The account whose voting the `target` account's voting power will follow. - * - `conviction`: The conviction that will be attached to the delegated votes. When the - * account is undelegated, the funds will be locked for the corresponding period. - * - `balance`: The amount of the account's balance to be used in delegating. This must not - * be more than the account's current balance. - * - * Emits `Delegated`. - * - * Weight: `O(R)` where R is the number of referendums the voter delegating to has - * voted on. Weight is charged as if maximum votes. + * See [`Pallet::delegate`]. **/ delegate: AugmentedSubmittable<(to: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, conviction: PalletDemocracyConviction | 'None' | 'Locked1x' | 'Locked2x' | 'Locked3x' | 'Locked4x' | 'Locked5x' | 'Locked6x' | number | Uint8Array, balance: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, PalletDemocracyConviction, u128]>; /** - * Schedule an emergency cancellation of a referendum. Cannot happen twice to the same - * referendum. - * - * The dispatch origin of this call must be `CancellationOrigin`. - * - * -`ref_index`: The index of the referendum to cancel. - * - * Weight: `O(1)`. + * See [`Pallet::emergency_cancel`]. **/ emergencyCancel: AugmentedSubmittable<(refIndex: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Schedule a referendum to be tabled once it is legal to schedule an external - * referendum. - * - * The dispatch origin of this call must be `ExternalOrigin`. - * - * - `proposal_hash`: The preimage hash of the proposal. + * See [`Pallet::external_propose`]. **/ externalPropose: AugmentedSubmittable<(proposal: FrameSupportPreimagesBounded | { Legacy: any } | { Inline: any } | { Lookup: any } | string | Uint8Array) => SubmittableExtrinsic, [FrameSupportPreimagesBounded]>; /** - * Schedule a negative-turnout-bias referendum to be tabled next once it is legal to - * schedule an external referendum. - * - * The dispatch of this call must be `ExternalDefaultOrigin`. - * - * - `proposal_hash`: The preimage hash of the proposal. - * - * Unlike `external_propose`, blacklisting has no effect on this and it may replace a - * pre-scheduled `external_propose` call. - * - * Weight: `O(1)` + * See [`Pallet::external_propose_default`]. **/ externalProposeDefault: AugmentedSubmittable<(proposal: FrameSupportPreimagesBounded | { Legacy: any } | { Inline: any } | { Lookup: any } | string | Uint8Array) => SubmittableExtrinsic, [FrameSupportPreimagesBounded]>; /** - * Schedule a majority-carries referendum to be tabled next once it is legal to schedule - * an external referendum. - * - * The dispatch of this call must be `ExternalMajorityOrigin`. - * - * - `proposal_hash`: The preimage hash of the proposal. - * - * Unlike `external_propose`, blacklisting has no effect on this and it may replace a - * pre-scheduled `external_propose` call. - * - * Weight: `O(1)` + * See [`Pallet::external_propose_majority`]. **/ externalProposeMajority: AugmentedSubmittable<(proposal: FrameSupportPreimagesBounded | { Legacy: any } | { Inline: any } | { Lookup: any } | string | Uint8Array) => SubmittableExtrinsic, [FrameSupportPreimagesBounded]>; /** - * Schedule the currently externally-proposed majority-carries referendum to be tabled - * immediately. If there is no externally-proposed referendum currently, or if there is one - * but it is not a majority-carries referendum then it fails. - * - * The dispatch of this call must be `FastTrackOrigin`. - * - * - `proposal_hash`: The hash of the current external proposal. - * - `voting_period`: The period that is allowed for voting on this proposal. Increased to - * Must be always greater than zero. - * For `FastTrackOrigin` must be equal or greater than `FastTrackVotingPeriod`. - * - `delay`: The number of block after voting has ended in approval and this should be - * enacted. This doesn't have a minimum amount. - * - * Emits `Started`. - * - * Weight: `O(1)` + * See [`Pallet::fast_track`]. **/ fastTrack: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, votingPeriod: u64 | AnyNumber | Uint8Array, delay: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, u64, u64]>; /** - * Propose a sensitive action to be taken. - * - * The dispatch origin of this call must be _Signed_ and the sender must - * have funds to cover the deposit. - * - * - `proposal_hash`: The hash of the proposal preimage. - * - `value`: The amount of deposit (must be at least `MinimumDeposit`). - * - * Emits `Proposed`. + * See [`Pallet::propose`]. **/ propose: AugmentedSubmittable<(proposal: FrameSupportPreimagesBounded | { Legacy: any } | { Inline: any } | { Lookup: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [FrameSupportPreimagesBounded, Compact]>; /** - * Remove a vote for a referendum. - * - * If the `target` is equal to the signer, then this function is exactly equivalent to - * `remove_vote`. If not equal to the signer, then the vote must have expired, - * either because the referendum was cancelled, because the voter lost the referendum or - * because the conviction period is over. - * - * The dispatch origin of this call must be _Signed_. - * - * - `target`: The account of the vote to be removed; this account must have voted for - * referendum `index`. - * - `index`: The index of referendum of the vote to be removed. - * - * Weight: `O(R + log R)` where R is the number of referenda that `target` has voted on. - * Weight is calculated for the maximum number of vote. + * See [`Pallet::remove_other_vote`]. **/ removeOtherVote: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u32]>; /** - * Remove a vote for a referendum. - * - * If: - * - the referendum was cancelled, or - * - the referendum is ongoing, or - * - the referendum has ended such that - * - the vote of the account was in opposition to the result; or - * - there was no conviction to the account's vote; or - * - the account made a split vote - * ...then the vote is removed cleanly and a following call to `unlock` may result in more - * funds being available. - * - * If, however, the referendum has ended and: - * - it finished corresponding to the vote of the account, and - * - the account made a standard vote with conviction, and - * - the lock period of the conviction is not over - * ...then the lock will be aggregated into the overall account's lock, which may involve - * *overlocking* (where the two locks are combined into a single lock that is the maximum - * of both the amount locked and the time is it locked for). - * - * The dispatch origin of this call must be _Signed_, and the signer must have a vote - * registered for referendum `index`. - * - * - `index`: The index of referendum of the vote to be removed. - * - * Weight: `O(R + log R)` where R is the number of referenda that `target` has voted on. - * Weight is calculated for the maximum number of vote. + * See [`Pallet::remove_vote`]. **/ removeVote: AugmentedSubmittable<(index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Signals agreement with a particular proposal. - * - * The dispatch origin of this call must be _Signed_ and the sender - * must have funds to cover the deposit, equal to the original deposit. - * - * - `proposal`: The index of the proposal to second. + * See [`Pallet::second`]. **/ second: AugmentedSubmittable<(proposal: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** - * Set or clear a metadata of a proposal or a referendum. - * - * Parameters: - * - `origin`: Must correspond to the `MetadataOwner`. - * - `ExternalOrigin` for an external proposal with the `SuperMajorityApprove` - * threshold. - * - `ExternalDefaultOrigin` for an external proposal with the `SuperMajorityAgainst` - * threshold. - * - `ExternalMajorityOrigin` for an external proposal with the `SimpleMajority` - * threshold. - * - `Signed` by a creator for a public proposal. - * - `Signed` to clear a metadata for a finished referendum. - * - `Root` to set a metadata for an ongoing referendum. - * - `owner`: an identifier of a metadata owner. - * - `maybe_hash`: The hash of an on-chain stored preimage. `None` to clear a metadata. + * See [`Pallet::set_metadata`]. **/ setMetadata: AugmentedSubmittable<(owner: PalletDemocracyMetadataOwner | { External: any } | { Proposal: any } | { Referendum: any } | string | Uint8Array, maybeHash: Option | null | Uint8Array | H256 | string) => SubmittableExtrinsic, [PalletDemocracyMetadataOwner, Option]>; /** - * Undelegate the voting power of the sending account. - * - * Tokens may be unlocked following once an amount of time consistent with the lock period - * of the conviction with which the delegation was issued. - * - * The dispatch origin of this call must be _Signed_ and the signing account must be - * currently delegating. - * - * Emits `Undelegated`. - * - * Weight: `O(R)` where R is the number of referendums the voter delegating to has - * voted on. Weight is charged as if maximum votes. + * See [`Pallet::undelegate`]. **/ undelegate: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Unlock tokens that have an expired lock. - * - * The dispatch origin of this call must be _Signed_. - * - * - `target`: The account to remove the lock on. - * - * Weight: `O(R)` with R number of vote of target. + * See [`Pallet::unlock`]. **/ unlock: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; /** - * Veto and blacklist the external proposal hash. - * - * The dispatch origin of this call must be `VetoOrigin`. - * - * - `proposal_hash`: The preimage hash of the proposal to veto and blacklist. - * - * Emits `Vetoed`. - * - * Weight: `O(V + log(V))` where V is number of `existing vetoers` + * See [`Pallet::veto_external`]. **/ vetoExternal: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Vote in a referendum. If `vote.is_aye()`, the vote is to enact the proposal; - * otherwise it is a vote to keep the status quo. - * - * The dispatch origin of this call must be _Signed_. - * - * - `ref_index`: The index of the referendum to vote for. - * - `vote`: The vote configuration. + * See [`Pallet::vote`]. **/ vote: AugmentedSubmittable<(refIndex: Compact | AnyNumber | Uint8Array, vote: PalletDemocracyVoteAccountVote | { Standard: any } | { Split: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, PalletDemocracyVoteAccountVote]>; }; did: { /** - * Add a single new key agreement key to the DID. - * - * The new key is added to the set of public keys. - * - * The dispatch origin must be a DID origin proxied via the - * `submit_did_call` extrinsic. - * - * Emits `DidUpdated`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], Did - * - Writes: Did - * # + * See [`Pallet::add_key_agreement_key`]. **/ addKeyAgreementKey: AugmentedSubmittable<(newKey: DidDidDetailsDidEncryptionKey | { x25519: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidEncryptionKey]>; /** - * Add a new service endpoint under the given DID. - * - * The dispatch origin must be a DID origin proxied via the - * `submit_did_call` extrinsic. - * - * Emits `DidUpdated`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], Did, ServiceEndpoints, DidEndpointsCount - * - Writes: Did, ServiceEndpoints, DidEndpointsCount - * # + * See [`Pallet::add_service_endpoint`]. **/ addServiceEndpoint: AugmentedSubmittable<(serviceEndpoint: DidServiceEndpointsDidEndpoint | { id?: any; serviceTypes?: any; urls?: any } | string | Uint8Array) => SubmittableExtrinsic, [DidServiceEndpointsDidEndpoint]>; /** - * Changes the deposit owner. - * - * The balance that is reserved by the current deposit owner will be - * freed and balance of the new deposit owner will get reserved. - * - * The subject of the call must be the did owner. - * The sender of the call will be the new deposit owner. + * See [`Pallet::change_deposit_owner`]. **/ changeDepositOwner: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Store a new DID on chain, after verifying that the creation - * operation has been signed by the KILT account associated with the - * identifier of the DID being created and that a DID with the same - * identifier has not previously existed on (and then deleted from) the - * chain. - * - * There must be no DID information stored on chain under the same DID - * identifier. - * - * The new keys added with this operation are stored under the DID - * identifier along with the block number in which the operation was - * executed. - * - * The dispatch origin can be any KILT account with enough funds to - * execute the extrinsic and it does not have to be tied in any way to - * the KILT account identifying the DID subject. - * - * Emits `DidCreated`. - * - * # - * - The transaction's complexity is mainly dependent on the number of - * new key agreement keys and the number of new service endpoints - * included in the operation. - * --------- - * Weight: O(K) + O(N) where K is the number of new key agreement - * keys bounded by `MaxNewKeyAgreementKeys`, while N is the number of - * new service endpoints bounded by `MaxNumberOfServicesPerDid`. - * - Reads: [Origin Account], Did, DidBlacklist - * - Writes: Did (with K new key agreement keys), ServiceEndpoints - * (with N new service endpoints), DidEndpointsCount - * # + * See [`Pallet::create`]. **/ create: AugmentedSubmittable<(details: DidDidDetailsDidCreationDetails | { did?: any; submitter?: any; newKeyAgreementKeys?: any; newAttestationKey?: any; newDelegationKey?: any; newServiceDetails?: any } | string | Uint8Array, signature: DidDidDetailsDidSignature | { ed25519: any } | { sr25519: any } | { ecdsa: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidCreationDetails, DidDidDetailsDidSignature]>; /** - * Delete a DID from the chain and all information associated with it, - * after verifying that the delete operation has been signed by the DID - * subject using the authentication key currently stored on chain. - * - * The referenced DID identifier must be present on chain before the - * delete operation is evaluated. - * - * After it is deleted, a DID with the same identifier cannot be - * re-created ever again. - * - * As the result of the deletion, all traces of the DID are removed - * from the storage, which results in the invalidation of all - * attestations issued by the DID subject. - * - * The dispatch origin must be a DID origin proxied via the - * `submit_did_call` extrinsic. - * - * Emits `DidDeleted`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], Did - * - Kills: Did entry associated to the DID identifier - * # + * See [`Pallet::create_from_account`]. + **/ + createFromAccount: AugmentedSubmittable<(authenticationKey: DidDidDetailsDidVerificationKey | { ed25519: any } | { sr25519: any } | { ecdsa: any } | { Account: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidVerificationKey]>; + /** + * See [`Pallet::delete`]. **/ delete: AugmentedSubmittable<(endpointsToRemove: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Reclaim a deposit for a DID. This will delete the DID and all - * information associated with it, after verifying that the caller is - * the owner of the deposit. - * - * The referenced DID identifier must be present on chain before the - * delete operation is evaluated. - * - * After it is deleted, a DID with the same identifier cannot be - * re-created ever again. - * - * As the result of the deletion, all traces of the DID are removed - * from the storage, which results in the invalidation of all - * attestations issued by the DID subject. - * - * Emits `DidDeleted`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], Did - * - Kills: Did entry associated to the DID identifier - * # + * See [`Pallet::dispatch_as`]. + **/ + dispatchAs: AugmentedSubmittable<(didIdentifier: AccountId32 | string | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, Call]>; + /** + * See [`Pallet::reclaim_deposit`]. **/ reclaimDeposit: AugmentedSubmittable<(didSubject: AccountId32 | string | Uint8Array, endpointsToRemove: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u32]>; /** - * Remove the DID attestation key. - * - * The old key is deleted from the set of public keys if - * it is not used in any other part of the DID. - * - * The dispatch origin must be a DID origin proxied via the - * `submit_did_call` extrinsic. - * - * Emits `DidUpdated`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], Did - * - Writes: Did - * # + * See [`Pallet::remove_attestation_key`]. **/ removeAttestationKey: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Remove the DID delegation key. - * - * The old key is deleted from the set of public keys if - * it is not used in any other part of the DID. - * - * The dispatch origin must be a DID origin proxied via the - * `submit_did_call` extrinsic. - * - * Emits `DidUpdated`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], Did - * - Writes: Did - * # + * See [`Pallet::remove_delegation_key`]. **/ removeDelegationKey: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Remove a DID key agreement key from both its set of key agreement - * keys and as well as its public keys. - * - * The dispatch origin must be a DID origin proxied via the - * `submit_did_call` extrinsic. - * - * Emits `DidUpdated`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], Did - * - Writes: Did - * # + * See [`Pallet::remove_key_agreement_key`]. **/ removeKeyAgreementKey: AugmentedSubmittable<(keyId: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Remove the service with the provided ID from the DID. - * - * The dispatch origin must be a DID origin proxied via the - * `submit_did_call` extrinsic. - * - * Emits `DidUpdated`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], ServiceEndpoints, DidEndpointsCount - * - Writes: Did, ServiceEndpoints, DidEndpointsCount - * # + * See [`Pallet::remove_service_endpoint`]. **/ removeServiceEndpoint: AugmentedSubmittable<(serviceId: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Set or update the DID attestation key. - * - * If an old key existed, it is deleted from the set of public keys if - * it is not used in any other part of the DID. The new key is added to - * the set of public keys. - * - * The dispatch origin must be a DID origin proxied via the - * `submit_did_call` extrinsic. - * - * Emits `DidUpdated`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], Did - * - Writes: Did - * # - **/ - setAttestationKey: AugmentedSubmittable<(newKey: DidDidDetailsDidVerificationKey | { ed25519: any } | { sr25519: any } | { ecdsa: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidVerificationKey]>; - /** - * Update the DID authentication key. - * - * The old key is deleted from the set of public keys if it is - * not used in any other part of the DID. The new key is added to the - * set of public keys. - * - * The dispatch origin must be a DID origin proxied via the - * `submit_did_call` extrinsic. - * - * Emits `DidUpdated`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], Did - * - Writes: Did - * # - **/ - setAuthenticationKey: AugmentedSubmittable<(newKey: DidDidDetailsDidVerificationKey | { ed25519: any } | { sr25519: any } | { ecdsa: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidVerificationKey]>; - /** - * Set or update the DID delegation key. - * - * If an old key existed, it is deleted from the set of public keys if - * it is not used in any other part of the DID. The new key is added to - * the set of public keys. - * - * The dispatch origin must be a DID origin proxied via the - * `submit_did_call` extrinsic. - * - * Emits `DidUpdated`. - * - * # - * Weight: O(1) - * - Reads: [Origin Account], Did - * - Writes: Did - * # - **/ - setDelegationKey: AugmentedSubmittable<(newKey: DidDidDetailsDidVerificationKey | { ed25519: any } | { sr25519: any } | { ecdsa: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidVerificationKey]>; - /** - * Proxy a dispatchable call of another runtime extrinsic that - * supports a DID origin. - * - * The referenced DID identifier must be present on chain before the - * operation is dispatched. - * - * A call submitted through this extrinsic must be signed with the - * right DID key, depending on the call. This information is provided - * by the `DidAuthorizedCallOperation` parameter, which specifies the - * DID subject acting as the origin of the call, the DID's tx counter - * (nonce), the dispatchable to call in case signature verification - * succeeds, the type of DID key to use to verify the operation - * signature, and the block number the operation was targeting for - * inclusion, when it was created and signed. - * - * In case the signature is incorrect, the nonce is not valid, the - * required key is not present for the specified DID, or the block - * specified is too old the verification fails and the call is not - * dispatched. Otherwise, the call is properly dispatched with a - * `DidOrigin` origin indicating the DID subject. - * - * A successful dispatch operation results in the tx counter associated - * with the given DID to be incremented, to mitigate replay attacks. - * - * The dispatch origin can be any KILT account with enough funds to - * execute the extrinsic and it does not have to be tied in any way to - * the KILT account identifying the DID subject. - * - * Emits `DidCallDispatched`. - * - * # - * Weight: O(1) + weight of the dispatched call - * - Reads: [Origin Account], Did - * - Writes: Did - * # + * See [`Pallet::set_attestation_key`]. + **/ + setAttestationKey: AugmentedSubmittable<(newKey: DidDidDetailsDidVerificationKey | { ed25519: any } | { sr25519: any } | { ecdsa: any } | { Account: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidVerificationKey]>; + /** + * See [`Pallet::set_authentication_key`]. + **/ + setAuthenticationKey: AugmentedSubmittable<(newKey: DidDidDetailsDidVerificationKey | { ed25519: any } | { sr25519: any } | { ecdsa: any } | { Account: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidVerificationKey]>; + /** + * See [`Pallet::set_delegation_key`]. + **/ + setDelegationKey: AugmentedSubmittable<(newKey: DidDidDetailsDidVerificationKey | { ed25519: any } | { sr25519: any } | { ecdsa: any } | { Account: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidVerificationKey]>; + /** + * See [`Pallet::submit_did_call`]. **/ submitDidCall: AugmentedSubmittable<(didCall: DidDidDetailsDidAuthorizedCallOperation | { did?: any; txCounter?: any; call?: any; blockNumber?: any; submitter?: any } | string | Uint8Array, signature: DidDidDetailsDidSignature | { ed25519: any } | { sr25519: any } | { ecdsa: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidSignature]>; /** - * Updates the deposit amount to the current deposit rate. - * - * The sender must be the deposit owner. + * See [`Pallet::update_deposit`]. **/ updateDeposit: AugmentedSubmittable<(did: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; }; didLookup: { /** - * Associate the given account to the DID that authorized this call. - * - * The account has to sign the DID and a blocknumber after which the - * signature expires in order to authorize the association. - * - * The signature will be checked against the scale encoded tuple of the - * method specific id of the did identifier and the block number after - * which the signature should be regarded invalid. - * - * Emits `AssociationEstablished` and, optionally, `AssociationRemoved` - * if there was a previous association for the account. - * - * # - * Weight: O(1) - * - Reads: ConnectedDids + ConnectedAccounts + DID Origin Check - * - Writes: ConnectedDids + ConnectedAccounts - * # + * See [`Pallet::associate_account`]. **/ associateAccount: AugmentedSubmittable<(req: PalletDidLookupAssociateAccountRequest | { Polkadot: any } | { Ethereum: any } | string | Uint8Array, expiration: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletDidLookupAssociateAccountRequest, u64]>; /** - * Associate the sender of the call to the DID that authorized this - * call. - * - * Emits `AssociationEstablished` and, optionally, `AssociationRemoved` - * if there was a previous association for the account. - * - * # - * Weight: O(1) - * - Reads: ConnectedDids + ConnectedAccounts + DID Origin Check - * - Writes: ConnectedDids + ConnectedAccounts - * # + * See [`Pallet::associate_sender`]. **/ associateSender: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Changes the deposit owner. - * - * The balance that is reserved by the current deposit owner will be - * freed and balance of the new deposit owner will get reserved. - * - * The subject of the call must be linked to the account. - * The sender of the call will be the new deposit owner. + * See [`Pallet::change_deposit_owner`]. **/ changeDepositOwner: AugmentedSubmittable<(account: PalletDidLookupLinkableAccountLinkableAccountId | { AccountId20: any } | { AccountId32: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletDidLookupLinkableAccountLinkableAccountId]>; /** - * Remove the association of the provided account. This call can only - * be called from the deposit owner. The reserved deposit will be - * freed. - * - * Emits `AssociationRemoved`. - * - * # - * Weight: O(1) - * - Reads: ConnectedDids - * - Writes: ConnectedDids - * # + * See [`Pallet::reclaim_deposit`]. **/ reclaimDeposit: AugmentedSubmittable<(account: PalletDidLookupLinkableAccountLinkableAccountId | { AccountId20: any } | { AccountId32: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletDidLookupLinkableAccountLinkableAccountId]>; /** - * Remove the association of the provided account ID. This call doesn't - * require the authorization of the account ID, but the associated DID - * needs to match the DID that authorized this call. - * - * Emits `AssociationRemoved`. - * - * # - * Weight: O(1) - * - Reads: ConnectedDids + ConnectedAccounts + DID Origin Check - * - Writes: ConnectedDids + ConnectedAccounts - * # + * See [`Pallet::remove_account_association`]. **/ removeAccountAssociation: AugmentedSubmittable<(account: PalletDidLookupLinkableAccountLinkableAccountId | { AccountId20: any } | { AccountId32: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletDidLookupLinkableAccountLinkableAccountId]>; /** - * Remove the association of the sender account. This call doesn't - * require the authorization of the DID, but requires a signed origin. - * - * Emits `AssociationRemoved`. - * - * # - * Weight: O(1) - * - Reads: ConnectedDids + ConnectedAccounts + DID Origin Check - * - Writes: ConnectedDids + ConnectedAccounts - * # + * See [`Pallet::remove_sender_association`]. **/ removeSenderAssociation: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Updates the deposit amount to the current deposit rate. - * - * The sender must be the deposit owner. + * See [`Pallet::update_deposit`]. **/ updateDeposit: AugmentedSubmittable<(account: PalletDidLookupLinkableAccountLinkableAccountId | { AccountId20: any } | { AccountId32: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletDidLookupLinkableAccountLinkableAccountId]>; }; dmpQueue: { /** - * Service a single overweight message. + * See [`Pallet::service_overweight`]. **/ serviceOverweight: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array, weightLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u64, SpWeightsWeightV2Weight]>; }; indices: { /** - * Assign an previously unassigned index. - * - * Payment: `Deposit` is reserved from the sender account. - * - * The dispatch origin for this call must be _Signed_. - * - * - `index`: the index to be claimed. This must not be in use. - * - * Emits `IndexAssigned` if successful. - * - * ## Complexity - * - `O(1)`. + * See [`Pallet::claim`]. **/ claim: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Force an index to an account. This doesn't require a deposit. If the index is already - * held, then any deposit is reimbursed to its current owner. - * - * The dispatch origin for this call must be _Root_. - * - * - `index`: the index to be (re-)assigned. - * - `new`: the new owner of the index. This function is a no-op if it is equal to sender. - * - `freeze`: if set to `true`, will freeze the index so it cannot be transferred. - * - * Emits `IndexAssigned` if successful. - * - * ## Complexity - * - `O(1)`. + * See [`Pallet::force_transfer`]. **/ forceTransfer: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, index: u64 | AnyNumber | Uint8Array, freeze: bool | boolean | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u64, bool]>; /** - * Free up an index owned by the sender. - * - * Payment: Any previous deposit placed for the index is unreserved in the sender account. - * - * The dispatch origin for this call must be _Signed_ and the sender must own the index. - * - * - `index`: the index to be freed. This must be owned by the sender. - * - * Emits `IndexFreed` if successful. - * - * ## Complexity - * - `O(1)`. + * See [`Pallet::free`]. **/ free: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Freeze an index so it will always point to the sender account. This consumes the - * deposit. - * - * The dispatch origin for this call must be _Signed_ and the signing account must have a - * non-frozen account `index`. - * - * - `index`: the index to be frozen in place. - * - * Emits `IndexFrozen` if successful. - * - * ## Complexity - * - `O(1)`. + * See [`Pallet::freeze`]. **/ freeze: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Assign an index already owned by the sender to another account. The balance reservation - * is effectively transferred to the new account. - * - * The dispatch origin for this call must be _Signed_. - * - * - `index`: the index to be re-assigned. This must be owned by the sender. - * - `new`: the new owner of the index. This function is a no-op if it is equal to sender. - * - * Emits `IndexAssigned` if successful. - * - * ## Complexity - * - `O(1)`. + * See [`Pallet::transfer`]. **/ transfer: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, index: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u64]>; }; + migration: { + /** + * See [`Pallet::update_balance`]. + **/ + updateBalance: AugmentedSubmittable<(requestedMigrations: PalletMigrationEntriesToMigrate | { attestation?: any; delegation?: any; did?: any; lookup?: any; w3n?: any; publicCredentials?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletMigrationEntriesToMigrate]>; + }; multisig: { /** - * Register approval for a dispatch to be made from a deterministic composite account if - * approved by a total of `threshold - 1` of `other_signatories`. - * - * Payment: `DepositBase` will be reserved if this is the first approval, plus - * `threshold` times `DepositFactor`. It is returned once this dispatch happens or - * is cancelled. - * - * The dispatch origin for this call must be _Signed_. - * - * - `threshold`: The total number of approvals for this dispatch before it is executed. - * - `other_signatories`: The accounts (other than the sender) who can approve this - * dispatch. May not be empty. - * - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is - * not the first approval, then it must be `Some`, with the timepoint (block number and - * transaction index) of the first approval transaction. - * - `call_hash`: The hash of the call to be executed. - * - * NOTE: If this is the final approval, you will want to use `as_multi` instead. - * - * ## Complexity - * - `O(S)`. - * - Up to one balance-reserve or unreserve operation. - * - One passthrough operation, one insert, both `O(S)` where `S` is the number of - * signatories. `S` is capped by `MaxSignatories`, with weight being proportional. - * - One encode & hash, both of complexity `O(S)`. - * - Up to one binary search and insert (`O(logS + S)`). - * - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. - * - One event. - * - Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit - * taken for its lifetime of `DepositBase + threshold * DepositFactor`. + * See [`Pallet::approve_as_multi`]. **/ approveAsMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], maybeTimepoint: Option | null | Uint8Array | PalletMultisigTimepoint | { height?: any; index?: any } | string, callHash: U8aFixed | string | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, Option, U8aFixed, SpWeightsWeightV2Weight]>; /** - * Register approval for a dispatch to be made from a deterministic composite account if - * approved by a total of `threshold - 1` of `other_signatories`. - * - * If there are enough, then dispatch the call. - * - * Payment: `DepositBase` will be reserved if this is the first approval, plus - * `threshold` times `DepositFactor`. It is returned once this dispatch happens or - * is cancelled. - * - * The dispatch origin for this call must be _Signed_. - * - * - `threshold`: The total number of approvals for this dispatch before it is executed. - * - `other_signatories`: The accounts (other than the sender) who can approve this - * dispatch. May not be empty. - * - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is - * not the first approval, then it must be `Some`, with the timepoint (block number and - * transaction index) of the first approval transaction. - * - `call`: The call to be executed. - * - * NOTE: Unless this is the final approval, you will generally want to use - * `approve_as_multi` instead, since it only requires a hash of the call. - * - * Result is equivalent to the dispatched result if `threshold` is exactly `1`. Otherwise - * on success, result is `Ok` and the result from the interior call, if it was executed, - * may be found in the deposited `MultisigExecuted` event. - * - * ## Complexity - * - `O(S + Z + Call)`. - * - Up to one balance-reserve or unreserve operation. - * - One passthrough operation, one insert, both `O(S)` where `S` is the number of - * signatories. `S` is capped by `MaxSignatories`, with weight being proportional. - * - One call encode & hash, both of complexity `O(Z)` where `Z` is tx-len. - * - One encode & hash, both of complexity `O(S)`. - * - Up to one binary search and insert (`O(logS + S)`). - * - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. - * - One event. - * - The weight of the `call`. - * - Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit - * taken for its lifetime of `DepositBase + threshold * DepositFactor`. + * See [`Pallet::as_multi`]. **/ asMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], maybeTimepoint: Option | null | Uint8Array | PalletMultisigTimepoint | { height?: any; index?: any } | string, call: Call | IMethod | string | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, Option, Call, SpWeightsWeightV2Weight]>; /** - * Immediately dispatch a multi-signature call using a single approval from the caller. - * - * The dispatch origin for this call must be _Signed_. - * - * - `other_signatories`: The accounts (other than the sender) who are part of the - * multi-signature, but do not participate in the approval process. - * - `call`: The call to be executed. - * - * Result is equivalent to the dispatched result. - * - * ## Complexity - * O(Z + C) where Z is the length of the call and C its execution weight. + * See [`Pallet::as_multi_threshold_1`]. **/ asMultiThreshold1: AugmentedSubmittable<(otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [Vec, Call]>; /** - * Cancel a pre-existing, on-going multisig transaction. Any deposit reserved previously - * for this operation will be unreserved on success. - * - * The dispatch origin for this call must be _Signed_. - * - * - `threshold`: The total number of approvals for this dispatch before it is executed. - * - `other_signatories`: The accounts (other than the sender) who can approve this - * dispatch. May not be empty. - * - `timepoint`: The timepoint (block number and transaction index) of the first approval - * transaction for this dispatch. - * - `call_hash`: The hash of the call to be executed. - * - * ## Complexity - * - `O(S)`. - * - Up to one balance-reserve or unreserve operation. - * - One passthrough operation, one insert, both `O(S)` where `S` is the number of - * signatories. `S` is capped by `MaxSignatories`, with weight being proportional. - * - One encode & hash, both of complexity `O(S)`. - * - One event. - * - I/O: 1 read `O(S)`, one remove. - * - Storage: removes one item. + * See [`Pallet::cancel_as_multi`]. **/ cancelAsMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], timepoint: PalletMultisigTimepoint | { height?: any; index?: any } | string | Uint8Array, callHash: U8aFixed | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, PalletMultisigTimepoint, U8aFixed]>; }; + parachainInfo: { + }; parachainStaking: { /** - * Revert the previously requested exit of the network of a collator - * candidate. On success, adds back the candidate to the TopCandidates - * and updates the collators. - * - * Requires the candidate to previously have called - * `init_leave_candidates`. - * - * Emits `CollatorCanceledExit`. + * See [`Pallet::cancel_leave_candidates`]. **/ cancelLeaveCandidates: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Stake less funds for a collator candidate. - * - * If the new amount of staked fund is not large enough, the account - * could be removed from the set of collator candidates and not be - * considered for authoring the next blocks. - * - * This operation affects the pallet's total stake amount. - * - * The unstaked funds are not released immediately to the account, but - * they will be available after `StakeDuration` blocks. - * - * The resulting total amount of funds staked must be within the - * allowed range as set in the pallet's configuration. - * - * Emits `CollatorStakedLess`. + * See [`Pallet::candidate_stake_less`]. **/ candidateStakeLess: AugmentedSubmittable<(less: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; /** - * Stake more funds for a collator candidate. - * - * If not in the set of candidates, staking enough funds allows the - * account to be added to it. The larger amount of funds, the higher - * chances to be selected as the author of the next block. - * - * This operation affects the pallet's total stake amount. - * - * The resulting total amount of funds staked must be within the - * allowed range as set in the pallet's configuration. - * - * Emits `CollatorStakedMore`. + * See [`Pallet::candidate_stake_more`]. **/ candidateStakeMore: AugmentedSubmittable<(more: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; /** - * Claim block authoring rewards for the target address. - * - * Requires `Rewards` to be set beforehand, which can by triggered by - * any of the following options - * * Calling increment_{collator, delegator}_rewards (active) - * * Altering your stake (active) - * * Leaving the network as a collator (active) - * * Revoking a delegation as a delegator (active) - * * Being a delegator whose collator left the network, altered their - * stake or incremented rewards (passive) - * - * The dispatch origin can be any signed one, e.g., anyone can claim - * for anyone. - * - * Emits `Rewarded`. + * See [`Pallet::claim_rewards`]. **/ claimRewards: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Reduce the stake for delegating a collator candidate. - * - * If the new amount of staked fund is not large enough, the collator - * could be removed from the set of collator candidates and not be - * considered for authoring the next blocks. - * - * The unstaked funds are not release immediately to the account, but - * they will be available after `StakeDuration` blocks. - * - * The remaining staked funds must still be larger than the minimum - * required by this pallet to maintain the status of delegator. - * - * The resulting total amount of funds staked must be within the - * allowed range as set in the pallet's configuration. - * - * Emits `DelegatorStakedLess`. + * See [`Pallet::delegator_stake_less`]. **/ delegatorStakeLess: AugmentedSubmittable<(less: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; /** - * Increase the stake for delegating a collator candidate. - * - * If not in the set of candidates, staking enough funds allows the - * collator candidate to be added to it. - * - * Emits `DelegatorStakedMore`. + * See [`Pallet::delegator_stake_more`]. **/ delegatorStakeMore: AugmentedSubmittable<(more: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; /** - * Execute the network exit of a candidate who requested to leave at - * least `ExitQueueDelay` rounds ago. Prepares unstaking of the - * candidates and their delegators stake which can be unfreezed via - * `unlock_unstaked` after waiting at least `StakeDuration` many - * blocks. - * - * Requires the candidate to previously have called - * `init_leave_candidates`. - * - * The exit request can be reversed by calling - * `cancel_leave_candidates`. - * - * NOTE: Iterates over CandidatePool for each candidate over their - * delegators to set rewards. Needs to be improved when scaling up - * `MaxTopCandidates`. - * - * Emits `CollatorLeft`. + * See [`Pallet::execute_leave_candidates`]. **/ executeLeaveCandidates: AugmentedSubmittable<(collator: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; /** - * Executes the annual reduction of the reward rates for collators and - * delegators. - * - * Moreover, sets rewards for all collators and delegators - * before adjusting the inflation. - * - * The dispatch origin can be any signed one because we bail if called - * too early. - * - * Emits `RoundInflationSet`. + * See [`Pallet::execute_scheduled_reward_change`]. **/ executeScheduledRewardChange: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Forces the start of the new round in the next block. - * - * The new round will be enforced via >::should_end_session. - * - * The dispatch origin must be Root. + * See [`Pallet::force_new_round`]. **/ forceNewRound: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Forcedly removes a collator candidate from the TopCandidates and - * clears all associated storage for the candidate and their - * delegators. - * - * Prepares unstaking of the candidates and their delegators stake - * which can be unfreezed via `unlock_unstaked` after waiting at - * least `StakeDuration` many blocks. Also increments rewards for the - * collator and their delegators. - * - * Increments rewards of candidate and their delegators. - * - * Emits `CandidateRemoved`. + * See [`Pallet::force_remove_candidate`]. **/ forceRemoveCandidate: AugmentedSubmittable<(collator: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; /** - * Actively increment the rewards of a collator. - * - * The same effect is triggered by changing the stake or leaving the - * network. - * - * The dispatch origin must be a collator. + * See [`Pallet::increment_collator_rewards`]. **/ incrementCollatorRewards: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Actively increment the rewards of a delegator. - * - * The same effect is triggered by changing the stake or revoking - * delegations. - * - * The dispatch origin must be a delegator. + * See [`Pallet::increment_delegator_rewards`]. **/ incrementDelegatorRewards: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Request to leave the set of collator candidates. - * - * On success, the account is immediately removed from the candidate - * pool to prevent selection as a collator in future validation rounds, - * but unstaking of the funds is executed with a delay of - * `StakeDuration` blocks. - * - * The exit request can be reversed by calling - * `cancel_leave_candidates`. - * - * This operation affects the pallet's total stake amount. It is - * updated even though the funds of the candidate who signaled to leave - * are still locked for `ExitDelay` + `StakeDuration` more blocks. - * - * NOTE 1: Upon starting a new session_i in `new_session`, the current - * top candidates are selected to be block authors for session_i+1. Any - * changes to the top candidates afterwards do not effect the set of - * authors for session_i+1. - * Thus, we have to make sure none of these collators can - * leave before session_i+1 ends by delaying their - * exit for `ExitDelay` many blocks. - * - * NOTE 2: We do not increment rewards in this extrinsic as the - * candidate could still author blocks, and thus be eligible to receive - * rewards, until the end of the next session. - * - * Emits `CollatorScheduledExit`. + * See [`Pallet::init_leave_candidates`]. **/ initLeaveCandidates: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Join the set of collator candidates. - * - * In the next blocks, if the collator candidate has enough funds - * staked to be included in any of the top `MaxSelectedCandidates` - * positions, it will be included in the set of potential authors that - * will be selected by the stake-weighted random selection function. - * - * The staked funds of the new collator candidate are added to the - * total stake of the system. - * - * The total amount of funds staked must be within the allowed range as - * set in the pallet's configuration. - * - * The dispatch origin must not be already part of the collator - * candidates nor of the delegators set. - * - * Emits `JoinedCollatorCandidates`. + * See [`Pallet::join_candidates`]. **/ joinCandidates: AugmentedSubmittable<(stake: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; /** - * Join the set of delegators by delegating to a collator candidate. - * - * The account that wants to delegate cannot be part of the collator - * candidates set as well. - * - * The caller must _not_ have a delegation. If that is the case, they - * are required to first remove the delegation. - * - * The amount staked must be larger than the minimum required to become - * a delegator as set in the pallet's configuration. - * - * As only `MaxDelegatorsPerCollator` are allowed to delegate a given - * collator, the amount staked must be larger than the lowest one in - * the current set of delegator for the operation to be meaningful. - * - * The collator's total stake as well as the pallet's total stake are - * increased accordingly. - * - * Emits `Delegation`. - * Emits `DelegationReplaced` if the candidate has - * `MaxDelegatorsPerCollator` many delegations but this delegator - * staked more than one of the other delegators of this candidate. + * See [`Pallet::join_delegators`]. **/ joinDelegators: AugmentedSubmittable<(collator: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u128]>; /** - * Leave the set of delegators and, by implication, revoke the ongoing - * delegation. - * - * All staked funds are not unlocked immediately, but they are added to - * the queue of pending unstaking, and will effectively be released - * after `StakeDuration` blocks from the moment the delegator leaves. - * - * This operation reduces the total stake of the pallet as well as the - * stakes of all collators that were delegated, potentially affecting - * their chances to be included in the set of candidates in the next - * rounds. - * - * Automatically increments the accumulated rewards of the origin of - * the current delegation. - * - * Emits `DelegatorLeft`. + * See [`Pallet::leave_delegators`]. **/ leaveDelegators: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Set the number of blocks each validation round lasts. - * - * If the new value is less than the length of the current round, the - * system will immediately move to the next round in the next block. - * - * The new value must be higher than the minimum allowed as set in the - * pallet's configuration. - * - * The dispatch origin must be Root. - * - * Emits `BlocksPerRoundSet`. + * See [`Pallet::set_blocks_per_round`]. **/ setBlocksPerRound: AugmentedSubmittable<(updated: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Set the annual inflation rate to derive per-round inflation. - * - * The inflation details are considered valid if the annual reward rate - * is approximately the per-block reward rate multiplied by the - * estimated* total number of blocks per year. - * - * The estimated average block time is twelve seconds. - * - * NOTE: Iterates over CandidatePool and for each candidate over their - * delegators to update their rewards before the reward rates change. - * Needs to be improved when scaling up `MaxTopCandidates`. - * - * The dispatch origin must be Root. - * - * Emits `RoundInflationSet`. + * See [`Pallet::set_inflation`]. **/ setInflation: AugmentedSubmittable<(collatorMaxRatePercentage: Perquintill | AnyNumber | Uint8Array, collatorAnnualRewardRatePercentage: Perquintill | AnyNumber | Uint8Array, delegatorMaxRatePercentage: Perquintill | AnyNumber | Uint8Array, delegatorAnnualRewardRatePercentage: Perquintill | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Perquintill, Perquintill, Perquintill, Perquintill]>; /** - * Set the maximal amount a collator can stake. Existing stakes are not - * changed. - * - * The dispatch origin must be Root. - * - * Emits `MaxCandidateStakeChanged`. + * See [`Pallet::set_max_candidate_stake`]. **/ setMaxCandidateStake: AugmentedSubmittable<(updated: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; /** - * Set the maximum number of collator candidates that can be selected - * at the beginning of each validation round. - * - * Changes are not applied until the start of the next round. - * - * The new value must be higher than the minimum allowed as set in the - * pallet's configuration. - * - * The dispatch origin must be Root. - * - * Emits `MaxSelectedCandidatesSet`. + * See [`Pallet::set_max_selected_candidates`]. **/ setMaxSelectedCandidates: AugmentedSubmittable<(updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Unlock all previously staked funds that are now available for - * unlocking by the origin account after `StakeDuration` blocks have - * elapsed. - * - * Weight: O(U) where U is the number of locked unstaking requests - * bounded by `MaxUnstakeRequests`. - * - Reads: [Origin Account], Unstaking, Freezes - * - Writes: Unstaking, Freezes - * - Kills: Unstaking & Freezes if no balance is locked anymore - * # + * See [`Pallet::unlock_unstaked`]. **/ unlockUnstaked: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; }; parachainSystem: { /** - * Authorize an upgrade to a given `code_hash` for the runtime. The runtime can be supplied - * later. - * - * The `check_version` parameter sets a boolean flag for whether or not the runtime's spec - * version and name should be verified on upgrade. Since the authorization only has a hash, - * it cannot actually perform the verification. - * - * This call requires Root origin. + * See [`Pallet::authorize_upgrade`]. **/ authorizeUpgrade: AugmentedSubmittable<(codeHash: H256 | string | Uint8Array, checkVersion: bool | boolean | Uint8Array) => SubmittableExtrinsic, [H256, bool]>; /** - * Provide the preimage (runtime binary) `code` for an upgrade that has been authorized. - * - * If the authorization required a version check, this call will ensure the spec name - * remains unchanged and that the spec version has increased. - * - * Note that this function will not apply the new `code`, but only attempt to schedule the - * upgrade with the Relay Chain. - * - * All origins are allowed. + * See [`Pallet::enact_authorized_upgrade`]. **/ enactAuthorizedUpgrade: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Set the current validation data. - * - * This should be invoked exactly once per block. It will panic at the finalization - * phase if the call was not invoked. - * - * The dispatch origin for this call must be `Inherent` - * - * As a side effect, this function upgrades the current validation function - * if the appropriate time has come. + * See [`Pallet::set_validation_data`]. **/ setValidationData: AugmentedSubmittable<(data: CumulusPrimitivesParachainInherentParachainInherentData | { validationData?: any; relayChainState?: any; downwardMessages?: any; horizontalMessages?: any } | string | Uint8Array) => SubmittableExtrinsic, [CumulusPrimitivesParachainInherentParachainInherentData]>; + /** + * See [`Pallet::sudo_send_upward_message`]. + **/ sudoSendUpwardMessage: AugmentedSubmittable<(message: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; }; polkadotXcm: { /** - * Execute an XCM message from a local, signed, origin. - * - * An event is deposited indicating whether `msg` could be executed completely or only - * partially. - * - * No more than `max_weight` will be used in its attempted execution. If this is less than the - * maximum amount of weight that the message could take to be executed, then no execution - * attempt will be made. - * - * NOTE: A successful return to this does *not* imply that the `msg` was executed successfully - * to completion; only that *some* of it was executed. + * See [`Pallet::execute`]. **/ execute: AugmentedSubmittable<(message: XcmVersionedXcm | { V2: any } | { V3: any } | string | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedXcm, SpWeightsWeightV2Weight]>; /** - * Set a safe XCM version (the version that XCM should be encoded with if the most recent - * version a destination can accept is unknown). - * - * - `origin`: Must be an origin specified by AdminOrigin. - * - `maybe_xcm_version`: The default XCM encoding version, or `None` to disable. + * See [`Pallet::force_default_xcm_version`]. **/ forceDefaultXcmVersion: AugmentedSubmittable<(maybeXcmVersion: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [Option]>; /** - * Ask a location to notify us regarding their XCM version and any changes to it. - * - * - `origin`: Must be an origin specified by AdminOrigin. - * - `location`: The location to which we should subscribe for XCM version notifications. + * See [`Pallet::force_subscribe_version_notify`]. **/ forceSubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation]>; /** - * Set or unset the global suspension state of the XCM executor. - * - * - `origin`: Must be an origin specified by AdminOrigin. - * - `suspended`: `true` to suspend, `false` to resume. + * See [`Pallet::force_suspension`]. **/ forceSuspension: AugmentedSubmittable<(suspended: bool | boolean | Uint8Array) => SubmittableExtrinsic, [bool]>; /** - * Require that a particular destination should no longer notify us regarding any XCM - * version changes. - * - * - `origin`: Must be an origin specified by AdminOrigin. - * - `location`: The location to which we are currently subscribed for XCM version - * notifications which we no longer desire. + * See [`Pallet::force_unsubscribe_version_notify`]. **/ forceUnsubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation]>; /** - * Extoll that a particular destination can be communicated with through a particular - * version of XCM. - * - * - `origin`: Must be an origin specified by AdminOrigin. - * - `location`: The destination that is being described. - * - `xcm_version`: The latest version of XCM that `location` supports. - **/ - forceXcmVersion: AugmentedSubmittable<(location: XcmV3MultiLocation | { parents?: any; interior?: any } | string | Uint8Array, xcmVersion: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmV3MultiLocation, u32]>; - /** - * Transfer some assets from the local chain to the sovereign account of a destination - * chain and forward a notification XCM. - * - * Fee payment on the destination side is made from the asset in the `assets` vector of - * index `fee_asset_item`, up to enough to pay for `weight_limit` of weight. If more weight - * is needed than `weight_limit`, then the operation will fail and the assets send may be - * at risk. - * - * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. - * - `dest`: Destination context for the assets. Will typically be `X2(Parent, Parachain(..))` to send - * from parachain to parachain, or `X1(Parachain(..))` to send from relay to parachain. - * - `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will generally be - * an `AccountId32` value. - * - `assets`: The assets to be withdrawn. This should include the assets used to pay the fee on the - * `dest` side. - * - `fee_asset_item`: The index into `assets` of the item which should be used to pay - * fees. - * - `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. + * See [`Pallet::force_xcm_version`]. + **/ + forceXcmVersion: AugmentedSubmittable<(location: XcmV3MultiLocation | { parents?: any; interior?: any } | string | Uint8Array, version: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmV3MultiLocation, u32]>; + /** + * See [`Pallet::limited_reserve_transfer_assets`]. **/ limitedReserveTransferAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array, weightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV3WeightLimit]>; /** - * Teleport some assets from the local chain to some destination chain. - * - * Fee payment on the destination side is made from the asset in the `assets` vector of - * index `fee_asset_item`, up to enough to pay for `weight_limit` of weight. If more weight - * is needed than `weight_limit`, then the operation will fail and the assets send may be - * at risk. - * - * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. - * - `dest`: Destination context for the assets. Will typically be `X2(Parent, Parachain(..))` to send - * from parachain to parachain, or `X1(Parachain(..))` to send from relay to parachain. - * - `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will generally be - * an `AccountId32` value. - * - `assets`: The assets to be withdrawn. The first item should be the currency used to to pay the fee on the - * `dest` side. May not be empty. - * - `fee_asset_item`: The index into `assets` of the item which should be used to pay - * fees. - * - `weight_limit`: The remote-side weight limit, if any, for the XCM fee purchase. + * See [`Pallet::limited_teleport_assets`]. **/ limitedTeleportAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array, weightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV3WeightLimit]>; /** - * Transfer some assets from the local chain to the sovereign account of a destination - * chain and forward a notification XCM. - * - * Fee payment on the destination side is made from the asset in the `assets` vector of - * index `fee_asset_item`. The weight limit for fees is not provided and thus is unlimited, - * with all fees taken as needed from the asset. - * - * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. - * - `dest`: Destination context for the assets. Will typically be `X2(Parent, Parachain(..))` to send - * from parachain to parachain, or `X1(Parachain(..))` to send from relay to parachain. - * - `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will generally be - * an `AccountId32` value. - * - `assets`: The assets to be withdrawn. This should include the assets used to pay the fee on the - * `dest` side. - * - `fee_asset_item`: The index into `assets` of the item which should be used to pay - * fees. + * See [`Pallet::reserve_transfer_assets`]. **/ reserveTransferAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32]>; + /** + * See [`Pallet::send`]. + **/ send: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, message: XcmVersionedXcm | { V2: any } | { V3: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedXcm]>; /** - * Teleport some assets from the local chain to some destination chain. - * - * Fee payment on the destination side is made from the asset in the `assets` vector of - * index `fee_asset_item`. The weight limit for fees is not provided and thus is unlimited, - * with all fees taken as needed from the asset. - * - * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. - * - `dest`: Destination context for the assets. Will typically be `X2(Parent, Parachain(..))` to send - * from parachain to parachain, or `X1(Parachain(..))` to send from relay to parachain. - * - `beneficiary`: A beneficiary location for the assets in the context of `dest`. Will generally be - * an `AccountId32` value. - * - `assets`: The assets to be withdrawn. The first item should be the currency used to to pay the fee on the - * `dest` side. May not be empty. - * - `fee_asset_item`: The index into `assets` of the item which should be used to pay - * fees. + * See [`Pallet::teleport_assets`]. **/ teleportAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32]>; }; preimage: { /** - * Register a preimage on-chain. - * - * If the preimage was previously requested, no fees or deposits are taken for providing - * the preimage. Otherwise, a deposit is taken proportional to the size of the preimage. + * See [`Pallet::note_preimage`]. **/ notePreimage: AugmentedSubmittable<(bytes: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Request a preimage be uploaded to the chain without paying any fees or deposits. - * - * If the preimage requests has already been provided on-chain, we unreserve any deposit - * a user may have paid, and take the control of the preimage out of their hands. + * See [`Pallet::request_preimage`]. **/ requestPreimage: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Clear an unrequested preimage from the runtime storage. - * - * If `len` is provided, then it will be a much cheaper operation. - * - * - `hash`: The hash of the preimage to be removed from the store. - * - `len`: The length of the preimage of `hash`. + * See [`Pallet::unnote_preimage`]. **/ unnotePreimage: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Clear a previously made request for a preimage. - * - * NOTE: THIS MUST NOT BE CALLED ON `hash` MORE TIMES THAN `request_preimage`. + * See [`Pallet::unrequest_preimage`]. **/ unrequestPreimage: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; }; proxy: { /** - * Register a proxy account for the sender that is able to make calls on its behalf. - * - * The dispatch origin for this call must be _Signed_. - * - * Parameters: - * - `proxy`: The account that the `caller` would like to make a proxy. - * - `proxy_type`: The permissions allowed for this proxy account. - * - `delay`: The announcement period required of the initial proxy. Will generally be - * zero. + * See [`Pallet::add_proxy`]. **/ addProxy: AugmentedSubmittable<(delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, proxyType: SpiritnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming' | number | Uint8Array, delay: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, SpiritnetRuntimeProxyType, u64]>; /** - * Publish the hash of a proxy-call that will be made in the future. - * - * This must be called some number of blocks before the corresponding `proxy` is attempted - * if the delay associated with the proxy relationship is greater than zero. - * - * No more than `MaxPending` announcements may be made at any one time. - * - * This will take a deposit of `AnnouncementDepositFactor` as well as - * `AnnouncementDepositBase` if there are no other pending announcements. - * - * The dispatch origin for this call must be _Signed_ and a proxy of `real`. - * - * Parameters: - * - `real`: The account that the proxy will make a call on behalf of. - * - `call_hash`: The hash of the call to be made by the `real` account. + * See [`Pallet::announce`]. **/ announce: AugmentedSubmittable<(real: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, callHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, H256]>; /** - * Spawn a fresh new account that is guaranteed to be otherwise inaccessible, and - * initialize it with a proxy of `proxy_type` for `origin` sender. - * - * Requires a `Signed` origin. - * - * - `proxy_type`: The type of the proxy that the sender will be registered as over the - * new account. This will almost always be the most permissive `ProxyType` possible to - * allow for maximum flexibility. - * - `index`: A disambiguation index, in case this is called multiple times in the same - * transaction (e.g. with `utility::batch`). Unless you're using `batch` you probably just - * want to use `0`. - * - `delay`: The announcement period required of the initial proxy. Will generally be - * zero. - * - * Fails with `Duplicate` if this has already been called in this transaction, from the - * same sender, with the same parameters. - * - * Fails if there are insufficient funds to pay for deposit. + * See [`Pallet::create_pure`]. **/ createPure: AugmentedSubmittable<(proxyType: SpiritnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming' | number | Uint8Array, delay: u64 | AnyNumber | Uint8Array, index: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [SpiritnetRuntimeProxyType, u64, u16]>; /** - * Removes a previously spawned pure proxy. - * - * WARNING: **All access to this account will be lost.** Any funds held in it will be - * inaccessible. - * - * Requires a `Signed` origin, and the sender account must have been created by a call to - * `pure` with corresponding parameters. - * - * - `spawner`: The account that originally called `pure` to create this account. - * - `index`: The disambiguation index originally passed to `pure`. Probably `0`. - * - `proxy_type`: The proxy type originally passed to `pure`. - * - `height`: The height of the chain when the call to `pure` was processed. - * - `ext_index`: The extrinsic index in which the call to `pure` was processed. - * - * Fails with `NoPermission` in case the caller is not a previously created pure - * account whose `pure` call has corresponding parameters. + * See [`Pallet::kill_pure`]. **/ killPure: AugmentedSubmittable<(spawner: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, proxyType: SpiritnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming' | number | Uint8Array, index: u16 | AnyNumber | Uint8Array, height: Compact | AnyNumber | Uint8Array, extIndex: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, SpiritnetRuntimeProxyType, u16, Compact, Compact]>; /** - * Dispatch the given `call` from an account that the sender is authorised for through - * `add_proxy`. - * - * The dispatch origin for this call must be _Signed_. - * - * Parameters: - * - `real`: The account that the proxy will make a call on behalf of. - * - `force_proxy_type`: Specify the exact proxy type to be used and checked for this call. - * - `call`: The call to be made by the `real` account. + * See [`Pallet::proxy`]. **/ proxy: AugmentedSubmittable<(real: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, forceProxyType: Option | null | Uint8Array | SpiritnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming' | number, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Option, Call]>; /** - * Dispatch the given `call` from an account that the sender is authorized for through - * `add_proxy`. - * - * Removes any corresponding announcement(s). - * - * The dispatch origin for this call must be _Signed_. - * - * Parameters: - * - `real`: The account that the proxy will make a call on behalf of. - * - `force_proxy_type`: Specify the exact proxy type to be used and checked for this call. - * - `call`: The call to be made by the `real` account. + * See [`Pallet::proxy_announced`]. **/ proxyAnnounced: AugmentedSubmittable<(delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, real: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, forceProxyType: Option | null | Uint8Array | SpiritnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming' | number, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress, Option, Call]>; /** - * Remove the given announcement of a delegate. - * - * May be called by a target (proxied) account to remove a call that one of their delegates - * (`delegate`) has announced they want to execute. The deposit is returned. - * - * The dispatch origin for this call must be _Signed_. - * - * Parameters: - * - `delegate`: The account that previously announced the call. - * - `call_hash`: The hash of the call to be made. + * See [`Pallet::reject_announcement`]. **/ rejectAnnouncement: AugmentedSubmittable<(delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, callHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, H256]>; /** - * Remove a given announcement. - * - * May be called by a proxy account to remove a call they previously announced and return - * the deposit. - * - * The dispatch origin for this call must be _Signed_. - * - * Parameters: - * - `real`: The account that the proxy will make a call on behalf of. - * - `call_hash`: The hash of the call to be made by the `real` account. + * See [`Pallet::remove_announcement`]. **/ removeAnnouncement: AugmentedSubmittable<(real: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, callHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, H256]>; /** - * Unregister all proxy accounts for the sender. - * - * The dispatch origin for this call must be _Signed_. - * - * WARNING: This may be called on accounts created by `pure`, however if done, then - * the unreserved fees will be inaccessible. **All access to this account will be lost.** + * See [`Pallet::remove_proxies`]. **/ removeProxies: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Unregister a proxy account for the sender. - * - * The dispatch origin for this call must be _Signed_. - * - * Parameters: - * - `proxy`: The account that the `caller` would like to remove as a proxy. - * - `proxy_type`: The permissions currently enabled for the removed proxy account. + * See [`Pallet::remove_proxy`]. **/ removeProxy: AugmentedSubmittable<(delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, proxyType: SpiritnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming' | number | Uint8Array, delay: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, SpiritnetRuntimeProxyType, u64]>; }; publicCredentials: { /** - * Register a new public credential on chain. - * - * This function fails if a credential with the same identifier already - * exists for the specified subject. - * - * Emits `CredentialStored`. + * See [`Pallet::add`]. **/ add: AugmentedSubmittable<(credential: PublicCredentialsCredentialsCredential | { ctypeHash?: any; subject?: any; claims?: any; authorization?: any } | string | Uint8Array) => SubmittableExtrinsic, [PublicCredentialsCredentialsCredential]>; /** - * Changes the deposit owner. - * - * The balance that is reserved by the current deposit owner will be - * freed and balance of the new deposit owner will get reserved. - * - * The subject of the call must be the owner of the credential. - * The sender of the call will be the new deposit owner. + * See [`Pallet::change_deposit_owner`]. **/ changeDepositOwner: AugmentedSubmittable<(credentialId: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Removes the information pertaining a public credential from the - * chain and returns the deposit to its payer. - * - * The removal of the credential does not delete it entirely from the - * blockchain history, but only its link *from* the blockchain state - * *to* the blockchain history is removed. - * - * Clients parsing public credentials should interpret - * the lack of such a link as the fact that the credential has been - * removed by its attester some time in the past. - * - * This function fails if a credential already exists for the specified - * subject. - * - * The dispatch origin must be the owner of the deposit, hence not the - * credential's attester. - * - * Emits `CredentialRemoved`. + * See [`Pallet::reclaim_deposit`]. **/ reclaimDeposit: AugmentedSubmittable<(credentialId: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Removes the information pertaining a public credential from the - * chain. - * - * The removal of the credential does not delete it entirely from the - * blockchain history, but only its link *from* the blockchain state - * *to* the blockchain history is removed. - * - * Clients parsing public credentials should interpret - * the lack of such a link as the fact that the credential has been - * removed by its attester some time in the past. - * - * This function fails if a credential already exists for the specified - * subject. - * - * The dispatch origin must be authorized to remove the credential. - * - * Emits `CredentialRemoved`. + * See [`Pallet::remove`]. **/ remove: AugmentedSubmittable<(credentialId: H256 | string | Uint8Array, authorization: Option | null | Uint8Array | RuntimeCommonAuthorizationPalletAuthorize | { Delegation: any } | string) => SubmittableExtrinsic, [H256, Option]>; /** - * Revokes a public credential. - * - * If a credential was already revoked, this function does not fail but - * simply results in a noop. - * - * The dispatch origin must be authorized to revoke the credential. - * - * Emits `CredentialRevoked`. + * See [`Pallet::revoke`]. **/ revoke: AugmentedSubmittable<(credentialId: H256 | string | Uint8Array, authorization: Option | null | Uint8Array | RuntimeCommonAuthorizationPalletAuthorize | { Delegation: any } | string) => SubmittableExtrinsic, [H256, Option]>; /** - * Unrevokes a public credential. - * - * If a credential was not revoked, this function does not fail but - * simply results in a noop. - * - * The dispatch origin must be authorized to unrevoke the - * credential. - * - * Emits `CredentialUnrevoked`. + * See [`Pallet::unrevoke`]. **/ unrevoke: AugmentedSubmittable<(credentialId: H256 | string | Uint8Array, authorization: Option | null | Uint8Array | RuntimeCommonAuthorizationPalletAuthorize | { Delegation: any } | string) => SubmittableExtrinsic, [H256, Option]>; /** - * Updates the deposit amount to the current deposit rate. - * - * The sender must be the deposit owner. + * See [`Pallet::update_deposit`]. **/ updateDeposit: AugmentedSubmittable<(credentialId: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; }; scheduler: { /** - * Cancel an anonymously scheduled task. + * See [`Pallet::cancel`]. **/ cancel: AugmentedSubmittable<(when: u64 | AnyNumber | Uint8Array, index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64, u32]>; /** - * Cancel a named scheduled task. + * See [`Pallet::cancel_named`]. **/ cancelNamed: AugmentedSubmittable<(id: U8aFixed | string | Uint8Array) => SubmittableExtrinsic, [U8aFixed]>; /** - * Anonymously schedule a task. + * See [`Pallet::schedule`]. **/ schedule: AugmentedSubmittable<(when: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [u64, Option>, u8, Call]>; /** - * Anonymously schedule a task after a delay. + * See [`Pallet::schedule_after`]. **/ scheduleAfter: AugmentedSubmittable<(after: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [u64, Option>, u8, Call]>; /** - * Schedule a named task. + * See [`Pallet::schedule_named`]. **/ scheduleNamed: AugmentedSubmittable<(id: U8aFixed | string | Uint8Array, when: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [U8aFixed, u64, Option>, u8, Call]>; /** - * Schedule a named task after a delay. + * See [`Pallet::schedule_named_after`]. **/ scheduleNamedAfter: AugmentedSubmittable<(id: U8aFixed | string | Uint8Array, after: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [U8aFixed, u64, Option>, u8, Call]>; }; session: { /** - * Removes any session key(s) of the function caller. - * - * This doesn't take effect until the next session. - * - * The dispatch origin of this function must be Signed and the account must be either be - * convertible to a validator ID using the chain's typical addressing system (this usually - * means being a controller account) or directly convertible into a validator ID (which - * usually means being a stash account). - * - * ## Complexity - * - `O(1)` in number of key types. Actual cost depends on the number of length of - * `T::Keys::key_ids()` which is fixed. + * See [`Pallet::purge_keys`]. **/ purgeKeys: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Sets the session key(s) of the function caller to `keys`. - * Allows an account to set its session key prior to becoming a validator. - * This doesn't take effect until the next session. - * - * The dispatch origin of this function must be signed. - * - * ## Complexity - * - `O(1)`. Actual cost depends on the number of length of `T::Keys::key_ids()` which is - * fixed. + * See [`Pallet::set_keys`]. **/ setKeys: AugmentedSubmittable<(keys: SpiritnetRuntimeSessionKeys | { aura?: any } | string | Uint8Array, proof: Bytes | string | Uint8Array) => SubmittableExtrinsic, [SpiritnetRuntimeSessionKeys, Bytes]>; }; system: { /** - * Kill all storage items with a key that starts with the given prefix. - * - * **NOTE:** We rely on the Root origin to provide us the number of subkeys under - * the prefix we are removing to accurately calculate the weight of this function. + * See [`Pallet::kill_prefix`]. **/ killPrefix: AugmentedSubmittable<(prefix: Bytes | string | Uint8Array, subkeys: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Bytes, u32]>; /** - * Kill some items from storage. + * See [`Pallet::kill_storage`]. **/ killStorage: AugmentedSubmittable<(keys: Vec | (Bytes | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Make some on-chain remark. - * - * - `O(1)` + * See [`Pallet::remark`]. **/ remark: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Make some on-chain remark and emit event. + * See [`Pallet::remark_with_event`]. **/ remarkWithEvent: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Set the new runtime code. + * See [`Pallet::set_code`]. **/ setCode: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Set the new runtime code without doing any checks of the given `code`. + * See [`Pallet::set_code_without_checks`]. **/ setCodeWithoutChecks: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Set the number of pages in the WebAssembly environment's heap. + * See [`Pallet::set_heap_pages`]. **/ setHeapPages: AugmentedSubmittable<(pages: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; /** - * Set some items of storage. + * See [`Pallet::set_storage`]. **/ setStorage: AugmentedSubmittable<(items: Vec> | ([Bytes | string | Uint8Array, Bytes | string | Uint8Array])[]) => SubmittableExtrinsic, [Vec>]>; }; technicalCommittee: { /** - * Close a vote that is either approved, disapproved or whose voting period has ended. - * - * May be called by any signed account in order to finish voting and close the proposal. - * - * If called before the end of the voting period it will only close the vote if it is - * has enough votes to be approved or disapproved. - * - * If called after the end of the voting period abstentions are counted as rejections - * unless there is a prime member set and the prime member cast an approval. - * - * If the close operation completes successfully with disapproval, the transaction fee will - * be waived. Otherwise execution of the approved operation will be charged to the caller. - * - * + `proposal_weight_bound`: The maximum amount of weight consumed by executing the closed - * proposal. - * + `length_bound`: The upper bound for the length of the proposal in storage. Checked via - * `storage::read` so it is `size_of::() == 4` larger than the pure length. - * - * ## Complexity - * - `O(B + M + P1 + P2)` where: - * - `B` is `proposal` size in bytes (length-fee-bounded) - * - `M` is members-count (code- and governance-bounded) - * - `P1` is the complexity of `proposal` preimage. - * - `P2` is proposal-count (code-bounded) + * See [`Pallet::close`]. **/ close: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, proposalWeightBound: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact, SpWeightsWeightV2Weight, Compact]>; /** - * Disapprove a proposal, close, and remove it from the system, regardless of its current - * state. - * - * Must be called by the Root origin. - * - * Parameters: - * * `proposal_hash`: The hash of the proposal that should be disapproved. - * - * ## Complexity - * O(P) where P is the number of max proposals + * See [`Pallet::disapprove_proposal`]. **/ disapproveProposal: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Dispatch a proposal from a member using the `Member` origin. - * - * Origin must be a member of the collective. - * - * ## Complexity: - * - `O(B + M + P)` where: - * - `B` is `proposal` size in bytes (length-fee-bounded) - * - `M` members-count (code-bounded) - * - `P` complexity of dispatching `proposal` + * See [`Pallet::execute`]. **/ execute: AugmentedSubmittable<(proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Call, Compact]>; /** - * Add a new proposal to either be voted on or executed directly. - * - * Requires the sender to be member. - * - * `threshold` determines whether `proposal` is executed directly (`threshold < 2`) - * or put up for voting. - * - * ## Complexity - * - `O(B + M + P1)` or `O(B + M + P2)` where: - * - `B` is `proposal` size in bytes (length-fee-bounded) - * - `M` is members-count (code- and governance-bounded) - * - branching is influenced by `threshold` where: - * - `P1` is proposal execution complexity (`threshold < 2`) - * - `P2` is proposals-count (code-bounded) (`threshold >= 2`) + * See [`Pallet::propose`]. **/ propose: AugmentedSubmittable<(threshold: Compact | AnyNumber | Uint8Array, proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Call, Compact]>; /** - * Set the collective's membership. - * - * - `new_members`: The new member list. Be nice to the chain and provide it sorted. - * - `prime`: The prime member whose vote sets the default. - * - `old_count`: The upper bound for the previous number of members in storage. Used for - * weight estimation. - * - * The dispatch of this call must be `SetMembersOrigin`. - * - * NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but - * the weight estimations rely on it to estimate dispatchable weight. - * - * # WARNING: - * - * The `pallet-collective` can also be managed by logic outside of the pallet through the - * implementation of the trait [`ChangeMembers`]. - * Any call to `set_members` must be careful that the member set doesn't get out of sync - * with other logic managing the member set. - * - * ## Complexity: - * - `O(MP + N)` where: - * - `M` old-members-count (code- and governance-bounded) - * - `N` new-members-count (code- and governance-bounded) - * - `P` proposals-count (code-bounded) + * See [`Pallet::set_members`]. **/ setMembers: AugmentedSubmittable<(newMembers: Vec | (AccountId32 | string | Uint8Array)[], prime: Option | null | Uint8Array | AccountId32 | string, oldCount: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Vec, Option, u32]>; /** - * Add an aye or nay vote for the sender to the given proposal. - * - * Requires the sender to be a member. - * - * Transaction fees will be waived if the member is voting on any particular proposal - * for the first time and the call is successful. Subsequent vote changes will charge a - * fee. - * ## Complexity - * - `O(M)` where `M` is members-count (code- and governance-bounded) + * See [`Pallet::vote`]. **/ vote: AugmentedSubmittable<(proposal: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, approve: bool | boolean | Uint8Array) => SubmittableExtrinsic, [H256, Compact, bool]>; }; technicalMembership: { /** - * Add a member `who` to the set. - * - * May only be called from `T::AddOrigin`. + * See [`Pallet::add_member`]. **/ addMember: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; /** - * Swap out the sending member for some other key `new`. - * - * May only be called from `Signed` origin of a current member. - * - * Prime membership is passed from the origin account to `new`, if extant. + * See [`Pallet::change_key`]. **/ changeKey: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; /** - * Remove the prime member if it exists. - * - * May only be called from `T::PrimeOrigin`. + * See [`Pallet::clear_prime`]. **/ clearPrime: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Remove a member `who` from the set. - * - * May only be called from `T::RemoveOrigin`. + * See [`Pallet::remove_member`]. **/ removeMember: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; /** - * Change the membership to a new set, disregarding the existing membership. Be nice and - * pass `members` pre-sorted. - * - * May only be called from `T::ResetOrigin`. + * See [`Pallet::reset_members`]. **/ resetMembers: AugmentedSubmittable<(members: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Set the prime member. Must be a current member. - * - * May only be called from `T::PrimeOrigin`. + * See [`Pallet::set_prime`]. **/ setPrime: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; /** - * Swap out one member `remove` for another `add`. - * - * May only be called from `T::SwapOrigin`. - * - * Prime membership is *not* passed from `remove` to `add`, if extant. + * See [`Pallet::swap_member`]. **/ swapMember: AugmentedSubmittable<(remove: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, add: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress]>; }; timestamp: { /** - * Set the current time. - * - * This call should be invoked exactly once per block. It will panic at the finalization - * phase, if this call hasn't been invoked by that time. - * - * The timestamp should be greater than the previous one by the amount specified by - * `MinimumPeriod`. - * - * The dispatch origin for this call must be `Inherent`. - * - * ## Complexity - * - `O(1)` (Note that implementations of `OnTimestampSet` must also be `O(1)`) - * - 1 storage read and 1 storage mutation (codec `O(1)`). (because of `DidUpdate::take` in - * `on_finalize`) - * - 1 event handler `on_timestamp_set`. Must be `O(1)`. + * See [`Pallet::set`]. **/ set: AugmentedSubmittable<(now: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; }; tips: { /** - * Close and payout a tip. - * - * The dispatch origin for this call must be _Signed_. - * - * The tip identified by `hash` must have finished its countdown period. - * - * - `hash`: The identity of the open tip for which a tip value is declared. This is formed - * as the hash of the tuple of the original tip `reason` and the beneficiary account ID. - * - * ## Complexity - * - : `O(T)` where `T` is the number of tippers. decoding `Tipper` vec of length `T`. `T` - * is charged as upper bound given by `ContainsLengthBound`. The actual cost depends on - * the implementation of `T::Tippers`. + * See [`Pallet::close_tip`]. **/ closeTip: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Report something `reason` that deserves a tip and claim any eventual the finder's fee. - * - * The dispatch origin for this call must be _Signed_. - * - * Payment: `TipReportDepositBase` will be reserved from the origin account, as well as - * `DataDepositPerByte` for each byte in `reason`. - * - * - `reason`: The reason for, or the thing that deserves, the tip; generally this will be - * a UTF-8-encoded URL. - * - `who`: The account which should be credited for the tip. - * - * Emits `NewTip` if successful. - * - * ## Complexity - * - `O(R)` where `R` length of `reason`. - * - encoding and hashing of 'reason' + * See [`Pallet::report_awesome`]. **/ reportAwesome: AugmentedSubmittable<(reason: Bytes | string | Uint8Array, who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Bytes, MultiAddress]>; /** - * Retract a prior tip-report from `report_awesome`, and cancel the process of tipping. - * - * If successful, the original deposit will be unreserved. - * - * The dispatch origin for this call must be _Signed_ and the tip identified by `hash` - * must have been reported by the signing account through `report_awesome` (and not - * through `tip_new`). - * - * - `hash`: The identity of the open tip for which a tip value is declared. This is formed - * as the hash of the tuple of the original tip `reason` and the beneficiary account ID. - * - * Emits `TipRetracted` if successful. - * - * ## Complexity - * - `O(1)` - * - Depends on the length of `T::Hash` which is fixed. + * See [`Pallet::retract_tip`]. **/ retractTip: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Remove and slash an already-open tip. - * - * May only be called from `T::RejectOrigin`. - * - * As a result, the finder is slashed and the deposits are lost. - * - * Emits `TipSlashed` if successful. - * - * ## Complexity - * - O(1). + * See [`Pallet::slash_tip`]. **/ slashTip: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; /** - * Declare a tip value for an already-open tip. - * - * The dispatch origin for this call must be _Signed_ and the signing account must be a - * member of the `Tippers` set. - * - * - `hash`: The identity of the open tip for which a tip value is declared. This is formed - * as the hash of the tuple of the hash of the original tip `reason` and the beneficiary - * account ID. - * - `tip_value`: The amount of tip that the sender would like to give. The median tip - * value of active tippers will be given to the `who`. - * - * Emits `TipClosing` if the threshold of tippers has been reached and the countdown period - * has started. - * - * ## Complexity - * - `O(T)` where `T` is the number of tippers. decoding `Tipper` vec of length `T`, insert - * tip and check closing, `T` is charged as upper bound given by `ContainsLengthBound`. - * The actual cost depends on the implementation of `T::Tippers`. - * - * Actually weight could be lower as it depends on how many tips are in `OpenTip` but it - * is weighted as if almost full i.e of length `T-1`. + * See [`Pallet::tip`]. **/ tip: AugmentedSubmittable<(hash: H256 | string | Uint8Array, tipValue: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact]>; /** - * Give a tip for something new; no finder's fee will be taken. - * - * The dispatch origin for this call must be _Signed_ and the signing account must be a - * member of the `Tippers` set. - * - * - `reason`: The reason for, or the thing that deserves, the tip; generally this will be - * a UTF-8-encoded URL. - * - `who`: The account which should be credited for the tip. - * - `tip_value`: The amount of tip that the sender would like to give. The median tip - * value of active tippers will be given to the `who`. - * - * Emits `NewTip` if successful. - * - * ## Complexity - * - `O(R + T)` where `R` length of `reason`, `T` is the number of tippers. - * - `O(T)`: decoding `Tipper` vec of length `T`. `T` is charged as upper bound given by - * `ContainsLengthBound`. The actual cost depends on the implementation of - * `T::Tippers`. - * - `O(R)`: hashing and encoding of reason of length `R` + * See [`Pallet::tip_new`]. **/ tipNew: AugmentedSubmittable<(reason: Bytes | string | Uint8Array, who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, tipValue: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Bytes, MultiAddress, Compact]>; }; tipsMembership: { /** - * Add a member `who` to the set. - * - * May only be called from `T::AddOrigin`. + * See [`Pallet::add_member`]. **/ addMember: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; /** - * Swap out the sending member for some other key `new`. - * - * May only be called from `Signed` origin of a current member. - * - * Prime membership is passed from the origin account to `new`, if extant. + * See [`Pallet::change_key`]. **/ changeKey: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; /** - * Remove the prime member if it exists. - * - * May only be called from `T::PrimeOrigin`. + * See [`Pallet::clear_prime`]. **/ clearPrime: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Remove a member `who` from the set. - * - * May only be called from `T::RemoveOrigin`. + * See [`Pallet::remove_member`]. **/ removeMember: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; /** - * Change the membership to a new set, disregarding the existing membership. Be nice and - * pass `members` pre-sorted. - * - * May only be called from `T::ResetOrigin`. + * See [`Pallet::reset_members`]. **/ resetMembers: AugmentedSubmittable<(members: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Set the prime member. Must be a current member. - * - * May only be called from `T::PrimeOrigin`. + * See [`Pallet::set_prime`]. **/ setPrime: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; /** - * Swap out one member `remove` for another `add`. - * - * May only be called from `T::SwapOrigin`. - * - * Prime membership is *not* passed from `remove` to `add`, if extant. + * See [`Pallet::swap_member`]. **/ swapMember: AugmentedSubmittable<(remove: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, add: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress]>; }; treasury: { /** - * Approve a proposal. At a later time, the proposal will be allocated to the beneficiary - * and the original deposit will be returned. - * - * May only be called from `T::ApproveOrigin`. - * - * ## Complexity - * - O(1). + * See [`Pallet::approve_proposal`]. **/ approveProposal: AugmentedSubmittable<(proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** - * Put forward a suggestion for spending. A deposit proportional to the value - * is reserved and slashed if the proposal is rejected. It is returned once the - * proposal is awarded. - * - * ## Complexity - * - O(1) + * See [`Pallet::propose_spend`]. **/ proposeSpend: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array, beneficiary: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; /** - * Reject a proposed spend. The original deposit will be slashed. - * - * May only be called from `T::RejectOrigin`. - * - * ## Complexity - * - O(1) + * See [`Pallet::reject_proposal`]. **/ rejectProposal: AugmentedSubmittable<(proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** - * Force a previously approved proposal to be removed from the approval queue. - * The original deposit will no longer be returned. - * - * May only be called from `T::RejectOrigin`. - * - `proposal_id`: The index of a proposal - * - * ## Complexity - * - O(A) where `A` is the number of approvals - * - * Errors: - * - `ProposalNotApproved`: The `proposal_id` supplied was not found in the approval queue, - * i.e., the proposal has not been approved. This could also mean the proposal does not - * exist altogether, thus there is no way it would have been approved in the first place. + * See [`Pallet::remove_approval`]. **/ removeApproval: AugmentedSubmittable<(proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; /** - * Propose and approve a spend of treasury funds. - * - * - `origin`: Must be `SpendOrigin` with the `Success` value being at least `amount`. - * - `amount`: The amount to be transferred from the treasury to the `beneficiary`. - * - `beneficiary`: The destination account for the transfer. - * - * NOTE: For record-keeping purposes, the proposer is deemed to be equivalent to the - * beneficiary. + * See [`Pallet::spend`]. **/ spend: AugmentedSubmittable<(amount: Compact | AnyNumber | Uint8Array, beneficiary: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; }; utility: { /** - * Send a call through an indexed pseudonym of the sender. - * - * Filter from origin are passed along. The call will be dispatched with an origin which - * use the same filter as the origin of this call. - * - * NOTE: If you need to ensure that any account-based filtering is not honored (i.e. - * because you expect `proxy` to have been used prior in the call stack and you do not want - * the call restrictions to apply to any sub-accounts), then use `as_multi_threshold_1` - * in the Multisig pallet instead. - * - * NOTE: Prior to version *12, this was called `as_limited_sub`. - * - * The dispatch origin for this call must be _Signed_. + * See [`Pallet::as_derivative`]. **/ asDerivative: AugmentedSubmittable<(index: u16 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [u16, Call]>; /** - * Send a batch of dispatch calls. - * - * May be called from any origin except `None`. - * - * - `calls`: The calls to be dispatched from the same origin. The number of call must not - * exceed the constant: `batched_calls_limit` (available in constant metadata). - * - * If origin is root then the calls are dispatched without checking origin filter. (This - * includes bypassing `frame_system::Config::BaseCallFilter`). - * - * ## Complexity - * - O(C) where C is the number of calls to be batched. - * - * This will return `Ok` in all circumstances. To determine the success of the batch, an - * event is deposited. If a call failed and the batch was interrupted, then the - * `BatchInterrupted` event is deposited, along with the number of successful calls made - * and the error of the failed call. If all were successful, then the `BatchCompleted` - * event is deposited. + * See [`Pallet::batch`]. **/ batch: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Send a batch of dispatch calls and atomically execute them. - * The whole transaction will rollback and fail if any of the calls failed. - * - * May be called from any origin except `None`. - * - * - `calls`: The calls to be dispatched from the same origin. The number of call must not - * exceed the constant: `batched_calls_limit` (available in constant metadata). - * - * If origin is root then the calls are dispatched without checking origin filter. (This - * includes bypassing `frame_system::Config::BaseCallFilter`). - * - * ## Complexity - * - O(C) where C is the number of calls to be batched. + * See [`Pallet::batch_all`]. **/ batchAll: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Dispatches a function call with a provided origin. - * - * The dispatch origin for this call must be _Root_. - * - * ## Complexity - * - O(1). + * See [`Pallet::dispatch_as`]. **/ dispatchAs: AugmentedSubmittable<(asOrigin: SpiritnetRuntimeOriginCaller | { system: any } | { Void: any } | { Council: any } | { TechnicalCommittee: any } | { Did: any } | { PolkadotXcm: any } | { CumulusXcm: any } | string | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [SpiritnetRuntimeOriginCaller, Call]>; /** - * Send a batch of dispatch calls. - * Unlike `batch`, it allows errors and won't interrupt. - * - * May be called from any origin except `None`. - * - * - `calls`: The calls to be dispatched from the same origin. The number of call must not - * exceed the constant: `batched_calls_limit` (available in constant metadata). - * - * If origin is root then the calls are dispatch without checking origin filter. (This - * includes bypassing `frame_system::Config::BaseCallFilter`). - * - * ## Complexity - * - O(C) where C is the number of calls to be batched. + * See [`Pallet::force_batch`]. **/ forceBatch: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; /** - * Dispatch a function call with a specified weight. - * - * This function does not check the weight of the call, and instead allows the - * Root origin to specify the weight of the call. - * - * The dispatch origin for this call must be _Root_. + * See [`Pallet::with_weight`]. **/ withWeight: AugmentedSubmittable<(call: Call | IMethod | string | Uint8Array, weight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [Call, SpWeightsWeightV2Weight]>; }; vesting: { /** - * Force a vested transfer. - * - * The dispatch origin for this call must be _Root_. - * - * - `source`: The account whose funds should be transferred. - * - `target`: The account that should be transferred the vested funds. - * - `schedule`: The vesting schedule attached to the transfer. - * - * Emits `VestingCreated`. - * - * NOTE: This will unlock all schedules through the current block. - * - * ## Complexity - * - `O(1)`. + * See [`Pallet::force_vested_transfer`]. **/ forceVestedTransfer: AugmentedSubmittable<(source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, schedule: PalletVestingVestingInfo | { locked?: any; perBlock?: any; startingBlock?: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress, PalletVestingVestingInfo]>; /** - * Merge two vesting schedules together, creating a new vesting schedule that unlocks over - * the highest possible start and end blocks. If both schedules have already started the - * current block will be used as the schedule start; with the caveat that if one schedule - * is finished by the current block, the other will be treated as the new merged schedule, - * unmodified. - * - * NOTE: If `schedule1_index == schedule2_index` this is a no-op. - * NOTE: This will unlock all schedules through the current block prior to merging. - * NOTE: If both schedules have ended by the current block, no new schedule will be created - * and both will be removed. - * - * Merged schedule attributes: - * - `starting_block`: `MAX(schedule1.starting_block, scheduled2.starting_block, - * current_block)`. - * - `ending_block`: `MAX(schedule1.ending_block, schedule2.ending_block)`. - * - `locked`: `schedule1.locked_at(current_block) + schedule2.locked_at(current_block)`. - * - * The dispatch origin for this call must be _Signed_. - * - * - `schedule1_index`: index of the first schedule to merge. - * - `schedule2_index`: index of the second schedule to merge. + * See [`Pallet::merge_schedules`]. **/ mergeSchedules: AugmentedSubmittable<(schedule1Index: u32 | AnyNumber | Uint8Array, schedule2Index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, u32]>; /** - * Unlock any vested funds of the sender account. - * - * The dispatch origin for this call must be _Signed_ and the sender must have funds still - * locked under this pallet. - * - * Emits either `VestingCompleted` or `VestingUpdated`. - * - * ## Complexity - * - `O(1)`. + * See [`Pallet::vest`]. **/ vest: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Create a vested transfer. - * - * The dispatch origin for this call must be _Signed_. - * - * - `target`: The account receiving the vested funds. - * - `schedule`: The vesting schedule attached to the transfer. - * - * Emits `VestingCreated`. - * - * NOTE: This will unlock all schedules through the current block. - * - * ## Complexity - * - `O(1)`. + * See [`Pallet::vested_transfer`]. **/ vestedTransfer: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, schedule: PalletVestingVestingInfo | { locked?: any; perBlock?: any; startingBlock?: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, PalletVestingVestingInfo]>; /** - * Unlock any vested funds of a `target` account. - * - * The dispatch origin for this call must be _Signed_. - * - * - `target`: The account whose vested funds should be unlocked. Must have funds still - * locked under this pallet. - * - * Emits either `VestingCompleted` or `VestingUpdated`. - * - * ## Complexity - * - `O(1)`. + * See [`Pallet::vest_other`]. **/ vestOther: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; }; web3Names: { /** - * Ban a name. - * - * A banned name cannot be claimed by anyone. The name's deposit - * is returned to the original payer. - * - * The origin must be the ban origin. - * - * Emits `Web3NameBanned` if the operation is carried out - * successfully. - * - * # - * Weight: O(1) - * - Reads: Banned, Owner, Names storage entries + origin check - * - Writes: Names, Owner, Banned storage entries + currency deposit - * release - * # + * See [`Pallet::ban`]. **/ ban: AugmentedSubmittable<(name: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Changes the deposit owner. - * - * The balance that is reserved by the current deposit owner will be - * freed and balance of the new deposit owner will get reserved. - * - * The subject of the call must be the owner of the web3name. - * The sender of the call will be the new deposit owner. + * See [`Pallet::change_deposit_owner`]. **/ changeDepositOwner: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Assign the specified name to the owner as specified in the - * origin. - * - * The name must not have already been claimed by someone else and the - * owner must not already own another name. - * - * Emits `Web3NameClaimed` if the operation is carried out - * successfully. - * - * # - * Weight: O(1) - * - Reads: Names, Owner, Banned storage entries + available currency - * check + origin check - * - Writes: Names, Owner storage entries + currency deposit reserve - * # + * See [`Pallet::claim`]. **/ claim: AugmentedSubmittable<(name: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Release the provided name from its owner. - * - * The origin must be the account that paid for the name's deposit. - * - * Emits `Web3NameReleased` if the operation is carried out - * successfully. - * - * # - * Weight: O(1) - * - Reads: Owner storage entry + origin check - * - Writes: Names, Owner storage entries + currency deposit release - * # + * See [`Pallet::reclaim_deposit`]. **/ reclaimDeposit: AugmentedSubmittable<(name: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Release the provided name from its owner. - * - * The origin must be the owner of the specified name. - * - * Emits `Web3NameReleased` if the operation is carried out - * successfully. - * - * # - * Weight: O(1) - * - Reads: Names storage entry + origin check - * - Writes: Names, Owner storage entries + currency deposit release - * # + * See [`Pallet::release_by_owner`]. **/ releaseByOwner: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Unban a name. - * - * Make a name claimable again. - * - * The origin must be the ban origin. - * - * Emits `Web3NameUnbanned` if the operation is carried out - * successfully. - * - * # - * Weight: O(1) - * - Reads: Banned storage entry + origin check - * - Writes: Banned storage entry deposit release - * # + * See [`Pallet::unban`]. **/ unban: AugmentedSubmittable<(name: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; /** - * Updates the deposit amount to the current deposit rate. - * - * The sender must be the deposit owner. + * See [`Pallet::update_deposit`]. **/ updateDeposit: AugmentedSubmittable<(nameInput: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; }; xcmpQueue: { /** - * Resumes all XCM executions for the XCMP queue. - * - * Note that this function doesn't change the status of the in/out bound channels. - * - * - `origin`: Must pass `ControllerOrigin`. + * See [`Pallet::resume_xcm_execution`]. **/ resumeXcmExecution: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Services a single overweight XCM. - * - * - `origin`: Must pass `ExecuteOverweightOrigin`. - * - `index`: The index of the overweight XCM to service - * - `weight_limit`: The amount of weight that XCM execution may take. - * - * Errors: - * - `BadOverweightIndex`: XCM under `index` is not found in the `Overweight` storage map. - * - `BadXcm`: XCM under `index` cannot be properly decoded into a valid XCM format. - * - `WeightOverLimit`: XCM execution may use greater `weight_limit`. - * - * Events: - * - `OverweightServiced`: On success. + * See [`Pallet::service_overweight`]. **/ serviceOverweight: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array, weightLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u64, SpWeightsWeightV2Weight]>; /** - * Suspends all XCM executions for the XCMP queue, regardless of the sender's origin. - * - * - `origin`: Must pass `ControllerOrigin`. + * See [`Pallet::suspend_xcm_execution`]. **/ suspendXcmExecution: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Overwrites the number of pages of messages which must be in the queue after which we drop any further - * messages from the channel. - * - * - `origin`: Must pass `Root`. - * - `new`: Desired value for `QueueConfigData.drop_threshold` + * See [`Pallet::update_drop_threshold`]. **/ updateDropThreshold: AugmentedSubmittable<(updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Overwrites the number of pages of messages which the queue must be reduced to before it signals that - * message sending may recommence after it has been suspended. - * - * - `origin`: Must pass `Root`. - * - `new`: Desired value for `QueueConfigData.resume_threshold` + * See [`Pallet::update_resume_threshold`]. **/ updateResumeThreshold: AugmentedSubmittable<(updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Overwrites the number of pages of messages which must be in the queue for the other side to be told to - * suspend their sending. - * - * - `origin`: Must pass `Root`. - * - `new`: Desired value for `QueueConfigData.suspend_value` + * See [`Pallet::update_suspend_threshold`]. **/ updateSuspendThreshold: AugmentedSubmittable<(updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; /** - * Overwrites the amount of remaining weight under which we stop processing messages. - * - * - `origin`: Must pass `Root`. - * - `new`: Desired value for `QueueConfigData.threshold_weight` + * See [`Pallet::update_threshold_weight`]. **/ updateThresholdWeight: AugmentedSubmittable<(updated: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpWeightsWeightV2Weight]>; /** - * Overwrites the speed to which the available weight approaches the maximum weight. - * A lower number results in a faster progression. A value of 1 makes the entire weight available initially. - * - * - `origin`: Must pass `Root`. - * - `new`: Desired value for `QueueConfigData.weight_restrict_decay`. + * See [`Pallet::update_weight_restrict_decay`]. **/ updateWeightRestrictDecay: AugmentedSubmittable<(updated: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpWeightsWeightV2Weight]>; /** - * Overwrite the maximum amount of weight any individual message may consume. - * Messages above this weight go into the overweight queue and may only be serviced explicitly. - * - * - `origin`: Must pass `Root`. - * - `new`: Desired value for `QueueConfigData.xcmp_max_individual_weight`. + * See [`Pallet::update_xcmp_max_individual_weight`]. **/ updateXcmpMaxIndividualWeight: AugmentedSubmittable<(updated: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpWeightsWeightV2Weight]>; }; diff --git a/packages/augment-api/src/interfaces/augment-types.ts b/packages/augment-api/src/interfaces/augment-types.ts index 85bb41fe3..367a080af 100644 --- a/packages/augment-api/src/interfaces/augment-types.ts +++ b/packages/augment-api/src/interfaces/augment-types.ts @@ -5,7 +5,7 @@ // this is required to allow for ambient/previous definitions import '@polkadot/types/types/registry'; -import type { DidApiAccountId, PublicCredentialError, PublicCredentialFilter, RawDidLinkedInfo, StakingRates } from '@kiltprotocol/augment-api/extraDefs'; +import type { BlindedLeaves, BlindedValue, CompleteMerkleProof, DidApiAccountId, DidIdentityProviderError, DidKeyMerkleKey, DidKeyMerkleValue, DidMerkleProofError, DipProofRequest, IdentityCommitmentVersion, KeyId, KeyRelationship, LinkedAccountMerkleKey, LinkedAccountMerkleValue, LinkedDidIdentityProviderError, MerkleProof, MerkleRoot, PublicCredentialError, PublicCredentialFilter, RawDidLinkedInfo, RevealedLeaf, RevealedLeaves, RuntimeApiDipProofError, StakingRates, VerificationRelationship, Web3NameMerkleKey, Web3NameMerkleValue } from '@kiltprotocol/augment-api/extraDefs'; import type { Data, StorageKey } from '@polkadot/types'; import type { BitVec, Bool, Bytes, F32, F64, I128, I16, I256, I32, I64, I8, ISize, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, f32, f64, i128, i16, i256, i32, i64, i8, isize, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec'; import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets'; @@ -171,6 +171,8 @@ declare module '@polkadot/types/types/registry' { Bidder: Bidder; BidKind: BidKind; BitVec: BitVec; + BlindedLeaves: BlindedLeaves; + BlindedValue: BlindedValue; Block: Block; BlockAttestations: BlockAttestations; BlockHash: BlockHash; @@ -243,6 +245,7 @@ declare module '@polkadot/types/types/registry' { CompactAssignmentsWith24: CompactAssignmentsWith24; CompactScore: CompactScore; CompactScoreCompact: CompactScoreCompact; + CompleteMerkleProof: CompleteMerkleProof; ConfigData: ConfigData; Consensus: Consensus; ConsensusEngineId: ConsensusEngineId; @@ -334,9 +337,14 @@ declare module '@polkadot/types/types/registry' { DepositBalanceOf: DepositBalanceOf; DestroyWitness: DestroyWitness; DidApiAccountId: DidApiAccountId; + DidIdentityProviderError: DidIdentityProviderError; + DidKeyMerkleKey: DidKeyMerkleKey; + DidKeyMerkleValue: DidKeyMerkleValue; + DidMerkleProofError: DidMerkleProofError; Digest: Digest; DigestItem: DigestItem; DigestOf: DigestOf; + DipProofRequest: DipProofRequest; DispatchClass: DispatchClass; DispatchError: DispatchError; DispatchErrorModule: DispatchErrorModule; @@ -557,6 +565,7 @@ declare module '@polkadot/types/types/registry' { i8: i8; I8: I8; IdentificationTuple: IdentificationTuple; + IdentityCommitmentVersion: IdentityCommitmentVersion; IdentityFields: IdentityFields; IdentityInfo: IdentityInfo; IdentityInfoAdditional: IdentityInfoAdditional; @@ -609,7 +618,9 @@ declare module '@polkadot/types/types/registry' { JustificationNotification: JustificationNotification; Justifications: Justifications; Key: Key; + KeyId: KeyId; KeyOwnerProof: KeyOwnerProof; + KeyRelationship: KeyRelationship; Keys: Keys; KeyType: KeyType; KeyTypeId: KeyTypeId; @@ -624,6 +635,9 @@ declare module '@polkadot/types/types/registry' { LegacyTransaction: LegacyTransaction; Limits: Limits; LimitsTo264: LimitsTo264; + LinkedAccountMerkleKey: LinkedAccountMerkleKey; + LinkedAccountMerkleValue: LinkedAccountMerkleValue; + LinkedDidIdentityProviderError: LinkedDidIdentityProviderError; LocalValidationData: LocalValidationData; LockIdentifier: LockIdentifier; LookupSource: LookupSource; @@ -633,6 +647,8 @@ declare module '@polkadot/types/types/registry' { MaybeVrf: MaybeVrf; MemberCount: MemberCount; MembershipProof: MembershipProof; + MerkleProof: MerkleProof; + MerkleRoot: MerkleRoot; MessageData: MessageData; MessageId: MessageId; MessageIngestionType: MessageIngestionType; @@ -893,11 +909,14 @@ declare module '@polkadot/types/types/registry' { ResponseV2Error: ResponseV2Error; ResponseV2Result: ResponseV2Result; Retriable: Retriable; + RevealedLeaf: RevealedLeaf; + RevealedLeaves: RevealedLeaves; RewardDestination: RewardDestination; RewardPoint: RewardPoint; RoundSnapshot: RoundSnapshot; RoundState: RoundState; RpcMethods: RpcMethods; + RuntimeApiDipProofError: RuntimeApiDipProofError; RuntimeApiMetadataLatest: RuntimeApiMetadataLatest; RuntimeApiMetadataV15: RuntimeApiMetadataV15; RuntimeApiMethodMetadataV15: RuntimeApiMethodMetadataV15; @@ -1154,6 +1173,7 @@ declare module '@polkadot/types/types/registry' { ValidityAttestation: ValidityAttestation; ValidTransaction: ValidTransaction; VecInboundHrmpMessage: VecInboundHrmpMessage; + VerificationRelationship: VerificationRelationship; VersionedMultiAsset: VersionedMultiAsset; VersionedMultiAssets: VersionedMultiAssets; VersionedMultiLocation: VersionedMultiLocation; @@ -1178,6 +1198,8 @@ declare module '@polkadot/types/types/registry' { VrfData: VrfData; VrfOutput: VrfOutput; VrfProof: VrfProof; + Web3NameMerkleKey: Web3NameMerkleKey; + Web3NameMerkleValue: Web3NameMerkleValue; Weight: Weight; WeightLimitV2: WeightLimitV2; WeightMultiplier: WeightMultiplier; diff --git a/packages/augment-api/src/interfaces/extraDefs/types.ts b/packages/augment-api/src/interfaces/extraDefs/types.ts index 6a8d2ddd8..1df82bb24 100644 --- a/packages/augment-api/src/interfaces/extraDefs/types.ts +++ b/packages/augment-api/src/interfaces/extraDefs/types.ts @@ -1,14 +1,96 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -import type { Enum, Option, Struct, Text, Vec } from '@polkadot/types-codec'; -import type { AccountId32, Hash, Perquintill } from '@polkadot/types/interfaces/runtime'; +import type { Bytes, Enum, Null, Option, Struct, Text, Vec, bool, u16 } from '@polkadot/types-codec'; +import type { ITuple } from '@polkadot/types-codec/types'; +import type { AccountId32, BlockNumber, Hash, Perquintill } from '@polkadot/types/interfaces/runtime'; // FIXME: manually added as they are not automatically imported -import type { DidServiceEndpointsDidEndpoint, DidDidDetails, PalletDidLookupLinkableAccountLinkableAccountId } from '@polkadot/types/lookup' +import type { DidServiceEndpointsDidEndpoint, DidDidDetails, PalletDidLookupLinkableAccountLinkableAccountId, DidDidDetailsDidPublicKeyDetails } from '@polkadot/types/lookup' + +/** @name BlindedLeaves */ +export interface BlindedLeaves extends Vec {} + +/** @name BlindedValue */ +export interface BlindedValue extends Bytes {} + +/** @name CompleteMerkleProof */ +export interface CompleteMerkleProof extends Struct { + readonly root: MerkleRoot; + readonly proof: MerkleProof; +} /** @name DidApiAccountId */ export interface DidApiAccountId extends PalletDidLookupLinkableAccountLinkableAccountId {} +/** @name DidIdentityProviderError */ +export interface DidIdentityProviderError extends Enum { + readonly isDidNotFound: boolean; + readonly isInternal: boolean; + readonly type: 'DidNotFound' | 'Internal'; +} + +/** @name DidKeyMerkleKey */ +export interface DidKeyMerkleKey extends ITuple<[KeyId, KeyRelationship]> {} + +/** @name DidKeyMerkleValue */ +export interface DidKeyMerkleValue extends DidDidDetailsDidPublicKeyDetails {} + +/** @name DidMerkleProofError */ +export interface DidMerkleProofError extends Enum { + readonly isUnsupportedVersion: boolean; + readonly isKeyNotFound: boolean; + readonly isLinkedAccountNotFound: boolean; + readonly isWeb3NameNotFound: boolean; + readonly isInternal: boolean; + readonly type: 'UnsupportedVersion' | 'KeyNotFound' | 'LinkedAccountNotFound' | 'Web3NameNotFound' | 'Internal'; +} + +/** @name DipProofRequest */ +export interface DipProofRequest extends Struct { + readonly identifier: AccountId32; + readonly version: IdentityCommitmentVersion; + readonly proofKeys: Vec; + readonly accounts: Vec; + readonly shouldIncludeWeb3Name: bool; +} + +/** @name IdentityCommitmentVersion */ +export interface IdentityCommitmentVersion extends u16 {} + +/** @name KeyId */ +export interface KeyId extends Hash {} + +/** @name KeyRelationship */ +export interface KeyRelationship extends Enum { + readonly isEncryption: boolean; + readonly isVerification: boolean; + readonly asVerification: VerificationRelationship; + readonly type: 'Encryption' | 'Verification'; +} + +/** @name LinkedAccountMerkleKey */ +export interface LinkedAccountMerkleKey extends PalletDidLookupLinkableAccountLinkableAccountId {} + +/** @name LinkedAccountMerkleValue */ +export interface LinkedAccountMerkleValue extends Null {} + +/** @name LinkedDidIdentityProviderError */ +export interface LinkedDidIdentityProviderError extends Enum { + readonly isDidNotFound: boolean; + readonly isDidDeleted: boolean; + readonly isInternal: boolean; + readonly type: 'DidNotFound' | 'DidDeleted' | 'Internal'; +} + +/** @name MerkleProof */ +export interface MerkleProof extends Struct { + readonly blinded: BlindedLeaves; + readonly revealed: RevealedLeaves; +} + +/** @name MerkleRoot */ +export interface MerkleRoot extends Hash {} + /** @name PublicCredentialError */ export interface PublicCredentialError extends Enum { readonly isInvalidSubjectId: boolean; @@ -33,6 +115,29 @@ export interface RawDidLinkedInfo extends Struct { readonly details: DidDidDetails; } +/** @name RevealedLeaf */ +export interface RevealedLeaf extends Enum { + readonly isDidKey: boolean; + readonly asDidKey: ITuple<[DidKeyMerkleKey, DidKeyMerkleValue]>; + readonly isWeb3Name: boolean; + readonly asWeb3Name: ITuple<[Web3NameMerkleKey, Web3NameMerkleValue]>; + readonly isLinkedAccount: boolean; + readonly asLinkedAccount: ITuple<[LinkedAccountMerkleKey, LinkedAccountMerkleValue]>; + readonly type: 'DidKey' | 'Web3Name' | 'LinkedAccount'; +} + +/** @name RevealedLeaves */ +export interface RevealedLeaves extends Vec {} + +/** @name RuntimeApiDipProofError */ +export interface RuntimeApiDipProofError extends Enum { + readonly isIdentityProvider: boolean; + readonly asIdentityProvider: LinkedDidIdentityProviderError; + readonly isMerkleProof: boolean; + readonly asMerkleProof: DidMerkleProofError; + readonly type: 'IdentityProvider' | 'MerkleProof'; +} + /** @name StakingRates */ export interface StakingRates extends Struct { readonly collatorStakingRate: Perquintill; @@ -41,4 +146,19 @@ export interface StakingRates extends Struct { readonly delegatorRewardRate: Perquintill; } +/** @name VerificationRelationship */ +export interface VerificationRelationship extends Enum { + readonly isAuthentication: boolean; + readonly isCapabilityDelegation: boolean; + readonly isCapabilityInvocation: boolean; + readonly isAssertionMethod: boolean; + readonly type: 'Authentication' | 'CapabilityDelegation' | 'CapabilityInvocation' | 'AssertionMethod'; +} + +/** @name Web3NameMerkleKey */ +export interface Web3NameMerkleKey extends Text {} + +/** @name Web3NameMerkleValue */ +export interface Web3NameMerkleValue extends BlockNumber {} + export type PHANTOM_EXTRADEFS = 'extraDefs'; diff --git a/packages/augment-api/src/interfaces/lookup.ts b/packages/augment-api/src/interfaces/lookup.ts index 6f37f496e..6ed6d72e1 100644 --- a/packages/augment-api/src/interfaces/lookup.ts +++ b/packages/augment-api/src/interfaces/lookup.ts @@ -5,7 +5,7 @@ export default { /** - * Lookup3: frame_system::AccountInfo> + * Lookup3: frame_system::AccountInfo> **/ FrameSystemAccountInfo: { nonce: 'u64', @@ -903,7 +903,30 @@ export default { id: 'Option' }, /** - * Lookup104: cumulus_pallet_parachain_system::pallet::Event + * Lookup104: pallet_migration::pallet::Event + **/ + PalletMigrationEvent: { + _enum: { + EntriesUpdated: 'PalletMigrationEntriesToMigrate' + } + }, + /** + * Lookup105: pallet_migration::pallet::EntriesToMigrate + **/ + PalletMigrationEntriesToMigrate: { + attestation: 'Vec', + delegation: 'Vec', + did: 'Vec', + lookup: 'Vec', + w3n: 'Vec', + publicCredentials: 'Vec<(RuntimeCommonAssetsAssetDid,H256)>' + }, + /** + * Lookup106: spiritnet_runtime::Runtime + **/ + SpiritnetRuntimeRuntime: 'Null', + /** + * Lookup118: cumulus_pallet_parachain_system::pallet::Event **/ CumulusPalletParachainSystemEvent: { _enum: { @@ -928,27 +951,29 @@ export default { } }, /** - * Lookup105: cumulus_pallet_xcmp_queue::pallet::Event + * Lookup119: cumulus_pallet_xcmp_queue::pallet::Event **/ CumulusPalletXcmpQueueEvent: { _enum: { Success: { - messageHash: 'Option<[u8;32]>', + messageHash: '[u8;32]', + messageId: '[u8;32]', weight: 'SpWeightsWeightV2Weight', }, Fail: { - messageHash: 'Option<[u8;32]>', + messageHash: '[u8;32]', + messageId: '[u8;32]', error: 'XcmV3TraitsError', weight: 'SpWeightsWeightV2Weight', }, BadVersion: { - messageHash: 'Option<[u8;32]>', + messageHash: '[u8;32]', }, BadFormat: { - messageHash: 'Option<[u8;32]>', + messageHash: '[u8;32]', }, XcmpMessageSent: { - messageHash: 'Option<[u8;32]>', + messageHash: '[u8;32]', }, OverweightEnqueued: { sender: 'u32', @@ -963,7 +988,7 @@ export default { } }, /** - * Lookup106: xcm::v3::traits::Error + * Lookup120: xcm::v3::traits::Error **/ XcmV3TraitsError: { _enum: { @@ -1010,37 +1035,129 @@ export default { } }, /** - * Lookup108: pallet_xcm::pallet::Event + * Lookup122: pallet_xcm::pallet::Event **/ PalletXcmEvent: { _enum: { - Attempted: 'XcmV3TraitsOutcome', - Sent: '(XcmV3MultiLocation,XcmV3MultiLocation,XcmV3Xcm)', - UnexpectedResponse: '(XcmV3MultiLocation,u64)', - ResponseReady: '(u64,XcmV3Response)', - Notified: '(u64,u8,u8)', - NotifyOverweight: '(u64,u8,u8,SpWeightsWeightV2Weight,SpWeightsWeightV2Weight)', - NotifyDispatchError: '(u64,u8,u8)', - NotifyDecodeFailed: '(u64,u8,u8)', - InvalidResponder: '(XcmV3MultiLocation,u64,Option)', - InvalidResponderVersion: '(XcmV3MultiLocation,u64)', - ResponseTaken: 'u64', - AssetsTrapped: '(H256,XcmV3MultiLocation,XcmVersionedMultiAssets)', - VersionChangeNotified: '(XcmV3MultiLocation,u32,XcmV3MultiassetMultiAssets)', - SupportedVersionChanged: '(XcmV3MultiLocation,u32)', - NotifyTargetSendFail: '(XcmV3MultiLocation,u64,XcmV3TraitsError)', - NotifyTargetMigrationFail: '(XcmVersionedMultiLocation,u64)', - InvalidQuerierVersion: '(XcmV3MultiLocation,u64)', - InvalidQuerier: '(XcmV3MultiLocation,u64,XcmV3MultiLocation,Option)', - VersionNotifyStarted: '(XcmV3MultiLocation,XcmV3MultiassetMultiAssets)', - VersionNotifyRequested: '(XcmV3MultiLocation,XcmV3MultiassetMultiAssets)', - VersionNotifyUnrequested: '(XcmV3MultiLocation,XcmV3MultiassetMultiAssets)', - FeesPaid: '(XcmV3MultiLocation,XcmV3MultiassetMultiAssets)', - AssetsClaimed: '(H256,XcmV3MultiLocation,XcmVersionedMultiAssets)' - } - }, - /** - * Lookup109: xcm::v3::traits::Outcome + Attempted: { + outcome: 'XcmV3TraitsOutcome', + }, + Sent: { + origin: 'XcmV3MultiLocation', + destination: 'XcmV3MultiLocation', + message: 'XcmV3Xcm', + messageId: '[u8;32]', + }, + UnexpectedResponse: { + origin: 'XcmV3MultiLocation', + queryId: 'u64', + }, + ResponseReady: { + queryId: 'u64', + response: 'XcmV3Response', + }, + Notified: { + queryId: 'u64', + palletIndex: 'u8', + callIndex: 'u8', + }, + NotifyOverweight: { + queryId: 'u64', + palletIndex: 'u8', + callIndex: 'u8', + actualWeight: 'SpWeightsWeightV2Weight', + maxBudgetedWeight: 'SpWeightsWeightV2Weight', + }, + NotifyDispatchError: { + queryId: 'u64', + palletIndex: 'u8', + callIndex: 'u8', + }, + NotifyDecodeFailed: { + queryId: 'u64', + palletIndex: 'u8', + callIndex: 'u8', + }, + InvalidResponder: { + origin: 'XcmV3MultiLocation', + queryId: 'u64', + expectedLocation: 'Option', + }, + InvalidResponderVersion: { + origin: 'XcmV3MultiLocation', + queryId: 'u64', + }, + ResponseTaken: { + queryId: 'u64', + }, + AssetsTrapped: { + _alias: { + hash_: 'hash', + }, + hash_: 'H256', + origin: 'XcmV3MultiLocation', + assets: 'XcmVersionedMultiAssets', + }, + VersionChangeNotified: { + destination: 'XcmV3MultiLocation', + result: 'u32', + cost: 'XcmV3MultiassetMultiAssets', + messageId: '[u8;32]', + }, + SupportedVersionChanged: { + location: 'XcmV3MultiLocation', + version: 'u32', + }, + NotifyTargetSendFail: { + location: 'XcmV3MultiLocation', + queryId: 'u64', + error: 'XcmV3TraitsError', + }, + NotifyTargetMigrationFail: { + location: 'XcmVersionedMultiLocation', + queryId: 'u64', + }, + InvalidQuerierVersion: { + origin: 'XcmV3MultiLocation', + queryId: 'u64', + }, + InvalidQuerier: { + origin: 'XcmV3MultiLocation', + queryId: 'u64', + expectedQuerier: 'XcmV3MultiLocation', + maybeActualQuerier: 'Option', + }, + VersionNotifyStarted: { + destination: 'XcmV3MultiLocation', + cost: 'XcmV3MultiassetMultiAssets', + messageId: '[u8;32]', + }, + VersionNotifyRequested: { + destination: 'XcmV3MultiLocation', + cost: 'XcmV3MultiassetMultiAssets', + messageId: '[u8;32]', + }, + VersionNotifyUnrequested: { + destination: 'XcmV3MultiLocation', + cost: 'XcmV3MultiassetMultiAssets', + messageId: '[u8;32]', + }, + FeesPaid: { + paying: 'XcmV3MultiLocation', + fees: 'XcmV3MultiassetMultiAssets', + }, + AssetsClaimed: { + _alias: { + hash_: 'hash', + }, + hash_: 'H256', + origin: 'XcmV3MultiLocation', + assets: 'XcmVersionedMultiAssets' + } + } + }, + /** + * Lookup123: xcm::v3::traits::Outcome **/ XcmV3TraitsOutcome: { _enum: { @@ -1050,14 +1167,14 @@ export default { } }, /** - * Lookup110: xcm::v3::multilocation::MultiLocation + * Lookup124: xcm::v3::multilocation::MultiLocation **/ XcmV3MultiLocation: { parents: 'u8', interior: 'XcmV3Junctions' }, /** - * Lookup111: xcm::v3::junctions::Junctions + * Lookup125: xcm::v3::junctions::Junctions **/ XcmV3Junctions: { _enum: { @@ -1073,7 +1190,7 @@ export default { } }, /** - * Lookup112: xcm::v3::junction::Junction + * Lookup126: xcm::v3::junction::Junction **/ XcmV3Junction: { _enum: { @@ -1105,7 +1222,7 @@ export default { } }, /** - * Lookup115: xcm::v3::junction::NetworkId + * Lookup129: xcm::v3::junction::NetworkId **/ XcmV3JunctionNetworkId: { _enum: { @@ -1127,7 +1244,7 @@ export default { } }, /** - * Lookup117: xcm::v3::junction::BodyId + * Lookup131: xcm::v3::junction::BodyId **/ XcmV3JunctionBodyId: { _enum: { @@ -1144,7 +1261,7 @@ export default { } }, /** - * Lookup118: xcm::v3::junction::BodyPart + * Lookup132: xcm::v3::junction::BodyPart **/ XcmV3JunctionBodyPart: { _enum: { @@ -1167,11 +1284,11 @@ export default { } }, /** - * Lookup119: xcm::v3::Xcm + * Lookup133: xcm::v3::Xcm **/ XcmV3Xcm: 'Vec', /** - * Lookup121: xcm::v3::Instruction + * Lookup135: xcm::v3::Instruction **/ XcmV3Instruction: { _enum: { @@ -1313,18 +1430,18 @@ export default { } }, /** - * Lookup122: xcm::v3::multiasset::MultiAssets + * Lookup136: xcm::v3::multiasset::MultiAssets **/ XcmV3MultiassetMultiAssets: 'Vec', /** - * Lookup124: xcm::v3::multiasset::MultiAsset + * Lookup138: xcm::v3::multiasset::MultiAsset **/ XcmV3MultiAsset: { id: 'XcmV3MultiassetAssetId', fun: 'XcmV3MultiassetFungibility' }, /** - * Lookup125: xcm::v3::multiasset::AssetId + * Lookup139: xcm::v3::multiasset::AssetId **/ XcmV3MultiassetAssetId: { _enum: { @@ -1333,7 +1450,7 @@ export default { } }, /** - * Lookup126: xcm::v3::multiasset::Fungibility + * Lookup140: xcm::v3::multiasset::Fungibility **/ XcmV3MultiassetFungibility: { _enum: { @@ -1342,7 +1459,7 @@ export default { } }, /** - * Lookup127: xcm::v3::multiasset::AssetInstance + * Lookup141: xcm::v3::multiasset::AssetInstance **/ XcmV3MultiassetAssetInstance: { _enum: { @@ -1355,7 +1472,7 @@ export default { } }, /** - * Lookup129: xcm::v3::Response + * Lookup143: xcm::v3::Response **/ XcmV3Response: { _enum: { @@ -1368,7 +1485,7 @@ export default { } }, /** - * Lookup133: xcm::v3::PalletInfo + * Lookup147: xcm::v3::PalletInfo **/ XcmV3PalletInfo: { index: 'Compact', @@ -1379,7 +1496,7 @@ export default { patch: 'Compact' }, /** - * Lookup136: xcm::v3::MaybeErrorCode + * Lookup150: xcm::v3::MaybeErrorCode **/ XcmV3MaybeErrorCode: { _enum: { @@ -1389,19 +1506,19 @@ export default { } }, /** - * Lookup139: xcm::v2::OriginKind + * Lookup153: xcm::v2::OriginKind **/ XcmV2OriginKind: { _enum: ['Native', 'SovereignAccount', 'Superuser', 'Xcm'] }, /** - * Lookup140: xcm::double_encoded::DoubleEncoded + * Lookup154: xcm::double_encoded::DoubleEncoded **/ XcmDoubleEncoded: { encoded: 'Bytes' }, /** - * Lookup141: xcm::v3::QueryResponseInfo + * Lookup155: xcm::v3::QueryResponseInfo **/ XcmV3QueryResponseInfo: { destination: 'XcmV3MultiLocation', @@ -1409,7 +1526,7 @@ export default { maxWeight: 'SpWeightsWeightV2Weight' }, /** - * Lookup142: xcm::v3::multiasset::MultiAssetFilter + * Lookup156: xcm::v3::multiasset::MultiAssetFilter **/ XcmV3MultiassetMultiAssetFilter: { _enum: { @@ -1418,7 +1535,7 @@ export default { } }, /** - * Lookup143: xcm::v3::multiasset::WildMultiAsset + * Lookup157: xcm::v3::multiasset::WildMultiAsset **/ XcmV3MultiassetWildMultiAsset: { _enum: { @@ -1436,13 +1553,13 @@ export default { } }, /** - * Lookup144: xcm::v3::multiasset::WildFungibility + * Lookup158: xcm::v3::multiasset::WildFungibility **/ XcmV3MultiassetWildFungibility: { _enum: ['Fungible', 'NonFungible'] }, /** - * Lookup145: xcm::v3::WeightLimit + * Lookup159: xcm::v3::WeightLimit **/ XcmV3WeightLimit: { _enum: { @@ -1451,7 +1568,7 @@ export default { } }, /** - * Lookup146: xcm::VersionedMultiAssets + * Lookup160: xcm::VersionedMultiAssets **/ XcmVersionedMultiAssets: { _enum: { @@ -1462,18 +1579,18 @@ export default { } }, /** - * Lookup147: xcm::v2::multiasset::MultiAssets + * Lookup161: xcm::v2::multiasset::MultiAssets **/ XcmV2MultiassetMultiAssets: 'Vec', /** - * Lookup149: xcm::v2::multiasset::MultiAsset + * Lookup163: xcm::v2::multiasset::MultiAsset **/ XcmV2MultiAsset: { id: 'XcmV2MultiassetAssetId', fun: 'XcmV2MultiassetFungibility' }, /** - * Lookup150: xcm::v2::multiasset::AssetId + * Lookup164: xcm::v2::multiasset::AssetId **/ XcmV2MultiassetAssetId: { _enum: { @@ -1482,14 +1599,14 @@ export default { } }, /** - * Lookup151: xcm::v2::multilocation::MultiLocation + * Lookup165: xcm::v2::multilocation::MultiLocation **/ XcmV2MultiLocation: { parents: 'u8', interior: 'XcmV2MultilocationJunctions' }, /** - * Lookup152: xcm::v2::multilocation::Junctions + * Lookup166: xcm::v2::multilocation::Junctions **/ XcmV2MultilocationJunctions: { _enum: { @@ -1505,7 +1622,7 @@ export default { } }, /** - * Lookup153: xcm::v2::junction::Junction + * Lookup167: xcm::v2::junction::Junction **/ XcmV2Junction: { _enum: { @@ -1533,7 +1650,7 @@ export default { } }, /** - * Lookup154: xcm::v2::NetworkId + * Lookup168: xcm::v2::NetworkId **/ XcmV2NetworkId: { _enum: { @@ -1544,7 +1661,7 @@ export default { } }, /** - * Lookup156: xcm::v2::BodyId + * Lookup170: xcm::v2::BodyId **/ XcmV2BodyId: { _enum: { @@ -1561,7 +1678,7 @@ export default { } }, /** - * Lookup157: xcm::v2::BodyPart + * Lookup171: xcm::v2::BodyPart **/ XcmV2BodyPart: { _enum: { @@ -1584,7 +1701,7 @@ export default { } }, /** - * Lookup158: xcm::v2::multiasset::Fungibility + * Lookup172: xcm::v2::multiasset::Fungibility **/ XcmV2MultiassetFungibility: { _enum: { @@ -1593,7 +1710,7 @@ export default { } }, /** - * Lookup159: xcm::v2::multiasset::AssetInstance + * Lookup173: xcm::v2::multiasset::AssetInstance **/ XcmV2MultiassetAssetInstance: { _enum: { @@ -1607,7 +1724,7 @@ export default { } }, /** - * Lookup160: xcm::VersionedMultiLocation + * Lookup174: xcm::VersionedMultiLocation **/ XcmVersionedMultiLocation: { _enum: { @@ -1618,7 +1735,7 @@ export default { } }, /** - * Lookup161: cumulus_pallet_xcm::pallet::Event + * Lookup175: cumulus_pallet_xcm::pallet::Event **/ CumulusPalletXcmEvent: { _enum: { @@ -1628,26 +1745,29 @@ export default { } }, /** - * Lookup162: cumulus_pallet_dmp_queue::pallet::Event + * Lookup176: cumulus_pallet_dmp_queue::pallet::Event **/ CumulusPalletDmpQueueEvent: { _enum: { InvalidFormat: { - messageId: '[u8;32]', + messageHash: '[u8;32]', }, UnsupportedVersion: { - messageId: '[u8;32]', + messageHash: '[u8;32]', }, ExecutedDownward: { + messageHash: '[u8;32]', messageId: '[u8;32]', outcome: 'XcmV3TraitsOutcome', }, WeightExhausted: { + messageHash: '[u8;32]', messageId: '[u8;32]', remainingWeight: 'SpWeightsWeightV2Weight', requiredWeight: 'SpWeightsWeightV2Weight', }, OverweightEnqueued: { + messageHash: '[u8;32]', messageId: '[u8;32]', overweightIndex: 'u64', requiredWeight: 'SpWeightsWeightV2Weight', @@ -1657,12 +1777,12 @@ export default { weightUsed: 'SpWeightsWeightV2Weight', }, MaxMessagesExhausted: { - messageId: '[u8;32]' + messageHash: '[u8;32]' } } }, /** - * Lookup163: frame_system::Phase + * Lookup177: frame_system::Phase **/ FrameSystemPhase: { _enum: { @@ -1672,14 +1792,14 @@ export default { } }, /** - * Lookup166: frame_system::LastRuntimeUpgradeInfo + * Lookup179: frame_system::LastRuntimeUpgradeInfo **/ FrameSystemLastRuntimeUpgradeInfo: { specVersion: 'Compact', specName: 'Text' }, /** - * Lookup168: frame_system::pallet::Call + * Lookup181: frame_system::pallet::Call **/ FrameSystemCall: { _enum: { @@ -1714,7 +1834,7 @@ export default { } }, /** - * Lookup172: frame_system::limits::BlockWeights + * Lookup185: frame_system::limits::BlockWeights **/ FrameSystemLimitsBlockWeights: { baseBlock: 'SpWeightsWeightV2Weight', @@ -1722,7 +1842,7 @@ export default { perClass: 'FrameSupportDispatchPerDispatchClassWeightsPerClass' }, /** - * Lookup173: frame_support::dispatch::PerDispatchClass + * Lookup186: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassWeightsPerClass: { normal: 'FrameSystemLimitsWeightsPerClass', @@ -1730,7 +1850,7 @@ export default { mandatory: 'FrameSystemLimitsWeightsPerClass' }, /** - * Lookup174: frame_system::limits::WeightsPerClass + * Lookup187: frame_system::limits::WeightsPerClass **/ FrameSystemLimitsWeightsPerClass: { baseExtrinsic: 'SpWeightsWeightV2Weight', @@ -1739,13 +1859,13 @@ export default { reserved: 'Option' }, /** - * Lookup176: frame_system::limits::BlockLength + * Lookup189: frame_system::limits::BlockLength **/ FrameSystemLimitsBlockLength: { max: 'FrameSupportDispatchPerDispatchClassU32' }, /** - * Lookup177: frame_support::dispatch::PerDispatchClass + * Lookup190: frame_support::dispatch::PerDispatchClass **/ FrameSupportDispatchPerDispatchClassU32: { normal: 'u32', @@ -1753,14 +1873,14 @@ export default { mandatory: 'u32' }, /** - * Lookup178: sp_weights::RuntimeDbWeight + * Lookup191: sp_weights::RuntimeDbWeight **/ SpWeightsRuntimeDbWeight: { read: 'u64', write: 'u64' }, /** - * Lookup179: sp_version::RuntimeVersion + * Lookup192: sp_version::RuntimeVersion **/ SpVersionRuntimeVersion: { specName: 'Text', @@ -1773,13 +1893,13 @@ export default { stateVersion: 'u8' }, /** - * Lookup183: frame_system::pallet::Error + * Lookup196: frame_system::pallet::Error **/ FrameSystemError: { _enum: ['InvalidSpecName', 'SpecVersionNeedsToIncrease', 'FailedToExtractRuntimeVersion', 'NonDefaultComposite', 'NonZeroRefCount', 'CallFiltered'] }, /** - * Lookup184: pallet_timestamp::pallet::Call + * Lookup197: pallet_timestamp::pallet::Call **/ PalletTimestampCall: { _enum: { @@ -1789,7 +1909,7 @@ export default { } }, /** - * Lookup186: pallet_indices::pallet::Call + * Lookup199: pallet_indices::pallet::Call **/ PalletIndicesCall: { _enum: { @@ -1820,13 +1940,13 @@ export default { } }, /** - * Lookup189: pallet_indices::pallet::Error + * Lookup202: pallet_indices::pallet::Error **/ PalletIndicesError: { _enum: ['NotAssigned', 'NotOwner', 'InUse', 'NotTransfer', 'Permanent'] }, /** - * Lookup191: pallet_balances::types::BalanceLock + * Lookup204: pallet_balances::types::BalanceLock **/ PalletBalancesBalanceLock: { id: '[u8;8]', @@ -1834,27 +1954,27 @@ export default { reasons: 'PalletBalancesReasons' }, /** - * Lookup192: pallet_balances::types::Reasons + * Lookup205: pallet_balances::types::Reasons **/ PalletBalancesReasons: { _enum: ['Fee', 'Misc', 'All'] }, /** - * Lookup195: pallet_balances::types::ReserveData + * Lookup208: pallet_balances::types::ReserveData **/ PalletBalancesReserveData: { id: '[u8;8]', amount: 'u128' }, /** - * Lookup198: pallet_balances::types::IdAmount + * Lookup211: pallet_balances::types::IdAmount **/ PalletBalancesIdAmountRuntimeHoldReason: { id: 'SpiritnetRuntimeRuntimeHoldReason', amount: 'u128' }, /** - * Lookup199: spiritnet_runtime::RuntimeHoldReason + * Lookup212: spiritnet_runtime::RuntimeHoldReason **/ SpiritnetRuntimeRuntimeHoldReason: { _enum: { @@ -1931,50 +2051,50 @@ export default { } }, /** - * Lookup200: attestation::pallet::HoldReason + * Lookup213: attestation::pallet::HoldReason **/ AttestationHoldReason: { _enum: ['Deposit'] }, /** - * Lookup201: delegation::pallet::HoldReason + * Lookup214: delegation::pallet::HoldReason **/ DelegationHoldReason: { _enum: ['Deposit'] }, /** - * Lookup202: did::pallet::HoldReason + * Lookup215: did::pallet::HoldReason **/ DidHoldReason: { _enum: ['Deposit'] }, /** - * Lookup203: pallet_did_lookup::pallet::HoldReason + * Lookup216: pallet_did_lookup::pallet::HoldReason **/ PalletDidLookupHoldReason: { _enum: ['Deposit'] }, /** - * Lookup204: pallet_web3_names::pallet::HoldReason + * Lookup217: pallet_web3_names::pallet::HoldReason **/ PalletWeb3NamesHoldReason: { _enum: ['Deposit'] }, /** - * Lookup205: public_credentials::pallet::HoldReason + * Lookup218: public_credentials::pallet::HoldReason **/ PublicCredentialsHoldReason: { _enum: ['Deposit'] }, /** - * Lookup208: pallet_balances::types::IdAmount + * Lookup221: pallet_balances::types::IdAmount **/ PalletBalancesIdAmountRuntimeFreezeReason: { id: 'SpiritnetRuntimeRuntimeFreezeReason', amount: 'u128' }, /** - * Lookup209: spiritnet_runtime::RuntimeFreezeReason + * Lookup222: spiritnet_runtime::RuntimeFreezeReason **/ SpiritnetRuntimeRuntimeFreezeReason: { _enum: { @@ -2003,13 +2123,13 @@ export default { } }, /** - * Lookup210: parachain_staking::pallet::FreezeReason + * Lookup223: parachain_staking::pallet::FreezeReason **/ ParachainStakingFreezeReason: { _enum: ['Staking'] }, /** - * Lookup212: pallet_balances::pallet::Call + * Lookup225: pallet_balances::pallet::Call **/ PalletBalancesCall: { _enum: { @@ -2053,37 +2173,37 @@ export default { } }, /** - * Lookup214: pallet_balances::pallet::Error + * Lookup226: pallet_balances::pallet::Error **/ PalletBalancesError: { _enum: ['VestingBalance', 'LiquidityRestrictions', 'InsufficientBalance', 'ExistentialDeposit', 'Expendability', 'ExistingVestingSchedule', 'DeadAccount', 'TooManyReserves', 'TooManyHolds', 'TooManyFreezes'] }, /** - * Lookup216: pallet_transaction_payment::Releases + * Lookup228: pallet_transaction_payment::Releases **/ PalletTransactionPaymentReleases: { _enum: ['V1Ancient', 'V2'] }, /** - * Lookup218: sp_consensus_aura::sr25519::app_sr25519::Public + * Lookup230: sp_consensus_aura::sr25519::app_sr25519::Public **/ SpConsensusAuraSr25519AppSr25519Public: 'SpCoreSr25519Public', /** - * Lookup219: sp_core::sr25519::Public + * Lookup231: sp_core::sr25519::Public **/ SpCoreSr25519Public: '[u8;32]', /** - * Lookup224: spiritnet_runtime::SessionKeys + * Lookup236: spiritnet_runtime::SessionKeys **/ SpiritnetRuntimeSessionKeys: { aura: 'SpConsensusAuraSr25519AppSr25519Public' }, /** - * Lookup227: sp_core::crypto::KeyTypeId + * Lookup239: sp_core::crypto::KeyTypeId **/ SpCoreCryptoKeyTypeId: '[u8;4]', /** - * Lookup228: pallet_session::pallet::Call + * Lookup240: pallet_session::pallet::Call **/ PalletSessionCall: { _enum: { @@ -2098,13 +2218,13 @@ export default { } }, /** - * Lookup229: pallet_session::pallet::Error + * Lookup241: pallet_session::pallet::Error **/ PalletSessionError: { _enum: ['InvalidProof', 'NoAssociatedValidatorId', 'DuplicatedKey', 'NoKeys', 'NoAccount'] }, /** - * Lookup230: parachain_staking::types::RoundInfo + * Lookup242: parachain_staking::types::RoundInfo **/ ParachainStakingRoundInfo: { current: 'u32', @@ -2112,21 +2232,21 @@ export default { length: 'u64' }, /** - * Lookup231: parachain_staking::types::DelegationCounter + * Lookup243: parachain_staking::types::DelegationCounter **/ ParachainStakingDelegationCounter: { round: 'u32', counter: 'u32' }, /** - * Lookup232: parachain_staking::types::Stake + * Lookup244: parachain_staking::types::Stake **/ ParachainStakingStake: { owner: 'AccountId32', amount: 'u128' }, /** - * Lookup233: parachain_staking::types::Candidate + * Lookup245: parachain_staking::types::Candidate **/ ParachainStakingCandidate: { id: 'AccountId32', @@ -2136,11 +2256,11 @@ export default { status: 'ParachainStakingCandidateStatus' }, /** - * Lookup234: parachain_staking::set::OrderedSet, S> + * Lookup246: parachain_staking::set::OrderedSet, S> **/ ParachainStakingSetOrderedSet: 'Vec', /** - * Lookup237: parachain_staking::types::CandidateStatus + * Lookup249: parachain_staking::types::CandidateStatus **/ ParachainStakingCandidateStatus: { _enum: { @@ -2149,35 +2269,35 @@ export default { } }, /** - * Lookup238: parachain_staking::types::TotalStake + * Lookup250: parachain_staking::types::TotalStake **/ ParachainStakingTotalStake: { collators: 'u128', delegators: 'u128' }, /** - * Lookup241: parachain_staking::inflation::InflationInfo + * Lookup253: parachain_staking::inflation::InflationInfo **/ ParachainStakingInflationInflationInfo: { collator: 'ParachainStakingInflationStakingInfo', delegator: 'ParachainStakingInflationStakingInfo' }, /** - * Lookup242: parachain_staking::inflation::StakingInfo + * Lookup254: parachain_staking::inflation::StakingInfo **/ ParachainStakingInflationStakingInfo: { maxRate: 'Perquintill', rewardRate: 'ParachainStakingInflationRewardRate' }, /** - * Lookup243: parachain_staking::inflation::RewardRate + * Lookup255: parachain_staking::inflation::RewardRate **/ ParachainStakingInflationRewardRate: { annual: 'Perquintill', perBlock: 'Perquintill' }, /** - * Lookup248: parachain_staking::pallet::Call + * Lookup260: parachain_staking::pallet::Call **/ ParachainStakingCall: { _enum: { @@ -2244,13 +2364,13 @@ export default { } }, /** - * Lookup249: parachain_staking::pallet::Error + * Lookup261: parachain_staking::pallet::Error **/ ParachainStakingError: { _enum: ['DelegatorNotFound', 'CandidateNotFound', 'DelegatorExists', 'CandidateExists', 'ValStakeZero', 'ValStakeBelowMin', 'ValStakeAboveMax', 'DelegationBelowMin', 'AlreadyLeaving', 'NotLeaving', 'CannotLeaveYet', 'CannotJoinBeforeUnlocking', 'AlreadyDelegating', 'NotYetDelegating', 'DelegationsPerRoundExceeded', 'TooManyDelegators', 'TooFewCollatorCandidates', 'CannotStakeIfLeaving', 'CannotDelegateIfLeaving', 'MaxCollatorsPerDelegatorExceeded', 'AlreadyDelegatedCollator', 'DelegationNotFound', 'Underflow', 'CannotSetAboveMax', 'CannotSetBelowMin', 'InvalidSchedule', 'NoMoreUnstaking', 'TooEarly', 'StakeNotFound', 'UnstakingIsEmpty', 'RewardsNotFound'] }, /** - * Lookup252: frame_support::traits::preimages::Bounded + * Lookup264: frame_support::traits::preimages::Bounded **/ FrameSupportPreimagesBounded: { _enum: { @@ -2271,7 +2391,7 @@ export default { } }, /** - * Lookup254: pallet_democracy::pallet::Call + * Lookup266: pallet_democracy::pallet::Call **/ PalletDemocracyCall: { _enum: { @@ -2340,13 +2460,13 @@ export default { } }, /** - * Lookup255: pallet_democracy::conviction::Conviction + * Lookup267: pallet_democracy::conviction::Conviction **/ PalletDemocracyConviction: { _enum: ['None', 'Locked1x', 'Locked2x', 'Locked3x', 'Locked4x', 'Locked5x', 'Locked6x'] }, /** - * Lookup258: pallet_collective::pallet::Call + * Lookup270: pallet_collective::pallet::Call **/ PalletCollectiveCall: { _enum: { @@ -2382,7 +2502,7 @@ export default { } }, /** - * Lookup261: pallet_membership::pallet::Call + * Lookup273: pallet_membership::pallet::Call **/ PalletMembershipCall: { _enum: { @@ -2412,7 +2532,7 @@ export default { } }, /** - * Lookup262: pallet_treasury::pallet::Call + * Lookup274: pallet_treasury::pallet::Call **/ PalletTreasuryCall: { _enum: { @@ -2436,7 +2556,7 @@ export default { } }, /** - * Lookup263: pallet_utility::pallet::Call + * Lookup275: pallet_utility::pallet::Call **/ PalletUtilityCall: { _enum: { @@ -2464,7 +2584,7 @@ export default { } }, /** - * Lookup265: spiritnet_runtime::OriginCaller + * Lookup277: spiritnet_runtime::OriginCaller **/ SpiritnetRuntimeOriginCaller: { _enum: { @@ -2556,7 +2676,7 @@ export default { } }, /** - * Lookup266: frame_support::dispatch::RawOrigin + * Lookup278: frame_support::dispatch::RawOrigin **/ FrameSupportDispatchRawOrigin: { _enum: { @@ -2566,7 +2686,7 @@ export default { } }, /** - * Lookup267: pallet_collective::RawOrigin + * Lookup279: pallet_collective::RawOrigin **/ PalletCollectiveRawOrigin: { _enum: { @@ -2576,14 +2696,14 @@ export default { } }, /** - * Lookup269: did::origin::DidRawOrigin + * Lookup281: did::origin::DidRawOrigin **/ DidOriginDidRawOrigin: { id: 'AccountId32', submitter: 'AccountId32' }, /** - * Lookup270: pallet_xcm::pallet::Origin + * Lookup282: pallet_xcm::pallet::Origin **/ PalletXcmOrigin: { _enum: { @@ -2592,7 +2712,7 @@ export default { } }, /** - * Lookup271: cumulus_pallet_xcm::pallet::Origin + * Lookup283: cumulus_pallet_xcm::pallet::Origin **/ CumulusPalletXcmOrigin: { _enum: { @@ -2601,11 +2721,11 @@ export default { } }, /** - * Lookup272: sp_core::Void + * Lookup284: sp_core::Void **/ SpCoreVoid: 'Null', /** - * Lookup273: pallet_vesting::pallet::Call + * Lookup285: pallet_vesting::pallet::Call **/ PalletVestingCall: { _enum: { @@ -2629,7 +2749,7 @@ export default { } }, /** - * Lookup274: pallet_vesting::vesting_info::VestingInfo + * Lookup286: pallet_vesting::vesting_info::VestingInfo **/ PalletVestingVestingInfo: { locked: 'u128', @@ -2637,7 +2757,7 @@ export default { startingBlock: 'u64' }, /** - * Lookup275: pallet_scheduler::pallet::Call + * Lookup287: pallet_scheduler::pallet::Call **/ PalletSchedulerCall: { _enum: { @@ -2677,7 +2797,7 @@ export default { } }, /** - * Lookup277: pallet_proxy::pallet::Call + * Lookup289: pallet_proxy::pallet::Call **/ PalletProxyCall: { _enum: { @@ -2730,7 +2850,7 @@ export default { } }, /** - * Lookup279: pallet_preimage::pallet::Call + * Lookup291: pallet_preimage::pallet::Call **/ PalletPreimageCall: { _enum: { @@ -2758,7 +2878,7 @@ export default { } }, /** - * Lookup281: pallet_tips::pallet::Call + * Lookup293: pallet_tips::pallet::Call **/ PalletTipsCall: { _enum: { @@ -2799,7 +2919,7 @@ export default { } }, /** - * Lookup282: pallet_multisig::pallet::Call + * Lookup294: pallet_multisig::pallet::Call **/ PalletMultisigCall: { _enum: { @@ -2830,7 +2950,7 @@ export default { } }, /** - * Lookup284: ctype::pallet::Call + * Lookup296: ctype::pallet::Call **/ CtypeCall: { _enum: { @@ -2844,7 +2964,7 @@ export default { } }, /** - * Lookup285: attestation::pallet::Call + * Lookup297: attestation::pallet::Call **/ AttestationCall: { _enum: { @@ -2873,7 +2993,7 @@ export default { } }, /** - * Lookup287: runtime_common::authorization::PalletAuthorize> + * Lookup299: runtime_common::authorization::PalletAuthorize> **/ RuntimeCommonAuthorizationPalletAuthorize: { _enum: { @@ -2881,18 +3001,14 @@ export default { } }, /** - * Lookup288: delegation::access_control::DelegationAc + * Lookup300: delegation::access_control::DelegationAc **/ DelegationAccessControlDelegationAc: { subjectNodeId: 'H256', maxChecks: 'u32' }, /** - * Lookup289: spiritnet_runtime::Runtime - **/ - SpiritnetRuntimeRuntime: 'Null', - /** - * Lookup290: delegation::pallet::Call + * Lookup301: delegation::pallet::Call **/ DelegationCall: { _enum: { @@ -2929,7 +3045,7 @@ export default { } }, /** - * Lookup291: did::did_details::DidSignature + * Lookup302: did::did_details::DidSignature **/ DidDidDetailsDidSignature: { _enum: { @@ -2939,19 +3055,19 @@ export default { } }, /** - * Lookup292: sp_core::ed25519::Signature + * Lookup303: sp_core::ed25519::Signature **/ SpCoreEd25519Signature: '[u8;64]', /** - * Lookup294: sp_core::sr25519::Signature + * Lookup305: sp_core::sr25519::Signature **/ SpCoreSr25519Signature: '[u8;64]', /** - * Lookup295: sp_core::ecdsa::Signature + * Lookup306: sp_core::ecdsa::Signature **/ SpCoreEcdsaSignature: '[u8;65]', /** - * Lookup297: did::pallet::Call + * Lookup308: did::pallet::Call **/ DidCall: { _enum: { @@ -2995,12 +3111,19 @@ export default { }, change_deposit_owner: 'Null', update_deposit: { - did: 'AccountId32' + did: 'AccountId32', + }, + dispatch_as: { + didIdentifier: 'AccountId32', + call: 'Call', + }, + create_from_account: { + authenticationKey: 'DidDidDetailsDidVerificationKey' } } }, /** - * Lookup298: did::did_details::DidCreationDetails> + * Lookup309: did::did_details::DidCreationDetails> **/ DidDidDetailsDidCreationDetails: { did: 'AccountId32', @@ -3011,11 +3134,11 @@ export default { newServiceDetails: 'Vec' }, /** - * Lookup299: runtime_common::constants::did::MaxNewKeyAgreementKeys + * Lookup310: runtime_common::constants::did::MaxNewKeyAgreementKeys **/ RuntimeCommonConstantsDidMaxNewKeyAgreementKeys: 'Null', /** - * Lookup300: did::service_endpoints::DidEndpoint + * Lookup311: did::service_endpoints::DidEndpoint **/ DidServiceEndpointsDidEndpoint: { id: 'Bytes', @@ -3023,7 +3146,7 @@ export default { urls: 'Vec' }, /** - * Lookup309: did::did_details::DidEncryptionKey + * Lookup320: did::did_details::DidEncryptionKey **/ DidDidDetailsDidEncryptionKey: { _enum: { @@ -3031,25 +3154,26 @@ export default { } }, /** - * Lookup313: did::did_details::DidVerificationKey + * Lookup324: did::did_details::DidVerificationKey **/ DidDidDetailsDidVerificationKey: { _enum: { Ed25519: 'SpCoreEd25519Public', Sr25519: 'SpCoreSr25519Public', - Ecdsa: 'SpCoreEcdsaPublic' + Ecdsa: 'SpCoreEcdsaPublic', + Account: 'AccountId32' } }, /** - * Lookup314: sp_core::ed25519::Public + * Lookup325: sp_core::ed25519::Public **/ SpCoreEd25519Public: '[u8;32]', /** - * Lookup315: sp_core::ecdsa::Public + * Lookup326: sp_core::ecdsa::Public **/ SpCoreEcdsaPublic: '[u8;33]', /** - * Lookup318: did::did_details::DidAuthorizedCallOperation + * Lookup329: did::did_details::DidAuthorizedCallOperation **/ DidDidDetailsDidAuthorizedCallOperation: { did: 'AccountId32', @@ -3059,7 +3183,7 @@ export default { submitter: 'AccountId32' }, /** - * Lookup319: pallet_did_lookup::pallet::Call + * Lookup330: pallet_did_lookup::pallet::Call **/ PalletDidLookupCall: { _enum: { @@ -3084,7 +3208,7 @@ export default { } }, /** - * Lookup320: pallet_did_lookup::associate_account_request::AssociateAccountRequest + * Lookup331: pallet_did_lookup::associate_account_request::AssociateAccountRequest **/ PalletDidLookupAssociateAccountRequest: { _enum: { @@ -3093,7 +3217,7 @@ export default { } }, /** - * Lookup321: sp_runtime::MultiSignature + * Lookup332: sp_runtime::MultiSignature **/ SpRuntimeMultiSignature: { _enum: { @@ -3103,11 +3227,11 @@ export default { } }, /** - * Lookup322: pallet_did_lookup::account::EthereumSignature + * Lookup333: pallet_did_lookup::account::EthereumSignature **/ PalletDidLookupAccountEthereumSignature: 'SpCoreEcdsaSignature', /** - * Lookup323: pallet_web3_names::pallet::Call + * Lookup334: pallet_web3_names::pallet::Call **/ PalletWeb3NamesCall: { _enum: { @@ -3131,7 +3255,7 @@ export default { } }, /** - * Lookup324: public_credentials::pallet::Call + * Lookup335: public_credentials::pallet::Call **/ PublicCredentialsCall: { _enum: { @@ -3162,7 +3286,7 @@ export default { } }, /** - * Lookup325: public_credentials::credentials::Credential, bounded_collections::bounded_vec::BoundedVec, runtime_common::authorization::PalletAuthorize>> + * Lookup336: public_credentials::credentials::Credential, bounded_collections::bounded_vec::BoundedVec, runtime_common::authorization::PalletAuthorize>> **/ PublicCredentialsCredentialsCredential: { ctypeHash: 'H256', @@ -3171,7 +3295,17 @@ export default { authorization: 'Option' }, /** - * Lookup328: cumulus_pallet_parachain_system::pallet::Call + * Lookup339: pallet_migration::pallet::Call + **/ + PalletMigrationCall: { + _enum: { + update_balance: { + requestedMigrations: 'PalletMigrationEntriesToMigrate' + } + } + }, + /** + * Lookup340: cumulus_pallet_parachain_system::pallet::Call **/ CumulusPalletParachainSystemCall: { _enum: { @@ -3191,45 +3325,49 @@ export default { } }, /** - * Lookup329: cumulus_primitives_parachain_inherent::ParachainInherentData + * Lookup341: cumulus_primitives_parachain_inherent::ParachainInherentData **/ CumulusPrimitivesParachainInherentParachainInherentData: { - validationData: 'PolkadotPrimitivesV4PersistedValidationData', + validationData: 'PolkadotPrimitivesV5PersistedValidationData', relayChainState: 'SpTrieStorageProof', downwardMessages: 'Vec', horizontalMessages: 'BTreeMap>' }, /** - * Lookup330: polkadot_primitives::v4::PersistedValidationData + * Lookup342: polkadot_primitives::v5::PersistedValidationData **/ - PolkadotPrimitivesV4PersistedValidationData: { + PolkadotPrimitivesV5PersistedValidationData: { parentHead: 'Bytes', relayParentNumber: 'u32', relayParentStorageRoot: 'H256', maxPovSize: 'u32' }, /** - * Lookup332: sp_trie::storage_proof::StorageProof + * Lookup344: sp_trie::storage_proof::StorageProof **/ SpTrieStorageProof: { trieNodes: 'BTreeSet' }, /** - * Lookup335: polkadot_core_primitives::InboundDownwardMessage + * Lookup347: polkadot_core_primitives::InboundDownwardMessage **/ PolkadotCorePrimitivesInboundDownwardMessage: { sentAt: 'u32', msg: 'Bytes' }, /** - * Lookup338: polkadot_core_primitives::InboundHrmpMessage + * Lookup350: polkadot_core_primitives::InboundHrmpMessage **/ PolkadotCorePrimitivesInboundHrmpMessage: { sentAt: 'u32', data: 'Bytes' }, /** - * Lookup341: cumulus_pallet_xcmp_queue::pallet::Call + * Lookup353: parachain_info::pallet::Call + **/ + ParachainInfoCall: 'Null', + /** + * Lookup354: cumulus_pallet_xcmp_queue::pallet::Call **/ CumulusPalletXcmpQueueCall: { _enum: { @@ -3278,7 +3416,7 @@ export default { } }, /** - * Lookup342: pallet_xcm::pallet::Call + * Lookup355: pallet_xcm::pallet::Call **/ PalletXcmCall: { _enum: { @@ -3304,7 +3442,7 @@ export default { }, force_xcm_version: { location: 'XcmV3MultiLocation', - xcmVersion: 'u32', + version: 'u32', }, force_default_xcm_version: { maybeXcmVersion: 'Option', @@ -3335,7 +3473,7 @@ export default { } }, /** - * Lookup343: xcm::VersionedXcm + * Lookup356: xcm::VersionedXcm **/ XcmVersionedXcm: { _enum: { @@ -3346,11 +3484,11 @@ export default { } }, /** - * Lookup344: xcm::v2::Xcm + * Lookup357: xcm::v2::Xcm **/ XcmV2Xcm: 'Vec', /** - * Lookup346: xcm::v2::Instruction + * Lookup359: xcm::v2::Instruction **/ XcmV2Instruction: { _enum: { @@ -3448,7 +3586,7 @@ export default { } }, /** - * Lookup347: xcm::v2::Response + * Lookup360: xcm::v2::Response **/ XcmV2Response: { _enum: { @@ -3459,7 +3597,7 @@ export default { } }, /** - * Lookup350: xcm::v2::traits::Error + * Lookup363: xcm::v2::traits::Error **/ XcmV2TraitsError: { _enum: { @@ -3492,7 +3630,7 @@ export default { } }, /** - * Lookup351: xcm::v2::multiasset::MultiAssetFilter + * Lookup364: xcm::v2::multiasset::MultiAssetFilter **/ XcmV2MultiassetMultiAssetFilter: { _enum: { @@ -3501,7 +3639,7 @@ export default { } }, /** - * Lookup352: xcm::v2::multiasset::WildMultiAsset + * Lookup365: xcm::v2::multiasset::WildMultiAsset **/ XcmV2MultiassetWildMultiAsset: { _enum: { @@ -3513,13 +3651,13 @@ export default { } }, /** - * Lookup353: xcm::v2::multiasset::WildFungibility + * Lookup366: xcm::v2::multiasset::WildFungibility **/ XcmV2MultiassetWildFungibility: { _enum: ['Fungible', 'NonFungible'] }, /** - * Lookup354: xcm::v2::WeightLimit + * Lookup367: xcm::v2::WeightLimit **/ XcmV2WeightLimit: { _enum: { @@ -3528,7 +3666,7 @@ export default { } }, /** - * Lookup363: cumulus_pallet_dmp_queue::pallet::Call + * Lookup376: cumulus_pallet_dmp_queue::pallet::Call **/ CumulusPalletDmpQueueCall: { _enum: { @@ -3539,7 +3677,7 @@ export default { } }, /** - * Lookup367: pallet_democracy::types::ReferendumInfo, Balance> + * Lookup380: pallet_democracy::types::ReferendumInfo, Balance> **/ PalletDemocracyReferendumInfo: { _enum: { @@ -3551,7 +3689,7 @@ export default { } }, /** - * Lookup368: pallet_democracy::types::ReferendumStatus, Balance> + * Lookup381: pallet_democracy::types::ReferendumStatus, Balance> **/ PalletDemocracyReferendumStatus: { end: 'u64', @@ -3561,7 +3699,7 @@ export default { tally: 'PalletDemocracyTally' }, /** - * Lookup369: pallet_democracy::types::Tally + * Lookup382: pallet_democracy::types::Tally **/ PalletDemocracyTally: { ayes: 'u128', @@ -3569,7 +3707,7 @@ export default { turnout: 'u128' }, /** - * Lookup370: pallet_democracy::vote::Voting + * Lookup383: pallet_democracy::vote::Voting **/ PalletDemocracyVoteVoting: { _enum: { @@ -3588,24 +3726,24 @@ export default { } }, /** - * Lookup374: pallet_democracy::types::Delegations + * Lookup387: pallet_democracy::types::Delegations **/ PalletDemocracyDelegations: { votes: 'u128', capital: 'u128' }, /** - * Lookup375: pallet_democracy::vote::PriorLock + * Lookup388: pallet_democracy::vote::PriorLock **/ PalletDemocracyVotePriorLock: '(u64,u128)', /** - * Lookup378: pallet_democracy::pallet::Error + * Lookup391: pallet_democracy::pallet::Error **/ PalletDemocracyError: { _enum: ['ValueLow', 'ProposalMissing', 'AlreadyCanceled', 'DuplicateProposal', 'ProposalBlacklisted', 'NotSimpleMajority', 'InvalidHash', 'NoProposal', 'AlreadyVetoed', 'ReferendumInvalid', 'NoneWaiting', 'NotVoter', 'NoPermission', 'AlreadyDelegating', 'InsufficientFunds', 'NotDelegating', 'VotesExist', 'InstantNotAllowed', 'Nonsense', 'WrongUpperBound', 'MaxVotesReached', 'TooMany', 'VotingPeriodLow', 'PreimageNotExist'] }, /** - * Lookup380: pallet_collective::Votes + * Lookup393: pallet_collective::Votes **/ PalletCollectiveVotes: { index: 'u32', @@ -3615,19 +3753,19 @@ export default { end: 'u64' }, /** - * Lookup381: pallet_collective::pallet::Error + * Lookup394: pallet_collective::pallet::Error **/ PalletCollectiveError: { _enum: ['NotMember', 'DuplicateProposal', 'ProposalMissing', 'WrongIndex', 'DuplicateVote', 'AlreadyInitialized', 'TooEarly', 'TooManyProposals', 'WrongProposalWeight', 'WrongProposalLength'] }, /** - * Lookup385: pallet_membership::pallet::Error + * Lookup398: pallet_membership::pallet::Error **/ PalletMembershipError: { _enum: ['AlreadyMember', 'NotMember', 'TooManyMembers'] }, /** - * Lookup386: pallet_treasury::Proposal + * Lookup399: pallet_treasury::Proposal **/ PalletTreasuryProposal: { proposer: 'AccountId32', @@ -3636,35 +3774,35 @@ export default { bond: 'u128' }, /** - * Lookup390: frame_support::PalletId + * Lookup403: frame_support::PalletId **/ FrameSupportPalletId: '[u8;8]', /** - * Lookup391: pallet_treasury::pallet::Error + * Lookup404: pallet_treasury::pallet::Error **/ PalletTreasuryError: { _enum: ['InsufficientProposersBalance', 'InvalidIndex', 'TooManyApprovals', 'InsufficientPermission', 'ProposalNotApproved'] }, /** - * Lookup392: pallet_utility::pallet::Error + * Lookup405: pallet_utility::pallet::Error **/ PalletUtilityError: { _enum: ['TooManyCalls'] }, /** - * Lookup395: pallet_vesting::Releases + * Lookup408: pallet_vesting::Releases **/ PalletVestingReleases: { _enum: ['V0', 'V1'] }, /** - * Lookup396: pallet_vesting::pallet::Error + * Lookup409: pallet_vesting::pallet::Error **/ PalletVestingError: { _enum: ['NotVesting', 'AtMaxVestingSchedules', 'AmountLow', 'ScheduleIndexOutOfBounds', 'InvalidScheduleParams'] }, /** - * Lookup399: pallet_scheduler::Scheduled, BlockNumber, spiritnet_runtime::OriginCaller, sp_core::crypto::AccountId32> + * Lookup412: pallet_scheduler::Scheduled, BlockNumber, spiritnet_runtime::OriginCaller, sp_core::crypto::AccountId32> **/ PalletSchedulerScheduled: { maybeId: 'Option<[u8;32]>', @@ -3674,13 +3812,13 @@ export default { origin: 'SpiritnetRuntimeOriginCaller' }, /** - * Lookup401: pallet_scheduler::pallet::Error + * Lookup414: pallet_scheduler::pallet::Error **/ PalletSchedulerError: { _enum: ['FailedToSchedule', 'NotFound', 'TargetBlockNumberInPast', 'RescheduleNoChange', 'Named'] }, /** - * Lookup404: pallet_proxy::ProxyDefinition + * Lookup417: pallet_proxy::ProxyDefinition **/ PalletProxyProxyDefinition: { delegate: 'AccountId32', @@ -3688,7 +3826,7 @@ export default { delay: 'u64' }, /** - * Lookup408: pallet_proxy::Announcement + * Lookup421: pallet_proxy::Announcement **/ PalletProxyAnnouncement: { real: 'AccountId32', @@ -3696,13 +3834,13 @@ export default { height: 'u64' }, /** - * Lookup410: pallet_proxy::pallet::Error + * Lookup423: pallet_proxy::pallet::Error **/ PalletProxyError: { _enum: ['TooMany', 'NotFound', 'NotProxy', 'Unproxyable', 'Duplicate', 'NoPermission', 'Unannounced', 'NoSelfProxy'] }, /** - * Lookup411: pallet_preimage::RequestStatus + * Lookup424: pallet_preimage::RequestStatus **/ PalletPreimageRequestStatus: { _enum: { @@ -3718,13 +3856,13 @@ export default { } }, /** - * Lookup416: pallet_preimage::pallet::Error + * Lookup429: pallet_preimage::pallet::Error **/ PalletPreimageError: { _enum: ['TooBig', 'AlreadyNoted', 'NotAuthorized', 'NotNoted', 'Requested', 'NotRequested'] }, /** - * Lookup419: pallet_tips::OpenTip + * Lookup432: pallet_tips::OpenTip **/ PalletTipsOpenTip: { reason: 'H256', @@ -3736,13 +3874,13 @@ export default { findersFee: 'bool' }, /** - * Lookup423: pallet_tips::pallet::Error + * Lookup436: pallet_tips::pallet::Error **/ PalletTipsError: { _enum: ['ReasonTooBig', 'AlreadyKnown', 'UnknownTip', 'NotFinder', 'StillOpen', 'Premature'] }, /** - * Lookup425: pallet_multisig::Multisig + * Lookup438: pallet_multisig::Multisig **/ PalletMultisigMultisig: { when: 'PalletMultisigTimepoint', @@ -3751,26 +3889,26 @@ export default { approvals: 'Vec' }, /** - * Lookup427: pallet_multisig::pallet::Error + * Lookup440: pallet_multisig::pallet::Error **/ PalletMultisigError: { _enum: ['MinimumThreshold', 'AlreadyApproved', 'NoApprovalsNeeded', 'TooFewSignatories', 'TooManySignatories', 'SignatoriesOutOfOrder', 'SenderInSignatories', 'NotFound', 'NotOwner', 'NoTimepoint', 'WrongTimepoint', 'UnexpectedTimepoint', 'MaxWeightTooLow', 'AlreadyStored'] }, /** - * Lookup428: ctype::ctype_entry::CtypeEntry + * Lookup441: ctype::ctype_entry::CtypeEntry **/ CtypeCtypeEntry: { creator: 'AccountId32', createdAt: 'u64' }, /** - * Lookup429: ctype::pallet::Error + * Lookup442: ctype::pallet::Error **/ CtypeError: { _enum: ['NotFound', 'AlreadyExists', 'UnableToPayFees'] }, /** - * Lookup430: attestation::attestations::AttestationDetails, sp_core::crypto::AccountId32, Balance> + * Lookup443: attestation::attestations::AttestationDetails, sp_core::crypto::AccountId32, Balance> **/ AttestationAttestationsAttestationDetails: { ctypeHash: 'H256', @@ -3780,20 +3918,20 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup431: kilt_support::deposit::Deposit + * Lookup444: kilt_support::deposit::Deposit **/ KiltSupportDeposit: { owner: 'AccountId32', amount: 'u128' }, /** - * Lookup433: attestation::pallet::Error + * Lookup446: attestation::pallet::Error **/ AttestationError: { _enum: ['AlreadyAttested', 'AlreadyRevoked', 'NotFound', 'CTypeMismatch', 'NotAuthorized', 'MaxDelegatedAttestationsExceeded'] }, /** - * Lookup434: delegation::delegation_hierarchy::DelegationNode, sp_core::crypto::AccountId32, Balance> + * Lookup447: delegation::delegation_hierarchy::DelegationNode, sp_core::crypto::AccountId32, Balance> **/ DelegationDelegationHierarchyDelegationNode: { hierarchyRootId: 'H256', @@ -3803,11 +3941,11 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup435: runtime_common::constants::delegation::MaxChildren + * Lookup448: runtime_common::constants::delegation::MaxChildren **/ RuntimeCommonConstantsDelegationMaxChildren: 'Null', /** - * Lookup436: delegation::delegation_hierarchy::DelegationDetails + * Lookup449: delegation::delegation_hierarchy::DelegationDetails **/ DelegationDelegationHierarchyDelegationDetails: { owner: 'AccountId32', @@ -3815,19 +3953,19 @@ export default { permissions: 'DelegationDelegationHierarchyPermissions' }, /** - * Lookup439: delegation::delegation_hierarchy::DelegationHierarchyDetails + * Lookup452: delegation::delegation_hierarchy::DelegationHierarchyDetails **/ DelegationDelegationHierarchyDelegationHierarchyDetails: { ctypeHash: 'H256' }, /** - * Lookup440: delegation::pallet::Error + * Lookup453: delegation::pallet::Error **/ DelegationError: { _enum: ['DelegationAlreadyExists', 'InvalidDelegateSignature', 'DelegationNotFound', 'DelegateNotFound', 'HierarchyAlreadyExists', 'HierarchyNotFound', 'MaxSearchDepthReached', 'NotOwnerOfParentDelegation', 'NotOwnerOfDelegationHierarchy', 'ParentDelegationNotFound', 'ParentDelegationRevoked', 'UnauthorizedRevocation', 'UnauthorizedRemoval', 'UnauthorizedDelegation', 'AccessDenied', 'ExceededRevocationBounds', 'ExceededRemovalBounds', 'MaxRevocationsTooLarge', 'MaxRemovalsTooLarge', 'MaxParentChecksTooLarge', 'Internal', 'MaxChildrenExceeded'] }, /** - * Lookup441: did::did_details::DidDetails + * Lookup454: did::did_details::DidDetails **/ DidDidDetails: { authenticationKey: 'H256', @@ -3839,14 +3977,14 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup444: did::did_details::DidPublicKeyDetails + * Lookup457: did::did_details::DidPublicKeyDetails **/ DidDidDetailsDidPublicKeyDetails: { key: 'DidDidDetailsDidPublicKey', blockNumber: 'u64' }, /** - * Lookup445: did::did_details::DidPublicKey + * Lookup458: did::did_details::DidPublicKey **/ DidDidDetailsDidPublicKey: { _enum: { @@ -3855,26 +3993,26 @@ export default { } }, /** - * Lookup450: did::pallet::Error + * Lookup463: did::pallet::Error **/ DidError: { _enum: ['InvalidSignatureFormat', 'InvalidSignature', 'AlreadyExists', 'NotFound', 'VerificationKeyNotFound', 'InvalidNonce', 'UnsupportedDidAuthorizationCall', 'InvalidDidAuthorizationCall', 'MaxNewKeyAgreementKeysLimitExceeded', 'MaxPublicKeysExceeded', 'MaxKeyAgreementKeysExceeded', 'BadDidOrigin', 'TransactionExpired', 'AlreadyDeleted', 'NotOwnerOfDeposit', 'UnableToPayFees', 'MaxNumberOfServicesExceeded', 'MaxServiceIdLengthExceeded', 'MaxServiceTypeLengthExceeded', 'MaxNumberOfTypesPerServiceExceeded', 'MaxServiceUrlLengthExceeded', 'MaxNumberOfUrlsPerServiceExceeded', 'ServiceAlreadyExists', 'ServiceNotFound', 'InvalidServiceEncoding', 'MaxStoredEndpointsCountExceeded', 'Internal'] }, /** - * Lookup451: pallet_did_lookup::connection_record::ConnectionRecord + * Lookup464: pallet_did_lookup::connection_record::ConnectionRecord **/ PalletDidLookupConnectionRecord: { did: 'AccountId32', deposit: 'KiltSupportDeposit' }, /** - * Lookup453: pallet_did_lookup::pallet::Error + * Lookup466: pallet_did_lookup::pallet::Error **/ PalletDidLookupError: { _enum: ['NotFound', 'NotAuthorized', 'OutdatedProof', 'InsufficientFunds', 'Migration'] }, /** - * Lookup454: pallet_web3_names::web3_name::Web3NameOwnership, BlockNumber> + * Lookup467: pallet_web3_names::web3_name::Web3NameOwnership, BlockNumber> **/ PalletWeb3NamesWeb3NameWeb3NameOwnership: { owner: 'AccountId32', @@ -3882,13 +4020,13 @@ export default { deposit: 'KiltSupportDeposit' }, /** - * Lookup455: pallet_web3_names::pallet::Error + * Lookup468: pallet_web3_names::pallet::Error **/ PalletWeb3NamesError: { _enum: ['InsufficientFunds', 'AlreadyExists', 'NotFound', 'OwnerAlreadyExists', 'OwnerNotFound', 'Banned', 'NotBanned', 'AlreadyBanned', 'NotAuthorized', 'TooShort', 'TooLong', 'InvalidCharacter'] }, /** - * Lookup457: public_credentials::credentials::CredentialEntry> + * Lookup469: public_credentials::credentials::CredentialEntry> **/ PublicCredentialsCredentialsCredentialEntry: { ctypeHash: 'H256', @@ -3899,37 +4037,43 @@ export default { authorizationId: 'Option' }, /** - * Lookup458: public_credentials::pallet::Error + * Lookup470: public_credentials::pallet::Error **/ PublicCredentialsError: { _enum: ['AlreadyAttested', 'NotFound', 'UnableToPayFees', 'InvalidInput', 'NotAuthorized', 'Internal'] }, /** - * Lookup460: polkadot_primitives::v4::UpgradeRestriction + * Lookup471: pallet_migration::pallet::Error **/ - PolkadotPrimitivesV4UpgradeRestriction: { + PalletMigrationError: { + _enum: ['KeyParse'] + }, + /** + * Lookup473: polkadot_primitives::v5::UpgradeRestriction + **/ + PolkadotPrimitivesV5UpgradeRestriction: { _enum: ['Present'] }, /** - * Lookup461: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot + * Lookup474: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot **/ CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: { dmqMqcHead: 'H256', relayDispatchQueueSize: 'CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize', - ingressChannels: 'Vec<(u32,PolkadotPrimitivesV4AbridgedHrmpChannel)>', - egressChannels: 'Vec<(u32,PolkadotPrimitivesV4AbridgedHrmpChannel)>' + ingressChannels: 'Vec<(u32,PolkadotPrimitivesV5AbridgedHrmpChannel)>', + egressChannels: 'Vec<(u32,PolkadotPrimitivesV5AbridgedHrmpChannel)>' }, /** - * Lookup462: cumulus_pallet_parachain_system::relay_state_snapshot::RelayDispachQueueSize + * Lookup475: cumulus_pallet_parachain_system::relay_state_snapshot::RelayDispachQueueSize **/ CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize: { remainingCount: 'u32', remainingSize: 'u32' }, /** - * Lookup465: polkadot_primitives::v4::AbridgedHrmpChannel + * Lookup478: polkadot_primitives::v5::AbridgedHrmpChannel **/ - PolkadotPrimitivesV4AbridgedHrmpChannel: { + PolkadotPrimitivesV5AbridgedHrmpChannel: { maxCapacity: 'u32', maxTotalSize: 'u32', maxMessageSize: 'u32', @@ -3938,9 +4082,9 @@ export default { mqcHead: 'Option' }, /** - * Lookup466: polkadot_primitives::v4::AbridgedHostConfiguration + * Lookup479: polkadot_primitives::v5::AbridgedHostConfiguration **/ - PolkadotPrimitivesV4AbridgedHostConfiguration: { + PolkadotPrimitivesV5AbridgedHostConfiguration: { maxCodeSize: 'u32', maxHeadDataSize: 'u32', maxUpwardQueueCount: 'u32', @@ -3952,27 +4096,27 @@ export default { validationUpgradeDelay: 'u32' }, /** - * Lookup472: polkadot_core_primitives::OutboundHrmpMessage + * Lookup485: polkadot_core_primitives::OutboundHrmpMessage **/ PolkadotCorePrimitivesOutboundHrmpMessage: { recipient: 'u32', data: 'Bytes' }, /** - * Lookup473: cumulus_pallet_parachain_system::CodeUpgradeAuthorization + * Lookup486: cumulus_pallet_parachain_system::CodeUpgradeAuthorization **/ CumulusPalletParachainSystemCodeUpgradeAuthorization: { codeHash: 'H256', checkVersion: 'bool' }, /** - * Lookup474: cumulus_pallet_parachain_system::pallet::Error + * Lookup487: cumulus_pallet_parachain_system::pallet::Error **/ CumulusPalletParachainSystemError: { _enum: ['OverlappingUpgrades', 'ProhibitedByPolkadot', 'TooBig', 'ValidationDataNotAvailable', 'HostConfigurationNotAvailable', 'NotScheduled', 'NothingAuthorized', 'Unauthorized'] }, /** - * Lookup476: cumulus_pallet_xcmp_queue::InboundChannelDetails + * Lookup489: cumulus_pallet_xcmp_queue::InboundChannelDetails **/ CumulusPalletXcmpQueueInboundChannelDetails: { sender: 'u32', @@ -3980,19 +4124,19 @@ export default { messageMetadata: 'Vec<(u32,PolkadotParachainPrimitivesXcmpMessageFormat)>' }, /** - * Lookup477: cumulus_pallet_xcmp_queue::InboundState + * Lookup490: cumulus_pallet_xcmp_queue::InboundState **/ CumulusPalletXcmpQueueInboundState: { _enum: ['Ok', 'Suspended'] }, /** - * Lookup480: polkadot_parachain::primitives::XcmpMessageFormat + * Lookup493: polkadot_parachain::primitives::XcmpMessageFormat **/ PolkadotParachainPrimitivesXcmpMessageFormat: { _enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals'] }, /** - * Lookup483: cumulus_pallet_xcmp_queue::OutboundChannelDetails + * Lookup496: cumulus_pallet_xcmp_queue::OutboundChannelDetails **/ CumulusPalletXcmpQueueOutboundChannelDetails: { recipient: 'u32', @@ -4002,13 +4146,13 @@ export default { lastIndex: 'u16' }, /** - * Lookup484: cumulus_pallet_xcmp_queue::OutboundState + * Lookup497: cumulus_pallet_xcmp_queue::OutboundState **/ CumulusPalletXcmpQueueOutboundState: { _enum: ['Ok', 'Suspended'] }, /** - * Lookup486: cumulus_pallet_xcmp_queue::QueueConfigData + * Lookup499: cumulus_pallet_xcmp_queue::QueueConfigData **/ CumulusPalletXcmpQueueQueueConfigData: { suspendThreshold: 'u32', @@ -4019,29 +4163,92 @@ export default { xcmpMaxIndividualWeight: 'SpWeightsWeightV2Weight' }, /** - * Lookup488: cumulus_pallet_xcmp_queue::pallet::Error + * Lookup501: cumulus_pallet_xcmp_queue::pallet::Error **/ CumulusPalletXcmpQueueError: { _enum: ['FailedToSend', 'BadXcmOrigin', 'BadXcm', 'BadOverweightIndex', 'WeightOverLimit'] }, /** - * Lookup489: pallet_xcm::pallet::Error + * Lookup502: pallet_xcm::pallet::QueryStatus + **/ + PalletXcmQueryStatus: { + _enum: { + Pending: { + responder: 'XcmVersionedMultiLocation', + maybeMatchQuerier: 'Option', + maybeNotify: 'Option<(u8,u8)>', + timeout: 'u64', + }, + VersionNotifier: { + origin: 'XcmVersionedMultiLocation', + isActive: 'bool', + }, + Ready: { + response: 'XcmVersionedResponse', + at: 'u64' + } + } + }, + /** + * Lookup506: xcm::VersionedResponse + **/ + XcmVersionedResponse: { + _enum: { + __Unused0: 'Null', + __Unused1: 'Null', + V2: 'XcmV2Response', + V3: 'XcmV3Response' + } + }, + /** + * Lookup512: pallet_xcm::pallet::VersionMigrationStage + **/ + PalletXcmVersionMigrationStage: { + _enum: { + MigrateSupportedVersion: 'Null', + MigrateVersionNotifiers: 'Null', + NotifyCurrentTargets: 'Option', + MigrateAndNotifyOldTargets: 'Null' + } + }, + /** + * Lookup515: xcm::VersionedAssetId + **/ + XcmVersionedAssetId: { + _enum: { + __Unused0: 'Null', + __Unused1: 'Null', + __Unused2: 'Null', + V3: 'XcmV3MultiassetAssetId' + } + }, + /** + * Lookup516: pallet_xcm::pallet::RemoteLockedFungibleRecord + **/ + PalletXcmRemoteLockedFungibleRecord: { + amount: 'u128', + owner: 'XcmVersionedMultiLocation', + locker: 'XcmVersionedMultiLocation', + consumers: 'Vec<([u8;8],u128)>' + }, + /** + * Lookup523: pallet_xcm::pallet::Error **/ PalletXcmError: { _enum: ['Unreachable', 'SendFailure', 'Filtered', 'UnweighableMessage', 'DestinationNotInvertible', 'Empty', 'CannotReanchor', 'TooManyAssets', 'InvalidOrigin', 'BadVersion', 'BadLocation', 'NoSubscription', 'AlreadySubscribed', 'InvalidAsset', 'LowBalance', 'TooManyLocks', 'AccountNotSovereign', 'FeesNotMet', 'LockNotFound', 'InUse'] }, /** - * Lookup490: cumulus_pallet_xcm::pallet::Error + * Lookup524: cumulus_pallet_xcm::pallet::Error **/ CumulusPalletXcmError: 'Null', /** - * Lookup491: cumulus_pallet_dmp_queue::ConfigData + * Lookup525: cumulus_pallet_dmp_queue::ConfigData **/ CumulusPalletDmpQueueConfigData: { maxIndividual: 'SpWeightsWeightV2Weight' }, /** - * Lookup492: cumulus_pallet_dmp_queue::PageIndexData + * Lookup526: cumulus_pallet_dmp_queue::PageIndexData **/ CumulusPalletDmpQueuePageIndexData: { beginUsed: 'u32', @@ -4049,37 +4256,37 @@ export default { overweightCount: 'u64' }, /** - * Lookup495: cumulus_pallet_dmp_queue::pallet::Error + * Lookup529: cumulus_pallet_dmp_queue::pallet::Error **/ CumulusPalletDmpQueueError: { _enum: ['Unknown', 'OverLimit'] }, /** - * Lookup498: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender + * Lookup532: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender **/ FrameSystemExtensionsCheckNonZeroSender: 'Null', /** - * Lookup499: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup533: frame_system::extensions::check_spec_version::CheckSpecVersion **/ FrameSystemExtensionsCheckSpecVersion: 'Null', /** - * Lookup500: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup534: frame_system::extensions::check_tx_version::CheckTxVersion **/ FrameSystemExtensionsCheckTxVersion: 'Null', /** - * Lookup501: frame_system::extensions::check_genesis::CheckGenesis + * Lookup535: frame_system::extensions::check_genesis::CheckGenesis **/ FrameSystemExtensionsCheckGenesis: 'Null', /** - * Lookup504: frame_system::extensions::check_nonce::CheckNonce + * Lookup538: frame_system::extensions::check_nonce::CheckNonce **/ FrameSystemExtensionsCheckNonce: 'Compact', /** - * Lookup505: frame_system::extensions::check_weight::CheckWeight + * Lookup539: frame_system::extensions::check_weight::CheckWeight **/ FrameSystemExtensionsCheckWeight: 'Null', /** - * Lookup506: pallet_transaction_payment::ChargeTransactionPayment + * Lookup540: pallet_transaction_payment::ChargeTransactionPayment **/ PalletTransactionPaymentChargeTransactionPayment: 'Compact' }; diff --git a/packages/augment-api/src/interfaces/registry.ts b/packages/augment-api/src/interfaces/registry.ts index d942cc164..1a828d420 100644 --- a/packages/augment-api/src/interfaces/registry.ts +++ b/packages/augment-api/src/interfaces/registry.ts @@ -5,7 +5,7 @@ // this is required to allow for ambient/previous definitions import '@polkadot/types/types/registry'; -import type { AttestationAttestationsAttestationDetails, AttestationCall, AttestationError, AttestationEvent, AttestationHoldReason, CtypeCall, CtypeCtypeEntry, CtypeError, CtypeEvent, CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, DelegationAccessControlDelegationAc, DelegationCall, DelegationDelegationHierarchyDelegationDetails, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DelegationDelegationHierarchyPermissions, DelegationError, DelegationEvent, DelegationHoldReason, DidCall, DidDidDetails, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidPublicKey, DidDidDetailsDidPublicKeyDetails, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidError, DidEvent, DidHoldReason, DidOriginDidRawOrigin, DidServiceEndpointsDidEndpoint, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportPreimagesBounded, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonZeroSender, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, KiltAssetDidsAssetV1AssetId, KiltAssetDidsAssetV1EvmSmartContractFungibleReference, KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference, KiltAssetDidsAssetV1GenericAssetId, KiltAssetDidsChainV1ChainId, KiltAssetDidsChainV1GenericChainId, KiltAssetDidsChainV1GenesisHexHash32Reference, KiltAssetDidsV1AssetDid, KiltSupportDeposit, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesIdAmountRuntimeFreezeReason, PalletBalancesIdAmountRuntimeHoldReason, PalletBalancesReasons, PalletBalancesReserveData, PalletCollectiveCall, PalletCollectiveError, PalletCollectiveEvent, PalletCollectiveRawOrigin, PalletCollectiveVotes, PalletDemocracyCall, PalletDemocracyConviction, PalletDemocracyDelegations, PalletDemocracyError, PalletDemocracyEvent, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyReferendumStatus, PalletDemocracyTally, PalletDemocracyVoteAccountVote, PalletDemocracyVotePriorLock, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupAccountAccountId20, PalletDidLookupAccountEthereumSignature, PalletDidLookupAssociateAccountRequest, PalletDidLookupCall, PalletDidLookupConnectionRecord, PalletDidLookupError, PalletDidLookupEvent, PalletDidLookupHoldReason, PalletDidLookupLinkableAccountLinkableAccountId, PalletIndicesCall, PalletIndicesError, PalletIndicesEvent, PalletMembershipCall, PalletMembershipError, PalletMembershipEvent, PalletMultisigCall, PalletMultisigError, PalletMultisigEvent, PalletMultisigMultisig, PalletMultisigTimepoint, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyCall, PalletProxyError, PalletProxyEvent, PalletProxyProxyDefinition, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletTimestampCall, PalletTipsCall, PalletTipsError, PalletTipsEvent, PalletTipsOpenTip, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletVestingCall, PalletVestingError, PalletVestingEvent, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesCall, PalletWeb3NamesError, PalletWeb3NamesEvent, PalletWeb3NamesHoldReason, PalletWeb3NamesWeb3NameWeb3NameOwnership, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, ParachainStakingCall, ParachainStakingCandidate, ParachainStakingCandidateStatus, ParachainStakingDelegationCounter, ParachainStakingError, ParachainStakingEvent, ParachainStakingFreezeReason, ParachainStakingInflationInflationInfo, ParachainStakingInflationRewardRate, ParachainStakingInflationStakingInfo, ParachainStakingRoundInfo, ParachainStakingSetOrderedSet, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV4AbridgedHostConfiguration, PolkadotPrimitivesV4AbridgedHrmpChannel, PolkadotPrimitivesV4PersistedValidationData, PolkadotPrimitivesV4UpgradeRestriction, PublicCredentialsCall, PublicCredentialsCredentialsCredential, PublicCredentialsCredentialsCredentialEntry, PublicCredentialsError, PublicCredentialsEvent, PublicCredentialsHoldReason, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, RuntimeCommonAuthorizationPalletAuthorize, RuntimeCommonConstantsDelegationMaxChildren, RuntimeCommonConstantsDidMaxNewKeyAgreementKeys, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaPublic, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeRuntime, SpiritnetRuntimeRuntimeFreezeReason, SpiritnetRuntimeRuntimeHoldReason, SpiritnetRuntimeSessionKeys, XcmDoubleEncoded, XcmV2BodyId, XcmV2BodyPart, XcmV2Instruction, XcmV2Junction, XcmV2MultiAsset, XcmV2MultiLocation, XcmV2MultiassetAssetId, XcmV2MultiassetAssetInstance, XcmV2MultiassetFungibility, XcmV2MultiassetMultiAssetFilter, XcmV2MultiassetMultiAssets, XcmV2MultiassetWildFungibility, XcmV2MultiassetWildMultiAsset, XcmV2MultilocationJunctions, XcmV2NetworkId, XcmV2OriginKind, XcmV2Response, XcmV2TraitsError, XcmV2WeightLimit, XcmV2Xcm, XcmV3Instruction, XcmV3Junction, XcmV3JunctionBodyId, XcmV3JunctionBodyPart, XcmV3JunctionNetworkId, XcmV3Junctions, XcmV3MaybeErrorCode, XcmV3MultiAsset, XcmV3MultiLocation, XcmV3MultiassetAssetId, XcmV3MultiassetAssetInstance, XcmV3MultiassetFungibility, XcmV3MultiassetMultiAssetFilter, XcmV3MultiassetMultiAssets, XcmV3MultiassetWildFungibility, XcmV3MultiassetWildMultiAsset, XcmV3PalletInfo, XcmV3QueryResponseInfo, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3WeightLimit, XcmV3Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; +import type { AttestationAttestationsAttestationDetails, AttestationCall, AttestationError, AttestationEvent, AttestationHoldReason, CtypeCall, CtypeCtypeEntry, CtypeError, CtypeEvent, CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, DelegationAccessControlDelegationAc, DelegationCall, DelegationDelegationHierarchyDelegationDetails, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DelegationDelegationHierarchyPermissions, DelegationError, DelegationEvent, DelegationHoldReason, DidCall, DidDidDetails, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidPublicKey, DidDidDetailsDidPublicKeyDetails, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidError, DidEvent, DidHoldReason, DidOriginDidRawOrigin, DidServiceEndpointsDidEndpoint, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportPreimagesBounded, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonZeroSender, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, KiltAssetDidsAssetV1AssetId, KiltAssetDidsAssetV1EvmSmartContractFungibleReference, KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference, KiltAssetDidsAssetV1GenericAssetId, KiltAssetDidsChainV1ChainId, KiltAssetDidsChainV1GenericChainId, KiltAssetDidsChainV1GenesisHexHash32Reference, KiltAssetDidsV1AssetDid, KiltSupportDeposit, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesIdAmountRuntimeFreezeReason, PalletBalancesIdAmountRuntimeHoldReason, PalletBalancesReasons, PalletBalancesReserveData, PalletCollectiveCall, PalletCollectiveError, PalletCollectiveEvent, PalletCollectiveRawOrigin, PalletCollectiveVotes, PalletDemocracyCall, PalletDemocracyConviction, PalletDemocracyDelegations, PalletDemocracyError, PalletDemocracyEvent, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyReferendumStatus, PalletDemocracyTally, PalletDemocracyVoteAccountVote, PalletDemocracyVotePriorLock, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupAccountAccountId20, PalletDidLookupAccountEthereumSignature, PalletDidLookupAssociateAccountRequest, PalletDidLookupCall, PalletDidLookupConnectionRecord, PalletDidLookupError, PalletDidLookupEvent, PalletDidLookupHoldReason, PalletDidLookupLinkableAccountLinkableAccountId, PalletIndicesCall, PalletIndicesError, PalletIndicesEvent, PalletMembershipCall, PalletMembershipError, PalletMembershipEvent, PalletMigrationCall, PalletMigrationEntriesToMigrate, PalletMigrationError, PalletMigrationEvent, PalletMultisigCall, PalletMultisigError, PalletMultisigEvent, PalletMultisigMultisig, PalletMultisigTimepoint, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyCall, PalletProxyError, PalletProxyEvent, PalletProxyProxyDefinition, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletTimestampCall, PalletTipsCall, PalletTipsError, PalletTipsEvent, PalletTipsOpenTip, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletVestingCall, PalletVestingError, PalletVestingEvent, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesCall, PalletWeb3NamesError, PalletWeb3NamesEvent, PalletWeb3NamesHoldReason, PalletWeb3NamesWeb3NameWeb3NameOwnership, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PalletXcmQueryStatus, PalletXcmRemoteLockedFungibleRecord, PalletXcmVersionMigrationStage, ParachainInfoCall, ParachainStakingCall, ParachainStakingCandidate, ParachainStakingCandidateStatus, ParachainStakingDelegationCounter, ParachainStakingError, ParachainStakingEvent, ParachainStakingFreezeReason, ParachainStakingInflationInflationInfo, ParachainStakingInflationRewardRate, ParachainStakingInflationStakingInfo, ParachainStakingRoundInfo, ParachainStakingSetOrderedSet, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV5AbridgedHostConfiguration, PolkadotPrimitivesV5AbridgedHrmpChannel, PolkadotPrimitivesV5PersistedValidationData, PolkadotPrimitivesV5UpgradeRestriction, PublicCredentialsCall, PublicCredentialsCredentialsCredential, PublicCredentialsCredentialsCredentialEntry, PublicCredentialsError, PublicCredentialsEvent, PublicCredentialsHoldReason, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, RuntimeCommonAuthorizationPalletAuthorize, RuntimeCommonConstantsDelegationMaxChildren, RuntimeCommonConstantsDidMaxNewKeyAgreementKeys, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaPublic, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeRuntime, SpiritnetRuntimeRuntimeFreezeReason, SpiritnetRuntimeRuntimeHoldReason, SpiritnetRuntimeSessionKeys, XcmDoubleEncoded, XcmV2BodyId, XcmV2BodyPart, XcmV2Instruction, XcmV2Junction, XcmV2MultiAsset, XcmV2MultiLocation, XcmV2MultiassetAssetId, XcmV2MultiassetAssetInstance, XcmV2MultiassetFungibility, XcmV2MultiassetMultiAssetFilter, XcmV2MultiassetMultiAssets, XcmV2MultiassetWildFungibility, XcmV2MultiassetWildMultiAsset, XcmV2MultilocationJunctions, XcmV2NetworkId, XcmV2OriginKind, XcmV2Response, XcmV2TraitsError, XcmV2WeightLimit, XcmV2Xcm, XcmV3Instruction, XcmV3Junction, XcmV3JunctionBodyId, XcmV3JunctionBodyPart, XcmV3JunctionNetworkId, XcmV3Junctions, XcmV3MaybeErrorCode, XcmV3MultiAsset, XcmV3MultiLocation, XcmV3MultiassetAssetId, XcmV3MultiassetAssetInstance, XcmV3MultiassetFungibility, XcmV3MultiassetMultiAssetFilter, XcmV3MultiassetMultiAssets, XcmV3MultiassetWildFungibility, XcmV3MultiassetWildMultiAsset, XcmV3PalletInfo, XcmV3QueryResponseInfo, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3WeightLimit, XcmV3Xcm, XcmVersionedAssetId, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedResponse, XcmVersionedXcm } from '@polkadot/types/lookup'; declare module '@polkadot/types/types/registry' { interface InterfaceTypes { @@ -141,6 +141,10 @@ declare module '@polkadot/types/types/registry' { PalletMembershipCall: PalletMembershipCall; PalletMembershipError: PalletMembershipError; PalletMembershipEvent: PalletMembershipEvent; + PalletMigrationCall: PalletMigrationCall; + PalletMigrationEntriesToMigrate: PalletMigrationEntriesToMigrate; + PalletMigrationError: PalletMigrationError; + PalletMigrationEvent: PalletMigrationEvent; PalletMultisigCall: PalletMultisigCall; PalletMultisigError: PalletMultisigError; PalletMultisigEvent: PalletMultisigEvent; @@ -191,6 +195,10 @@ declare module '@polkadot/types/types/registry' { PalletXcmError: PalletXcmError; PalletXcmEvent: PalletXcmEvent; PalletXcmOrigin: PalletXcmOrigin; + PalletXcmQueryStatus: PalletXcmQueryStatus; + PalletXcmRemoteLockedFungibleRecord: PalletXcmRemoteLockedFungibleRecord; + PalletXcmVersionMigrationStage: PalletXcmVersionMigrationStage; + ParachainInfoCall: ParachainInfoCall; ParachainStakingCall: ParachainStakingCall; ParachainStakingCandidate: ParachainStakingCandidate; ParachainStakingCandidateStatus: ParachainStakingCandidateStatus; @@ -209,10 +217,10 @@ declare module '@polkadot/types/types/registry' { PolkadotCorePrimitivesInboundHrmpMessage: PolkadotCorePrimitivesInboundHrmpMessage; PolkadotCorePrimitivesOutboundHrmpMessage: PolkadotCorePrimitivesOutboundHrmpMessage; PolkadotParachainPrimitivesXcmpMessageFormat: PolkadotParachainPrimitivesXcmpMessageFormat; - PolkadotPrimitivesV4AbridgedHostConfiguration: PolkadotPrimitivesV4AbridgedHostConfiguration; - PolkadotPrimitivesV4AbridgedHrmpChannel: PolkadotPrimitivesV4AbridgedHrmpChannel; - PolkadotPrimitivesV4PersistedValidationData: PolkadotPrimitivesV4PersistedValidationData; - PolkadotPrimitivesV4UpgradeRestriction: PolkadotPrimitivesV4UpgradeRestriction; + PolkadotPrimitivesV5AbridgedHostConfiguration: PolkadotPrimitivesV5AbridgedHostConfiguration; + PolkadotPrimitivesV5AbridgedHrmpChannel: PolkadotPrimitivesV5AbridgedHrmpChannel; + PolkadotPrimitivesV5PersistedValidationData: PolkadotPrimitivesV5PersistedValidationData; + PolkadotPrimitivesV5UpgradeRestriction: PolkadotPrimitivesV5UpgradeRestriction; PublicCredentialsCall: PublicCredentialsCall; PublicCredentialsCredentialsCredential: PublicCredentialsCredentialsCredential; PublicCredentialsCredentialsCredentialEntry: PublicCredentialsCredentialsCredentialEntry; @@ -295,8 +303,10 @@ declare module '@polkadot/types/types/registry' { XcmV3TraitsOutcome: XcmV3TraitsOutcome; XcmV3WeightLimit: XcmV3WeightLimit; XcmV3Xcm: XcmV3Xcm; + XcmVersionedAssetId: XcmVersionedAssetId; XcmVersionedMultiAssets: XcmVersionedMultiAssets; XcmVersionedMultiLocation: XcmVersionedMultiLocation; + XcmVersionedResponse: XcmVersionedResponse; XcmVersionedXcm: XcmVersionedXcm; } // InterfaceTypes } // declare module diff --git a/packages/augment-api/src/interfaces/types-lookup.ts b/packages/augment-api/src/interfaces/types-lookup.ts index 134b56e22..5e40e6f2f 100644 --- a/packages/augment-api/src/interfaces/types-lookup.ts +++ b/packages/augment-api/src/interfaces/types-lookup.ts @@ -997,7 +997,27 @@ declare module '@polkadot/types/lookup' { readonly id: Option; } - /** @name CumulusPalletParachainSystemEvent (104) */ + /** @name PalletMigrationEvent (104) */ + interface PalletMigrationEvent extends Enum { + readonly isEntriesUpdated: boolean; + readonly asEntriesUpdated: PalletMigrationEntriesToMigrate; + readonly type: 'EntriesUpdated'; + } + + /** @name PalletMigrationEntriesToMigrate (105) */ + interface PalletMigrationEntriesToMigrate extends Struct { + readonly attestation: Vec; + readonly delegation: Vec; + readonly did: Vec; + readonly lookup: Vec; + readonly w3n: Vec; + readonly publicCredentials: Vec>; + } + + /** @name SpiritnetRuntimeRuntime (106) */ + type SpiritnetRuntimeRuntime = Null; + + /** @name CumulusPalletParachainSystemEvent (118) */ interface CumulusPalletParachainSystemEvent extends Enum { readonly isValidationFunctionStored: boolean; readonly isValidationFunctionApplied: boolean; @@ -1025,30 +1045,32 @@ declare module '@polkadot/types/lookup' { readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed' | 'UpwardMessageSent'; } - /** @name CumulusPalletXcmpQueueEvent (105) */ + /** @name CumulusPalletXcmpQueueEvent (119) */ interface CumulusPalletXcmpQueueEvent extends Enum { readonly isSuccess: boolean; readonly asSuccess: { - readonly messageHash: Option; + readonly messageHash: U8aFixed; + readonly messageId: U8aFixed; readonly weight: SpWeightsWeightV2Weight; } & Struct; readonly isFail: boolean; readonly asFail: { - readonly messageHash: Option; + readonly messageHash: U8aFixed; + readonly messageId: U8aFixed; readonly error: XcmV3TraitsError; readonly weight: SpWeightsWeightV2Weight; } & Struct; readonly isBadVersion: boolean; readonly asBadVersion: { - readonly messageHash: Option; + readonly messageHash: U8aFixed; } & Struct; readonly isBadFormat: boolean; readonly asBadFormat: { - readonly messageHash: Option; + readonly messageHash: U8aFixed; } & Struct; readonly isXcmpMessageSent: boolean; readonly asXcmpMessageSent: { - readonly messageHash: Option; + readonly messageHash: U8aFixed; } & Struct; readonly isOverweightEnqueued: boolean; readonly asOverweightEnqueued: { @@ -1065,7 +1087,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced'; } - /** @name XcmV3TraitsError (106) */ + /** @name XcmV3TraitsError (120) */ interface XcmV3TraitsError extends Enum { readonly isOverflow: boolean; readonly isUnimplemented: boolean; @@ -1112,58 +1134,144 @@ declare module '@polkadot/types/lookup' { readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'LocationFull' | 'LocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'ExpectationFalse' | 'PalletNotFound' | 'NameMismatch' | 'VersionIncompatible' | 'HoldingWouldOverflow' | 'ExportError' | 'ReanchorFailed' | 'NoDeal' | 'FeesNotMet' | 'LockError' | 'NoPermission' | 'Unanchored' | 'NotDepositable' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable' | 'ExceedsStackLimit'; } - /** @name PalletXcmEvent (108) */ + /** @name PalletXcmEvent (122) */ interface PalletXcmEvent extends Enum { readonly isAttempted: boolean; - readonly asAttempted: XcmV3TraitsOutcome; + readonly asAttempted: { + readonly outcome: XcmV3TraitsOutcome; + } & Struct; readonly isSent: boolean; - readonly asSent: ITuple<[XcmV3MultiLocation, XcmV3MultiLocation, XcmV3Xcm]>; + readonly asSent: { + readonly origin: XcmV3MultiLocation; + readonly destination: XcmV3MultiLocation; + readonly message: XcmV3Xcm; + readonly messageId: U8aFixed; + } & Struct; readonly isUnexpectedResponse: boolean; - readonly asUnexpectedResponse: ITuple<[XcmV3MultiLocation, u64]>; + readonly asUnexpectedResponse: { + readonly origin: XcmV3MultiLocation; + readonly queryId: u64; + } & Struct; readonly isResponseReady: boolean; - readonly asResponseReady: ITuple<[u64, XcmV3Response]>; + readonly asResponseReady: { + readonly queryId: u64; + readonly response: XcmV3Response; + } & Struct; readonly isNotified: boolean; - readonly asNotified: ITuple<[u64, u8, u8]>; + readonly asNotified: { + readonly queryId: u64; + readonly palletIndex: u8; + readonly callIndex: u8; + } & Struct; readonly isNotifyOverweight: boolean; - readonly asNotifyOverweight: ITuple<[u64, u8, u8, SpWeightsWeightV2Weight, SpWeightsWeightV2Weight]>; + readonly asNotifyOverweight: { + readonly queryId: u64; + readonly palletIndex: u8; + readonly callIndex: u8; + readonly actualWeight: SpWeightsWeightV2Weight; + readonly maxBudgetedWeight: SpWeightsWeightV2Weight; + } & Struct; readonly isNotifyDispatchError: boolean; - readonly asNotifyDispatchError: ITuple<[u64, u8, u8]>; + readonly asNotifyDispatchError: { + readonly queryId: u64; + readonly palletIndex: u8; + readonly callIndex: u8; + } & Struct; readonly isNotifyDecodeFailed: boolean; - readonly asNotifyDecodeFailed: ITuple<[u64, u8, u8]>; + readonly asNotifyDecodeFailed: { + readonly queryId: u64; + readonly palletIndex: u8; + readonly callIndex: u8; + } & Struct; readonly isInvalidResponder: boolean; - readonly asInvalidResponder: ITuple<[XcmV3MultiLocation, u64, Option]>; + readonly asInvalidResponder: { + readonly origin: XcmV3MultiLocation; + readonly queryId: u64; + readonly expectedLocation: Option; + } & Struct; readonly isInvalidResponderVersion: boolean; - readonly asInvalidResponderVersion: ITuple<[XcmV3MultiLocation, u64]>; + readonly asInvalidResponderVersion: { + readonly origin: XcmV3MultiLocation; + readonly queryId: u64; + } & Struct; readonly isResponseTaken: boolean; - readonly asResponseTaken: u64; + readonly asResponseTaken: { + readonly queryId: u64; + } & Struct; readonly isAssetsTrapped: boolean; - readonly asAssetsTrapped: ITuple<[H256, XcmV3MultiLocation, XcmVersionedMultiAssets]>; + readonly asAssetsTrapped: { + readonly hash_: H256; + readonly origin: XcmV3MultiLocation; + readonly assets: XcmVersionedMultiAssets; + } & Struct; readonly isVersionChangeNotified: boolean; - readonly asVersionChangeNotified: ITuple<[XcmV3MultiLocation, u32, XcmV3MultiassetMultiAssets]>; + readonly asVersionChangeNotified: { + readonly destination: XcmV3MultiLocation; + readonly result: u32; + readonly cost: XcmV3MultiassetMultiAssets; + readonly messageId: U8aFixed; + } & Struct; readonly isSupportedVersionChanged: boolean; - readonly asSupportedVersionChanged: ITuple<[XcmV3MultiLocation, u32]>; + readonly asSupportedVersionChanged: { + readonly location: XcmV3MultiLocation; + readonly version: u32; + } & Struct; readonly isNotifyTargetSendFail: boolean; - readonly asNotifyTargetSendFail: ITuple<[XcmV3MultiLocation, u64, XcmV3TraitsError]>; + readonly asNotifyTargetSendFail: { + readonly location: XcmV3MultiLocation; + readonly queryId: u64; + readonly error: XcmV3TraitsError; + } & Struct; readonly isNotifyTargetMigrationFail: boolean; - readonly asNotifyTargetMigrationFail: ITuple<[XcmVersionedMultiLocation, u64]>; + readonly asNotifyTargetMigrationFail: { + readonly location: XcmVersionedMultiLocation; + readonly queryId: u64; + } & Struct; readonly isInvalidQuerierVersion: boolean; - readonly asInvalidQuerierVersion: ITuple<[XcmV3MultiLocation, u64]>; + readonly asInvalidQuerierVersion: { + readonly origin: XcmV3MultiLocation; + readonly queryId: u64; + } & Struct; readonly isInvalidQuerier: boolean; - readonly asInvalidQuerier: ITuple<[XcmV3MultiLocation, u64, XcmV3MultiLocation, Option]>; + readonly asInvalidQuerier: { + readonly origin: XcmV3MultiLocation; + readonly queryId: u64; + readonly expectedQuerier: XcmV3MultiLocation; + readonly maybeActualQuerier: Option; + } & Struct; readonly isVersionNotifyStarted: boolean; - readonly asVersionNotifyStarted: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; + readonly asVersionNotifyStarted: { + readonly destination: XcmV3MultiLocation; + readonly cost: XcmV3MultiassetMultiAssets; + readonly messageId: U8aFixed; + } & Struct; readonly isVersionNotifyRequested: boolean; - readonly asVersionNotifyRequested: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; + readonly asVersionNotifyRequested: { + readonly destination: XcmV3MultiLocation; + readonly cost: XcmV3MultiassetMultiAssets; + readonly messageId: U8aFixed; + } & Struct; readonly isVersionNotifyUnrequested: boolean; - readonly asVersionNotifyUnrequested: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; + readonly asVersionNotifyUnrequested: { + readonly destination: XcmV3MultiLocation; + readonly cost: XcmV3MultiassetMultiAssets; + readonly messageId: U8aFixed; + } & Struct; readonly isFeesPaid: boolean; - readonly asFeesPaid: ITuple<[XcmV3MultiLocation, XcmV3MultiassetMultiAssets]>; + readonly asFeesPaid: { + readonly paying: XcmV3MultiLocation; + readonly fees: XcmV3MultiassetMultiAssets; + } & Struct; readonly isAssetsClaimed: boolean; - readonly asAssetsClaimed: ITuple<[H256, XcmV3MultiLocation, XcmVersionedMultiAssets]>; + readonly asAssetsClaimed: { + readonly hash_: H256; + readonly origin: XcmV3MultiLocation; + readonly assets: XcmVersionedMultiAssets; + } & Struct; readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail' | 'InvalidQuerierVersion' | 'InvalidQuerier' | 'VersionNotifyStarted' | 'VersionNotifyRequested' | 'VersionNotifyUnrequested' | 'FeesPaid' | 'AssetsClaimed'; } - /** @name XcmV3TraitsOutcome (109) */ + /** @name XcmV3TraitsOutcome (123) */ interface XcmV3TraitsOutcome extends Enum { readonly isComplete: boolean; readonly asComplete: SpWeightsWeightV2Weight; @@ -1174,13 +1282,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Complete' | 'Incomplete' | 'Error'; } - /** @name XcmV3MultiLocation (110) */ + /** @name XcmV3MultiLocation (124) */ interface XcmV3MultiLocation extends Struct { readonly parents: u8; readonly interior: XcmV3Junctions; } - /** @name XcmV3Junctions (111) */ + /** @name XcmV3Junctions (125) */ interface XcmV3Junctions extends Enum { readonly isHere: boolean; readonly isX1: boolean; @@ -1202,7 +1310,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; } - /** @name XcmV3Junction (112) */ + /** @name XcmV3Junction (126) */ interface XcmV3Junction extends Enum { readonly isParachain: boolean; readonly asParachain: Compact; @@ -1241,7 +1349,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality' | 'GlobalConsensus'; } - /** @name XcmV3JunctionNetworkId (115) */ + /** @name XcmV3JunctionNetworkId (129) */ interface XcmV3JunctionNetworkId extends Enum { readonly isByGenesis: boolean; readonly asByGenesis: U8aFixed; @@ -1264,7 +1372,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ByGenesis' | 'ByFork' | 'Polkadot' | 'Kusama' | 'Westend' | 'Rococo' | 'Wococo' | 'Ethereum' | 'BitcoinCore' | 'BitcoinCash'; } - /** @name XcmV3JunctionBodyId (117) */ + /** @name XcmV3JunctionBodyId (131) */ interface XcmV3JunctionBodyId extends Enum { readonly isUnit: boolean; readonly isMoniker: boolean; @@ -1281,7 +1389,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unit' | 'Moniker' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; } - /** @name XcmV3JunctionBodyPart (118) */ + /** @name XcmV3JunctionBodyPart (132) */ interface XcmV3JunctionBodyPart extends Enum { readonly isVoice: boolean; readonly isMembers: boolean; @@ -1306,10 +1414,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; } - /** @name XcmV3Xcm (119) */ + /** @name XcmV3Xcm (133) */ interface XcmV3Xcm extends Vec {} - /** @name XcmV3Instruction (121) */ + /** @name XcmV3Instruction (135) */ interface XcmV3Instruction extends Enum { readonly isWithdrawAsset: boolean; readonly asWithdrawAsset: XcmV3MultiassetMultiAssets; @@ -1491,16 +1599,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'ReportHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion' | 'BurnAsset' | 'ExpectAsset' | 'ExpectOrigin' | 'ExpectError' | 'ExpectTransactStatus' | 'QueryPallet' | 'ExpectPallet' | 'ReportTransactStatus' | 'ClearTransactStatus' | 'UniversalOrigin' | 'ExportMessage' | 'LockAsset' | 'UnlockAsset' | 'NoteUnlockable' | 'RequestUnlock' | 'SetFeesMode' | 'SetTopic' | 'ClearTopic' | 'AliasOrigin' | 'UnpaidExecution'; } - /** @name XcmV3MultiassetMultiAssets (122) */ + /** @name XcmV3MultiassetMultiAssets (136) */ interface XcmV3MultiassetMultiAssets extends Vec {} - /** @name XcmV3MultiAsset (124) */ + /** @name XcmV3MultiAsset (138) */ interface XcmV3MultiAsset extends Struct { readonly id: XcmV3MultiassetAssetId; readonly fun: XcmV3MultiassetFungibility; } - /** @name XcmV3MultiassetAssetId (125) */ + /** @name XcmV3MultiassetAssetId (139) */ interface XcmV3MultiassetAssetId extends Enum { readonly isConcrete: boolean; readonly asConcrete: XcmV3MultiLocation; @@ -1509,7 +1617,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Concrete' | 'Abstract'; } - /** @name XcmV3MultiassetFungibility (126) */ + /** @name XcmV3MultiassetFungibility (140) */ interface XcmV3MultiassetFungibility extends Enum { readonly isFungible: boolean; readonly asFungible: Compact; @@ -1518,7 +1626,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV3MultiassetAssetInstance (127) */ + /** @name XcmV3MultiassetAssetInstance (141) */ interface XcmV3MultiassetAssetInstance extends Enum { readonly isUndefined: boolean; readonly isIndex: boolean; @@ -1534,7 +1642,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32'; } - /** @name XcmV3Response (129) */ + /** @name XcmV3Response (143) */ interface XcmV3Response extends Enum { readonly isNull: boolean; readonly isAssets: boolean; @@ -1550,7 +1658,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version' | 'PalletsInfo' | 'DispatchResult'; } - /** @name XcmV3PalletInfo (133) */ + /** @name XcmV3PalletInfo (147) */ interface XcmV3PalletInfo extends Struct { readonly index: Compact; readonly name: Bytes; @@ -1560,7 +1668,7 @@ declare module '@polkadot/types/lookup' { readonly patch: Compact; } - /** @name XcmV3MaybeErrorCode (136) */ + /** @name XcmV3MaybeErrorCode (150) */ interface XcmV3MaybeErrorCode extends Enum { readonly isSuccess: boolean; readonly isError: boolean; @@ -1570,7 +1678,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Success' | 'Error' | 'TruncatedError'; } - /** @name XcmV2OriginKind (139) */ + /** @name XcmV2OriginKind (153) */ interface XcmV2OriginKind extends Enum { readonly isNative: boolean; readonly isSovereignAccount: boolean; @@ -1579,19 +1687,19 @@ declare module '@polkadot/types/lookup' { readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm'; } - /** @name XcmDoubleEncoded (140) */ + /** @name XcmDoubleEncoded (154) */ interface XcmDoubleEncoded extends Struct { readonly encoded: Bytes; } - /** @name XcmV3QueryResponseInfo (141) */ + /** @name XcmV3QueryResponseInfo (155) */ interface XcmV3QueryResponseInfo extends Struct { readonly destination: XcmV3MultiLocation; readonly queryId: Compact; readonly maxWeight: SpWeightsWeightV2Weight; } - /** @name XcmV3MultiassetMultiAssetFilter (142) */ + /** @name XcmV3MultiassetMultiAssetFilter (156) */ interface XcmV3MultiassetMultiAssetFilter extends Enum { readonly isDefinite: boolean; readonly asDefinite: XcmV3MultiassetMultiAssets; @@ -1600,7 +1708,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Definite' | 'Wild'; } - /** @name XcmV3MultiassetWildMultiAsset (143) */ + /** @name XcmV3MultiassetWildMultiAsset (157) */ interface XcmV3MultiassetWildMultiAsset extends Enum { readonly isAll: boolean; readonly isAllOf: boolean; @@ -1619,14 +1727,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'All' | 'AllOf' | 'AllCounted' | 'AllOfCounted'; } - /** @name XcmV3MultiassetWildFungibility (144) */ + /** @name XcmV3MultiassetWildFungibility (158) */ interface XcmV3MultiassetWildFungibility extends Enum { readonly isFungible: boolean; readonly isNonFungible: boolean; readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV3WeightLimit (145) */ + /** @name XcmV3WeightLimit (159) */ interface XcmV3WeightLimit extends Enum { readonly isUnlimited: boolean; readonly isLimited: boolean; @@ -1634,7 +1742,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unlimited' | 'Limited'; } - /** @name XcmVersionedMultiAssets (146) */ + /** @name XcmVersionedMultiAssets (160) */ interface XcmVersionedMultiAssets extends Enum { readonly isV2: boolean; readonly asV2: XcmV2MultiassetMultiAssets; @@ -1643,16 +1751,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'V2' | 'V3'; } - /** @name XcmV2MultiassetMultiAssets (147) */ + /** @name XcmV2MultiassetMultiAssets (161) */ interface XcmV2MultiassetMultiAssets extends Vec {} - /** @name XcmV2MultiAsset (149) */ + /** @name XcmV2MultiAsset (163) */ interface XcmV2MultiAsset extends Struct { readonly id: XcmV2MultiassetAssetId; readonly fun: XcmV2MultiassetFungibility; } - /** @name XcmV2MultiassetAssetId (150) */ + /** @name XcmV2MultiassetAssetId (164) */ interface XcmV2MultiassetAssetId extends Enum { readonly isConcrete: boolean; readonly asConcrete: XcmV2MultiLocation; @@ -1661,13 +1769,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Concrete' | 'Abstract'; } - /** @name XcmV2MultiLocation (151) */ + /** @name XcmV2MultiLocation (165) */ interface XcmV2MultiLocation extends Struct { readonly parents: u8; readonly interior: XcmV2MultilocationJunctions; } - /** @name XcmV2MultilocationJunctions (152) */ + /** @name XcmV2MultilocationJunctions (166) */ interface XcmV2MultilocationJunctions extends Enum { readonly isHere: boolean; readonly isX1: boolean; @@ -1689,7 +1797,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; } - /** @name XcmV2Junction (153) */ + /** @name XcmV2Junction (167) */ interface XcmV2Junction extends Enum { readonly isParachain: boolean; readonly asParachain: Compact; @@ -1723,7 +1831,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality'; } - /** @name XcmV2NetworkId (154) */ + /** @name XcmV2NetworkId (168) */ interface XcmV2NetworkId extends Enum { readonly isAny: boolean; readonly isNamed: boolean; @@ -1733,7 +1841,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama'; } - /** @name XcmV2BodyId (156) */ + /** @name XcmV2BodyId (170) */ interface XcmV2BodyId extends Enum { readonly isUnit: boolean; readonly isNamed: boolean; @@ -1750,7 +1858,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; } - /** @name XcmV2BodyPart (157) */ + /** @name XcmV2BodyPart (171) */ interface XcmV2BodyPart extends Enum { readonly isVoice: boolean; readonly isMembers: boolean; @@ -1775,7 +1883,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; } - /** @name XcmV2MultiassetFungibility (158) */ + /** @name XcmV2MultiassetFungibility (172) */ interface XcmV2MultiassetFungibility extends Enum { readonly isFungible: boolean; readonly asFungible: Compact; @@ -1784,7 +1892,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV2MultiassetAssetInstance (159) */ + /** @name XcmV2MultiassetAssetInstance (173) */ interface XcmV2MultiassetAssetInstance extends Enum { readonly isUndefined: boolean; readonly isIndex: boolean; @@ -1802,7 +1910,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob'; } - /** @name XcmVersionedMultiLocation (160) */ + /** @name XcmVersionedMultiLocation (174) */ interface XcmVersionedMultiLocation extends Enum { readonly isV2: boolean; readonly asV2: XcmV2MultiLocation; @@ -1811,7 +1919,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'V2' | 'V3'; } - /** @name CumulusPalletXcmEvent (161) */ + /** @name CumulusPalletXcmEvent (175) */ interface CumulusPalletXcmEvent extends Enum { readonly isInvalidFormat: boolean; readonly asInvalidFormat: U8aFixed; @@ -1822,29 +1930,32 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward'; } - /** @name CumulusPalletDmpQueueEvent (162) */ + /** @name CumulusPalletDmpQueueEvent (176) */ interface CumulusPalletDmpQueueEvent extends Enum { readonly isInvalidFormat: boolean; readonly asInvalidFormat: { - readonly messageId: U8aFixed; + readonly messageHash: U8aFixed; } & Struct; readonly isUnsupportedVersion: boolean; readonly asUnsupportedVersion: { - readonly messageId: U8aFixed; + readonly messageHash: U8aFixed; } & Struct; readonly isExecutedDownward: boolean; readonly asExecutedDownward: { + readonly messageHash: U8aFixed; readonly messageId: U8aFixed; readonly outcome: XcmV3TraitsOutcome; } & Struct; readonly isWeightExhausted: boolean; readonly asWeightExhausted: { + readonly messageHash: U8aFixed; readonly messageId: U8aFixed; readonly remainingWeight: SpWeightsWeightV2Weight; readonly requiredWeight: SpWeightsWeightV2Weight; } & Struct; readonly isOverweightEnqueued: boolean; readonly asOverweightEnqueued: { + readonly messageHash: U8aFixed; readonly messageId: U8aFixed; readonly overweightIndex: u64; readonly requiredWeight: SpWeightsWeightV2Weight; @@ -1856,12 +1967,12 @@ declare module '@polkadot/types/lookup' { } & Struct; readonly isMaxMessagesExhausted: boolean; readonly asMaxMessagesExhausted: { - readonly messageId: U8aFixed; + readonly messageHash: U8aFixed; } & Struct; readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced' | 'MaxMessagesExhausted'; } - /** @name FrameSystemPhase (163) */ + /** @name FrameSystemPhase (177) */ interface FrameSystemPhase extends Enum { readonly isApplyExtrinsic: boolean; readonly asApplyExtrinsic: u32; @@ -1870,13 +1981,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; } - /** @name FrameSystemLastRuntimeUpgradeInfo (166) */ + /** @name FrameSystemLastRuntimeUpgradeInfo (179) */ interface FrameSystemLastRuntimeUpgradeInfo extends Struct { readonly specVersion: Compact; readonly specName: Text; } - /** @name FrameSystemCall (168) */ + /** @name FrameSystemCall (181) */ interface FrameSystemCall extends Enum { readonly isRemark: boolean; readonly asRemark: { @@ -1914,21 +2025,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent'; } - /** @name FrameSystemLimitsBlockWeights (172) */ + /** @name FrameSystemLimitsBlockWeights (185) */ interface FrameSystemLimitsBlockWeights extends Struct { readonly baseBlock: SpWeightsWeightV2Weight; readonly maxBlock: SpWeightsWeightV2Weight; readonly perClass: FrameSupportDispatchPerDispatchClassWeightsPerClass; } - /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (173) */ + /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (186) */ interface FrameSupportDispatchPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; readonly operational: FrameSystemLimitsWeightsPerClass; readonly mandatory: FrameSystemLimitsWeightsPerClass; } - /** @name FrameSystemLimitsWeightsPerClass (174) */ + /** @name FrameSystemLimitsWeightsPerClass (187) */ interface FrameSystemLimitsWeightsPerClass extends Struct { readonly baseExtrinsic: SpWeightsWeightV2Weight; readonly maxExtrinsic: Option; @@ -1936,25 +2047,25 @@ declare module '@polkadot/types/lookup' { readonly reserved: Option; } - /** @name FrameSystemLimitsBlockLength (176) */ + /** @name FrameSystemLimitsBlockLength (189) */ interface FrameSystemLimitsBlockLength extends Struct { readonly max: FrameSupportDispatchPerDispatchClassU32; } - /** @name FrameSupportDispatchPerDispatchClassU32 (177) */ + /** @name FrameSupportDispatchPerDispatchClassU32 (190) */ interface FrameSupportDispatchPerDispatchClassU32 extends Struct { readonly normal: u32; readonly operational: u32; readonly mandatory: u32; } - /** @name SpWeightsRuntimeDbWeight (178) */ + /** @name SpWeightsRuntimeDbWeight (191) */ interface SpWeightsRuntimeDbWeight extends Struct { readonly read: u64; readonly write: u64; } - /** @name SpVersionRuntimeVersion (179) */ + /** @name SpVersionRuntimeVersion (192) */ interface SpVersionRuntimeVersion extends Struct { readonly specName: Text; readonly implName: Text; @@ -1966,7 +2077,7 @@ declare module '@polkadot/types/lookup' { readonly stateVersion: u8; } - /** @name FrameSystemError (183) */ + /** @name FrameSystemError (196) */ interface FrameSystemError extends Enum { readonly isInvalidSpecName: boolean; readonly isSpecVersionNeedsToIncrease: boolean; @@ -1977,7 +2088,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered'; } - /** @name PalletTimestampCall (184) */ + /** @name PalletTimestampCall (197) */ interface PalletTimestampCall extends Enum { readonly isSet: boolean; readonly asSet: { @@ -1986,7 +2097,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Set'; } - /** @name PalletIndicesCall (186) */ + /** @name PalletIndicesCall (199) */ interface PalletIndicesCall extends Enum { readonly isClaim: boolean; readonly asClaim: { @@ -2014,7 +2125,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Claim' | 'Transfer' | 'Free' | 'ForceTransfer' | 'Freeze'; } - /** @name PalletIndicesError (189) */ + /** @name PalletIndicesError (202) */ interface PalletIndicesError extends Enum { readonly isNotAssigned: boolean; readonly isNotOwner: boolean; @@ -2024,14 +2135,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotAssigned' | 'NotOwner' | 'InUse' | 'NotTransfer' | 'Permanent'; } - /** @name PalletBalancesBalanceLock (191) */ + /** @name PalletBalancesBalanceLock (204) */ interface PalletBalancesBalanceLock extends Struct { readonly id: U8aFixed; readonly amount: u128; readonly reasons: PalletBalancesReasons; } - /** @name PalletBalancesReasons (192) */ + /** @name PalletBalancesReasons (205) */ interface PalletBalancesReasons extends Enum { readonly isFee: boolean; readonly isMisc: boolean; @@ -2039,19 +2150,19 @@ declare module '@polkadot/types/lookup' { readonly type: 'Fee' | 'Misc' | 'All'; } - /** @name PalletBalancesReserveData (195) */ + /** @name PalletBalancesReserveData (208) */ interface PalletBalancesReserveData extends Struct { readonly id: U8aFixed; readonly amount: u128; } - /** @name PalletBalancesIdAmountRuntimeHoldReason (198) */ + /** @name PalletBalancesIdAmountRuntimeHoldReason (211) */ interface PalletBalancesIdAmountRuntimeHoldReason extends Struct { readonly id: SpiritnetRuntimeRuntimeHoldReason; readonly amount: u128; } - /** @name SpiritnetRuntimeRuntimeHoldReason (199) */ + /** @name SpiritnetRuntimeRuntimeHoldReason (212) */ interface SpiritnetRuntimeRuntimeHoldReason extends Enum { readonly isAttestation: boolean; readonly asAttestation: AttestationHoldReason; @@ -2068,62 +2179,62 @@ declare module '@polkadot/types/lookup' { readonly type: 'Attestation' | 'Delegation' | 'Did' | 'DidLookup' | 'Web3Names' | 'PublicCredentials'; } - /** @name AttestationHoldReason (200) */ + /** @name AttestationHoldReason (213) */ interface AttestationHoldReason extends Enum { readonly isDeposit: boolean; readonly type: 'Deposit'; } - /** @name DelegationHoldReason (201) */ + /** @name DelegationHoldReason (214) */ interface DelegationHoldReason extends Enum { readonly isDeposit: boolean; readonly type: 'Deposit'; } - /** @name DidHoldReason (202) */ + /** @name DidHoldReason (215) */ interface DidHoldReason extends Enum { readonly isDeposit: boolean; readonly type: 'Deposit'; } - /** @name PalletDidLookupHoldReason (203) */ + /** @name PalletDidLookupHoldReason (216) */ interface PalletDidLookupHoldReason extends Enum { readonly isDeposit: boolean; readonly type: 'Deposit'; } - /** @name PalletWeb3NamesHoldReason (204) */ + /** @name PalletWeb3NamesHoldReason (217) */ interface PalletWeb3NamesHoldReason extends Enum { readonly isDeposit: boolean; readonly type: 'Deposit'; } - /** @name PublicCredentialsHoldReason (205) */ + /** @name PublicCredentialsHoldReason (218) */ interface PublicCredentialsHoldReason extends Enum { readonly isDeposit: boolean; readonly type: 'Deposit'; } - /** @name PalletBalancesIdAmountRuntimeFreezeReason (208) */ + /** @name PalletBalancesIdAmountRuntimeFreezeReason (221) */ interface PalletBalancesIdAmountRuntimeFreezeReason extends Struct { readonly id: SpiritnetRuntimeRuntimeFreezeReason; readonly amount: u128; } - /** @name SpiritnetRuntimeRuntimeFreezeReason (209) */ + /** @name SpiritnetRuntimeRuntimeFreezeReason (222) */ interface SpiritnetRuntimeRuntimeFreezeReason extends Enum { readonly isParachainStaking: boolean; readonly asParachainStaking: ParachainStakingFreezeReason; readonly type: 'ParachainStaking'; } - /** @name ParachainStakingFreezeReason (210) */ + /** @name ParachainStakingFreezeReason (223) */ interface ParachainStakingFreezeReason extends Enum { readonly isStaking: boolean; readonly type: 'Staking'; } - /** @name PalletBalancesCall (212) */ + /** @name PalletBalancesCall (225) */ interface PalletBalancesCall extends Enum { readonly isTransferAllowDeath: boolean; readonly asTransferAllowDeath: { @@ -2174,7 +2285,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'TransferAllowDeath' | 'SetBalanceDeprecated' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve' | 'UpgradeAccounts' | 'Transfer' | 'ForceSetBalance'; } - /** @name PalletBalancesError (214) */ + /** @name PalletBalancesError (226) */ interface PalletBalancesError extends Enum { readonly isVestingBalance: boolean; readonly isLiquidityRestrictions: boolean; @@ -2189,28 +2300,28 @@ declare module '@polkadot/types/lookup' { readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'Expendability' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves' | 'TooManyHolds' | 'TooManyFreezes'; } - /** @name PalletTransactionPaymentReleases (216) */ + /** @name PalletTransactionPaymentReleases (228) */ interface PalletTransactionPaymentReleases extends Enum { readonly isV1Ancient: boolean; readonly isV2: boolean; readonly type: 'V1Ancient' | 'V2'; } - /** @name SpConsensusAuraSr25519AppSr25519Public (218) */ + /** @name SpConsensusAuraSr25519AppSr25519Public (230) */ interface SpConsensusAuraSr25519AppSr25519Public extends SpCoreSr25519Public {} - /** @name SpCoreSr25519Public (219) */ + /** @name SpCoreSr25519Public (231) */ interface SpCoreSr25519Public extends U8aFixed {} - /** @name SpiritnetRuntimeSessionKeys (224) */ + /** @name SpiritnetRuntimeSessionKeys (236) */ interface SpiritnetRuntimeSessionKeys extends Struct { readonly aura: SpConsensusAuraSr25519AppSr25519Public; } - /** @name SpCoreCryptoKeyTypeId (227) */ + /** @name SpCoreCryptoKeyTypeId (239) */ interface SpCoreCryptoKeyTypeId extends U8aFixed {} - /** @name PalletSessionCall (228) */ + /** @name PalletSessionCall (240) */ interface PalletSessionCall extends Enum { readonly isSetKeys: boolean; readonly asSetKeys: { @@ -2221,7 +2332,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetKeys' | 'PurgeKeys'; } - /** @name PalletSessionError (229) */ + /** @name PalletSessionError (241) */ interface PalletSessionError extends Enum { readonly isInvalidProof: boolean; readonly isNoAssociatedValidatorId: boolean; @@ -2231,26 +2342,26 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidProof' | 'NoAssociatedValidatorId' | 'DuplicatedKey' | 'NoKeys' | 'NoAccount'; } - /** @name ParachainStakingRoundInfo (230) */ + /** @name ParachainStakingRoundInfo (242) */ interface ParachainStakingRoundInfo extends Struct { readonly current: u32; readonly first: u64; readonly length: u64; } - /** @name ParachainStakingDelegationCounter (231) */ + /** @name ParachainStakingDelegationCounter (243) */ interface ParachainStakingDelegationCounter extends Struct { readonly round: u32; readonly counter: u32; } - /** @name ParachainStakingStake (232) */ + /** @name ParachainStakingStake (244) */ interface ParachainStakingStake extends Struct { readonly owner: AccountId32; readonly amount: u128; } - /** @name ParachainStakingCandidate (233) */ + /** @name ParachainStakingCandidate (245) */ interface ParachainStakingCandidate extends Struct { readonly id: AccountId32; readonly stake: u128; @@ -2259,10 +2370,10 @@ declare module '@polkadot/types/lookup' { readonly status: ParachainStakingCandidateStatus; } - /** @name ParachainStakingSetOrderedSet (234) */ + /** @name ParachainStakingSetOrderedSet (246) */ interface ParachainStakingSetOrderedSet extends Vec {} - /** @name ParachainStakingCandidateStatus (237) */ + /** @name ParachainStakingCandidateStatus (249) */ interface ParachainStakingCandidateStatus extends Enum { readonly isActive: boolean; readonly isLeaving: boolean; @@ -2270,31 +2381,31 @@ declare module '@polkadot/types/lookup' { readonly type: 'Active' | 'Leaving'; } - /** @name ParachainStakingTotalStake (238) */ + /** @name ParachainStakingTotalStake (250) */ interface ParachainStakingTotalStake extends Struct { readonly collators: u128; readonly delegators: u128; } - /** @name ParachainStakingInflationInflationInfo (241) */ + /** @name ParachainStakingInflationInflationInfo (253) */ interface ParachainStakingInflationInflationInfo extends Struct { readonly collator: ParachainStakingInflationStakingInfo; readonly delegator: ParachainStakingInflationStakingInfo; } - /** @name ParachainStakingInflationStakingInfo (242) */ + /** @name ParachainStakingInflationStakingInfo (254) */ interface ParachainStakingInflationStakingInfo extends Struct { readonly maxRate: Perquintill; readonly rewardRate: ParachainStakingInflationRewardRate; } - /** @name ParachainStakingInflationRewardRate (243) */ + /** @name ParachainStakingInflationRewardRate (255) */ interface ParachainStakingInflationRewardRate extends Struct { readonly annual: Perquintill; readonly perBlock: Perquintill; } - /** @name ParachainStakingCall (248) */ + /** @name ParachainStakingCall (260) */ interface ParachainStakingCall extends Enum { readonly isForceNewRound: boolean; readonly isSetInflation: boolean; @@ -2363,7 +2474,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ForceNewRound' | 'SetInflation' | 'SetMaxSelectedCandidates' | 'SetBlocksPerRound' | 'SetMaxCandidateStake' | 'ForceRemoveCandidate' | 'JoinCandidates' | 'InitLeaveCandidates' | 'ExecuteLeaveCandidates' | 'CancelLeaveCandidates' | 'CandidateStakeMore' | 'CandidateStakeLess' | 'JoinDelegators' | 'LeaveDelegators' | 'DelegatorStakeMore' | 'DelegatorStakeLess' | 'UnlockUnstaked' | 'ClaimRewards' | 'IncrementCollatorRewards' | 'IncrementDelegatorRewards' | 'ExecuteScheduledRewardChange'; } - /** @name ParachainStakingError (249) */ + /** @name ParachainStakingError (261) */ interface ParachainStakingError extends Enum { readonly isDelegatorNotFound: boolean; readonly isCandidateNotFound: boolean; @@ -2399,7 +2510,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'DelegatorNotFound' | 'CandidateNotFound' | 'DelegatorExists' | 'CandidateExists' | 'ValStakeZero' | 'ValStakeBelowMin' | 'ValStakeAboveMax' | 'DelegationBelowMin' | 'AlreadyLeaving' | 'NotLeaving' | 'CannotLeaveYet' | 'CannotJoinBeforeUnlocking' | 'AlreadyDelegating' | 'NotYetDelegating' | 'DelegationsPerRoundExceeded' | 'TooManyDelegators' | 'TooFewCollatorCandidates' | 'CannotStakeIfLeaving' | 'CannotDelegateIfLeaving' | 'MaxCollatorsPerDelegatorExceeded' | 'AlreadyDelegatedCollator' | 'DelegationNotFound' | 'Underflow' | 'CannotSetAboveMax' | 'CannotSetBelowMin' | 'InvalidSchedule' | 'NoMoreUnstaking' | 'TooEarly' | 'StakeNotFound' | 'UnstakingIsEmpty' | 'RewardsNotFound'; } - /** @name FrameSupportPreimagesBounded (252) */ + /** @name FrameSupportPreimagesBounded (264) */ interface FrameSupportPreimagesBounded extends Enum { readonly isLegacy: boolean; readonly asLegacy: { @@ -2415,7 +2526,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Legacy' | 'Inline' | 'Lookup'; } - /** @name PalletDemocracyCall (254) */ + /** @name PalletDemocracyCall (266) */ interface PalletDemocracyCall extends Enum { readonly isPropose: boolean; readonly asPropose: { @@ -2499,7 +2610,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Propose' | 'Second' | 'Vote' | 'EmergencyCancel' | 'ExternalPropose' | 'ExternalProposeMajority' | 'ExternalProposeDefault' | 'FastTrack' | 'VetoExternal' | 'CancelReferendum' | 'Delegate' | 'Undelegate' | 'ClearPublicProposals' | 'Unlock' | 'RemoveVote' | 'RemoveOtherVote' | 'Blacklist' | 'CancelProposal' | 'SetMetadata'; } - /** @name PalletDemocracyConviction (255) */ + /** @name PalletDemocracyConviction (267) */ interface PalletDemocracyConviction extends Enum { readonly isNone: boolean; readonly isLocked1x: boolean; @@ -2511,7 +2622,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'None' | 'Locked1x' | 'Locked2x' | 'Locked3x' | 'Locked4x' | 'Locked5x' | 'Locked6x'; } - /** @name PalletCollectiveCall (258) */ + /** @name PalletCollectiveCall (270) */ interface PalletCollectiveCall extends Enum { readonly isSetMembers: boolean; readonly asSetMembers: { @@ -2550,7 +2661,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetMembers' | 'Execute' | 'Propose' | 'Vote' | 'DisapproveProposal' | 'Close'; } - /** @name PalletMembershipCall (261) */ + /** @name PalletMembershipCall (273) */ interface PalletMembershipCall extends Enum { readonly isAddMember: boolean; readonly asAddMember: { @@ -2581,7 +2692,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AddMember' | 'RemoveMember' | 'SwapMember' | 'ResetMembers' | 'ChangeKey' | 'SetPrime' | 'ClearPrime'; } - /** @name PalletTreasuryCall (262) */ + /** @name PalletTreasuryCall (274) */ interface PalletTreasuryCall extends Enum { readonly isProposeSpend: boolean; readonly asProposeSpend: { @@ -2608,7 +2719,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal' | 'Spend' | 'RemoveApproval'; } - /** @name PalletUtilityCall (263) */ + /** @name PalletUtilityCall (275) */ interface PalletUtilityCall extends Enum { readonly isBatch: boolean; readonly asBatch: { @@ -2640,7 +2751,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Batch' | 'AsDerivative' | 'BatchAll' | 'DispatchAs' | 'ForceBatch' | 'WithWeight'; } - /** @name SpiritnetRuntimeOriginCaller (265) */ + /** @name SpiritnetRuntimeOriginCaller (277) */ interface SpiritnetRuntimeOriginCaller extends Enum { readonly isSystem: boolean; readonly asSystem: FrameSupportDispatchRawOrigin; @@ -2658,7 +2769,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'System' | 'Void' | 'Council' | 'TechnicalCommittee' | 'Did' | 'PolkadotXcm' | 'CumulusXcm'; } - /** @name FrameSupportDispatchRawOrigin (266) */ + /** @name FrameSupportDispatchRawOrigin (278) */ interface FrameSupportDispatchRawOrigin extends Enum { readonly isRoot: boolean; readonly isSigned: boolean; @@ -2667,7 +2778,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Root' | 'Signed' | 'None'; } - /** @name PalletCollectiveRawOrigin (267) */ + /** @name PalletCollectiveRawOrigin (279) */ interface PalletCollectiveRawOrigin extends Enum { readonly isMembers: boolean; readonly asMembers: ITuple<[u32, u32]>; @@ -2677,13 +2788,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Members' | 'Member' | 'Phantom'; } - /** @name DidOriginDidRawOrigin (269) */ + /** @name DidOriginDidRawOrigin (281) */ interface DidOriginDidRawOrigin extends Struct { readonly id: AccountId32; readonly submitter: AccountId32; } - /** @name PalletXcmOrigin (270) */ + /** @name PalletXcmOrigin (282) */ interface PalletXcmOrigin extends Enum { readonly isXcm: boolean; readonly asXcm: XcmV3MultiLocation; @@ -2692,7 +2803,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Xcm' | 'Response'; } - /** @name CumulusPalletXcmOrigin (271) */ + /** @name CumulusPalletXcmOrigin (283) */ interface CumulusPalletXcmOrigin extends Enum { readonly isRelay: boolean; readonly isSiblingParachain: boolean; @@ -2700,10 +2811,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'Relay' | 'SiblingParachain'; } - /** @name SpCoreVoid (272) */ + /** @name SpCoreVoid (284) */ type SpCoreVoid = Null; - /** @name PalletVestingCall (273) */ + /** @name PalletVestingCall (285) */ interface PalletVestingCall extends Enum { readonly isVest: boolean; readonly isVestOther: boolean; @@ -2729,14 +2840,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Vest' | 'VestOther' | 'VestedTransfer' | 'ForceVestedTransfer' | 'MergeSchedules'; } - /** @name PalletVestingVestingInfo (274) */ + /** @name PalletVestingVestingInfo (286) */ interface PalletVestingVestingInfo extends Struct { readonly locked: u128; readonly perBlock: u128; readonly startingBlock: u64; } - /** @name PalletSchedulerCall (275) */ + /** @name PalletSchedulerCall (287) */ interface PalletSchedulerCall extends Enum { readonly isSchedule: boolean; readonly asSchedule: { @@ -2780,7 +2891,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Schedule' | 'Cancel' | 'ScheduleNamed' | 'CancelNamed' | 'ScheduleAfter' | 'ScheduleNamedAfter'; } - /** @name PalletProxyCall (277) */ + /** @name PalletProxyCall (289) */ interface PalletProxyCall extends Enum { readonly isProxy: boolean; readonly asProxy: { @@ -2840,7 +2951,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Proxy' | 'AddProxy' | 'RemoveProxy' | 'RemoveProxies' | 'CreatePure' | 'KillPure' | 'Announce' | 'RemoveAnnouncement' | 'RejectAnnouncement' | 'ProxyAnnounced'; } - /** @name PalletPreimageCall (279) */ + /** @name PalletPreimageCall (291) */ interface PalletPreimageCall extends Enum { readonly isNotePreimage: boolean; readonly asNotePreimage: { @@ -2861,7 +2972,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotePreimage' | 'UnnotePreimage' | 'RequestPreimage' | 'UnrequestPreimage'; } - /** @name PalletTipsCall (281) */ + /** @name PalletTipsCall (293) */ interface PalletTipsCall extends Enum { readonly isReportAwesome: boolean; readonly asReportAwesome: { @@ -2894,7 +3005,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ReportAwesome' | 'RetractTip' | 'TipNew' | 'Tip' | 'CloseTip' | 'SlashTip'; } - /** @name PalletMultisigCall (282) */ + /** @name PalletMultisigCall (294) */ interface PalletMultisigCall extends Enum { readonly isAsMultiThreshold1: boolean; readonly asAsMultiThreshold1: { @@ -2927,7 +3038,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AsMultiThreshold1' | 'AsMulti' | 'ApproveAsMulti' | 'CancelAsMulti'; } - /** @name CtypeCall (284) */ + /** @name CtypeCall (296) */ interface CtypeCall extends Enum { readonly isAdd: boolean; readonly asAdd: { @@ -2941,7 +3052,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Add' | 'SetBlockNumber'; } - /** @name AttestationCall (285) */ + /** @name AttestationCall (297) */ interface AttestationCall extends Enum { readonly isAdd: boolean; readonly asAdd: { @@ -2974,23 +3085,20 @@ declare module '@polkadot/types/lookup' { readonly type: 'Add' | 'Revoke' | 'Remove' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name RuntimeCommonAuthorizationPalletAuthorize (287) */ + /** @name RuntimeCommonAuthorizationPalletAuthorize (299) */ interface RuntimeCommonAuthorizationPalletAuthorize extends Enum { readonly isDelegation: boolean; readonly asDelegation: DelegationAccessControlDelegationAc; readonly type: 'Delegation'; } - /** @name DelegationAccessControlDelegationAc (288) */ + /** @name DelegationAccessControlDelegationAc (300) */ interface DelegationAccessControlDelegationAc extends Struct { readonly subjectNodeId: H256; readonly maxChecks: u32; } - /** @name SpiritnetRuntimeRuntime (289) */ - type SpiritnetRuntimeRuntime = Null; - - /** @name DelegationCall (290) */ + /** @name DelegationCall (301) */ interface DelegationCall extends Enum { readonly isCreateHierarchy: boolean; readonly asCreateHierarchy: { @@ -3032,7 +3140,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CreateHierarchy' | 'AddDelegation' | 'RevokeDelegation' | 'RemoveDelegation' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name DidDidDetailsDidSignature (291) */ + /** @name DidDidDetailsDidSignature (302) */ interface DidDidDetailsDidSignature extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Signature; @@ -3043,16 +3151,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name SpCoreEd25519Signature (292) */ + /** @name SpCoreEd25519Signature (303) */ interface SpCoreEd25519Signature extends U8aFixed {} - /** @name SpCoreSr25519Signature (294) */ + /** @name SpCoreSr25519Signature (305) */ interface SpCoreSr25519Signature extends U8aFixed {} - /** @name SpCoreEcdsaSignature (295) */ + /** @name SpCoreEcdsaSignature (306) */ interface SpCoreEcdsaSignature extends U8aFixed {} - /** @name DidCall (297) */ + /** @name DidCall (308) */ interface DidCall extends Enum { readonly isCreate: boolean; readonly asCreate: { @@ -3108,10 +3216,19 @@ declare module '@polkadot/types/lookup' { readonly asUpdateDeposit: { readonly did: AccountId32; } & Struct; - readonly type: 'Create' | 'SetAuthenticationKey' | 'SetDelegationKey' | 'RemoveDelegationKey' | 'SetAttestationKey' | 'RemoveAttestationKey' | 'AddKeyAgreementKey' | 'RemoveKeyAgreementKey' | 'AddServiceEndpoint' | 'RemoveServiceEndpoint' | 'Delete' | 'ReclaimDeposit' | 'SubmitDidCall' | 'ChangeDepositOwner' | 'UpdateDeposit'; + readonly isDispatchAs: boolean; + readonly asDispatchAs: { + readonly didIdentifier: AccountId32; + readonly call: Call; + } & Struct; + readonly isCreateFromAccount: boolean; + readonly asCreateFromAccount: { + readonly authenticationKey: DidDidDetailsDidVerificationKey; + } & Struct; + readonly type: 'Create' | 'SetAuthenticationKey' | 'SetDelegationKey' | 'RemoveDelegationKey' | 'SetAttestationKey' | 'RemoveAttestationKey' | 'AddKeyAgreementKey' | 'RemoveKeyAgreementKey' | 'AddServiceEndpoint' | 'RemoveServiceEndpoint' | 'Delete' | 'ReclaimDeposit' | 'SubmitDidCall' | 'ChangeDepositOwner' | 'UpdateDeposit' | 'DispatchAs' | 'CreateFromAccount'; } - /** @name DidDidDetailsDidCreationDetails (298) */ + /** @name DidDidDetailsDidCreationDetails (309) */ interface DidDidDetailsDidCreationDetails extends Struct { readonly did: AccountId32; readonly submitter: AccountId32; @@ -3121,24 +3238,24 @@ declare module '@polkadot/types/lookup' { readonly newServiceDetails: Vec; } - /** @name RuntimeCommonConstantsDidMaxNewKeyAgreementKeys (299) */ + /** @name RuntimeCommonConstantsDidMaxNewKeyAgreementKeys (310) */ type RuntimeCommonConstantsDidMaxNewKeyAgreementKeys = Null; - /** @name DidServiceEndpointsDidEndpoint (300) */ + /** @name DidServiceEndpointsDidEndpoint (311) */ interface DidServiceEndpointsDidEndpoint extends Struct { readonly id: Bytes; readonly serviceTypes: Vec; readonly urls: Vec; } - /** @name DidDidDetailsDidEncryptionKey (309) */ + /** @name DidDidDetailsDidEncryptionKey (320) */ interface DidDidDetailsDidEncryptionKey extends Enum { readonly isX25519: boolean; readonly asX25519: U8aFixed; readonly type: 'X25519'; } - /** @name DidDidDetailsDidVerificationKey (313) */ + /** @name DidDidDetailsDidVerificationKey (324) */ interface DidDidDetailsDidVerificationKey extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Public; @@ -3146,16 +3263,18 @@ declare module '@polkadot/types/lookup' { readonly asSr25519: SpCoreSr25519Public; readonly isEcdsa: boolean; readonly asEcdsa: SpCoreEcdsaPublic; - readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; + readonly isAccount: boolean; + readonly asAccount: AccountId32; + readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa' | 'Account'; } - /** @name SpCoreEd25519Public (314) */ + /** @name SpCoreEd25519Public (325) */ interface SpCoreEd25519Public extends U8aFixed {} - /** @name SpCoreEcdsaPublic (315) */ + /** @name SpCoreEcdsaPublic (326) */ interface SpCoreEcdsaPublic extends U8aFixed {} - /** @name DidDidDetailsDidAuthorizedCallOperation (318) */ + /** @name DidDidDetailsDidAuthorizedCallOperation (329) */ interface DidDidDetailsDidAuthorizedCallOperation extends Struct { readonly did: AccountId32; readonly txCounter: u64; @@ -3164,7 +3283,7 @@ declare module '@polkadot/types/lookup' { readonly submitter: AccountId32; } - /** @name PalletDidLookupCall (319) */ + /** @name PalletDidLookupCall (330) */ interface PalletDidLookupCall extends Enum { readonly isAssociateAccount: boolean; readonly asAssociateAccount: { @@ -3192,7 +3311,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AssociateAccount' | 'AssociateSender' | 'RemoveSenderAssociation' | 'RemoveAccountAssociation' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name PalletDidLookupAssociateAccountRequest (320) */ + /** @name PalletDidLookupAssociateAccountRequest (331) */ interface PalletDidLookupAssociateAccountRequest extends Enum { readonly isPolkadot: boolean; readonly asPolkadot: ITuple<[AccountId32, SpRuntimeMultiSignature]>; @@ -3201,7 +3320,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Polkadot' | 'Ethereum'; } - /** @name SpRuntimeMultiSignature (321) */ + /** @name SpRuntimeMultiSignature (332) */ interface SpRuntimeMultiSignature extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Signature; @@ -3212,10 +3331,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name PalletDidLookupAccountEthereumSignature (322) */ + /** @name PalletDidLookupAccountEthereumSignature (333) */ interface PalletDidLookupAccountEthereumSignature extends SpCoreEcdsaSignature {} - /** @name PalletWeb3NamesCall (323) */ + /** @name PalletWeb3NamesCall (334) */ interface PalletWeb3NamesCall extends Enum { readonly isClaim: boolean; readonly asClaim: { @@ -3242,7 +3361,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Claim' | 'ReleaseByOwner' | 'ReclaimDeposit' | 'Ban' | 'Unban' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name PublicCredentialsCall (324) */ + /** @name PublicCredentialsCall (335) */ interface PublicCredentialsCall extends Enum { readonly isAdd: boolean; readonly asAdd: { @@ -3278,7 +3397,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Add' | 'Revoke' | 'Unrevoke' | 'Remove' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; } - /** @name PublicCredentialsCredentialsCredential (325) */ + /** @name PublicCredentialsCredentialsCredential (336) */ interface PublicCredentialsCredentialsCredential extends Struct { readonly ctypeHash: H256; readonly subject: Bytes; @@ -3286,7 +3405,16 @@ declare module '@polkadot/types/lookup' { readonly authorization: Option; } - /** @name CumulusPalletParachainSystemCall (328) */ + /** @name PalletMigrationCall (339) */ + interface PalletMigrationCall extends Enum { + readonly isUpdateBalance: boolean; + readonly asUpdateBalance: { + readonly requestedMigrations: PalletMigrationEntriesToMigrate; + } & Struct; + readonly type: 'UpdateBalance'; + } + + /** @name CumulusPalletParachainSystemCall (340) */ interface CumulusPalletParachainSystemCall extends Enum { readonly isSetValidationData: boolean; readonly asSetValidationData: { @@ -3308,40 +3436,43 @@ declare module '@polkadot/types/lookup' { readonly type: 'SetValidationData' | 'SudoSendUpwardMessage' | 'AuthorizeUpgrade' | 'EnactAuthorizedUpgrade'; } - /** @name CumulusPrimitivesParachainInherentParachainInherentData (329) */ + /** @name CumulusPrimitivesParachainInherentParachainInherentData (341) */ interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct { - readonly validationData: PolkadotPrimitivesV4PersistedValidationData; + readonly validationData: PolkadotPrimitivesV5PersistedValidationData; readonly relayChainState: SpTrieStorageProof; readonly downwardMessages: Vec; readonly horizontalMessages: BTreeMap>; } - /** @name PolkadotPrimitivesV4PersistedValidationData (330) */ - interface PolkadotPrimitivesV4PersistedValidationData extends Struct { + /** @name PolkadotPrimitivesV5PersistedValidationData (342) */ + interface PolkadotPrimitivesV5PersistedValidationData extends Struct { readonly parentHead: Bytes; readonly relayParentNumber: u32; readonly relayParentStorageRoot: H256; readonly maxPovSize: u32; } - /** @name SpTrieStorageProof (332) */ + /** @name SpTrieStorageProof (344) */ interface SpTrieStorageProof extends Struct { readonly trieNodes: BTreeSet; } - /** @name PolkadotCorePrimitivesInboundDownwardMessage (335) */ + /** @name PolkadotCorePrimitivesInboundDownwardMessage (347) */ interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct { readonly sentAt: u32; readonly msg: Bytes; } - /** @name PolkadotCorePrimitivesInboundHrmpMessage (338) */ + /** @name PolkadotCorePrimitivesInboundHrmpMessage (350) */ interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct { readonly sentAt: u32; readonly data: Bytes; } - /** @name CumulusPalletXcmpQueueCall (341) */ + /** @name ParachainInfoCall (353) */ + type ParachainInfoCall = Null; + + /** @name CumulusPalletXcmpQueueCall (354) */ interface CumulusPalletXcmpQueueCall extends Enum { readonly isServiceOverweight: boolean; readonly asServiceOverweight: { @@ -3377,7 +3508,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight'; } - /** @name PalletXcmCall (342) */ + /** @name PalletXcmCall (355) */ interface PalletXcmCall extends Enum { readonly isSend: boolean; readonly asSend: { @@ -3406,7 +3537,7 @@ declare module '@polkadot/types/lookup' { readonly isForceXcmVersion: boolean; readonly asForceXcmVersion: { readonly location: XcmV3MultiLocation; - readonly xcmVersion: u32; + readonly version: u32; } & Struct; readonly isForceDefaultXcmVersion: boolean; readonly asForceDefaultXcmVersion: { @@ -3443,7 +3574,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets' | 'ForceSuspension'; } - /** @name XcmVersionedXcm (343) */ + /** @name XcmVersionedXcm (356) */ interface XcmVersionedXcm extends Enum { readonly isV2: boolean; readonly asV2: XcmV2Xcm; @@ -3452,10 +3583,10 @@ declare module '@polkadot/types/lookup' { readonly type: 'V2' | 'V3'; } - /** @name XcmV2Xcm (344) */ + /** @name XcmV2Xcm (357) */ interface XcmV2Xcm extends Vec {} - /** @name XcmV2Instruction (346) */ + /** @name XcmV2Instruction (359) */ interface XcmV2Instruction extends Enum { readonly isWithdrawAsset: boolean; readonly asWithdrawAsset: XcmV2MultiassetMultiAssets; @@ -3575,7 +3706,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion'; } - /** @name XcmV2Response (347) */ + /** @name XcmV2Response (360) */ interface XcmV2Response extends Enum { readonly isNull: boolean; readonly isAssets: boolean; @@ -3587,7 +3718,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version'; } - /** @name XcmV2TraitsError (350) */ + /** @name XcmV2TraitsError (363) */ interface XcmV2TraitsError extends Enum { readonly isOverflow: boolean; readonly isUnimplemented: boolean; @@ -3620,7 +3751,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable'; } - /** @name XcmV2MultiassetMultiAssetFilter (351) */ + /** @name XcmV2MultiassetMultiAssetFilter (364) */ interface XcmV2MultiassetMultiAssetFilter extends Enum { readonly isDefinite: boolean; readonly asDefinite: XcmV2MultiassetMultiAssets; @@ -3629,7 +3760,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Definite' | 'Wild'; } - /** @name XcmV2MultiassetWildMultiAsset (352) */ + /** @name XcmV2MultiassetWildMultiAsset (365) */ interface XcmV2MultiassetWildMultiAsset extends Enum { readonly isAll: boolean; readonly isAllOf: boolean; @@ -3640,14 +3771,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'All' | 'AllOf'; } - /** @name XcmV2MultiassetWildFungibility (353) */ + /** @name XcmV2MultiassetWildFungibility (366) */ interface XcmV2MultiassetWildFungibility extends Enum { readonly isFungible: boolean; readonly isNonFungible: boolean; readonly type: 'Fungible' | 'NonFungible'; } - /** @name XcmV2WeightLimit (354) */ + /** @name XcmV2WeightLimit (367) */ interface XcmV2WeightLimit extends Enum { readonly isUnlimited: boolean; readonly isLimited: boolean; @@ -3655,7 +3786,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unlimited' | 'Limited'; } - /** @name CumulusPalletDmpQueueCall (363) */ + /** @name CumulusPalletDmpQueueCall (376) */ interface CumulusPalletDmpQueueCall extends Enum { readonly isServiceOverweight: boolean; readonly asServiceOverweight: { @@ -3665,7 +3796,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ServiceOverweight'; } - /** @name PalletDemocracyReferendumInfo (367) */ + /** @name PalletDemocracyReferendumInfo (380) */ interface PalletDemocracyReferendumInfo extends Enum { readonly isOngoing: boolean; readonly asOngoing: PalletDemocracyReferendumStatus; @@ -3677,7 +3808,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ongoing' | 'Finished'; } - /** @name PalletDemocracyReferendumStatus (368) */ + /** @name PalletDemocracyReferendumStatus (381) */ interface PalletDemocracyReferendumStatus extends Struct { readonly end: u64; readonly proposal: FrameSupportPreimagesBounded; @@ -3686,14 +3817,14 @@ declare module '@polkadot/types/lookup' { readonly tally: PalletDemocracyTally; } - /** @name PalletDemocracyTally (369) */ + /** @name PalletDemocracyTally (382) */ interface PalletDemocracyTally extends Struct { readonly ayes: u128; readonly nays: u128; readonly turnout: u128; } - /** @name PalletDemocracyVoteVoting (370) */ + /** @name PalletDemocracyVoteVoting (383) */ interface PalletDemocracyVoteVoting extends Enum { readonly isDirect: boolean; readonly asDirect: { @@ -3712,16 +3843,16 @@ declare module '@polkadot/types/lookup' { readonly type: 'Direct' | 'Delegating'; } - /** @name PalletDemocracyDelegations (374) */ + /** @name PalletDemocracyDelegations (387) */ interface PalletDemocracyDelegations extends Struct { readonly votes: u128; readonly capital: u128; } - /** @name PalletDemocracyVotePriorLock (375) */ + /** @name PalletDemocracyVotePriorLock (388) */ interface PalletDemocracyVotePriorLock extends ITuple<[u64, u128]> {} - /** @name PalletDemocracyError (378) */ + /** @name PalletDemocracyError (391) */ interface PalletDemocracyError extends Enum { readonly isValueLow: boolean; readonly isProposalMissing: boolean; @@ -3750,7 +3881,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ValueLow' | 'ProposalMissing' | 'AlreadyCanceled' | 'DuplicateProposal' | 'ProposalBlacklisted' | 'NotSimpleMajority' | 'InvalidHash' | 'NoProposal' | 'AlreadyVetoed' | 'ReferendumInvalid' | 'NoneWaiting' | 'NotVoter' | 'NoPermission' | 'AlreadyDelegating' | 'InsufficientFunds' | 'NotDelegating' | 'VotesExist' | 'InstantNotAllowed' | 'Nonsense' | 'WrongUpperBound' | 'MaxVotesReached' | 'TooMany' | 'VotingPeriodLow' | 'PreimageNotExist'; } - /** @name PalletCollectiveVotes (380) */ + /** @name PalletCollectiveVotes (393) */ interface PalletCollectiveVotes extends Struct { readonly index: u32; readonly threshold: u32; @@ -3759,7 +3890,7 @@ declare module '@polkadot/types/lookup' { readonly end: u64; } - /** @name PalletCollectiveError (381) */ + /** @name PalletCollectiveError (394) */ interface PalletCollectiveError extends Enum { readonly isNotMember: boolean; readonly isDuplicateProposal: boolean; @@ -3774,7 +3905,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotMember' | 'DuplicateProposal' | 'ProposalMissing' | 'WrongIndex' | 'DuplicateVote' | 'AlreadyInitialized' | 'TooEarly' | 'TooManyProposals' | 'WrongProposalWeight' | 'WrongProposalLength'; } - /** @name PalletMembershipError (385) */ + /** @name PalletMembershipError (398) */ interface PalletMembershipError extends Enum { readonly isAlreadyMember: boolean; readonly isNotMember: boolean; @@ -3782,7 +3913,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AlreadyMember' | 'NotMember' | 'TooManyMembers'; } - /** @name PalletTreasuryProposal (386) */ + /** @name PalletTreasuryProposal (399) */ interface PalletTreasuryProposal extends Struct { readonly proposer: AccountId32; readonly value: u128; @@ -3790,10 +3921,10 @@ declare module '@polkadot/types/lookup' { readonly bond: u128; } - /** @name FrameSupportPalletId (390) */ + /** @name FrameSupportPalletId (403) */ interface FrameSupportPalletId extends U8aFixed {} - /** @name PalletTreasuryError (391) */ + /** @name PalletTreasuryError (404) */ interface PalletTreasuryError extends Enum { readonly isInsufficientProposersBalance: boolean; readonly isInvalidIndex: boolean; @@ -3803,20 +3934,20 @@ declare module '@polkadot/types/lookup' { readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'TooManyApprovals' | 'InsufficientPermission' | 'ProposalNotApproved'; } - /** @name PalletUtilityError (392) */ + /** @name PalletUtilityError (405) */ interface PalletUtilityError extends Enum { readonly isTooManyCalls: boolean; readonly type: 'TooManyCalls'; } - /** @name PalletVestingReleases (395) */ + /** @name PalletVestingReleases (408) */ interface PalletVestingReleases extends Enum { readonly isV0: boolean; readonly isV1: boolean; readonly type: 'V0' | 'V1'; } - /** @name PalletVestingError (396) */ + /** @name PalletVestingError (409) */ interface PalletVestingError extends Enum { readonly isNotVesting: boolean; readonly isAtMaxVestingSchedules: boolean; @@ -3826,7 +3957,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotVesting' | 'AtMaxVestingSchedules' | 'AmountLow' | 'ScheduleIndexOutOfBounds' | 'InvalidScheduleParams'; } - /** @name PalletSchedulerScheduled (399) */ + /** @name PalletSchedulerScheduled (412) */ interface PalletSchedulerScheduled extends Struct { readonly maybeId: Option; readonly priority: u8; @@ -3835,7 +3966,7 @@ declare module '@polkadot/types/lookup' { readonly origin: SpiritnetRuntimeOriginCaller; } - /** @name PalletSchedulerError (401) */ + /** @name PalletSchedulerError (414) */ interface PalletSchedulerError extends Enum { readonly isFailedToSchedule: boolean; readonly isNotFound: boolean; @@ -3845,21 +3976,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange' | 'Named'; } - /** @name PalletProxyProxyDefinition (404) */ + /** @name PalletProxyProxyDefinition (417) */ interface PalletProxyProxyDefinition extends Struct { readonly delegate: AccountId32; readonly proxyType: SpiritnetRuntimeProxyType; readonly delay: u64; } - /** @name PalletProxyAnnouncement (408) */ + /** @name PalletProxyAnnouncement (421) */ interface PalletProxyAnnouncement extends Struct { readonly real: AccountId32; readonly callHash: H256; readonly height: u64; } - /** @name PalletProxyError (410) */ + /** @name PalletProxyError (423) */ interface PalletProxyError extends Enum { readonly isTooMany: boolean; readonly isNotFound: boolean; @@ -3872,7 +4003,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'TooMany' | 'NotFound' | 'NotProxy' | 'Unproxyable' | 'Duplicate' | 'NoPermission' | 'Unannounced' | 'NoSelfProxy'; } - /** @name PalletPreimageRequestStatus (411) */ + /** @name PalletPreimageRequestStatus (424) */ interface PalletPreimageRequestStatus extends Enum { readonly isUnrequested: boolean; readonly asUnrequested: { @@ -3888,7 +4019,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unrequested' | 'Requested'; } - /** @name PalletPreimageError (416) */ + /** @name PalletPreimageError (429) */ interface PalletPreimageError extends Enum { readonly isTooBig: boolean; readonly isAlreadyNoted: boolean; @@ -3899,7 +4030,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'TooBig' | 'AlreadyNoted' | 'NotAuthorized' | 'NotNoted' | 'Requested' | 'NotRequested'; } - /** @name PalletTipsOpenTip (419) */ + /** @name PalletTipsOpenTip (432) */ interface PalletTipsOpenTip extends Struct { readonly reason: H256; readonly who: AccountId32; @@ -3910,7 +4041,7 @@ declare module '@polkadot/types/lookup' { readonly findersFee: bool; } - /** @name PalletTipsError (423) */ + /** @name PalletTipsError (436) */ interface PalletTipsError extends Enum { readonly isReasonTooBig: boolean; readonly isAlreadyKnown: boolean; @@ -3921,7 +4052,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ReasonTooBig' | 'AlreadyKnown' | 'UnknownTip' | 'NotFinder' | 'StillOpen' | 'Premature'; } - /** @name PalletMultisigMultisig (425) */ + /** @name PalletMultisigMultisig (438) */ interface PalletMultisigMultisig extends Struct { readonly when: PalletMultisigTimepoint; readonly deposit: u128; @@ -3929,7 +4060,7 @@ declare module '@polkadot/types/lookup' { readonly approvals: Vec; } - /** @name PalletMultisigError (427) */ + /** @name PalletMultisigError (440) */ interface PalletMultisigError extends Enum { readonly isMinimumThreshold: boolean; readonly isAlreadyApproved: boolean; @@ -3948,13 +4079,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'MinimumThreshold' | 'AlreadyApproved' | 'NoApprovalsNeeded' | 'TooFewSignatories' | 'TooManySignatories' | 'SignatoriesOutOfOrder' | 'SenderInSignatories' | 'NotFound' | 'NotOwner' | 'NoTimepoint' | 'WrongTimepoint' | 'UnexpectedTimepoint' | 'MaxWeightTooLow' | 'AlreadyStored'; } - /** @name CtypeCtypeEntry (428) */ + /** @name CtypeCtypeEntry (441) */ interface CtypeCtypeEntry extends Struct { readonly creator: AccountId32; readonly createdAt: u64; } - /** @name CtypeError (429) */ + /** @name CtypeError (442) */ interface CtypeError extends Enum { readonly isNotFound: boolean; readonly isAlreadyExists: boolean; @@ -3962,7 +4093,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotFound' | 'AlreadyExists' | 'UnableToPayFees'; } - /** @name AttestationAttestationsAttestationDetails (430) */ + /** @name AttestationAttestationsAttestationDetails (443) */ interface AttestationAttestationsAttestationDetails extends Struct { readonly ctypeHash: H256; readonly attester: AccountId32; @@ -3971,13 +4102,13 @@ declare module '@polkadot/types/lookup' { readonly deposit: KiltSupportDeposit; } - /** @name KiltSupportDeposit (431) */ + /** @name KiltSupportDeposit (444) */ interface KiltSupportDeposit extends Struct { readonly owner: AccountId32; readonly amount: u128; } - /** @name AttestationError (433) */ + /** @name AttestationError (446) */ interface AttestationError extends Enum { readonly isAlreadyAttested: boolean; readonly isAlreadyRevoked: boolean; @@ -3988,7 +4119,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'AlreadyAttested' | 'AlreadyRevoked' | 'NotFound' | 'CTypeMismatch' | 'NotAuthorized' | 'MaxDelegatedAttestationsExceeded'; } - /** @name DelegationDelegationHierarchyDelegationNode (434) */ + /** @name DelegationDelegationHierarchyDelegationNode (447) */ interface DelegationDelegationHierarchyDelegationNode extends Struct { readonly hierarchyRootId: H256; readonly parent: Option; @@ -3997,22 +4128,22 @@ declare module '@polkadot/types/lookup' { readonly deposit: KiltSupportDeposit; } - /** @name RuntimeCommonConstantsDelegationMaxChildren (435) */ + /** @name RuntimeCommonConstantsDelegationMaxChildren (448) */ type RuntimeCommonConstantsDelegationMaxChildren = Null; - /** @name DelegationDelegationHierarchyDelegationDetails (436) */ + /** @name DelegationDelegationHierarchyDelegationDetails (449) */ interface DelegationDelegationHierarchyDelegationDetails extends Struct { readonly owner: AccountId32; readonly revoked: bool; readonly permissions: DelegationDelegationHierarchyPermissions; } - /** @name DelegationDelegationHierarchyDelegationHierarchyDetails (439) */ + /** @name DelegationDelegationHierarchyDelegationHierarchyDetails (452) */ interface DelegationDelegationHierarchyDelegationHierarchyDetails extends Struct { readonly ctypeHash: H256; } - /** @name DelegationError (440) */ + /** @name DelegationError (453) */ interface DelegationError extends Enum { readonly isDelegationAlreadyExists: boolean; readonly isInvalidDelegateSignature: boolean; @@ -4039,7 +4170,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'DelegationAlreadyExists' | 'InvalidDelegateSignature' | 'DelegationNotFound' | 'DelegateNotFound' | 'HierarchyAlreadyExists' | 'HierarchyNotFound' | 'MaxSearchDepthReached' | 'NotOwnerOfParentDelegation' | 'NotOwnerOfDelegationHierarchy' | 'ParentDelegationNotFound' | 'ParentDelegationRevoked' | 'UnauthorizedRevocation' | 'UnauthorizedRemoval' | 'UnauthorizedDelegation' | 'AccessDenied' | 'ExceededRevocationBounds' | 'ExceededRemovalBounds' | 'MaxRevocationsTooLarge' | 'MaxRemovalsTooLarge' | 'MaxParentChecksTooLarge' | 'Internal' | 'MaxChildrenExceeded'; } - /** @name DidDidDetails (441) */ + /** @name DidDidDetails (454) */ interface DidDidDetails extends Struct { readonly authenticationKey: H256; readonly keyAgreementKeys: BTreeSet; @@ -4050,13 +4181,13 @@ declare module '@polkadot/types/lookup' { readonly deposit: KiltSupportDeposit; } - /** @name DidDidDetailsDidPublicKeyDetails (444) */ + /** @name DidDidDetailsDidPublicKeyDetails (457) */ interface DidDidDetailsDidPublicKeyDetails extends Struct { readonly key: DidDidDetailsDidPublicKey; readonly blockNumber: u64; } - /** @name DidDidDetailsDidPublicKey (445) */ + /** @name DidDidDetailsDidPublicKey (458) */ interface DidDidDetailsDidPublicKey extends Enum { readonly isPublicVerificationKey: boolean; readonly asPublicVerificationKey: DidDidDetailsDidVerificationKey; @@ -4065,7 +4196,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'PublicVerificationKey' | 'PublicEncryptionKey'; } - /** @name DidError (450) */ + /** @name DidError (463) */ interface DidError extends Enum { readonly isInvalidSignatureFormat: boolean; readonly isInvalidSignature: boolean; @@ -4097,13 +4228,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidSignatureFormat' | 'InvalidSignature' | 'AlreadyExists' | 'NotFound' | 'VerificationKeyNotFound' | 'InvalidNonce' | 'UnsupportedDidAuthorizationCall' | 'InvalidDidAuthorizationCall' | 'MaxNewKeyAgreementKeysLimitExceeded' | 'MaxPublicKeysExceeded' | 'MaxKeyAgreementKeysExceeded' | 'BadDidOrigin' | 'TransactionExpired' | 'AlreadyDeleted' | 'NotOwnerOfDeposit' | 'UnableToPayFees' | 'MaxNumberOfServicesExceeded' | 'MaxServiceIdLengthExceeded' | 'MaxServiceTypeLengthExceeded' | 'MaxNumberOfTypesPerServiceExceeded' | 'MaxServiceUrlLengthExceeded' | 'MaxNumberOfUrlsPerServiceExceeded' | 'ServiceAlreadyExists' | 'ServiceNotFound' | 'InvalidServiceEncoding' | 'MaxStoredEndpointsCountExceeded' | 'Internal'; } - /** @name PalletDidLookupConnectionRecord (451) */ + /** @name PalletDidLookupConnectionRecord (464) */ interface PalletDidLookupConnectionRecord extends Struct { readonly did: AccountId32; readonly deposit: KiltSupportDeposit; } - /** @name PalletDidLookupError (453) */ + /** @name PalletDidLookupError (466) */ interface PalletDidLookupError extends Enum { readonly isNotFound: boolean; readonly isNotAuthorized: boolean; @@ -4113,14 +4244,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotFound' | 'NotAuthorized' | 'OutdatedProof' | 'InsufficientFunds' | 'Migration'; } - /** @name PalletWeb3NamesWeb3NameWeb3NameOwnership (454) */ + /** @name PalletWeb3NamesWeb3NameWeb3NameOwnership (467) */ interface PalletWeb3NamesWeb3NameWeb3NameOwnership extends Struct { readonly owner: AccountId32; readonly claimedAt: u64; readonly deposit: KiltSupportDeposit; } - /** @name PalletWeb3NamesError (455) */ + /** @name PalletWeb3NamesError (468) */ interface PalletWeb3NamesError extends Enum { readonly isInsufficientFunds: boolean; readonly isAlreadyExists: boolean; @@ -4137,7 +4268,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InsufficientFunds' | 'AlreadyExists' | 'NotFound' | 'OwnerAlreadyExists' | 'OwnerNotFound' | 'Banned' | 'NotBanned' | 'AlreadyBanned' | 'NotAuthorized' | 'TooShort' | 'TooLong' | 'InvalidCharacter'; } - /** @name PublicCredentialsCredentialsCredentialEntry (457) */ + /** @name PublicCredentialsCredentialsCredentialEntry (469) */ interface PublicCredentialsCredentialsCredentialEntry extends Struct { readonly ctypeHash: H256; readonly attester: AccountId32; @@ -4147,7 +4278,7 @@ declare module '@polkadot/types/lookup' { readonly authorizationId: Option; } - /** @name PublicCredentialsError (458) */ + /** @name PublicCredentialsError (470) */ interface PublicCredentialsError extends Enum { readonly isAlreadyAttested: boolean; readonly isNotFound: boolean; @@ -4158,28 +4289,34 @@ declare module '@polkadot/types/lookup' { readonly type: 'AlreadyAttested' | 'NotFound' | 'UnableToPayFees' | 'InvalidInput' | 'NotAuthorized' | 'Internal'; } - /** @name PolkadotPrimitivesV4UpgradeRestriction (460) */ - interface PolkadotPrimitivesV4UpgradeRestriction extends Enum { + /** @name PalletMigrationError (471) */ + interface PalletMigrationError extends Enum { + readonly isKeyParse: boolean; + readonly type: 'KeyParse'; + } + + /** @name PolkadotPrimitivesV5UpgradeRestriction (473) */ + interface PolkadotPrimitivesV5UpgradeRestriction extends Enum { readonly isPresent: boolean; readonly type: 'Present'; } - /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (461) */ + /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (474) */ interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct { readonly dmqMqcHead: H256; readonly relayDispatchQueueSize: CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize; - readonly ingressChannels: Vec>; - readonly egressChannels: Vec>; + readonly ingressChannels: Vec>; + readonly egressChannels: Vec>; } - /** @name CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize (462) */ + /** @name CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize (475) */ interface CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize extends Struct { readonly remainingCount: u32; readonly remainingSize: u32; } - /** @name PolkadotPrimitivesV4AbridgedHrmpChannel (465) */ - interface PolkadotPrimitivesV4AbridgedHrmpChannel extends Struct { + /** @name PolkadotPrimitivesV5AbridgedHrmpChannel (478) */ + interface PolkadotPrimitivesV5AbridgedHrmpChannel extends Struct { readonly maxCapacity: u32; readonly maxTotalSize: u32; readonly maxMessageSize: u32; @@ -4188,8 +4325,8 @@ declare module '@polkadot/types/lookup' { readonly mqcHead: Option; } - /** @name PolkadotPrimitivesV4AbridgedHostConfiguration (466) */ - interface PolkadotPrimitivesV4AbridgedHostConfiguration extends Struct { + /** @name PolkadotPrimitivesV5AbridgedHostConfiguration (479) */ + interface PolkadotPrimitivesV5AbridgedHostConfiguration extends Struct { readonly maxCodeSize: u32; readonly maxHeadDataSize: u32; readonly maxUpwardQueueCount: u32; @@ -4201,19 +4338,19 @@ declare module '@polkadot/types/lookup' { readonly validationUpgradeDelay: u32; } - /** @name PolkadotCorePrimitivesOutboundHrmpMessage (472) */ + /** @name PolkadotCorePrimitivesOutboundHrmpMessage (485) */ interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct { readonly recipient: u32; readonly data: Bytes; } - /** @name CumulusPalletParachainSystemCodeUpgradeAuthorization (473) */ + /** @name CumulusPalletParachainSystemCodeUpgradeAuthorization (486) */ interface CumulusPalletParachainSystemCodeUpgradeAuthorization extends Struct { readonly codeHash: H256; readonly checkVersion: bool; } - /** @name CumulusPalletParachainSystemError (474) */ + /** @name CumulusPalletParachainSystemError (487) */ interface CumulusPalletParachainSystemError extends Enum { readonly isOverlappingUpgrades: boolean; readonly isProhibitedByPolkadot: boolean; @@ -4226,21 +4363,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'OverlappingUpgrades' | 'ProhibitedByPolkadot' | 'TooBig' | 'ValidationDataNotAvailable' | 'HostConfigurationNotAvailable' | 'NotScheduled' | 'NothingAuthorized' | 'Unauthorized'; } - /** @name CumulusPalletXcmpQueueInboundChannelDetails (476) */ + /** @name CumulusPalletXcmpQueueInboundChannelDetails (489) */ interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct { readonly sender: u32; readonly state: CumulusPalletXcmpQueueInboundState; readonly messageMetadata: Vec>; } - /** @name CumulusPalletXcmpQueueInboundState (477) */ + /** @name CumulusPalletXcmpQueueInboundState (490) */ interface CumulusPalletXcmpQueueInboundState extends Enum { readonly isOk: boolean; readonly isSuspended: boolean; readonly type: 'Ok' | 'Suspended'; } - /** @name PolkadotParachainPrimitivesXcmpMessageFormat (480) */ + /** @name PolkadotParachainPrimitivesXcmpMessageFormat (493) */ interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum { readonly isConcatenatedVersionedXcm: boolean; readonly isConcatenatedEncodedBlob: boolean; @@ -4248,7 +4385,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals'; } - /** @name CumulusPalletXcmpQueueOutboundChannelDetails (483) */ + /** @name CumulusPalletXcmpQueueOutboundChannelDetails (496) */ interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct { readonly recipient: u32; readonly state: CumulusPalletXcmpQueueOutboundState; @@ -4257,14 +4394,14 @@ declare module '@polkadot/types/lookup' { readonly lastIndex: u16; } - /** @name CumulusPalletXcmpQueueOutboundState (484) */ + /** @name CumulusPalletXcmpQueueOutboundState (497) */ interface CumulusPalletXcmpQueueOutboundState extends Enum { readonly isOk: boolean; readonly isSuspended: boolean; readonly type: 'Ok' | 'Suspended'; } - /** @name CumulusPalletXcmpQueueQueueConfigData (486) */ + /** @name CumulusPalletXcmpQueueQueueConfigData (499) */ interface CumulusPalletXcmpQueueQueueConfigData extends Struct { readonly suspendThreshold: u32; readonly dropThreshold: u32; @@ -4274,7 +4411,7 @@ declare module '@polkadot/types/lookup' { readonly xcmpMaxIndividualWeight: SpWeightsWeightV2Weight; } - /** @name CumulusPalletXcmpQueueError (488) */ + /** @name CumulusPalletXcmpQueueError (501) */ interface CumulusPalletXcmpQueueError extends Enum { readonly isFailedToSend: boolean; readonly isBadXcmOrigin: boolean; @@ -4284,7 +4421,63 @@ declare module '@polkadot/types/lookup' { readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit'; } - /** @name PalletXcmError (489) */ + /** @name PalletXcmQueryStatus (502) */ + interface PalletXcmQueryStatus extends Enum { + readonly isPending: boolean; + readonly asPending: { + readonly responder: XcmVersionedMultiLocation; + readonly maybeMatchQuerier: Option; + readonly maybeNotify: Option>; + readonly timeout: u64; + } & Struct; + readonly isVersionNotifier: boolean; + readonly asVersionNotifier: { + readonly origin: XcmVersionedMultiLocation; + readonly isActive: bool; + } & Struct; + readonly isReady: boolean; + readonly asReady: { + readonly response: XcmVersionedResponse; + readonly at: u64; + } & Struct; + readonly type: 'Pending' | 'VersionNotifier' | 'Ready'; + } + + /** @name XcmVersionedResponse (506) */ + interface XcmVersionedResponse extends Enum { + readonly isV2: boolean; + readonly asV2: XcmV2Response; + readonly isV3: boolean; + readonly asV3: XcmV3Response; + readonly type: 'V2' | 'V3'; + } + + /** @name PalletXcmVersionMigrationStage (512) */ + interface PalletXcmVersionMigrationStage extends Enum { + readonly isMigrateSupportedVersion: boolean; + readonly isMigrateVersionNotifiers: boolean; + readonly isNotifyCurrentTargets: boolean; + readonly asNotifyCurrentTargets: Option; + readonly isMigrateAndNotifyOldTargets: boolean; + readonly type: 'MigrateSupportedVersion' | 'MigrateVersionNotifiers' | 'NotifyCurrentTargets' | 'MigrateAndNotifyOldTargets'; + } + + /** @name XcmVersionedAssetId (515) */ + interface XcmVersionedAssetId extends Enum { + readonly isV3: boolean; + readonly asV3: XcmV3MultiassetAssetId; + readonly type: 'V3'; + } + + /** @name PalletXcmRemoteLockedFungibleRecord (516) */ + interface PalletXcmRemoteLockedFungibleRecord extends Struct { + readonly amount: u128; + readonly owner: XcmVersionedMultiLocation; + readonly locker: XcmVersionedMultiLocation; + readonly consumers: Vec>; + } + + /** @name PalletXcmError (523) */ interface PalletXcmError extends Enum { readonly isUnreachable: boolean; readonly isSendFailure: boolean; @@ -4309,47 +4502,47 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed' | 'InvalidAsset' | 'LowBalance' | 'TooManyLocks' | 'AccountNotSovereign' | 'FeesNotMet' | 'LockNotFound' | 'InUse'; } - /** @name CumulusPalletXcmError (490) */ + /** @name CumulusPalletXcmError (524) */ type CumulusPalletXcmError = Null; - /** @name CumulusPalletDmpQueueConfigData (491) */ + /** @name CumulusPalletDmpQueueConfigData (525) */ interface CumulusPalletDmpQueueConfigData extends Struct { readonly maxIndividual: SpWeightsWeightV2Weight; } - /** @name CumulusPalletDmpQueuePageIndexData (492) */ + /** @name CumulusPalletDmpQueuePageIndexData (526) */ interface CumulusPalletDmpQueuePageIndexData extends Struct { readonly beginUsed: u32; readonly endUsed: u32; readonly overweightCount: u64; } - /** @name CumulusPalletDmpQueueError (495) */ + /** @name CumulusPalletDmpQueueError (529) */ interface CumulusPalletDmpQueueError extends Enum { readonly isUnknown: boolean; readonly isOverLimit: boolean; readonly type: 'Unknown' | 'OverLimit'; } - /** @name FrameSystemExtensionsCheckNonZeroSender (498) */ + /** @name FrameSystemExtensionsCheckNonZeroSender (532) */ type FrameSystemExtensionsCheckNonZeroSender = Null; - /** @name FrameSystemExtensionsCheckSpecVersion (499) */ + /** @name FrameSystemExtensionsCheckSpecVersion (533) */ type FrameSystemExtensionsCheckSpecVersion = Null; - /** @name FrameSystemExtensionsCheckTxVersion (500) */ + /** @name FrameSystemExtensionsCheckTxVersion (534) */ type FrameSystemExtensionsCheckTxVersion = Null; - /** @name FrameSystemExtensionsCheckGenesis (501) */ + /** @name FrameSystemExtensionsCheckGenesis (535) */ type FrameSystemExtensionsCheckGenesis = Null; - /** @name FrameSystemExtensionsCheckNonce (504) */ + /** @name FrameSystemExtensionsCheckNonce (538) */ interface FrameSystemExtensionsCheckNonce extends Compact {} - /** @name FrameSystemExtensionsCheckWeight (505) */ + /** @name FrameSystemExtensionsCheckWeight (539) */ type FrameSystemExtensionsCheckWeight = Null; - /** @name PalletTransactionPaymentChargeTransactionPayment (506) */ + /** @name PalletTransactionPaymentChargeTransactionPayment (540) */ interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} } // declare module diff --git a/packages/augment-api/tsconfig.build.json b/packages/augment-api/tsconfig.build.json index 4ea5cbbd1..4e30270ee 100644 --- a/packages/augment-api/tsconfig.build.json +++ b/packages/augment-api/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.build.json", "compilerOptions": { - "module": "ES6", "outDir": "./lib", "declaration": true, "emitDeclarationOnly": true, diff --git a/packages/type-definitions/src/types_11200.ts b/packages/type-definitions/src/types_11200.ts index 3f4f25496..0ce2a2a07 100644 --- a/packages/type-definitions/src/types_11200.ts +++ b/packages/type-definitions/src/types_11200.ts @@ -16,7 +16,7 @@ export const types11200: RegistryTypes = { DipProofRequest: { identifier: 'AccountId32', version: 'IdentityCommitmentVersion', - keys: 'Vec', + proofKeys: 'Vec', accounts: 'Vec', shouldIncludeWeb3Name: 'bool', }, diff --git a/yarn.lock b/yarn.lock index 1855db57a..81a92881c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1488,15 +1488,6 @@ __metadata: languageName: node linkType: hard -"@cspotcode/source-map-support@npm:^0.8.0": - version: 0.8.1 - resolution: "@cspotcode/source-map-support@npm:0.8.1" - dependencies: - "@jridgewell/trace-mapping": 0.3.9 - checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa - languageName: node - linkType: hard - "@digitalbazaar/ed25519-signature-2020@npm:^5.2.0": version: 5.2.0 resolution: "@digitalbazaar/ed25519-signature-2020@npm:5.2.0" @@ -1576,6 +1567,167 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/aix-ppc64@npm:0.19.12" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/android-arm64@npm:0.19.12" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/android-arm@npm:0.19.12" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/android-x64@npm:0.19.12" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/darwin-arm64@npm:0.19.12" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/darwin-x64@npm:0.19.12" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/freebsd-arm64@npm:0.19.12" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/freebsd-x64@npm:0.19.12" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-arm64@npm:0.19.12" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-arm@npm:0.19.12" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-ia32@npm:0.19.12" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-loong64@npm:0.19.12" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-mips64el@npm:0.19.12" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-ppc64@npm:0.19.12" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-riscv64@npm:0.19.12" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-s390x@npm:0.19.12" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-x64@npm:0.19.12" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/netbsd-x64@npm:0.19.12" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/openbsd-x64@npm:0.19.12" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/sunos-x64@npm:0.19.12" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/win32-arm64@npm:0.19.12" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/win32-ia32@npm:0.19.12" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/win32-x64@npm:0.19.12" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^0.4.3": version: 0.4.3 resolution: "@eslint/eslintrc@npm:0.4.3" @@ -1879,7 +2031,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:3.1.0, @jridgewell/resolve-uri@npm:^3.0.3": +"@jridgewell/resolve-uri@npm:3.1.0": version: 3.1.0 resolution: "@jridgewell/resolve-uri@npm:3.1.0" checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 @@ -1910,16 +2062,6 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:0.3.9": - version: 0.3.9 - resolution: "@jridgewell/trace-mapping@npm:0.3.9" - dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef - languageName: node - linkType: hard - "@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.18 resolution: "@jridgewell/trace-mapping@npm:0.3.18" @@ -1964,7 +2106,7 @@ __metadata: "@types/node": ^16.11.7 glob: ^7.1.1 rimraf: ^3.0.2 - ts-node: ^10.4.0 + tsx: ^4.7.0 typescript: ^4.8.3 yargs: ^16.2.0 languageName: unknown @@ -2782,34 +2924,6 @@ __metadata: languageName: node linkType: hard -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.9 - resolution: "@tsconfig/node10@npm:1.0.9" - checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df - languageName: node - linkType: hard - -"@tsconfig/node12@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node12@npm:1.0.11" - checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a - languageName: node - linkType: hard - -"@tsconfig/node14@npm:^1.0.0": - version: 1.0.3 - resolution: "@tsconfig/node14@npm:1.0.3" - checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d - languageName: node - linkType: hard - -"@tsconfig/node16@npm:^1.0.2": - version: 1.0.3 - resolution: "@tsconfig/node16@npm:1.0.3" - checksum: 3a8b657dd047495b7ad23437d6afd20297ce90380ff0bdee93fc7d39a900dbd8d9e26e53ff6b465e7967ce2adf0b218782590ce9013285121e6a5928fbd6819f - languageName: node - linkType: hard - "@types/archiver@npm:^5.3.1": version: 5.3.1 resolution: "@types/archiver@npm:5.3.1" @@ -3443,13 +3557,6 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.1.1": - version: 8.2.0 - resolution: "acorn-walk@npm:8.2.0" - checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 - languageName: node - linkType: hard - "acorn@npm:^7.4.0": version: 7.4.1 resolution: "acorn@npm:7.4.1" @@ -3459,7 +3566,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.2": +"acorn@npm:^8.7.1, acorn@npm:^8.8.2": version: 8.8.2 resolution: "acorn@npm:8.8.2" bin: @@ -3646,13 +3753,6 @@ __metadata: languageName: node linkType: hard -"arg@npm:^4.1.0": - version: 4.1.3 - resolution: "arg@npm:4.1.3" - checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 - languageName: node - linkType: hard - "argparse@npm:^1.0.7": version: 1.0.10 resolution: "argparse@npm:1.0.10" @@ -4522,13 +4622,6 @@ __metadata: languageName: node linkType: hard -"create-require@npm:^1.1.0": - version: 1.1.1 - resolution: "create-require@npm:1.1.1" - checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff - languageName: node - linkType: hard - "credentials-context@npm:^2.0.0": version: 2.0.0 resolution: "credentials-context@npm:2.0.0" @@ -4680,13 +4773,6 @@ __metadata: languageName: node linkType: hard -"diff@npm:^4.0.1": - version: 4.0.2 - resolution: "diff@npm:4.0.2" - checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d - languageName: node - linkType: hard - "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -4923,6 +5009,86 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:~0.19.10": + version: 0.19.12 + resolution: "esbuild@npm:0.19.12" + dependencies: + "@esbuild/aix-ppc64": 0.19.12 + "@esbuild/android-arm": 0.19.12 + "@esbuild/android-arm64": 0.19.12 + "@esbuild/android-x64": 0.19.12 + "@esbuild/darwin-arm64": 0.19.12 + "@esbuild/darwin-x64": 0.19.12 + "@esbuild/freebsd-arm64": 0.19.12 + "@esbuild/freebsd-x64": 0.19.12 + "@esbuild/linux-arm": 0.19.12 + "@esbuild/linux-arm64": 0.19.12 + "@esbuild/linux-ia32": 0.19.12 + "@esbuild/linux-loong64": 0.19.12 + "@esbuild/linux-mips64el": 0.19.12 + "@esbuild/linux-ppc64": 0.19.12 + "@esbuild/linux-riscv64": 0.19.12 + "@esbuild/linux-s390x": 0.19.12 + "@esbuild/linux-x64": 0.19.12 + "@esbuild/netbsd-x64": 0.19.12 + "@esbuild/openbsd-x64": 0.19.12 + "@esbuild/sunos-x64": 0.19.12 + "@esbuild/win32-arm64": 0.19.12 + "@esbuild/win32-ia32": 0.19.12 + "@esbuild/win32-x64": 0.19.12 + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 2936e29107b43e65a775b78b7bc66ddd7d76febd73840ac7e825fb22b65029422ff51038a08d19b05154f543584bd3afe7d1ef1c63900429475b17fbe61cb61f + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -5489,19 +5655,19 @@ __metadata: languageName: node linkType: hard -fsevents@^2.3.2: - version: 2.3.2 - resolution: "fsevents@npm:2.3.2" +"fsevents@^2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" dependencies: node-gyp: latest - checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 conditions: os=darwin languageName: node linkType: hard -"fsevents@patch:fsevents@^2.3.2#~builtin": - version: 2.3.2 - resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" +"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" dependencies: node-gyp: latest conditions: os=darwin @@ -5608,6 +5774,15 @@ fsevents@^2.3.2: languageName: node linkType: hard +"get-tsconfig@npm:^4.7.2": + version: 4.7.2 + resolution: "get-tsconfig@npm:4.7.2" + dependencies: + resolve-pkg-maps: ^1.0.0 + checksum: 172358903250eff0103943f816e8a4e51d29b8e5449058bdf7266714a908a48239f6884308bd3a6ff28b09f692b9533dbebfd183ab63e4e14f073cda91f1bca9 + languageName: node + linkType: hard + "git-raw-commits@npm:^2.0.0": version: 2.0.11 resolution: "git-raw-commits@npm:2.0.11" @@ -7085,7 +7260,7 @@ fsevents@^2.3.2: languageName: node linkType: hard -"make-error@npm:1.x, make-error@npm:^1.1.1": +"make-error@npm:1.x": version: 1.3.6 resolution: "make-error@npm:1.3.6" checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 @@ -8222,6 +8397,13 @@ fsevents@^2.3.2: languageName: node linkType: hard +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 1012afc566b3fdb190a6309cc37ef3b2dcc35dff5fa6683a9d00cd25c3247edfbc4691b91078c97adc82a29b77a2660c30d791d65dab4fc78bfc473f60289977 + languageName: node + linkType: hard + "resolve.exports@npm:^2.0.0": version: 2.0.2 resolution: "resolve.exports@npm:2.0.2" @@ -9145,44 +9327,6 @@ fsevents@^2.3.2: languageName: node linkType: hard -"ts-node@npm:^10.4.0": - version: 10.9.1 - resolution: "ts-node@npm:10.9.1" - dependencies: - "@cspotcode/source-map-support": ^0.8.0 - "@tsconfig/node10": ^1.0.7 - "@tsconfig/node12": ^1.0.7 - "@tsconfig/node14": ^1.0.0 - "@tsconfig/node16": ^1.0.2 - acorn: ^8.4.1 - acorn-walk: ^8.1.1 - arg: ^4.1.0 - create-require: ^1.1.0 - diff: ^4.0.1 - make-error: ^1.1.1 - v8-compile-cache-lib: ^3.0.1 - yn: 3.1.1 - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - bin: - ts-node: dist/bin.js - ts-node-cwd: dist/bin-cwd.js - ts-node-esm: dist/bin-esm.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 - languageName: node - linkType: hard - "tsconfig-paths@npm:^3.12.0": version: 3.14.1 resolution: "tsconfig-paths@npm:3.14.1" @@ -9220,6 +9364,22 @@ fsevents@^2.3.2: languageName: node linkType: hard +"tsx@npm:^4.7.0": + version: 4.7.0 + resolution: "tsx@npm:4.7.0" + dependencies: + esbuild: ~0.19.10 + fsevents: ~2.3.3 + get-tsconfig: ^4.7.2 + dependenciesMeta: + fsevents: + optional: true + bin: + tsx: dist/cli.mjs + checksum: a3a17fa8a40dbe0aff26fb2bc71a069e568152e0685b0bd9a31ea1091806274ba14882551433ed01efa7eae16f1aa965e2e47f3075ec1e914c42cf5dfce1f924 + languageName: node + linkType: hard + "tweetnacl@npm:^0.14.3": version: 0.14.5 resolution: "tweetnacl@npm:0.14.5" @@ -9455,13 +9615,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"v8-compile-cache-lib@npm:^3.0.1": - version: 3.0.1 - resolution: "v8-compile-cache-lib@npm:3.0.1" - checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 - languageName: node - linkType: hard - "v8-compile-cache@npm:^2.0.3": version: 2.3.0 resolution: "v8-compile-cache@npm:2.3.0" @@ -9864,13 +10017,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"yn@npm:3.1.1": - version: 3.1.1 - resolution: "yn@npm:3.1.1" - checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 - languageName: node - linkType: hard - "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" From b35dfa94168de455102a93f399d41a217bb80cb6 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Thu, 15 Feb 2024 10:21:58 +0100 Subject: [PATCH 093/130] refactor: more flexible extrinsic unwrapping for ctype fetching (#837) * refactor!: flattenCalls unpacks all calls * test: add integration tests for dispatchAs * fix: add conditional logic to event & extrinsic matching * docs: update docstring on flattenCalls --- .../src/credentials/PublicCredential.chain.ts | 99 ++++++----------- packages/chain-helpers/package.json | 1 + .../src/blockchain/Blockchain.ts | 43 +++++-- .../src/V1/KiltAttestationProofV1.ts | 2 +- packages/credentials/src/ctype/CType.chain.ts | 105 +++++------------- tests/integration/Ctypes.spec.ts | 42 +++++++ tests/integration/PublicCredentials.spec.ts | 61 ++++++++++ yarn.lock | 3 +- 8 files changed, 200 insertions(+), 156 deletions(-) diff --git a/packages/asset-credentials/src/credentials/PublicCredential.chain.ts b/packages/asset-credentials/src/credentials/PublicCredential.chain.ts index d8884a5ff..2762769c7 100644 --- a/packages/asset-credentials/src/credentials/PublicCredential.chain.ts +++ b/packages/asset-credentials/src/credentials/PublicCredential.chain.ts @@ -14,9 +14,7 @@ import type { Did, HexString, } from '@kiltprotocol/types' -import type { ApiPromise } from '@polkadot/api' import type { GenericCall, Option } from '@polkadot/types' -import type { Call } from '@polkadot/types/interfaces' import type { BN } from '@polkadot/util' import type { PublicCredentialsCredentialsCredential, @@ -125,28 +123,6 @@ export function fromChain( } // Given a (nested) call, flattens them and filter by calls that are of type `api.tx.publicCredentials.add`. -function extractPublicCredentialCreationCallsFromDidCall( - api: ApiPromise, - call: Call -): Array> { - const extrinsicCalls = Blockchain.flattenCalls(call, api) - return extrinsicCalls.filter( - (c): c is GenericCall => - api.tx.publicCredentials.add.is(c) - ) -} - -// Given a (nested) call, flattens them and filter by calls that are of type `api.tx.did.submitDidCall`. -function extractDidCallsFromBatchCall( - api: ApiPromise, - call: Call -): Array> { - const extrinsicCalls = Blockchain.flattenCalls(call, api) - return extrinsicCalls.filter( - (c): c is GenericCall => - api.tx.did.submitDidCall.is(c) - ) -} /** * Retrieves from the blockchain the {@link IPublicCredential} that is identified by the provided identifier. @@ -164,14 +140,19 @@ export async function fetchCredentialFromChain( const publicCredentialEntry = await api.call.publicCredentials.getById( credentialId ) - const { blockNumber, revoked } = publicCredentialEntry.unwrap() + const { + blockNumber, + revoked, + attester: attesterId, + } = publicCredentialEntry.unwrap() + const attester = didFromChain(attesterId) const extrinsic = await Blockchain.retrieveExtrinsicFromBlock( blockNumber, ({ events }) => events.some( (event) => - api.events.publicCredentials.CredentialStored.is(event) && + api.events.publicCredentials?.CredentialStored?.is(event) && event.data[1].toString() === credentialId ), api @@ -183,58 +164,40 @@ export async function fetchCredentialFromChain( ) } - if ( - !Blockchain.isBatch(extrinsic, api) && - !api.tx.did.submitDidCall.is(extrinsic) - ) { - throw new SDKErrors.PublicCredentialError( - 'Extrinsic should be either a `did.submitDidCall` extrinsic or a batch with at least a `did.submitDidCall` extrinsic' - ) - } - - // If we're dealing with a batch, flatten any nested `submit_did_call` calls, - // otherwise the extrinsic is itself a submit_did_call, so just take it. - const didCalls = Blockchain.isBatch(extrinsic, api) - ? extrinsic.args[0].flatMap((batchCall) => - extractDidCallsFromBatchCall(api, batchCall) - ) - : [extrinsic] - - // From the list of DID calls, only consider public_credentials::add calls, bundling each of them with their DID submitter. - // It returns a list of [reconstructedCredential, attesterDid]. - const callCredentialsContent = didCalls.flatMap((didCall) => { - const publicCredentialCalls = - extractPublicCredentialCreationCallsFromDidCall(api, didCall.args[0].call) - // Re-create the issued public credential for each call identified. - return publicCredentialCalls.map( - (credentialCreationCall) => - [ - credentialInputFromChain(credentialCreationCall.args[0]), - didFromChain(didCall.args[0].did), - ] as const - ) - }) + // Unpack any nested calls, e.g., within a batch or `submit_did_call` + const extrinsicCalls = Blockchain.flattenCalls(extrinsic, api) - // If more than one call is present, it always considers the last one as the valid one, and takes its attester. - const lastRightCredentialCreationCall = callCredentialsContent - .reverse() - .find(([credential, attester]) => { - const reconstructedId = getIdForCredential(credential, attester) - return reconstructedId === credentialId - }) + // only consider public_credentials::add calls + const publicCredentialCalls = extrinsicCalls.filter( + (c): c is GenericCall => + api.tx.publicCredentials?.add?.is(c) + ) - if (!lastRightCredentialCreationCall) { + // Re-create the issued public credential for each call identified to find the credential with the id we're looking for + const credentialInput = publicCredentialCalls.reduceRight< + IPublicCredentialInput | undefined + >((selectedCredential, credentialCreationCall) => { + if (selectedCredential) { + return selectedCredential + } + const credential = credentialInputFromChain(credentialCreationCall.args[0]) + const reconstructedId = getIdForCredential(credential, attester) + if (reconstructedId === credentialId) { + return credential + } + return undefined + }, undefined) + + if (typeof credentialInput === 'undefined') { throw new SDKErrors.PublicCredentialError( 'Block should always contain the full credential, eventually.' ) } - const [credentialInput, attester] = lastRightCredentialCreationCall - return { ...credentialInput, attester, - id: getIdForCredential(credentialInput, attester), + id: credentialId, blockNumber, revoked: revoked.toPrimitive(), } diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index 2353b53ae..b7d48270c 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -34,6 +34,7 @@ "typescript": "^4.8.3" }, "dependencies": { + "@kiltprotocol/augment-api": "workspace:^", "@kiltprotocol/config": "workspace:*", "@kiltprotocol/type-definitions": "workspace:*", "@kiltprotocol/types": "workspace:*", diff --git a/packages/chain-helpers/src/blockchain/Blockchain.ts b/packages/chain-helpers/src/blockchain/Blockchain.ts index c9e3a6512..24884b280 100644 --- a/packages/chain-helpers/src/blockchain/Blockchain.ts +++ b/packages/chain-helpers/src/blockchain/Blockchain.ts @@ -5,11 +5,13 @@ * found in the LICENSE file in the root directory of this source tree. */ +import '@kiltprotocol/augment-api' + import type { ApiPromise } from '@polkadot/api' import type { TxWithEvent } from '@polkadot/api-derive/types' -import type { GenericCall, GenericExtrinsic, Vec } from '@polkadot/types' +import type { Vec } from '@polkadot/types' import type { Call, Extrinsic } from '@polkadot/types/interfaces' -import type { AnyNumber } from '@polkadot/types/types' +import type { AnyNumber, IMethod } from '@polkadot/types/types' import type { BN } from '@polkadot/util' import type { @@ -210,31 +212,50 @@ export async function signAndSubmitTx( * @returns True if it's a batch, false otherwise. */ export function isBatch( - extrinsic: Extrinsic | Call, + extrinsic: IMethod, api?: ApiPromise -): extrinsic is GenericExtrinsic<[Vec]> | GenericCall<[Vec]> { +): extrinsic is IMethod<[Vec]> { const apiPromise = api ?? ConfigService.get('api') return ( - apiPromise.tx.utility.batch.is(extrinsic) || - apiPromise.tx.utility.batchAll.is(extrinsic) || - apiPromise.tx.utility.forceBatch.is(extrinsic) + apiPromise.tx.utility?.batch?.is(extrinsic) || + apiPromise.tx.utility?.batchAll?.is(extrinsic) || + apiPromise.tx.utility?.forceBatch?.is(extrinsic) ) } /** - * Flatten all calls into a single array following a DFS approach. + * Flatten all nested calls into a single array following a DFS approach. * * For example, given the calls [[N1, N2], [N3, [N4, N5], N6]], the final list will look like [N1, N2, N3, N4, N5, N6]. * + * The following extrinsics are recognized as containing nested calls and will be unpacked: + * + * - pallet `utility`: `batch`, `batchAll`, `forceBatch`. + * - pallet `did`: `submitDidCall`, `dispatchAs`. + * - pallet `proxy`: `proxy`, `proxyAnnounced`. + * * @param call The {@link Call} which can potentially contain nested calls. * @param api The optional {@link ApiPromise}. If not provided, the one returned by the `ConfigService` is used. * * @returns A list of {@link Call} nested according to the rules above. */ -export function flattenCalls(call: Call, api?: ApiPromise): Call[] { - if (isBatch(call, api)) { +export function flattenCalls(call: IMethod, api?: ApiPromise): IMethod[] { + const apiObject = api ?? ConfigService.get('api') + if (isBatch(call, apiObject)) { // Inductive case - return call.args[0].flatMap((c) => flattenCalls(c, api)) + return call.args[0].flatMap((c) => flattenCalls(c, apiObject)) + } + if (apiObject.tx.did?.submitDidCall?.is(call)) { + return flattenCalls(call.args[0].call, apiObject) + } + if (apiObject.tx.did?.dispatchAs?.is(call)) { + return flattenCalls(call.args[1], apiObject) + } + if (apiObject.tx.proxy?.proxy?.is(call)) { + return flattenCalls(call.args[2], apiObject) + } + if (apiObject.tx.proxy?.proxyAnnounced?.is(call)) { + return flattenCalls(call.args[3], apiObject) } // Base case return [call] diff --git a/packages/credentials/src/V1/KiltAttestationProofV1.ts b/packages/credentials/src/V1/KiltAttestationProofV1.ts index ec9f1194e..3dc4995c2 100644 --- a/packages/credentials/src/V1/KiltAttestationProofV1.ts +++ b/packages/credentials/src/V1/KiltAttestationProofV1.ts @@ -244,7 +244,7 @@ async function verifyAttestedAt( .find( ({ phase, event }) => phase.isApplyExtrinsic && - api.events.attestation.AttestationCreated.is(event) && + api.events.attestation?.AttestationCreated?.is(event) && u8aEq(event.data[1], claimHash) ) if (!attestationEvent) diff --git a/packages/credentials/src/ctype/CType.chain.ts b/packages/credentials/src/ctype/CType.chain.ts index 2b0a75beb..d1f26a8da 100644 --- a/packages/credentials/src/ctype/CType.chain.ts +++ b/packages/credentials/src/ctype/CType.chain.ts @@ -5,9 +5,8 @@ * found in the LICENSE file in the root directory of this source tree. */ -import type { ApiPromise } from '@polkadot/api' import type { Bytes, GenericCall, Option } from '@polkadot/types' -import type { AccountId, Call } from '@polkadot/types/interfaces' +import type { AccountId } from '@polkadot/types/interfaces' import type { BN } from '@polkadot/util' import type { CtypeCtypeEntry } from '@kiltprotocol/augment-api' @@ -118,30 +117,6 @@ export function fromChain( } } -// Given a (nested) call, flattens them and filter by calls that are of type `api.tx.ctype.add`. -function extractCTypeCreationCallsFromDidCall( - api: ApiPromise, - call: Call -): Array> { - const extrinsicCalls = Blockchain.flattenCalls(call, api) - return extrinsicCalls.filter( - (c): c is GenericCall => - api.tx.ctype.add.is(c) - ) -} - -// Given a (nested) call, flattens them and filter by calls that are of type `api.tx.did.submitDidCall`. -function extractDidCallsFromBatchCall( - api: ApiPromise, - call: Call -): Array> { - const extrinsicCalls = Blockchain.flattenCalls(call, api) - return extrinsicCalls.filter( - (c): c is GenericCall => - api.tx.did.submitDidCall.is(c) - ) -} - /** * Resolves a CType identifier to the CType definition by fetching data from the block containing the transaction that registered the CType on chain. * @@ -156,7 +131,7 @@ export async function fetchFromChain( const cTypeHash = idToHash(cTypeId) const cTypeEntry = await api.query.ctype.ctypes(cTypeHash) - const { createdAt } = fromChain(cTypeEntry) + const { createdAt, creator } = fromChain(cTypeEntry) if (typeof createdAt === 'undefined') throw new SDKErrors.CTypeError( 'Cannot fetch CType definitions on a chain that does not store the createdAt block' @@ -167,72 +142,52 @@ export async function fetchFromChain( ({ events }) => events.some( (event) => - api.events.ctype.CTypeCreated.is(event) && - event.data[1].toString() === cTypeHash + api.events.ctype?.CTypeCreated?.is(event) && + event.data[1].toHex() === cTypeHash ), api ) if (extrinsic === null) { throw new SDKErrors.CTypeError( - `There is not CType with the provided ID "${cTypeId}" on chain.` + `There is no CType with the provided ID "${cTypeId}" on chain.` ) } - if ( - !Blockchain.isBatch(extrinsic, api) && - !api.tx.did.submitDidCall.is(extrinsic) - ) { - throw new SDKErrors.PublicCredentialError( - 'Extrinsic should be either a `did.submitDidCall` extrinsic or a batch with at least a `did.submitDidCall` extrinsic' - ) - } + // Unpack any nested calls, e.g., within a batch or `submit_did_call` + const extrinsicCalls = Blockchain.flattenCalls(extrinsic, api) - // If we're dealing with a batch, flatten any nested `submit_did_call` calls, - // otherwise the extrinsic is itself a submit_did_call, so just take it. - const didCalls = Blockchain.isBatch(extrinsic, api) - ? extrinsic.args[0].flatMap((batchCall) => - extractDidCallsFromBatchCall(api, batchCall) - ) - : [extrinsic] - - // From the list of DID calls, only consider ctype::add calls, bundling each of them with their DID submitter. - // It returns a list of [reconstructedCType, attesterDid]. - const ctypeCallContent = didCalls.flatMap((didCall) => { - const ctypeCreationCalls = extractCTypeCreationCallsFromDidCall( - api, - didCall.args[0].call - ) - // Re-create the issued public credential for each call identified. - return ctypeCreationCalls.map( - (ctypeCreationCall) => - [ - cTypeInputFromChain(ctypeCreationCall.args[0]), - Did.fromChain(didCall.args[0].did), - ] as const - ) - }) + // only consider ctype::add calls + const ctypeCreationCalls = extrinsicCalls.filter( + (c): c is GenericCall => + api.tx.ctype?.add?.is(c) + ) - // If more than a call is present, it always considers the last one as the valid one. - const lastRightCTypeCreationCall = ctypeCallContent - .reverse() - .find((cTypeInput) => { - return cTypeInput[0].$id === cTypeId - }) + // Re-create the ctype for each call identified to find the right ctype. + // If more than one matching call is present, it always considers the last one as the valid one. + const cTypeDefinition = ctypeCreationCalls.reduceRight( + (selectedCType, cTypeCreationCall) => { + if (selectedCType) { + return selectedCType + } + const cType = cTypeInputFromChain(cTypeCreationCall.args[0]) + + if (cType.$id === cTypeId) { + return cType + } + return undefined + }, + undefined + ) - if (!lastRightCTypeCreationCall) { + if (typeof cTypeDefinition === 'undefined') { throw new SDKErrors.CTypeError( 'Block should always contain the full CType, eventually.' ) } - const [ctypeInput, creator] = lastRightCTypeCreationCall - return { - cType: { - ...ctypeInput, - $id: cTypeId, - }, + cType: cTypeDefinition, creator, createdAt, } diff --git a/tests/integration/Ctypes.spec.ts b/tests/integration/Ctypes.spec.ts index a3f5ff2e6..844040cde 100644 --- a/tests/integration/Ctypes.spec.ts +++ b/tests/integration/Ctypes.spec.ts @@ -89,6 +89,48 @@ describe('When there is an CtypeCreator and a verifier', () => { } }, 40_000) + it('should fetch a ctype created with dispatchAs', async () => { + if (typeof api.tx.did.dispatchAs !== 'function' || !hasBlockNumbers) { + console.warn('skipping dispatchAs tests') + return + } + + const minBalance = 10n ** 16n + + const assertionMethodKey = key.keypair.address + // assertionMethod keypair needs balance + if ( + ( + await api.query.system.account(assertionMethodKey) + ).data.free.toBigInt() < minBalance + ) { + console.log('sending funds to assertion method key account...') + const fundsTx = api.tx.balances.transfer(assertionMethodKey, minBalance) + await submitTx(fundsTx, paymentAccount) + console.log('sending funds completed') + } + + const cType = makeCType() + // nest ctype call for extra complexity + const storeTx = api.tx.utility.batchAll([ + api.tx.ctype.add(CType.toChain(cType)), + ]) + // authorize via dispatchAs + const authorizedStoreTx = api.tx.did.dispatchAs( + Did.toChain(ctypeCreator.id), + storeTx + ) + // sign with assertionMethod keypair + await submitTx(authorizedStoreTx, key.keypair) + + const { cType: originalCtype, creator } = await CType.fetchFromChain( + cType.$id + ) + expect(originalCtype).toStrictEqual(cType) + expect(creator).toBe(ctypeCreator.id) + await expect(CType.verifyStored(originalCtype)).resolves.not.toThrow() + }, 40_000) + it('should not be possible to create a claim type that exists', async () => { const cType = makeCType() const storeTx = api.tx.ctype.add(CType.toChain(cType)) diff --git a/tests/integration/PublicCredentials.spec.ts b/tests/integration/PublicCredentials.spec.ts index cbdd65e80..5239ad39f 100644 --- a/tests/integration/PublicCredentials.spec.ts +++ b/tests/integration/PublicCredentials.spec.ts @@ -267,6 +267,67 @@ describe('When there is an attester and ctype NFT name', () => { allAssetCredentialsBeforeRevocation.length - 1 ) }, 60_000) + + it('should fetch a credential created with dispatchAs', async () => { + if (typeof api.tx.did.dispatchAs !== 'function') { + console.warn('skipping dispatchAs tests') + return + } + + const minBalance = 10n ** 16n + + const assertionMethodKey = attesterKey.keypair.address + // assertionMethod keypair needs balance + if ( + ( + await api.query.system.account(assertionMethodKey) + ).data.free.toBigInt() < minBalance + ) { + console.log('sending funds to assertion method key account...') + const fundsTx = api.tx.balances.transfer(assertionMethodKey, minBalance) + await submitTx(fundsTx, tokenHolder) + console.log('sending funds completed') + } + + latestCredential = { + claims: { + name: `Certified NFT collection with id ${UUID.generate()}`, + }, + cTypeHash: CType.getHashForSchema(nftNameCType), + delegationId: null, + subject: assetId, + } + + // authorize via dispatchAs + const authorizedStoreTx = api.tx.did.dispatchAs( + Did.toChain(attester.id), + api.tx.publicCredentials.add(PublicCredentials.toChain(latestCredential)) + ) + // nest call for extra complexity + const nestedCall = api.tx.utility.batch([authorizedStoreTx]) + + // sign with assertionMethod keypair + await submitTx(nestedCall, attesterKey.keypair) + + const credentialId = PublicCredentials.getIdForCredential( + latestCredential, + attester.id + ) + + const completeCredential = await PublicCredentials.fetchCredentialFromChain( + credentialId + ) + + // Verify that the retrieved credential matches the input one, plus the generated ID and the attester DID. + expect(completeCredential).toEqual( + expect.objectContaining({ + ...latestCredential, + id: credentialId, + attester: attester.id, + revoked: false, + }) + ) + }, 40_000) }) describe('When there is an issued public credential', () => { diff --git a/yarn.lock b/yarn.lock index 81a92881c..a3aeb934b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2092,7 +2092,7 @@ __metadata: languageName: unknown linkType: soft -"@kiltprotocol/augment-api@workspace:*, @kiltprotocol/augment-api@workspace:packages/augment-api": +"@kiltprotocol/augment-api@workspace:*, @kiltprotocol/augment-api@workspace:^, @kiltprotocol/augment-api@workspace:packages/augment-api": version: 0.0.0-use.local resolution: "@kiltprotocol/augment-api@workspace:packages/augment-api" dependencies: @@ -2116,6 +2116,7 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/chain-helpers@workspace:packages/chain-helpers" dependencies: + "@kiltprotocol/augment-api": "workspace:^" "@kiltprotocol/config": "workspace:*" "@kiltprotocol/type-definitions": "workspace:*" "@kiltprotocol/types": "workspace:*" From bd672d4dd9eaf9f092f4abc2a00664bb4c563fb2 Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Tue, 26 Mar 2024 14:20:54 +0100 Subject: [PATCH 094/130] refactor: new augmentation (#842) * refactor: replace augment package with external version * test: re-add metadata for tests --- .eslintrc.js | 6 - .prettierignore | 1 - jest.config.js | 1 - packages/asset-credentials/package.json | 9 +- packages/augment-api/README.md | 14 - packages/augment-api/extraDefs/package.json | 7 - packages/augment-api/index.cjs | 10 - packages/augment-api/index.mjs | 10 - packages/augment-api/metadata/spiritnet.json | 1 - packages/augment-api/package.json | 58 - .../augment-api/scripts/fetchMetadata.cjs | 82 - packages/augment-api/scripts/fixTypes.mjs | 33 - packages/augment-api/src/index.ts | 13 - .../src/interfaces/augment-api-consts.ts | 591 --- .../src/interfaces/augment-api-errors.ts | 1238 ----- .../src/interfaces/augment-api-events.ts | 1029 ---- .../src/interfaces/augment-api-query.ts | 945 ---- .../src/interfaces/augment-api-rpc.ts | 617 --- .../src/interfaces/augment-api-runtime.ts | 208 - .../src/interfaces/augment-api-tx.ts | 949 ---- .../augment-api/src/interfaces/augment-api.ts | 10 - .../src/interfaces/augment-types.ts | 1244 ----- .../augment-api/src/interfaces/definitions.ts | 3 - .../src/interfaces/extraDefs/definitions.ts | 13 - .../src/interfaces/extraDefs/index.ts | 4 - .../src/interfaces/extraDefs/types.ts | 164 - packages/augment-api/src/interfaces/index.ts | 4 - packages/augment-api/src/interfaces/lookup.ts | 4292 ---------------- .../augment-api/src/interfaces/registry.ts | 312 -- .../src/interfaces/types-lookup.ts | 4548 ----------------- packages/augment-api/src/interfaces/types.ts | 4 - packages/augment-api/src/types.ts | 11 - packages/augment-api/tsconfig.build.json | 30 - packages/chain-helpers/package.json | 9 +- .../src/blockchain/Blockchain.ts | 5 +- packages/credentials/package.json | 9 +- packages/did/package.json | 9 +- .../src/suites/KiltAttestationProofV1.spec.ts | 2 +- packages/sdk-js/package.json | 7 +- tests/testUtils/metadata/spiritnet.json | 1 + tests/testUtils/metadata/spiritnet.ts | 4 +- tsconfig.docs.json | 1 - tsconfig.json | 2 - yarn.lock | 826 +-- 44 files changed, 494 insertions(+), 16842 deletions(-) delete mode 100644 packages/augment-api/README.md delete mode 100644 packages/augment-api/extraDefs/package.json delete mode 100644 packages/augment-api/index.cjs delete mode 100644 packages/augment-api/index.mjs delete mode 100644 packages/augment-api/metadata/spiritnet.json delete mode 100644 packages/augment-api/package.json delete mode 100644 packages/augment-api/scripts/fetchMetadata.cjs delete mode 100755 packages/augment-api/scripts/fixTypes.mjs delete mode 100644 packages/augment-api/src/index.ts delete mode 100644 packages/augment-api/src/interfaces/augment-api-consts.ts delete mode 100644 packages/augment-api/src/interfaces/augment-api-errors.ts delete mode 100644 packages/augment-api/src/interfaces/augment-api-events.ts delete mode 100644 packages/augment-api/src/interfaces/augment-api-query.ts delete mode 100644 packages/augment-api/src/interfaces/augment-api-rpc.ts delete mode 100644 packages/augment-api/src/interfaces/augment-api-runtime.ts delete mode 100644 packages/augment-api/src/interfaces/augment-api-tx.ts delete mode 100644 packages/augment-api/src/interfaces/augment-api.ts delete mode 100644 packages/augment-api/src/interfaces/augment-types.ts delete mode 100644 packages/augment-api/src/interfaces/definitions.ts delete mode 100644 packages/augment-api/src/interfaces/extraDefs/definitions.ts delete mode 100644 packages/augment-api/src/interfaces/extraDefs/index.ts delete mode 100644 packages/augment-api/src/interfaces/extraDefs/types.ts delete mode 100644 packages/augment-api/src/interfaces/index.ts delete mode 100644 packages/augment-api/src/interfaces/lookup.ts delete mode 100644 packages/augment-api/src/interfaces/registry.ts delete mode 100644 packages/augment-api/src/interfaces/types-lookup.ts delete mode 100644 packages/augment-api/src/interfaces/types.ts delete mode 100644 packages/augment-api/src/types.ts delete mode 100644 packages/augment-api/tsconfig.build.json create mode 100644 tests/testUtils/metadata/spiritnet.json diff --git a/.eslintrc.js b/.eslintrc.js index 5ada24105..334f08d68 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -152,12 +152,6 @@ module.exports = { 'no-console': 'off', }, }, - { - files: ['**/augment-api/src/interfaces/**/*.ts'], - rules: { - 'license-header/header': 'off', - }, - }, { files: ['tests/**/*'], rules: { diff --git a/.prettierignore b/.prettierignore index 380145134..e00e678cb 100644 --- a/.prettierignore +++ b/.prettierignore @@ -6,4 +6,3 @@ lib !package.json jest.* coverage -**/augment-api/src/interfaces/**/*.ts diff --git a/jest.config.js b/jest.config.js index da4cc2c87..c80f21804 100644 --- a/jest.config.js +++ b/jest.config.js @@ -31,7 +31,6 @@ const common = { '/tests/', // not properly testable 'packages/types/', - 'packages/augment-api/', 'packages/type-definitions/', 'index.ts', 'types.ts', diff --git a/packages/asset-credentials/package.json b/packages/asset-credentials/package.json index afd6bc89c..ebec626aa 100644 --- a/packages/asset-credentials/package.json +++ b/packages/asset-credentials/package.json @@ -33,8 +33,10 @@ "rimraf": "^3.0.2", "typescript": "^4.8.3" }, + "peerDependencies": { + "@kiltprotocol/augment-api": "*" + }, "dependencies": { - "@kiltprotocol/augment-api": "workspace:*", "@kiltprotocol/chain-helpers": "workspace:*", "@kiltprotocol/config": "workspace:*", "@kiltprotocol/credentials": "workspace:*", @@ -45,5 +47,10 @@ "@polkadot/types": "^10.7.3", "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0" + }, + "peerDependenciesMeta": { + "@kiltprotocol/augment-api": { + "optional": true + } } } diff --git a/packages/augment-api/README.md b/packages/augment-api/README.md deleted file mode 100644 index eedd7fea0..000000000 --- a/packages/augment-api/README.md +++ /dev/null @@ -1,14 +0,0 @@ -[![](https://user-images.githubusercontent.com/39338561/122415864-8d6a7c00-cf88-11eb-846f-a98a936f88da.png) -](https://kilt.io) - -![Lint and Test](https://github.com/KILTprotocol/sdk-js/workflows/Lint%20and%20Test/badge.svg) - -# KILT Polkadot Api Augmentation - -Provides api augmentation for the KILT spiritnet. - -## How to update type augmentation - -1. Update metadata dump. To pull the latest metadata from the KILT spiritnet, run `yarn workspace @kiltprotocol/augment-api run update-metadata`. To pull from a custom endpoint, run `yarn workspace @kiltprotocol/augment-api run update-metadata -e `. -2. Run the type generation script: `yarn workspace @kiltprotocol/augment-api run build:types`. -3. Build the sdk (`yarn run build`) and fix type issues if necessary. diff --git a/packages/augment-api/extraDefs/package.json b/packages/augment-api/extraDefs/package.json deleted file mode 100644 index fdcd276d0..000000000 --- a/packages/augment-api/extraDefs/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "types": "../lib/interfaces/extraDefs/index.d.ts", - "//": [ - "This is a fallback to support the extraDefs subpath export for module systems that do not support the package.json exports field.", - "Inspired by https://github.com/andrewbranch/example-subpath-exports-ts-compat/blob/1ffe3425b0a7ad8ecdf3c373f76f431ee341366b/examples/node_modules/package-json-redirects/." - ] -} diff --git a/packages/augment-api/index.cjs b/packages/augment-api/index.cjs deleted file mode 100644 index c6b24226f..000000000 --- a/packages/augment-api/index.cjs +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) 2018-2024, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -// This package does not contain executable code. Index files are included only to allow api augmentation using `require('@kiltprotocol/augment-api')`. - -module.exports = {} diff --git a/packages/augment-api/index.mjs b/packages/augment-api/index.mjs deleted file mode 100644 index 8c2eaca0d..000000000 --- a/packages/augment-api/index.mjs +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) 2018-2024, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -// This package does not contain executable code. Index files are included only to allow api augmentation using `import '@kiltprotocol/augment-api'`. - -export {} diff --git a/packages/augment-api/metadata/spiritnet.json b/packages/augment-api/metadata/spiritnet.json deleted file mode 100644 index 111c53b6f..000000000 --- a/packages/augment-api/metadata/spiritnet.json +++ /dev/null @@ -1 +0,0 @@ -{"result":"0x6d6574610e7508000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273200120526566436f756e7400012470726f766964657273200120526566436f756e7400012c73756666696369656e7473200120526566436f756e740001106461746114012c4163636f756e74446174610000100000050600140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200000050500240c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540128000c01186e6f726d616c2801045400012c6f7065726174696f6e616c280104540001246d616e6461746f7279280104540000280c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d652c010c75363400012870726f6f665f73697a652c010c75363400002c000006100030083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000034000002080038102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f67733c013c5665633c4469676573744974656d3e00003c000002400040102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e00060024436f6e73656e7375730800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000400105365616c0800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000500144f74686572040034011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e74557064617465640008000044000003040000000800480000024c004c08306672616d655f73797374656d2c4576656e745265636f7264080445015004540130000c01147068617365c502011450686173650001146576656e7450010445000118746f70696373b10101185665633c543e00005008447370697269746e65745f72756e74696d653052756e74696d654576656e740001801853797374656d04005401706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c496e6469636573040078017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e0005002042616c616e63657304007c017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000600485472616e73616374696f6e5061796d656e7404008401a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0007001c53657373696f6e040088015470616c6c65745f73657373696f6e3a3a4576656e740016004050617261636861696e5374616b696e6704008c018470617261636861696e5f7374616b696e673a3a4576656e743c52756e74696d653e0015002444656d6f6372616379040094018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e001e001c436f756e63696c0400a801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400b801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020004c546563686e6963616c4d656d626572736869700400bc01fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365313e0022002054726561737572790400c0017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0023001c5574696c6974790400c4015470616c6c65745f7574696c6974793a3a4576656e740028001c56657374696e670400c8017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e002900245363686564756c65720400cc018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e002a001450726f78790400d8017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002b0020507265696d6167650400e4017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e002c0038546970734d656d626572736869700400e801fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365323e002d0010546970730400ec016c70616c6c65745f746970733a3a4576656e743c52756e74696d653e002e00204d756c74697369670400f0017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e002f001443747970650400f8015463747970653a3a4576656e743c52756e74696d653e003d002c4174746573746174696f6e0400fc016c6174746573746174696f6e3a3a4576656e743c52756e74696d653e003e002844656c65676174696f6e04000901016864656c65676174696f6e3a3a4576656e743c52756e74696d653e003f000c44696404001101014c6469643a3a4576656e743c52756e74696d653e004000244469644c6f6f6b757004001501018470616c6c65745f6469645f6c6f6f6b75703a3a4576656e743c52756e74696d653e00430024576562334e616d657304002501018470616c6c65745f776562335f6e616d65733a3a4576656e743c52756e74696d653e004400445075626c696343726564656e7469616c730400310101887075626c69635f63726564656e7469616c733a3a4576656e743c52756e74696d653e004500244d6967726174696f6e0400a101018070616c6c65745f6d6967726174696f6e3a3a4576656e743c52756e74696d653e0046003c50617261636861696e53797374656d0400d90101bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0050002458636d7051756575650400dd0101a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e0052002c506f6c6b61646f7458636d0400e901016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e0053002843756d756c757358636d0400bd02018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e00540020446d7051756575650400c10201a063756d756c75735f70616c6c65745f646d705f71756575653a3a4576656e743c52756e74696d653e00550000540c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5801304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7264013444697370617463684572726f7200013464697370617463685f696e666f5801304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736830011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e580c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874280118576569676874000114636c6173735c01344469737061746368436c617373000120706179735f6665656001105061797300005c0c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000600c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000064082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040068012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e04006c0128546f6b656e4572726f720007002841726974686d65746963040070013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007401485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d000068082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7244018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d00006c082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000070083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000074082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000780c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e047c54686520604576656e746020656e756d206f6620746869732070616c6c65747c0c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001541c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738001185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748014346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000840c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574880c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657820013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748c0c4470617261636861696e5f7374616b696e671870616c6c6574144576656e74040454000154204e6577526f756e640800100144426c6f636b4e756d626572466f723c543e000020013053657373696f6e496e6465780000088041206e6577207374616b696e6720726f756e642068617320737461727465642e785c5b626c6f636b206e756d6265722c20726f756e64206e756d6265725c5d50456e7465726564546f7043616e646964617465730400000130543a3a4163636f756e744964000108cc41206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d444c656674546f7043616e646964617465730400000130543a3a4163636f756e744964000208d8416e206163636f756e74207761732072656d6f7665642066726f6d2074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d604a6f696e6564436f6c6c61746f7243616e646964617465730800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000308e041206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620636f6c6c61746f722063616e646964617465732ebc5c5b6163636f756e742c20616d6f756e74207374616b656420627920746865206e65772063616e6469646174655c5d48436f6c6c61746f725374616b65644d6f72650c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00040801014120636f6c6c61746f722063616e6469646174652068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d48436f6c6c61746f725374616b65644c6573730c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00050801014120636f6c6c61746f722063616e64696461746520686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d54436f6c6c61746f725363686564756c6564457869740c0020013053657373696f6e496e6465780000000130543a3a4163636f756e744964000020013053657373696f6e496e64657800061001014120636f6c6c61746f722063616e646964617465206861732073746172746564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e646964617465732e205c5b726f756e64206e756d6265722c20636f6c6c61746f722773206163636f756e742c20726f756e64206e756d626572207768656ee074686520636f6c6c61746f722077696c6c206265206566666563746976656c792072656d6f7665642066726f6d2074686520736574206f663063616e646964617465735c5d50436f6c6c61746f7243616e63656c6564457869740400000130543a3a4163636f756e74496400070c05014120636f6c6c61746f722063616e646964617465206861732063616e63656c6564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e6469646174657320616e6420776173206164646564206261636b20746f207468652063616e64696461746520706f6f6c2e205c5b636f6c6c61746f722773246163636f756e745c5d3443616e6469646174654c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000808cc416e206163636f756e7420686173206c6566742074686520736574206f6620636f6c6c61746f722063616e646964617465732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d3c436f6c6c61746f7252656d6f7665640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000908e4416e206163636f756e742077617320666f726365646c792072656d6f7665642066726f6d207468652020736574206f6620636f6c6c61746f72c863616e646964617465732e205c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d604d617843616e6469646174655374616b654368616e676564040018013042616c616e63654f663c543e000a08b4546865206d6178696d756d2063616e646964617465207374616b6520686173206265656e206368616e6765642e485c5b6e6577206d617820616d6f756e745c5d4c44656c656761746f725374616b65644d6f72651000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000b0cf0412064656c656761746f722068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d4c44656c656761746f725374616b65644c6573731000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000c0cf0412064656c656761746f7220686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d3444656c656761746f724c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000d08a8416e206163636f756e7420686173206c6566742074686520736574206f662064656c656761746f72732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d2844656c65676174696f6e1000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000e0cc8416e206163636f756e74206861732064656c6567617465642061206e657720636f6c6c61746f722063616e6469646174652e11015c5b6163636f756e742c20616d6f756e74206f662066756e6473207374616b65642c20746f74616c20616d6f756e74206f662064656c656761746f7273272066756e64738c7374616b656420666f722074686520636f6c6c61746f722063616e6469646174655c5d4844656c65676174696f6e5265706c616365641800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000f180d0141206e65772064656c65676174696f6e20686173207265706c6163656420616e206578697374696e67206f6e6520696e2074686520736574206f66206f6e676f696e67010164656c65676174696f6e7320666f72206120636f6c6c61746f722063616e6469646174652e205c5b6e65772064656c656761746f722773206163636f756e742c0901616d6f756e74206f662066756e6473207374616b656420696e20746865206e65772064656c65676174696f6e2c207265706c616365642064656c656761746f7227730d016163636f756e742c20616d6f756e74206f662066756e6473207374616b656420696e20746865207265706c6163652064656c65676174696f6e2c20636f6c6c61746f72050163616e6469646174652773206163636f756e742c206e657720746f74616c20616d6f756e74206f662064656c656761746f7273272066756e6473207374616b656470666f722074686520636f6c6c61746f722063616e6469646174655c5d5444656c656761746f724c656674436f6c6c61746f721000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00100cdc416e206163636f756e74206861732073746f707065642064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e09015c5b6163636f756e742c20636f6c6c61746f722063616e6469646174652773206163636f756e742c206f6c6420616d6f756e74206f662064656c656761746f727327d866756e6473207374616b65642c206e657720616d6f756e74206f662064656c656761746f7273272066756e6473207374616b65645c5d2052657761726465640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e001108c04120636f6c6c61746f72206f7220612064656c656761746f72206861732072656365697665642061207265776172642e745c5b6163636f756e742c20616d6f756e74206f66207265776172645c5d44526f756e64496e666c6174696f6e536574100090012c5065727175696e74696c6c000090012c5065727175696e74696c6c000090012c5065727175696e74696c6c000090012c5065727175696e74696c6c00120c0501496e666c6174696f6e20636f6e66696775726174696f6e20666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e09015c5b6d6178696d756d20636f6c6c61746f722773207374616b696e6720726174652c206d6178696d756d20636f6c6c61746f7227732072657761726420726174652c0d016d6178696d756d2064656c656761746f722773207374616b696e6720726174652c206d6178696d756d2064656c656761746f7227732072657761726420726174655c5d604d617853656c656374656443616e64696461746573536574080020010c753332000020010c753332001308f0546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c656374656420696e20667574757265dc76616c69646174696f6e20726f756e647320686173206368616e6765642e205c5b6f6c642076616c75652c206e65772076616c75655c5d44426c6f636b73506572526f756e64536574100020013053657373696f6e496e6465780000100144426c6f636b4e756d626572466f723c543e0000100144426c6f636b4e756d626572466f723c543e0000100144426c6f636b4e756d626572466f723c543e00140cf8546865206c656e67746820696e20626c6f636b7320666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e01015c5b726f756e64206e756d6265722c20666972737420626c6f636b20696e207468652063757272656e7420726f756e642c206f6c642076616c75652c206e65771c76616c75655c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574900c3473705f61726974686d65746963287065725f7468696e67732c5065727175696e74696c6c0000040010010c7536340000940c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001442050726f706f73656408013870726f706f73616c5f696e64657820012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e64657820012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e64657820013c5265666572656e64756d496e6465780001247468726573686f6c64980134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e64657820013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e64657820013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e64657820013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011048323536000114756e74696c100144426c6f636b4e756d626572466f723c543e00090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f6861736830011048323536000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e64657820013c5265666572656e64756d496e646578000110766f74659c01644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e64657820012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e64657820012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e2c4d657461646174615365740801146f776e6572a401344d657461646174614f776e6572043c4d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e0e04d44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c65617265640801146f776e6572a401344d657461646174614f776e6572043c4d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e0f04e44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e20636c65617265642e4c4d657461646174615472616e736665727265640c0128707265765f6f776e6572a401344d657461646174614f776e6572046050726576696f7573206d65746164617461206f776e65722e01146f776e6572a401344d657461646174614f776e6572044c4e6577206d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e1004ac4d6574616461746120686173206265656e207472616e7366657272656420746f206e6577206f776e65722e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574980c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f72697479000200009c0c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f7465a00110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e636500010000a00c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000a40c4070616c6c65745f64656d6f6372616379147479706573344d657461646174614f776e657200010c2045787465726e616c0000002050726f706f73616c040020012450726f70496e646578000100285265666572656e64756d040020013c5265666572656e64756d496e64657800020000a80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6420012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f746564ac0110626f6f6c00010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ac0000050000b00418526573756c7408045401b4044501640108084f6b0400b4000000000c4572720400640000010000b40000040000b80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6420012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f746564ac0110626f6f6c00010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574bc0c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c00c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001242050726f706f73656404013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c40c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657820010c7533320001146572726f7264013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7264013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74b001384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c80c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cc0c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657820010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657820010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736bd001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964d401404f7074696f6e3c5461736b4e616d653e000118726573756c74b001384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736bd001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964d401404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736bd001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964d401404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736bd001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964d401404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652ed000000408102000d404184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000d80c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74b001384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e646578e0010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736830013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00040450412070726f7879207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574dc08447370697269746e65745f72756e74696d652450726f7879547970650001180c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e63650002004050617261636861696e5374616b696e670003002c43616e63656c50726f7879000400484e6f6e4465706f736974436c61696d696e6700050000e00000050400e40c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f7465640401106861736830011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e245265717565737465640401106861736830011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c65617265640401106861736830011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e80c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ec0c2c70616c6c65745f746970731870616c6c6574144576656e74080454000449000114184e65775469700401207469705f6861736830011c543a3a486173680000049441206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e28546970436c6f73696e670401207469705f6861736830011c543a3a48617368000104d841207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e24546970436c6f7365640c01207469705f6861736830011c543a3a4861736800010c77686f000130543a3a4163636f756e7449640001187061796f757418013c42616c616e63654f663c542c20493e0002048441207469702073756767657374696f6e20686173206265656e20636c6f7365642e305469705265747261637465640401207469705f6861736830011c543a3a486173680003049041207469702073756767657374696f6e20686173206265656e207265747261637465642e28546970536c61736865640c01207469705f6861736830011c543a3a4861736800011866696e646572000130543a3a4163636f756e74496400011c6465706f73697418013c42616c616e63654f663c542c20493e0004048841207469702073756767657374696f6e20686173206265656e20736c61736865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f00c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c74b001384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f4083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657820010c7533320000f80c1463747970651870616c6c6574144576656e74040454000108304354797065437265617465640800000144437479706543726561746f724f663c543e00003001384374797065486173684f663c543e0000087441206e657720435479706520686173206265656e20637265617465642e885c5b63726561746f72206964656e7469666965722c20435479706520686173685c5d3043547970655570646174656404003001384374797065486173684f663c543e000108ac496e666f726d6174696f6e2061626f7574206120435479706520686173206265656e20757064617465642e385c5b435479706520686173685c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574fc0c2c6174746573746174696f6e1870616c6c6574144576656e74040454000110484174746573746174696f6e43726561746564100000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00003001384374797065486173684f663c543e0000010101704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e0000088c41206e6577206174746573746174696f6e20686173206265656e20637265617465642e05015c5b61747465737465722049442c20636c61696d20686173682c20435479706520686173682c20286f7074696f6e616c292064656c65676174696f6e2049445c5d484174746573746174696f6e5265766f6b6564080000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00010880416e206174746573746174696f6e20686173206265656e207265766f6b65642e685c5b6163636f756e742069642c20636c61696d20686173685c5d484174746573746174696f6e52656d6f766564080000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00020880416e206174746573746174696f6e20686173206265656e2072656d6f7665642e685c5b6163636f756e742069642c20636c61696d20686173685c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e0000300138436c61696d486173684f663c543e0003080501546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e2e685c5b6163636f756e742069642c20636c61696d20686173685c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574010104184f7074696f6e0404540105010108104e6f6e6500000010536f6d6504000501000001000005010c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c417574686f72697a6174696f6e4964043044656c65676174696f6e4964013001042844656c65676174696f6e040030013044656c65676174696f6e49640000000009010c2864656c65676174696f6e1870616c6c6574144576656e7404045400011c40486965726172636879437265617465640c0000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00003001384374797065486173684f663c543e0000088441206e65772068696572617263687920686173206265656e20637265617465642ea05c5b63726561746f722049442c20726f6f74206e6f64652049442c20435459504520686173685c5d404869657261726368795265766f6b6564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00010874412068696572617263687920686173206265656e207265766f6b65642e705c5b7265766f6b65722049442c20726f6f74206e6f64652049445c5d4048696572617263687952656d6f766564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000208dc412068696572617263687920686173206265656e2072656d6f7665642066726f6d207468652073746f72616765206f6e20636861696e2e705c5b72656d6f7665722049442c20726f6f74206e6f64652049445c5d4444656c65676174696f6e43726561746564180000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000000014044656c656761746f7249644f663c543e00000d01012c5065726d697373696f6e7300030c8841206e65772064656c65676174696f6e20686173206265656e20637265617465642efc5c5b63726561746f722049442c20726f6f74206e6f64652049442c2064656c65676174696f6e206e6f64652049442c20706172656e74206e6f64652049442c6864656c65676174652049442c207065726d697373696f6e735c5d4444656c65676174696f6e5265766f6b6564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00040878412064656c65676174696f6e20686173206265656e207265766f6b65642e885c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d4444656c65676174696f6e52656d6f76656408000001384163636f756e7449644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00050878412064656c65676174696f6e20686173206265656e2072656d6f7665642e885c5b72656d6f7665722049442c2064656c65676174696f6e206e6f64652049445c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000608f8546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720612064656c65676174696f6eac737562747265652e205c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c65740d010c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368792c5065726d697373696f6e7300000401106269747320010c753332000011010c0c6469641870616c6c6574144576656e74040454000110284469644372656174656408000001384163636f756e7449644f663c543e00000001484469644964656e7469666965724f663c543e0000086c41206e65772044494420686173206265656e20637265617465642e985c5b7472616e73616374696f6e207369676e65722c20444944206964656e7469666965725c5d284469645570646174656404000001484469644964656e7469666965724f663c543e0001085c412044494420686173206265656e20757064617465642e485c5b444944206964656e7469666965725c5d2844696444656c6574656404000001484469644964656e7469666965724f663c543e0002085c412044494420686173206265656e2064656c657465642e485c5b444944206964656e7469666965725c5d4444696443616c6c4469737061746368656408000001484469644964656e7469666965724f663c543e0000b001384469737061746368526573756c74000308a041204449442d617574686f72697365642063616c6c20686173206265656e2065786563757465642e7c5c5b4449442063616c6c65722c20646973706174636820726573756c745c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c657415010c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144576656e74040454000110584173736f63696174696f6e45737461626c69736865640800190101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000004f841206e6577206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e742049442077617320637265617465642e484173736f63696174696f6e52656d6f7665640800190101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000104ec416e206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e74204944207761732072656d6f7665642e444d6967726174696f6e50726f6772657373000204c454686572652077617320736f6d652070726f677265737320696e20746865206d6967726174696f6e2070726f636573732e484d6967726174696f6e436f6d706c65746564000304dc416c6c204163636f756e744964732068617665206265656e206d6967726174656420746f204c696e6b61626c654163636f756e7449642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657419010c4470616c6c65745f6469645f6c6f6f6b7570406c696e6b61626c655f6163636f756e74444c696e6b61626c654163636f756e7449640001082c4163636f756e744964323004001d01012c4163636f756e74496432300000002c4163636f756e7449643332040000012c4163636f756e7449643332000100001d010c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e742c4163636f756e744964323000000400210101205b75383b2032305d0000210100000314000000080025010c4470616c6c65745f776562335f6e616d65731870616c6c6574144576656e740404540001103c576562334e616d65436c61696d65640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6529010134576562334e616d654f663c543e0000047041206e6577206e616d6520686173206265656e20636c61696d65642e40576562334e616d6552656c65617365640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6529010134576562334e616d654f663c543e0001046441206e616d6520686173206265656e2072656c65617365642e38576562334e616d6542616e6e65640401106e616d6529010134576562334e616d654f663c543e0002045c41206e616d6520686173206265656e2062616e6e65642e40576562334e616d65556e62616e6e65640401106e616d6529010134576562334e616d654f663c543e0003046441206e616d6520686173206265656e20756e62616e6e65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657429010c4470616c6c65745f776562335f6e616d657324776562335f6e616d65344173636969576562334e616d65040454000004002d010180426f756e6465645665633c75382c20543a3a4d61784e616d654c656e6774683e00002d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000031010c487075626c69635f63726564656e7469616c731870616c6c6574144576656e740404540001104043726564656e7469616c53746f7265640801287375626a6563745f696435010130543a3a5375626a65637449640488546865207375626a656374206f6620746865206e65772063726564656e7469616c2e013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0474546865206964206f6620746865206e65772063726564656e7469616c2e0004a041206e6577207075626c69632063726564656e7469616c20686173206265656e206973737565642e4443726564656e7469616c52656d6f7665640801287375626a6563745f696435010130543a3a5375626a65637449640498546865207375626a656374206f66207468652072656d6f7665642063726564656e7469616c2e013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0484546865206964206f66207468652072656d6f7665642063726564656e7469616c2e01049841207075626c69632063726564656e7469616c7320686173206265656e2072656d6f7665642e4443726564656e7469616c5265766f6b656404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0484546865206964206f6620746865207265766f6b65642063726564656e7469616c2e02049441207075626c69632063726564656e7469616c20686173206265656e207265766f6b65642e4c43726564656e7469616c556e7265766f6b656404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e048c546865206964206f662074686520756e7265766f6b65642063726564656e7469616c2e03049c41207075626c69632063726564656e7469616c20686173206265656e20756e7265766f6b65642e0490546865206576656e74732067656e65726174656420627920746869732070616c6c65742e35010c3872756e74696d655f636f6d6d6f6e18617373657473204173736574446964000004003901013c41737365744964656e746966696572000039010c3c6b696c745f61737365745f646964730876312041737365744469640000080120636861696e5f69643d01011c436861696e496400012061737365745f69646501011c4173736574496400003d01103c6b696c745f61737365745f6469647314636861696e0876311c436861696e49640001141845697031353504004101013c4569703135355265666572656e63650000001842697031323204004501016447656e657369734865784861736833325265666572656e63650001001c446f7473616d6104004501016447656e657369734865784861736833325265666572656e636500020018536f6c616e6104004d01017047656e657369734261736535384861736833325265666572656e63650003001c47656e6572696304005501013847656e65726963436861696e4964000400004101103c6b696c745f61737365745f6469647314636861696e0876313c4569703135355265666572656e6365000004001801107531323800004501103c6b696c745f61737365745f6469647314636861696e0876316447656e657369734865784861736833325265666572656e636500000400490101205b75383b2031365d000049010000031000000008004d01103c6b696c745f61737365745f6469647314636861696e0876317047656e657369734261736535384861736833325265666572656e63650000040051010170426f756e6465645665633c75382c20436f6e73745533323c33323e3e000051010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00005501103c6b696c745f61737365745f6469647314636861696e0876313847656e65726963436861696e496400000801246e616d6573706163655901015447656e65726963436861696e4e616d6573706163650001247265666572656e63656101015447656e65726963436861696e5265666572656e636500005901103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e4e616d657370616365000004005d0101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f434841494e5f4e414d4553504143455f4c454e4754485f5533323e3e00005d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00006101103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e5265666572656e636500000400510101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f434841494e5f5245464552454e43455f4c454e4754485f5533323e3e00006501103c6b696c745f61737365745f646964731461737365740876311c4173736574496400011418536c6970343404006901013c536c697034345265666572656e636500000014457263323004007501018445766d536d617274436f6e747261637446756e6769626c655265666572656e63650001001845726337323104007901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650002001c4572633131353504007901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650003001c47656e6572696304008901013847656e6572696341737365744964000400006901103c6b696c745f61737365745f646964731461737365740876313c536c697034345265666572656e6365000004006d0101105532353600006d01083c7072696d69746976655f7479706573105532353600000400710101205b7536343b20345d000071010000030400000010007501103c6b696c745f61737365745f646964731461737365740876318445766d536d617274436f6e747261637446756e6769626c655265666572656e636500000400210101205b75383b2032305d00007901103c6b696c745f61737365745f646964731461737365740876319045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e6365000008007501018445766d536d617274436f6e747261637446756e6769626c655265666572656e636500007d0101b44f7074696f6e3c45766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e7469666965723e00007d0104184f7074696f6e0404540181010108104e6f6e6500000010536f6d650400810100000100008101103c6b696c745f61737365745f646964731461737365740876319445766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e74696669657200000400850101f4426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4944454e5449464945525f4c454e4754485f5533323e3e000085010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00008901103c6b696c745f61737365745f646964731461737365740876313847656e657269634173736574496400000c01246e616d6573706163658d01015447656e6572696341737365744e616d6573706163650001247265666572656e63659101015447656e6572696341737365745265666572656e63650001086964990101784f7074696f6e3c47656e6572696341737365744964656e7469666965723e00008d01103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365744e616d657370616365000004005d0101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4e414d4553504143455f4c454e4754485f5533323e3e00009101103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365745265666572656e636500000400950101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f5245464552454e43455f4c454e4754485f5533323e3e000095010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000990104184f7074696f6e040454019d010108104e6f6e6500000010536f6d6504009d0100000100009d01103c6b696c745f61737365745f646964731461737365740876315847656e6572696341737365744964656e74696669657200000400850101f4426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4944454e5449464945525f4c454e4754485f5533323e3e0000a1010c4070616c6c65745f6d6967726174696f6e1870616c6c6574144576656e7404045400010438456e7472696573557064617465640400a501014c456e7472696573546f4d6967726174653c543e000000047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a5010c4070616c6c65745f6d6967726174696f6e1870616c6c657440456e7472696573546f4d69677261746504045401a9010018012c6174746573746174696f6ead01010101426f756e6465645665633c436c61696d486173684f663c543e2c3c5420617320436f6e6669673e3a3a4d61784d6967726174696f6e7350657250616c6c65743e00012864656c65676174696f6ead01012101426f756e6465645665633c44656c65676174696f6e4e6f646549644f663c543e2c3c5420617320436f6e6669673e3a3a0a4d61784d6967726174696f6e7350657250616c6c65743e00010c646964b501011501426f756e6465645665633c4469644964656e7469666965724f663c543e2c3c5420617320436f6e6669673e3a3a4d61784d6967726174696f6e7350657250616c6c65740a3e0001186c6f6f6b7570bd01010d01426f756e6465645665633c4c696e6b61626c654163636f756e7449642c3c5420617320436f6e6669673e3a3a4d61784d6967726174696f6e7350657250616c6c65743e00010c77336ec50101fc426f756e6465645665633c576562334e616d654f663c543e2c3c5420617320436f6e6669673e3a3a4d61784d6967726174696f6e7350657250616c6c65743e0001487075626c69635f63726564656e7469616c73cd01015901426f756e6465645665633c285375626a65637449644f663c543e2c2043726564656e7469616c49644f663c543e292c3c5420617320436f6e6669673e3a3a0a4d61784d6967726174696f6e7350657250616c6c65743e0000a90108447370697269746e65745f72756e74696d651c52756e74696d6500000000ad010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400b10101185665633c543e0000b1010000023000b5010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e0000b9010000020000bd010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011901045300000400c10101185665633c543e0000c101000002190100c5010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012901045300000400c90101185665633c543e0000c901000002290100cd010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d101045300000400d50101185665633c543e0000d1010000040835013000d501000002d10100d9010c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e7404045400011c6056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d20015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e4455706772616465417574686f72697a6564040124636f64655f6861736830011c543a3a486173680003047c416e207570677261646520686173206265656e20617574686f72697a65642e60446f776e776172644d657373616765735265636569766564040114636f756e7420010c7533320004040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564280118576569676874000120646d715f6865616430014472656c61795f636861696e3a3a48617368000504e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e000604b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574dd010c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e7404045400011c1c537563636573730c01306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d4861736800011877656967687428011857656967687400000464536f6d652058434d20776173206578656375746564206f6b2e104661696c1001306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d486173680001146572726f72e101012058636d4572726f7200011877656967687428011857656967687400010440536f6d652058434d206661696c65642e2842616456657273696f6e0401306d6573736167655f6861736804011c58636d48617368000204544261642058434d2076657273696f6e20757365642e24426164466f726d61740401306d6573736167655f6861736804011c58636d48617368000304504261642058434d20666f726d617420757365642e3c58636d704d65737361676553656e740401306d6573736167655f6861736804011c58636d48617368000404c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e484f766572776569676874456e71756575656410011873656e646572e501011850617261496400011c73656e745f617420014052656c6179426c6f636b4e756d626572000114696e64657810013c4f766572776569676874496e6465780001207265717569726564280118576569676874000504d4416e2058434d2065786365656465642074686520696e646976696475616c206d65737361676520776569676874206275646765742e484f7665727765696768745365727669636564080114696e64657810013c4f766572776569676874496e646578000110757365642801185765696768740006044101416e2058434d2066726f6d20746865206f7665727765696768742071756575652077617320657865637574656420776974682074686520676976656e2061637475616c2077656967687420757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e101100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002801185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d697400270000e5010c48706f6c6b61646f745f70617261636861696e287072696d6974697665730849640000040020010c7533320000e9010c2870616c6c65745f78636d1870616c6c6574144576656e7404045400015c24417474656d7074656404011c6f7574636f6d65ed01015078636d3a3a6c61746573743a3a4f7574636f6d65000004a8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e1053656e741001186f726967696ef10101344d756c74694c6f636174696f6e00012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e00011c6d6573736167651502011c58636d3c28293e0001286d6573736167655f696404011c58636d486173680001045c412058434d206d657373616765207761732073656e742e48556e6578706563746564526573706f6e73650801186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400020c5901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e34526573706f6e7365526561647908012071756572795f696410011c51756572794964000120726573706f6e73653d020120526573706f6e73650003085d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e204e6f7469666965640c012071756572795f696410011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380004085901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e404e6f746966794f76657277656967687414012071756572795f696410011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800013461637475616c5f77656967687428011857656967687400014c6d61785f62756467657465645f77656967687428011857656967687400050c6101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20636f756c6441016e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e4c4e6f7469667944697370617463684572726f720c012071756572795f696410011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380006085501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e484e6f746966794465636f64654661696c65640c012071756572795f696410011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800070c5101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e40496e76616c6964526573706f6e6465720c01186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400014465787065637465645f6c6f636174696f6e610201544f7074696f6e3c4d756c74694c6f636174696f6e3e00080c5901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5c496e76616c6964526573706f6e64657256657273696f6e0801186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400091c5101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e34526573706f6e736554616b656e04012071756572795f696410011c51756572794964000a04c8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e34417373657473547261707065640c011068617368300110483235360001186f726967696ef10101344d756c74694c6f636174696f6e0001186173736574738102015056657273696f6e65644d756c7469417373657473000b04b8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e5456657273696f6e4368616e67654e6f74696669656410012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e000118726573756c7420012858636d56657273696f6e000110636f73742102012c4d756c74694173736574730001286d6573736167655f696404011c58636d48617368000c0c2501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e5c537570706f7274656456657273696f6e4368616e6765640801206c6f636174696f6ef10101344d756c74694c6f636174696f6e00011c76657273696f6e20012858636d56657273696f6e000d08390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e504e6f7469667954617267657453656e644661696c0c01206c6f636174696f6ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c517565727949640001146572726f72e101012058636d4572726f72000e0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e644e6f746966795461726765744d6967726174696f6e4661696c0801206c6f636174696f6eb902015856657273696f6e65644d756c74694c6f636174696f6e00012071756572795f696410011c51756572794964000f0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e54496e76616c69645175657269657256657273696f6e0801186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400101c5501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e38496e76616c6964517565726965721001186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400014065787065637465645f71756572696572f10101344d756c74694c6f636174696f6e0001506d617962655f61637475616c5f71756572696572610201544f7074696f6e3c4d756c74694c6f636174696f6e3e00110c5d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5056657273696f6e4e6f74696679537461727465640c012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e000110636f73742102012c4d756c74694173736574730001286d6573736167655f696404011c58636d486173680012085901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e5856657273696f6e4e6f746966795265717565737465640c012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e000110636f73742102012c4d756c74694173736574730001286d6573736167655f696404011c58636d486173680013043d015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e642075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e6056657273696f6e4e6f74696679556e7265717565737465640c012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e000110636f73742102012c4d756c74694173736574730001286d6573736167655f696404011c58636d4861736800140461015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e204665657350616964080118706179696e67f10101344d756c74694c6f636174696f6e000110666565732102012c4d756c7469417373657473001504310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e34417373657473436c61696d65640c011068617368300110483235360001186f726967696ef10101344d756c74694c6f636174696f6e0001186173736574738102015056657273696f6e65644d756c7469417373657473001604c0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e2061737365742074726170047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ed01100c78636d087633187472616974731c4f7574636f6d6500010c20436f6d706c657465040028011857656967687400000028496e636f6d706c65746508002801185765696768740000e10101144572726f72000100144572726f720400e10101144572726f7200020000f101100c78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72f50101244a756e6374696f6e730000f501100c78636d087633246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400f90101204a756e6374696f6e0001000858320800f90101204a756e6374696f6e0000f90101204a756e6374696f6e0002000858330c00f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0003000858341000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0004000858351400f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0005000858361800f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0006000858371c00f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0007000858382000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e00080000f901100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400fd01010c7533320000002c4163636f756e744964333208011c6e6574776f726b010201444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b010201444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726b010201444f7074696f6e3c4e6574776f726b49643e00010c6b6579210101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e646578040009020110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c69747908010869640d020118426f647949640001107061727411020120426f6479506172740008003c476c6f62616c436f6e73656e7375730400050201244e6574776f726b496400090000fd010000062000010204184f7074696f6e0404540105020108104e6f6e6500000010536f6d650400050200000100000502100c78636d087633206a756e6374696f6e244e6574776f726b496400012824427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657210010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090000090200000618000d02100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040044011c5b75383b20345d00010014496e6465780400fd01010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e000800205472656173757279000900001102100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74fd01010c753332000100204672616374696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c7533320004000015020c0c78636d0876330c58636d041043616c6c00000400190201585665633c496e737472756374696f6e3c43616c6c3e3e000019020000021d02001d020c0c78636d0876332c496e737472756374696f6e041043616c6c0001c0345769746864726177417373657404002102012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404002102012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404002102012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e73653d020120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572610201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e7366657241737365740801186173736574732102012c4d756c746941737365747300012c62656e6566696369617279f10101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574732102012c4d756c746941737365747300011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64650201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c6902014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572fd01010c7533320001406d61785f6d6573736167655f73697a65fd01010c7533320001306d61785f6361706163697479fd01010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74fd01010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72fd01010c75333200011873656e646572fd01010c753332000124726563697069656e74fd01010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400f5010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f7204006d0201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473710201404d756c7469417373657446696c74657200012c62656e6566696369617279f10101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473710201404d756c7469417373657446696c74657200011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e000e003445786368616e676541737365740c011067697665710201404d756c7469417373657446696c74657200011077616e742102012c4d756c746941737365747300011c6d6178696d616cac0110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473710201404d756c7469417373657446696c74657200011c72657365727665f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473710201404d756c7469417373657446696c74657200011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f6d0201445175657279526573706f6e7365496e666f000118617373657473710201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573290201284d756c746941737365740001307765696768745f6c696d69747d02012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204001502012458636d3c43616c6c3e0015002c536574417070656e64697804001502012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574732102012c4d756c74694173736574730001187469636b6574f10101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e417373657404002102012c4d756c7469417373657473001c002c457870656374417373657404002102012c4d756c7469417373657473001d00304578706563744f726967696e0400610201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400410201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400590201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6534011c5665633c75383e000134726573706f6e73655f696e666f6d0201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578fd01010c7533320001106e616d6534011c5665633c75383e00012c6d6f64756c655f6e616d6534011c5665633c75383e00012c63726174655f6d616a6f72fd01010c75333200013c6d696e5f63726174655f6d696e6f72fd01010c753332002200505265706f72745472616e7361637453746174757304006d0201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400f90101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726b050201244e6574776f726b496400012c64657374696e6174696f6ef5010154496e746572696f724d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e002600244c6f636b41737365740801146173736574290201284d756c74694173736574000120756e6c6f636b6572f10101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574290201284d756c74694173736574000118746172676574f10101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574290201284d756c746941737365740001146f776e6572f10101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574290201284d756c746941737365740001186c6f636b6572f10101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177ac0110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400f10101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747d02012c5765696768744c696d6974000130636865636b5f6f726967696e610201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f00002102100c78636d087633286d756c746961737365742c4d756c7469417373657473000004002502013c5665633c4d756c746941737365743e000025020000022902002902100c78636d087633286d756c74696173736574284d756c74694173736574000008010869642d02011c4173736574496400010c66756e3102012c46756e676962696c69747900002d02100c78636d087633286d756c746961737365741c4173736574496400010820436f6e63726574650400f10101344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d000100003102100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c65040009020110753132380000002c4e6f6e46756e6769626c650400350201344173736574496e7374616e6365000100003502100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400090201107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804003902011c5b75383b20385d0003001c417272617931360400490101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d0005000039020000030800000008003d020c0c78636d08763320526573706f6e7365000118104e756c6c0000001841737365747304002102012c4d756c74694173736574730001003c457865637574696f6e526573756c740400410201504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040020013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f040049020198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c740400590201384d617962654572726f72436f646500050000410204184f7074696f6e0404540145020108104e6f6e6500000010536f6d6504004502000001000045020000040820e1010049020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d02045300000400550201185665633c543e00004d020c0c78636d0876332850616c6c6574496e666f0000180114696e646578fd01010c7533320001106e616d6551020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d6551020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72fd01010c7533320001146d696e6f72fd01010c7533320001147061746368fd01010c753332000051020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000055020000024d020059020c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f7204005d02018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000100385472756e63617465644572726f7204005d02018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000200005d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000610204184f7074696f6e04045401f1010108104e6f6e6500000010536f6d650400f101000001000065020c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d0003000069020c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656434011c5665633c75383e00006d020c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f77656967687428011857656967687400007102100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504002102012c4d756c74694173736574730000001057696c6404007502013857696c644d756c74694173736574000100007502100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f6608010869642d02011c4173736574496400010c66756e7902013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400fd01010c75333200020030416c6c4f66436f756e7465640c010869642d02011c4173736574496400010c66756e7902013c57696c6446756e676962696c697479000114636f756e74fd01010c753332000300007902100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c65000100007d020c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400280118576569676874000100008102080c78636d5056657273696f6e65644d756c746941737365747300010808563204008502013c76323a3a4d756c746941737365747300010008563304002102013c76333a3a4d756c7469417373657473000300008502100c78636d087632286d756c746961737365742c4d756c7469417373657473000004008902013c5665633c4d756c746941737365743e000089020000028d02008d02100c78636d087632286d756c74696173736574284d756c74694173736574000008010869649102011c4173736574496400010c66756eb102012c46756e676962696c69747900009102100c78636d087632286d756c746961737365741c4173736574496400010820436f6e63726574650400950201344d756c74694c6f636174696f6e000000204162737472616374040034011c5665633c75383e000100009502100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72990201244a756e6374696f6e7300009902100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e73000124104865726500000008583104009d0201204a756e6374696f6e00010008583208009d0201204a756e6374696f6e00009d0201204a756e6374696f6e0002000858330c009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00030008583410009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00040008583514009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00050008583618009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e0006000858371c009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00070008583820009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e000800009d02100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400fd01010c7533320000002c4163636f756e744964333208011c6e6574776f726ba10201244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726ba10201244e6574776f726b4964000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726ba10201244e6574776f726b496400010c6b6579210101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e646578040009020110753132380005002847656e6572616c4b65790400a50201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c6974790801086964a9020118426f6479496400011070617274ad020120426f64795061727400080000a1020c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d65640400a50201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d6100030000a5020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003401185665633c543e0000a9020c0c78636d08763218426f6479496400012810556e6974000000144e616d65640400a50201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400fd01010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000ad020c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74fd01010c753332000100204672616374696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c75333200040000b102100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c65040009020110753132380000002c4e6f6e46756e6769626c650400b50201344173736574496e7374616e636500010000b502100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400090201107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804003902011c5b75383b20385d0003001c417272617931360400490101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040034011c5665633c75383e00060000b902080c78636d5856657273696f6e65644d756c74694c6f636174696f6e00010808563204009502014476323a3a4d756c74694c6f636174696f6e0001000856330400f101014476333a3a4d756c74694c6f636174696f6e00030000bd020c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d0000ed01011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c1020c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144576656e7404045400011c34496e76616c6964466f726d61740401306d6573736167655f6861736804011c58636d4861736800000480446f776e77617264206d65737361676520697320696e76616c69642058434d2e48556e737570706f7274656456657273696f6e0401306d6573736167655f6861736804011c58636d48617368000104bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e404578656375746564446f776e776172640c01306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d4861736800011c6f7574636f6d65ed01011c4f7574636f6d65000204c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e3c5765696768744578686175737465641001306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d4861736800014072656d61696e696e675f77656967687428011857656967687400013c72657175697265645f776569676874280118576569676874000304f054686520776569676874206c696d697420666f722068616e646c696e6720646f776e77617264206d657373616765732077617320726561636865642e484f766572776569676874456e7175657565641001306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d486173680001406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800013c72657175697265645f7765696768742801185765696768740004041901446f776e77617264206d657373616765206973206f76657277656967687420616e642077617320706c6163656420696e20746865206f7665727765696768742071756575652e484f76657277656967687453657276696365640801406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800012c7765696768745f75736564280118576569676874000504e0446f776e77617264206d6573736167652066726f6d20746865206f766572776569676874207175657565207761732065786563757465642e504d61784d657373616765734578686175737465640401306d6573736167655f6861736804011c58636d48617368000604d0546865206d6178696d756d206e756d626572206f6620646f776e77617264206d657373616765732077617320726561636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c50208306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040020010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000c902000002d000cd0208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6efd01014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65d102016473705f72756e74696d653a3a52756e74696d65537472696e670000d1020000050200d5020c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b34011c5665633c75383e0000045c536565205b6050616c6c65743a3a72656d61726b605d2e387365745f686561705f7061676573040114706167657310010c7536340001047c536565205b6050616c6c65743a3a7365745f686561705f7061676573605d2e207365745f636f6465040110636f646534011c5665633c75383e00020464536565205b6050616c6c65743a3a7365745f636f6465605d2e5c7365745f636f64655f776974686f75745f636865636b73040110636f646534011c5665633c75383e000304a0536565205b6050616c6c65743a3a7365745f636f64655f776974686f75745f636865636b73605d2e2c7365745f73746f726167650401146974656d73d90201345665633c4b657956616c75653e00040470536565205b6050616c6c65743a3a7365745f73746f72616765605d2e306b696c6c5f73746f726167650401106b657973e10201205665633c4b65793e00050474536565205b6050616c6c65743a3a6b696c6c5f73746f72616765605d2e2c6b696c6c5f70726566697808011870726566697834010c4b657900011c7375626b65797320010c75333200060470536565205b6050616c6c65743a3a6b696c6c5f707265666978605d2e4472656d61726b5f776974685f6576656e7404011872656d61726b34011c5665633c75383e00070488536565205b6050616c6c65743a3a72656d61726b5f776974685f6576656e74605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed902000002dd0200dd0200000408343400e1020000023400e5020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2801185765696768740001246d61785f626c6f636b2801185765696768740001247065725f636c617373e90201845065724469737061746368436c6173733c57656967687473506572436c6173733e0000e9020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401ed02000c01186e6f726d616ced0201045400012c6f7065726174696f6e616ced020104540001246d616e6461746f7279ed020104540000ed020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632801185765696768740001346d61785f65787472696e736963f10201384f7074696f6e3c5765696768743e0001246d61785f746f74616cf10201384f7074696f6e3c5765696768743e0001207265736572766564f10201384f7074696f6e3c5765696768743e0000f10204184f7074696f6e04045401280108104e6f6e6500000010536f6d650400280000010000f5020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178f90201545065724469737061746368436c6173733c7533323e0000f9020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f7279200104540000fd02082873705f776569676874733c52756e74696d65446257656967687400000801107265616410010c753634000114777269746510010c75363400000103082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65d102013452756e74696d65537472696e67000124696d706c5f6e616d65d102013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e20010c753332000130737065635f76657273696f6e20010c753332000130696d706c5f76657273696f6e20010c753332000110617069730503011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e20010c75333200013473746174655f76657273696f6e080108753800000503040c436f77040454010903000400090300000009030000020d03000d03000004083902200011030c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c657415030c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f772c0124543a3a4d6f6d656e7400000450536565205b6050616c6c65743a3a736574605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e19030000040c0018ac001d030c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e64657800000458536565205b6050616c6c65743a3a636c61696d605d2e207472616e7366657208010c6e6577210301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e64657800010464536565205b6050616c6c65743a3a7472616e73666572605d2e1066726565040114696e64657810013c543a3a4163636f756e74496e64657800020454536565205b6050616c6c65743a3a66726565605d2e38666f7263655f7472616e736665720c010c6e6577210301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65ac0110626f6f6c0003047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004045c536565205b6050616c6c65743a3a667265657a65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e21030c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801b4011408496404000001244163636f756e74496400000014496e6465780400250301304163636f756e74496e6465780001000c526177040034011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400210101205b75383b2032305d000400002503000006b40029030c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e2d030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454013103045300000400390301185665633c543e000031030c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964390201384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e733503011c526561736f6e73000035030c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c0002000039030000023103003d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014103045300000400450301185665633c543e000041030c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e7469666965720139021c42616c616e6365011800080108696439020144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000450300000241030049030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d030453000004006d0301185665633c543e00004d030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640151031c42616c616e63650118000801086964510301084964000118616d6f756e7418011c42616c616e63650000510308447370697269746e65745f72756e74696d654452756e74696d65486f6c64526561736f6e0001182c4174746573746174696f6e04005503015c6174746573746174696f6e3a3a486f6c64526561736f6e003e002844656c65676174696f6e04005903015864656c65676174696f6e3a3a486f6c64526561736f6e003f000c44696404005d03013c6469643a3a486f6c64526561736f6e004000244469644c6f6f6b757004006103017470616c6c65745f6469645f6c6f6f6b75703a3a486f6c64526561736f6e00430024576562334e616d657304006503017470616c6c65745f776562335f6e616d65733a3a486f6c64526561736f6e004400445075626c696343726564656e7469616c730400690301787075626c69635f63726564656e7469616c733a3a486f6c64526561736f6e0045000055030c2c6174746573746174696f6e1870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000059030c2864656c65676174696f6e1870616c6c657428486f6c64526561736f6e0001041c4465706f736974000000005d030c0c6469641870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000061030c4470616c6c65745f6469645f6c6f6f6b75701870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000065030c4470616c6c65745f776562335f6e616d65731870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000069030c487075626c69635f63726564656e7469616c731870616c6c657428486f6c64526561736f6e0001041c4465706f736974000000006d030000024d030071030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017503045300000400810301185665633c543e000075030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640179031c42616c616e63650118000801086964790301084964000118616d6f756e7418011c42616c616e63650000790308447370697269746e65745f72756e74696d654c52756e74696d65467265657a65526561736f6e0001044050617261636861696e5374616b696e6704007d03017c70617261636861696e5f7374616b696e673a3a467265657a65526561736f6e001500007d030c4470617261636861696e5f7374616b696e671870616c6c657430467265657a65526561736f6e0001041c5374616b696e6700000000810300000275030085030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000124507472616e736665725f616c6c6f775f646561746808011064657374210301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756509020128543a3a42616c616e636500000494536565205b6050616c6c65743a3a7472616e736665725f616c6c6f775f6465617468605d2e587365745f62616c616e63655f646570726563617465640c010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f6672656509020128543a3a42616c616e63650001306f6c645f726573657276656409020128543a3a42616c616e63650001049c536565205b6050616c6c65743a3a7365745f62616c616e63655f64657072656361746564605d2e38666f7263655f7472616e736665720c0118736f75726365210301504163636f756e7449644c6f6f6b75704f663c543e00011064657374210301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756509020128543a3a42616c616e63650002047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e4c7472616e736665725f6b6565705f616c69766508011064657374210301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756509020128543a3a42616c616e636500030490536565205b6050616c6c65743a3a7472616e736665725f6b6565705f616c697665605d2e307472616e736665725f616c6c08011064657374210301504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665ac0110626f6f6c00040474536565205b6050616c6c65743a3a7472616e736665725f616c6c605d2e3c666f7263655f756e7265736572766508010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050480536565205b6050616c6c65743a3a666f7263655f756e72657365727665605d2e40757067726164655f6163636f756e747304010c77686fb90101445665633c543a3a4163636f756e7449643e00060484536565205b6050616c6c65743a3a757067726164655f6163636f756e7473605d2e207472616e7366657208011064657374210301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756509020128543a3a42616c616e636500070464536565205b6050616c6c65743a3a7472616e73666572605d2e44666f7263655f7365745f62616c616e636508010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f6672656509020128543a3a42616c616e636500080488536565205b6050616c6c65743a3a666f7263655f7365745f62616c616e6365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e89030c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001283856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804884e756d626572206f6620686f6c64732065786365656420604d6178486f6c6473602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e8d030c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800009103086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e740000000856320001000095030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019903045300000400a10301185665633c543e00009903104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c6963000004009d03013c737232353531393a3a5075626c696300009d030c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000a103000002990300a503084873705f636f6e73656e7375735f736c6f747310536c6f740000040010010c7536340000a903000002ad0300ad030000040800b10300b10308447370697269746e65745f72756e74696d652c53657373696f6e4b657973000004011061757261990301c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c69630000b5030000022000b90300000408bd033400bd030c1c73705f636f72651863727970746f244b65795479706549640000040044011c5b75383b20345d0000c1030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b657973b103011c543a3a4b65797300011470726f6f6634011c5665633c75383e00000464536565205b6050616c6c65743a3a7365745f6b657973605d2e2870757267655f6b6579730001046c536565205b6050616c6c65743a3a70757267655f6b657973605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec5030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742ec9030c4470617261636861696e5f7374616b696e6714747970657324526f756e64496e666f042c426c6f636b4e756d6265720110000c011c63757272656e7420013053657373696f6e496e646578000114666972737410012c426c6f636b4e756d6265720001186c656e67746810012c426c6f636b4e756d6265720000cd030c4470617261636861696e5f7374616b696e671474797065734444656c65676174696f6e436f756e7465720000080114726f756e6420013053657373696f6e496e64657800011c636f756e74657220010c7533320000d1030c4470617261636861696e5f7374616b696e67147479706573145374616b6508244163636f756e74496401001c42616c616e63650118000801146f776e65720001244163636f756e744964000118616d6f756e7418011c42616c616e63650000d5030c4470617261636861696e5f7374616b696e671474797065732443616e6469646174650c244163636f756e74496401001c42616c616e63650118644d617844656c656761746f727350657243616e646964617465000014010869640001244163636f756e7449640001147374616b6518011c42616c616e636500012864656c656761746f7273d9030101014f7264657265645365743c5374616b653c4163636f756e7449642c2042616c616e63653e2c204d617844656c656761746f727350657243616e6469646174653e000114746f74616c18011c42616c616e6365000118737461747573e503013c43616e6469646174655374617475730000d9030c4470617261636861696e5f7374616b696e670c736574284f72646572656453657408045401d103045300000400dd030140426f756e6465645665633c542c20533e0000dd030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d103045300000400e10301185665633c543e0000e103000002d10300e5030c4470617261636861696e5f7374616b696e671474797065733c43616e646964617465537461747573000108184163746976650000001c4c656176696e67040020013053657373696f6e496e64657800010000e9030c4470617261636861696e5f7374616b696e6714747970657328546f74616c5374616b65041c42616c616e6365011800080124636f6c6c61746f727318011c42616c616e636500012864656c656761746f727318011c42616c616e63650000ed030c4470617261636861696e5f7374616b696e670c736574284f72646572656453657408045401d103045300000400f1030140426f756e6465645665633c542c20533e0000f1030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d103045300000400e10301185665633c543e0000f5030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e34496e666c6174696f6e496e666f0000080120636f6c6c61746f72f903012c5374616b696e67496e666f00012464656c656761746f72f903012c5374616b696e67496e666f0000f9030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e2c5374616b696e67496e666f00000801206d61785f7261746590012c5065727175696e74696c6c00012c7265776172645f72617465fd030128526577617264526174650000fd030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e28526577617264526174650000080118616e6e75616c90012c5065727175696e74696c6c0001247065725f626c6f636b90012c5065727175696e74696c6c000001040c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601180453000004000504013842547265654d61703c4b2c20563e00000504042042547265654d617008044b011004560118000400090400000009040000020d04000d040000040810180011040c4470617261636861696e5f7374616b696e671870616c6c65741043616c6c0404540001543c666f7263655f6e65775f726f756e6400000480536565205b6050616c6c65743a3a666f7263655f6e65775f726f756e64605d2e347365745f696e666c6174696f6e100170636f6c6c61746f725f6d61785f726174655f70657263656e7461676590012c5065727175696e74696c6c000198636f6c6c61746f725f616e6e75616c5f7265776172645f726174655f70657263656e7461676590012c5065727175696e74696c6c00017464656c656761746f725f6d61785f726174655f70657263656e7461676590012c5065727175696e74696c6c00019c64656c656761746f725f616e6e75616c5f7265776172645f726174655f70657263656e7461676590012c5065727175696e74696c6c00010478536565205b6050616c6c65743a3a7365745f696e666c6174696f6e605d2e6c7365745f6d61785f73656c65637465645f63616e6469646174657304010c6e657720010c753332000204b0536565205b6050616c6c65743a3a7365745f6d61785f73656c65637465645f63616e64696461746573605d2e507365745f626c6f636b735f7065725f726f756e6404010c6e6577100144426c6f636b4e756d626572466f723c543e00030494536565205b6050616c6c65743a3a7365745f626c6f636b735f7065725f726f756e64605d2e5c7365745f6d61785f63616e6469646174655f7374616b6504010c6e657718013042616c616e63654f663c543e000404a0536565205b6050616c6c65743a3a7365745f6d61785f63616e6469646174655f7374616b65605d2e58666f7263655f72656d6f76655f63616e646964617465040120636f6c6c61746f722103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650005049c536565205b6050616c6c65743a3a666f7263655f72656d6f76655f63616e646964617465605d2e3c6a6f696e5f63616e646964617465730401147374616b6518013042616c616e63654f663c543e00060480536565205b6050616c6c65743a3a6a6f696e5f63616e64696461746573605d2e54696e69745f6c656176655f63616e6469646174657300070498536565205b6050616c6c65743a3a696e69745f6c656176655f63616e64696461746573605d2e60657865637574655f6c656176655f63616e64696461746573040120636f6c6c61746f722103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000804a4536565205b6050616c6c65743a3a657865637574655f6c656176655f63616e64696461746573605d2e5c63616e63656c5f6c656176655f63616e64696461746573000904a0536565205b6050616c6c65743a3a63616e63656c5f6c656176655f63616e64696461746573605d2e5063616e6469646174655f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000a0494536565205b6050616c6c65743a3a63616e6469646174655f7374616b655f6d6f7265605d2e5063616e6469646174655f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000b0494536565205b6050616c6c65743a3a63616e6469646174655f7374616b655f6c657373605d2e3c6a6f696e5f64656c656761746f7273080120636f6c6c61746f722103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e7418013042616c616e63654f663c543e000c0480536565205b6050616c6c65743a3a6a6f696e5f64656c656761746f7273605d2e406c656176655f64656c656761746f7273000d0484536565205b6050616c6c65743a3a6c656176655f64656c656761746f7273605d2e5064656c656761746f725f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000e0494536565205b6050616c6c65743a3a64656c656761746f725f7374616b655f6d6f7265605d2e5064656c656761746f725f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000f0494536565205b6050616c6c65743a3a64656c656761746f725f7374616b655f6c657373605d2e3c756e6c6f636b5f756e7374616b65640401187461726765742103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500100480536565205b6050616c6c65743a3a756e6c6f636b5f756e7374616b6564605d2e34636c61696d5f7265776172647300110478536565205b6050616c6c65743a3a636c61696d5f72657761726473605d2e68696e6372656d656e745f636f6c6c61746f725f72657761726473001204ac536565205b6050616c6c65743a3a696e6372656d656e745f636f6c6c61746f725f72657761726473605d2e6c696e6372656d656e745f64656c656761746f725f72657761726473001304b0536565205b6050616c6c65743a3a696e6372656d656e745f64656c656761746f725f72657761726473605d2e7c657865637574655f7363686564756c65645f7265776172645f6368616e6765001404c0536565205b6050616c6c65743a3a657865637574655f7363686564756c65645f7265776172645f6368616e6765605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e15040c4470617261636861696e5f7374616b696e671870616c6c6574144572726f7204045400017c4444656c656761746f724e6f74466f756e64000004b8546865206163636f756e74206973206e6f742070617274206f66207468652064656c656761746f7273207365742e4443616e6469646174654e6f74466f756e64000104dc546865206163636f756e74206973206e6f742070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3c44656c656761746f72457869737473000204c8546865206163636f756e7420697320616c72656164792070617274206f66207468652064656c656761746f7273207365742e3c43616e646964617465457869737473000304ec546865206163636f756e7420697320616c72656164792070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3056616c5374616b655a65726f000404e4546865206163636f756e7420747269656420746f207374616b65206d6f7265206f72206c657373207769746820616d6f756e74207a65726f2e4056616c5374616b6542656c6f774d696e0005080d01546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f20626520616464656420746f2074686520636f6c6c61746f723c63616e64696461746573207365742e4056616c5374616b6541626f76654d61780006041101546865206163636f756e742068617320616c7265616479207374616b656420746865206d6178696d756d20616d6f756e74206f662066756e647320706f737369626c652e4844656c65676174696f6e42656c6f774d696e000708f8546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f2064656c6567617465206120636f6c6c61746f722863616e6469646174652e38416c72656164794c656176696e670008080d0154686520636f6c6c61746f722063616e6469646174652068617320616c72656164792074726967676572207468652070726f6365737320746f206c65617665207468656c736574206f6620636f6c6c61746f722063616e646964617465732e284e6f744c656176696e67000908f454686520636f6c6c61746f722063616e6469646174652077616e74656420746f20657865637574652074686520657869742062757420686173206e6f74f472657175657374656420746f206c65617665206265666f72652062792063616c6c696e672060696e69745f6c656176655f63616e64696461746573602e3843616e6e6f744c65617665596574000a08dc54686520636f6c6c61746f7220747269656420746f206c65617665206265666f72652077616974696e67206174206c6561737420666f72746045786974517565756544656c617960206d616e7920726f756e64732e6443616e6e6f744a6f696e4265666f7265556e6c6f636b696e67000b10f8546865206163636f756e742068617320612066756c6c206c697374206f6620756e7374616b696e6720726571756573747320616e64206e6565647320746ffc756e6c6f636b206174206c65617374206f6e65206f66207468657365206265666f7265206265696e672061626c6520746f206a6f696e2028616761696e292edc4e4f54453a2043616e206f6e6c792068617070656e20696620746865206163636f756e742077617320612063616e646964617465206f72f464656c656761746f72206265666f726520616e642065697468657220676f74206b69636b6564206f722065786974656420766f6c756e746172696c792e44416c726561647944656c65676174696e67000c04e4546865206163636f756e7420697320616c72656164792064656c65676174696e672074686520636f6c6c61746f722063616e6469646174652e404e6f7459657444656c65676174696e67000d080901546865206163636f756e7420686173206e6f742064656c65676174656420616e7920636f6c6c61746f722063616e646964617465207965742c2068656e6365206974806973206e6f7420696e2074686520736574206f662064656c656761746f72732e6c44656c65676174696f6e73506572526f756e644578636565646564000e1811015468652064656c656761746f722068617320657863656564656420746865206e756d626572206f662064656c65676174696f6e732070657220726f756e6420776869636894697320657175616c20746f204d617844656c656761746f7273506572436f6c6c61746f722e000901546869732070726f746563747320616761696e73742061747461636b7320696e20776869636820612064656c656761746f722063616e2072652d64656c6567617465010166726f6d206120636f6c6c61746f722077686f2068617320616c726561647920617574686f726564206120626c6f636b2c20746f20616e6f74686572206f6e6570776869636820686173206e6f7420696e207468697320726f756e642e44546f6f4d616e7944656c656761746f7273000f14010154686520636f6c6c61746f722063616e6469646174652068617320616c7265616479207265616368656420746865206d6178696d756d206e756d626572206f662c64656c656761746f72732e00050154686973206572726f722069732067656e65726174656420696e20636173652061206e65772064656c65676174696f6e207265717565737420646f6573206e6f74f47374616b6520656e6f7567682066756e647320746f207265706c61636520736f6d65206f74686572206578697374696e672064656c65676174696f6e2e60546f6f466577436f6c6c61746f7243616e64696461746573001008110154686520736574206f6620636f6c6c61746f722063616e6469646174657320776f756c642066616c6c2062656c6f7720746865207265717569726564206d696e696d756d5469662074686520636f6c6c61746f72206c6566742e5043616e6e6f745374616b6549664c656176696e67001108f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66010163616e6469646174657320616e642063616e6e6f7420706572666f726d20616e79206f7468657220616374696f6e7320696e20746865206d65616e74696d652e5c43616e6e6f7444656c656761746549664c656176696e67001208f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66ac63616e6469646174657320616e6420746875732063616e6e6f742062652064656c65676174656420746f2e804d6178436f6c6c61746f727350657244656c656761746f72457863656564656400130811015468652064656c656761746f722068617320616c72656164792064656c65676174656420746865206d6178696d756d206e756d626572206f662063616e6469646174657320616c6c6f7765642e60416c726561647944656c656761746564436f6c6c61746f72001408ec5468652064656c656761746f722068617320616c72656164792070726576696f75736c792064656c6567617465642074686520636f6c6c61746f722863616e6469646174652e4844656c65676174696f6e4e6f74466f756e64001504f854686520676976656e2064656c65676174696f6e20646f6573206e6f7420657869737420696e2074686520736574206f662064656c65676174696f6e732e24556e646572666c6f77001608050154686520636f6c6c61746f722064656c6567617465206f72207468652064656c656761746f7220697320747279696e6720746f20756e2d7374616b65206d6f72658066756e64732074686174206172652063757272656e746c79207374616b65642e4443616e6e6f7453657441626f76654d6178001708d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738061626f766520746865206d6178696d756d2076616c756520616c6c6f7765642e4443616e6e6f7453657442656c6f774d696e001808d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738062656c6f7720746865206d696e696d756d2076616c756520616c6c6f7765642e3c496e76616c69645363686564756c65001904dc416e20696e76616c696420696e666c6174696f6e20636f6e66696775726174696f6e20697320747279696e6720746f206265207365742e3c4e6f4d6f7265556e7374616b696e67001a08c4546865207374616b696e6720726577617264206265696e6720756e6c6f636b656420646f6573206e6f742065786973742e7c4d617820756e6c6f636b696e6720726571756573747320726561636865642e20546f6f4561726c79001b0801015468652072657761726420726174652063616e6e6f742062652061646a75737465642079657420617320616e20656e74697265207965617220686173206e6f741c7061737365642e345374616b654e6f74466f756e64001c04d850726f7669646564207374616b65642076616c7565206973207a65726f2e2053686f756c64206e65766572206265207468726f776e2e40556e7374616b696e674973456d707479001d049443616e6e6f7420756e6c6f636b207768656e20556e7374616b656420697320656d7074792e3c526577617264734e6f74466f756e64001e047843616e6e6f7420636c61696d207265776172647320696620656d7074792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e19040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011d04045300000400e50501185665633c543e00001d040000040c2021040000210410346672616d655f737570706f72741874726169747324707265696d616765731c426f756e646564040454012504010c184c6567616379040110686173683001104861736800000018496e6c696e65040095010134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173683001104861736800010c6c656e20010c75333200020000250408447370697269746e65745f72756e74696d652c52756e74696d6543616c6c0001801853797374656d0400d50201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400150301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c496e646963657304001d0301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e0005002042616c616e6365730400850301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0006001c53657373696f6e0400c10301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0016004050617261636861696e5374616b696e670400110401d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e5374616b696e672c2052756e74696d653e0015002444656d6f63726163790400290401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e001e001c436f756e63696c0400390401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e001f0048546563686e6963616c436f6d6d69747465650400410401dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465652c2052756e74696d653e0020004c546563686e6963616c4d656d626572736869700400450401e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c4d656d626572736869702c2052756e74696d653e0022002054726561737572790400490401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e0023001c5574696c69747904004d0401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e0028001c56657374696e670400750401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e002900245363686564756c657204007d0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e002a001450726f78790400850401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002b0020507265696d61676504008d0401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e002c0038546970734d656d626572736869700400910401cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970734d656d626572736869702c2052756e74696d653e002d0010546970730400950401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970732c2052756e74696d653e002e00204d756c74697369670400990401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e002f001443747970650400a10401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43747970652c2052756e74696d653e003d002c4174746573746174696f6e0400a50401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4174746573746174696f6e2c2052756e74696d653e003e002844656c65676174696f6e0400b50401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656c65676174696f6e2c2052756e74696d653e003f000c4469640400d10401a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469642c2052756e74696d653e004000244469644c6f6f6b75700400290501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469644c6f6f6b75702c2052756e74696d653e00430024576562334e616d65730400390501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c576562334e616d65732c2052756e74696d653e004400445075626c696343726564656e7469616c7304003d0501d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5075626c696343726564656e7469616c732c2052756e74696d653e004500244d6967726174696f6e04004d0501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d6967726174696f6e2c2052756e74696d653e0046003c50617261636861696e53797374656d0400510501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0050003450617261636861696e496e666f0400850501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e496e666f2c2052756e74696d653e0051002458636d7051756575650400890501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e0052002c506f6c6b61646f7458636d04008d0501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e00530020446d7051756575650400e10501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446d7051756575652c2052756e74696d653e0055000029040c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c04045400014c1c70726f706f736508012070726f706f73616c21040140426f756e64656443616c6c4f663c543e00011476616c75650902013042616c616e63654f663c543e00000460536565205b6050616c6c65743a3a70726f706f7365605d2e187365636f6e6404012070726f706f73616cfd01012450726f70496e6465780001045c536565205b6050616c6c65743a3a7365636f6e64605d2e10766f74650801247265665f696e646578fd01013c5265666572656e64756d496e646578000110766f74659c01644163636f756e74566f74653c42616c616e63654f663c543e3e00020454536565205b6050616c6c65743a3a766f7465605d2e40656d657267656e63795f63616e63656c0401247265665f696e64657820013c5265666572656e64756d496e64657800030484536565205b6050616c6c65743a3a656d657267656e63795f63616e63656c605d2e4065787465726e616c5f70726f706f736504012070726f706f73616c21040140426f756e64656443616c6c4f663c543e00040484536565205b6050616c6c65743a3a65787465726e616c5f70726f706f7365605d2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616c21040140426f756e64656443616c6c4f663c543e000504a8536565205b6050616c6c65743a3a65787465726e616c5f70726f706f73655f6d616a6f72697479605d2e6065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616c21040140426f756e64656443616c6c4f663c543e000604a4536565205b6050616c6c65743a3a65787465726e616c5f70726f706f73655f64656661756c74605d2e28666173745f747261636b0c013470726f706f73616c5f6861736830011048323536000134766f74696e675f706572696f64100144426c6f636b4e756d626572466f723c543e00011464656c6179100144426c6f636b4e756d626572466f723c543e0007046c536565205b6050616c6c65743a3a666173745f747261636b605d2e347665746f5f65787465726e616c04013470726f706f73616c5f686173683001104832353600080478536565205b6050616c6c65743a3a7665746f5f65787465726e616c605d2e4463616e63656c5f7265666572656e64756d0401247265665f696e646578fd01013c5265666572656e64756d496e64657800090488536565205b6050616c6c65743a3a63616e63656c5f7265666572656e64756d605d2e2064656c65676174650c0108746f210301504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6e2d040128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a0464536565205b6050616c6c65743a3a64656c6567617465605d2e28756e64656c6567617465000b046c536565205b6050616c6c65743a3a756e64656c6567617465605d2e58636c6561725f7075626c69635f70726f706f73616c73000c049c536565205b6050616c6c65743a3a636c6561725f7075626c69635f70726f706f73616c73605d2e18756e6c6f636b040118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e000d045c536565205b6050616c6c65743a3a756e6c6f636b605d2e2c72656d6f76655f766f7465040114696e64657820013c5265666572656e64756d496e646578000e0470536565205b6050616c6c65743a3a72656d6f76655f766f7465605d2e4472656d6f76655f6f746865725f766f7465080118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657820013c5265666572656e64756d496e646578000f0488536565205b6050616c6c65743a3a72656d6f76655f6f746865725f766f7465605d2e24626c61636b6c69737408013470726f706f73616c5f686173683001104832353600013c6d617962655f7265665f696e6465783104015c4f7074696f6e3c5265666572656e64756d496e6465783e00100468536565205b6050616c6c65743a3a626c61636b6c697374605d2e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578fd01012450726f70496e64657800110480536565205b6050616c6c65743a3a63616e63656c5f70726f706f73616c605d2e307365745f6d657461646174610801146f776e6572a401344d657461646174614f776e65720001286d617962655f68617368350401504f7074696f6e3c507265696d616765486173683e00120474536565205b6050616c6c65743a3a7365745f6d65746164617461605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d040c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000310404184f7074696f6e04045401200108104e6f6e6500000010536f6d650400200000010000350404184f7074696f6e04045401300108104e6f6e6500000010536f6d65040030000001000039040c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273b90101445665633c543a3a4163636f756e7449643e0001147072696d653d0401504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7420012c4d656d626572436f756e7400000470536565205b6050616c6c65743a3a7365745f6d656d62657273605d2e1c6578656375746508012070726f706f73616c2504017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64fd01010c75333200010460536565205b6050616c6c65743a3a65786563757465605d2e1c70726f706f73650c01247468726573686f6c64fd01012c4d656d626572436f756e7400012070726f706f73616c2504017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64fd01010c75333200020460536565205b6050616c6c65743a3a70726f706f7365605d2e10766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578fd01013450726f706f73616c496e64657800011c617070726f7665ac0110626f6f6c00030454536565205b6050616c6c65743a3a766f7465605d2e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a4861736800050490536565205b6050616c6c65743a3a646973617070726f76655f70726f706f73616c605d2e14636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578fd01013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642801185765696768740001306c656e6774685f626f756e64fd01010c75333200060458536565205b6050616c6c65743a3a636c6f7365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3d0404184f7074696f6e04045401000108104e6f6e6500000010536f6d65040000000001000041040c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273b90101445665633c543a3a4163636f756e7449643e0001147072696d653d0401504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7420012c4d656d626572436f756e7400000470536565205b6050616c6c65743a3a7365745f6d656d62657273605d2e1c6578656375746508012070726f706f73616c2504017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64fd01010c75333200010460536565205b6050616c6c65743a3a65786563757465605d2e1c70726f706f73650c01247468726573686f6c64fd01012c4d656d626572436f756e7400012070726f706f73616c2504017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64fd01010c75333200020460536565205b6050616c6c65743a3a70726f706f7365605d2e10766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578fd01013450726f706f73616c496e64657800011c617070726f7665ac0110626f6f6c00030454536565205b6050616c6c65743a3a766f7465605d2e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a4861736800050490536565205b6050616c6c65743a3a646973617070726f76655f70726f706f73616c605d2e14636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578fd01013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642801185765696768740001306c656e6774685f626f756e64fd01010c75333200060458536565205b6050616c6c65743a3a636c6f7365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e45040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0000046c536565205b6050616c6c65743a3a6164645f6d656d626572605d2e3472656d6f76655f6d656d62657204010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e00010478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e2c737761705f6d656d62657208011872656d6f7665210301504163636f756e7449644c6f6f6b75704f663c543e00010c616464210301504163636f756e7449644c6f6f6b75704f663c543e00020470536565205b6050616c6c65743a3a737761705f6d656d626572605d2e3472657365745f6d656d6265727304011c6d656d62657273b90101445665633c543a3a4163636f756e7449643e00030478536565205b6050616c6c65743a3a72657365745f6d656d62657273605d2e286368616e67655f6b657904010c6e6577210301504163636f756e7449644c6f6f6b75704f663c543e0004046c536565205b6050616c6c65743a3a6368616e67655f6b6579605d2e247365745f7072696d6504010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e00050468536565205b6050616c6c65743a3a7365745f7072696d65605d2e2c636c6561725f7072696d6500060470536565205b6050616c6c65743a3a636c6561725f7072696d65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e49040c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001143470726f706f73655f7370656e6408011476616c75650902013c42616c616e63654f663c542c20493e00012c62656e6566696369617279210301504163636f756e7449644c6f6f6b75704f663c543e00000478536565205b6050616c6c65743a3a70726f706f73655f7370656e64605d2e3c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964fd01013450726f706f73616c496e64657800010480536565205b6050616c6c65743a3a72656a6563745f70726f706f73616c605d2e40617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964fd01013450726f706f73616c496e64657800020484536565205b6050616c6c65743a3a617070726f76655f70726f706f73616c605d2e147370656e64080118616d6f756e740902013c42616c616e63654f663c542c20493e00012c62656e6566696369617279210301504163636f756e7449644c6f6f6b75704f663c543e00030458536565205b6050616c6c65743a3a7370656e64605d2e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964fd01013450726f706f73616c496e64657800040480536565205b6050616c6c65743a3a72656d6f76655f617070726f76616c605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d040c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c735104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000458536565205b6050616c6c65743a3a6261746368605d2e3461735f64657269766174697665080114696e646578e0010c75313600011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00010478536565205b6050616c6c65743a3a61735f64657269766174697665605d2e2462617463685f616c6c04011463616c6c735104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00020468536565205b6050616c6c65743a3a62617463685f616c6c605d2e2c64697370617463685f617308012461735f6f726967696e55040154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00030470536565205b6050616c6c65743a3a64697370617463685f6173605d2e2c666f7263655f626174636804011463616c6c735104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00040470536565205b6050616c6c65743a3a666f7263655f6261746368605d2e2c776974685f77656967687408011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00011877656967687428011857656967687400050470536565205b6050616c6c65743a3a776974685f776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5104000002250400550408447370697269746e65745f72756e74696d65304f726967696e43616c6c657200011c1873797374656d0400590401746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c04005d0401010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400610401010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020000c4469640400650401506469643a3a4f726967696e3c52756e74696d653e0040002c506f6c6b61646f7458636d04006904014870616c6c65745f78636d3a3a4f726967696e0053002843756d756c757358636d04006d04016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e00540010566f69640400710401110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f69640006000059040c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200005d04084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080020012c4d656d626572436f756e74000020012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d000200006104084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080020012c4d656d626572436f756e74000020012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d0002000065040c0c646964186f726967696e304469645261774f726967696e08344469644964656e7469666965720100244163636f756e74496401000008010869640001344469644964656e7469666965720001247375626d69747465720001244163636f756e744964000069040c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400f10101344d756c74694c6f636174696f6e00000020526573706f6e73650400f10101344d756c74694c6f636174696f6e000100006d040c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e0400e5010118506172614964000100007104081c73705f636f726510566f69640001000075040c3870616c6c65745f76657374696e671870616c6c65741043616c6c040454000114107665737400000454536565205b6050616c6c65743a3a76657374605d2e28766573745f6f74686572040118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e0001046c536565205b6050616c6c65743a3a766573745f6f74686572605d2e3c7665737465645f7472616e73666572080118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65790401b056657374696e67496e666f3c42616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e3e00020480536565205b6050616c6c65743a3a7665737465645f7472616e73666572605d2e54666f7263655f7665737465645f7472616e736665720c0118736f75726365210301504163636f756e7449644c6f6f6b75704f663c543e000118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65790401b056657374696e67496e666f3c42616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e3e00030498536565205b6050616c6c65743a3a666f7263655f7665737465645f7472616e73666572605d2e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657820010c75333200013c7363686564756c65325f696e64657820010c75333200040480536565205b6050616c6c65743a3a6d657267655f7363686564756c6573605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e79040c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d62657200007d040c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963810401ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000464536565205b6050616c6c65743a3a7363686564756c65605d2e1863616e63656c0801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657820010c7533320001045c536565205b6050616c6c65743a3a63616e63656c605d2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963810401ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0002047c536565205b6050616c6c65743a3a7363686564756c655f6e616d6564605d2e3063616e63656c5f6e616d656404010869640401205461736b4e616d6500030474536565205b6050616c6c65743a3a63616e63656c5f6e616d6564605d2e387363686564756c655f61667465721001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963810401ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004047c536565205b6050616c6c65743a3a7363686564756c655f6166746572605d2e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963810401ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00050494536565205b6050616c6c65743a3a7363686564756c655f6e616d65645f6166746572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e810404184f7074696f6e04045401d00108104e6f6e6500000010536f6d650400d0000001000085040c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616c210301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065890401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000458536565205b6050616c6c65743a3a70726f7879605d2e246164645f70726f78790c012064656c6567617465210301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00010468536565205b6050616c6c65743a3a6164645f70726f7879605d2e3072656d6f76655f70726f78790c012064656c6567617465210301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00020474536565205b6050616c6c65743a3a72656d6f76655f70726f7879605d2e3872656d6f76655f70726f786965730003047c536565205b6050616c6c65743a3a72656d6f76655f70726f78696573605d2e2c6372656174655f707572650c012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e000114696e646578e0010c75313600040470536565205b6050616c6c65743a3a6372656174655f70757265605d2e246b696c6c5f7075726514011c737061776e6572210301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f787954797065000114696e646578e0010c7531360001186865696768742c0144426c6f636b4e756d626572466f723c543e0001246578745f696e646578fd01010c75333200050468536565205b6050616c6c65743a3a6b696c6c5f70757265605d2e20616e6e6f756e63650801107265616c210301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00060464536565205b6050616c6c65743a3a616e6e6f756e6365605d2e4c72656d6f76655f616e6e6f756e63656d656e740801107265616c210301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00070490536565205b6050616c6c65743a3a72656d6f76655f616e6e6f756e63656d656e74605d2e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465210301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00080490536565205b6050616c6c65743a3a72656a6563745f616e6e6f756e63656d656e74605d2e3c70726f78795f616e6e6f756e63656410012064656c6567617465210301504163636f756e7449644c6f6f6b75704f663c543e0001107265616c210301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065890401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00090480536565205b6050616c6c65743a3a70726f78795f616e6e6f756e636564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e890404184f7074696f6e04045401dc0108104e6f6e6500000010536f6d650400dc00000100008d040c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657334011c5665633c75383e00000478536565205b6050616c6c65743a3a6e6f74655f707265696d616765605d2e3c756e6e6f74655f707265696d6167650401106861736830011c543a3a4861736800010480536565205b6050616c6c65743a3a756e6e6f74655f707265696d616765605d2e40726571756573745f707265696d6167650401106861736830011c543a3a4861736800020484536565205b6050616c6c65743a3a726571756573745f707265696d616765605d2e48756e726571756573745f707265696d6167650401106861736830011c543a3a486173680003048c536565205b6050616c6c65743a3a756e726571756573745f707265696d616765605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e91040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0000046c536565205b6050616c6c65743a3a6164645f6d656d626572605d2e3472656d6f76655f6d656d62657204010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e00010478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e2c737761705f6d656d62657208011872656d6f7665210301504163636f756e7449644c6f6f6b75704f663c543e00010c616464210301504163636f756e7449644c6f6f6b75704f663c543e00020470536565205b6050616c6c65743a3a737761705f6d656d626572605d2e3472657365745f6d656d6265727304011c6d656d62657273b90101445665633c543a3a4163636f756e7449643e00030478536565205b6050616c6c65743a3a72657365745f6d656d62657273605d2e286368616e67655f6b657904010c6e6577210301504163636f756e7449644c6f6f6b75704f663c543e0004046c536565205b6050616c6c65743a3a6368616e67655f6b6579605d2e247365745f7072696d6504010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e00050468536565205b6050616c6c65743a3a7365745f7072696d65605d2e2c636c6561725f7072696d6500060470536565205b6050616c6c65743a3a636c6561725f7072696d65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e95040c2c70616c6c65745f746970731870616c6c65741043616c6c080454000449000118387265706f72745f617765736f6d65080118726561736f6e34011c5665633c75383e00010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0000047c536565205b6050616c6c65743a3a7265706f72745f617765736f6d65605d2e2c726574726163745f7469700401106861736830011c543a3a4861736800010470536565205b6050616c6c65743a3a726574726163745f746970605d2e1c7469705f6e65770c0118726561736f6e34011c5665633c75383e00010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0001247469705f76616c75650902013c42616c616e63654f663c542c20493e00020460536565205b6050616c6c65743a3a7469705f6e6577605d2e0c7469700801106861736830011c543a3a486173680001247469705f76616c75650902013c42616c616e63654f663c542c20493e00030450536565205b6050616c6c65743a3a746970605d2e24636c6f73655f7469700401106861736830011c543a3a4861736800040468536565205b6050616c6c65743a3a636c6f73655f746970605d2e24736c6173685f7469700401106861736830011c543a3a4861736800050468536565205b6050616c6c65743a3a736c6173685f746970605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e99040c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573b90101445665633c543a3a4163636f756e7449643e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000494536565205b6050616c6c65743a3a61735f6d756c74695f7468726573686f6c645f31605d2e2061735f6d756c74691401247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573b90101445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e749d0401904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687428011857656967687400010464536565205b6050616c6c65743a3a61735f6d756c7469605d2e40617070726f76655f61735f6d756c74691401247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573b90101445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e749d0401904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f77656967687428011857656967687400020484536565205b6050616c6c65743a3a617070726f76655f61735f6d756c7469605d2e3c63616e63656c5f61735f6d756c74691001247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573b90101445665633c543a3a4163636f756e7449643e00012474696d65706f696e74f4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e00012463616c6c5f686173680401205b75383b2033325d00030480536565205b6050616c6c65743a3a63616e63656c5f61735f6d756c7469605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e9d0404184f7074696f6e04045401f40108104e6f6e6500000010536f6d650400f40000010000a1040c1463747970651870616c6c65741043616c6c0404540001080c616464040114637479706534011c5665633c75383e00000450536565205b6050616c6c65743a3a616464605d2e407365745f626c6f636b5f6e756d62657208012863747970655f686173683001384374797065486173684f663c543e000130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e00010484536565205b6050616c6c65743a3a7365745f626c6f636b5f6e756d626572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea5040c2c6174746573746174696f6e1870616c6c65741043616c6c0404540001180c6164640c0128636c61696d5f68617368300138436c61696d486173684f663c543e00012863747970655f686173683001384374797065486173684f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e00000450536565205b6050616c6c65743a3a616464605d2e187265766f6b65080128636c61696d5f68617368300138436c61696d486173684f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0001045c536565205b6050616c6c65743a3a7265766f6b65605d2e1872656d6f7665080128636c61696d5f68617368300138436c61696d486173684f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0002045c536565205b6050616c6c65743a3a72656d6f7665605d2e3c7265636c61696d5f6465706f736974040128636c61696d5f68617368300138436c61696d486173684f663c543e00030480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e506368616e67655f6465706f7369745f6f776e6572040128636c61696d5f68617368300138436c61696d486173684f663c543e00040494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f736974040128636c61696d5f68617368300138436c61696d486173684f663c543e0005047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea90404184f7074696f6e04045401ad040108104e6f6e6500000010536f6d650400ad040000010000ad040c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c50616c6c6574417574686f72697a65043044656c65676174696f6e416301b10401042844656c65676174696f6e0400b104013044656c65676174696f6e416300000000b1040c2864656c65676174696f6e386163636573735f636f6e74726f6c3044656c65676174696f6e416304045401a9010008013c7375626a6563745f6e6f64655f696430015444656c65676174696f6e4e6f646549644f663c543e0001286d61785f636865636b7320010c7533320000b5040c2864656c65676174696f6e1870616c6c65741043616c6c04045400011c406372656174655f686965726172636879080130726f6f745f6e6f64655f696430015444656c65676174696f6e4e6f646549644f663c543e00012863747970655f686173683001384374797065486173684f663c543e00000484536565205b6050616c6c65743a3a6372656174655f686965726172636879605d2e386164645f64656c65676174696f6e14013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e000124706172656e745f696430015444656c65676174696f6e4e6f646549644f663c543e00012064656c656761746500014044656c656761746f7249644f663c543e00012c7065726d697373696f6e730d01012c5065726d697373696f6e7300014864656c65676174655f7369676e6174757265b904016844656c65676174655369676e6174757265547970654f663c543e0001047c536565205b6050616c6c65743a3a6164645f64656c65676174696f6e605d2e447265766f6b655f64656c65676174696f6e0c013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001446d61785f706172656e745f636865636b7320010c75333200013c6d61785f7265766f636174696f6e7320010c75333200020488536565205b6050616c6c65743a3a7265766f6b655f64656c65676174696f6e605d2e4472656d6f76655f64656c65676174696f6e08013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c7320010c75333200030488536565205b6050616c6c65743a3a72656d6f76655f64656c65676174696f6e605d2e3c7265636c61696d5f6465706f73697408013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c7320010c75333200040480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e506368616e67655f6465706f7369745f6f776e657204013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e00050494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f73697404013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0006047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb9040c0c6469642c6469645f64657461696c73304469645369676e617475726500010c1c456432353531390400bd040148656432353531393a3a5369676e61747572650000001c537232353531390400c5040148737232353531393a3a5369676e61747572650001001445636473610400c904014065636473613a3a5369676e617475726500020000bd040c1c73705f636f72651c65643235353139245369676e617475726500000400c10401205b75383b2036345d0000c104000003400000000800c5040c1c73705f636f72651c73723235353139245369676e617475726500000400c10401205b75383b2036345d0000c9040c1c73705f636f7265146563647361245369676e617475726500000400cd0401205b75383b2036355d0000cd04000003410000000800d1040c0c6469641870616c6c65741043616c6c0404540001441863726561746508011c64657461696c73d5040170426f783c4469644372656174696f6e44657461696c734f663c543e3e0001247369676e6174757265b90401304469645369676e61747572650000045c536565205b6050616c6c65743a3a637265617465605d2e587365745f61757468656e7469636174696f6e5f6b657904011c6e65775f6b657911050188446964566572696669636174696f6e4b65793c4163636f756e7449644f663c543e3e0001049c536565205b6050616c6c65743a3a7365745f61757468656e7469636174696f6e5f6b6579605d2e487365745f64656c65676174696f6e5f6b657904011c6e65775f6b657911050188446964566572696669636174696f6e4b65793c4163636f756e7449644f663c543e3e0002048c536565205b6050616c6c65743a3a7365745f64656c65676174696f6e5f6b6579605d2e5472656d6f76655f64656c65676174696f6e5f6b657900030498536565205b6050616c6c65743a3a72656d6f76655f64656c65676174696f6e5f6b6579605d2e4c7365745f6174746573746174696f6e5f6b657904011c6e65775f6b657911050188446964566572696669636174696f6e4b65793c4163636f756e7449644f663c543e3e00040490536565205b6050616c6c65743a3a7365745f6174746573746174696f6e5f6b6579605d2e5872656d6f76655f6174746573746174696f6e5f6b65790005049c536565205b6050616c6c65743a3a72656d6f76655f6174746573746174696f6e5f6b6579605d2e546164645f6b65795f61677265656d656e745f6b657904011c6e65775f6b657901050140446964456e6372797074696f6e4b657900060498536565205b6050616c6c65743a3a6164645f6b65795f61677265656d656e745f6b6579605d2e6072656d6f76655f6b65795f61677265656d656e745f6b65790401186b65795f69643001284b657949644f663c543e000704a4536565205b6050616c6c65743a3a72656d6f76655f6b65795f61677265656d656e745f6b6579605d2e506164645f736572766963655f656e64706f696e74040140736572766963655f656e64706f696e74dd040138446964456e64706f696e743c543e00080494536565205b6050616c6c65743a3a6164645f736572766963655f656e64706f696e74605d2e5c72656d6f76655f736572766963655f656e64706f696e74040128736572766963655f6964e104015053657276696365456e64706f696e7449643c543e000904a0536565205b6050616c6c65743a3a72656d6f76655f736572766963655f656e64706f696e74605d2e1864656c65746504014c656e64706f696e74735f746f5f72656d6f766520010c753332000a045c536565205b6050616c6c65743a3a64656c657465605d2e3c7265636c61696d5f6465706f73697408012c6469645f7375626a6563740001484469644964656e7469666965724f663c543e00014c656e64706f696e74735f746f5f72656d6f766520010c753332000b0480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e3c7375626d69745f6469645f63616c6c0801206469645f63616c6c25050190426f783c446964417574686f72697a656443616c6c4f7065726174696f6e4f663c543e3e0001247369676e6174757265b90401304469645369676e6174757265000c0480536565205b6050616c6c65743a3a7375626d69745f6469645f63616c6c605d2e506368616e67655f6465706f7369745f6f776e6572000d0494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f73697404010c6469640001484469644964656e7469666965724f663c543e000e047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e2c64697370617463685f61730801386469645f6964656e7469666965720001484469644964656e7469666965724f663c543e00011063616c6c25040154426f783c44696443616c6c61626c654f663c543e3e000f0470536565205b6050616c6c65743a3a64697370617463685f6173605d2e4c6372656174655f66726f6d5f6163636f756e7404014861757468656e7469636174696f6e5f6b657911050188446964566572696669636174696f6e4b65793c4163636f756e7449644f663c543e3e00100490536565205b6050616c6c65743a3a6372656174655f66726f6d5f6163636f756e74605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed5040c0c6469642c6469645f64657461696c73484469644372656174696f6e44657461696c7310344469644964656e7469666965720100244163636f756e7449640100584d61784e65774b657941677265656d656e744b65797301d9042c446964456e64706f696e7401dd040018010c6469640001344469644964656e7469666965720001247375626d69747465720001244163636f756e7449640001586e65775f6b65795f61677265656d656e745f6b657973fd0401c04469644e65774b657941677265656d656e744b65795365743c4d61784e65774b657941677265656d656e744b6579733e00014c6e65775f6174746573746174696f6e5f6b65790d0501944f7074696f6e3c446964566572696669636174696f6e4b65793c4163636f756e7449643e3e0001486e65775f64656c65676174696f6e5f6b65790d0501944f7074696f6e3c446964566572696669636174696f6e4b65793c4163636f756e7449643e3e00014c6e65775f736572766963655f64657461696c73210501405665633c446964456e64706f696e743e0000d904103872756e74696d655f636f6d6d6f6e24636f6e7374616e74730c646964584d61784e65774b657941677265656d656e744b65797300000000dd040c0c64696444736572766963655f656e64706f696e74732c446964456e64706f696e7404045400000c01086964e104015053657276696365456e64706f696e7449643c543e000134736572766963655f7479706573e504017453657276696365456e64706f696e7454797065456e74726965733c543e00011075726c73f104017053657276696365456e64706f696e7455726c456e74726965733c543e0000e1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000e5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e904045300000400ed0401185665633c543e0000e9040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000ed04000002e90400f1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f504045300000400f90401185665633c543e0000f5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000f904000002f50400fd040c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540101050453000004000505012c42547265655365743c543e000001050c0c6469642c6469645f64657461696c7340446964456e6372797074696f6e4b65790001041858323535313904000401205b75383b2033325d00000000050504204254726565536574040454010105000400090500000009050000020105000d0504184f7074696f6e0404540111050108104e6f6e6500000010536f6d6504001105000001000011050c0c6469642c6469645f64657461696c7348446964566572696669636174696f6e4b657904244163636f756e744964010001101c4564323535313904001505013c656432353531393a3a5075626c69630000001c5372323535313904009d03013c737232353531393a3a5075626c696300010014456364736104001905013465636473613a3a5075626c69630002001c4163636f756e7404000001244163636f756e7449640003000015050c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d000019050c1c73705f636f7265146563647361185075626c6963000004001d0501205b75383b2033335d00001d050000032100000008002105000002dd040025050c0c6469642c6469645f64657461696c7368446964417574686f72697a656443616c6c4f7065726174696f6e14344469644964656e74696669657201002c44696443616c6c61626c650125042c426c6f636b4e756d6265720110244163636f756e7449640100245478436f756e74657201100014010c6469640001344469644964656e74696669657200012874785f636f756e7465721001245478436f756e74657200011063616c6c2504012c44696443616c6c61626c65000130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720001247375626d69747465720001244163636f756e744964000029050c4470616c6c65745f6469645f6c6f6f6b75701870616c6c65741043616c6c04045400011c446173736f63696174655f6163636f756e7408010c7265712d05015c4173736f63696174654163636f756e745265717565737400012865787069726174696f6e100144426c6f636b4e756d626572466f723c543e00000488536565205b6050616c6c65743a3a6173736f63696174655f6163636f756e74605d2e406173736f63696174655f73656e64657200010484536565205b6050616c6c65743a3a6173736f63696174655f73656e646572605d2e6472656d6f76655f73656e6465725f6173736f63696174696f6e000204a8536565205b6050616c6c65743a3a72656d6f76655f73656e6465725f6173736f63696174696f6e605d2e6872656d6f76655f6163636f756e745f6173736f63696174696f6e04011c6163636f756e74190101444c696e6b61626c654163636f756e744964000304ac536565205b6050616c6c65743a3a72656d6f76655f6163636f756e745f6173736f63696174696f6e605d2e3c7265636c61696d5f6465706f73697404011c6163636f756e74190101444c696e6b61626c654163636f756e74496400040480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e506368616e67655f6465706f7369745f6f776e657204011c6163636f756e74190101444c696e6b61626c654163636f756e74496400050494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f73697404011c6163636f756e74190101444c696e6b61626c654163636f756e7449640006047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d050c4470616c6c65745f6469645f6c6f6f6b7570646173736f63696174655f6163636f756e745f726571756573745c4173736f63696174654163636f756e745265717565737400010820506f6c6b61646f74080000012c4163636f756e74496433320000310501384d756c74695369676e617475726500000020457468657265756d08001d01012c4163636f756e7449643230000035050144457468657265756d5369676e6174757265000100003105082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400bd040148656432353531393a3a5369676e61747572650000001c537232353531390400c5040148737232353531393a3a5369676e61747572650001001445636473610400c904014065636473613a3a5369676e61747572650002000035050c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e7444457468657265756d5369676e617475726500000400c904014065636473613a3a5369676e6174757265000039050c4470616c6c65745f776562335f6e616d65731870616c6c65741043616c6c04045400011c14636c61696d0401106e616d652d010140576562334e616d65496e7075743c543e00000458536565205b6050616c6c65743a3a636c61696d605d2e4072656c656173655f62795f6f776e657200010484536565205b6050616c6c65743a3a72656c656173655f62795f6f776e6572605d2e3c7265636c61696d5f6465706f7369740401106e616d652d010140576562334e616d65496e7075743c543e00020480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e0c62616e0401106e616d652d010140576562334e616d65496e7075743c543e00030450536565205b6050616c6c65743a3a62616e605d2e14756e62616e0401106e616d652d010140576562334e616d65496e7075743c543e00040458536565205b6050616c6c65743a3a756e62616e605d2e506368616e67655f6465706f7369745f6f776e657200050494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f7369740401286e616d655f696e7075742d010140576562334e616d65496e7075743c543e0006047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3d050c487075626c69635f63726564656e7469616c731870616c6c65741043616c6c04045400011c0c61646404012863726564656e7469616c41050164426f783c496e70757443726564656e7469616c4f663c543e3e00000450536565205b6050616c6c65743a3a616464605d2e187265766f6b6508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0001045c536565205b6050616c6c65743a3a7265766f6b65605d2e20756e7265766f6b6508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e00020464536565205b6050616c6c65743a3a756e7265766f6b65605d2e1872656d6f766508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0003045c536565205b6050616c6c65743a3a72656d6f7665605d2e3c7265636c61696d5f6465706f73697404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e00040480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e506368616e67655f6465706f7369745f6f776e657204013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e00050494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f73697404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0006047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e41050c487075626c69635f63726564656e7469616c732c63726564656e7469616c732843726564656e7469616c10244374797065486173680130445375626a6563744964656e74696669657201450518436c61696d7301490534416363657373436f6e74726f6c01ad040010012863747970655f6861736830012443747970654861736800011c7375626a656374450501445375626a6563744964656e746966696572000118636c61696d7349050118436c61696d73000134617574686f72697a6174696f6ea90401544f7074696f6e3c416363657373436f6e74726f6c3e000045050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000049050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00004d050c4070616c6c65745f6d6967726174696f6e1870616c6c65741043616c6c040454000104387570646174655f62616c616e63650401507265717565737465645f6d6967726174696f6e73a501014c456e7472696573546f4d6967726174653c543e0000047c536565205b6050616c6c65743a3a7570646174655f62616c616e6365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e51050c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f64617461040110646174615505015450617261636861696e496e686572656e744461746100000490536565205b6050616c6c65743a3a7365745f76616c69646174696f6e5f64617461605d2e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653401345570776172644d657373616765000104a4536565205b6050616c6c65743a3a7375646f5f73656e645f7570776172645f6d657373616765605d2e44617574686f72697a655f75706772616465080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6eac0110626f6f6c00020488536565205b6050616c6c65743a3a617574686f72697a655f75706772616465605d2e60656e6163745f617574686f72697a65645f75706772616465040110636f646534011c5665633c75383e000304a4536565205b6050616c6c65743a3a656e6163745f617574686f72697a65645f75706772616465605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5505089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f646174615905015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f73746174656105015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d657373616765736905016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573710501a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e000059050c4c706f6c6b61646f745f7072696d6974697665730876355c50657273697374656456616c69646174696f6e446174610804480130044e01200010012c706172656e745f686561645d050120486561644461746100014c72656c61795f706172656e745f6e756d6265722001044e00016472656c61795f706172656e745f73746f726167655f726f6f74300104480001306d61785f706f765f73697a6520010c75333200005d050c48706f6c6b61646f745f70617261636861696e287072696d6974697665732048656164446174610000040034011c5665633c75383e000061050c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f6465736505014442547265655365743c5665633c75383e3e00006505042042547265655365740404540134000400e10200000069050000026d05006d050860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d62657201200008011c73656e745f617420012c426c6f636b4e756d62657200010c6d736734013c446f776e776172644d65737361676500007105042042547265654d617008044b01e50104560175050004007d05000000750500000279050079050860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d62657201200008011c73656e745f617420012c426c6f636b4e756d6265720001106461746134015073705f7374643a3a7665633a3a5665633c75383e00007d05000002810500810500000408e50175050085050c3870617261636861696e5f696e666f1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e89050c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c04045400012448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d69742801185765696768740000048c536565205b6050616c6c65743a3a736572766963655f6f766572776569676874605d2e5473757370656e645f78636d5f657865637574696f6e00010498536565205b6050616c6c65743a3a73757370656e645f78636d5f657865637574696f6e605d2e50726573756d655f78636d5f657865637574696f6e00020494536565205b6050616c6c65743a3a726573756d655f78636d5f657865637574696f6e605d2e607570646174655f73757370656e645f7468726573686f6c6404010c6e657720010c753332000304a4536565205b6050616c6c65743a3a7570646174655f73757370656e645f7468726573686f6c64605d2e547570646174655f64726f705f7468726573686f6c6404010c6e657720010c75333200040498536565205b6050616c6c65743a3a7570646174655f64726f705f7468726573686f6c64605d2e5c7570646174655f726573756d655f7468726573686f6c6404010c6e657720010c753332000504a0536565205b6050616c6c65743a3a7570646174655f726573756d655f7468726573686f6c64605d2e5c7570646174655f7468726573686f6c645f77656967687404010c6e6577280118576569676874000604a0536565205b6050616c6c65743a3a7570646174655f7468726573686f6c645f776569676874605d2e707570646174655f7765696768745f72657374726963745f646563617904010c6e6577280118576569676874000704b4536565205b6050616c6c65743a3a7570646174655f7765696768745f72657374726963745f6465636179605d2e847570646174655f78636d705f6d61785f696e646976696475616c5f77656967687404010c6e6577280118576569676874000804c8536565205b6050616c6c65743a3a7570646174655f78636d705f6d61785f696e646976696475616c5f776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e8d050c2870616c6c65745f78636d1870616c6c65741043616c6c04045400012c1073656e6408011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011c6d65737361676591050154426f783c56657273696f6e656458636d3c28293e3e00000454536565205b6050616c6c65743a3a73656e64605d2e3c74656c65706f72745f61737365747310011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747381020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c75333200010480536565205b6050616c6c65743a3a74656c65706f72745f617373657473605d2e5c726573657276655f7472616e736665725f61737365747310011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747381020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c753332000204a0536565205b6050616c6c65743a3a726573657276655f7472616e736665725f617373657473605d2e1c6578656375746508011c6d657373616765c10501c0426f783c56657273696f6e656458636d3c3c5420617320537973436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f77656967687428011857656967687400030460536565205b6050616c6c65743a3a65786563757465605d2e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6ef1010148426f783c4d756c74694c6f636174696f6e3e00011c76657273696f6e20012858636d56657273696f6e00040488536565205b6050616c6c65743a3a666f7263655f78636d5f76657273696f6e605d2e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6e310401484f7074696f6e3c58636d56657273696f6e3e000504a8536565205b6050616c6c65743a3a666f7263655f64656661756c745f78636d5f76657273696f6e605d2e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6eb902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000604bc536565205b6050616c6c65743a3a666f7263655f7375627363726962655f76657273696f6e5f6e6f74696679605d2e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6eb902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000704c4536565205b6050616c6c65743a3a666f7263655f756e7375627363726962655f76657273696f6e5f6e6f74696679605d2e7c6c696d697465645f726573657276655f7472616e736665725f61737365747314011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747381020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c7533320001307765696768745f6c696d69747d02012c5765696768744c696d6974000804c0536565205b6050616c6c65743a3a6c696d697465645f726573657276655f7472616e736665725f617373657473605d2e5c6c696d697465645f74656c65706f72745f61737365747314011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747381020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c7533320001307765696768745f6c696d69747d02012c5765696768744c696d6974000904a0536565205b6050616c6c65743a3a6c696d697465645f74656c65706f72745f617373657473605d2e40666f7263655f73757370656e73696f6e04012473757370656e646564ac0110626f6f6c000a0484536565205b6050616c6c65743a3a666f7263655f73757370656e73696f6e605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e9105080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204009505015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304001502015076333a3a58636d3c52756e74696d6543616c6c3e0003000095050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400990501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e000099050000029d05009d050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404008502012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404008502012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404008502012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e7365a1050120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574738502012c4d756c746941737365747300012c62656e6566696369617279950201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574738502012c4d756c746941737365747300011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065650201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c69020168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572fd01010c7533320001406d61785f6d6573736167655f73697a65fd01010c7533320001306d61785f6361706163697479fd01010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74fd01010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72fd01010c75333200011873656e646572fd01010c753332000124726563697069656e74fd01010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040099020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374950201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473b10501404d756c7469417373657446696c7465720001286d61785f617373657473fd01010c75333200012c62656e6566696369617279950201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473b10501404d756c7469417373657446696c7465720001286d61785f617373657473fd01010c75333200011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e000e003445786368616e6765417373657408011067697665b10501404d756c7469417373657446696c74657200011c726563656976658502012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473b10501404d756c7469417373657446696c74657200011c72657365727665950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473b10501404d756c7469417373657446696c74657200011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374950201344d756c74694c6f636174696f6e000118617373657473b10501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e080110666565738d0201284d756c746941737365740001307765696768745f6c696d6974bd05012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204009505014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804009505014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574738502012c4d756c74694173736574730001187469636b6574950201344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b0000a1050c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304008502012c4d756c74694173736574730001003c457865637574696f6e526573756c740400a50501504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040020013873757065723a3a56657273696f6e00030000a50504184f7074696f6e04045401a9050108104e6f6e6500000010536f6d650400a9050000010000a9050000040820ad0500ad05100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404001001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c6500190000b105100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504008502012c4d756c74694173736574730000001057696c640400b505013857696c644d756c7469417373657400010000b505100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869649102011c4173736574496400010c66756eb905013c57696c6446756e676962696c69747900010000b905100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c6500010000bd050c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d6974656404002c010c75363400010000c105080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c0001080856320400c505015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400d505015076333a3a58636d3c52756e74696d6543616c6c3e00030000c5050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400c90501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000c905000002cd0500cd050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404008502012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404008502012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404008502012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e7365a1050120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574738502012c4d756c746941737365747300012c62656e6566696369617279950201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574738502012c4d756c746941737365747300011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065650201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6cd1050168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572fd01010c7533320001406d61785f6d6573736167655f73697a65fd01010c7533320001306d61785f6361706163697479fd01010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74fd01010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72fd01010c75333200011873656e646572fd01010c753332000124726563697069656e74fd01010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040099020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374950201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473b10501404d756c7469417373657446696c7465720001286d61785f617373657473fd01010c75333200012c62656e6566696369617279950201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473b10501404d756c7469417373657446696c7465720001286d61785f617373657473fd01010c75333200011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e000e003445786368616e6765417373657408011067697665b10501404d756c7469417373657446696c74657200011c726563656976658502012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473b10501404d756c7469417373657446696c74657200011c72657365727665950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473b10501404d756c7469417373657446696c74657200011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374950201344d756c74694c6f636174696f6e000118617373657473b10501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e080110666565738d0201284d756c746941737365740001307765696768745f6c696d6974bd05012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400c505014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e6469780400c505014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574738502012c4d756c74694173736574730001187469636b6574950201344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b0000d1050c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656434011c5665633c75383e0000d5050c0c78636d0876330c58636d041043616c6c00000400d90501585665633c496e737472756374696f6e3c43616c6c3e3e0000d905000002dd0500dd050c0c78636d0876332c496e737472756374696f6e041043616c6c0001c0345769746864726177417373657404002102012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404002102012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404002102012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e73653d020120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572610201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e7366657241737365740801186173736574732102012c4d756c746941737365747300012c62656e6566696369617279f10101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574732102012c4d756c746941737365747300011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64650201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6cd105014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572fd01010c7533320001406d61785f6d6573736167655f73697a65fd01010c7533320001306d61785f6361706163697479fd01010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74fd01010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72fd01010c75333200011873656e646572fd01010c753332000124726563697069656e74fd01010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400f5010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f7204006d0201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473710201404d756c7469417373657446696c74657200012c62656e6566696369617279f10101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473710201404d756c7469417373657446696c74657200011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e000e003445786368616e676541737365740c011067697665710201404d756c7469417373657446696c74657200011077616e742102012c4d756c746941737365747300011c6d6178696d616cac0110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473710201404d756c7469417373657446696c74657200011c72657365727665f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473710201404d756c7469417373657446696c74657200011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f6d0201445175657279526573706f6e7365496e666f000118617373657473710201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573290201284d756c746941737365740001307765696768745f6c696d69747d02012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400d505012458636d3c43616c6c3e0015002c536574417070656e6469780400d505012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574732102012c4d756c74694173736574730001187469636b6574f10101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e417373657404002102012c4d756c7469417373657473001c002c457870656374417373657404002102012c4d756c7469417373657473001d00304578706563744f726967696e0400610201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400410201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400590201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6534011c5665633c75383e000134726573706f6e73655f696e666f6d0201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578fd01010c7533320001106e616d6534011c5665633c75383e00012c6d6f64756c655f6e616d6534011c5665633c75383e00012c63726174655f6d616a6f72fd01010c75333200013c6d696e5f63726174655f6d696e6f72fd01010c753332002200505265706f72745472616e7361637453746174757304006d0201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400f90101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726b050201244e6574776f726b496400012c64657374696e6174696f6ef5010154496e746572696f724d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e002600244c6f636b41737365740801146173736574290201284d756c74694173736574000120756e6c6f636b6572f10101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574290201284d756c74694173736574000118746172676574f10101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574290201284d756c746941737365740001146f776e6572f10101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574290201284d756c746941737365740001186c6f636b6572f10101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177ac0110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400f10101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747d02012c5765696768744c696d6974000130636865636b5f6f726967696e610201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000e1050c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c65741043616c6c04045400010448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d69742801185765696768740000048c536565205b6050616c6c65743a3a736572766963655f6f766572776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee5050000021d0400e90500000408ed051800ed050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e0000f1050c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d62657201102050726f706f73616c0121041c42616c616e6365011801081c4f6e676f696e670400f50501c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564ac0110626f6f6c00010c656e6410012c426c6f636b4e756d62657200010000f5050c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d62657201102050726f706f73616c0121041c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200012070726f706f73616c2104012050726f706f73616c0001247468726573686f6c64980134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c79f905013854616c6c793c42616c616e63653e0000f9050c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e63650000fd050c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f746573000108184469726563740c0114766f746573010601f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e730d06015044656c65676174696f6e733c42616c616e63653e0001147072696f721106017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6e2d040128436f6e76696374696f6e00012c64656c65676174696f6e730d06015044656c65676174696f6e733c42616c616e63653e0001147072696f721106017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0001000001060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010506045300000400090601185665633c543e0000050600000408209c0009060000020506000d060c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e6365000011060c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e636500001506000004082104980019060000040810ed05001d060c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f720404540001602056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7740507265696d6167654e6f7445786973740017047054686520707265696d61676520646f6573206e6f742065786973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e21060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400b10101185665633c543e00002506084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e64657820013450726f706f73616c496e6465780001247468726573686f6c6420012c4d656d626572436f756e7400011061796573b90101385665633c4163636f756e7449643e0001106e617973b90101385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d626572000029060c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e2d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400b10101185665633c543e000031060c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e35060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e000039060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e3d06083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e6365000041060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540120045300000400b50301185665633c543e000045060c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040020010c7533320000490604184f7074696f6e04045401180108104e6f6e6500000010536f6d6504001800000100004d0608346672616d655f737570706f72742050616c6c65744964000004003902011c5b75383b20385d000051060c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900011470496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e04784572726f7220666f72207468652074726561737572792070616c6c65742e55060c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e59060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540179040453000004005d0601185665633c543e00005d060000027904006106083870616c6c65745f76657374696e672052656c65617365730001080856300000000856310001000065060c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742e69060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016d06045300000400750601185665633c543e00006d0604184f7074696f6e0404540171060108104e6f6e6500000010536f6d650400710600000100007106084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c0121042c426c6f636b4e756d62657201103450616c6c6574734f726967696e015504244163636f756e7449640100001401206d617962655f6964d401304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2104011043616c6c0001386d617962655f706572696f646963810401944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e5504013450616c6c6574734f726967696e000075060000026d060079060c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d06000004088106180081060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018506045300000400890601185665633c543e00008506083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501dc2c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065dc012450726f78795479706500011464656c617910012c426c6f636b4e756d626572000089060000028506008d06000004089106180091060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019506045300000400990601185665633c543e00009506083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801302c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173683001104861736800011868656967687410012c426c6f636b4e756d626572000099060000029506009d060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea106083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f736974a5060150284163636f756e7449642c2042616c616e63652900010c6c656e20010c753332000000245265717565737465640c011c6465706f736974a90601704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7420010c75333200010c6c656e3104012c4f7074696f6e3c7533323e00010000a50600000408001800a90604184f7074696f6e04045401a5060108104e6f6e6500000010536f6d650400a5060000010000ad0600000408302000b1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000b5060c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e0000bd060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec106082c70616c6c65745f746970731c4f70656e54697010244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572011010486173680130001c0118726561736f6e3001104861736800010c77686f0001244163636f756e74496400011866696e6465720001244163636f756e74496400011c6465706f73697418011c42616c616e6365000118636c6f736573c506014c4f7074696f6e3c426c6f636b4e756d6265723e00011074697073c90601645665633c284163636f756e7449642c2042616c616e6365293e00012c66696e646572735f666565ac0110626f6f6c0000c50604184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000c906000002a50600cd060c3473705f61726974686d65746963287065725f7468696e67731c50657263656e740000040008010875380000d1060c2c70616c6c65745f746970731870616c6c6574144572726f7208045400044900011830526561736f6e546f6f4269670000048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e30416c72656164794b6e6f776e00010488546865207469702077617320616c726561647920666f756e642f737461727465642e28556e6b6e6f776e5469700002046054686520746970206861736820697320756e6b6e6f776e2e244e6f7446696e6465720003041d01546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e245374696c6c4f70656e0004042901546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e245072656d61747572650005043101546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed50600000408000400d906083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656ef4015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c73dd06018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e0000dd060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e0000e1060c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee5060c1463747970652c63747970655f656e747279284374797065456e747279081c43726561746f7201002c426c6f636b4e756d62657201100008011c63726561746f7200011c43726561746f72000128637265617465645f617410012c426c6f636b4e756d6265720000e9060c1463747970651870616c6c6574144572726f7204045400010c204e6f74466f756e64000004985468657265206973206e6f20435479706520776974682074686520676976656e20686173682e34416c72656164794578697374730001046454686520435479706520616c7265616479206578697374732e3c556e61626c65546f506179466565730002040d0154686520706179696e67206163636f756e742077617320756e61626c6520746f2070617920746865206665657320666f72206372656174696e6720612063747970652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eed060c2c6174746573746174696f6e306174746573746174696f6e73484174746573746174696f6e44657461696c7314244374797065486173680130284174746573746572496401003c417574686f72697a6174696f6e4964010501244163636f756e74496401001c42616c616e636501180014012863747970655f68617368300124437479706548617368000120617474657374657200012841747465737465724964000140617574686f72697a6174696f6e5f69640101015c4f7074696f6e3c417574686f72697a6174696f6e49643e00011c7265766f6b6564ac0110626f6f6c00011c6465706f736974f106016c4465706f7369743c4163636f756e7449642c2042616c616e63653e0000f1060c306b696c745f737570706f72741c6465706f7369741c4465706f736974081c4163636f756e7401001c42616c616e63650118000801146f776e657200011c4163636f756e74000118616d6f756e7418011c42616c616e63650000f5060000040805013000f9060c2c6174746573746174696f6e1870616c6c6574144572726f720404540001183c416c726561647941747465737465640000080901546865726520697320616c726561647920616e206174746573746174696f6e2077697468207468652073616d6520636c61696d20686173682073746f726564206f6e18636861696e2e38416c72656164795265766f6b6564000104a4546865206174746573746174696f6e2068617320616c7265616479206265656e207265766f6b65642e204e6f74466f756e64000204c04e6f206174746573746174696f6e206f6e20636861696e206d61746368696e672074686520636c61696d20686173682e3443547970654d69736d61746368000308fc546865206174746573746174696f6e20435479706520646f6573206e6f74206d61746368207468652043547970652073706563696669656420696e207468656864656c65676174696f6e2068696572617263687920726f6f742e344e6f74417574686f72697a6564000404f05468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f206368616e676520746865206174746573746174696f6e2e804d617844656c6567617465644174746573746174696f6e73457863656564656400050cf4546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732068617320616c7265616479206265656e05017265616368656420666f722074686520636f72726573706f6e64696e672064656c65676174696f6e2069642073756368207468617420616e6f74686572206f6e654063616e6e6f742062652061646465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368793844656c65676174696f6e4e6f6465144044656c65676174696f6e4e6f6465496401302c4d61784368696c6472656e0101074444656c65676174696f6e44657461696c73010507244163636f756e74496401001c42616c616e63650118001401446869657261726368795f726f6f745f696430014044656c65676174696f6e4e6f64654964000118706172656e74350401604f7074696f6e3c44656c65676174696f6e4e6f646549643e0001206368696c6472656e090701b8426f756e64656442547265655365743c44656c65676174696f6e4e6f646549642c204d61784368696c6472656e3e00011c64657461696c730507014444656c65676174696f6e44657461696c7300011c6465706f736974f106016c4465706f7369743c4163636f756e7449642c2042616c616e63653e00000107103872756e74696d655f636f6d6d6f6e24636f6e7374616e74732864656c65676174696f6e2c4d61784368696c6472656e0000000005070c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368794444656c65676174696f6e44657461696c73042c44656c656761746f7249640100000c01146f776e657200012c44656c656761746f72496400011c7265766f6b6564ac0110626f6f6c00012c7065726d697373696f6e730d01012c5065726d697373696f6e73000009070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401300453000004000d07012c42547265655365743c543e00000d07042042547265655365740404540130000400b10100000011070c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368796844656c65676174696f6e48696572617263687944657461696c73042443747970654861736801300004012863747970655f68617368300124437479706548617368000015070c2864656c65676174696f6e1870616c6c6574144572726f720404540001585c44656c65676174696f6e416c72656164794578697374730000041101546865726520697320616c726561647920612064656c65676174696f6e206e6f64652077697468207468652073616d652049442073746f726564206f6e20636861696e2e60496e76616c696444656c65676174655369676e617475726500010805015468652064656c65676174652773207369676e617475726520666f72207468652064656c65676174696f6e206372656174696f6e206f7065726174696f6e20697320696e76616c69642e4844656c65676174696f6e4e6f74466f756e64000204c04e6f2064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e4044656c65676174654e6f74466f756e64000304b84e6f2064656c656761746520776974682074686520676976656e2049442073746f726564206f6e20636861696e2e58486965726172636879416c7265616479457869737473000404f8546865726520697320616c72656164792061206869657261726368792077697468207468652073616d652049442073746f726564206f6e20636861696e2e444869657261726368794e6f74466f756e64000504bc4e6f2068696572617263687920776974682074686520676976656e2049442073746f726564206f6e20636861696e2e544d617853656172636844657074685265616368656400060409014d6178206e756d626572206f66206e6f64657320636865636b656420776974686f757420766572696679696e672074686520676976656e20636f6e646974696f6e2e684e6f744f776e65724f66506172656e7444656c65676174696f6e000708f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6ef462656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20706172656e74206e6f64652e744e6f744f776e65724f6644656c65676174696f6e486965726172636879000808f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6eec62656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20726f6f74206e6f64652e60506172656e7444656c65676174696f6e4e6f74466f756e64000904dc4e6f20706172656e742064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e5c506172656e7444656c65676174696f6e5265766f6b6564000a04c854686520706172656e742064656c65676174696f6e206861732070726576696f75736c79206265656e207265766f6b65642e58556e617574686f72697a65645265766f636174696f6e000b04fc5468652064656c65676174696f6e207265766f6b6572206973206e6f7420616c6c6f77656420746f207265766f6b65207468652064656c65676174696f6e2e4c556e617574686f72697a656452656d6f76616c000c04ec5468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f2072656d6f7665207468652064656c65676174696f6e2e58556e617574686f72697a656444656c65676174696f6e000d04fc5468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f20637265617465207468652064656c65676174696f6e2e3041636365737344656e696564000e04f0546865206f7065726174696f6e207761736e277420616c6c6f7765642062656361757365206f6620696e73756666696369656e74207269676874732e6045786365656465645265766f636174696f6e426f756e6473000f080d014d6178206e756d626572206f66207265766f636174696f6e7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7238746865206f7065726174696f6e2e54457863656564656452656d6f76616c426f756e647300100811014d6178206e756d626572206f662072656d6f76616c7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7220746865286f7065726174696f6e2e584d61785265766f636174696f6e73546f6f4c61726765001104f8546865206d6178206e756d626572206f66207265766f636174696f6e206578636565647320746865206c696d697420666f72207468652070616c6c65742e4c4d617852656d6f76616c73546f6f4c61726765001204f0546865206d6178206e756d626572206f662072656d6f76616c73206578636565647320746865206c696d697420666f72207468652070616c6c65742e5c4d6178506172656e74436865636b73546f6f4c617267650013040501546865206d6178206e756d626572206f6620706172656e7420636865636b73206578636565647320746865206c696d697420666f72207468652070616c6c65742e20496e7465726e616c001404f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e4c4d61784368696c6472656e4578636565646564001508dc546865206d6178206e756d626572206f6620616c6c206368696c6472656e20686173206265656e207265616368656420666f722074686578636f72726573706f6e64696e672064656c65676174696f6e206e6f64652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e19070c0c6469642c6469645f64657461696c732844696444657461696c7304045400001c014861757468656e7469636174696f6e5f6b65793001284b657949644f663c543e0001486b65795f61677265656d656e745f6b6579731d0701684469644b657941677265656d656e744b65795365744f663c543e00013864656c65676174696f6e5f6b6579350401484f7074696f6e3c4b657949644f663c543e3e00013c6174746573746174696f6e5f6b6579350401484f7074696f6e3c4b657949644f663c543e3e00012c7075626c69635f6b657973210701504469645075626c69634b65794d61704f663c543e00013c6c6173745f74785f636f756e74657210010c75363400011c6465706f736974f10601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e00001d070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401300453000004000d07012c42547265655365743c543e000021070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b013004560125070453000004002d07013842547265654d61703c4b2c20563e000025070c0c6469642c6469645f64657461696c734c4469645075626c69634b657944657461696c73082c426c6f636b4e756d6265720110244163636f756e74496401000008010c6b65792907015c4469645075626c69634b65793c4163636f756e7449643e000130626c6f636b5f6e756d62657210012c426c6f636b4e756d626572000029070c0c6469642c6469645f64657461696c73304469645075626c69634b657904244163636f756e74496401000108545075626c6963566572696669636174696f6e4b6579040011050174446964566572696669636174696f6e4b65793c4163636f756e7449643e0000004c5075626c6963456e6372797074696f6e4b6579040001050140446964456e6372797074696f6e4b6579000100002d07042042547265654d617008044b01300456012507000400310700000031070000023507003507000004083025070039070000040800e104003d070c0c6469641870616c6c6574144572726f7204045400016c58496e76616c69645369676e6174757265466f726d6174000008050154686520444944206f7065726174696f6e207369676e6174757265206973206e6f7420696e2074686520666f726d61742074686520766572696669636174696f6e306b657920657870656374732e40496e76616c69645369676e6174757265000108f854686520444944206f7065726174696f6e207369676e617475726520697320696e76616c696420666f7220746865207061796c6f616420616e642074686568766572696669636174696f6e206b65792070726f76696465642e34416c7265616479457869737473000204f85468652044494420776974682074686520676976656e206964656e74696669657220697320616c72656164792070726573656e74206f6e20636861696e2e204e6f74466f756e64000304d44e6f2044494420776974682074686520676976656e206964656e7469666965722069732070726573656e74206f6e20636861696e2e5c566572696669636174696f6e4b65794e6f74466f756e6400040809014f6e65206f72206d6f726520766572696669636174696f6e206b657973207265666572656e63656420617265206e6f742073746f72656420696e2074686520736574546f6620766572696669636174696f6e206b6579732e30496e76616c69644e6f6e6365000504090154686520444944206f7065726174696f6e206e6f6e6365206973206e6f7420657175616c20746f207468652063757272656e7420444944206e6f6e6365202b20312e7c556e737570706f72746564446964417574686f72697a6174696f6e43616c6c000604e05468652063616c6c65642065787472696e73696320646f6573206e6f7420737570706f72742044494420617574686f7269736174696f6e2e6c496e76616c6964446964417574686f72697a6174696f6e43616c6c000708dc5468652063616c6c2068616420706172616d6574657273207468617420636f6e666c696374656420776974682065616368206f74686572406f72207765726520696e76616c69642e8c4d61784e65774b657941677265656d656e744b6579734c696d697445786365656465640008080d0141206e756d626572206f66206e6577206b65792061677265656d656e74206b6579732067726561746572207468616e20746865206d6178696d756d20616c6c6f77656448686173206265656e2070726f76696465642e544d61785075626c69634b65797345786365656465640009080501546865206d6178696d756d206e756d626572206f66207075626c6963206b65797320666f72207468697320444944206b6579206964656e74696669657220686173346265656e20726561636865642e6c4d61784b657941677265656d656e744b6579734578636565646564000a080501546865206d6178696d756d206e756d626572206f66206b65792061677265656d656e747320686173206265656e207265616368656420666f722074686520444944207375626a6563742e304261644469644f726967696e000b04bc546865204449442063616c6c20776173207375626d6974746564206279207468652077726f6e67206163636f756e74485472616e73616374696f6e45787069726564000c040d0154686520626c6f636b206e756d6265722070726f766964656420696e2061204449442d617574686f72697a6564206f7065726174696f6e20697320696e76616c69642e38416c726561647944656c65746564000d04b0546865204449442068617320616c7265616479206265656e2070726576696f75736c792064656c657465642e444e6f744f776e65724f664465706f736974000e04fc4f6e6c7920746865206f776e6572206f6620746865206465706f7369742063616e207265636c61696d206974732072657365727665642062616c616e63652e3c556e61626c65546f50617946656573000f04f0546865206f726967696e20697320756e61626c6520746f207265736572766520746865206465706f73697420616e642070617920746865206665652e6c4d61784e756d6265724f66536572766963657345786365656465640010041101546865206d6178696d756d206e756d626572206f66207365727669636520656e64706f696e747320666f7220612044494420686173206265656e2065786365656465642e684d61785365727669636549644c656e6774684578636565646564001104f0546865207365727669636520656e64706f696e7420494420657863656564656420746865206d6178696d756d20616c6c6f776564206c656e6774682e704d617853657276696365547970654c656e6774684578636565646564001208f84f6e65206f6620746865207365727669636520656e64706f696e7420747970657320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e884d61784e756d6265724f665479706573506572536572766963654578636565646564001308ec546865206d6178696d756d206e756d626572206f6620747970657320666f722061207365727669636520656e64706f696e7420686173206265656e2465786365656465642e6c4d61785365727669636555726c4c656e6774684578636565646564001408f44f6e65206f6620746865207365727669636520656e64706f696e742055524c7320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e844d61784e756d6265724f6655726c735065725365727669636545786365656465640015041101546865206d6178696d756d206e756d626572206f662055524c7320666f722061207365727669636520656e64706f696e7420686173206265656e2065786365656465642e5053657276696365416c726561647945786973747300160411014120736572766963652077697468207468652070726f766964656420494420697320616c72656164792070726573656e7420666f722074686520676976656e204449442e3c536572766963654e6f74466f756e6400170409014120736572766963652077697468207468652070726f7669646564204944206973206e6f742070726573656e7420756e6465722074686520676976656e204449442e58496e76616c696453657276696365456e636f64696e6700180409014f6e65206f6620746865207365727669636520656e64706f696e742064657461696c7320636f6e7461696e73206e6f6e2d415343494920636861726163746572732e7c4d617853746f726564456e64706f696e7473436f756e7445786365656465640019080d01546865206e756d626572206f66207365727669636520656e64706f696e74732073746f72656420756e6465722074686520444944206973206c6172676572207468616e88746865206e756d626572206f6620656e64706f696e747320746f2064656c6574652e20496e7465726e616c001a04f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e41070c4470616c6c65745f6469645f6c6f6f6b757044636f6e6e656374696f6e5f7265636f726440436f6e6e656374696f6e5265636f72640c344469644964656e74696669657201001c4163636f756e7401001c42616c616e636501180008010c6469640001344469644964656e74696669657200011c6465706f736974f10601644465706f7369743c4163636f756e742c2042616c616e63653e00004507000004080019010049070c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144572726f72040454000114204e6f74466f756e640000047c546865206173736f63696174696f6e20646f6573206e6f742065786973742e344e6f74417574686f72697a65640001081101546865206f726967696e20776173206e6f7420616c6c6f77656420746f206d616e61676520746865206173736f63696174696f6e206265747765656e20746865204449444c616e6420746865206163636f756e742049442e344f7574646174656450726f6f66000204b454686520737570706c6965642070726f6f66206f66206f776e65727368697020776173206f757464617465642e44496e73756666696369656e7446756e64730003081101546865206163636f756e742068617320696e73756666696369656e742066756e647320616e642063616e277420706179207468652066656573206f72207265736572766530746865206465706f7369742e244d6967726174696f6e00040c010154686520436f6e6e65637465644163636f756e747320616e6420436f6e6e6563746564446964732073746f7261676520617265206f7574206f662073796e632e0011014e4f54453a20746869732077696c6c206f6e6c792062652072657475726e6564206966207468652073746f726167652068617320696e636f6e73697374656e636965732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4d070c4470616c6c65745f776562335f6e616d657324776562335f6e616d6544576562334e616d654f776e6572736869700c144f776e657201001c4465706f73697401f1062c426c6f636b4e756d6265720110000c01146f776e65720001144f776e6572000128636c61696d65645f617410012c426c6f636b4e756d62657200011c6465706f736974f106011c4465706f736974000051070c4470616c6c65745f776562335f6e616d65731870616c6c6574144572726f7204045400013044496e73756666696369656e7446756e64730000040d01546865207478207375626d697474657220646f6573206e6f74206861766520656e6f7567682066756e647320746f2070617920666f7220746865206465706f7369742e34416c7265616479457869737473000104dc54686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c7920636c61696d65642e204e6f74466f756e640002048854686520737065636966696564206e616d6520646f6573206e6f742065786973742e484f776e6572416c7265616479457869737473000304a054686520737065636966696564206f776e657220616c7265616479206f776e732061206e616d652e344f776e65724e6f74466f756e64000404ac54686520737065636966696564206f776e657220646f6573206e6f74206f776e20616e79206e616d65732e1842616e6e6564000508ec54686520737065636966696564206e616d6520686173206265656e2062616e6e656420616e642063616e6e6f7420626520696e746572616374656414776974682e244e6f7442616e6e6564000604ac54686520737065636966696564206e616d65206973206e6f742063757272656e746c792062616e6e65642e34416c726561647942616e6e6564000704d854686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c792062616e6e65642e344e6f74417574686f72697a6564000804cc546865206163746f722063616e6e6f7420706572666f726d65642074686520737065636966696564206f7065726174696f6e2e20546f6f53686f7274000904a841206e616d65207468617420697320746f6f2073686f7274206973206265696e6720636c61696d65642e1c546f6f4c6f6e67000a04a441206e616d65207468617420697320746f6f206c6f6e67206973206265696e6720636c61696d65642e40496e76616c6964436861726163746572000b04f441206e616d65207468617420636f6e7461696e73206e6f7420616c6c6f7765642063686172616374657273206973206265696e6720636c61696d65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e55070c487075626c69635f63726564656e7469616c732c63726564656e7469616c733c43726564656e7469616c456e7472791824435479706548617368013020417474657374657201002c426c6f636b4e756d6265720110244163636f756e74496401001c42616c616e636501183c417574686f72697a6174696f6e49640105010018012863747970655f686173683001244354797065486173680001206174746573746572000120417474657374657200011c7265766f6b6564ac0110626f6f6c000130626c6f636b5f6e756d62657210012c426c6f636b4e756d62657200011c6465706f736974f106016c4465706f7369743c4163636f756e7449642c2042616c616e63653e000140617574686f72697a6174696f6e5f69640101015c4f7074696f6e3c417574686f72697a6174696f6e49643e000059070c487075626c69635f63726564656e7469616c731870616c6c6574144572726f720404540001183c416c72656164794174746573746564000008f8412063726564656e7469616c2077697468207468652073616d6520726f6f7420686173682068617320616c72656164792069737375656420746f2074686548737065636966696564207375626a6563742e204e6f74466f756e6400010805014e6f2063726564656e7469616c2077697468207468652073706563696669656420726f6f74206861736820686173206265656e2069737375656420746f2074686548737065636966696564207375626a6563742e3c556e61626c65546f50617946656573000204d44e6f7420656e6f75676820746f6b656e7320746f2070617920666f72207468652066656573206f7220746865206465706f7369742e30496e76616c6964496e707574000304805468652063726564656e7469616c20696e70757420697320696e76616c69642e344e6f74417574686f72697a6564000404e05468652063616c6c6572206973206e6f7420617574686f72697a656420746f20706572666f726d656420746865206f7065726174696f6e2e20496e7465726e616c000508f443617463682d616c6c20666f7220616e79206f74686572206572726f727320746861742073686f756c64206e6f742068617070656e2c207965742069742468617070656e65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e5d070c4070616c6c65745f6d6967726174696f6e1870616c6c6574144572726f72040454000104204b65795061727365000000048054686520604572726f726020656e756d206f6620746869732070616c6c65742e610704184f7074696f6e0404540165070108104e6f6e6500000010536f6d6504006507000001000065070c4c706f6c6b61646f745f7072696d69746976657308763548557067726164655265737472696374696f6e0001041c50726573656e740000000069070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f6865616430014472656c61795f636861696e3a3a4861736800016472656c61795f64697370617463685f71756575655f73697a656d07015452656c617944697370616368517565756553697a65000140696e67726573735f6368616e6e656c73710701885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c73710701885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00006d070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f745452656c617944697370616368517565756553697a65000008013c72656d61696e696e675f636f756e7420010c75333200013872656d61696e696e675f73697a6520010c75333200007107000002750700750700000408e50179070079070c4c706f6c6b61646f745f7072696d6974697665730876354c416272696467656448726d704368616e6e656c00001801306d61785f636170616369747920010c7533320001386d61785f746f74616c5f73697a6520010c7533320001406d61785f6d6573736167655f73697a6520010c7533320001246d73675f636f756e7420010c753332000128746f74616c5f73697a6520010c7533320001206d71635f68656164350401304f7074696f6e3c486173683e00007d070c4c706f6c6b61646f745f7072696d697469766573087635644162726964676564486f7374436f6e66696775726174696f6e00002401346d61785f636f64655f73697a6520010c7533320001486d61785f686561645f646174615f73697a6520010c7533320001586d61785f7570776172645f71756575655f636f756e7420010c7533320001546d61785f7570776172645f71756575655f73697a6520010c75333200015c6d61785f7570776172645f6d6573736167655f73697a6520010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746520010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746520010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e20012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c617920012c426c6f636b4e756d62657200008107089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e0000040030012452656c61794861736800008507042042547265654d617008044b01e5010456018107000400890700000089070000028d07008d0700000408e501810700910700000295070095070860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401e50100080124726563697069656e74e501010849640001106461746134015073705f7374643a3a7665633a3a5665633c75383e00009907087c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6eac0110626f6f6c00009d070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041901417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e672e5050726f686962697465644279506f6c6b61646f740001044d01506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e2e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733c77696c6c696e6720746f2072756e2e6856616c69646174696f6e446174614e6f74417661696c61626c650003041d0154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b2e74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404290154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b2e304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea107000002a50700a507086463756d756c75735f70616c6c65745f78636d705f717565756554496e626f756e644368616e6e656c44657461696c7300000c011873656e646572e50101185061726149640001147374617465a9070130496e626f756e6453746174650001406d6573736167655f6d65746164617461ad0701a85665633c2852656c6179426c6f636b4e756d6265722c2058636d704d657373616765466f726d6174293e0000a907086463756d756c75735f70616c6c65745f78636d705f717565756530496e626f756e645374617465000108084f6b0000002453757370656e64656400010000ad07000002b10700b1070000040820b50700b5070c48706f6c6b61646f745f70617261636861696e287072696d6974697665734458636d704d657373616765466f726d617400010c60436f6e636174656e6174656456657273696f6e656458636d0000005c436f6e636174656e61746564456e636f646564426c6f620001001c5369676e616c7300020000b90700000408e5012000bd07000002c10700c107086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74e50101185061726149640001147374617465c50701344f7574626f756e6453746174650001347369676e616c735f6578697374ac0110626f6f6c00012c66697273745f696e646578e0010c7531360001286c6173745f696e646578e0010c7531360000c507086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000c90700000408e501e000cd07086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e66696744617461000018014473757370656e645f7468726573686f6c6420010c75333200013864726f705f7468726573686f6c6420010c753332000140726573756d655f7468726573686f6c6420010c7533320001407468726573686f6c645f7765696768742801185765696768740001547765696768745f72657374726963745f646563617928011857656967687400016878636d705f6d61785f696e646976696475616c5f7765696768742801185765696768740000d1070000040ce501203400d5070c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f72040454000114304661696c6564546f53656e640000046c4661696c656420746f2073656e642058434d206d6573736167652e3042616458636d4f726967696e0001043c4261642058434d206f726967696e2e1842616458636d000204344261642058434d20646174612e484261644f766572776569676874496e64657800030454426164206f76657277656967687420696e6465782e3c5765696768744f7665724c696d6974000404f850726f76696465642077656967687420697320706f737369626c79206e6f7420656e6f75676820746f206578656375746520746865206d6573736167652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed9070c2870616c6c65745f78636d1870616c6c65742c5175657279537461747573042c426c6f636b4e756d6265720110010c1c50656e64696e67100124726573706f6e646572b902015856657273696f6e65644d756c74694c6f636174696f6e00014c6d617962655f6d617463685f71756572696572dd0701784f7074696f6e3c56657273696f6e65644d756c74694c6f636174696f6e3e0001306d617962655f6e6f74696679e10701404f7074696f6e3c2875382c207538293e00011c74696d656f757410012c426c6f636b4e756d6265720000003c56657273696f6e4e6f7469666965720801186f726967696eb902015856657273696f6e65644d756c74694c6f636174696f6e00012469735f616374697665ac0110626f6f6c000100145265616479080120726573706f6e7365e907014456657273696f6e6564526573706f6e7365000108617410012c426c6f636b4e756d62657200020000dd0704184f7074696f6e04045401b9020108104e6f6e6500000010536f6d650400b9020000010000e10704184f7074696f6e04045401e5070108104e6f6e6500000010536f6d650400e5070000010000e50700000408080800e907080c78636d4456657273696f6e6564526573706f6e73650001080856320400a105013076323a3a526573706f6e736500020008563304003d02013076333a3a526573706f6e736500030000ed070000040820b90200f1070000040c10282000f5070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f907045300000400fd0701185665633c543e0000f90700000408b9022000fd07000002f9070001080c2870616c6c65745f78636d1870616c6c65745456657273696f6e4d6967726174696f6e53746167650001105c4d696772617465537570706f7274656456657273696f6e0000005c4d69677261746556657273696f6e4e6f74696669657273000100504e6f7469667943757272656e745461726765747304000508013c4f7074696f6e3c5665633c75383e3e000200684d696772617465416e644e6f746966794f6c645461726765747300030000050804184f7074696f6e04045401340108104e6f6e6500000010536f6d65040034000001000009080000040c20000d08000d08080c78636d4056657273696f6e65644173736574496400010408563304002d02012c76333a3a417373657449640003000011080c2870616c6c65745f78636d1870616c6c65746852656d6f74654c6f636b656446756e6769626c655265636f72640848436f6e73756d65724964656e746966696572013902304d6178436f6e73756d6572730000100118616d6f756e74180110753132380001146f776e6572b902015856657273696f6e65644d756c74694c6f636174696f6e0001186c6f636b6572b902015856657273696f6e65644d756c74694c6f636174696f6e000124636f6e73756d657273150801d0426f756e6465645665633c28436f6e73756d65724964656e7469666965722c2075313238292c204d6178436f6e73756d6572733e000015080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540119080453000004001d0801185665633c543e0000190800000408390218001d0800000219080021080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012508045300000400290801185665633c543e000025080000040818b9020029080000022508002d080c2870616c6c65745f78636d1870616c6c6574144572726f720404540001502c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108610154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652e2050657268617073a861206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e30496e76616c69644173736574000d0480496e76616c696420617373657420666f7220746865206f7065726174696f6e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304490154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c20636f6e73756d657273206f6620746865206c6f636b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e31080c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144572726f72040454000100048054686520604572726f726020656e756d206f6620746869732070616c6c65742e3508086063756d756c75735f70616c6c65745f646d705f717565756528436f6e6669674461746100000401386d61785f696e646976696475616c28011857656967687400003908086063756d756c75735f70616c6c65745f646d705f71756575653450616765496e6465784461746100000c0128626567696e5f7573656420012c50616765436f756e746572000120656e645f7573656420012c50616765436f756e7465720001406f7665727765696768745f636f756e7410013c4f766572776569676874496e64657800003d0800000241080041080000040820340045080c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144572726f720404540001081c556e6b6e6f776e0000048c546865206d65737361676520696e64657820676976656e20697320756e6b6e6f776e2e244f7665724c696d6974000104310154686520616d6f756e74206f662077656967687420676976656e20697320706f737369626c79206e6f7420656e6f75676820666f7220657865637574696e6720746865206d6573736167652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4908102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730121031043616c6c012504245369676e6174757265013105144578747261014d08000400340000004d08000004205108550859085d08610869086d08710800510810306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000550810306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000590810306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e040454000000005d0810306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000610810306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004006508010c45726100006508102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000690810306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e6365040454000004002c0120543a3a4e6f6e636500006d0810306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000007108086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e74040454000004000902013042616c616e63654f663c543e0000981853797374656d011853797374656d401c4163636f756e7401010402000c510100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000020040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010024180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000020040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510308000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040520340400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d626572010010200000000000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003080000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010038040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004804001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010020100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f706963730101040230c9020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000cd0204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100ac0400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100ac0400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000c502040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01d50201541830426c6f636b57656967687473e5026d01025b1f5d00070088526a7402004001c2a0a91d000107d00918a44b0200d000010700e6bd4f570200f000010000c2a0a91d000107d0abacbe680200200101070088526a7402004001010700a2941a1d02005000c2a0a91d0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468f5023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e7410206009000000000000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874fd0240089d26020000000000dce704000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e01036103386b696c742d7370697269746e6574386b696c742d7370697269746e657401000000ca2b00000000000038df6acb689907609b0400000037e397fc7c91f5e402000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000f3ff14d5ab5270590300000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000dd718d5cc53262d401000000ea93e3f16f3d69620200000026609555c065660302000000a47b7d544994c99b0100000045bfba51a310b2230100000008000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e2853533538507265666978e008260014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e011103002454696d657374616d70012454696d657374616d70080c4e6f7701001020000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100ac040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0115030004344d696e696d756d506572696f6410207017000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00021c496e6469636573011c496e646963657304204163636f756e7473000104021019030400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e011d030178041c4465706f736974184000b47cf328350000000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e012903052042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b7301010402002d03040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e20526573657276657301010402003d03040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e14486f6c6473010104020049030400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a6573010104020071030400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e018503017c14484578697374656e7469616c4465706f736974184000a0724e18090000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7320103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573201032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e204d6178486f6c647320103200000004190120546865206d6178696d756d206e756d626572206f6620686f6c647320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e284d6178467265657a657320103200000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01890306485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c69657201008d0340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100910304000000018404604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00071041757261011041757261082c417574686f726974696573010095030400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f740100a5032000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000171c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100b9010400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010020100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e6765640100ac040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b6579730100a9030400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f72730100b5030400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b6579730001040500b1030400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405b90300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e01c10301880001c503164050617261636861696e5374616b696e67014050617261636861696e5374616b696e6740544d617853656c656374656443616e64696461746573010020100000000004090120546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c6563746564206174206561636820726f756e642e14526f756e640100c90350000000000000000000000000140000000000000004e82043757272656e7420726f756e64206e756d62657220616e64206e65787420726f756e64207363686564756c6564207472616e736974696f6e2e384c61737444656c65676174696f6e0101040500cd03200000000000000000140d012044656c65676174696f6e20696e666f726d6174696f6e20666f7220746865206c61746573742073657373696f6e20696e20776869636820612064656c656761746f722c2064656c6567617465642e000501204974206d6170732066726f6d20616e206163636f756e7420746f20746865206e756d626572206f662064656c65676174696f6e7320696e20746865206c617374982073657373696f6e20696e2077686963682074686579202872652d2964656c6567617465642e3844656c656761746f7253746174650001040500d10304000c802044656c65676174696f6e207374616b696e6720696e666f726d6174696f6e2e00cc204974206d6170732066726f6d20616e206163636f756e7420746f206974732064656c65676174696f6e2064657461696c732e3443616e646964617465506f6f6c0001040500d503040010a420546865207374616b696e6720696e666f726d6174696f6e20666f7220612063616e6469646174652e00b0204974206d6170732066726f6d20616e206163636f756e7420746f2069747320696e666f726d6174696f6e2eb8204d6f72656f7665722c20697420636f756e747320746865206e756d626572206f662063616e646964617465732e5c436f756e746572466f7243616e646964617465506f6f6c010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617048546f74616c436f6c6c61746f725374616b650100e90380000000000000000000000000000000000000000000000000000000000000000014f420546f74616c2066756e6473206c6f636b656420746f206261636b207468652063757272656e746c792073656c656374656420636f6c6c61746f72732ed0205468652073756d206f6620616c6c20636f6c6c61746f7220616e642074686569722064656c656761746f72207374616b65732e002101204e6f74653a20546865726520617265206d6f72652066756e6473206c6f636b656420627920746869732070616c6c65742c2073696e636520746865206261636b696e6720666f720901206e6f6e20636f6c6c6174696e672063616e64696461746573206973206e6f7420696e636c7564656420696e2060546f74616c436f6c6c61746f725374616b65602e34546f7043616e646964617465730100ed03040028e82054686520636f6c6c61746f722063616e64696461746573207769746820746865206869676865737420616d6f756e74206f66207374616b652e00190120456163682074696d6520746865207374616b65206f66206120636f6c6c61746f7220697320696e637265617365642c20697420697320636865636b65642077686574686572050120746869732070757368657320616e6f746865722063616e646964617465206f7574206f6620746865206c6973742e205768656e20746865207374616b652069732101207265647563656420686f77657665722c206974206973206e6f7420636865636b656420696620616e6f746865722063616e64696461746520686173206d6f7265207374616b652c11012073696e6365207468697320776f756c64207265717569726520697465726174696e67206f7665722074686520656e74697265206043616e646964617465506f6f6c602e001501205468657265206d75737420616c77617973206265206d6f72652063616e64696461746573207468616e20604d617853656c656374656443616e646964617465736020736f0d012074686174206120636f6c6c61746f722063616e2064726f70206f7574206f662074686520636f6c6c61746f7220736574206279207265647563696e672074686569721c207374616b652e3c496e666c6174696f6e436f6e6669670100f503c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046420496e666c6174696f6e20636f6e66696775726174696f6e2e24556e7374616b696e670101040500010404001088205468652066756e64732077616974696e6720746f20626520756e7374616b65642e001d01204974206d6170732066726f6d206163636f756e747320746f20616c6c207468652066756e64732061646472657373656420746f207468656d20696e20746865206675747572652020626c6f636b732e644d6178436f6c6c61746f7243616e6469646174655374616b65010018400000000000000000000000000000000004cc20546865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e6469646174652063616e207374616b652e4c4c617374526577617264526564756374696f6e010010200000000000000000140d0120546865207965617220696e20776869636820746865206c617374206175746f6d6174696320726564756374696f6e206f66207468652072657761726420726174657328206f636375727265642e00250120497420737461727473206174207a65726f2061742067656e6573697320616e6420696e6372656d656e7473206279206f6e6520657665727920424c4f434b535f5045525f5945415234206d616e7920626c6f636b732e38426c6f636b73417574686f726564010104050010200000000000000000080d0120546865206e756d626572206f6620617574686f72656420626c6f636b7320666f7220636f6c6c61746f72732e20497420697320757064617465642076696120746865b020606e6f74655f617574686f726020686f6f6b207768656e20617574686f72696e67206120626c6f636b202e38426c6f636b73526577617264656401010405001020000000000000000024210120546865206e756d626572206f6620626c6f636b7320666f7220776869636820726577617264732068617665206265656e20636c61696d656420627920616e20616464726573732e00190120466f7220636f6c6c61746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f7265642e2049742069732075706461746564207768656ecc20696e6372656d656e74696e6720636f6c6c61746f7220726577617264732c20656974686572207768656e2063616c6c696e67e02060696e635f636f6c6c61746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e00250120466f722064656c656761746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f726564206f662074686520636f6c6c61746f722e497420697305012075706461746564207768656e20696e6372656d656e74696e672064656c656761746f7220726577617264732c20656974686572207768656e2063616c6c696e67e42060696e635f64656c656761746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e1c5265776172647301010405001840000000000000000000000000000000000c01012054686520616363756d756c61746564207265776172647320666f7220636f6c6c61746f722063616e6469646174657320616e642064656c656761746f72732e001101204974206d6170732066726f6d206163636f756e747320746f20746865697220746f74616c20726577617264732073696e636520746865206c617374207061796f75742e34466f7263654e6577526f756e640100ac040000011104018c3c444d696e426c6f636b73506572526f756e6410202c0100000000000004d4204d696e696d756d206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e64732063616e206c6173742e5444656661756c74426c6f636b73506572526f756e641020580200000000000008fc2044656661756c74206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e6473206c6173742c2061732073657420696e207468655c2067656e6573697320636f6e66696775726174696f6e2e345374616b654475726174696f6e1020e0c40000000000000c0501204e756d626572206f6620626c6f636b7320666f7220776869636820756e7374616b65642062616c616e63652077696c6c207374696c6c206265206c6f636b6564f0206265666f72652069742063616e20626520756e6c6f636b6564206279206163746976656c792063616c6c696e67207468652065787472696e7369634c2060756e6c6f636b5f756e7374616b6564602e3845786974517565756544656c6179201002000000080901204e756d626572206f6620726f756e6473206120636f6c6c61746f722068617320746f207374617920616374697665206166746572207375626d697474696e672061c4207265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e304d696e436f6c6c61746f7273201010000000080d01204d696e696d756d206e756d626572206f6620636f6c6c61746f72732073656c65637465642066726f6d2074686520736574206f662063616e64696461746573206174602065766572792076616c69646174696f6e20726f756e642e504d696e5265717569726564436f6c6c61746f7273201004000000081101204d696e696d756d206e756d626572206f6620636f6c6c61746f72732077686963682063616e6e6f74206c6561766520746865206e6574776f726b2069662074686572653c20617265206e6f206f74686572732e584d617844656c65676174696f6e73506572526f756e64201001000000140101204d6178696d756d206e756d626572206f662064656c65676174696f6e732077686963682063616e206265206d6164652077697468696e207468652073616d651c20726f756e642e000d01204e4f54453a20546f2070726576656e742072652d64656c65676174696f6e2d7265776172642061747461636b732c2077652073686f756c64206b65657020746869732c20746f206265206f6e652e604d617844656c656761746f7273506572436f6c6c61746f7220102300000004e4204d6178696d756d206e756d626572206f662064656c656761746f727320612073696e676c6520636f6c6c61746f722063616e20686176652e404d6178546f7043616e6469646174657320104b00000004a0204d6178696d756d2073697a65206f662074686520746f702063616e64696461746573207365742e404d696e436f6c6c61746f725374616b6518400000e8890423c78a0000000000000000080901204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520656c65637465642061732076616c696461746f723420666f72206120726f756e642e644d696e436f6c6c61746f7243616e6469646174655374616b6518400000e8890423c78a0000000000000000080501204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520616464656420746f2074686520736574206f66302063616e646964617465732e444d696e44656c656761746f725374616b651840000082dfe40d4700000000000000000004f8204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f206265636f6d6520612064656c656761746f722e484d6178556e7374616b65526571756573747320100a00000028e8204d6178206e756d626572206f6620636f6e63757272656e742061637469766520756e7374616b696e67207265717565737473206265666f72652c20756e6c6f636b696e672e001501204e4f54453a20546f2070726f7465637420616761696e737420697272656d6f766162696c697479206f6620612063616e646964617465206f722064656c656761746f722cf4207765206f6e6c7920616c6c6f7720666f72204d6178556e7374616b655265717565737473202d2031206d616e79206d616e75616c20756e7374616b6501012072657175657374732e20546865206c617374206f6e6520736572766573206173206120706c616365686f6c64657220666f7220746865206361736573206f66f02063616c6c696e672065697468657220606b69636b5f64656c656761746f72602c20666f7263655f72656d6f76655f63616e64696461746560206f7209012060657865637574655f6c656176655f63616e64696461746573602e204f74686572776973652c2061207573657220636f756c64206d6178206f75742074686569720d0120756e7374616b6520726571756573747320616e642070726576656e74207468656d73656c7665732066726f6d206265696e67206b69636b65642066726f6d20746865f020736574206f662063616e646964617465732f64656c656761746f727320756e74696c207468657920756e6c6f636b2074686569722066756e64732e484e6574776f726b5265776172645374617274102048a3c800000000000c110120546865207374617274696e6720626c6f636b206e756d62657220666f7220746865206e6574776f726b20726577617264732e204f6e6365207468652063757272656e74090120626c6f636b206e756d626572206578636565647320746869732073746172742c207468652062656e65666963696172792077696c6c2072656365697665207468658420636f6e666967757265642072657761726420696e206561636820626c6f636b2e444e6574776f726b52657761726452617465902000008a5d784563010c0d0120546865207261746520696e2070657263656e7420666f7220746865206e6574776f726b207265776172647320776869636820617265206261736564206f6e207468650901206d6178696d756d206e756d626572206f6620636f6c6c61746f727320616e6420746865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e1c207374616b652e0115041528417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000141c41757261457874011c41757261457874042c417574686f72697469657301009503040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c790120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c20616c77617973f0206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e00000000182444656d6f6372616379012444656d6f6372616379303c5075626c696350726f70436f756e74010020100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f707301001904040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f660001040520e90504000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e74010020100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b6564010020100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f660001040520f10504000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f660101040500fd05e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100ac0400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c00001506040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c6973740001040630190604000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e730101040630ac0400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e284d657461646174614f6600010402a430040018ec2047656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720616e792070726f706f73616c206f72207265666572656e64756d2e6901205468652060507265696d61676548617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e0129040194303c456e6163746d656e74506572696f641020201c00000000000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f641020e0c400000000000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f641020e0c400000000000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f641020e0c4000000000000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400080c6a47e8d0300000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f776564ac04010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f641020840300000000000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f641020e0c400000000000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f74657320106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c73201064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f73697473201064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c697374656420106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e011d061e1c436f756e63696c011c436f756e63696c182450726f706f73616c7301002106040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406302504040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e6700010406302506040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010020100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100b9010400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01390401a804444d617850726f706f73616c576569676874282807004429353a0200a00004250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e0129061f48546563686e6963616c436f6d6d69747465650148546563686e6963616c436f6d6d6974746565182450726f706f73616c7301002d06040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406302504040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e6700010406302506040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010020100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100b9010400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01410401b804444d617850726f706f73616c576569676874282807004429353a0200a00004250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e013106204c546563686e6963616c4d656d62657273686970014c546563686e6963616c4d656d62657273686970081c4d656d6265727301003506040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01450401bc000139062220547265617375727901205472656173757279103450726f706f73616c436f756e74010020100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c7300010405203d060400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c7301004106040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e01490401c01c3050726f706f73616c426f6e6445061050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d1840000082dfe40d47000000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756d49060400044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f641020c0a8000000000000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726e450610000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c657449644d06206b696c742f7473790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c732010640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e015106231c5574696c69747900014d0401c4044c626174636865645f63616c6c735f6c696d69742010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e015506281c56657374696e67011c56657374696e67081c56657374696e6700010402005906040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100610604000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01750401c808444d696e5665737465645472616e73666572184000407a10f35a0000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657320101c0000000001650629245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e6461010104051069060400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b75700001040504d0040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e017d0401cc08344d6178696d756d57656967687428280700a0db215d0200000104290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b201032000000141d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0018204e4f54453a5101202b20446570656e64656e742070616c6c657473272062656e63686d61726b73206d696768742072657175697265206120686967686572206c696d697420666f72207468652073657474696e672e205365742061c420686967686572206c696d697420756e646572206072756e74696d652d62656e63686d61726b736020666561747572652e0179062a1450726f7879011450726f7879081c50726f7869657301010405007d064400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e747301010405008d0644000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01850401d8184050726f78794465706f7369744261736518400020f7a54b330000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f72184000f4a92b80010000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657320100a00000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6720100a00000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f7369744261736518400020f7a54b330000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72184000e8535700030000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e019d062b20507265696d6167650120507265696d6167650824537461747573466f720001040630a1060400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f7200010406ad06b106040000018d0401e40001b5062c38546970734d656d626572736869700138546970734d656d62657273686970081c4d656d626572730100b906040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01910401e80001bd062d10546970730110546970730810546970730001040530c10604000c650120546970734d6170207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e3d012054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c7265616479802067756172616e7465656420746f20626520612073656375726520686173682e1c526561736f6e7300010406303404000849012053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e610120696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e01950401ec144c4d6178696d756d526561736f6e4c656e6774682010004000000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756548446174614465706f73697450657242797465184000743ba40b00000000000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e30546970436f756e74646f776e1020201c0000000000000445012054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e3454697046696e64657273466565cd060400043501205468652070657263656e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e505469705265706f72744465706f73697442617365184000f45628fa320000000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e01d1062e204d756c746973696701204d756c746973696704244d756c7469736967730001080502d506d906040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01990401f00c2c4465706f73697442617365184000801b84ee320000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f72184000743ba40b00000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657320104000000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e01e1062f1443747970650114437479706504184374797065730001040230e50604001060204354797065732073746f726564206f6e20636861696e2e001901204974206d6170732066726f6d2061204354797065206861736820746f206974732063726561746f7220616e6420626c6f636b206e756d62657220696e207768696368206974342077617320637265617465642e01a10401f80001e9063d2c4174746573746174696f6e012c4174746573746174696f6e08304174746573746174696f6e730001040230ed0604000c78204174746573746174696f6e732073746f726564206f6e20636861696e2e00cc204974206d6170732066726f6d206120636c61696d206861736820746f207468652066756c6c206174746573746174696f6e2e5045787465726e616c4174746573746174696f6e730101080502f506ac04000ca02044656c656761746564206174746573746174696f6e732073746f726564206f6e20636861696e2e00e8204974206d6170732066726f6d20612064656c65676174696f6e20494420746f206120766563746f72206f6620636c61696d206861736865732e01a50401fc081c4465706f7369741840001cc9dd006e0000000000000000000004e420546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720616e206174746573746174696f6e2e604d617844656c6567617465644174746573746174696f6e732010e803000008090120546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732077686963682063616e206265206d61646520627954207468652073616d652064656c65676174696f6e2e01f9063e2844656c65676174696f6e012844656c65676174696f6e083c44656c65676174696f6e4e6f6465730001040230fd0604000c882044656c65676174696f6e206e6f6465732073746f726564206f6e20636861696e2e00b0204974206d6170732066726f6d2061206e6f646520494420746f20746865206e6f64652064657461696c732e5444656c65676174696f6e48696572617263686965730001040230110704000ca02044656c65676174696f6e2068696572617263686965732073746f726564206f6e20636861696e2e00dc204974206d61707320666f7220612028726f6f7429206e6f646520494420746f20746865206869657261726368792064657461696c732e01b504010901181c4465706f73697418400080c6a47e8d0300000000000000000004dc20546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720612064656c65676174696f6e2e584d61785369676e6174757265427974654c656e677468e008400000384d61785265766f636174696f6e73201005000000047c204d6178696d756d206e756d626572206f66207265766f636174696f6e732e2c4d617852656d6f76616c7320100500000004f4204d6178696d756d206e756d626572206f662072656d6f76616c732e2053686f756c642062652073616d65206173204d61785265766f636174696f6e733c4d6178506172656e74436865636b73201005000000080d01204d6178696d756d206e756d626572206f6620757077617264732074726176657273616c73206f66207468652064656c65676174696f6e20747265652066726f6d2061f0206e6f646520746f2074686520726f6f7420616e64207468757320746865206465707468206f66207468652064656c65676174696f6e20747265652e2c4d61784368696c6472656e2010e80300000c0d01204d6178696d756d206e756d626572206f6620616c6c206368696c6472656e20666f7220612064656c65676174696f6e206e6f64652e20466f7220612062696e617279fc20747265652c20746869732073686f756c6420626520747769636520746865206d6178696d756d206465707468206f662074686520747265652c20692e652e5c206032205e204d6178506172656e74436865636b73602e0115073f0c446964010c446964100c4469640001040200190704000c5820444944732073746f726564206f6e20636861696e2e00c8204974206d6170732066726f6d206120444944206964656e74696669657220746f20746865204449442064657461696c732e4053657276696365456e64706f696e747300010805023907dd0404000ca0205365727669636520656e64706f696e7473206173736f636961746564207769746820444944732e000901204974206d6170732066726f6d2028444944206964656e7469666965722c20736572766963652049442920746f2074686520736572766963652064657461696c732e44446964456e64706f696e7473436f756e7401010402002010000000000cac20436f756e746572206f66207365727669636520656e64706f696e747320666f722065616368204449442e00cc204974206d6170732066726f6d2028444944206964656e7469666965722920746f20612033322d62697420636f756e7465722e30446964426c61636b6c6973740001040200b40400141d012054686520736574206f66204449447320746861742068617665206265656e2064656c6574656420616e642063616e6e6f74207468657265666f726520626520637265617465647020616761696e20666f7220736563757269747920726561736f6e732e002101204974206d6170732066726f6d206120444944206964656e74696669657220746f206120756e6974207475706c652c20666f72207468652073616b65206f6620747261636b696e674420444944206964656e746966696572732e01d104011101382c426173654465706f736974184000008d49fd1a07000000000000000000100d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974f820746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f73697473fc20696e6372656173652062792074686520616d6f756e74206f662075736564206b65797320616e64207365727669636520656e64706f696e74732e20546865c8206465706f7369742063616e206265207265636c61696d6564207768656e20746865204449442069732064656c657465642e5853657276696365456e64706f696e744465706f736974184000b0156a084a00000000000000000000100d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368207365727669636520656e64706f696e7409012061732061206465706f73697420746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e205468651501206465706f7369742063616e206265207265636c61696d6564207768656e20746865207365727669636520656e64706f696e742069732072656d6f766564206f722074686534204449442064656c657465642e284b65794465706f736974184000dc20749701000000000000000000000805012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368206164646564206b65792061732061e4206465706f73697420746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e0c466565184000203d88792d000000000000000000000c09012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f7220656163682044494420617320612066656520746f0d0120696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206665652077696c6c206e6f74206765748820726566756e646564207768656e20746865204449442069732064656c657465642e4c4d61785075626c69634b6579735065724469642010140000000c1101204d6178696d756d206e756d626572206f6620746f74616c207075626c6963206b6579732077686963682063616e2062652073746f7265642070657220444944206b6579d8206964656e7469666965722e205468697320696e636c7564657320746865206f6e65732063757272656e746c79207573656420666f72f02061757468656e7469636174696f6e2c206b65792061677265656d656e742c206174746573746174696f6e2c20616e642064656c65676174696f6e2e584d61784e65774b657941677265656d656e744b65797320100a000000081501204d6178696d756d206e756d626572206f66206b65792061677265656d656e74206b65797320746861742063616e20626520616464656420696e2061206372656174696f6e2c206f7065726174696f6e2e604d6178546f74616c4b657941677265656d656e744b657973201013000000101101204d6178696d756d206e756d626572206f6620746f74616c206b65792061677265656d656e74206b65797320746861742063616e2062652073746f72656420666f7220613420444944207375626a6563742e00c42053686f756c642062652067726561746572207468616e20604d61784e65774b657941677265656d656e744b657973602e4c4d6178426c6f636b73547856616c696469747910202c0100000000000008ec20546865206d6178696d756d206e756d626572206f6620626c6f636b732061204449442d617574686f72697a6564206f7065726174696f6e2069739420636f6e736964657265642076616c696420616674657220697473206372656174696f6e2e644d61784e756d6265724f66536572766963657350657244696420101900000004fc20546865206d6178696d756d206e756d626572206f6620736572766963657320746861742063616e2062652073746f72656420756e6465722061204449442e484d61785365727669636549644c656e677468201032000000049020546865206d6178696d756d206c656e677468206f66206120736572766963652049442e504d617853657276696365547970654c656e67746820103200000004c820546865206d6178696d756d206c656e677468206f66206120736572766963652074797065206465736372697074696f6e2e684d61784e756d6265724f6654797065735065725365727669636520100100000004090120546865206d6178696d756d206e756d626572206f662061207479706573206465736372697074696f6e20666f722061207365727669636520656e64706f696e742e4c4d61785365727669636555726c4c656e6774682010c8000000049420546865206d6178696d756d206c656e677468206f66206120736572766963652055524c2e644d61784e756d6265724f6655726c735065725365727669636520100200000004d420546865206d6178696d756d206e756d626572206f6620612055524c7320666f722061207365727669636520656e64706f696e742e013d074024496e666c6174696f6e000000084c496e697469616c506572696f644c656e677468102048a3c800000000000c050120546865206c656e677468206f662074686520696e697469616c20706572696f6420696e2077686963682074686520636f6e7374616e74207265776172642069731101206d696e7465642e204f6e6365207468652063757272656e7420626c6f636b206578636565647320746869732c207265776172647320617265206e6f206675727468657220206973737565642e4c496e697469616c506572696f64526577617264184036f539fdaeb30200000000000000000008fc2054686520616d6f756e74206f66206e65776c792069737375656420746f6b656e732070657220626c6f636b20647572696e672074686520696e697469616c2020706572696f642e0042244469644c6f6f6b757001244469644c6f6f6b75700834436f6e6e6563746564446964730001040219014107040004a8204d617070696e672066726f6d206163636f756e74206964656e7469666965727320746f20444944732e44436f6e6e65637465644163636f756e747300010802024507b404000cbc204d617070696e672066726f6d2028444944202b206163636f756e74206964656e74696669657229202d3e2028292e0d012054686520656d707479207475706c65206973207573656420617320612073656e74696e656c2076616c756520746f2073696d706c7920696e64696361746520746865982070726573656e6365206f66206120676976656e207475706c6520696e20746865206d61702e012905011501041c4465706f736974184000c0afd69136000000000000000000000c0d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974110120746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f7369742063616e2062658c207265636c61696d6564207768656e20746865204449442069732064656c657465642e0149074324576562334e616d65730124576562334e616d65730c144f776e65720001040229014d0704000488204d6170206f66206e616d65202d3e206f776e6572736869702064657461696c732e144e616d65730001040200290104000458204d6170206f66206f776e6572202d3e206e616d652e1842616e6e6564000104022901b404000c4c204d6170206f66206e616d65202d3e2028292e00e02049662061206e616d65206b65792069732070726573656e742c20746865206e616d652069732063757272656e746c792062616e6e65642e0139050125010c1c4465706f736974184000d450a85d6b0000000000000000000004bc2054686520616d6f756e74206f66204b494c5420746f206465706f73697420746f20636c61696d2061206e616d652e344d696e4e616d654c656e677468201003000000048820546865206d696e20656e636f646564206c656e677468206f662061206e616d652e344d61784e616d654c656e677468201020000000048820546865206d617820656e636f646564206c656e677468206f662061206e616d652e01510744445075626c696343726564656e7469616c7301445075626c696343726564656e7469616c73082c43726564656e7469616c730001080502d101550704000cc020546865206d6170206f66207075626c69632063726564656e7469616c7320616c72656164792061747465737465642ef0204974206d6170732066726f6d206120287375626a656374206964202b2063726564656e7469616c20696429202d3e20746865206372656174696f6e6c2064657461696c73206f66207468652063726564656e7469616c2e4843726564656e7469616c5375626a656374730001040230350104001025012041207265766572736520696e646578206d617070696e672066726f6d2063726564656e7469616c20494420746f20746865207375626a656374207468652063726564656e7469616c3c207761732069737375656420746f2e001901204974206974207573656420746f20706572666f726d20656666696369656e74206c6f6f6b7570206f662063726564656e7469616c7320676976656e2074686569722049442e013d050131010c1c4465706f7369741840005c6a51fc45000000000000000000000411012054686520616d6f756e74206f6620746f6b656e7320746f2072657365727665207768656e20617474657374696e672061207075626c69632063726564656e7469616c2e584d6178456e636f646564436c61696d734c656e6774682010a0860100040d0120546865206d6178696d756d206c656e67746820696e206279746573206f662074686520656e636f64656420636c61696d73206f6620612063726564656e7469616c2e484d61785375626a65637449644c656e67746820100c01000008e820546865206d6178696d756d206c656e67746820696e206279746573206f6620746865207261772063726564656e7469616c207375626a65637430206964656e7469666965722e01590745244d6967726174696f6e01244d6967726174696f6e04304d696772617465644b6579730001040230b4040000014d0501a10104584d61784d6967726174696f6e7350657250616c6c657420106400000004b420546865206d617820616d6f756e74206f6e206d6967726174696f6e7320666f7220656163682070616c6c6574015d07463c50617261636861696e53797374656d013c50617261636861696e53797374656d545450656e64696e6756616c69646174696f6e436f64650100340400107d0120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f206265206170706c6965642e00090220417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f766572777269746520746865205b603a636f6465605d5b73705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f44455dad012077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f63657373207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e444e657756616c69646174696f6e436f64650000340400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000590504000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f64650100ac040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d6265720100201000000000041d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e60557067726164655265737472696374696f6e5369676e616c0100610704001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f6600006105040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000690704001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e00007d070400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d7163486561640100810780000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d7163486561647301008507040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301002010000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01002010000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d657373616765730100910704000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d657373616765730100e10204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d657373616765730100e102040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e84416e6e6f756e63656448726d704d6573736167657350657243616e646964617465010020100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000280400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000280400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e44417574686f72697a65645570677261646500009907040004b820546865206e65787420617574686f72697a656420757067726164652c206966207468657265206973206f6e652e60437573746f6d56616c69646174696f6e486561644461746100003404000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00110120536565206050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f646174616020666f72206d6f726520696e666f726d6174696f6e2e01510501d90100019d07503450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100e501106400000000018505000000512458636d705175657565012458636d7051756575652844496e626f756e6458636d705374617475730100a1070400049420537461747573206f662074686520696e626f756e642058434d50206368616e6e656c732e4c496e626f756e6458636d704d657373616765730101080205b90734040004190120496e626f756e64206167677265676174652058434d50206d657373616765732e2049742063616e206f6e6c79206265206f6e6520706572205061726149642f626c6f636b2e484f7574626f756e6458636d705374617475730100bd070400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205c90734040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402e50134040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e6669670100cd0774020000000500000001000000821a06000008000700c817a804020004000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e284f7665727765696768740001040510d107040010050120546865206d657373616765732074686174206578636565646564206d617820696e646976696475616c206d65737361676520776569676874206275646765742e003901205468657365206d657373616765207374617920696e20746869732073746f72616765206d617020756e74696c207468657920617265206d616e75616c6c79206469737061746368656420766961582060736572766963655f6f766572776569676874602e50436f756e746572466f724f766572776569676874010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c4f766572776569676874436f756e7401001020000000000000000008690120546865206e756d626572206f66206f766572776569676874206d657373616765732065766572207265636f7264656420696e20604f766572776569676874602e20416c736f20646f75626c657320617320746865206e6578748420617661696c61626c652066726565206f76657277656967687420696e6465782e38517565756553757370656e6465640100ac04000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e01890501dd010001d507522c506f6c6b61646f7458636d012c506f6c6b61646f7458636d30305175657279436f756e746572010010200000000000000000048820546865206c617465737420617661696c61626c6520717565727920696e6465782e1c517565726965730001040210d9070400045420546865206f6e676f696e6720717565726965732e28417373657454726170730101040630201000000000106820546865206578697374696e672061737365742074726170732e007501204b65792069732074686520626c616b6532203235362068617368206f6620286f726967696e2c2076657273696f6e656420604d756c7469417373657473602920706169722e2056616c756520697320746865206e756d626572206f661d012074696d65732074686973207061697220686173206265656e20747261707065642028757375616c6c79206a75737420312069662069742065786973747320617420616c6c292e385361666558636d56657273696f6e00002004000861012044656661756c742076657273696f6e20746f20656e636f64652058434d207768656e206c61746573742076657273696f6e206f662064657374696e6174696f6e20697320756e6b6e6f776e2e20496620604e6f6e65602c3d01207468656e207468652064657374696e6174696f6e732077686f73652058434d2076657273696f6e20697320756e6b6e6f776e2061726520636f6e7369646572656420756e726561636861626c652e40537570706f7274656456657273696f6e0001080502ed0720040004f020546865204c61746573742076657273696f6e732074686174207765206b6e6f7720766172696f7573206c6f636174696f6e7320737570706f72742e4056657273696f6e4e6f746966696572730001080502ed0710040004050120416c6c206c6f636174696f6e7320746861742077652068617665207265717565737465642076657273696f6e206e6f74696669636174696f6e732066726f6d2e5056657273696f6e4e6f74696679546172676574730001080502ed07f10704000871012054686520746172676574206c6f636174696f6e73207468617420617265207375627363726962656420746f206f75722076657273696f6e206368616e6765732c2061732077656c6c20617320746865206d6f737420726563656e7494206f66206f75722076657273696f6e7320776520696e666f726d6564207468656d206f662e5456657273696f6e446973636f7665727951756575650100f50704000c65012044657374696e6174696f6e732077686f7365206c61746573742058434d2076657273696f6e20776520776f756c64206c696b6520746f206b6e6f772e204475706c696361746573206e6f7420616c6c6f7765642c20616e6471012074686520607533326020636f756e74657220697320746865206e756d626572206f662074696d6573207468617420612073656e6420746f207468652064657374696e6174696f6e20686173206265656e20617474656d707465642c8c20776869636820697320757365642061732061207072696f726974697a6174696f6e2e4043757272656e744d6967726174696f6e000001080400049c205468652063757272656e74206d6967726174696f6e27732073746167652c20696620616e792e5452656d6f74654c6f636b656446756e6769626c657300010c05020209081108040004f02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e20612072656d6f746520636861696e2e3c4c6f636b656446756e6769626c657300010402002108040004e02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e207468697320636861696e2e5458636d457865637574696f6e53757370656e6465640100ac040004b420476c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e018d0501e90100012d08532843756d756c757358636d000001bd02000131085420446d7051756575650120446d7051756575651434436f6e66696775726174696f6e01003508280700e40b540202000400044c2054686520636f6e66696775726174696f6e2e2450616765496e646578010039084000000000000000000000000000000000044020546865207061676520696e6465782e14506167657301010402203d0804000444205468652071756575652070616765732e284f766572776569676874000104021041080400046420546865206f766572776569676874206d657373616765732e50436f756e746572466f724f766572776569676874010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617001e10501c10200014508554908042048436865636b4e6f6e5a65726f53656e6465725108b440436865636b5370656356657273696f6e55082038436865636b547856657273696f6e59082030436865636b47656e657369735d083038436865636b4d6f7274616c69747961083028436865636b4e6f6e63656908b42c436865636b5765696768746d08b4604368617267655472616e73616374696f6e5061796d656e747108b4a901"} \ No newline at end of file diff --git a/packages/augment-api/package.json b/packages/augment-api/package.json deleted file mode 100644 index ea14260eb..000000000 --- a/packages/augment-api/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "@kiltprotocol/augment-api", - "version": "0.34.0", - "description": "", - "types": "./lib/index.d.ts", - "main": "./index.cjs", - "exports": { - ".": { - "types": "./lib/index.d.ts", - "import": "./index.mjs", - "require": "./index.cjs" - }, - "./extraDefs": { - "types": "./lib/interfaces/extraDefs/index.d.ts" - } - }, - "files": [ - "lib/**/*", - "index.mjs", - "index.cjs", - "extraDefs/*" - ], - "scripts": { - "clean": "rimraf ./lib", - "build": "yarn clean && yarn build:ts", - "build:types": "yarn generate:defs && yarn generate:meta && yarn build:fixes", - "build:fixes": "node scripts/fixTypes.mjs", - "build:ts": "tsc -p tsconfig.build.json", - "generate:defs": "tsx ../../node_modules/.bin/polkadot-types-from-defs --package @kiltprotocol/augment-api --input ./src/interfaces --endpoint ./metadata/spiritnet.json", - "generate:meta": "tsx ../../node_modules/.bin/polkadot-types-from-chain --package @kiltprotocol/augment-api --endpoint ./metadata/spiritnet.json --output ./src/interfaces --strict", - "update-metadata": "node ./scripts/fetchMetadata.cjs -o './metadata/spiritnet.json' -e 'wss://spiritnet.kilt.io/'" - }, - "repository": "github:kiltprotocol/sdk-js", - "engines": { - "node": ">=18.0" - }, - "author": "", - "license": "BSD-4-Clause", - "bugs": "https://github.com/KILTprotocol/sdk-js/issues", - "homepage": "https://github.com/KILTprotocol/sdk-js#readme", - "devDependencies": { - "@polkadot/api": "^10.7.3", - "@polkadot/typegen": "^10.7.3", - "@types/node": "^16.11.7", - "glob": "^7.1.1", - "rimraf": "^3.0.2", - "tsx": "^4.7.0", - "typescript": "^4.8.3", - "yargs": "^16.2.0" - }, - "dependencies": { - "@kiltprotocol/type-definitions": "workspace:*", - "@polkadot/api-base": "^10.0.0", - "@polkadot/rpc-core": "^10.0.0", - "@polkadot/types": "^10.0.0", - "@polkadot/types-codec": "^10.0.0" - } -} diff --git a/packages/augment-api/scripts/fetchMetadata.cjs b/packages/augment-api/scripts/fetchMetadata.cjs deleted file mode 100644 index 9e4b93292..000000000 --- a/packages/augment-api/scripts/fetchMetadata.cjs +++ /dev/null @@ -1,82 +0,0 @@ -/* eslint-disable */ - -const { HttpProvider, WsProvider } = require('@polkadot/api') -const yargs = require('yargs') -const fs = require('fs') - -const { argv } = yargs - .option('endpoint', { - alias: 'e', - description: 'http or ws endpoint from which to fetch metadata', - type: 'string', - demandOption: true, - requiresArg: true, - coerce: (val) => (Array.isArray(val) ? val.pop() : val), - }) - .option('outfile', { - alias: 'o', - description: 'path to output file', - type: 'string', - demandOption: true, - requiresArg: true, - }) - .help() - .alias('help', 'h') - -let provider - -switch (true) { - case argv.endpoint.startsWith('http'): - provider = new HttpProvider(argv.endpoint) - break - case argv.endpoint.startsWith('ws'): - provider = new WsProvider(argv.endpoint, false) - break - default: - throw new Error( - `Can only handle ws/wss and http/https endpoints, received "${argv.endpoint}"` - ) -} - -let exitCode - -async function fetch() { - await provider.connect() - await provider.isReady - const result = await provider.send('state_getMetadata') - - const metadata = JSON.stringify({ result }) - - const outfile = Array.isArray(argv.outfile) ? argv.outfile : [argv.outfile] - outfile.forEach((file) => { - console.log( - `writing metadata to ${file}:\n${metadata.substring(0, 100)}...` - ) - fs.writeFileSync(file, metadata) - }) - console.log('success') - exitCode = 0 -} - -const timeout = new Promise((_, reject) => { - setTimeout(() => { - exitCode = exitCode || 124 - reject(new Error('Timeout waiting for metadata fetch')) - }, 10000) -}) - -;(async () => { - try { - await Promise.race([fetch(), timeout]) - } catch (error) { - console.error(`updating metadata failed with ${error}`) - exitCode = exitCode || 1 - } finally { - console.log('disconnecting...') - provider.disconnect().then(process.exit(exitCode)) - setTimeout(() => { - console.error(`timeout while waiting for disconnect`) - process.exit(exitCode) - }, 10000) - } -})() diff --git a/packages/augment-api/scripts/fixTypes.mjs b/packages/augment-api/scripts/fixTypes.mjs deleted file mode 100755 index 2d8dc4599..000000000 --- a/packages/augment-api/scripts/fixTypes.mjs +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) 2018-2024, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import { readFile, writeFile } from 'fs/promises' -import glob from 'glob' -;(async () => { - const path = 'src/interfaces/augment-api-tx.ts' - const source = await readFile(path, 'utf8') - const fixed = source.replace(/\b(Ed25519|Sr25519|X25519|Ecdsa)\b/g, (match) => - match.toLowerCase() - ) - await writeFile(path, fixed, 'utf8') -})() - -const regex = /^(ex|im)port (.+ from )?'\.[^\.;']+(?=';$)/gm -glob('./src/**/*.ts', async (err, matches) => { - if (err) throw err - matches.forEach(async (path) => { - const source = await readFile(path, 'utf8') - let matched = false - const fixed = source.replace(regex, (match) => { - matched = true - return match + '.js' - }) - if (!matched) return - console.log(`adding .js extention to import in ${path}`) - await writeFile(path, fixed, 'utf8') - }) -}) diff --git a/packages/augment-api/src/index.ts b/packages/augment-api/src/index.ts deleted file mode 100644 index c19fe29fa..000000000 --- a/packages/augment-api/src/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright (c) 2018-2024, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import './interfaces/augment-api.js' -import './interfaces/augment-types.js' -import './interfaces/registry.js' -import './interfaces/types-lookup.js' - -export * from './types.js' diff --git a/packages/augment-api/src/interfaces/augment-api-consts.ts b/packages/augment-api/src/interfaces/augment-api-consts.ts deleted file mode 100644 index 88b816900..000000000 --- a/packages/augment-api/src/interfaces/augment-api-consts.ts +++ /dev/null @@ -1,591 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import '@polkadot/api-base/types/consts'; - -import type { ApiTypes, AugmentedConst } from '@polkadot/api-base/types'; -import type { Option, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; -import type { Percent, Permill, Perquintill } from '@polkadot/types/interfaces/runtime'; -import type { FrameSupportPalletId, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight } from '@polkadot/types/lookup'; - -export type __AugmentedConst = AugmentedConst; - -declare module '@polkadot/api-base/types/consts' { - interface AugmentedConsts { - attestation: { - /** - * The deposit that is required for storing an attestation. - **/ - deposit: u128 & AugmentedConst; - /** - * The maximum number of delegated attestations which can be made by - * the same delegation. - **/ - maxDelegatedAttestations: u32 & AugmentedConst; - }; - balances: { - /** - * The minimum amount required to keep an account open. MUST BE GREATER THAN ZERO! - * - * If you *really* need it to be zero, you can enable the feature `insecure_zero_ed` for - * this pallet. However, you do so at your own risk: this will open up a major DoS vector. - * In case you have multiple sources of provider references, you may also get unexpected - * behaviour if you set this to zero. - * - * Bottom line: Do yourself a favour and make it at least one! - **/ - existentialDeposit: u128 & AugmentedConst; - /** - * The maximum number of individual freeze locks that can exist on an account at any time. - **/ - maxFreezes: u32 & AugmentedConst; - /** - * The maximum number of holds that can exist on an account at any time. - **/ - maxHolds: u32 & AugmentedConst; - /** - * The maximum number of locks that should exist on an account. - * Not strictly enforced, but used for weight estimation. - **/ - maxLocks: u32 & AugmentedConst; - /** - * The maximum number of named reserves that can exist on an account. - **/ - maxReserves: u32 & AugmentedConst; - }; - council: { - /** - * The maximum weight of a dispatch call that can be proposed and executed. - **/ - maxProposalWeight: SpWeightsWeightV2Weight & AugmentedConst; - }; - delegation: { - /** - * The deposit that is required for storing a delegation. - **/ - deposit: u128 & AugmentedConst; - /** - * Maximum number of all children for a delegation node. For a binary - * tree, this should be twice the maximum depth of the tree, i.e. - * `2 ^ MaxParentChecks`. - **/ - maxChildren: u32 & AugmentedConst; - /** - * Maximum number of upwards traversals of the delegation tree from a - * node to the root and thus the depth of the delegation tree. - **/ - maxParentChecks: u32 & AugmentedConst; - /** - * Maximum number of removals. Should be same as MaxRevocations - **/ - maxRemovals: u32 & AugmentedConst; - /** - * Maximum number of revocations. - **/ - maxRevocations: u32 & AugmentedConst; - maxSignatureByteLength: u16 & AugmentedConst; - }; - democracy: { - /** - * Period in blocks where an external proposal may not be re-submitted after being vetoed. - **/ - cooloffPeriod: u64 & AugmentedConst; - /** - * The period between a proposal being approved and enacted. - * - * It should generally be a little more than the unstake period to ensure that - * voting stakers have an opportunity to remove themselves from the system in the case - * where they are on the losing side of a vote. - **/ - enactmentPeriod: u64 & AugmentedConst; - /** - * Minimum voting period allowed for a fast-track referendum. - **/ - fastTrackVotingPeriod: u64 & AugmentedConst; - /** - * Indicator for whether an emergency origin is even allowed to happen. Some chains may - * want to set this permanently to `false`, others may want to condition it on things such - * as an upgrade having happened recently. - **/ - instantAllowed: bool & AugmentedConst; - /** - * How often (in blocks) new public referenda are launched. - **/ - launchPeriod: u64 & AugmentedConst; - /** - * The maximum number of items which can be blacklisted. - **/ - maxBlacklisted: u32 & AugmentedConst; - /** - * The maximum number of deposits a public proposal may have at any time. - **/ - maxDeposits: u32 & AugmentedConst; - /** - * The maximum number of public proposals that can exist at any time. - **/ - maxProposals: u32 & AugmentedConst; - /** - * The maximum number of votes for an account. - * - * Also used to compute weight, an overly big value can - * lead to extrinsic with very big weight: see `delegate` for instance. - **/ - maxVotes: u32 & AugmentedConst; - /** - * The minimum amount to be used as a deposit for a public referendum proposal. - **/ - minimumDeposit: u128 & AugmentedConst; - /** - * The minimum period of vote locking. - * - * It should be no shorter than enactment period to ensure that in the case of an approval, - * those successful voters are locked into the consequences that their votes entail. - **/ - voteLockingPeriod: u64 & AugmentedConst; - /** - * How often (in blocks) to check for new votes. - **/ - votingPeriod: u64 & AugmentedConst; - }; - did: { - /** - * The amount of balance that will be taken for each DID as a deposit - * to incentivise fair use of the on chain storage. The deposits - * increase by the amount of used keys and service endpoints. The - * deposit can be reclaimed when the DID is deleted. - **/ - baseDeposit: u128 & AugmentedConst; - /** - * The amount of balance that will be taken for each DID as a fee to - * incentivise fair use of the on chain storage. The fee will not get - * refunded when the DID is deleted. - **/ - fee: u128 & AugmentedConst; - /** - * The amount of balance that will be taken for each added key as a - * deposit to incentivise fair use of the on chain storage. - **/ - keyDeposit: u128 & AugmentedConst; - /** - * The maximum number of blocks a DID-authorized operation is - * considered valid after its creation. - **/ - maxBlocksTxValidity: u64 & AugmentedConst; - /** - * Maximum number of key agreement keys that can be added in a creation - * operation. - **/ - maxNewKeyAgreementKeys: u32 & AugmentedConst; - /** - * The maximum number of services that can be stored under a DID. - **/ - maxNumberOfServicesPerDid: u32 & AugmentedConst; - /** - * The maximum number of a types description for a service endpoint. - **/ - maxNumberOfTypesPerService: u32 & AugmentedConst; - /** - * The maximum number of a URLs for a service endpoint. - **/ - maxNumberOfUrlsPerService: u32 & AugmentedConst; - /** - * Maximum number of total public keys which can be stored per DID key - * identifier. This includes the ones currently used for - * authentication, key agreement, attestation, and delegation. - **/ - maxPublicKeysPerDid: u32 & AugmentedConst; - /** - * The maximum length of a service ID. - **/ - maxServiceIdLength: u32 & AugmentedConst; - /** - * The maximum length of a service type description. - **/ - maxServiceTypeLength: u32 & AugmentedConst; - /** - * The maximum length of a service URL. - **/ - maxServiceUrlLength: u32 & AugmentedConst; - /** - * Maximum number of total key agreement keys that can be stored for a - * DID subject. - * - * Should be greater than `MaxNewKeyAgreementKeys`. - **/ - maxTotalKeyAgreementKeys: u32 & AugmentedConst; - /** - * The amount of balance that will be taken for each service endpoint - * as a deposit to incentivise fair use of the on chain storage. The - * deposit can be reclaimed when the service endpoint is removed or the - * DID deleted. - **/ - serviceEndpointDeposit: u128 & AugmentedConst; - }; - didLookup: { - /** - * The amount of balance that will be taken for each DID as a deposit - * to incentivise fair use of the on chain storage. The deposit can be - * reclaimed when the DID is deleted. - **/ - deposit: u128 & AugmentedConst; - }; - indices: { - /** - * The deposit needed for reserving an index. - **/ - deposit: u128 & AugmentedConst; - }; - inflation: { - /** - * The length of the initial period in which the constant reward is - * minted. Once the current block exceeds this, rewards are no further - * issued. - **/ - initialPeriodLength: u64 & AugmentedConst; - /** - * The amount of newly issued tokens per block during the initial - * period. - **/ - initialPeriodReward: u128 & AugmentedConst; - }; - migration: { - /** - * The max amount on migrations for each pallet - **/ - maxMigrationsPerPallet: u32 & AugmentedConst; - }; - multisig: { - /** - * The base amount of currency needed to reserve for creating a multisig execution or to - * store a dispatch call for later. - * - * This is held for an additional storage item whose value size is - * `4 + sizeof((BlockNumber, Balance, AccountId))` bytes and whose key size is - * `32 + sizeof(AccountId)` bytes. - **/ - depositBase: u128 & AugmentedConst; - /** - * The amount of currency needed per unit threshold when creating a multisig execution. - * - * This is held for adding 32 bytes more into a pre-existing storage value. - **/ - depositFactor: u128 & AugmentedConst; - /** - * The maximum amount of signatories allowed in the multisig. - **/ - maxSignatories: u32 & AugmentedConst; - }; - parachainStaking: { - /** - * Default number of blocks validation rounds last, as set in the - * genesis configuration. - **/ - defaultBlocksPerRound: u64 & AugmentedConst; - /** - * Number of rounds a collator has to stay active after submitting a - * request to leave the set of collator candidates. - **/ - exitQueueDelay: u32 & AugmentedConst; - /** - * Maximum number of delegations which can be made within the same - * round. - * - * NOTE: To prevent re-delegation-reward attacks, we should keep this - * to be one. - **/ - maxDelegationsPerRound: u32 & AugmentedConst; - /** - * Maximum number of delegators a single collator can have. - **/ - maxDelegatorsPerCollator: u32 & AugmentedConst; - /** - * Maximum size of the top candidates set. - **/ - maxTopCandidates: u32 & AugmentedConst; - /** - * Max number of concurrent active unstaking requests before - * unlocking. - * - * NOTE: To protect against irremovability of a candidate or delegator, - * we only allow for MaxUnstakeRequests - 1 many manual unstake - * requests. The last one serves as a placeholder for the cases of - * calling either `kick_delegator`, force_remove_candidate` or - * `execute_leave_candidates`. Otherwise, a user could max out their - * unstake requests and prevent themselves from being kicked from the - * set of candidates/delegators until they unlock their funds. - **/ - maxUnstakeRequests: u32 & AugmentedConst; - /** - * Minimum number of blocks validation rounds can last. - **/ - minBlocksPerRound: u64 & AugmentedConst; - /** - * Minimum stake required for any account to be added to the set of - * candidates. - **/ - minCollatorCandidateStake: u128 & AugmentedConst; - /** - * Minimum number of collators selected from the set of candidates at - * every validation round. - **/ - minCollators: u32 & AugmentedConst; - /** - * Minimum stake required for any account to be elected as validator - * for a round. - **/ - minCollatorStake: u128 & AugmentedConst; - /** - * Minimum stake required for any account to become a delegator. - **/ - minDelegatorStake: u128 & AugmentedConst; - /** - * Minimum number of collators which cannot leave the network if there - * are no others. - **/ - minRequiredCollators: u32 & AugmentedConst; - /** - * The rate in percent for the network rewards which are based on the - * maximum number of collators and the maximum amount a collator can - * stake. - **/ - networkRewardRate: Perquintill & AugmentedConst; - /** - * The starting block number for the network rewards. Once the current - * block number exceeds this start, the beneficiary will receive the - * configured reward in each block. - **/ - networkRewardStart: u64 & AugmentedConst; - /** - * Number of blocks for which unstaked balance will still be locked - * before it can be unlocked by actively calling the extrinsic - * `unlock_unstaked`. - **/ - stakeDuration: u64 & AugmentedConst; - }; - proxy: { - /** - * The base amount of currency needed to reserve for creating an announcement. - * - * This is held when a new storage item holding a `Balance` is created (typically 16 - * bytes). - **/ - announcementDepositBase: u128 & AugmentedConst; - /** - * The amount of currency needed per announcement made. - * - * This is held for adding an `AccountId`, `Hash` and `BlockNumber` (typically 68 bytes) - * into a pre-existing storage value. - **/ - announcementDepositFactor: u128 & AugmentedConst; - /** - * The maximum amount of time-delayed announcements that are allowed to be pending. - **/ - maxPending: u32 & AugmentedConst; - /** - * The maximum amount of proxies allowed for a single account. - **/ - maxProxies: u32 & AugmentedConst; - /** - * The base amount of currency needed to reserve for creating a proxy. - * - * This is held for an additional storage item whose value size is - * `sizeof(Balance)` bytes and whose key size is `sizeof(AccountId)` bytes. - **/ - proxyDepositBase: u128 & AugmentedConst; - /** - * The amount of currency needed per proxy added. - * - * This is held for adding 32 bytes plus an instance of `ProxyType` more into a - * pre-existing storage value. Thus, when configuring `ProxyDepositFactor` one should take - * into account `32 + proxy_type.encode().len()` bytes of data. - **/ - proxyDepositFactor: u128 & AugmentedConst; - }; - publicCredentials: { - /** - * The amount of tokens to reserve when attesting a public credential. - **/ - deposit: u128 & AugmentedConst; - /** - * The maximum length in bytes of the encoded claims of a credential. - **/ - maxEncodedClaimsLength: u32 & AugmentedConst; - /** - * The maximum length in bytes of the raw credential subject - * identifier. - **/ - maxSubjectIdLength: u32 & AugmentedConst; - }; - scheduler: { - /** - * The maximum weight that may be scheduled per block for any dispatchables. - **/ - maximumWeight: SpWeightsWeightV2Weight & AugmentedConst; - /** - * The maximum number of scheduled calls in the queue for a single block. - * - * NOTE: - * + Dependent pallets' benchmarks might require a higher limit for the setting. Set a - * higher limit under `runtime-benchmarks` feature. - **/ - maxScheduledPerBlock: u32 & AugmentedConst; - }; - system: { - /** - * Maximum number of block number to block hash mappings to keep (oldest pruned first). - **/ - blockHashCount: u64 & AugmentedConst; - /** - * The maximum length of a block (in bytes). - **/ - blockLength: FrameSystemLimitsBlockLength & AugmentedConst; - /** - * Block & extrinsics weights: base values and limits. - **/ - blockWeights: FrameSystemLimitsBlockWeights & AugmentedConst; - /** - * The weight of runtime database operations the runtime can invoke. - **/ - dbWeight: SpWeightsRuntimeDbWeight & AugmentedConst; - /** - * The designated SS58 prefix of this chain. - * - * This replaces the "ss58Format" property declared in the chain spec. Reason is - * that the runtime should know about the prefix in order to make use of it as - * an identifier of the chain. - **/ - ss58Prefix: u16 & AugmentedConst; - /** - * Get the chain's current version. - **/ - version: SpVersionRuntimeVersion & AugmentedConst; - }; - technicalCommittee: { - /** - * The maximum weight of a dispatch call that can be proposed and executed. - **/ - maxProposalWeight: SpWeightsWeightV2Weight & AugmentedConst; - }; - timestamp: { - /** - * The minimum period between blocks. Beware that this is different to the *expected* - * period that the block production apparatus provides. Your chosen consensus system will - * generally work with this to determine a sensible block time. e.g. For Aura, it will be - * double this period on default settings. - **/ - minimumPeriod: u64 & AugmentedConst; - }; - tips: { - /** - * The amount held on deposit per byte within the tip report reason or bounty description. - **/ - dataDepositPerByte: u128 & AugmentedConst; - /** - * Maximum acceptable reason length. - * - * Benchmarks depend on this value, be sure to update weights file when changing this value - **/ - maximumReasonLength: u32 & AugmentedConst; - /** - * The period for which a tip remains open after is has achieved threshold tippers. - **/ - tipCountdown: u64 & AugmentedConst; - /** - * The percent of the final tip which goes to the original reporter of the tip. - **/ - tipFindersFee: Percent & AugmentedConst; - /** - * The amount held on deposit for placing a tip report. - **/ - tipReportDepositBase: u128 & AugmentedConst; - }; - transactionPayment: { - /** - * A fee mulitplier for `Operational` extrinsics to compute "virtual tip" to boost their - * `priority` - * - * This value is multipled by the `final_fee` to obtain a "virtual tip" that is later - * added to a tip component in regular `priority` calculations. - * It means that a `Normal` transaction can front-run a similarly-sized `Operational` - * extrinsic (with no tip), by including a tip value greater than the virtual tip. - * - * ```rust,ignore - * // For `Normal` - * let priority = priority_calc(tip); - * - * // For `Operational` - * let virtual_tip = (inclusion_fee + tip) * OperationalFeeMultiplier; - * let priority = priority_calc(tip + virtual_tip); - * ``` - * - * Note that since we use `final_fee` the multiplier applies also to the regular `tip` - * sent with the transaction. So, not only does the transaction get a priority bump based - * on the `inclusion_fee`, but we also amplify the impact of tips applied to `Operational` - * transactions. - **/ - operationalFeeMultiplier: u8 & AugmentedConst; - }; - treasury: { - /** - * Percentage of spare funds (if any) that are burnt per spend period. - **/ - burn: Permill & AugmentedConst; - /** - * The maximum number of approvals that can wait in the spending queue. - * - * NOTE: This parameter is also used within the Bounties Pallet extension if enabled. - **/ - maxApprovals: u32 & AugmentedConst; - /** - * The treasury's pallet id, used for deriving its sovereign account ID. - **/ - palletId: FrameSupportPalletId & AugmentedConst; - /** - * Fraction of a proposal's value that should be bonded in order to place the proposal. - * An accepted proposal gets these back. A rejected proposal does not. - **/ - proposalBond: Permill & AugmentedConst; - /** - * Maximum amount of funds that should be placed in a deposit for making a proposal. - **/ - proposalBondMaximum: Option & AugmentedConst; - /** - * Minimum amount of funds that should be placed in a deposit for making a proposal. - **/ - proposalBondMinimum: u128 & AugmentedConst; - /** - * Period between successive spends. - **/ - spendPeriod: u64 & AugmentedConst; - }; - utility: { - /** - * The limit on the number of batched calls. - **/ - batchedCallsLimit: u32 & AugmentedConst; - }; - vesting: { - maxVestingSchedules: u32 & AugmentedConst; - /** - * The minimum amount transferred to call `vested_transfer`. - **/ - minVestedTransfer: u128 & AugmentedConst; - }; - web3Names: { - /** - * The amount of KILT to deposit to claim a name. - **/ - deposit: u128 & AugmentedConst; - /** - * The max encoded length of a name. - **/ - maxNameLength: u32 & AugmentedConst; - /** - * The min encoded length of a name. - **/ - minNameLength: u32 & AugmentedConst; - }; - } // AugmentedConsts -} // declare module diff --git a/packages/augment-api/src/interfaces/augment-api-errors.ts b/packages/augment-api/src/interfaces/augment-api-errors.ts deleted file mode 100644 index 1e5e6e5ac..000000000 --- a/packages/augment-api/src/interfaces/augment-api-errors.ts +++ /dev/null @@ -1,1238 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import '@polkadot/api-base/types/errors'; - -import type { ApiTypes, AugmentedError } from '@polkadot/api-base/types'; - -export type __AugmentedError = AugmentedError; - -declare module '@polkadot/api-base/types/errors' { - interface AugmentedErrors { - attestation: { - /** - * There is already an attestation with the same claim hash stored on - * chain. - **/ - AlreadyAttested: AugmentedError; - /** - * The attestation has already been revoked. - **/ - AlreadyRevoked: AugmentedError; - /** - * The attestation CType does not match the CType specified in the - * delegation hierarchy root. - **/ - CTypeMismatch: AugmentedError; - /** - * The maximum number of delegated attestations has already been - * reached for the corresponding delegation id such that another one - * cannot be added. - **/ - MaxDelegatedAttestationsExceeded: AugmentedError; - /** - * The call origin is not authorized to change the attestation. - **/ - NotAuthorized: AugmentedError; - /** - * No attestation on chain matching the claim hash. - **/ - NotFound: AugmentedError; - }; - balances: { - /** - * Beneficiary account must pre-exist. - **/ - DeadAccount: AugmentedError; - /** - * Value too low to create account due to existential deposit. - **/ - ExistentialDeposit: AugmentedError; - /** - * A vesting schedule already exists for this account. - **/ - ExistingVestingSchedule: AugmentedError; - /** - * Transfer/payment would kill account. - **/ - Expendability: AugmentedError; - /** - * Balance too low to send value. - **/ - InsufficientBalance: AugmentedError; - /** - * Account liquidity restrictions prevent withdrawal. - **/ - LiquidityRestrictions: AugmentedError; - /** - * Number of freezes exceed `MaxFreezes`. - **/ - TooManyFreezes: AugmentedError; - /** - * Number of holds exceed `MaxHolds`. - **/ - TooManyHolds: AugmentedError; - /** - * Number of named reserves exceed `MaxReserves`. - **/ - TooManyReserves: AugmentedError; - /** - * Vesting balance too high to send value. - **/ - VestingBalance: AugmentedError; - }; - council: { - /** - * Members are already initialized! - **/ - AlreadyInitialized: AugmentedError; - /** - * Duplicate proposals not allowed - **/ - DuplicateProposal: AugmentedError; - /** - * Duplicate vote ignored - **/ - DuplicateVote: AugmentedError; - /** - * Account is not a member - **/ - NotMember: AugmentedError; - /** - * Proposal must exist - **/ - ProposalMissing: AugmentedError; - /** - * The close call was made too early, before the end of the voting. - **/ - TooEarly: AugmentedError; - /** - * There can only be a maximum of `MaxProposals` active proposals. - **/ - TooManyProposals: AugmentedError; - /** - * Mismatched index - **/ - WrongIndex: AugmentedError; - /** - * The given length bound for the proposal was too low. - **/ - WrongProposalLength: AugmentedError; - /** - * The given weight bound for the proposal was too low. - **/ - WrongProposalWeight: AugmentedError; - }; - ctype: { - /** - * The CType already exists. - **/ - AlreadyExists: AugmentedError; - /** - * There is no CType with the given hash. - **/ - NotFound: AugmentedError; - /** - * The paying account was unable to pay the fees for creating a ctype. - **/ - UnableToPayFees: AugmentedError; - }; - cumulusXcm: { - }; - delegation: { - /** - * The operation wasn't allowed because of insufficient rights. - **/ - AccessDenied: AugmentedError; - /** - * No delegate with the given ID stored on chain. - **/ - DelegateNotFound: AugmentedError; - /** - * There is already a delegation node with the same ID stored on chain. - **/ - DelegationAlreadyExists: AugmentedError; - /** - * No delegation with the given ID stored on chain. - **/ - DelegationNotFound: AugmentedError; - /** - * Max number of removals for delegation nodes has been reached for the - * operation. - **/ - ExceededRemovalBounds: AugmentedError; - /** - * Max number of revocations for delegation nodes has been reached for - * the operation. - **/ - ExceededRevocationBounds: AugmentedError; - /** - * There is already a hierarchy with the same ID stored on chain. - **/ - HierarchyAlreadyExists: AugmentedError; - /** - * No hierarchy with the given ID stored on chain. - **/ - HierarchyNotFound: AugmentedError; - /** - * An error that is not supposed to take place, yet it happened. - **/ - Internal: AugmentedError; - /** - * The delegate's signature for the delegation creation operation is - * invalid. - **/ - InvalidDelegateSignature: AugmentedError; - /** - * The max number of all children has been reached for the - * corresponding delegation node. - **/ - MaxChildrenExceeded: AugmentedError; - /** - * The max number of parent checks exceeds the limit for the pallet. - **/ - MaxParentChecksTooLarge: AugmentedError; - /** - * The max number of removals exceeds the limit for the pallet. - **/ - MaxRemovalsTooLarge: AugmentedError; - /** - * The max number of revocation exceeds the limit for the pallet. - **/ - MaxRevocationsTooLarge: AugmentedError; - /** - * Max number of nodes checked without verifying the given condition. - **/ - MaxSearchDepthReached: AugmentedError; - /** - * The delegation creator is not allowed to write the delegation - * because they are not the owner of the delegation root node. - **/ - NotOwnerOfDelegationHierarchy: AugmentedError; - /** - * The delegation creator is not allowed to write the delegation - * because they are not the owner of the delegation parent node. - **/ - NotOwnerOfParentDelegation: AugmentedError; - /** - * No parent delegation with the given ID stored on chain. - **/ - ParentDelegationNotFound: AugmentedError; - /** - * The parent delegation has previously been revoked. - **/ - ParentDelegationRevoked: AugmentedError; - /** - * The delegation creator is not allowed to create the delegation. - **/ - UnauthorizedDelegation: AugmentedError; - /** - * The call origin is not authorized to remove the delegation. - **/ - UnauthorizedRemoval: AugmentedError; - /** - * The delegation revoker is not allowed to revoke the delegation. - **/ - UnauthorizedRevocation: AugmentedError; - }; - democracy: { - /** - * Cannot cancel the same proposal twice - **/ - AlreadyCanceled: AugmentedError; - /** - * The account is already delegating. - **/ - AlreadyDelegating: AugmentedError; - /** - * Identity may not veto a proposal twice - **/ - AlreadyVetoed: AugmentedError; - /** - * Proposal already made - **/ - DuplicateProposal: AugmentedError; - /** - * The instant referendum origin is currently disallowed. - **/ - InstantNotAllowed: AugmentedError; - /** - * Too high a balance was provided that the account cannot afford. - **/ - InsufficientFunds: AugmentedError; - /** - * Invalid hash - **/ - InvalidHash: AugmentedError; - /** - * Maximum number of votes reached. - **/ - MaxVotesReached: AugmentedError; - /** - * No proposals waiting - **/ - NoneWaiting: AugmentedError; - /** - * Delegation to oneself makes no sense. - **/ - Nonsense: AugmentedError; - /** - * The actor has no permission to conduct the action. - **/ - NoPermission: AugmentedError; - /** - * No external proposal - **/ - NoProposal: AugmentedError; - /** - * The account is not currently delegating. - **/ - NotDelegating: AugmentedError; - /** - * Next external proposal not simple majority - **/ - NotSimpleMajority: AugmentedError; - /** - * The given account did not vote on the referendum. - **/ - NotVoter: AugmentedError; - /** - * The preimage does not exist. - **/ - PreimageNotExist: AugmentedError; - /** - * Proposal still blacklisted - **/ - ProposalBlacklisted: AugmentedError; - /** - * Proposal does not exist - **/ - ProposalMissing: AugmentedError; - /** - * Vote given for invalid referendum - **/ - ReferendumInvalid: AugmentedError; - /** - * Maximum number of items reached. - **/ - TooMany: AugmentedError; - /** - * Value too low - **/ - ValueLow: AugmentedError; - /** - * The account currently has votes attached to it and the operation cannot succeed until - * these are removed, either through `unvote` or `reap_vote`. - **/ - VotesExist: AugmentedError; - /** - * Voting period too low - **/ - VotingPeriodLow: AugmentedError; - /** - * Invalid upper bound. - **/ - WrongUpperBound: AugmentedError; - }; - did: { - /** - * The DID has already been previously deleted. - **/ - AlreadyDeleted: AugmentedError; - /** - * The DID with the given identifier is already present on chain. - **/ - AlreadyExists: AugmentedError; - /** - * The DID call was submitted by the wrong account - **/ - BadDidOrigin: AugmentedError; - /** - * An error that is not supposed to take place, yet it happened. - **/ - Internal: AugmentedError; - /** - * The call had parameters that conflicted with each other - * or were invalid. - **/ - InvalidDidAuthorizationCall: AugmentedError; - /** - * The DID operation nonce is not equal to the current DID nonce + 1. - **/ - InvalidNonce: AugmentedError; - /** - * One of the service endpoint details contains non-ASCII characters. - **/ - InvalidServiceEncoding: AugmentedError; - /** - * The DID operation signature is invalid for the payload and the - * verification key provided. - **/ - InvalidSignature: AugmentedError; - /** - * The DID operation signature is not in the format the verification - * key expects. - **/ - InvalidSignatureFormat: AugmentedError; - /** - * The maximum number of key agreements has been reached for the DID - * subject. - **/ - MaxKeyAgreementKeysExceeded: AugmentedError; - /** - * A number of new key agreement keys greater than the maximum allowed - * has been provided. - **/ - MaxNewKeyAgreementKeysLimitExceeded: AugmentedError; - /** - * The maximum number of service endpoints for a DID has been exceeded. - **/ - MaxNumberOfServicesExceeded: AugmentedError; - /** - * The maximum number of types for a service endpoint has been - * exceeded. - **/ - MaxNumberOfTypesPerServiceExceeded: AugmentedError; - /** - * The maximum number of URLs for a service endpoint has been exceeded. - **/ - MaxNumberOfUrlsPerServiceExceeded: AugmentedError; - /** - * The maximum number of public keys for this DID key identifier has - * been reached. - **/ - MaxPublicKeysExceeded: AugmentedError; - /** - * The service endpoint ID exceeded the maximum allowed length. - **/ - MaxServiceIdLengthExceeded: AugmentedError; - /** - * One of the service endpoint types exceeded the maximum allowed - * length. - **/ - MaxServiceTypeLengthExceeded: AugmentedError; - /** - * One of the service endpoint URLs exceeded the maximum allowed - * length. - **/ - MaxServiceUrlLengthExceeded: AugmentedError; - /** - * The number of service endpoints stored under the DID is larger than - * the number of endpoints to delete. - **/ - MaxStoredEndpointsCountExceeded: AugmentedError; - /** - * No DID with the given identifier is present on chain. - **/ - NotFound: AugmentedError; - /** - * Only the owner of the deposit can reclaim its reserved balance. - **/ - NotOwnerOfDeposit: AugmentedError; - /** - * A service with the provided ID is already present for the given DID. - **/ - ServiceAlreadyExists: AugmentedError; - /** - * A service with the provided ID is not present under the given DID. - **/ - ServiceNotFound: AugmentedError; - /** - * The block number provided in a DID-authorized operation is invalid. - **/ - TransactionExpired: AugmentedError; - /** - * The origin is unable to reserve the deposit and pay the fee. - **/ - UnableToPayFees: AugmentedError; - /** - * The called extrinsic does not support DID authorisation. - **/ - UnsupportedDidAuthorizationCall: AugmentedError; - /** - * One or more verification keys referenced are not stored in the set - * of verification keys. - **/ - VerificationKeyNotFound: AugmentedError; - }; - didLookup: { - /** - * The account has insufficient funds and can't pay the fees or reserve - * the deposit. - **/ - InsufficientFunds: AugmentedError; - /** - * The ConnectedAccounts and ConnectedDids storage are out of sync. - * - * NOTE: this will only be returned if the storage has inconsistencies. - **/ - Migration: AugmentedError; - /** - * The origin was not allowed to manage the association between the DID - * and the account ID. - **/ - NotAuthorized: AugmentedError; - /** - * The association does not exist. - **/ - NotFound: AugmentedError; - /** - * The supplied proof of ownership was outdated. - **/ - OutdatedProof: AugmentedError; - }; - dmpQueue: { - /** - * The amount of weight given is possibly not enough for executing the message. - **/ - OverLimit: AugmentedError; - /** - * The message index given is unknown. - **/ - Unknown: AugmentedError; - }; - indices: { - /** - * The index was not available. - **/ - InUse: AugmentedError; - /** - * The index was not already assigned. - **/ - NotAssigned: AugmentedError; - /** - * The index is assigned to another account. - **/ - NotOwner: AugmentedError; - /** - * The source and destination accounts are identical. - **/ - NotTransfer: AugmentedError; - /** - * The index is permanent and may not be freed/changed. - **/ - Permanent: AugmentedError; - }; - migration: { - KeyParse: AugmentedError; - }; - multisig: { - /** - * Call is already approved by this signatory. - **/ - AlreadyApproved: AugmentedError; - /** - * The data to be stored is already stored. - **/ - AlreadyStored: AugmentedError; - /** - * The maximum weight information provided was too low. - **/ - MaxWeightTooLow: AugmentedError; - /** - * Threshold must be 2 or greater. - **/ - MinimumThreshold: AugmentedError; - /** - * Call doesn't need any (more) approvals. - **/ - NoApprovalsNeeded: AugmentedError; - /** - * Multisig operation not found when attempting to cancel. - **/ - NotFound: AugmentedError; - /** - * No timepoint was given, yet the multisig operation is already underway. - **/ - NoTimepoint: AugmentedError; - /** - * Only the account that originally created the multisig is able to cancel it. - **/ - NotOwner: AugmentedError; - /** - * The sender was contained in the other signatories; it shouldn't be. - **/ - SenderInSignatories: AugmentedError; - /** - * The signatories were provided out of order; they should be ordered. - **/ - SignatoriesOutOfOrder: AugmentedError; - /** - * There are too few signatories in the list. - **/ - TooFewSignatories: AugmentedError; - /** - * There are too many signatories in the list. - **/ - TooManySignatories: AugmentedError; - /** - * A timepoint was given, yet no multisig operation is underway. - **/ - UnexpectedTimepoint: AugmentedError; - /** - * A different timepoint was given to the multisig operation that is underway. - **/ - WrongTimepoint: AugmentedError; - }; - parachainStaking: { - /** - * The delegator has already previously delegated the collator - * candidate. - **/ - AlreadyDelegatedCollator: AugmentedError; - /** - * The account is already delegating the collator candidate. - **/ - AlreadyDelegating: AugmentedError; - /** - * The collator candidate has already trigger the process to leave the - * set of collator candidates. - **/ - AlreadyLeaving: AugmentedError; - /** - * The account is already part of the collator candidates set. - **/ - CandidateExists: AugmentedError; - /** - * The account is not part of the collator candidates set. - **/ - CandidateNotFound: AugmentedError; - /** - * The collator candidate is in the process of leaving the set of - * candidates and thus cannot be delegated to. - **/ - CannotDelegateIfLeaving: AugmentedError; - /** - * The account has a full list of unstaking requests and needs to - * unlock at least one of these before being able to join (again). - * NOTE: Can only happen if the account was a candidate or - * delegator before and either got kicked or exited voluntarily. - **/ - CannotJoinBeforeUnlocking: AugmentedError; - /** - * The collator tried to leave before waiting at least for - * `ExitQueueDelay` many rounds. - **/ - CannotLeaveYet: AugmentedError; - /** - * The number of selected candidates per staking round is - * above the maximum value allowed. - **/ - CannotSetAboveMax: AugmentedError; - /** - * The number of selected candidates per staking round is - * below the minimum value allowed. - **/ - CannotSetBelowMin: AugmentedError; - /** - * The collator candidate is in the process of leaving the set of - * candidates and cannot perform any other actions in the meantime. - **/ - CannotStakeIfLeaving: AugmentedError; - /** - * The account has not staked enough funds to delegate a collator - * candidate. - **/ - DelegationBelowMin: AugmentedError; - /** - * The given delegation does not exist in the set of delegations. - **/ - DelegationNotFound: AugmentedError; - /** - * The delegator has exceeded the number of delegations per round which - * is equal to MaxDelegatorsPerCollator. - * - * This protects against attacks in which a delegator can re-delegate - * from a collator who has already authored a block, to another one - * which has not in this round. - **/ - DelegationsPerRoundExceeded: AugmentedError; - /** - * The account is already part of the delegators set. - **/ - DelegatorExists: AugmentedError; - /** - * The account is not part of the delegators set. - **/ - DelegatorNotFound: AugmentedError; - /** - * An invalid inflation configuration is trying to be set. - **/ - InvalidSchedule: AugmentedError; - /** - * The delegator has already delegated the maximum number of candidates - * allowed. - **/ - MaxCollatorsPerDelegatorExceeded: AugmentedError; - /** - * The staking reward being unlocked does not exist. - * Max unlocking requests reached. - **/ - NoMoreUnstaking: AugmentedError; - /** - * The collator candidate wanted to execute the exit but has not - * requested to leave before by calling `init_leave_candidates`. - **/ - NotLeaving: AugmentedError; - /** - * The account has not delegated any collator candidate yet, hence it - * is not in the set of delegators. - **/ - NotYetDelegating: AugmentedError; - /** - * Cannot claim rewards if empty. - **/ - RewardsNotFound: AugmentedError; - /** - * Provided staked value is zero. Should never be thrown. - **/ - StakeNotFound: AugmentedError; - /** - * The reward rate cannot be adjusted yet as an entire year has not - * passed. - **/ - TooEarly: AugmentedError; - /** - * The set of collator candidates would fall below the required minimum - * if the collator left. - **/ - TooFewCollatorCandidates: AugmentedError; - /** - * The collator candidate has already reached the maximum number of - * delegators. - * - * This error is generated in case a new delegation request does not - * stake enough funds to replace some other existing delegation. - **/ - TooManyDelegators: AugmentedError; - /** - * The collator delegate or the delegator is trying to un-stake more - * funds that are currently staked. - **/ - Underflow: AugmentedError; - /** - * Cannot unlock when Unstaked is empty. - **/ - UnstakingIsEmpty: AugmentedError; - /** - * The account has already staked the maximum amount of funds possible. - **/ - ValStakeAboveMax: AugmentedError; - /** - * The account has not staked enough funds to be added to the collator - * candidates set. - **/ - ValStakeBelowMin: AugmentedError; - /** - * The account tried to stake more or less with amount zero. - **/ - ValStakeZero: AugmentedError; - }; - parachainSystem: { - /** - * The inherent which supplies the host configuration did not run this block. - **/ - HostConfigurationNotAvailable: AugmentedError; - /** - * No code upgrade has been authorized. - **/ - NothingAuthorized: AugmentedError; - /** - * No validation function upgrade is currently scheduled. - **/ - NotScheduled: AugmentedError; - /** - * Attempt to upgrade validation function while existing upgrade pending. - **/ - OverlappingUpgrades: AugmentedError; - /** - * Polkadot currently prohibits this parachain from upgrading its validation function. - **/ - ProhibitedByPolkadot: AugmentedError; - /** - * The supplied validation function has compiled into a blob larger than Polkadot is - * willing to run. - **/ - TooBig: AugmentedError; - /** - * The given code upgrade has not been authorized. - **/ - Unauthorized: AugmentedError; - /** - * The inherent which supplies the validation data did not run this block. - **/ - ValidationDataNotAvailable: AugmentedError; - }; - polkadotXcm: { - /** - * The given account is not an identifiable sovereign account for any location. - **/ - AccountNotSovereign: AugmentedError; - /** - * The location is invalid since it already has a subscription from us. - **/ - AlreadySubscribed: AugmentedError; - /** - * The given location could not be used (e.g. because it cannot be expressed in the - * desired version of XCM). - **/ - BadLocation: AugmentedError; - /** - * The version of the `Versioned` value used is not able to be interpreted. - **/ - BadVersion: AugmentedError; - /** - * Could not re-anchor the assets to declare the fees for the destination chain. - **/ - CannotReanchor: AugmentedError; - /** - * The destination `MultiLocation` provided cannot be inverted. - **/ - DestinationNotInvertible: AugmentedError; - /** - * The assets to be sent are empty. - **/ - Empty: AugmentedError; - /** - * The operation required fees to be paid which the initiator could not meet. - **/ - FeesNotMet: AugmentedError; - /** - * The message execution fails the filter. - **/ - Filtered: AugmentedError; - /** - * The unlock operation cannot succeed because there are still consumers of the lock. - **/ - InUse: AugmentedError; - /** - * Invalid asset for the operation. - **/ - InvalidAsset: AugmentedError; - /** - * Origin is invalid for sending. - **/ - InvalidOrigin: AugmentedError; - /** - * A remote lock with the corresponding data could not be found. - **/ - LockNotFound: AugmentedError; - /** - * The owner does not own (all) of the asset that they wish to do the operation on. - **/ - LowBalance: AugmentedError; - /** - * The referenced subscription could not be found. - **/ - NoSubscription: AugmentedError; - /** - * There was some other issue (i.e. not to do with routing) in sending the message. Perhaps - * a lack of space for buffering the message. - **/ - SendFailure: AugmentedError; - /** - * Too many assets have been attempted for transfer. - **/ - TooManyAssets: AugmentedError; - /** - * The asset owner has too many locks on the asset. - **/ - TooManyLocks: AugmentedError; - /** - * The desired destination was unreachable, generally because there is a no way of routing - * to it. - **/ - Unreachable: AugmentedError; - /** - * The message's weight could not be determined. - **/ - UnweighableMessage: AugmentedError; - }; - preimage: { - /** - * Preimage has already been noted on-chain. - **/ - AlreadyNoted: AugmentedError; - /** - * The user is not authorized to perform this action. - **/ - NotAuthorized: AugmentedError; - /** - * The preimage cannot be removed since it has not yet been noted. - **/ - NotNoted: AugmentedError; - /** - * The preimage request cannot be removed since no outstanding requests exist. - **/ - NotRequested: AugmentedError; - /** - * A preimage may not be removed when there are outstanding requests. - **/ - Requested: AugmentedError; - /** - * Preimage is too large to store on-chain. - **/ - TooBig: AugmentedError; - }; - proxy: { - /** - * Account is already a proxy. - **/ - Duplicate: AugmentedError; - /** - * Call may not be made by proxy because it may escalate its privileges. - **/ - NoPermission: AugmentedError; - /** - * Cannot add self as proxy. - **/ - NoSelfProxy: AugmentedError; - /** - * Proxy registration not found. - **/ - NotFound: AugmentedError; - /** - * Sender is not a proxy of the account to be proxied. - **/ - NotProxy: AugmentedError; - /** - * There are too many proxies registered or too many announcements pending. - **/ - TooMany: AugmentedError; - /** - * Announcement, if made at all, was made too recently. - **/ - Unannounced: AugmentedError; - /** - * A call which is incompatible with the proxy type's filter was attempted. - **/ - Unproxyable: AugmentedError; - }; - publicCredentials: { - /** - * A credential with the same root hash has already issued to the - * specified subject. - **/ - AlreadyAttested: AugmentedError; - /** - * Catch-all for any other errors that should not happen, yet it - * happened. - **/ - Internal: AugmentedError; - /** - * The credential input is invalid. - **/ - InvalidInput: AugmentedError; - /** - * The caller is not authorized to performed the operation. - **/ - NotAuthorized: AugmentedError; - /** - * No credential with the specified root hash has been issued to the - * specified subject. - **/ - NotFound: AugmentedError; - /** - * Not enough tokens to pay for the fees or the deposit. - **/ - UnableToPayFees: AugmentedError; - }; - scheduler: { - /** - * Failed to schedule a call - **/ - FailedToSchedule: AugmentedError; - /** - * Attempt to use a non-named function on a named task. - **/ - Named: AugmentedError; - /** - * Cannot find the scheduled call. - **/ - NotFound: AugmentedError; - /** - * Reschedule failed because it does not change scheduled time. - **/ - RescheduleNoChange: AugmentedError; - /** - * Given target block number is in the past. - **/ - TargetBlockNumberInPast: AugmentedError; - }; - session: { - /** - * Registered duplicate key. - **/ - DuplicatedKey: AugmentedError; - /** - * Invalid ownership proof. - **/ - InvalidProof: AugmentedError; - /** - * Key setting account is not live, so it's impossible to associate keys. - **/ - NoAccount: AugmentedError; - /** - * No associated validator ID for account. - **/ - NoAssociatedValidatorId: AugmentedError; - /** - * No keys are associated with this account. - **/ - NoKeys: AugmentedError; - }; - system: { - /** - * The origin filter prevent the call to be dispatched. - **/ - CallFiltered: AugmentedError; - /** - * Failed to extract the runtime version from the new runtime. - * - * Either calling `Core_version` or decoding `RuntimeVersion` failed. - **/ - FailedToExtractRuntimeVersion: AugmentedError; - /** - * The name of specification does not match between the current runtime - * and the new runtime. - **/ - InvalidSpecName: AugmentedError; - /** - * Suicide called when the account has non-default composite data. - **/ - NonDefaultComposite: AugmentedError; - /** - * There is a non-zero reference count preventing the account from being purged. - **/ - NonZeroRefCount: AugmentedError; - /** - * The specification version is not allowed to decrease between the current runtime - * and the new runtime. - **/ - SpecVersionNeedsToIncrease: AugmentedError; - }; - technicalCommittee: { - /** - * Members are already initialized! - **/ - AlreadyInitialized: AugmentedError; - /** - * Duplicate proposals not allowed - **/ - DuplicateProposal: AugmentedError; - /** - * Duplicate vote ignored - **/ - DuplicateVote: AugmentedError; - /** - * Account is not a member - **/ - NotMember: AugmentedError; - /** - * Proposal must exist - **/ - ProposalMissing: AugmentedError; - /** - * The close call was made too early, before the end of the voting. - **/ - TooEarly: AugmentedError; - /** - * There can only be a maximum of `MaxProposals` active proposals. - **/ - TooManyProposals: AugmentedError; - /** - * Mismatched index - **/ - WrongIndex: AugmentedError; - /** - * The given length bound for the proposal was too low. - **/ - WrongProposalLength: AugmentedError; - /** - * The given weight bound for the proposal was too low. - **/ - WrongProposalWeight: AugmentedError; - }; - technicalMembership: { - /** - * Already a member. - **/ - AlreadyMember: AugmentedError; - /** - * Not a member. - **/ - NotMember: AugmentedError; - /** - * Too many members. - **/ - TooManyMembers: AugmentedError; - }; - tips: { - /** - * The tip was already found/started. - **/ - AlreadyKnown: AugmentedError; - /** - * The account attempting to retract the tip is not the finder of the tip. - **/ - NotFinder: AugmentedError; - /** - * The tip cannot be claimed/closed because it's still in the countdown period. - **/ - Premature: AugmentedError; - /** - * The reason given is just too big. - **/ - ReasonTooBig: AugmentedError; - /** - * The tip cannot be claimed/closed because there are not enough tippers yet. - **/ - StillOpen: AugmentedError; - /** - * The tip hash is unknown. - **/ - UnknownTip: AugmentedError; - }; - tipsMembership: { - /** - * Already a member. - **/ - AlreadyMember: AugmentedError; - /** - * Not a member. - **/ - NotMember: AugmentedError; - /** - * Too many members. - **/ - TooManyMembers: AugmentedError; - }; - treasury: { - /** - * The spend origin is valid but the amount it is allowed to spend is lower than the - * amount to be spent. - **/ - InsufficientPermission: AugmentedError; - /** - * Proposer's balance is too low. - **/ - InsufficientProposersBalance: AugmentedError; - /** - * No proposal or bounty at that index. - **/ - InvalidIndex: AugmentedError; - /** - * Proposal has not been approved. - **/ - ProposalNotApproved: AugmentedError; - /** - * Too many approvals in the queue. - **/ - TooManyApprovals: AugmentedError; - }; - utility: { - /** - * Too many calls batched. - **/ - TooManyCalls: AugmentedError; - }; - vesting: { - /** - * Amount being transferred is too low to create a vesting schedule. - **/ - AmountLow: AugmentedError; - /** - * The account already has `MaxVestingSchedules` count of schedules and thus - * cannot add another one. Consider merging existing schedules in order to add another. - **/ - AtMaxVestingSchedules: AugmentedError; - /** - * Failed to create a new schedule because some parameter was invalid. - **/ - InvalidScheduleParams: AugmentedError; - /** - * The account given is not vesting. - **/ - NotVesting: AugmentedError; - /** - * An index was out of bounds of the vesting schedules. - **/ - ScheduleIndexOutOfBounds: AugmentedError; - }; - web3Names: { - /** - * The specified name has already been previously banned. - **/ - AlreadyBanned: AugmentedError; - /** - * The specified name has already been previously claimed. - **/ - AlreadyExists: AugmentedError; - /** - * The specified name has been banned and cannot be interacted - * with. - **/ - Banned: AugmentedError; - /** - * The tx submitter does not have enough funds to pay for the deposit. - **/ - InsufficientFunds: AugmentedError; - /** - * A name that contains not allowed characters is being claimed. - **/ - InvalidCharacter: AugmentedError; - /** - * The actor cannot performed the specified operation. - **/ - NotAuthorized: AugmentedError; - /** - * The specified name is not currently banned. - **/ - NotBanned: AugmentedError; - /** - * The specified name does not exist. - **/ - NotFound: AugmentedError; - /** - * The specified owner already owns a name. - **/ - OwnerAlreadyExists: AugmentedError; - /** - * The specified owner does not own any names. - **/ - OwnerNotFound: AugmentedError; - /** - * A name that is too long is being claimed. - **/ - TooLong: AugmentedError; - /** - * A name that is too short is being claimed. - **/ - TooShort: AugmentedError; - }; - xcmpQueue: { - /** - * Bad overweight index. - **/ - BadOverweightIndex: AugmentedError; - /** - * Bad XCM data. - **/ - BadXcm: AugmentedError; - /** - * Bad XCM origin. - **/ - BadXcmOrigin: AugmentedError; - /** - * Failed to send XCM message. - **/ - FailedToSend: AugmentedError; - /** - * Provided weight is possibly not enough to execute the message. - **/ - WeightOverLimit: AugmentedError; - }; - } // AugmentedErrors -} // declare module diff --git a/packages/augment-api/src/interfaces/augment-api-events.ts b/packages/augment-api/src/interfaces/augment-api-events.ts deleted file mode 100644 index 2acd5b245..000000000 --- a/packages/augment-api/src/interfaces/augment-api-events.ts +++ /dev/null @@ -1,1029 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import '@polkadot/api-base/types/events'; - -import type { ApiTypes, AugmentedEvent } from '@polkadot/api-base/types'; -import type { Bytes, Null, Option, Result, U8aFixed, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; -import type { ITuple } from '@polkadot/types-codec/types'; -import type { AccountId32, H256, Perquintill } from '@polkadot/types/interfaces/runtime'; -import type { DelegationDelegationHierarchyPermissions, FrameSupportDispatchDispatchInfo, FrameSupportTokensMiscBalanceStatus, PalletDemocracyMetadataOwner, PalletDemocracyVoteAccountVote, PalletDemocracyVoteThreshold, PalletDidLookupLinkableAccountLinkableAccountId, PalletMigrationEntriesToMigrate, PalletMultisigTimepoint, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpRuntimeDispatchError, SpWeightsWeightV2Weight, SpiritnetRuntimeProxyType, XcmV3MultiLocation, XcmV3MultiassetMultiAssets, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation } from '@polkadot/types/lookup'; - -export type __AugmentedEvent = AugmentedEvent; - -declare module '@polkadot/api-base/types/events' { - interface AugmentedEvents { - attestation: { - /** - * A new attestation has been created. - * \[attester ID, claim hash, CType hash, (optional) delegation ID\] - **/ - AttestationCreated: AugmentedEvent]>; - /** - * An attestation has been removed. - * \[account id, claim hash\] - **/ - AttestationRemoved: AugmentedEvent; - /** - * An attestation has been revoked. - * \[account id, claim hash\] - **/ - AttestationRevoked: AugmentedEvent; - /** - * The deposit owner reclaimed a deposit by removing an attestation. - * \[account id, claim hash\] - **/ - DepositReclaimed: AugmentedEvent; - }; - balances: { - /** - * A balance was set by root. - **/ - BalanceSet: AugmentedEvent; - /** - * Some amount was burned from an account. - **/ - Burned: AugmentedEvent; - /** - * Some amount was deposited (e.g. for transaction fees). - **/ - Deposit: AugmentedEvent; - /** - * An account was removed whose balance was non-zero but below ExistentialDeposit, - * resulting in an outright loss. - **/ - DustLost: AugmentedEvent; - /** - * An account was created with some free balance. - **/ - Endowed: AugmentedEvent; - /** - * Some balance was frozen. - **/ - Frozen: AugmentedEvent; - /** - * Total issuance was increased by `amount`, creating a credit to be balanced. - **/ - Issued: AugmentedEvent; - /** - * Some balance was locked. - **/ - Locked: AugmentedEvent; - /** - * Some amount was minted into an account. - **/ - Minted: AugmentedEvent; - /** - * Total issuance was decreased by `amount`, creating a debt to be balanced. - **/ - Rescinded: AugmentedEvent; - /** - * Some balance was reserved (moved from free to reserved). - **/ - Reserved: AugmentedEvent; - /** - * Some balance was moved from the reserve of the first account to the second account. - * Final argument indicates the destination balance type. - **/ - ReserveRepatriated: AugmentedEvent; - /** - * Some amount was restored into an account. - **/ - Restored: AugmentedEvent; - /** - * Some amount was removed from the account (e.g. for misbehavior). - **/ - Slashed: AugmentedEvent; - /** - * Some amount was suspended from an account (it can be restored later). - **/ - Suspended: AugmentedEvent; - /** - * Some balance was thawed. - **/ - Thawed: AugmentedEvent; - /** - * Transfer succeeded. - **/ - Transfer: AugmentedEvent; - /** - * Some balance was unlocked. - **/ - Unlocked: AugmentedEvent; - /** - * Some balance was unreserved (moved from reserved to free). - **/ - Unreserved: AugmentedEvent; - /** - * An account was upgraded. - **/ - Upgraded: AugmentedEvent; - /** - * Some amount was withdrawn from the account (e.g. for transaction fees). - **/ - Withdraw: AugmentedEvent; - }; - council: { - /** - * A motion was approved by the required threshold. - **/ - Approved: AugmentedEvent; - /** - * A proposal was closed because its threshold was reached or after its duration was up. - **/ - Closed: AugmentedEvent; - /** - * A motion was not approved by the required threshold. - **/ - Disapproved: AugmentedEvent; - /** - * A motion was executed; result will be `Ok` if it returned without error. - **/ - Executed: AugmentedEvent], { proposalHash: H256, result: Result }>; - /** - * A single member did some action; result will be `Ok` if it returned without error. - **/ - MemberExecuted: AugmentedEvent], { proposalHash: H256, result: Result }>; - /** - * A motion (given hash) has been proposed (by given account) with a threshold (given - * `MemberCount`). - **/ - Proposed: AugmentedEvent; - /** - * A motion (given hash) has been voted on by given account, leaving - * a tally (yes votes and no votes given respectively as `MemberCount`). - **/ - Voted: AugmentedEvent; - }; - ctype: { - /** - * A new CType has been created. - * \[creator identifier, CType hash\] - **/ - CTypeCreated: AugmentedEvent; - /** - * Information about a CType has been updated. - * \[CType hash\] - **/ - CTypeUpdated: AugmentedEvent; - }; - cumulusXcm: { - /** - * Downward message executed with the given outcome. - * \[ id, outcome \] - **/ - ExecutedDownward: AugmentedEvent; - /** - * Downward message is invalid XCM. - * \[ id \] - **/ - InvalidFormat: AugmentedEvent; - /** - * Downward message is unsupported version of XCM. - * \[ id \] - **/ - UnsupportedVersion: AugmentedEvent; - }; - delegation: { - /** - * A new delegation has been created. - * \[creator ID, root node ID, delegation node ID, parent node ID, - * delegate ID, permissions\] - **/ - DelegationCreated: AugmentedEvent; - /** - * A delegation has been removed. - * \[remover ID, delegation node ID\] - **/ - DelegationRemoved: AugmentedEvent; - /** - * A delegation has been revoked. - * \[revoker ID, delegation node ID\] - **/ - DelegationRevoked: AugmentedEvent; - /** - * The deposit owner reclaimed a deposit by removing a delegation - * subtree. \[revoker ID, delegation node ID\] - **/ - DepositReclaimed: AugmentedEvent; - /** - * A new hierarchy has been created. - * \[creator ID, root node ID, CTYPE hash\] - **/ - HierarchyCreated: AugmentedEvent; - /** - * A hierarchy has been removed from the storage on chain. - * \[remover ID, root node ID\] - **/ - HierarchyRemoved: AugmentedEvent; - /** - * A hierarchy has been revoked. - * \[revoker ID, root node ID\] - **/ - HierarchyRevoked: AugmentedEvent; - }; - democracy: { - /** - * A proposal_hash has been blacklisted permanently. - **/ - Blacklisted: AugmentedEvent; - /** - * A referendum has been cancelled. - **/ - Cancelled: AugmentedEvent; - /** - * An account has delegated their vote to another account. - **/ - Delegated: AugmentedEvent; - /** - * An external proposal has been tabled. - **/ - ExternalTabled: AugmentedEvent; - /** - * Metadata for a proposal or a referendum has been cleared. - **/ - MetadataCleared: AugmentedEvent; - /** - * Metadata for a proposal or a referendum has been set. - **/ - MetadataSet: AugmentedEvent; - /** - * Metadata has been transferred to new owner. - **/ - MetadataTransferred: AugmentedEvent; - /** - * A proposal has been rejected by referendum. - **/ - NotPassed: AugmentedEvent; - /** - * A proposal has been approved by referendum. - **/ - Passed: AugmentedEvent; - /** - * A proposal got canceled. - **/ - ProposalCanceled: AugmentedEvent; - /** - * A motion has been proposed by a public account. - **/ - Proposed: AugmentedEvent; - /** - * An account has secconded a proposal - **/ - Seconded: AugmentedEvent; - /** - * A referendum has begun. - **/ - Started: AugmentedEvent; - /** - * A public proposal has been tabled for referendum vote. - **/ - Tabled: AugmentedEvent; - /** - * An account has cancelled a previous delegation operation. - **/ - Undelegated: AugmentedEvent; - /** - * An external proposal has been vetoed. - **/ - Vetoed: AugmentedEvent; - /** - * An account has voted in a referendum - **/ - Voted: AugmentedEvent; - }; - did: { - /** - * A DID-authorised call has been executed. - * \[DID caller, dispatch result\] - **/ - DidCallDispatched: AugmentedEvent]>; - /** - * A new DID has been created. - * \[transaction signer, DID identifier\] - **/ - DidCreated: AugmentedEvent; - /** - * A DID has been deleted. - * \[DID identifier\] - **/ - DidDeleted: AugmentedEvent; - /** - * A DID has been updated. - * \[DID identifier\] - **/ - DidUpdated: AugmentedEvent; - }; - didLookup: { - /** - * A new association between a DID and an account ID was created. - **/ - AssociationEstablished: AugmentedEvent; - /** - * An association between a DID and an account ID was removed. - **/ - AssociationRemoved: AugmentedEvent; - /** - * All AccountIds have been migrated to LinkableAccountId. - **/ - MigrationCompleted: AugmentedEvent; - /** - * There was some progress in the migration process. - **/ - MigrationProgress: AugmentedEvent; - }; - dmpQueue: { - /** - * Downward message executed with the given outcome. - **/ - ExecutedDownward: AugmentedEvent; - /** - * Downward message is invalid XCM. - **/ - InvalidFormat: AugmentedEvent; - /** - * The maximum number of downward messages was reached. - **/ - MaxMessagesExhausted: AugmentedEvent; - /** - * Downward message is overweight and was placed in the overweight queue. - **/ - OverweightEnqueued: AugmentedEvent; - /** - * Downward message from the overweight queue was executed. - **/ - OverweightServiced: AugmentedEvent; - /** - * Downward message is unsupported version of XCM. - **/ - UnsupportedVersion: AugmentedEvent; - /** - * The weight limit for handling downward messages was reached. - **/ - WeightExhausted: AugmentedEvent; - }; - indices: { - /** - * A account index was assigned. - **/ - IndexAssigned: AugmentedEvent; - /** - * A account index has been freed up (unassigned). - **/ - IndexFreed: AugmentedEvent; - /** - * A account index has been frozen to its current account ID. - **/ - IndexFrozen: AugmentedEvent; - }; - migration: { - EntriesUpdated: AugmentedEvent; - }; - multisig: { - /** - * A multisig operation has been approved by someone. - **/ - MultisigApproval: AugmentedEvent; - /** - * A multisig operation has been cancelled. - **/ - MultisigCancelled: AugmentedEvent; - /** - * A multisig operation has been executed. - **/ - MultisigExecuted: AugmentedEvent], { approving: AccountId32, timepoint: PalletMultisigTimepoint, multisig: AccountId32, callHash: U8aFixed, result: Result }>; - /** - * A new multisig operation has begun. - **/ - NewMultisig: AugmentedEvent; - }; - parachainStaking: { - /** - * The length in blocks for future validation rounds has changed. - * \[round number, first block in the current round, old value, new - * value\] - **/ - BlocksPerRoundSet: AugmentedEvent; - /** - * An account has left the set of collator candidates. - * \[account, amount of funds un-staked\] - **/ - CandidateLeft: AugmentedEvent; - /** - * A collator candidate has canceled the process to leave the set of - * candidates and was added back to the candidate pool. \[collator's - * account\] - **/ - CollatorCanceledExit: AugmentedEvent; - /** - * An account was forcedly removed from the set of collator - * candidates. \[account, amount of funds un-staked\] - **/ - CollatorRemoved: AugmentedEvent; - /** - * A collator candidate has started the process to leave the set of - * candidates. \[round number, collator's account, round number when - * the collator will be effectively removed from the set of - * candidates\] - **/ - CollatorScheduledExit: AugmentedEvent; - /** - * A collator candidate has decreased the amount of funds at stake. - * \[collator's account, previous stake, new stake\] - **/ - CollatorStakedLess: AugmentedEvent; - /** - * A collator candidate has increased the amount of funds at stake. - * \[collator's account, previous stake, new stake\] - **/ - CollatorStakedMore: AugmentedEvent; - /** - * An account has delegated a new collator candidate. - * \[account, amount of funds staked, total amount of delegators' funds - * staked for the collator candidate\] - **/ - Delegation: AugmentedEvent; - /** - * A new delegation has replaced an existing one in the set of ongoing - * delegations for a collator candidate. \[new delegator's account, - * amount of funds staked in the new delegation, replaced delegator's - * account, amount of funds staked in the replace delegation, collator - * candidate's account, new total amount of delegators' funds staked - * for the collator candidate\] - **/ - DelegationReplaced: AugmentedEvent; - /** - * An account has left the set of delegators. - * \[account, amount of funds un-staked\] - **/ - DelegatorLeft: AugmentedEvent; - /** - * An account has stopped delegating a collator candidate. - * \[account, collator candidate's account, old amount of delegators' - * funds staked, new amount of delegators' funds staked\] - **/ - DelegatorLeftCollator: AugmentedEvent; - /** - * A delegator has decreased the amount of funds at stake for a - * collator. \[delegator's account, collator's account, previous - * delegation stake, new delegation stake\] - **/ - DelegatorStakedLess: AugmentedEvent; - /** - * A delegator has increased the amount of funds at stake for a - * collator. \[delegator's account, collator's account, previous - * delegation stake, new delegation stake\] - **/ - DelegatorStakedMore: AugmentedEvent; - /** - * A new account has joined the set of top candidates. - * \[account\] - **/ - EnteredTopCandidates: AugmentedEvent; - /** - * A new account has joined the set of collator candidates. - * \[account, amount staked by the new candidate\] - **/ - JoinedCollatorCandidates: AugmentedEvent; - /** - * An account was removed from the set of top candidates. - * \[account\] - **/ - LeftTopCandidates: AugmentedEvent; - /** - * The maximum candidate stake has been changed. - * \[new max amount\] - **/ - MaxCandidateStakeChanged: AugmentedEvent; - /** - * The maximum number of collator candidates selected in future - * validation rounds has changed. \[old value, new value\] - **/ - MaxSelectedCandidatesSet: AugmentedEvent; - /** - * A new staking round has started. - * \[block number, round number\] - **/ - NewRound: AugmentedEvent; - /** - * A collator or a delegator has received a reward. - * \[account, amount of reward\] - **/ - Rewarded: AugmentedEvent; - /** - * Inflation configuration for future validation rounds has changed. - * \[maximum collator's staking rate, maximum collator's reward rate, - * maximum delegator's staking rate, maximum delegator's reward rate\] - **/ - RoundInflationSet: AugmentedEvent; - }; - parachainSystem: { - /** - * Downward messages were processed using the given weight. - **/ - DownwardMessagesProcessed: AugmentedEvent; - /** - * Some downward messages have been received and will be processed. - **/ - DownwardMessagesReceived: AugmentedEvent; - /** - * An upgrade has been authorized. - **/ - UpgradeAuthorized: AugmentedEvent; - /** - * An upward message was sent to the relay chain. - **/ - UpwardMessageSent: AugmentedEvent], { messageHash: Option }>; - /** - * The validation function was applied as of the contained relay chain block number. - **/ - ValidationFunctionApplied: AugmentedEvent; - /** - * The relay-chain aborted the upgrade process. - **/ - ValidationFunctionDiscarded: AugmentedEvent; - /** - * The validation function has been scheduled to apply. - **/ - ValidationFunctionStored: AugmentedEvent; - }; - polkadotXcm: { - /** - * Some assets have been claimed from an asset trap - **/ - AssetsClaimed: AugmentedEvent; - /** - * Some assets have been placed in an asset trap. - **/ - AssetsTrapped: AugmentedEvent; - /** - * Execution of an XCM message was attempted. - **/ - Attempted: AugmentedEvent; - /** - * Fees were paid from a location for an operation (often for using `SendXcm`). - **/ - FeesPaid: AugmentedEvent; - /** - * Expected query response has been received but the querier location of the response does - * not match the expected. The query remains registered for a later, valid, response to - * be received and acted upon. - **/ - InvalidQuerier: AugmentedEvent], { origin: XcmV3MultiLocation, queryId: u64, expectedQuerier: XcmV3MultiLocation, maybeActualQuerier: Option }>; - /** - * Expected query response has been received but the expected querier location placed in - * storage by this runtime previously cannot be decoded. The query remains registered. - * - * This is unexpected (since a location placed in storage in a previously executing - * runtime should be readable prior to query timeout) and dangerous since the possibly - * valid response will be dropped. Manual governance intervention is probably going to be - * needed. - **/ - InvalidQuerierVersion: AugmentedEvent; - /** - * Expected query response has been received but the origin location of the response does - * not match that expected. The query remains registered for a later, valid, response to - * be received and acted upon. - **/ - InvalidResponder: AugmentedEvent], { origin: XcmV3MultiLocation, queryId: u64, expectedLocation: Option }>; - /** - * Expected query response has been received but the expected origin location placed in - * storage by this runtime previously cannot be decoded. The query remains registered. - * - * This is unexpected (since a location placed in storage in a previously executing - * runtime should be readable prior to query timeout) and dangerous since the possibly - * valid response will be dropped. Manual governance intervention is probably going to be - * needed. - **/ - InvalidResponderVersion: AugmentedEvent; - /** - * Query response has been received and query is removed. The registered notification has - * been dispatched and executed successfully. - **/ - Notified: AugmentedEvent; - /** - * Query response has been received and query is removed. The dispatch was unable to be - * decoded into a `Call`; this might be due to dispatch function having a signature which - * is not `(origin, QueryId, Response)`. - **/ - NotifyDecodeFailed: AugmentedEvent; - /** - * Query response has been received and query is removed. There was a general error with - * dispatching the notification call. - **/ - NotifyDispatchError: AugmentedEvent; - /** - * Query response has been received and query is removed. The registered notification could - * not be dispatched because the dispatch weight is greater than the maximum weight - * originally budgeted by this runtime for the query result. - **/ - NotifyOverweight: AugmentedEvent; - /** - * A given location which had a version change subscription was dropped owing to an error - * migrating the location to our new XCM format. - **/ - NotifyTargetMigrationFail: AugmentedEvent; - /** - * A given location which had a version change subscription was dropped owing to an error - * sending the notification to it. - **/ - NotifyTargetSendFail: AugmentedEvent; - /** - * Query response has been received and is ready for taking with `take_response`. There is - * no registered notification call. - **/ - ResponseReady: AugmentedEvent; - /** - * Received query response has been read and removed. - **/ - ResponseTaken: AugmentedEvent; - /** - * A XCM message was sent. - **/ - Sent: AugmentedEvent; - /** - * The supported version of a location has been changed. This might be through an - * automatic notification or a manual intervention. - **/ - SupportedVersionChanged: AugmentedEvent; - /** - * Query response received which does not match a registered query. This may be because a - * matching query was never registered, it may be because it is a duplicate response, or - * because the query timed out. - **/ - UnexpectedResponse: AugmentedEvent; - /** - * An XCM version change notification message has been attempted to be sent. - * - * The cost of sending it (borne by the chain) is included. - **/ - VersionChangeNotified: AugmentedEvent; - /** - * We have requested that a remote chain send us XCM version change notifications. - **/ - VersionNotifyRequested: AugmentedEvent; - /** - * A remote has requested XCM version change notification from us and we have honored it. - * A version information message is sent to them and its cost is included. - **/ - VersionNotifyStarted: AugmentedEvent; - /** - * We have requested that a remote chain stops sending us XCM version change notifications. - **/ - VersionNotifyUnrequested: AugmentedEvent; - }; - preimage: { - /** - * A preimage has ben cleared. - **/ - Cleared: AugmentedEvent; - /** - * A preimage has been noted. - **/ - Noted: AugmentedEvent; - /** - * A preimage has been requested. - **/ - Requested: AugmentedEvent; - }; - proxy: { - /** - * An announcement was placed to make a call in the future. - **/ - Announced: AugmentedEvent; - /** - * A proxy was added. - **/ - ProxyAdded: AugmentedEvent; - /** - * A proxy was executed correctly, with the given. - **/ - ProxyExecuted: AugmentedEvent], { result: Result }>; - /** - * A proxy was removed. - **/ - ProxyRemoved: AugmentedEvent; - /** - * A pure account has been created by new proxy with given - * disambiguation index and proxy type. - **/ - PureCreated: AugmentedEvent; - }; - publicCredentials: { - /** - * A public credentials has been removed. - **/ - CredentialRemoved: AugmentedEvent; - /** - * A public credential has been revoked. - **/ - CredentialRevoked: AugmentedEvent; - /** - * A new public credential has been issued. - **/ - CredentialStored: AugmentedEvent; - /** - * A public credential has been unrevoked. - **/ - CredentialUnrevoked: AugmentedEvent; - }; - scheduler: { - /** - * The call for the provided hash was not found so the task has been aborted. - **/ - CallUnavailable: AugmentedEvent, id: Option], { task: ITuple<[u64, u32]>, id: Option }>; - /** - * Canceled some task. - **/ - Canceled: AugmentedEvent; - /** - * Dispatched some task. - **/ - Dispatched: AugmentedEvent, id: Option, result: Result], { task: ITuple<[u64, u32]>, id: Option, result: Result }>; - /** - * The given task was unable to be renewed since the agenda is full at that block. - **/ - PeriodicFailed: AugmentedEvent, id: Option], { task: ITuple<[u64, u32]>, id: Option }>; - /** - * The given task can never be executed since it is overweight. - **/ - PermanentlyOverweight: AugmentedEvent, id: Option], { task: ITuple<[u64, u32]>, id: Option }>; - /** - * Scheduled some task. - **/ - Scheduled: AugmentedEvent; - }; - session: { - /** - * New session has happened. Note that the argument is the session index, not the - * block number as the type might suggest. - **/ - NewSession: AugmentedEvent; - }; - system: { - /** - * `:code` was updated. - **/ - CodeUpdated: AugmentedEvent; - /** - * An extrinsic failed. - **/ - ExtrinsicFailed: AugmentedEvent; - /** - * An extrinsic completed successfully. - **/ - ExtrinsicSuccess: AugmentedEvent; - /** - * An account was reaped. - **/ - KilledAccount: AugmentedEvent; - /** - * A new account was created. - **/ - NewAccount: AugmentedEvent; - /** - * On on-chain remark happened. - **/ - Remarked: AugmentedEvent; - }; - technicalCommittee: { - /** - * A motion was approved by the required threshold. - **/ - Approved: AugmentedEvent; - /** - * A proposal was closed because its threshold was reached or after its duration was up. - **/ - Closed: AugmentedEvent; - /** - * A motion was not approved by the required threshold. - **/ - Disapproved: AugmentedEvent; - /** - * A motion was executed; result will be `Ok` if it returned without error. - **/ - Executed: AugmentedEvent], { proposalHash: H256, result: Result }>; - /** - * A single member did some action; result will be `Ok` if it returned without error. - **/ - MemberExecuted: AugmentedEvent], { proposalHash: H256, result: Result }>; - /** - * A motion (given hash) has been proposed (by given account) with a threshold (given - * `MemberCount`). - **/ - Proposed: AugmentedEvent; - /** - * A motion (given hash) has been voted on by given account, leaving - * a tally (yes votes and no votes given respectively as `MemberCount`). - **/ - Voted: AugmentedEvent; - }; - technicalMembership: { - /** - * Phantom member, never used. - **/ - Dummy: AugmentedEvent; - /** - * One of the members' keys changed. - **/ - KeyChanged: AugmentedEvent; - /** - * The given member was added; see the transaction for who. - **/ - MemberAdded: AugmentedEvent; - /** - * The given member was removed; see the transaction for who. - **/ - MemberRemoved: AugmentedEvent; - /** - * The membership was reset; see the transaction for who the new set is. - **/ - MembersReset: AugmentedEvent; - /** - * Two members were swapped; see the transaction for who. - **/ - MembersSwapped: AugmentedEvent; - }; - tips: { - /** - * A new tip suggestion has been opened. - **/ - NewTip: AugmentedEvent; - /** - * A tip suggestion has been closed. - **/ - TipClosed: AugmentedEvent; - /** - * A tip suggestion has reached threshold and is closing. - **/ - TipClosing: AugmentedEvent; - /** - * A tip suggestion has been retracted. - **/ - TipRetracted: AugmentedEvent; - /** - * A tip suggestion has been slashed. - **/ - TipSlashed: AugmentedEvent; - }; - tipsMembership: { - /** - * Phantom member, never used. - **/ - Dummy: AugmentedEvent; - /** - * One of the members' keys changed. - **/ - KeyChanged: AugmentedEvent; - /** - * The given member was added; see the transaction for who. - **/ - MemberAdded: AugmentedEvent; - /** - * The given member was removed; see the transaction for who. - **/ - MemberRemoved: AugmentedEvent; - /** - * The membership was reset; see the transaction for who the new set is. - **/ - MembersReset: AugmentedEvent; - /** - * Two members were swapped; see the transaction for who. - **/ - MembersSwapped: AugmentedEvent; - }; - transactionPayment: { - /** - * A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee, - * has been paid by `who`. - **/ - TransactionFeePaid: AugmentedEvent; - }; - treasury: { - /** - * Some funds have been allocated. - **/ - Awarded: AugmentedEvent; - /** - * Some of our funds have been burnt. - **/ - Burnt: AugmentedEvent; - /** - * Some funds have been deposited. - **/ - Deposit: AugmentedEvent; - /** - * New proposal. - **/ - Proposed: AugmentedEvent; - /** - * A proposal was rejected; funds were slashed. - **/ - Rejected: AugmentedEvent; - /** - * Spending has finished; this is the amount that rolls over until next spend. - **/ - Rollover: AugmentedEvent; - /** - * A new spend proposal has been approved. - **/ - SpendApproved: AugmentedEvent; - /** - * We have ended a spend period and will now allocate funds. - **/ - Spending: AugmentedEvent; - /** - * The inactive funds of the pallet have been updated. - **/ - UpdatedInactive: AugmentedEvent; - }; - utility: { - /** - * Batch of dispatches completed fully with no error. - **/ - BatchCompleted: AugmentedEvent; - /** - * Batch of dispatches completed but has errors. - **/ - BatchCompletedWithErrors: AugmentedEvent; - /** - * Batch of dispatches did not complete fully. Index of first failing dispatch given, as - * well as the error. - **/ - BatchInterrupted: AugmentedEvent; - /** - * A call was dispatched. - **/ - DispatchedAs: AugmentedEvent], { result: Result }>; - /** - * A single item within a Batch of dispatches has completed with no error. - **/ - ItemCompleted: AugmentedEvent; - /** - * A single item within a Batch of dispatches has completed with error. - **/ - ItemFailed: AugmentedEvent; - }; - vesting: { - /** - * An \[account\] has become fully vested. - **/ - VestingCompleted: AugmentedEvent; - /** - * The amount vested has been updated. This could indicate a change in funds available. - * The balance given is the amount which is left unvested (and thus locked). - **/ - VestingUpdated: AugmentedEvent; - }; - web3Names: { - /** - * A name has been banned. - **/ - Web3NameBanned: AugmentedEvent; - /** - * A new name has been claimed. - **/ - Web3NameClaimed: AugmentedEvent; - /** - * A name has been released. - **/ - Web3NameReleased: AugmentedEvent; - /** - * A name has been unbanned. - **/ - Web3NameUnbanned: AugmentedEvent; - }; - xcmpQueue: { - /** - * Bad XCM format used. - **/ - BadFormat: AugmentedEvent; - /** - * Bad XCM version used. - **/ - BadVersion: AugmentedEvent; - /** - * Some XCM failed. - **/ - Fail: AugmentedEvent; - /** - * An XCM exceeded the individual message weight budget. - **/ - OverweightEnqueued: AugmentedEvent; - /** - * An XCM from the overweight queue was executed with the given actual weight used. - **/ - OverweightServiced: AugmentedEvent; - /** - * Some XCM was executed ok. - **/ - Success: AugmentedEvent; - /** - * An HRMP message was sent to a sibling parachain. - **/ - XcmpMessageSent: AugmentedEvent; - }; - } // AugmentedEvents -} // declare module diff --git a/packages/augment-api/src/interfaces/augment-api-query.ts b/packages/augment-api/src/interfaces/augment-api-query.ts deleted file mode 100644 index e591421e8..000000000 --- a/packages/augment-api/src/interfaces/augment-api-query.ts +++ /dev/null @@ -1,945 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import '@polkadot/api-base/types/storage'; - -import type { ApiTypes, AugmentedQuery, QueryableStorageEntry } from '@polkadot/api-base/types'; -import type { BTreeMap, Bytes, Null, Option, U8aFixed, Vec, bool, u128, u16, u32, u64 } from '@polkadot/types-codec'; -import type { AnyNumber, ITuple } from '@polkadot/types-codec/types'; -import type { AccountId32, Call, H256 } from '@polkadot/types/interfaces/runtime'; -import type { AttestationAttestationsAttestationDetails, CtypeCtypeEntry, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DidDidDetails, DidServiceEndpointsDidEndpoint, FrameSupportDispatchPerDispatchClassWeight, FrameSupportPreimagesBounded, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesIdAmountRuntimeFreezeReason, PalletBalancesIdAmountRuntimeHoldReason, PalletBalancesReserveData, PalletCollectiveVotes, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupConnectionRecord, PalletDidLookupLinkableAccountLinkableAccountId, PalletMultisigMultisig, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletSchedulerScheduled, PalletTipsOpenTip, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesWeb3NameWeb3NameOwnership, PalletXcmQueryStatus, PalletXcmRemoteLockedFungibleRecord, PalletXcmVersionMigrationStage, ParachainStakingCandidate, ParachainStakingDelegationCounter, ParachainStakingInflationInflationInfo, ParachainStakingRoundInfo, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV5AbridgedHostConfiguration, PolkadotPrimitivesV5PersistedValidationData, PolkadotPrimitivesV5UpgradeRestriction, PublicCredentialsCredentialsCredentialEntry, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpRuntimeDigest, SpTrieStorageProof, SpWeightsWeightV2Weight, SpiritnetRuntimeSessionKeys, XcmVersionedAssetId, XcmVersionedMultiLocation } from '@polkadot/types/lookup'; -import type { Observable } from '@polkadot/types/types'; - -export type __AugmentedQuery = AugmentedQuery unknown>; -export type __QueryableStorageEntry = QueryableStorageEntry; - -declare module '@polkadot/api-base/types/storage' { - interface AugmentedQueries { - attestation: { - /** - * Attestations stored on chain. - * - * It maps from a claim hash to the full attestation. - **/ - attestations: AugmentedQuery Observable>, [H256]>; - /** - * Delegated attestations stored on chain. - * - * It maps from a delegation ID to a vector of claim hashes. - **/ - externalAttestations: AugmentedQuery Observable, [RuntimeCommonAuthorizationAuthorizationId, H256]>; - }; - aura: { - /** - * The current authority set. - **/ - authorities: AugmentedQuery Observable>, []>; - /** - * The current slot of this block. - * - * This will be set in `on_initialize`. - **/ - currentSlot: AugmentedQuery Observable, []>; - }; - auraExt: { - /** - * Serves as cache for the authorities. - * - * The authorities in AuRa are overwritten in `on_initialize` when we switch to a new session, - * but we require the old authorities to verify the seal when validating a PoV. This will always - * be updated to the latest AuRa authorities in `on_finalize`. - **/ - authorities: AugmentedQuery Observable>, []>; - }; - authorship: { - /** - * Author of current block. - **/ - author: AugmentedQuery Observable>, []>; - }; - balances: { - /** - * The Balances pallet example of storing the balance of an account. - * - * # Example - * - * ```nocompile - * impl pallet_balances::Config for Runtime { - * type AccountStore = StorageMapShim, frame_system::Provider, AccountId, Self::AccountData> - * } - * ``` - * - * You can also store the balance of an account in the `System` pallet. - * - * # Example - * - * ```nocompile - * impl pallet_balances::Config for Runtime { - * type AccountStore = System - * } - * ``` - * - * But this comes with tradeoffs, storing account balances in the system pallet stores - * `frame_system` data alongside the account data contrary to storing account balances in the - * `Balances` pallet, which uses a `StorageMap` to store balances data only. - * NOTE: This is only used in the case that this pallet is used to store balances. - **/ - account: AugmentedQuery Observable, [AccountId32]>; - /** - * Freeze locks on account balances. - **/ - freezes: AugmentedQuery Observable>, [AccountId32]>; - /** - * Holds on account balances. - **/ - holds: AugmentedQuery Observable>, [AccountId32]>; - /** - * The total units of outstanding deactivated balance in the system. - **/ - inactiveIssuance: AugmentedQuery Observable, []>; - /** - * Any liquidity locks on some account balances. - * NOTE: Should only be accessed when setting, changing and freeing a lock. - **/ - locks: AugmentedQuery Observable>, [AccountId32]>; - /** - * Named reserves on some account balances. - **/ - reserves: AugmentedQuery Observable>, [AccountId32]>; - /** - * The total units issued in the system. - **/ - totalIssuance: AugmentedQuery Observable, []>; - }; - council: { - /** - * The current members of the collective. This is stored sorted (just by value). - **/ - members: AugmentedQuery Observable>, []>; - /** - * The prime member that helps determine the default vote behavior in case of absentations. - **/ - prime: AugmentedQuery Observable>, []>; - /** - * Proposals so far. - **/ - proposalCount: AugmentedQuery Observable, []>; - /** - * Actual proposal for a given hash, if it's current. - **/ - proposalOf: AugmentedQuery Observable>, [H256]>; - /** - * The hashes of the active proposals. - **/ - proposals: AugmentedQuery Observable>, []>; - /** - * Votes on a given proposal, if it is ongoing. - **/ - voting: AugmentedQuery Observable>, [H256]>; - }; - ctype: { - /** - * CTypes stored on chain. - * - * It maps from a CType hash to its creator and block number in which it - * was created. - **/ - ctypes: AugmentedQuery Observable>, [H256]>; - }; - delegation: { - /** - * Delegation hierarchies stored on chain. - * - * It maps for a (root) node ID to the hierarchy details. - **/ - delegationHierarchies: AugmentedQuery Observable>, [H256]>; - /** - * Delegation nodes stored on chain. - * - * It maps from a node ID to the node details. - **/ - delegationNodes: AugmentedQuery Observable>, [H256]>; - }; - democracy: { - /** - * A record of who vetoed what. Maps proposal hash to a possible existent block number - * (until when it may not be resubmitted) and who vetoed it. - **/ - blacklist: AugmentedQuery Observable]>>>, [H256]>; - /** - * Record of all proposals that have been subject to emergency cancellation. - **/ - cancellations: AugmentedQuery Observable, [H256]>; - /** - * Those who have locked a deposit. - * - * TWOX-NOTE: Safe, as increasing integer keys are safe. - **/ - depositOf: AugmentedQuery Observable, u128]>>>, [u32]>; - /** - * True if the last referendum tabled was submitted externally. False if it was a public - * proposal. - **/ - lastTabledWasExternal: AugmentedQuery Observable, []>; - /** - * The lowest referendum index representing an unbaked referendum. Equal to - * `ReferendumCount` if there isn't a unbaked referendum. - **/ - lowestUnbaked: AugmentedQuery Observable, []>; - /** - * General information concerning any proposal or referendum. - * The `PreimageHash` refers to the preimage of the `Preimages` provider which can be a JSON - * dump or IPFS hash of a JSON file. - * - * Consider a garbage collection for a metadata of finished referendums to `unrequest` (remove) - * large preimages. - **/ - metadataOf: AugmentedQuery Observable>, [PalletDemocracyMetadataOwner]>; - /** - * The referendum to be tabled whenever it would be valid to table an external proposal. - * This happens when a referendum needs to be tabled and one of two conditions are met: - * - `LastTabledWasExternal` is `false`; or - * - `PublicProps` is empty. - **/ - nextExternal: AugmentedQuery Observable>>, []>; - /** - * The number of (public) proposals that have been made so far. - **/ - publicPropCount: AugmentedQuery Observable, []>; - /** - * The public proposals. Unsorted. The second item is the proposal. - **/ - publicProps: AugmentedQuery Observable>>, []>; - /** - * The next free referendum index, aka the number of referenda started so far. - **/ - referendumCount: AugmentedQuery Observable, []>; - /** - * Information concerning any given referendum. - * - * TWOX-NOTE: SAFE as indexes are not under an attacker’s control. - **/ - referendumInfoOf: AugmentedQuery Observable>, [u32]>; - /** - * All votes for a particular voter. We store the balance for the number of votes that we - * have recorded. The second item is the total amount of delegations, that will be added. - * - * TWOX-NOTE: SAFE as `AccountId`s are crypto hashes anyway. - **/ - votingOf: AugmentedQuery Observable, [AccountId32]>; - }; - did: { - /** - * DIDs stored on chain. - * - * It maps from a DID identifier to the DID details. - **/ - did: AugmentedQuery Observable>, [AccountId32]>; - /** - * The set of DIDs that have been deleted and cannot therefore be created - * again for security reasons. - * - * It maps from a DID identifier to a unit tuple, for the sake of tracking - * DID identifiers. - **/ - didBlacklist: AugmentedQuery Observable>, [AccountId32]>; - /** - * Counter of service endpoints for each DID. - * - * It maps from (DID identifier) to a 32-bit counter. - **/ - didEndpointsCount: AugmentedQuery Observable, [AccountId32]>; - /** - * Service endpoints associated with DIDs. - * - * It maps from (DID identifier, service ID) to the service details. - **/ - serviceEndpoints: AugmentedQuery Observable>, [AccountId32, Bytes]>; - }; - didLookup: { - /** - * Mapping from (DID + account identifier) -> (). - * The empty tuple is used as a sentinel value to simply indicate the - * presence of a given tuple in the map. - **/ - connectedAccounts: AugmentedQuery Observable>, [AccountId32, PalletDidLookupLinkableAccountLinkableAccountId]>; - /** - * Mapping from account identifiers to DIDs. - **/ - connectedDids: AugmentedQuery Observable>, [PalletDidLookupLinkableAccountLinkableAccountId]>; - }; - dmpQueue: { - /** - * The configuration. - **/ - configuration: AugmentedQuery Observable, []>; - /** - * Counter for the related counted storage map - **/ - counterForOverweight: AugmentedQuery Observable, []>; - /** - * The overweight messages. - **/ - overweight: AugmentedQuery Observable>>, [u64]>; - /** - * The page index. - **/ - pageIndex: AugmentedQuery Observable, []>; - /** - * The queue pages. - **/ - pages: AugmentedQuery Observable>>, [u32]>; - }; - indices: { - /** - * The lookup from index to account. - **/ - accounts: AugmentedQuery Observable>>, [u64]>; - }; - migration: { - migratedKeys: AugmentedQuery Observable>, [H256]>; - }; - multisig: { - /** - * The set of open multisig operations. - **/ - multisigs: AugmentedQuery Observable>, [AccountId32, U8aFixed]>; - }; - parachainInfo: { - parachainId: AugmentedQuery Observable, []>; - }; - parachainStaking: { - /** - * The number of authored blocks for collators. It is updated via the - * `note_author` hook when authoring a block . - **/ - blocksAuthored: AugmentedQuery Observable, [AccountId32]>; - /** - * The number of blocks for which rewards have been claimed by an address. - * - * For collators, this can be at most BlocksAuthored. It is updated when - * incrementing collator rewards, either when calling - * `inc_collator_rewards` or updating the `InflationInfo`. - * - * For delegators, this can be at most BlocksAuthored of the collator.It is - * updated when incrementing delegator rewards, either when calling - * `inc_delegator_rewards` or updating the `InflationInfo`. - **/ - blocksRewarded: AugmentedQuery Observable, [AccountId32]>; - /** - * The staking information for a candidate. - * - * It maps from an account to its information. - * Moreover, it counts the number of candidates. - **/ - candidatePool: AugmentedQuery Observable>, [AccountId32]>; - /** - * Counter for the related counted storage map - **/ - counterForCandidatePool: AugmentedQuery Observable, []>; - /** - * Delegation staking information. - * - * It maps from an account to its delegation details. - **/ - delegatorState: AugmentedQuery Observable>, [AccountId32]>; - forceNewRound: AugmentedQuery Observable, []>; - /** - * Inflation configuration. - **/ - inflationConfig: AugmentedQuery Observable, []>; - /** - * Delegation information for the latest session in which a delegator - * delegated. - * - * It maps from an account to the number of delegations in the last - * session in which they (re-)delegated. - **/ - lastDelegation: AugmentedQuery Observable, [AccountId32]>; - /** - * The year in which the last automatic reduction of the reward rates - * occurred. - * - * It starts at zero at genesis and increments by one every BLOCKS_PER_YEAR - * many blocks. - **/ - lastRewardReduction: AugmentedQuery Observable, []>; - /** - * The maximum amount a collator candidate can stake. - **/ - maxCollatorCandidateStake: AugmentedQuery Observable, []>; - /** - * The maximum number of collator candidates selected at each round. - **/ - maxSelectedCandidates: AugmentedQuery Observable, []>; - /** - * The accumulated rewards for collator candidates and delegators. - * - * It maps from accounts to their total rewards since the last payout. - **/ - rewards: AugmentedQuery Observable, [AccountId32]>; - /** - * Current round number and next round scheduled transition. - **/ - round: AugmentedQuery Observable, []>; - /** - * The collator candidates with the highest amount of stake. - * - * Each time the stake of a collator is increased, it is checked whether - * this pushes another candidate out of the list. When the stake is - * reduced however, it is not checked if another candidate has more stake, - * since this would require iterating over the entire `CandidatePool`. - * - * There must always be more candidates than `MaxSelectedCandidates` so - * that a collator can drop out of the collator set by reducing their - * stake. - **/ - topCandidates: AugmentedQuery Observable>, []>; - /** - * Total funds locked to back the currently selected collators. - * The sum of all collator and their delegator stakes. - * - * Note: There are more funds locked by this pallet, since the backing for - * non collating candidates is not included in `TotalCollatorStake`. - **/ - totalCollatorStake: AugmentedQuery Observable, []>; - /** - * The funds waiting to be unstaked. - * - * It maps from accounts to all the funds addressed to them in the future - * blocks. - **/ - unstaking: AugmentedQuery Observable>, [AccountId32]>; - }; - parachainSystem: { - /** - * The number of HRMP messages we observed in `on_initialize` and thus used that number for - * announcing the weight of `on_initialize` and `on_finalize`. - **/ - announcedHrmpMessagesPerCandidate: AugmentedQuery Observable, []>; - /** - * The next authorized upgrade, if there is one. - **/ - authorizedUpgrade: AugmentedQuery Observable>, []>; - /** - * A custom head data that should be returned as result of `validate_block`. - * - * See `Pallet::set_custom_validation_head_data` for more information. - **/ - customValidationHeadData: AugmentedQuery Observable>, []>; - /** - * Were the validation data set to notify the relay chain? - **/ - didSetValidationCode: AugmentedQuery Observable, []>; - /** - * The parachain host configuration that was obtained from the relay parent. - * - * This field is meant to be updated each block with the validation data inherent. Therefore, - * before processing of the inherent, e.g. in `on_initialize` this data may be stale. - * - * This data is also absent from the genesis. - **/ - hostConfiguration: AugmentedQuery Observable>, []>; - /** - * HRMP messages that were sent in a block. - * - * This will be cleared in `on_initialize` of each new block. - **/ - hrmpOutboundMessages: AugmentedQuery Observable>, []>; - /** - * HRMP watermark that was set in a block. - * - * This will be cleared in `on_initialize` of each new block. - **/ - hrmpWatermark: AugmentedQuery Observable, []>; - /** - * The last downward message queue chain head we have observed. - * - * This value is loaded before and saved after processing inbound downward messages carried - * by the system inherent. - **/ - lastDmqMqcHead: AugmentedQuery Observable, []>; - /** - * The message queue chain heads we have observed per each channel incoming channel. - * - * This value is loaded before and saved after processing inbound downward messages carried - * by the system inherent. - **/ - lastHrmpMqcHeads: AugmentedQuery Observable>, []>; - /** - * The relay chain block number associated with the last parachain block. - **/ - lastRelayChainBlockNumber: AugmentedQuery Observable, []>; - /** - * Validation code that is set by the parachain and is to be communicated to collator and - * consequently the relay-chain. - * - * This will be cleared in `on_initialize` of each new block if no other pallet already set - * the value. - **/ - newValidationCode: AugmentedQuery Observable>, []>; - /** - * Upward messages that are still pending and not yet send to the relay chain. - **/ - pendingUpwardMessages: AugmentedQuery Observable>, []>; - /** - * In case of a scheduled upgrade, this storage field contains the validation code to be applied. - * - * As soon as the relay chain gives us the go-ahead signal, we will overwrite the [`:code`][sp_core::storage::well_known_keys::CODE] - * which will result the next block process with the new validation code. This concludes the upgrade process. - **/ - pendingValidationCode: AugmentedQuery Observable, []>; - /** - * Number of downward messages processed in a block. - * - * This will be cleared in `on_initialize` of each new block. - **/ - processedDownwardMessages: AugmentedQuery Observable, []>; - /** - * The state proof for the last relay parent block. - * - * This field is meant to be updated each block with the validation data inherent. Therefore, - * before processing of the inherent, e.g. in `on_initialize` this data may be stale. - * - * This data is also absent from the genesis. - **/ - relayStateProof: AugmentedQuery Observable>, []>; - /** - * The snapshot of some state related to messaging relevant to the current parachain as per - * the relay parent. - * - * This field is meant to be updated each block with the validation data inherent. Therefore, - * before processing of the inherent, e.g. in `on_initialize` this data may be stale. - * - * This data is also absent from the genesis. - **/ - relevantMessagingState: AugmentedQuery Observable>, []>; - /** - * The weight we reserve at the beginning of the block for processing DMP messages. This - * overrides the amount set in the Config trait. - **/ - reservedDmpWeightOverride: AugmentedQuery Observable>, []>; - /** - * The weight we reserve at the beginning of the block for processing XCMP messages. This - * overrides the amount set in the Config trait. - **/ - reservedXcmpWeightOverride: AugmentedQuery Observable>, []>; - /** - * An option which indicates if the relay-chain restricts signalling a validation code upgrade. - * In other words, if this is `Some` and [`NewValidationCode`] is `Some` then the produced - * candidate will be invalid. - * - * This storage item is a mirror of the corresponding value for the current parachain from the - * relay-chain. This value is ephemeral which means it doesn't hit the storage. This value is - * set after the inherent. - **/ - upgradeRestrictionSignal: AugmentedQuery Observable>, []>; - /** - * Upward messages that were sent in a block. - * - * This will be cleared in `on_initialize` of each new block. - **/ - upwardMessages: AugmentedQuery Observable>, []>; - /** - * The [`PersistedValidationData`] set for this block. - * This value is expected to be set only once per block and it's never stored - * in the trie. - **/ - validationData: AugmentedQuery Observable>, []>; - }; - polkadotXcm: { - /** - * The existing asset traps. - * - * Key is the blake2 256 hash of (origin, versioned `MultiAssets`) pair. Value is the number of - * times this pair has been trapped (usually just 1 if it exists at all). - **/ - assetTraps: AugmentedQuery Observable, [H256]>; - /** - * The current migration's stage, if any. - **/ - currentMigration: AugmentedQuery Observable>, []>; - /** - * Fungible assets which we know are locked on this chain. - **/ - lockedFungibles: AugmentedQuery Observable>>>, [AccountId32]>; - /** - * The ongoing queries. - **/ - queries: AugmentedQuery Observable>, [u64]>; - /** - * The latest available query index. - **/ - queryCounter: AugmentedQuery Observable, []>; - /** - * Fungible assets which we know are locked on a remote chain. - **/ - remoteLockedFungibles: AugmentedQuery Observable>, [u32, AccountId32, XcmVersionedAssetId]>; - /** - * Default version to encode XCM when latest version of destination is unknown. If `None`, - * then the destinations whose XCM version is unknown are considered unreachable. - **/ - safeXcmVersion: AugmentedQuery Observable>, []>; - /** - * The Latest versions that we know various locations support. - **/ - supportedVersion: AugmentedQuery Observable>, [u32, XcmVersionedMultiLocation]>; - /** - * Destinations whose latest XCM version we would like to know. Duplicates not allowed, and - * the `u32` counter is the number of times that a send to the destination has been attempted, - * which is used as a prioritization. - **/ - versionDiscoveryQueue: AugmentedQuery Observable>>, []>; - /** - * All locations that we have requested version notifications from. - **/ - versionNotifiers: AugmentedQuery Observable>, [u32, XcmVersionedMultiLocation]>; - /** - * The target locations that are subscribed to our version changes, as well as the most recent - * of our versions we informed them of. - **/ - versionNotifyTargets: AugmentedQuery Observable>>, [u32, XcmVersionedMultiLocation]>; - /** - * Global suspension state of the XCM executor. - **/ - xcmExecutionSuspended: AugmentedQuery Observable, []>; - }; - preimage: { - preimageFor: AugmentedQuery | [H256 | string | Uint8Array, u32 | AnyNumber | Uint8Array]) => Observable>, [ITuple<[H256, u32]>]>; - /** - * The request status of a given hash. - **/ - statusFor: AugmentedQuery Observable>, [H256]>; - }; - proxy: { - /** - * The announcements made by the proxy (key). - **/ - announcements: AugmentedQuery Observable, u128]>>, [AccountId32]>; - /** - * The set of account proxies. Maps the account which has delegated to the accounts - * which are being delegated to, together with the amount held on deposit. - **/ - proxies: AugmentedQuery Observable, u128]>>, [AccountId32]>; - }; - publicCredentials: { - /** - * The map of public credentials already attested. - * It maps from a (subject id + credential id) -> the creation - * details of the credential. - **/ - credentials: AugmentedQuery Observable>, [RuntimeCommonAssetsAssetDid, H256]>; - /** - * A reverse index mapping from credential ID to the subject the credential - * was issued to. - * - * It it used to perform efficient lookup of credentials given their ID. - **/ - credentialSubjects: AugmentedQuery Observable>, [H256]>; - }; - scheduler: { - /** - * Items to be executed, indexed by the block number that they should be executed on. - **/ - agenda: AugmentedQuery Observable>>, [u64]>; - incompleteSince: AugmentedQuery Observable>, []>; - /** - * Lookup from a name to the block number and index of the task. - * - * For v3 -> v4 the previously unbounded identities are Blake2-256 hashed to form the v4 - * identities. - **/ - lookup: AugmentedQuery Observable>>, [U8aFixed]>; - }; - session: { - /** - * Current index of the session. - **/ - currentIndex: AugmentedQuery Observable, []>; - /** - * Indices of disabled validators. - * - * The vec is always kept sorted so that we can find whether a given validator is - * disabled using binary search. It gets cleared when `on_session_ending` returns - * a new set of identities. - **/ - disabledValidators: AugmentedQuery Observable>, []>; - /** - * The owner of a key. The key is the `KeyTypeId` + the encoded key. - **/ - keyOwner: AugmentedQuery | [SpCoreCryptoKeyTypeId | string | Uint8Array, Bytes | string | Uint8Array]) => Observable>, [ITuple<[SpCoreCryptoKeyTypeId, Bytes]>]>; - /** - * The next session keys for a validator. - **/ - nextKeys: AugmentedQuery Observable>, [AccountId32]>; - /** - * True if the underlying economic identities or weighting behind the validators - * has changed in the queued validator set. - **/ - queuedChanged: AugmentedQuery Observable, []>; - /** - * The queued keys for the next session. When the next session begins, these keys - * will be used to determine the validator's session keys. - **/ - queuedKeys: AugmentedQuery Observable>>, []>; - /** - * The current set of validators. - **/ - validators: AugmentedQuery Observable>, []>; - }; - system: { - /** - * The full account information for a particular account ID. - **/ - account: AugmentedQuery Observable, [AccountId32]>; - /** - * Total length (in bytes) for all extrinsics put together, for the current block. - **/ - allExtrinsicsLen: AugmentedQuery Observable>, []>; - /** - * Map of block numbers to block hashes. - **/ - blockHash: AugmentedQuery Observable, [u64]>; - /** - * The current weight for the block. - **/ - blockWeight: AugmentedQuery Observable, []>; - /** - * Digest of the current block, also part of the block header. - **/ - digest: AugmentedQuery Observable, []>; - /** - * The number of events in the `Events` list. - **/ - eventCount: AugmentedQuery Observable, []>; - /** - * Events deposited for the current block. - * - * NOTE: The item is unbound and should therefore never be read on chain. - * It could otherwise inflate the PoV size of a block. - * - * Events have a large in-memory size. Box the events to not go out-of-memory - * just in case someone still reads them from within the runtime. - **/ - events: AugmentedQuery Observable>, []>; - /** - * Mapping between a topic (represented by T::Hash) and a vector of indexes - * of events in the `>` list. - * - * All topic vectors have deterministic storage locations depending on the topic. This - * allows light-clients to leverage the changes trie storage tracking mechanism and - * in case of changes fetch the list of events of interest. - * - * The value has the type `(BlockNumberFor, EventIndex)` because if we used only just - * the `EventIndex` then in case if the topic has the same contents on the next block - * no notification will be triggered thus the event might be lost. - **/ - eventTopics: AugmentedQuery Observable>>, [H256]>; - /** - * The execution phase of the block. - **/ - executionPhase: AugmentedQuery Observable>, []>; - /** - * Total extrinsics count for the current block. - **/ - extrinsicCount: AugmentedQuery Observable>, []>; - /** - * Extrinsics data for the current block (maps an extrinsic's index to its data). - **/ - extrinsicData: AugmentedQuery Observable, [u32]>; - /** - * Stores the `spec_version` and `spec_name` of when the last runtime upgrade happened. - **/ - lastRuntimeUpgrade: AugmentedQuery Observable>, []>; - /** - * The current block number being processed. Set by `execute_block`. - **/ - number: AugmentedQuery Observable, []>; - /** - * Hash of the previous block. - **/ - parentHash: AugmentedQuery Observable, []>; - /** - * True if we have upgraded so that AccountInfo contains three types of `RefCount`. False - * (default) if not. - **/ - upgradedToTripleRefCount: AugmentedQuery Observable, []>; - /** - * True if we have upgraded so that `type RefCount` is `u32`. False (default) if not. - **/ - upgradedToU32RefCount: AugmentedQuery Observable, []>; - }; - technicalCommittee: { - /** - * The current members of the collective. This is stored sorted (just by value). - **/ - members: AugmentedQuery Observable>, []>; - /** - * The prime member that helps determine the default vote behavior in case of absentations. - **/ - prime: AugmentedQuery Observable>, []>; - /** - * Proposals so far. - **/ - proposalCount: AugmentedQuery Observable, []>; - /** - * Actual proposal for a given hash, if it's current. - **/ - proposalOf: AugmentedQuery Observable>, [H256]>; - /** - * The hashes of the active proposals. - **/ - proposals: AugmentedQuery Observable>, []>; - /** - * Votes on a given proposal, if it is ongoing. - **/ - voting: AugmentedQuery Observable>, [H256]>; - }; - technicalMembership: { - /** - * The current membership, stored as an ordered Vec. - **/ - members: AugmentedQuery Observable>, []>; - /** - * The current prime member, if one exists. - **/ - prime: AugmentedQuery Observable>, []>; - }; - timestamp: { - /** - * Did the timestamp get updated in this block? - **/ - didUpdate: AugmentedQuery Observable, []>; - /** - * Current time for the current block. - **/ - now: AugmentedQuery Observable, []>; - }; - tips: { - /** - * Simple preimage lookup from the reason's hash to the original data. Again, has an - * insecure enumerable hash since the key is guaranteed to be the result of a secure hash. - **/ - reasons: AugmentedQuery Observable>, [H256]>; - /** - * TipsMap that are not yet completed. Keyed by the hash of `(reason, who)` from the value. - * This has the insecure enumerable hash function since the key itself is already - * guaranteed to be a secure hash. - **/ - tips: AugmentedQuery Observable>, [H256]>; - }; - tipsMembership: { - /** - * The current membership, stored as an ordered Vec. - **/ - members: AugmentedQuery Observable>, []>; - /** - * The current prime member, if one exists. - **/ - prime: AugmentedQuery Observable>, []>; - }; - transactionPayment: { - nextFeeMultiplier: AugmentedQuery Observable, []>; - storageVersion: AugmentedQuery Observable, []>; - }; - treasury: { - /** - * Proposal indices that have been approved but not yet awarded. - **/ - approvals: AugmentedQuery Observable>, []>; - /** - * The amount which has been reported as inactive to Currency. - **/ - deactivated: AugmentedQuery Observable, []>; - /** - * Number of proposals that have been made. - **/ - proposalCount: AugmentedQuery Observable, []>; - /** - * Proposals that have been made. - **/ - proposals: AugmentedQuery Observable>, [u32]>; - }; - vesting: { - /** - * Storage version of the pallet. - * - * New networks start with latest version, as determined by the genesis build. - **/ - storageVersion: AugmentedQuery Observable, []>; - /** - * Information regarding the vesting of a given account. - **/ - vesting: AugmentedQuery Observable>>, [AccountId32]>; - }; - web3Names: { - /** - * Map of name -> (). - * - * If a name key is present, the name is currently banned. - **/ - banned: AugmentedQuery Observable>, [Bytes]>; - /** - * Map of owner -> name. - **/ - names: AugmentedQuery Observable>, [AccountId32]>; - /** - * Map of name -> ownership details. - **/ - owner: AugmentedQuery Observable>, [Bytes]>; - }; - xcmpQueue: { - /** - * Counter for the related counted storage map - **/ - counterForOverweight: AugmentedQuery Observable, []>; - /** - * Inbound aggregate XCMP messages. It can only be one per ParaId/block. - **/ - inboundXcmpMessages: AugmentedQuery Observable, [u32, u32]>; - /** - * Status of the inbound XCMP channels. - **/ - inboundXcmpStatus: AugmentedQuery Observable>, []>; - /** - * The messages outbound in a given XCMP channel. - **/ - outboundXcmpMessages: AugmentedQuery Observable, [u32, u16]>; - /** - * The non-empty XCMP channels in order of becoming non-empty, and the index of the first - * and last outbound message. If the two indices are equal, then it indicates an empty - * queue and there must be a non-`Ok` `OutboundStatus`. We assume queues grow no greater - * than 65535 items. Queue indices for normal messages begin at one; zero is reserved in - * case of the need to send a high-priority signal message this block. - * The bool is true if there is a signal message waiting to be sent. - **/ - outboundXcmpStatus: AugmentedQuery Observable>, []>; - /** - * The messages that exceeded max individual message weight budget. - * - * These message stay in this storage map until they are manually dispatched via - * `service_overweight`. - **/ - overweight: AugmentedQuery Observable>>, [u64]>; - /** - * The number of overweight messages ever recorded in `Overweight`. Also doubles as the next - * available free overweight index. - **/ - overweightCount: AugmentedQuery Observable, []>; - /** - * The configuration which controls the dynamics of the outbound queue. - **/ - queueConfig: AugmentedQuery Observable, []>; - /** - * Whether or not the XCMP queue is suspended from executing incoming XCMs or not. - **/ - queueSuspended: AugmentedQuery Observable, []>; - /** - * Any signal messages waiting to be sent. - **/ - signalMessages: AugmentedQuery Observable, [u32]>; - }; - } // AugmentedQueries -} // declare module diff --git a/packages/augment-api/src/interfaces/augment-api-rpc.ts b/packages/augment-api/src/interfaces/augment-api-rpc.ts deleted file mode 100644 index bd142eb07..000000000 --- a/packages/augment-api/src/interfaces/augment-api-rpc.ts +++ /dev/null @@ -1,617 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import '@polkadot/rpc-core/types/jsonrpc'; - -import type { AugmentedRpc } from '@polkadot/rpc-core/types'; -import type { Metadata, StorageKey } from '@polkadot/types'; -import type { Bytes, HashMap, Json, Null, Option, Text, U256, U64, Vec, bool, f64, u32, u64 } from '@polkadot/types-codec'; -import type { AnyNumber, Codec } from '@polkadot/types-codec/types'; -import type { ExtrinsicOrHash, ExtrinsicStatus } from '@polkadot/types/interfaces/author'; -import type { EpochAuthorship } from '@polkadot/types/interfaces/babe'; -import type { BeefySignedCommitment } from '@polkadot/types/interfaces/beefy'; -import type { BlockHash } from '@polkadot/types/interfaces/chain'; -import type { PrefixedStorageKey } from '@polkadot/types/interfaces/childstate'; -import type { AuthorityId } from '@polkadot/types/interfaces/consensus'; -import type { CodeUploadRequest, CodeUploadResult, ContractCallRequest, ContractExecResult, ContractInstantiateResult, InstantiateRequestV1 } from '@polkadot/types/interfaces/contracts'; -import type { BlockStats } from '@polkadot/types/interfaces/dev'; -import type { CreatedBlock } from '@polkadot/types/interfaces/engine'; -import type { EthAccount, EthCallRequest, EthFeeHistory, EthFilter, EthFilterChanges, EthLog, EthReceipt, EthRichBlock, EthSubKind, EthSubParams, EthSyncStatus, EthTransaction, EthTransactionRequest, EthWork } from '@polkadot/types/interfaces/eth'; -import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics'; -import type { EncodedFinalityProofs, JustificationNotification, ReportedRoundStates } from '@polkadot/types/interfaces/grandpa'; -import type { MmrHash, MmrLeafBatchProof } from '@polkadot/types/interfaces/mmr'; -import type { StorageKind } from '@polkadot/types/interfaces/offchain'; -import type { FeeDetails, RuntimeDispatchInfoV1 } from '@polkadot/types/interfaces/payment'; -import type { RpcMethods } from '@polkadot/types/interfaces/rpc'; -import type { AccountId, BlockNumber, H160, H256, H64, Hash, Header, Index, Justification, KeyValue, SignedBlock, StorageData } from '@polkadot/types/interfaces/runtime'; -import type { MigrationStatusResult, ReadProof, RuntimeVersion, TraceBlockResponse } from '@polkadot/types/interfaces/state'; -import type { ApplyExtrinsicResult, ChainProperties, ChainType, Health, NetworkState, NodeRole, PeerInfo, SyncState } from '@polkadot/types/interfaces/system'; -import type { IExtrinsic, Observable } from '@polkadot/types/types'; - -export type __AugmentedRpc = AugmentedRpc<() => unknown>; - -declare module '@polkadot/rpc-core/types/jsonrpc' { - interface RpcInterface { - author: { - /** - * Returns true if the keystore has private keys for the given public key and key type. - **/ - hasKey: AugmentedRpc<(publicKey: Bytes | string | Uint8Array, keyType: Text | string) => Observable>; - /** - * Returns true if the keystore has private keys for the given session public keys. - **/ - hasSessionKeys: AugmentedRpc<(sessionKeys: Bytes | string | Uint8Array) => Observable>; - /** - * Insert a key into the keystore. - **/ - insertKey: AugmentedRpc<(keyType: Text | string, suri: Text | string, publicKey: Bytes | string | Uint8Array) => Observable>; - /** - * Returns all pending extrinsics, potentially grouped by sender - **/ - pendingExtrinsics: AugmentedRpc<() => Observable>>; - /** - * Remove given extrinsic from the pool and temporarily ban it to prevent reimporting - **/ - removeExtrinsic: AugmentedRpc<(bytesOrHash: Vec | (ExtrinsicOrHash | { Hash: any } | { Extrinsic: any } | string | Uint8Array)[]) => Observable>>; - /** - * Generate new session keys and returns the corresponding public keys - **/ - rotateKeys: AugmentedRpc<() => Observable>; - /** - * Submit and subscribe to watch an extrinsic until unsubscribed - **/ - submitAndWatchExtrinsic: AugmentedRpc<(extrinsic: Extrinsic | IExtrinsic | string | Uint8Array) => Observable>; - /** - * Submit a fully formatted extrinsic for block inclusion - **/ - submitExtrinsic: AugmentedRpc<(extrinsic: Extrinsic | IExtrinsic | string | Uint8Array) => Observable>; - }; - babe: { - /** - * Returns data about which slots (primary or secondary) can be claimed in the current epoch with the keys in the keystore - **/ - epochAuthorship: AugmentedRpc<() => Observable>>; - }; - beefy: { - /** - * Returns hash of the latest BEEFY finalized block as seen by this client. - **/ - getFinalizedHead: AugmentedRpc<() => Observable>; - /** - * Returns the block most recently finalized by BEEFY, alongside side its justification. - **/ - subscribeJustifications: AugmentedRpc<() => Observable>; - }; - chain: { - /** - * Get header and body of a relay chain block - **/ - getBlock: AugmentedRpc<(hash?: BlockHash | string | Uint8Array) => Observable>; - /** - * Get the block hash for a specific block - **/ - getBlockHash: AugmentedRpc<(blockNumber?: BlockNumber | AnyNumber | Uint8Array) => Observable>; - /** - * Get hash of the last finalized block in the canon chain - **/ - getFinalizedHead: AugmentedRpc<() => Observable>; - /** - * Retrieves the header for a specific block - **/ - getHeader: AugmentedRpc<(hash?: BlockHash | string | Uint8Array) => Observable
>; - /** - * Retrieves the newest header via subscription - **/ - subscribeAllHeads: AugmentedRpc<() => Observable
>; - /** - * Retrieves the best finalized header via subscription - **/ - subscribeFinalizedHeads: AugmentedRpc<() => Observable
>; - /** - * Retrieves the best header via subscription - **/ - subscribeNewHeads: AugmentedRpc<() => Observable
>; - }; - childstate: { - /** - * Returns the keys with prefix from a child storage, leave empty to get all the keys - **/ - getKeys: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, prefix: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable>>; - /** - * Returns the keys with prefix from a child storage with pagination support - **/ - getKeysPaged: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, prefix: StorageKey | string | Uint8Array | any, count: u32 | AnyNumber | Uint8Array, startKey?: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable>>; - /** - * Returns a child storage entry at a specific block state - **/ - getStorage: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable>>; - /** - * Returns child storage entries for multiple keys at a specific block state - **/ - getStorageEntries: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, keys: Vec | (StorageKey | string | Uint8Array | any)[], at?: Hash | string | Uint8Array) => Observable>>>; - /** - * Returns the hash of a child storage entry at a block state - **/ - getStorageHash: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable>>; - /** - * Returns the size of a child storage entry at a block state - **/ - getStorageSize: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable>>; - }; - contracts: { - /** - * @deprecated Use the runtime interface `api.call.contractsApi.call` instead - * Executes a call to a contract - **/ - call: AugmentedRpc<(callRequest: ContractCallRequest | { origin?: any; dest?: any; value?: any; gasLimit?: any; storageDepositLimit?: any; inputData?: any } | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * @deprecated Use the runtime interface `api.call.contractsApi.getStorage` instead - * Returns the value under a specified storage key in a contract - **/ - getStorage: AugmentedRpc<(address: AccountId | string | Uint8Array, key: H256 | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>>; - /** - * @deprecated Use the runtime interface `api.call.contractsApi.instantiate` instead - * Instantiate a new contract - **/ - instantiate: AugmentedRpc<(request: InstantiateRequestV1 | { origin?: any; value?: any; gasLimit?: any; code?: any; data?: any; salt?: any } | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * @deprecated Not available in newer versions of the contracts interfaces - * Returns the projected time a given contract will be able to sustain paying its rent - **/ - rentProjection: AugmentedRpc<(address: AccountId | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>>; - /** - * @deprecated Use the runtime interface `api.call.contractsApi.uploadCode` instead - * Upload new code without instantiating a contract from it - **/ - uploadCode: AugmentedRpc<(uploadRequest: CodeUploadRequest | { origin?: any; code?: any; storageDepositLimit?: any } | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; - }; - dev: { - /** - * Reexecute the specified `block_hash` and gather statistics while doing so - **/ - getBlockStats: AugmentedRpc<(at: Hash | string | Uint8Array) => Observable>>; - }; - engine: { - /** - * Instructs the manual-seal authorship task to create a new block - **/ - createBlock: AugmentedRpc<(createEmpty: bool | boolean | Uint8Array, finalize: bool | boolean | Uint8Array, parentHash?: BlockHash | string | Uint8Array) => Observable>; - /** - * Instructs the manual-seal authorship task to finalize a block - **/ - finalizeBlock: AugmentedRpc<(hash: BlockHash | string | Uint8Array, justification?: Justification) => Observable>; - }; - eth: { - /** - * Returns accounts list. - **/ - accounts: AugmentedRpc<() => Observable>>; - /** - * Returns the blockNumber - **/ - blockNumber: AugmentedRpc<() => Observable>; - /** - * Call contract, returning the output data. - **/ - call: AugmentedRpc<(request: EthCallRequest | { from?: any; to?: any; gasPrice?: any; gas?: any; value?: any; data?: any; nonce?: any } | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable>; - /** - * Returns the chain ID used for transaction signing at the current best block. None is returned if not available. - **/ - chainId: AugmentedRpc<() => Observable>; - /** - * Returns block author. - **/ - coinbase: AugmentedRpc<() => Observable>; - /** - * Estimate gas needed for execution of given contract. - **/ - estimateGas: AugmentedRpc<(request: EthCallRequest | { from?: any; to?: any; gasPrice?: any; gas?: any; value?: any; data?: any; nonce?: any } | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable>; - /** - * Returns fee history for given block count & reward percentiles - **/ - feeHistory: AugmentedRpc<(blockCount: U256 | AnyNumber | Uint8Array, newestBlock: BlockNumber | AnyNumber | Uint8Array, rewardPercentiles: Option> | null | Uint8Array | Vec | (f64)[]) => Observable>; - /** - * Returns current gas price. - **/ - gasPrice: AugmentedRpc<() => Observable>; - /** - * Returns balance of the given account. - **/ - getBalance: AugmentedRpc<(address: H160 | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable>; - /** - * Returns block with given hash. - **/ - getBlockByHash: AugmentedRpc<(hash: H256 | string | Uint8Array, full: bool | boolean | Uint8Array) => Observable>>; - /** - * Returns block with given number. - **/ - getBlockByNumber: AugmentedRpc<(block: BlockNumber | AnyNumber | Uint8Array, full: bool | boolean | Uint8Array) => Observable>>; - /** - * Returns the number of transactions in a block with given hash. - **/ - getBlockTransactionCountByHash: AugmentedRpc<(hash: H256 | string | Uint8Array) => Observable>; - /** - * Returns the number of transactions in a block with given block number. - **/ - getBlockTransactionCountByNumber: AugmentedRpc<(block: BlockNumber | AnyNumber | Uint8Array) => Observable>; - /** - * Returns the code at given address at given time (block number). - **/ - getCode: AugmentedRpc<(address: H160 | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable>; - /** - * Returns filter changes since last poll. - **/ - getFilterChanges: AugmentedRpc<(index: U256 | AnyNumber | Uint8Array) => Observable>; - /** - * Returns all logs matching given filter (in a range 'from' - 'to'). - **/ - getFilterLogs: AugmentedRpc<(index: U256 | AnyNumber | Uint8Array) => Observable>>; - /** - * Returns logs matching given filter object. - **/ - getLogs: AugmentedRpc<(filter: EthFilter | { fromBlock?: any; toBlock?: any; blockHash?: any; address?: any; topics?: any } | string | Uint8Array) => Observable>>; - /** - * Returns proof for account and storage. - **/ - getProof: AugmentedRpc<(address: H160 | string | Uint8Array, storageKeys: Vec | (H256 | string | Uint8Array)[], number: BlockNumber | AnyNumber | Uint8Array) => Observable>; - /** - * Returns content of the storage at given address. - **/ - getStorageAt: AugmentedRpc<(address: H160 | string | Uint8Array, index: U256 | AnyNumber | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable>; - /** - * Returns transaction at given block hash and index. - **/ - getTransactionByBlockHashAndIndex: AugmentedRpc<(hash: H256 | string | Uint8Array, index: U256 | AnyNumber | Uint8Array) => Observable>; - /** - * Returns transaction by given block number and index. - **/ - getTransactionByBlockNumberAndIndex: AugmentedRpc<(number: BlockNumber | AnyNumber | Uint8Array, index: U256 | AnyNumber | Uint8Array) => Observable>; - /** - * Get transaction by its hash. - **/ - getTransactionByHash: AugmentedRpc<(hash: H256 | string | Uint8Array) => Observable>; - /** - * Returns the number of transactions sent from given address at given time (block number). - **/ - getTransactionCount: AugmentedRpc<(address: H160 | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable>; - /** - * Returns transaction receipt by transaction hash. - **/ - getTransactionReceipt: AugmentedRpc<(hash: H256 | string | Uint8Array) => Observable>; - /** - * Returns an uncles at given block and index. - **/ - getUncleByBlockHashAndIndex: AugmentedRpc<(hash: H256 | string | Uint8Array, index: U256 | AnyNumber | Uint8Array) => Observable>; - /** - * Returns an uncles at given block and index. - **/ - getUncleByBlockNumberAndIndex: AugmentedRpc<(number: BlockNumber | AnyNumber | Uint8Array, index: U256 | AnyNumber | Uint8Array) => Observable>; - /** - * Returns the number of uncles in a block with given hash. - **/ - getUncleCountByBlockHash: AugmentedRpc<(hash: H256 | string | Uint8Array) => Observable>; - /** - * Returns the number of uncles in a block with given block number. - **/ - getUncleCountByBlockNumber: AugmentedRpc<(number: BlockNumber | AnyNumber | Uint8Array) => Observable>; - /** - * Returns the hash of the current block, the seedHash, and the boundary condition to be met. - **/ - getWork: AugmentedRpc<() => Observable>; - /** - * Returns the number of hashes per second that the node is mining with. - **/ - hashrate: AugmentedRpc<() => Observable>; - /** - * Returns max priority fee per gas - **/ - maxPriorityFeePerGas: AugmentedRpc<() => Observable>; - /** - * Returns true if client is actively mining new blocks. - **/ - mining: AugmentedRpc<() => Observable>; - /** - * Returns id of new block filter. - **/ - newBlockFilter: AugmentedRpc<() => Observable>; - /** - * Returns id of new filter. - **/ - newFilter: AugmentedRpc<(filter: EthFilter | { fromBlock?: any; toBlock?: any; blockHash?: any; address?: any; topics?: any } | string | Uint8Array) => Observable>; - /** - * Returns id of new block filter. - **/ - newPendingTransactionFilter: AugmentedRpc<() => Observable>; - /** - * Returns protocol version encoded as a string (quotes are necessary). - **/ - protocolVersion: AugmentedRpc<() => Observable>; - /** - * Sends signed transaction, returning its hash. - **/ - sendRawTransaction: AugmentedRpc<(bytes: Bytes | string | Uint8Array) => Observable>; - /** - * Sends transaction; will block waiting for signer to return the transaction hash - **/ - sendTransaction: AugmentedRpc<(tx: EthTransactionRequest | { from?: any; to?: any; gasPrice?: any; gas?: any; value?: any; data?: any; nonce?: any } | string | Uint8Array) => Observable>; - /** - * Used for submitting mining hashrate. - **/ - submitHashrate: AugmentedRpc<(index: U256 | AnyNumber | Uint8Array, hash: H256 | string | Uint8Array) => Observable>; - /** - * Used for submitting a proof-of-work solution. - **/ - submitWork: AugmentedRpc<(nonce: H64 | string | Uint8Array, headerHash: H256 | string | Uint8Array, mixDigest: H256 | string | Uint8Array) => Observable>; - /** - * Subscribe to Eth subscription. - **/ - subscribe: AugmentedRpc<(kind: EthSubKind | 'newHeads' | 'logs' | 'newPendingTransactions' | 'syncing' | number | Uint8Array, params?: EthSubParams | { None: any } | { Logs: any } | string | Uint8Array) => Observable>; - /** - * Returns an object with data about the sync status or false. - **/ - syncing: AugmentedRpc<() => Observable>; - /** - * Uninstalls filter. - **/ - uninstallFilter: AugmentedRpc<(index: U256 | AnyNumber | Uint8Array) => Observable>; - }; - grandpa: { - /** - * Prove finality for the given block number, returning the Justification for the last block in the set. - **/ - proveFinality: AugmentedRpc<(blockNumber: BlockNumber | AnyNumber | Uint8Array) => Observable>>; - /** - * Returns the state of the current best round state as well as the ongoing background rounds - **/ - roundState: AugmentedRpc<() => Observable>; - /** - * Subscribes to grandpa justifications - **/ - subscribeJustifications: AugmentedRpc<() => Observable>; - }; - mmr: { - /** - * Generate MMR proof for the given block numbers. - **/ - generateProof: AugmentedRpc<(blockNumbers: Vec | (u64 | AnyNumber | Uint8Array)[], bestKnownBlockNumber?: u64 | AnyNumber | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Get the MMR root hash for the current best block. - **/ - root: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Verify an MMR proof - **/ - verifyProof: AugmentedRpc<(proof: MmrLeafBatchProof | { blockHash?: any; leaves?: any; proof?: any } | string | Uint8Array) => Observable>; - /** - * Verify an MMR proof statelessly given an mmr_root - **/ - verifyProofStateless: AugmentedRpc<(root: MmrHash | string | Uint8Array, proof: MmrLeafBatchProof | { blockHash?: any; leaves?: any; proof?: any } | string | Uint8Array) => Observable>; - }; - net: { - /** - * Returns true if client is actively listening for network connections. Otherwise false. - **/ - listening: AugmentedRpc<() => Observable>; - /** - * Returns number of peers connected to node. - **/ - peerCount: AugmentedRpc<() => Observable>; - /** - * Returns protocol version. - **/ - version: AugmentedRpc<() => Observable>; - }; - offchain: { - /** - * Get offchain local storage under given key and prefix - **/ - localStorageGet: AugmentedRpc<(kind: StorageKind | 'PERSISTENT' | 'LOCAL' | number | Uint8Array, key: Bytes | string | Uint8Array) => Observable>>; - /** - * Set offchain local storage under given key and prefix - **/ - localStorageSet: AugmentedRpc<(kind: StorageKind | 'PERSISTENT' | 'LOCAL' | number | Uint8Array, key: Bytes | string | Uint8Array, value: Bytes | string | Uint8Array) => Observable>; - }; - payment: { - /** - * @deprecated Use `api.call.transactionPaymentApi.queryFeeDetails` instead - * Query the detailed fee of a given encoded extrinsic - **/ - queryFeeDetails: AugmentedRpc<(extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * @deprecated Use `api.call.transactionPaymentApi.queryInfo` instead - * Retrieves the fee information for an encoded extrinsic - **/ - queryInfo: AugmentedRpc<(extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; - }; - rpc: { - /** - * Retrieves the list of RPC methods that are exposed by the node - **/ - methods: AugmentedRpc<() => Observable>; - }; - state: { - /** - * Perform a call to a builtin on the chain - **/ - call: AugmentedRpc<(method: Text | string, data: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Retrieves the keys with prefix of a specific child storage - **/ - getChildKeys: AugmentedRpc<(childStorageKey: StorageKey | string | Uint8Array | any, childDefinition: StorageKey | string | Uint8Array | any, childType: u32 | AnyNumber | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>>; - /** - * Returns proof of storage for child key entries at a specific block state. - **/ - getChildReadProof: AugmentedRpc<(childStorageKey: PrefixedStorageKey | string | Uint8Array, keys: Vec | (StorageKey | string | Uint8Array | any)[], at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Retrieves the child storage for a key - **/ - getChildStorage: AugmentedRpc<(childStorageKey: StorageKey | string | Uint8Array | any, childDefinition: StorageKey | string | Uint8Array | any, childType: u32 | AnyNumber | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Retrieves the child storage hash - **/ - getChildStorageHash: AugmentedRpc<(childStorageKey: StorageKey | string | Uint8Array | any, childDefinition: StorageKey | string | Uint8Array | any, childType: u32 | AnyNumber | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Retrieves the child storage size - **/ - getChildStorageSize: AugmentedRpc<(childStorageKey: StorageKey | string | Uint8Array | any, childDefinition: StorageKey | string | Uint8Array | any, childType: u32 | AnyNumber | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * @deprecated Use `api.rpc.state.getKeysPaged` to retrieve keys - * Retrieves the keys with a certain prefix - **/ - getKeys: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>>; - /** - * Returns the keys with prefix with pagination support. - **/ - getKeysPaged: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, count: u32 | AnyNumber | Uint8Array, startKey?: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>>; - /** - * Returns the runtime metadata - **/ - getMetadata: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable>; - /** - * @deprecated Use `api.rpc.state.getKeysPaged` to retrieve keys - * Returns the keys with prefix, leave empty to get all the keys (deprecated: Use getKeysPaged) - **/ - getPairs: AugmentedRpc<(prefix: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>>; - /** - * Returns proof of storage entries at a specific block state - **/ - getReadProof: AugmentedRpc<(keys: Vec | (StorageKey | string | Uint8Array | any)[], at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Get the runtime version - **/ - getRuntimeVersion: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Retrieves the storage for a key - **/ - getStorage: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, block?: Hash | Uint8Array | string) => Observable>; - /** - * Retrieves the storage hash - **/ - getStorageHash: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Retrieves the storage size - **/ - getStorageSize: AugmentedRpc<(key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Query historical storage entries (by key) starting from a start block - **/ - queryStorage: AugmentedRpc<(keys: Vec | (StorageKey | string | Uint8Array | any)[], fromBlock?: Hash | Uint8Array | string, toBlock?: Hash | Uint8Array | string) => Observable<[Hash, T][]>>; - /** - * Query storage entries (by key) starting at block hash given as the second parameter - **/ - queryStorageAt: AugmentedRpc<(keys: Vec | (StorageKey | string | Uint8Array | any)[], at?: Hash | Uint8Array | string) => Observable>; - /** - * Retrieves the runtime version via subscription - **/ - subscribeRuntimeVersion: AugmentedRpc<() => Observable>; - /** - * Subscribes to storage changes for the provided keys - **/ - subscribeStorage: AugmentedRpc<(keys?: Vec | (StorageKey | string | Uint8Array | any)[]) => Observable>; - /** - * Provides a way to trace the re-execution of a single block - **/ - traceBlock: AugmentedRpc<(block: Hash | string | Uint8Array, targets: Option | null | Uint8Array | Text | string, storageKeys: Option | null | Uint8Array | Text | string, methods: Option | null | Uint8Array | Text | string) => Observable>; - /** - * Check current migration state - **/ - trieMigrationStatus: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable>; - }; - syncstate: { - /** - * Returns the json-serialized chainspec running the node, with a sync state. - **/ - genSyncSpec: AugmentedRpc<(raw: bool | boolean | Uint8Array) => Observable>; - }; - system: { - /** - * Retrieves the next accountIndex as available on the node - **/ - accountNextIndex: AugmentedRpc<(accountId: AccountId | string | Uint8Array) => Observable>; - /** - * Adds the supplied directives to the current log filter - **/ - addLogFilter: AugmentedRpc<(directives: Text | string) => Observable>; - /** - * Adds a reserved peer - **/ - addReservedPeer: AugmentedRpc<(peer: Text | string) => Observable>; - /** - * Retrieves the chain - **/ - chain: AugmentedRpc<() => Observable>; - /** - * Retrieves the chain type - **/ - chainType: AugmentedRpc<() => Observable>; - /** - * Dry run an extrinsic at a given block - **/ - dryRun: AugmentedRpc<(extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable>; - /** - * Return health status of the node - **/ - health: AugmentedRpc<() => Observable>; - /** - * The addresses include a trailing /p2p/ with the local PeerId, and are thus suitable to be passed to addReservedPeer or as a bootnode address for example - **/ - localListenAddresses: AugmentedRpc<() => Observable>>; - /** - * Returns the base58-encoded PeerId of the node - **/ - localPeerId: AugmentedRpc<() => Observable>; - /** - * Retrieves the node name - **/ - name: AugmentedRpc<() => Observable>; - /** - * Returns current state of the network - **/ - networkState: AugmentedRpc<() => Observable>; - /** - * Returns the roles the node is running as - **/ - nodeRoles: AugmentedRpc<() => Observable>>; - /** - * Returns the currently connected peers - **/ - peers: AugmentedRpc<() => Observable>>; - /** - * Get a custom set of properties as a JSON object, defined in the chain spec - **/ - properties: AugmentedRpc<() => Observable>; - /** - * Remove a reserved peer - **/ - removeReservedPeer: AugmentedRpc<(peerId: Text | string) => Observable>; - /** - * Returns the list of reserved peers - **/ - reservedPeers: AugmentedRpc<() => Observable>>; - /** - * Resets the log filter to Substrate defaults - **/ - resetLogFilter: AugmentedRpc<() => Observable>; - /** - * Returns the state of the syncing of the node - **/ - syncState: AugmentedRpc<() => Observable>; - /** - * Retrieves the version of the node - **/ - version: AugmentedRpc<() => Observable>; - }; - web3: { - /** - * Returns current client version. - **/ - clientVersion: AugmentedRpc<() => Observable>; - /** - * Returns sha3 of the given data - **/ - sha3: AugmentedRpc<(data: Bytes | string | Uint8Array) => Observable>; - }; - } // RpcInterface -} // declare module diff --git a/packages/augment-api/src/interfaces/augment-api-runtime.ts b/packages/augment-api/src/interfaces/augment-api-runtime.ts deleted file mode 100644 index 9c5d8d675..000000000 --- a/packages/augment-api/src/interfaces/augment-api-runtime.ts +++ /dev/null @@ -1,208 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import '@polkadot/api-base/types/calls'; - -import type { DidApiAccountId, PublicCredentialError, PublicCredentialFilter, RawDidLinkedInfo, StakingRates } from '@kiltprotocol/augment-api/extraDefs'; -import type { ApiTypes, AugmentedCall, DecoratedCallBase } from '@polkadot/api-base/types'; -import type { Bytes, Null, Option, Result, Text, Vec, u32 } from '@polkadot/types-codec'; -import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types'; -import type { CheckInherentsResult, InherentData } from '@polkadot/types/interfaces/blockbuilder'; -import type { BlockHash } from '@polkadot/types/interfaces/chain'; -import type { AuthorityId } from '@polkadot/types/interfaces/consensus'; -import type { CollationInfo } from '@polkadot/types/interfaces/cumulus'; -import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics'; -import type { OpaqueMetadata } from '@polkadot/types/interfaces/metadata'; -import type { FeeDetails, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment'; -import type { AccountId, AccountId32, Balance, Block, Call, Hash, Header, Index, KeyTypeId, SlotDuration, Weight } from '@polkadot/types/interfaces/runtime'; -import type { RuntimeVersion } from '@polkadot/types/interfaces/state'; -import type { ApplyExtrinsicResult } from '@polkadot/types/interfaces/system'; -import type { TransactionSource, TransactionValidity } from '@polkadot/types/interfaces/txqueue'; -import type { PublicCredentialsCredentialsCredentialEntry } from '@polkadot/types/lookup'; -import type { IExtrinsic, Observable } from '@polkadot/types/types'; - -export type __AugmentedCall = AugmentedCall; -export type __DecoratedCallBase = DecoratedCallBase; - -declare module '@polkadot/api-base/types/calls' { - interface AugmentedCalls { - /** 0xbc9d89904f5b923f/1 */ - accountNonceApi: { - /** - * The API to query account nonce (aka transaction index) - **/ - accountNonce: AugmentedCall Observable>; - }; - /** 0xdd718d5cc53262d4/1 */ - auraApi: { - /** - * Return the current set of authorities. - **/ - authorities: AugmentedCall Observable>>; - /** - * Returns the slot duration for Aura. - **/ - slotDuration: AugmentedCall Observable>; - }; - /** 0x40fe3ad401f8959a/6 */ - blockBuilder: { - /** - * Apply the given extrinsic. - **/ - applyExtrinsic: AugmentedCall Observable>; - /** - * Check that the inherents are valid. - **/ - checkInherents: AugmentedCall Observable>; - /** - * Finish the current block. - **/ - finalizeBlock: AugmentedCall Observable
>; - /** - * Generate inherent extrinsics. - **/ - inherentExtrinsics: AugmentedCall Observable>>; - }; - /** 0xea93e3f16f3d6962/2 */ - collectCollationInfo: { - /** - * Collect information about a collation. - **/ - collectCollationInfo: AugmentedCall Observable>; - }; - /** 0xdf6acb689907609b/4 */ - core: { - /** - * Execute the given block. - **/ - executeBlock: AugmentedCall Observable>; - /** - * Initialize a block with the given header. - **/ - initializeBlock: AugmentedCall Observable>; - /** - * Returns the version of the runtime. - **/ - version: AugmentedCall Observable>; - }; - /** 0x26609555c0656603/2 */ - did: { - /** - * Return the information relative to the owner of the provided DID, if present. - **/ - query: AugmentedCall Observable>>; - /** - * Return the information relative to the DID to which the provided account is linked, if any. - **/ - queryByAccount: AugmentedCall Observable>>; - /** - * Return the information relative to the owner of the provided web3name, if any. - **/ - queryByWeb3Name: AugmentedCall Observable>>; - }; - /** 0x37e397fc7c91f5e4/2 */ - metadata: { - /** - * Returns the metadata of a runtime - **/ - metadata: AugmentedCall Observable>; - /** - * Returns the metadata at a given version. - **/ - metadataAtVersion: AugmentedCall Observable>>; - /** - * Returns the supported metadata versions. - **/ - metadataVersions: AugmentedCall Observable>>; - }; - /** 0xf78b278be53f454c/2 */ - offchainWorkerApi: { - /** - * Starts the off-chain task for given block header. - **/ - offchainWorker: AugmentedCall Observable>; - }; - /** 0xa47b7d544994c99b/1 */ - publicCredentials: { - /** - * Return the public credential with the specified ID, if found. - **/ - getById: AugmentedCall Observable>>; - /** - * Return all the public credentials linked to the specified subject. - An optional filter can be passed to be applied to the result before being returned to the client. - It returns an error if the provided specified subject ID is not valid. - **/ - getBySubject: AugmentedCall | null | Uint8Array | PublicCredentialFilter | { ctypeHash: any } | { attester: any } | string) => Observable>, PublicCredentialError>>>; - }; - /** 0xab3c0572291feb8b/1 */ - sessionKeys: { - /** - * Decode the given public session keys. - **/ - decodeSessionKeys: AugmentedCall Observable>>>>; - /** - * Generate a set of session keys with optionally using the given seed. - **/ - generateSessionKeys: AugmentedCall | null | Uint8Array | Bytes | string) => Observable>; - }; - /** 0x45bfba51a310b223/1 */ - staking: { - /** - * Calculate the current staking and reward rates for collators and delegators - **/ - getStakingRates: AugmentedCall Observable>; - /** - * Calculate the claimable staking rewards for a given account address - **/ - getUnclaimedStakingRewards: AugmentedCall Observable>; - }; - /** 0xd2bc9897eed08f15/3 */ - taggedTransactionQueue: { - /** - * Validate the transaction. - **/ - validateTransaction: AugmentedCall Observable>; - }; - /** 0x37c8bb1350a9a2a8/4 */ - transactionPaymentApi: { - /** - * The transaction fee details - **/ - queryFeeDetails: AugmentedCall Observable>; - /** - * The transaction info - **/ - queryInfo: AugmentedCall Observable>; - /** - * Query the output of the current LengthToFee given some input - **/ - queryLengthToFee: AugmentedCall Observable>; - /** - * Query the output of the current WeightToFee given some input - **/ - queryWeightToFee: AugmentedCall Observable>; - }; - /** 0xf3ff14d5ab527059/3 */ - transactionPaymentCallApi: { - /** - * The call fee details - **/ - queryCallFeeDetails: AugmentedCall Observable>; - /** - * The call info - **/ - queryCallInfo: AugmentedCall Observable>; - /** - * Query the output of the current LengthToFee given some input - **/ - queryLengthToFee: AugmentedCall Observable>; - /** - * Query the output of the current WeightToFee given some input - **/ - queryWeightToFee: AugmentedCall Observable>; - }; - } // AugmentedCalls -} // declare module diff --git a/packages/augment-api/src/interfaces/augment-api-tx.ts b/packages/augment-api/src/interfaces/augment-api-tx.ts deleted file mode 100644 index 27b9bb1d4..000000000 --- a/packages/augment-api/src/interfaces/augment-api-tx.ts +++ /dev/null @@ -1,949 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import '@polkadot/api-base/types/submittable'; - -import type { ApiTypes, AugmentedSubmittable, SubmittableExtrinsic, SubmittableExtrinsicFunction } from '@polkadot/api-base/types'; -import type { Bytes, Compact, Option, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; -import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types'; -import type { AccountId32, Call, H256, MultiAddress, Perquintill } from '@polkadot/types/interfaces/runtime'; -import type { CumulusPrimitivesParachainInherentParachainInherentData, DelegationDelegationHierarchyPermissions, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidServiceEndpointsDidEndpoint, FrameSupportPreimagesBounded, PalletDemocracyConviction, PalletDemocracyMetadataOwner, PalletDemocracyVoteAccountVote, PalletDidLookupAssociateAccountRequest, PalletDidLookupLinkableAccountLinkableAccountId, PalletMigrationEntriesToMigrate, PalletMultisigTimepoint, PalletVestingVestingInfo, PublicCredentialsCredentialsCredential, RuntimeCommonAuthorizationPalletAuthorize, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeSessionKeys, XcmV3MultiLocation, XcmV3WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; - -export type __AugmentedSubmittable = AugmentedSubmittable<() => unknown>; -export type __SubmittableExtrinsic = SubmittableExtrinsic; -export type __SubmittableExtrinsicFunction = SubmittableExtrinsicFunction; - -declare module '@polkadot/api-base/types/submittable' { - interface AugmentedSubmittables { - attestation: { - /** - * See [`Pallet::add`]. - **/ - add: AugmentedSubmittable<(claimHash: H256 | string | Uint8Array, ctypeHash: H256 | string | Uint8Array, authorization: Option | null | Uint8Array | RuntimeCommonAuthorizationPalletAuthorize | { Delegation: any } | string) => SubmittableExtrinsic, [H256, H256, Option]>; - /** - * See [`Pallet::change_deposit_owner`]. - **/ - changeDepositOwner: AugmentedSubmittable<(claimHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - /** - * See [`Pallet::reclaim_deposit`]. - **/ - reclaimDeposit: AugmentedSubmittable<(claimHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - /** - * See [`Pallet::remove`]. - **/ - remove: AugmentedSubmittable<(claimHash: H256 | string | Uint8Array, authorization: Option | null | Uint8Array | RuntimeCommonAuthorizationPalletAuthorize | { Delegation: any } | string) => SubmittableExtrinsic, [H256, Option]>; - /** - * See [`Pallet::revoke`]. - **/ - revoke: AugmentedSubmittable<(claimHash: H256 | string | Uint8Array, authorization: Option | null | Uint8Array | RuntimeCommonAuthorizationPalletAuthorize | { Delegation: any } | string) => SubmittableExtrinsic, [H256, Option]>; - /** - * See [`Pallet::update_deposit`]. - **/ - updateDeposit: AugmentedSubmittable<(claimHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - }; - balances: { - /** - * See [`Pallet::force_set_balance`]. - **/ - forceSetBalance: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, newFree: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; - /** - * See [`Pallet::force_transfer`]. - **/ - forceTransfer: AugmentedSubmittable<(source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress, Compact]>; - /** - * See [`Pallet::force_unreserve`]. - **/ - forceUnreserve: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u128]>; - /** - * See [`Pallet::set_balance_deprecated`]. - **/ - setBalanceDeprecated: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, newFree: Compact | AnyNumber | Uint8Array, oldReserved: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact, Compact]>; - /** - * See [`Pallet::transfer`]. - **/ - transfer: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; - /** - * See [`Pallet::transfer_all`]. - **/ - transferAll: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, keepAlive: bool | boolean | Uint8Array) => SubmittableExtrinsic, [MultiAddress, bool]>; - /** - * See [`Pallet::transfer_allow_death`]. - **/ - transferAllowDeath: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; - /** - * See [`Pallet::transfer_keep_alive`]. - **/ - transferKeepAlive: AugmentedSubmittable<(dest: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Compact]>; - /** - * See [`Pallet::upgrade_accounts`]. - **/ - upgradeAccounts: AugmentedSubmittable<(who: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; - }; - council: { - /** - * See [`Pallet::close`]. - **/ - close: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, proposalWeightBound: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact, SpWeightsWeightV2Weight, Compact]>; - /** - * See [`Pallet::disapprove_proposal`]. - **/ - disapproveProposal: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - /** - * See [`Pallet::execute`]. - **/ - execute: AugmentedSubmittable<(proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Call, Compact]>; - /** - * See [`Pallet::propose`]. - **/ - propose: AugmentedSubmittable<(threshold: Compact | AnyNumber | Uint8Array, proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Call, Compact]>; - /** - * See [`Pallet::set_members`]. - **/ - setMembers: AugmentedSubmittable<(newMembers: Vec | (AccountId32 | string | Uint8Array)[], prime: Option | null | Uint8Array | AccountId32 | string, oldCount: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Vec, Option, u32]>; - /** - * See [`Pallet::vote`]. - **/ - vote: AugmentedSubmittable<(proposal: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, approve: bool | boolean | Uint8Array) => SubmittableExtrinsic, [H256, Compact, bool]>; - }; - ctype: { - /** - * See [`Pallet::add`]. - **/ - add: AugmentedSubmittable<(ctype: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; - /** - * See [`Pallet::set_block_number`]. - **/ - setBlockNumber: AugmentedSubmittable<(ctypeHash: H256 | string | Uint8Array, blockNumber: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, u64]>; - }; - delegation: { - /** - * See [`Pallet::add_delegation`]. - **/ - addDelegation: AugmentedSubmittable<(delegationId: H256 | string | Uint8Array, parentId: H256 | string | Uint8Array, delegate: AccountId32 | string | Uint8Array, permissions: DelegationDelegationHierarchyPermissions | { bits?: any } | string | Uint8Array, delegateSignature: DidDidDetailsDidSignature | { ed25519: any } | { sr25519: any } | { ecdsa: any } | string | Uint8Array) => SubmittableExtrinsic, [H256, H256, AccountId32, DelegationDelegationHierarchyPermissions, DidDidDetailsDidSignature]>; - /** - * See [`Pallet::change_deposit_owner`]. - **/ - changeDepositOwner: AugmentedSubmittable<(delegationId: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - /** - * See [`Pallet::create_hierarchy`]. - **/ - createHierarchy: AugmentedSubmittable<(rootNodeId: H256 | string | Uint8Array, ctypeHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256, H256]>; - /** - * See [`Pallet::reclaim_deposit`]. - **/ - reclaimDeposit: AugmentedSubmittable<(delegationId: H256 | string | Uint8Array, maxRemovals: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, u32]>; - /** - * See [`Pallet::remove_delegation`]. - **/ - removeDelegation: AugmentedSubmittable<(delegationId: H256 | string | Uint8Array, maxRemovals: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, u32]>; - /** - * See [`Pallet::revoke_delegation`]. - **/ - revokeDelegation: AugmentedSubmittable<(delegationId: H256 | string | Uint8Array, maxParentChecks: u32 | AnyNumber | Uint8Array, maxRevocations: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, u32, u32]>; - /** - * See [`Pallet::update_deposit`]. - **/ - updateDeposit: AugmentedSubmittable<(delegationId: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - }; - democracy: { - /** - * See [`Pallet::blacklist`]. - **/ - blacklist: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, maybeRefIndex: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [H256, Option]>; - /** - * See [`Pallet::cancel_proposal`]. - **/ - cancelProposal: AugmentedSubmittable<(propIndex: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; - /** - * See [`Pallet::cancel_referendum`]. - **/ - cancelReferendum: AugmentedSubmittable<(refIndex: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; - /** - * See [`Pallet::clear_public_proposals`]. - **/ - clearPublicProposals: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::delegate`]. - **/ - delegate: AugmentedSubmittable<(to: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, conviction: PalletDemocracyConviction | 'None' | 'Locked1x' | 'Locked2x' | 'Locked3x' | 'Locked4x' | 'Locked5x' | 'Locked6x' | number | Uint8Array, balance: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, PalletDemocracyConviction, u128]>; - /** - * See [`Pallet::emergency_cancel`]. - **/ - emergencyCancel: AugmentedSubmittable<(refIndex: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; - /** - * See [`Pallet::external_propose`]. - **/ - externalPropose: AugmentedSubmittable<(proposal: FrameSupportPreimagesBounded | { Legacy: any } | { Inline: any } | { Lookup: any } | string | Uint8Array) => SubmittableExtrinsic, [FrameSupportPreimagesBounded]>; - /** - * See [`Pallet::external_propose_default`]. - **/ - externalProposeDefault: AugmentedSubmittable<(proposal: FrameSupportPreimagesBounded | { Legacy: any } | { Inline: any } | { Lookup: any } | string | Uint8Array) => SubmittableExtrinsic, [FrameSupportPreimagesBounded]>; - /** - * See [`Pallet::external_propose_majority`]. - **/ - externalProposeMajority: AugmentedSubmittable<(proposal: FrameSupportPreimagesBounded | { Legacy: any } | { Inline: any } | { Lookup: any } | string | Uint8Array) => SubmittableExtrinsic, [FrameSupportPreimagesBounded]>; - /** - * See [`Pallet::fast_track`]. - **/ - fastTrack: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, votingPeriod: u64 | AnyNumber | Uint8Array, delay: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, u64, u64]>; - /** - * See [`Pallet::propose`]. - **/ - propose: AugmentedSubmittable<(proposal: FrameSupportPreimagesBounded | { Legacy: any } | { Inline: any } | { Lookup: any } | string | Uint8Array, value: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [FrameSupportPreimagesBounded, Compact]>; - /** - * See [`Pallet::remove_other_vote`]. - **/ - removeOtherVote: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u32]>; - /** - * See [`Pallet::remove_vote`]. - **/ - removeVote: AugmentedSubmittable<(index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; - /** - * See [`Pallet::second`]. - **/ - second: AugmentedSubmittable<(proposal: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; - /** - * See [`Pallet::set_metadata`]. - **/ - setMetadata: AugmentedSubmittable<(owner: PalletDemocracyMetadataOwner | { External: any } | { Proposal: any } | { Referendum: any } | string | Uint8Array, maybeHash: Option | null | Uint8Array | H256 | string) => SubmittableExtrinsic, [PalletDemocracyMetadataOwner, Option]>; - /** - * See [`Pallet::undelegate`]. - **/ - undelegate: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::unlock`]. - **/ - unlock: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; - /** - * See [`Pallet::veto_external`]. - **/ - vetoExternal: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - /** - * See [`Pallet::vote`]. - **/ - vote: AugmentedSubmittable<(refIndex: Compact | AnyNumber | Uint8Array, vote: PalletDemocracyVoteAccountVote | { Standard: any } | { Split: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, PalletDemocracyVoteAccountVote]>; - }; - did: { - /** - * See [`Pallet::add_key_agreement_key`]. - **/ - addKeyAgreementKey: AugmentedSubmittable<(newKey: DidDidDetailsDidEncryptionKey | { x25519: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidEncryptionKey]>; - /** - * See [`Pallet::add_service_endpoint`]. - **/ - addServiceEndpoint: AugmentedSubmittable<(serviceEndpoint: DidServiceEndpointsDidEndpoint | { id?: any; serviceTypes?: any; urls?: any } | string | Uint8Array) => SubmittableExtrinsic, [DidServiceEndpointsDidEndpoint]>; - /** - * See [`Pallet::change_deposit_owner`]. - **/ - changeDepositOwner: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::create`]. - **/ - create: AugmentedSubmittable<(details: DidDidDetailsDidCreationDetails | { did?: any; submitter?: any; newKeyAgreementKeys?: any; newAttestationKey?: any; newDelegationKey?: any; newServiceDetails?: any } | string | Uint8Array, signature: DidDidDetailsDidSignature | { ed25519: any } | { sr25519: any } | { ecdsa: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidCreationDetails, DidDidDetailsDidSignature]>; - /** - * See [`Pallet::create_from_account`]. - **/ - createFromAccount: AugmentedSubmittable<(authenticationKey: DidDidDetailsDidVerificationKey | { ed25519: any } | { sr25519: any } | { ecdsa: any } | { Account: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidVerificationKey]>; - /** - * See [`Pallet::delete`]. - **/ - delete: AugmentedSubmittable<(endpointsToRemove: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; - /** - * See [`Pallet::dispatch_as`]. - **/ - dispatchAs: AugmentedSubmittable<(didIdentifier: AccountId32 | string | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [AccountId32, Call]>; - /** - * See [`Pallet::reclaim_deposit`]. - **/ - reclaimDeposit: AugmentedSubmittable<(didSubject: AccountId32 | string | Uint8Array, endpointsToRemove: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [AccountId32, u32]>; - /** - * See [`Pallet::remove_attestation_key`]. - **/ - removeAttestationKey: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::remove_delegation_key`]. - **/ - removeDelegationKey: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::remove_key_agreement_key`]. - **/ - removeKeyAgreementKey: AugmentedSubmittable<(keyId: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - /** - * See [`Pallet::remove_service_endpoint`]. - **/ - removeServiceEndpoint: AugmentedSubmittable<(serviceId: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; - /** - * See [`Pallet::set_attestation_key`]. - **/ - setAttestationKey: AugmentedSubmittable<(newKey: DidDidDetailsDidVerificationKey | { ed25519: any } | { sr25519: any } | { ecdsa: any } | { Account: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidVerificationKey]>; - /** - * See [`Pallet::set_authentication_key`]. - **/ - setAuthenticationKey: AugmentedSubmittable<(newKey: DidDidDetailsDidVerificationKey | { ed25519: any } | { sr25519: any } | { ecdsa: any } | { Account: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidVerificationKey]>; - /** - * See [`Pallet::set_delegation_key`]. - **/ - setDelegationKey: AugmentedSubmittable<(newKey: DidDidDetailsDidVerificationKey | { ed25519: any } | { sr25519: any } | { ecdsa: any } | { Account: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidVerificationKey]>; - /** - * See [`Pallet::submit_did_call`]. - **/ - submitDidCall: AugmentedSubmittable<(didCall: DidDidDetailsDidAuthorizedCallOperation | { did?: any; txCounter?: any; call?: any; blockNumber?: any; submitter?: any } | string | Uint8Array, signature: DidDidDetailsDidSignature | { ed25519: any } | { sr25519: any } | { ecdsa: any } | string | Uint8Array) => SubmittableExtrinsic, [DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidSignature]>; - /** - * See [`Pallet::update_deposit`]. - **/ - updateDeposit: AugmentedSubmittable<(did: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, [AccountId32]>; - }; - didLookup: { - /** - * See [`Pallet::associate_account`]. - **/ - associateAccount: AugmentedSubmittable<(req: PalletDidLookupAssociateAccountRequest | { Polkadot: any } | { Ethereum: any } | string | Uint8Array, expiration: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [PalletDidLookupAssociateAccountRequest, u64]>; - /** - * See [`Pallet::associate_sender`]. - **/ - associateSender: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::change_deposit_owner`]. - **/ - changeDepositOwner: AugmentedSubmittable<(account: PalletDidLookupLinkableAccountLinkableAccountId | { AccountId20: any } | { AccountId32: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletDidLookupLinkableAccountLinkableAccountId]>; - /** - * See [`Pallet::reclaim_deposit`]. - **/ - reclaimDeposit: AugmentedSubmittable<(account: PalletDidLookupLinkableAccountLinkableAccountId | { AccountId20: any } | { AccountId32: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletDidLookupLinkableAccountLinkableAccountId]>; - /** - * See [`Pallet::remove_account_association`]. - **/ - removeAccountAssociation: AugmentedSubmittable<(account: PalletDidLookupLinkableAccountLinkableAccountId | { AccountId20: any } | { AccountId32: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletDidLookupLinkableAccountLinkableAccountId]>; - /** - * See [`Pallet::remove_sender_association`]. - **/ - removeSenderAssociation: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::update_deposit`]. - **/ - updateDeposit: AugmentedSubmittable<(account: PalletDidLookupLinkableAccountLinkableAccountId | { AccountId20: any } | { AccountId32: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletDidLookupLinkableAccountLinkableAccountId]>; - }; - dmpQueue: { - /** - * See [`Pallet::service_overweight`]. - **/ - serviceOverweight: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array, weightLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u64, SpWeightsWeightV2Weight]>; - }; - indices: { - /** - * See [`Pallet::claim`]. - **/ - claim: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; - /** - * See [`Pallet::force_transfer`]. - **/ - forceTransfer: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, index: u64 | AnyNumber | Uint8Array, freeze: bool | boolean | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u64, bool]>; - /** - * See [`Pallet::free`]. - **/ - free: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; - /** - * See [`Pallet::freeze`]. - **/ - freeze: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; - /** - * See [`Pallet::transfer`]. - **/ - transfer: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, index: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u64]>; - }; - migration: { - /** - * See [`Pallet::update_balance`]. - **/ - updateBalance: AugmentedSubmittable<(requestedMigrations: PalletMigrationEntriesToMigrate | { attestation?: any; delegation?: any; did?: any; lookup?: any; w3n?: any; publicCredentials?: any } | string | Uint8Array) => SubmittableExtrinsic, [PalletMigrationEntriesToMigrate]>; - }; - multisig: { - /** - * See [`Pallet::approve_as_multi`]. - **/ - approveAsMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], maybeTimepoint: Option | null | Uint8Array | PalletMultisigTimepoint | { height?: any; index?: any } | string, callHash: U8aFixed | string | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, Option, U8aFixed, SpWeightsWeightV2Weight]>; - /** - * See [`Pallet::as_multi`]. - **/ - asMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], maybeTimepoint: Option | null | Uint8Array | PalletMultisigTimepoint | { height?: any; index?: any } | string, call: Call | IMethod | string | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, Option, Call, SpWeightsWeightV2Weight]>; - /** - * See [`Pallet::as_multi_threshold_1`]. - **/ - asMultiThreshold1: AugmentedSubmittable<(otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [Vec, Call]>; - /** - * See [`Pallet::cancel_as_multi`]. - **/ - cancelAsMulti: AugmentedSubmittable<(threshold: u16 | AnyNumber | Uint8Array, otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], timepoint: PalletMultisigTimepoint | { height?: any; index?: any } | string | Uint8Array, callHash: U8aFixed | string | Uint8Array) => SubmittableExtrinsic, [u16, Vec, PalletMultisigTimepoint, U8aFixed]>; - }; - parachainInfo: { - }; - parachainStaking: { - /** - * See [`Pallet::cancel_leave_candidates`]. - **/ - cancelLeaveCandidates: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::candidate_stake_less`]. - **/ - candidateStakeLess: AugmentedSubmittable<(less: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; - /** - * See [`Pallet::candidate_stake_more`]. - **/ - candidateStakeMore: AugmentedSubmittable<(more: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; - /** - * See [`Pallet::claim_rewards`]. - **/ - claimRewards: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::delegator_stake_less`]. - **/ - delegatorStakeLess: AugmentedSubmittable<(less: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; - /** - * See [`Pallet::delegator_stake_more`]. - **/ - delegatorStakeMore: AugmentedSubmittable<(more: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; - /** - * See [`Pallet::execute_leave_candidates`]. - **/ - executeLeaveCandidates: AugmentedSubmittable<(collator: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; - /** - * See [`Pallet::execute_scheduled_reward_change`]. - **/ - executeScheduledRewardChange: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::force_new_round`]. - **/ - forceNewRound: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::force_remove_candidate`]. - **/ - forceRemoveCandidate: AugmentedSubmittable<(collator: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; - /** - * See [`Pallet::increment_collator_rewards`]. - **/ - incrementCollatorRewards: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::increment_delegator_rewards`]. - **/ - incrementDelegatorRewards: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::init_leave_candidates`]. - **/ - initLeaveCandidates: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::join_candidates`]. - **/ - joinCandidates: AugmentedSubmittable<(stake: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; - /** - * See [`Pallet::join_delegators`]. - **/ - joinDelegators: AugmentedSubmittable<(collator: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, u128]>; - /** - * See [`Pallet::leave_delegators`]. - **/ - leaveDelegators: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::set_blocks_per_round`]. - **/ - setBlocksPerRound: AugmentedSubmittable<(updated: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; - /** - * See [`Pallet::set_inflation`]. - **/ - setInflation: AugmentedSubmittable<(collatorMaxRatePercentage: Perquintill | AnyNumber | Uint8Array, collatorAnnualRewardRatePercentage: Perquintill | AnyNumber | Uint8Array, delegatorMaxRatePercentage: Perquintill | AnyNumber | Uint8Array, delegatorAnnualRewardRatePercentage: Perquintill | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Perquintill, Perquintill, Perquintill, Perquintill]>; - /** - * See [`Pallet::set_max_candidate_stake`]. - **/ - setMaxCandidateStake: AugmentedSubmittable<(updated: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u128]>; - /** - * See [`Pallet::set_max_selected_candidates`]. - **/ - setMaxSelectedCandidates: AugmentedSubmittable<(updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; - /** - * See [`Pallet::unlock_unstaked`]. - **/ - unlockUnstaked: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; - }; - parachainSystem: { - /** - * See [`Pallet::authorize_upgrade`]. - **/ - authorizeUpgrade: AugmentedSubmittable<(codeHash: H256 | string | Uint8Array, checkVersion: bool | boolean | Uint8Array) => SubmittableExtrinsic, [H256, bool]>; - /** - * See [`Pallet::enact_authorized_upgrade`]. - **/ - enactAuthorizedUpgrade: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; - /** - * See [`Pallet::set_validation_data`]. - **/ - setValidationData: AugmentedSubmittable<(data: CumulusPrimitivesParachainInherentParachainInherentData | { validationData?: any; relayChainState?: any; downwardMessages?: any; horizontalMessages?: any } | string | Uint8Array) => SubmittableExtrinsic, [CumulusPrimitivesParachainInherentParachainInherentData]>; - /** - * See [`Pallet::sudo_send_upward_message`]. - **/ - sudoSendUpwardMessage: AugmentedSubmittable<(message: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; - }; - polkadotXcm: { - /** - * See [`Pallet::execute`]. - **/ - execute: AugmentedSubmittable<(message: XcmVersionedXcm | { V2: any } | { V3: any } | string | Uint8Array, maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedXcm, SpWeightsWeightV2Weight]>; - /** - * See [`Pallet::force_default_xcm_version`]. - **/ - forceDefaultXcmVersion: AugmentedSubmittable<(maybeXcmVersion: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, [Option]>; - /** - * See [`Pallet::force_subscribe_version_notify`]. - **/ - forceSubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation]>; - /** - * See [`Pallet::force_suspension`]. - **/ - forceSuspension: AugmentedSubmittable<(suspended: bool | boolean | Uint8Array) => SubmittableExtrinsic, [bool]>; - /** - * See [`Pallet::force_unsubscribe_version_notify`]. - **/ - forceUnsubscribeVersionNotify: AugmentedSubmittable<(location: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation]>; - /** - * See [`Pallet::force_xcm_version`]. - **/ - forceXcmVersion: AugmentedSubmittable<(location: XcmV3MultiLocation | { parents?: any; interior?: any } | string | Uint8Array, version: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmV3MultiLocation, u32]>; - /** - * See [`Pallet::limited_reserve_transfer_assets`]. - **/ - limitedReserveTransferAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array, weightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV3WeightLimit]>; - /** - * See [`Pallet::limited_teleport_assets`]. - **/ - limitedTeleportAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array, weightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV3WeightLimit]>; - /** - * See [`Pallet::reserve_transfer_assets`]. - **/ - reserveTransferAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32]>; - /** - * See [`Pallet::send`]. - **/ - send: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, message: XcmVersionedXcm | { V2: any } | { V3: any } | string | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedXcm]>; - /** - * See [`Pallet::teleport_assets`]. - **/ - teleportAssets: AugmentedSubmittable<(dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, feeAssetItem: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32]>; - }; - preimage: { - /** - * See [`Pallet::note_preimage`]. - **/ - notePreimage: AugmentedSubmittable<(bytes: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; - /** - * See [`Pallet::request_preimage`]. - **/ - requestPreimage: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - /** - * See [`Pallet::unnote_preimage`]. - **/ - unnotePreimage: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - /** - * See [`Pallet::unrequest_preimage`]. - **/ - unrequestPreimage: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - }; - proxy: { - /** - * See [`Pallet::add_proxy`]. - **/ - addProxy: AugmentedSubmittable<(delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, proxyType: SpiritnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming' | number | Uint8Array, delay: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, SpiritnetRuntimeProxyType, u64]>; - /** - * See [`Pallet::announce`]. - **/ - announce: AugmentedSubmittable<(real: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, callHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, H256]>; - /** - * See [`Pallet::create_pure`]. - **/ - createPure: AugmentedSubmittable<(proxyType: SpiritnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming' | number | Uint8Array, delay: u64 | AnyNumber | Uint8Array, index: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [SpiritnetRuntimeProxyType, u64, u16]>; - /** - * See [`Pallet::kill_pure`]. - **/ - killPure: AugmentedSubmittable<(spawner: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, proxyType: SpiritnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming' | number | Uint8Array, index: u16 | AnyNumber | Uint8Array, height: Compact | AnyNumber | Uint8Array, extIndex: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, SpiritnetRuntimeProxyType, u16, Compact, Compact]>; - /** - * See [`Pallet::proxy`]. - **/ - proxy: AugmentedSubmittable<(real: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, forceProxyType: Option | null | Uint8Array | SpiritnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming' | number, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, Option, Call]>; - /** - * See [`Pallet::proxy_announced`]. - **/ - proxyAnnounced: AugmentedSubmittable<(delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, real: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, forceProxyType: Option | null | Uint8Array | SpiritnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming' | number, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress, Option, Call]>; - /** - * See [`Pallet::reject_announcement`]. - **/ - rejectAnnouncement: AugmentedSubmittable<(delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, callHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, H256]>; - /** - * See [`Pallet::remove_announcement`]. - **/ - removeAnnouncement: AugmentedSubmittable<(real: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, callHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, H256]>; - /** - * See [`Pallet::remove_proxies`]. - **/ - removeProxies: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::remove_proxy`]. - **/ - removeProxy: AugmentedSubmittable<(delegate: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, proxyType: SpiritnetRuntimeProxyType | 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming' | number | Uint8Array, delay: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [MultiAddress, SpiritnetRuntimeProxyType, u64]>; - }; - publicCredentials: { - /** - * See [`Pallet::add`]. - **/ - add: AugmentedSubmittable<(credential: PublicCredentialsCredentialsCredential | { ctypeHash?: any; subject?: any; claims?: any; authorization?: any } | string | Uint8Array) => SubmittableExtrinsic, [PublicCredentialsCredentialsCredential]>; - /** - * See [`Pallet::change_deposit_owner`]. - **/ - changeDepositOwner: AugmentedSubmittable<(credentialId: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - /** - * See [`Pallet::reclaim_deposit`]. - **/ - reclaimDeposit: AugmentedSubmittable<(credentialId: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - /** - * See [`Pallet::remove`]. - **/ - remove: AugmentedSubmittable<(credentialId: H256 | string | Uint8Array, authorization: Option | null | Uint8Array | RuntimeCommonAuthorizationPalletAuthorize | { Delegation: any } | string) => SubmittableExtrinsic, [H256, Option]>; - /** - * See [`Pallet::revoke`]. - **/ - revoke: AugmentedSubmittable<(credentialId: H256 | string | Uint8Array, authorization: Option | null | Uint8Array | RuntimeCommonAuthorizationPalletAuthorize | { Delegation: any } | string) => SubmittableExtrinsic, [H256, Option]>; - /** - * See [`Pallet::unrevoke`]. - **/ - unrevoke: AugmentedSubmittable<(credentialId: H256 | string | Uint8Array, authorization: Option | null | Uint8Array | RuntimeCommonAuthorizationPalletAuthorize | { Delegation: any } | string) => SubmittableExtrinsic, [H256, Option]>; - /** - * See [`Pallet::update_deposit`]. - **/ - updateDeposit: AugmentedSubmittable<(credentialId: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - }; - scheduler: { - /** - * See [`Pallet::cancel`]. - **/ - cancel: AugmentedSubmittable<(when: u64 | AnyNumber | Uint8Array, index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64, u32]>; - /** - * See [`Pallet::cancel_named`]. - **/ - cancelNamed: AugmentedSubmittable<(id: U8aFixed | string | Uint8Array) => SubmittableExtrinsic, [U8aFixed]>; - /** - * See [`Pallet::schedule`]. - **/ - schedule: AugmentedSubmittable<(when: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [u64, Option>, u8, Call]>; - /** - * See [`Pallet::schedule_after`]. - **/ - scheduleAfter: AugmentedSubmittable<(after: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [u64, Option>, u8, Call]>; - /** - * See [`Pallet::schedule_named`]. - **/ - scheduleNamed: AugmentedSubmittable<(id: U8aFixed | string | Uint8Array, when: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [U8aFixed, u64, Option>, u8, Call]>; - /** - * See [`Pallet::schedule_named_after`]. - **/ - scheduleNamedAfter: AugmentedSubmittable<(id: U8aFixed | string | Uint8Array, after: u64 | AnyNumber | Uint8Array, maybePeriodic: Option> | null | Uint8Array | ITuple<[u64, u32]> | [u64 | AnyNumber | Uint8Array, u32 | AnyNumber | Uint8Array], priority: u8 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [U8aFixed, u64, Option>, u8, Call]>; - }; - session: { - /** - * See [`Pallet::purge_keys`]. - **/ - purgeKeys: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::set_keys`]. - **/ - setKeys: AugmentedSubmittable<(keys: SpiritnetRuntimeSessionKeys | { aura?: any } | string | Uint8Array, proof: Bytes | string | Uint8Array) => SubmittableExtrinsic, [SpiritnetRuntimeSessionKeys, Bytes]>; - }; - system: { - /** - * See [`Pallet::kill_prefix`]. - **/ - killPrefix: AugmentedSubmittable<(prefix: Bytes | string | Uint8Array, subkeys: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Bytes, u32]>; - /** - * See [`Pallet::kill_storage`]. - **/ - killStorage: AugmentedSubmittable<(keys: Vec | (Bytes | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; - /** - * See [`Pallet::remark`]. - **/ - remark: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; - /** - * See [`Pallet::remark_with_event`]. - **/ - remarkWithEvent: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; - /** - * See [`Pallet::set_code`]. - **/ - setCode: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; - /** - * See [`Pallet::set_code_without_checks`]. - **/ - setCodeWithoutChecks: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; - /** - * See [`Pallet::set_heap_pages`]. - **/ - setHeapPages: AugmentedSubmittable<(pages: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u64]>; - /** - * See [`Pallet::set_storage`]. - **/ - setStorage: AugmentedSubmittable<(items: Vec> | ([Bytes | string | Uint8Array, Bytes | string | Uint8Array])[]) => SubmittableExtrinsic, [Vec>]>; - }; - technicalCommittee: { - /** - * See [`Pallet::close`]. - **/ - close: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, proposalWeightBound: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact, SpWeightsWeightV2Weight, Compact]>; - /** - * See [`Pallet::disapprove_proposal`]. - **/ - disapproveProposal: AugmentedSubmittable<(proposalHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - /** - * See [`Pallet::execute`]. - **/ - execute: AugmentedSubmittable<(proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Call, Compact]>; - /** - * See [`Pallet::propose`]. - **/ - propose: AugmentedSubmittable<(threshold: Compact | AnyNumber | Uint8Array, proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact, Call, Compact]>; - /** - * See [`Pallet::set_members`]. - **/ - setMembers: AugmentedSubmittable<(newMembers: Vec | (AccountId32 | string | Uint8Array)[], prime: Option | null | Uint8Array | AccountId32 | string, oldCount: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Vec, Option, u32]>; - /** - * See [`Pallet::vote`]. - **/ - vote: AugmentedSubmittable<(proposal: H256 | string | Uint8Array, index: Compact | AnyNumber | Uint8Array, approve: bool | boolean | Uint8Array) => SubmittableExtrinsic, [H256, Compact, bool]>; - }; - technicalMembership: { - /** - * See [`Pallet::add_member`]. - **/ - addMember: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; - /** - * See [`Pallet::change_key`]. - **/ - changeKey: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; - /** - * See [`Pallet::clear_prime`]. - **/ - clearPrime: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::remove_member`]. - **/ - removeMember: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; - /** - * See [`Pallet::reset_members`]. - **/ - resetMembers: AugmentedSubmittable<(members: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; - /** - * See [`Pallet::set_prime`]. - **/ - setPrime: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; - /** - * See [`Pallet::swap_member`]. - **/ - swapMember: AugmentedSubmittable<(remove: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, add: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress]>; - }; - timestamp: { - /** - * See [`Pallet::set`]. - **/ - set: AugmentedSubmittable<(now: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; - }; - tips: { - /** - * See [`Pallet::close_tip`]. - **/ - closeTip: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - /** - * See [`Pallet::report_awesome`]. - **/ - reportAwesome: AugmentedSubmittable<(reason: Bytes | string | Uint8Array, who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Bytes, MultiAddress]>; - /** - * See [`Pallet::retract_tip`]. - **/ - retractTip: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - /** - * See [`Pallet::slash_tip`]. - **/ - slashTip: AugmentedSubmittable<(hash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; - /** - * See [`Pallet::tip`]. - **/ - tip: AugmentedSubmittable<(hash: H256 | string | Uint8Array, tipValue: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [H256, Compact]>; - /** - * See [`Pallet::tip_new`]. - **/ - tipNew: AugmentedSubmittable<(reason: Bytes | string | Uint8Array, who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, tipValue: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Bytes, MultiAddress, Compact]>; - }; - tipsMembership: { - /** - * See [`Pallet::add_member`]. - **/ - addMember: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; - /** - * See [`Pallet::change_key`]. - **/ - changeKey: AugmentedSubmittable<(updated: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; - /** - * See [`Pallet::clear_prime`]. - **/ - clearPrime: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::remove_member`]. - **/ - removeMember: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; - /** - * See [`Pallet::reset_members`]. - **/ - resetMembers: AugmentedSubmittable<(members: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; - /** - * See [`Pallet::set_prime`]. - **/ - setPrime: AugmentedSubmittable<(who: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; - /** - * See [`Pallet::swap_member`]. - **/ - swapMember: AugmentedSubmittable<(remove: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, add: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress]>; - }; - treasury: { - /** - * See [`Pallet::approve_proposal`]. - **/ - approveProposal: AugmentedSubmittable<(proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; - /** - * See [`Pallet::propose_spend`]. - **/ - proposeSpend: AugmentedSubmittable<(value: Compact | AnyNumber | Uint8Array, beneficiary: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; - /** - * See [`Pallet::reject_proposal`]. - **/ - rejectProposal: AugmentedSubmittable<(proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; - /** - * See [`Pallet::remove_approval`]. - **/ - removeApproval: AugmentedSubmittable<(proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact]>; - /** - * See [`Pallet::spend`]. - **/ - spend: AugmentedSubmittable<(amount: Compact | AnyNumber | Uint8Array, beneficiary: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [Compact, MultiAddress]>; - }; - utility: { - /** - * See [`Pallet::as_derivative`]. - **/ - asDerivative: AugmentedSubmittable<(index: u16 | AnyNumber | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [u16, Call]>; - /** - * See [`Pallet::batch`]. - **/ - batch: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; - /** - * See [`Pallet::batch_all`]. - **/ - batchAll: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; - /** - * See [`Pallet::dispatch_as`]. - **/ - dispatchAs: AugmentedSubmittable<(asOrigin: SpiritnetRuntimeOriginCaller | { system: any } | { Void: any } | { Council: any } | { TechnicalCommittee: any } | { Did: any } | { PolkadotXcm: any } | { CumulusXcm: any } | string | Uint8Array, call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [SpiritnetRuntimeOriginCaller, Call]>; - /** - * See [`Pallet::force_batch`]. - **/ - forceBatch: AugmentedSubmittable<(calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, [Vec]>; - /** - * See [`Pallet::with_weight`]. - **/ - withWeight: AugmentedSubmittable<(call: Call | IMethod | string | Uint8Array, weight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [Call, SpWeightsWeightV2Weight]>; - }; - vesting: { - /** - * See [`Pallet::force_vested_transfer`]. - **/ - forceVestedTransfer: AugmentedSubmittable<(source: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, schedule: PalletVestingVestingInfo | { locked?: any; perBlock?: any; startingBlock?: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, MultiAddress, PalletVestingVestingInfo]>; - /** - * See [`Pallet::merge_schedules`]. - **/ - mergeSchedules: AugmentedSubmittable<(schedule1Index: u32 | AnyNumber | Uint8Array, schedule2Index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32, u32]>; - /** - * See [`Pallet::vest`]. - **/ - vest: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::vested_transfer`]. - **/ - vestedTransfer: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array, schedule: PalletVestingVestingInfo | { locked?: any; perBlock?: any; startingBlock?: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress, PalletVestingVestingInfo]>; - /** - * See [`Pallet::vest_other`]. - **/ - vestOther: AugmentedSubmittable<(target: MultiAddress | { Id: any } | { Index: any } | { Raw: any } | { Address32: any } | { Address20: any } | string | Uint8Array) => SubmittableExtrinsic, [MultiAddress]>; - }; - web3Names: { - /** - * See [`Pallet::ban`]. - **/ - ban: AugmentedSubmittable<(name: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; - /** - * See [`Pallet::change_deposit_owner`]. - **/ - changeDepositOwner: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::claim`]. - **/ - claim: AugmentedSubmittable<(name: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; - /** - * See [`Pallet::reclaim_deposit`]. - **/ - reclaimDeposit: AugmentedSubmittable<(name: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; - /** - * See [`Pallet::release_by_owner`]. - **/ - releaseByOwner: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::unban`]. - **/ - unban: AugmentedSubmittable<(name: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; - /** - * See [`Pallet::update_deposit`]. - **/ - updateDeposit: AugmentedSubmittable<(nameInput: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; - }; - xcmpQueue: { - /** - * See [`Pallet::resume_xcm_execution`]. - **/ - resumeXcmExecution: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::service_overweight`]. - **/ - serviceOverweight: AugmentedSubmittable<(index: u64 | AnyNumber | Uint8Array, weightLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [u64, SpWeightsWeightV2Weight]>; - /** - * See [`Pallet::suspend_xcm_execution`]. - **/ - suspendXcmExecution: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * See [`Pallet::update_drop_threshold`]. - **/ - updateDropThreshold: AugmentedSubmittable<(updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; - /** - * See [`Pallet::update_resume_threshold`]. - **/ - updateResumeThreshold: AugmentedSubmittable<(updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; - /** - * See [`Pallet::update_suspend_threshold`]. - **/ - updateSuspendThreshold: AugmentedSubmittable<(updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; - /** - * See [`Pallet::update_threshold_weight`]. - **/ - updateThresholdWeight: AugmentedSubmittable<(updated: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpWeightsWeightV2Weight]>; - /** - * See [`Pallet::update_weight_restrict_decay`]. - **/ - updateWeightRestrictDecay: AugmentedSubmittable<(updated: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpWeightsWeightV2Weight]>; - /** - * See [`Pallet::update_xcmp_max_individual_weight`]. - **/ - updateXcmpMaxIndividualWeight: AugmentedSubmittable<(updated: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => SubmittableExtrinsic, [SpWeightsWeightV2Weight]>; - }; - } // AugmentedSubmittables -} // declare module diff --git a/packages/augment-api/src/interfaces/augment-api.ts b/packages/augment-api/src/interfaces/augment-api.ts deleted file mode 100644 index 53c9c7701..000000000 --- a/packages/augment-api/src/interfaces/augment-api.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -import './augment-api-consts.js'; -import './augment-api-errors.js'; -import './augment-api-events.js'; -import './augment-api-query.js'; -import './augment-api-tx.js'; -import './augment-api-rpc.js'; -import './augment-api-runtime.js'; diff --git a/packages/augment-api/src/interfaces/augment-types.ts b/packages/augment-api/src/interfaces/augment-types.ts deleted file mode 100644 index 367a080af..000000000 --- a/packages/augment-api/src/interfaces/augment-types.ts +++ /dev/null @@ -1,1244 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-defs`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import '@polkadot/types/types/registry'; - -import type { BlindedLeaves, BlindedValue, CompleteMerkleProof, DidApiAccountId, DidIdentityProviderError, DidKeyMerkleKey, DidKeyMerkleValue, DidMerkleProofError, DipProofRequest, IdentityCommitmentVersion, KeyId, KeyRelationship, LinkedAccountMerkleKey, LinkedAccountMerkleValue, LinkedDidIdentityProviderError, MerkleProof, MerkleRoot, PublicCredentialError, PublicCredentialFilter, RawDidLinkedInfo, RevealedLeaf, RevealedLeaves, RuntimeApiDipProofError, StakingRates, VerificationRelationship, Web3NameMerkleKey, Web3NameMerkleValue } from '@kiltprotocol/augment-api/extraDefs'; -import type { Data, StorageKey } from '@polkadot/types'; -import type { BitVec, Bool, Bytes, F32, F64, I128, I16, I256, I32, I64, I8, ISize, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, f32, f64, i128, i16, i256, i32, i64, i8, isize, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec'; -import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets'; -import type { BlockAttestations, IncludedBlocks, MoreAttestations } from '@polkadot/types/interfaces/attestations'; -import type { RawAuraPreDigest } from '@polkadot/types/interfaces/aura'; -import type { ExtrinsicOrHash, ExtrinsicStatus } from '@polkadot/types/interfaces/author'; -import type { UncleEntryItem } from '@polkadot/types/interfaces/authorship'; -import type { AllowedSlots, BabeAuthorityWeight, BabeBlockWeight, BabeEpochConfiguration, BabeEquivocationProof, BabeGenesisConfiguration, BabeGenesisConfigurationV1, BabeWeight, Epoch, EpochAuthorship, MaybeRandomness, MaybeVrf, NextConfigDescriptor, NextConfigDescriptorV1, OpaqueKeyOwnershipProof, Randomness, RawBabePreDigest, RawBabePreDigestCompat, RawBabePreDigestPrimary, RawBabePreDigestPrimaryTo159, RawBabePreDigestSecondaryPlain, RawBabePreDigestSecondaryTo159, RawBabePreDigestSecondaryVRF, RawBabePreDigestTo159, SlotNumber, VrfData, VrfOutput, VrfProof } from '@polkadot/types/interfaces/babe'; -import type { AccountData, BalanceLock, BalanceLockTo212, BalanceStatus, Reasons, ReserveData, ReserveIdentifier, VestingSchedule, WithdrawReasons } from '@polkadot/types/interfaces/balances'; -import type { BeefyAuthoritySet, BeefyCommitment, BeefyEquivocationProof, BeefyId, BeefyNextAuthoritySet, BeefyPayload, BeefyPayloadId, BeefySignedCommitment, BeefyVoteMessage, MmrRootHash, ValidatorSet, ValidatorSetId } from '@polkadot/types/interfaces/beefy'; -import type { BenchmarkBatch, BenchmarkConfig, BenchmarkList, BenchmarkMetadata, BenchmarkParameter, BenchmarkResult } from '@polkadot/types/interfaces/benchmark'; -import type { CheckInherentsResult, InherentData, InherentIdentifier } from '@polkadot/types/interfaces/blockbuilder'; -import type { BridgeMessageId, BridgedBlockHash, BridgedBlockNumber, BridgedHeader, CallOrigin, ChainId, DeliveredMessages, DispatchFeePayment, InboundLaneData, InboundRelayer, InitializationData, LaneId, MessageData, MessageKey, MessageNonce, MessagesDeliveryProofOf, MessagesProofOf, OperatingMode, OutboundLaneData, OutboundMessageFee, OutboundPayload, Parameter, RelayerId, UnrewardedRelayer, UnrewardedRelayersState } from '@polkadot/types/interfaces/bridges'; -import type { BlockHash } from '@polkadot/types/interfaces/chain'; -import type { PrefixedStorageKey } from '@polkadot/types/interfaces/childstate'; -import type { StatementKind } from '@polkadot/types/interfaces/claims'; -import type { CollectiveOrigin, MemberCount, ProposalIndex, Votes, VotesTo230 } from '@polkadot/types/interfaces/collective'; -import type { AuthorityId, RawVRFOutput } from '@polkadot/types/interfaces/consensus'; -import type { AliveContractInfo, CodeHash, CodeSource, CodeUploadRequest, CodeUploadResult, CodeUploadResultValue, ContractCallFlags, ContractCallRequest, ContractExecResult, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, ContractExecResultSuccessTo260, ContractExecResultTo255, ContractExecResultTo260, ContractExecResultTo267, ContractExecResultU64, ContractInfo, ContractInstantiateResult, ContractInstantiateResultTo267, ContractInstantiateResultTo299, ContractInstantiateResultU64, ContractReturnFlags, ContractStorageKey, DeletedContract, ExecReturnValue, Gas, HostFnWeights, HostFnWeightsTo264, InstantiateRequest, InstantiateRequestV1, InstantiateRequestV2, InstantiateReturnValue, InstantiateReturnValueOk, InstantiateReturnValueTo267, InstructionWeights, Limits, LimitsTo264, PrefabWasmModule, RentProjection, Schedule, ScheduleTo212, ScheduleTo258, ScheduleTo264, SeedOf, StorageDeposit, TombstoneContractInfo, TrieId } from '@polkadot/types/interfaces/contracts'; -import type { ContractConstructorSpecLatest, ContractConstructorSpecV0, ContractConstructorSpecV1, ContractConstructorSpecV2, ContractConstructorSpecV3, ContractContractSpecV0, ContractContractSpecV1, ContractContractSpecV2, ContractContractSpecV3, ContractContractSpecV4, ContractCryptoHasher, ContractDiscriminant, ContractDisplayName, ContractEventParamSpecLatest, ContractEventParamSpecV0, ContractEventParamSpecV2, ContractEventSpecLatest, ContractEventSpecV0, ContractEventSpecV1, ContractEventSpecV2, ContractLayoutArray, ContractLayoutCell, ContractLayoutEnum, ContractLayoutHash, ContractLayoutHashingStrategy, ContractLayoutKey, ContractLayoutStruct, ContractLayoutStructField, ContractMessageParamSpecLatest, ContractMessageParamSpecV0, ContractMessageParamSpecV2, ContractMessageSpecLatest, ContractMessageSpecV0, ContractMessageSpecV1, ContractMessageSpecV2, ContractMetadata, ContractMetadataLatest, ContractMetadataV0, ContractMetadataV1, ContractMetadataV2, ContractMetadataV3, ContractMetadataV4, ContractProject, ContractProjectContract, ContractProjectInfo, ContractProjectSource, ContractProjectV0, ContractSelector, ContractStorageLayout, ContractTypeSpec } from '@polkadot/types/interfaces/contractsAbi'; -import type { FundIndex, FundInfo, LastContribution, TrieIndex } from '@polkadot/types/interfaces/crowdloan'; -import type { CollationInfo, CollationInfoV1, ConfigData, MessageId, OverweightIndex, PageCounter, PageIndexData } from '@polkadot/types/interfaces/cumulus'; -import type { AccountVote, AccountVoteSplit, AccountVoteStandard, Conviction, Delegations, PreimageStatus, PreimageStatusAvailable, PriorLock, PropIndex, Proposal, ProxyState, ReferendumIndex, ReferendumInfo, ReferendumInfoFinished, ReferendumInfoTo239, ReferendumStatus, Tally, Voting, VotingDelegating, VotingDirect, VotingDirectVote } from '@polkadot/types/interfaces/democracy'; -import type { BlockStats } from '@polkadot/types/interfaces/dev'; -import type { ApprovalFlag, DefunctVoter, Renouncing, SetIndex, Vote, VoteIndex, VoteThreshold, VoterInfo } from '@polkadot/types/interfaces/elections'; -import type { CreatedBlock, ImportedAux } from '@polkadot/types/interfaces/engine'; -import type { BlockV0, BlockV1, BlockV2, EIP1559Transaction, EIP2930Transaction, EthAccessList, EthAccessListItem, EthAccount, EthAddress, EthBlock, EthBloom, EthCallRequest, EthFeeHistory, EthFilter, EthFilterAddress, EthFilterChanges, EthFilterTopic, EthFilterTopicEntry, EthFilterTopicInner, EthHeader, EthLog, EthReceipt, EthReceiptV0, EthReceiptV3, EthRichBlock, EthRichHeader, EthStorageProof, EthSubKind, EthSubParams, EthSubResult, EthSyncInfo, EthSyncStatus, EthTransaction, EthTransactionAction, EthTransactionCondition, EthTransactionRequest, EthTransactionSignature, EthTransactionStatus, EthWork, EthereumAccountId, EthereumAddress, EthereumLookupSource, EthereumSignature, LegacyTransaction, TransactionV0, TransactionV1, TransactionV2 } from '@polkadot/types/interfaces/eth'; -import type { EvmAccount, EvmCallInfo, EvmCreateInfo, EvmLog, EvmVicinity, ExitError, ExitFatal, ExitReason, ExitRevert, ExitSucceed } from '@polkadot/types/interfaces/evm'; -import type { AnySignature, EcdsaSignature, Ed25519Signature, Era, Extrinsic, ExtrinsicEra, ExtrinsicPayload, ExtrinsicPayloadUnknown, ExtrinsicPayloadV4, ExtrinsicSignature, ExtrinsicSignatureV4, ExtrinsicUnknown, ExtrinsicV4, ImmortalEra, MortalEra, MultiSignature, Signature, SignerPayload, Sr25519Signature } from '@polkadot/types/interfaces/extrinsics'; -import type { FungiblesAccessError } from '@polkadot/types/interfaces/fungibles'; -import type { AssetOptions, Owner, PermissionLatest, PermissionVersions, PermissionsV1 } from '@polkadot/types/interfaces/genericAsset'; -import type { ActiveGilt, ActiveGiltsTotal, ActiveIndex, GiltBid } from '@polkadot/types/interfaces/gilt'; -import type { AuthorityIndex, AuthorityList, AuthoritySet, AuthoritySetChange, AuthoritySetChanges, AuthorityWeight, DelayKind, DelayKindBest, EncodedFinalityProofs, ForkTreePendingChange, ForkTreePendingChangeNode, GrandpaCommit, GrandpaEquivocation, GrandpaEquivocationProof, GrandpaEquivocationValue, GrandpaJustification, GrandpaPrecommit, GrandpaPrevote, GrandpaSignedPrecommit, JustificationNotification, KeyOwnerProof, NextAuthority, PendingChange, PendingPause, PendingResume, Precommits, Prevotes, ReportedRoundStates, RoundState, SetId, StoredPendingChange, StoredState } from '@polkadot/types/interfaces/grandpa'; -import type { IdentityFields, IdentityInfo, IdentityInfoAdditional, IdentityInfoTo198, IdentityJudgement, RegistrarIndex, RegistrarInfo, Registration, RegistrationJudgement, RegistrationTo198 } from '@polkadot/types/interfaces/identity'; -import type { AuthIndex, AuthoritySignature, Heartbeat, HeartbeatTo244, OpaqueMultiaddr, OpaqueNetworkState, OpaquePeerId } from '@polkadot/types/interfaces/imOnline'; -import type { CallIndex, LotteryConfig } from '@polkadot/types/interfaces/lottery'; -import type { ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV13, ErrorMetadataV14, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV13, EventMetadataV14, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, ExtrinsicMetadataV13, ExtrinsicMetadataV14, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV13, FunctionArgumentMetadataV14, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV13, FunctionMetadataV14, FunctionMetadataV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV13, MetadataV14, MetadataV15, MetadataV9, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV13, ModuleConstantMetadataV9, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV13, ModuleMetadataV9, OpaqueMetadata, PalletCallMetadataLatest, PalletCallMetadataV14, PalletConstantMetadataLatest, PalletConstantMetadataV14, PalletErrorMetadataLatest, PalletErrorMetadataV14, PalletEventMetadataLatest, PalletEventMetadataV14, PalletMetadataLatest, PalletMetadataV14, PalletMetadataV15, PalletStorageMetadataLatest, PalletStorageMetadataV14, PortableType, PortableTypeV14, RuntimeApiMetadataLatest, RuntimeApiMetadataV15, RuntimeApiMethodMetadataV15, RuntimeApiMethodParamMetadataV15, SignedExtensionMetadataLatest, SignedExtensionMetadataV14, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV13, StorageEntryMetadataV14, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV13, StorageEntryModifierV14, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV13, StorageEntryTypeV14, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV13, StorageHasherV14, StorageHasherV9, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV13, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata'; -import type { MmrBatchProof, MmrEncodableOpaqueLeaf, MmrError, MmrHash, MmrLeafBatchProof, MmrLeafIndex, MmrLeafProof, MmrNodeIndex, MmrProof } from '@polkadot/types/interfaces/mmr'; -import type { NftCollectionId, NftItemId } from '@polkadot/types/interfaces/nfts'; -import type { NpApiError, NpPoolId } from '@polkadot/types/interfaces/nompools'; -import type { StorageKind } from '@polkadot/types/interfaces/offchain'; -import type { DeferredOffenceOf, Kind, OffenceDetails, Offender, OpaqueTimeSlot, ReportIdOf, Reporter } from '@polkadot/types/interfaces/offences'; -import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateEvent, CandidateHash, CandidateInfo, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, CoreState, DisputeLocation, DisputeResult, DisputeState, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExecutorParam, ExecutorParams, ExecutorParamsHash, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, GroupRotationInfo, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OccupiedCore, OccupiedCoreAssumption, OldV1SessionInfo, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, PvfCheckStatement, PvfExecTimeoutKind, PvfPrepTimeoutKind, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, ReplacementTimes, Retriable, ScheduledCore, Scheduling, ScrapedOnChainVotes, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, SlotRange10, Statement, SubId, SystemInherentData, TransientValidationData, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersData10, WinnersDataTuple, WinnersDataTuple10, WinningData, WinningData10, WinningDataEntry } from '@polkadot/types/interfaces/parachains'; -import type { FeeDetails, InclusionFee, RuntimeDispatchInfo, RuntimeDispatchInfoV1, RuntimeDispatchInfoV2 } from '@polkadot/types/interfaces/payment'; -import type { Approvals } from '@polkadot/types/interfaces/poll'; -import type { ProxyAnnouncement, ProxyDefinition, ProxyType } from '@polkadot/types/interfaces/proxy'; -import type { AccountStatus, AccountValidity } from '@polkadot/types/interfaces/purchase'; -import type { ActiveRecovery, RecoveryConfig } from '@polkadot/types/interfaces/recovery'; -import type { RpcMethods } from '@polkadot/types/interfaces/rpc'; -import type { AccountId, AccountId20, AccountId32, AccountId33, AccountIdOf, AccountIndex, Address, AssetId, Balance, BalanceOf, Block, BlockNumber, BlockNumberFor, BlockNumberOf, Call, CallHash, CallHashOf, ChangesTrieConfiguration, ChangesTrieSignal, CodecHash, Consensus, ConsensusEngineId, CrateVersion, Digest, DigestItem, EncodedJustification, ExtrinsicsWeight, Fixed128, Fixed64, FixedI128, FixedI64, FixedU128, FixedU64, H1024, H128, H160, H2048, H256, H32, H512, H64, Hash, Header, HeaderPartial, I32F32, Index, IndicesLookupSource, Justification, Justifications, KeyTypeId, KeyValue, LockIdentifier, LookupSource, LookupTarget, ModuleId, Moment, MultiAddress, MultiSigner, OpaqueCall, Origin, OriginCaller, PalletId, PalletVersion, PalletsOrigin, Pays, PerU16, Perbill, Percent, Permill, Perquintill, Phantom, PhantomData, PreRuntime, Releases, RuntimeCall, RuntimeDbWeight, RuntimeEvent, Seal, SealV0, SignedBlock, SignedBlockWithJustification, SignedBlockWithJustifications, Slot, SlotDuration, StorageData, StorageInfo, StorageProof, TransactionInfo, TransactionLongevity, TransactionPriority, TransactionStorageProof, TransactionTag, U32F32, ValidatorId, ValidatorIdOf, Weight, WeightMultiplier, WeightV0, WeightV1, WeightV2 } from '@polkadot/types/interfaces/runtime'; -import type { Si0Field, Si0LookupTypeId, Si0Path, Si0Type, Si0TypeDef, Si0TypeDefArray, Si0TypeDefBitSequence, Si0TypeDefCompact, Si0TypeDefComposite, Si0TypeDefPhantom, Si0TypeDefPrimitive, Si0TypeDefSequence, Si0TypeDefTuple, Si0TypeDefVariant, Si0TypeParameter, Si0Variant, Si1Field, Si1LookupTypeId, Si1Path, Si1Type, Si1TypeDef, Si1TypeDefArray, Si1TypeDefBitSequence, Si1TypeDefCompact, Si1TypeDefComposite, Si1TypeDefPrimitive, Si1TypeDefSequence, Si1TypeDefTuple, Si1TypeDefVariant, Si1TypeParameter, Si1Variant, SiField, SiLookupTypeId, SiPath, SiType, SiTypeDef, SiTypeDefArray, SiTypeDefBitSequence, SiTypeDefCompact, SiTypeDefComposite, SiTypeDefPrimitive, SiTypeDefSequence, SiTypeDefTuple, SiTypeDefVariant, SiTypeParameter, SiVariant } from '@polkadot/types/interfaces/scaleInfo'; -import type { Period, Priority, SchedulePeriod, SchedulePriority, Scheduled, ScheduledTo254, TaskAddress } from '@polkadot/types/interfaces/scheduler'; -import type { BeefyKey, FullIdentification, IdentificationTuple, Keys, MembershipProof, SessionIndex, SessionKeys1, SessionKeys10, SessionKeys10B, SessionKeys2, SessionKeys3, SessionKeys4, SessionKeys5, SessionKeys6, SessionKeys6B, SessionKeys7, SessionKeys7B, SessionKeys8, SessionKeys8B, SessionKeys9, SessionKeys9B, ValidatorCount } from '@polkadot/types/interfaces/session'; -import type { Bid, BidKind, SocietyJudgement, SocietyVote, StrikeCount, VouchingStatus } from '@polkadot/types/interfaces/society'; -import type { ActiveEraInfo, CompactAssignments, CompactAssignmentsTo257, CompactAssignmentsTo265, CompactAssignmentsWith16, CompactAssignmentsWith24, CompactScore, CompactScoreCompact, ElectionCompute, ElectionPhase, ElectionResult, ElectionScore, ElectionSize, ElectionStatus, EraIndex, EraPoints, EraRewardPoints, EraRewards, Exposure, ExtendedBalance, Forcing, IndividualExposure, KeyType, MomentOf, Nominations, NominatorIndex, NominatorIndexCompact, OffchainAccuracy, OffchainAccuracyCompact, PhragmenScore, Points, RawSolution, RawSolutionTo265, RawSolutionWith16, RawSolutionWith24, ReadySolution, RewardDestination, RewardPoint, RoundSnapshot, SeatHolder, SignedSubmission, SignedSubmissionOf, SignedSubmissionTo276, SlashJournalEntry, SlashingSpans, SlashingSpansTo204, SolutionOrSnapshotSize, SolutionSupport, SolutionSupports, SpanIndex, SpanRecord, StakingLedger, StakingLedgerTo223, StakingLedgerTo240, SubmissionIndicesOf, Supports, UnappliedSlash, UnappliedSlashOther, UnlockChunk, ValidatorIndex, ValidatorIndexCompact, ValidatorPrefs, ValidatorPrefsTo145, ValidatorPrefsTo196, ValidatorPrefsWithBlocked, ValidatorPrefsWithCommission, VoteWeight, Voter } from '@polkadot/types/interfaces/staking'; -import type { ApiId, BlockTrace, BlockTraceEvent, BlockTraceEventData, BlockTraceSpan, KeyValueOption, MigrationStatusResult, ReadProof, RuntimeVersion, RuntimeVersionApi, RuntimeVersionPartial, RuntimeVersionPre3, RuntimeVersionPre4, SpecVersion, StorageChangeSet, TraceBlockResponse, TraceError } from '@polkadot/types/interfaces/state'; -import type { WeightToFeeCoefficient } from '@polkadot/types/interfaces/support'; -import type { AccountInfo, AccountInfoWithDualRefCount, AccountInfoWithProviders, AccountInfoWithRefCount, AccountInfoWithRefCountU8, AccountInfoWithTripleRefCount, ApplyExtrinsicResult, ApplyExtrinsicResultPre6, ArithmeticError, BlockLength, BlockWeights, ChainProperties, ChainType, ConsumedWeight, DigestOf, DispatchClass, DispatchError, DispatchErrorModule, DispatchErrorModulePre6, DispatchErrorModuleU8, DispatchErrorModuleU8a, DispatchErrorPre6, DispatchErrorPre6First, DispatchErrorTo198, DispatchInfo, DispatchInfoTo190, DispatchInfoTo244, DispatchOutcome, DispatchOutcomePre6, DispatchResult, DispatchResultOf, DispatchResultTo198, Event, EventId, EventIndex, EventRecord, Health, InvalidTransaction, Key, LastRuntimeUpgradeInfo, NetworkState, NetworkStatePeerset, NetworkStatePeersetInfo, NodeRole, NotConnectedPeer, Peer, PeerEndpoint, PeerEndpointAddr, PeerInfo, PeerPing, PerDispatchClassU32, PerDispatchClassWeight, PerDispatchClassWeightsPerClass, Phase, RawOrigin, RefCount, RefCountTo259, SyncState, SystemOrigin, TokenError, TransactionValidityError, TransactionalError, UnknownTransaction, WeightPerClass } from '@polkadot/types/interfaces/system'; -import type { Bounty, BountyIndex, BountyStatus, BountyStatusActive, BountyStatusCuratorProposed, BountyStatusPendingPayout, OpenTip, OpenTipFinderTo225, OpenTipTip, OpenTipTo225, TreasuryProposal } from '@polkadot/types/interfaces/treasury'; -import type { Multiplier } from '@polkadot/types/interfaces/txpayment'; -import type { TransactionSource, TransactionValidity, ValidTransaction } from '@polkadot/types/interfaces/txqueue'; -import type { ClassDetails, ClassId, ClassMetadata, DepositBalance, DepositBalanceOf, DestroyWitness, InstanceDetails, InstanceId, InstanceMetadata } from '@polkadot/types/interfaces/uniques'; -import type { Multisig, Timepoint } from '@polkadot/types/interfaces/utility'; -import type { VestingInfo } from '@polkadot/types/interfaces/vesting'; -import type { AssetInstance, AssetInstanceV0, AssetInstanceV1, AssetInstanceV2, BodyId, BodyPart, DoubleEncodedCall, Fungibility, FungibilityV0, FungibilityV1, FungibilityV2, InboundStatus, InstructionV2, InteriorMultiLocation, Junction, JunctionV0, JunctionV1, JunctionV2, Junctions, JunctionsV1, JunctionsV2, MultiAsset, MultiAssetFilter, MultiAssetFilterV1, MultiAssetFilterV2, MultiAssetV0, MultiAssetV1, MultiAssetV2, MultiAssets, MultiAssetsV1, MultiAssetsV2, MultiLocation, MultiLocationV0, MultiLocationV1, MultiLocationV2, NetworkId, OriginKindV0, OriginKindV1, OriginKindV2, OutboundStatus, Outcome, QueryId, QueryStatus, QueueConfigData, Response, ResponseV0, ResponseV1, ResponseV2, ResponseV2Error, ResponseV2Result, VersionMigrationStage, VersionedMultiAsset, VersionedMultiAssets, VersionedMultiLocation, VersionedResponse, VersionedXcm, WeightLimitV2, WildFungibility, WildFungibilityV0, WildFungibilityV1, WildFungibilityV2, WildMultiAsset, WildMultiAssetV1, WildMultiAssetV2, Xcm, XcmAssetId, XcmError, XcmErrorV0, XcmErrorV1, XcmErrorV2, XcmOrder, XcmOrderV0, XcmOrderV1, XcmOrderV2, XcmOrigin, XcmOriginKind, XcmV0, XcmV1, XcmV2, XcmVersion, XcmpMessageFormat } from '@polkadot/types/interfaces/xcm'; - -declare module '@polkadot/types/types/registry' { - interface InterfaceTypes { - AbridgedCandidateReceipt: AbridgedCandidateReceipt; - AbridgedHostConfiguration: AbridgedHostConfiguration; - AbridgedHrmpChannel: AbridgedHrmpChannel; - AccountData: AccountData; - AccountId: AccountId; - AccountId20: AccountId20; - AccountId32: AccountId32; - AccountId33: AccountId33; - AccountIdOf: AccountIdOf; - AccountIndex: AccountIndex; - AccountInfo: AccountInfo; - AccountInfoWithDualRefCount: AccountInfoWithDualRefCount; - AccountInfoWithProviders: AccountInfoWithProviders; - AccountInfoWithRefCount: AccountInfoWithRefCount; - AccountInfoWithRefCountU8: AccountInfoWithRefCountU8; - AccountInfoWithTripleRefCount: AccountInfoWithTripleRefCount; - AccountStatus: AccountStatus; - AccountValidity: AccountValidity; - AccountVote: AccountVote; - AccountVoteSplit: AccountVoteSplit; - AccountVoteStandard: AccountVoteStandard; - ActiveEraInfo: ActiveEraInfo; - ActiveGilt: ActiveGilt; - ActiveGiltsTotal: ActiveGiltsTotal; - ActiveIndex: ActiveIndex; - ActiveRecovery: ActiveRecovery; - Address: Address; - AliveContractInfo: AliveContractInfo; - AllowedSlots: AllowedSlots; - AnySignature: AnySignature; - ApiId: ApiId; - ApplyExtrinsicResult: ApplyExtrinsicResult; - ApplyExtrinsicResultPre6: ApplyExtrinsicResultPre6; - ApprovalFlag: ApprovalFlag; - Approvals: Approvals; - ArithmeticError: ArithmeticError; - AssetApproval: AssetApproval; - AssetApprovalKey: AssetApprovalKey; - AssetBalance: AssetBalance; - AssetDestroyWitness: AssetDestroyWitness; - AssetDetails: AssetDetails; - AssetId: AssetId; - AssetInstance: AssetInstance; - AssetInstanceV0: AssetInstanceV0; - AssetInstanceV1: AssetInstanceV1; - AssetInstanceV2: AssetInstanceV2; - AssetMetadata: AssetMetadata; - AssetOptions: AssetOptions; - AssignmentId: AssignmentId; - AssignmentKind: AssignmentKind; - AttestedCandidate: AttestedCandidate; - AuctionIndex: AuctionIndex; - AuthIndex: AuthIndex; - AuthorityDiscoveryId: AuthorityDiscoveryId; - AuthorityId: AuthorityId; - AuthorityIndex: AuthorityIndex; - AuthorityList: AuthorityList; - AuthoritySet: AuthoritySet; - AuthoritySetChange: AuthoritySetChange; - AuthoritySetChanges: AuthoritySetChanges; - AuthoritySignature: AuthoritySignature; - AuthorityWeight: AuthorityWeight; - AvailabilityBitfield: AvailabilityBitfield; - AvailabilityBitfieldRecord: AvailabilityBitfieldRecord; - BabeAuthorityWeight: BabeAuthorityWeight; - BabeBlockWeight: BabeBlockWeight; - BabeEpochConfiguration: BabeEpochConfiguration; - BabeEquivocationProof: BabeEquivocationProof; - BabeGenesisConfiguration: BabeGenesisConfiguration; - BabeGenesisConfigurationV1: BabeGenesisConfigurationV1; - BabeWeight: BabeWeight; - BackedCandidate: BackedCandidate; - Balance: Balance; - BalanceLock: BalanceLock; - BalanceLockTo212: BalanceLockTo212; - BalanceOf: BalanceOf; - BalanceStatus: BalanceStatus; - BeefyAuthoritySet: BeefyAuthoritySet; - BeefyCommitment: BeefyCommitment; - BeefyEquivocationProof: BeefyEquivocationProof; - BeefyId: BeefyId; - BeefyKey: BeefyKey; - BeefyNextAuthoritySet: BeefyNextAuthoritySet; - BeefyPayload: BeefyPayload; - BeefyPayloadId: BeefyPayloadId; - BeefySignedCommitment: BeefySignedCommitment; - BeefyVoteMessage: BeefyVoteMessage; - BenchmarkBatch: BenchmarkBatch; - BenchmarkConfig: BenchmarkConfig; - BenchmarkList: BenchmarkList; - BenchmarkMetadata: BenchmarkMetadata; - BenchmarkParameter: BenchmarkParameter; - BenchmarkResult: BenchmarkResult; - Bid: Bid; - Bidder: Bidder; - BidKind: BidKind; - BitVec: BitVec; - BlindedLeaves: BlindedLeaves; - BlindedValue: BlindedValue; - Block: Block; - BlockAttestations: BlockAttestations; - BlockHash: BlockHash; - BlockLength: BlockLength; - BlockNumber: BlockNumber; - BlockNumberFor: BlockNumberFor; - BlockNumberOf: BlockNumberOf; - BlockStats: BlockStats; - BlockTrace: BlockTrace; - BlockTraceEvent: BlockTraceEvent; - BlockTraceEventData: BlockTraceEventData; - BlockTraceSpan: BlockTraceSpan; - BlockV0: BlockV0; - BlockV1: BlockV1; - BlockV2: BlockV2; - BlockWeights: BlockWeights; - BodyId: BodyId; - BodyPart: BodyPart; - bool: bool; - Bool: Bool; - Bounty: Bounty; - BountyIndex: BountyIndex; - BountyStatus: BountyStatus; - BountyStatusActive: BountyStatusActive; - BountyStatusCuratorProposed: BountyStatusCuratorProposed; - BountyStatusPendingPayout: BountyStatusPendingPayout; - BridgedBlockHash: BridgedBlockHash; - BridgedBlockNumber: BridgedBlockNumber; - BridgedHeader: BridgedHeader; - BridgeMessageId: BridgeMessageId; - BufferedSessionChange: BufferedSessionChange; - Bytes: Bytes; - Call: Call; - CallHash: CallHash; - CallHashOf: CallHashOf; - CallIndex: CallIndex; - CallOrigin: CallOrigin; - CandidateCommitments: CandidateCommitments; - CandidateDescriptor: CandidateDescriptor; - CandidateEvent: CandidateEvent; - CandidateHash: CandidateHash; - CandidateInfo: CandidateInfo; - CandidatePendingAvailability: CandidatePendingAvailability; - CandidateReceipt: CandidateReceipt; - ChainId: ChainId; - ChainProperties: ChainProperties; - ChainType: ChainType; - ChangesTrieConfiguration: ChangesTrieConfiguration; - ChangesTrieSignal: ChangesTrieSignal; - CheckInherentsResult: CheckInherentsResult; - ClassDetails: ClassDetails; - ClassId: ClassId; - ClassMetadata: ClassMetadata; - CodecHash: CodecHash; - CodeHash: CodeHash; - CodeSource: CodeSource; - CodeUploadRequest: CodeUploadRequest; - CodeUploadResult: CodeUploadResult; - CodeUploadResultValue: CodeUploadResultValue; - CollationInfo: CollationInfo; - CollationInfoV1: CollationInfoV1; - CollatorId: CollatorId; - CollatorSignature: CollatorSignature; - CollectiveOrigin: CollectiveOrigin; - CommittedCandidateReceipt: CommittedCandidateReceipt; - CompactAssignments: CompactAssignments; - CompactAssignmentsTo257: CompactAssignmentsTo257; - CompactAssignmentsTo265: CompactAssignmentsTo265; - CompactAssignmentsWith16: CompactAssignmentsWith16; - CompactAssignmentsWith24: CompactAssignmentsWith24; - CompactScore: CompactScore; - CompactScoreCompact: CompactScoreCompact; - CompleteMerkleProof: CompleteMerkleProof; - ConfigData: ConfigData; - Consensus: Consensus; - ConsensusEngineId: ConsensusEngineId; - ConsumedWeight: ConsumedWeight; - ContractCallFlags: ContractCallFlags; - ContractCallRequest: ContractCallRequest; - ContractConstructorSpecLatest: ContractConstructorSpecLatest; - ContractConstructorSpecV0: ContractConstructorSpecV0; - ContractConstructorSpecV1: ContractConstructorSpecV1; - ContractConstructorSpecV2: ContractConstructorSpecV2; - ContractConstructorSpecV3: ContractConstructorSpecV3; - ContractContractSpecV0: ContractContractSpecV0; - ContractContractSpecV1: ContractContractSpecV1; - ContractContractSpecV2: ContractContractSpecV2; - ContractContractSpecV3: ContractContractSpecV3; - ContractContractSpecV4: ContractContractSpecV4; - ContractCryptoHasher: ContractCryptoHasher; - ContractDiscriminant: ContractDiscriminant; - ContractDisplayName: ContractDisplayName; - ContractEventParamSpecLatest: ContractEventParamSpecLatest; - ContractEventParamSpecV0: ContractEventParamSpecV0; - ContractEventParamSpecV2: ContractEventParamSpecV2; - ContractEventSpecLatest: ContractEventSpecLatest; - ContractEventSpecV0: ContractEventSpecV0; - ContractEventSpecV1: ContractEventSpecV1; - ContractEventSpecV2: ContractEventSpecV2; - ContractExecResult: ContractExecResult; - ContractExecResultOk: ContractExecResultOk; - ContractExecResultResult: ContractExecResultResult; - ContractExecResultSuccessTo255: ContractExecResultSuccessTo255; - ContractExecResultSuccessTo260: ContractExecResultSuccessTo260; - ContractExecResultTo255: ContractExecResultTo255; - ContractExecResultTo260: ContractExecResultTo260; - ContractExecResultTo267: ContractExecResultTo267; - ContractExecResultU64: ContractExecResultU64; - ContractInfo: ContractInfo; - ContractInstantiateResult: ContractInstantiateResult; - ContractInstantiateResultTo267: ContractInstantiateResultTo267; - ContractInstantiateResultTo299: ContractInstantiateResultTo299; - ContractInstantiateResultU64: ContractInstantiateResultU64; - ContractLayoutArray: ContractLayoutArray; - ContractLayoutCell: ContractLayoutCell; - ContractLayoutEnum: ContractLayoutEnum; - ContractLayoutHash: ContractLayoutHash; - ContractLayoutHashingStrategy: ContractLayoutHashingStrategy; - ContractLayoutKey: ContractLayoutKey; - ContractLayoutStruct: ContractLayoutStruct; - ContractLayoutStructField: ContractLayoutStructField; - ContractMessageParamSpecLatest: ContractMessageParamSpecLatest; - ContractMessageParamSpecV0: ContractMessageParamSpecV0; - ContractMessageParamSpecV2: ContractMessageParamSpecV2; - ContractMessageSpecLatest: ContractMessageSpecLatest; - ContractMessageSpecV0: ContractMessageSpecV0; - ContractMessageSpecV1: ContractMessageSpecV1; - ContractMessageSpecV2: ContractMessageSpecV2; - ContractMetadata: ContractMetadata; - ContractMetadataLatest: ContractMetadataLatest; - ContractMetadataV0: ContractMetadataV0; - ContractMetadataV1: ContractMetadataV1; - ContractMetadataV2: ContractMetadataV2; - ContractMetadataV3: ContractMetadataV3; - ContractMetadataV4: ContractMetadataV4; - ContractProject: ContractProject; - ContractProjectContract: ContractProjectContract; - ContractProjectInfo: ContractProjectInfo; - ContractProjectSource: ContractProjectSource; - ContractProjectV0: ContractProjectV0; - ContractReturnFlags: ContractReturnFlags; - ContractSelector: ContractSelector; - ContractStorageKey: ContractStorageKey; - ContractStorageLayout: ContractStorageLayout; - ContractTypeSpec: ContractTypeSpec; - Conviction: Conviction; - CoreAssignment: CoreAssignment; - CoreIndex: CoreIndex; - CoreOccupied: CoreOccupied; - CoreState: CoreState; - CrateVersion: CrateVersion; - CreatedBlock: CreatedBlock; - Data: Data; - DeferredOffenceOf: DeferredOffenceOf; - DefunctVoter: DefunctVoter; - DelayKind: DelayKind; - DelayKindBest: DelayKindBest; - Delegations: Delegations; - DeletedContract: DeletedContract; - DeliveredMessages: DeliveredMessages; - DepositBalance: DepositBalance; - DepositBalanceOf: DepositBalanceOf; - DestroyWitness: DestroyWitness; - DidApiAccountId: DidApiAccountId; - DidIdentityProviderError: DidIdentityProviderError; - DidKeyMerkleKey: DidKeyMerkleKey; - DidKeyMerkleValue: DidKeyMerkleValue; - DidMerkleProofError: DidMerkleProofError; - Digest: Digest; - DigestItem: DigestItem; - DigestOf: DigestOf; - DipProofRequest: DipProofRequest; - DispatchClass: DispatchClass; - DispatchError: DispatchError; - DispatchErrorModule: DispatchErrorModule; - DispatchErrorModulePre6: DispatchErrorModulePre6; - DispatchErrorModuleU8: DispatchErrorModuleU8; - DispatchErrorModuleU8a: DispatchErrorModuleU8a; - DispatchErrorPre6: DispatchErrorPre6; - DispatchErrorPre6First: DispatchErrorPre6First; - DispatchErrorTo198: DispatchErrorTo198; - DispatchFeePayment: DispatchFeePayment; - DispatchInfo: DispatchInfo; - DispatchInfoTo190: DispatchInfoTo190; - DispatchInfoTo244: DispatchInfoTo244; - DispatchOutcome: DispatchOutcome; - DispatchOutcomePre6: DispatchOutcomePre6; - DispatchResult: DispatchResult; - DispatchResultOf: DispatchResultOf; - DispatchResultTo198: DispatchResultTo198; - DisputeLocation: DisputeLocation; - DisputeResult: DisputeResult; - DisputeState: DisputeState; - DisputeStatement: DisputeStatement; - DisputeStatementSet: DisputeStatementSet; - DoubleEncodedCall: DoubleEncodedCall; - DoubleVoteReport: DoubleVoteReport; - DownwardMessage: DownwardMessage; - EcdsaSignature: EcdsaSignature; - Ed25519Signature: Ed25519Signature; - EIP1559Transaction: EIP1559Transaction; - EIP2930Transaction: EIP2930Transaction; - ElectionCompute: ElectionCompute; - ElectionPhase: ElectionPhase; - ElectionResult: ElectionResult; - ElectionScore: ElectionScore; - ElectionSize: ElectionSize; - ElectionStatus: ElectionStatus; - EncodedFinalityProofs: EncodedFinalityProofs; - EncodedJustification: EncodedJustification; - Epoch: Epoch; - EpochAuthorship: EpochAuthorship; - Era: Era; - EraIndex: EraIndex; - EraPoints: EraPoints; - EraRewardPoints: EraRewardPoints; - EraRewards: EraRewards; - ErrorMetadataLatest: ErrorMetadataLatest; - ErrorMetadataV10: ErrorMetadataV10; - ErrorMetadataV11: ErrorMetadataV11; - ErrorMetadataV12: ErrorMetadataV12; - ErrorMetadataV13: ErrorMetadataV13; - ErrorMetadataV14: ErrorMetadataV14; - ErrorMetadataV9: ErrorMetadataV9; - EthAccessList: EthAccessList; - EthAccessListItem: EthAccessListItem; - EthAccount: EthAccount; - EthAddress: EthAddress; - EthBlock: EthBlock; - EthBloom: EthBloom; - EthCallRequest: EthCallRequest; - EthereumAccountId: EthereumAccountId; - EthereumAddress: EthereumAddress; - EthereumLookupSource: EthereumLookupSource; - EthereumSignature: EthereumSignature; - EthFeeHistory: EthFeeHistory; - EthFilter: EthFilter; - EthFilterAddress: EthFilterAddress; - EthFilterChanges: EthFilterChanges; - EthFilterTopic: EthFilterTopic; - EthFilterTopicEntry: EthFilterTopicEntry; - EthFilterTopicInner: EthFilterTopicInner; - EthHeader: EthHeader; - EthLog: EthLog; - EthReceipt: EthReceipt; - EthReceiptV0: EthReceiptV0; - EthReceiptV3: EthReceiptV3; - EthRichBlock: EthRichBlock; - EthRichHeader: EthRichHeader; - EthStorageProof: EthStorageProof; - EthSubKind: EthSubKind; - EthSubParams: EthSubParams; - EthSubResult: EthSubResult; - EthSyncInfo: EthSyncInfo; - EthSyncStatus: EthSyncStatus; - EthTransaction: EthTransaction; - EthTransactionAction: EthTransactionAction; - EthTransactionCondition: EthTransactionCondition; - EthTransactionRequest: EthTransactionRequest; - EthTransactionSignature: EthTransactionSignature; - EthTransactionStatus: EthTransactionStatus; - EthWork: EthWork; - Event: Event; - EventId: EventId; - EventIndex: EventIndex; - EventMetadataLatest: EventMetadataLatest; - EventMetadataV10: EventMetadataV10; - EventMetadataV11: EventMetadataV11; - EventMetadataV12: EventMetadataV12; - EventMetadataV13: EventMetadataV13; - EventMetadataV14: EventMetadataV14; - EventMetadataV9: EventMetadataV9; - EventRecord: EventRecord; - EvmAccount: EvmAccount; - EvmCallInfo: EvmCallInfo; - EvmCreateInfo: EvmCreateInfo; - EvmLog: EvmLog; - EvmVicinity: EvmVicinity; - ExecReturnValue: ExecReturnValue; - ExecutorParam: ExecutorParam; - ExecutorParams: ExecutorParams; - ExecutorParamsHash: ExecutorParamsHash; - ExitError: ExitError; - ExitFatal: ExitFatal; - ExitReason: ExitReason; - ExitRevert: ExitRevert; - ExitSucceed: ExitSucceed; - ExplicitDisputeStatement: ExplicitDisputeStatement; - Exposure: Exposure; - ExtendedBalance: ExtendedBalance; - Extrinsic: Extrinsic; - ExtrinsicEra: ExtrinsicEra; - ExtrinsicMetadataLatest: ExtrinsicMetadataLatest; - ExtrinsicMetadataV11: ExtrinsicMetadataV11; - ExtrinsicMetadataV12: ExtrinsicMetadataV12; - ExtrinsicMetadataV13: ExtrinsicMetadataV13; - ExtrinsicMetadataV14: ExtrinsicMetadataV14; - ExtrinsicOrHash: ExtrinsicOrHash; - ExtrinsicPayload: ExtrinsicPayload; - ExtrinsicPayloadUnknown: ExtrinsicPayloadUnknown; - ExtrinsicPayloadV4: ExtrinsicPayloadV4; - ExtrinsicSignature: ExtrinsicSignature; - ExtrinsicSignatureV4: ExtrinsicSignatureV4; - ExtrinsicStatus: ExtrinsicStatus; - ExtrinsicsWeight: ExtrinsicsWeight; - ExtrinsicUnknown: ExtrinsicUnknown; - ExtrinsicV4: ExtrinsicV4; - f32: f32; - F32: F32; - f64: f64; - F64: F64; - FeeDetails: FeeDetails; - Fixed128: Fixed128; - Fixed64: Fixed64; - FixedI128: FixedI128; - FixedI64: FixedI64; - FixedU128: FixedU128; - FixedU64: FixedU64; - Forcing: Forcing; - ForkTreePendingChange: ForkTreePendingChange; - ForkTreePendingChangeNode: ForkTreePendingChangeNode; - FullIdentification: FullIdentification; - FunctionArgumentMetadataLatest: FunctionArgumentMetadataLatest; - FunctionArgumentMetadataV10: FunctionArgumentMetadataV10; - FunctionArgumentMetadataV11: FunctionArgumentMetadataV11; - FunctionArgumentMetadataV12: FunctionArgumentMetadataV12; - FunctionArgumentMetadataV13: FunctionArgumentMetadataV13; - FunctionArgumentMetadataV14: FunctionArgumentMetadataV14; - FunctionArgumentMetadataV9: FunctionArgumentMetadataV9; - FunctionMetadataLatest: FunctionMetadataLatest; - FunctionMetadataV10: FunctionMetadataV10; - FunctionMetadataV11: FunctionMetadataV11; - FunctionMetadataV12: FunctionMetadataV12; - FunctionMetadataV13: FunctionMetadataV13; - FunctionMetadataV14: FunctionMetadataV14; - FunctionMetadataV9: FunctionMetadataV9; - FundIndex: FundIndex; - FundInfo: FundInfo; - Fungibility: Fungibility; - FungibilityV0: FungibilityV0; - FungibilityV1: FungibilityV1; - FungibilityV2: FungibilityV2; - FungiblesAccessError: FungiblesAccessError; - Gas: Gas; - GiltBid: GiltBid; - GlobalValidationData: GlobalValidationData; - GlobalValidationSchedule: GlobalValidationSchedule; - GrandpaCommit: GrandpaCommit; - GrandpaEquivocation: GrandpaEquivocation; - GrandpaEquivocationProof: GrandpaEquivocationProof; - GrandpaEquivocationValue: GrandpaEquivocationValue; - GrandpaJustification: GrandpaJustification; - GrandpaPrecommit: GrandpaPrecommit; - GrandpaPrevote: GrandpaPrevote; - GrandpaSignedPrecommit: GrandpaSignedPrecommit; - GroupIndex: GroupIndex; - GroupRotationInfo: GroupRotationInfo; - H1024: H1024; - H128: H128; - H160: H160; - H2048: H2048; - H256: H256; - H32: H32; - H512: H512; - H64: H64; - Hash: Hash; - HeadData: HeadData; - Header: Header; - HeaderPartial: HeaderPartial; - Health: Health; - Heartbeat: Heartbeat; - HeartbeatTo244: HeartbeatTo244; - HostConfiguration: HostConfiguration; - HostFnWeights: HostFnWeights; - HostFnWeightsTo264: HostFnWeightsTo264; - HrmpChannel: HrmpChannel; - HrmpChannelId: HrmpChannelId; - HrmpOpenChannelRequest: HrmpOpenChannelRequest; - i128: i128; - I128: I128; - i16: i16; - I16: I16; - i256: i256; - I256: I256; - i32: i32; - I32: I32; - I32F32: I32F32; - i64: i64; - I64: I64; - i8: i8; - I8: I8; - IdentificationTuple: IdentificationTuple; - IdentityCommitmentVersion: IdentityCommitmentVersion; - IdentityFields: IdentityFields; - IdentityInfo: IdentityInfo; - IdentityInfoAdditional: IdentityInfoAdditional; - IdentityInfoTo198: IdentityInfoTo198; - IdentityJudgement: IdentityJudgement; - ImmortalEra: ImmortalEra; - ImportedAux: ImportedAux; - InboundDownwardMessage: InboundDownwardMessage; - InboundHrmpMessage: InboundHrmpMessage; - InboundHrmpMessages: InboundHrmpMessages; - InboundLaneData: InboundLaneData; - InboundRelayer: InboundRelayer; - InboundStatus: InboundStatus; - IncludedBlocks: IncludedBlocks; - InclusionFee: InclusionFee; - IncomingParachain: IncomingParachain; - IncomingParachainDeploy: IncomingParachainDeploy; - IncomingParachainFixed: IncomingParachainFixed; - Index: Index; - IndicesLookupSource: IndicesLookupSource; - IndividualExposure: IndividualExposure; - InherentData: InherentData; - InherentIdentifier: InherentIdentifier; - InitializationData: InitializationData; - InstanceDetails: InstanceDetails; - InstanceId: InstanceId; - InstanceMetadata: InstanceMetadata; - InstantiateRequest: InstantiateRequest; - InstantiateRequestV1: InstantiateRequestV1; - InstantiateRequestV2: InstantiateRequestV2; - InstantiateReturnValue: InstantiateReturnValue; - InstantiateReturnValueOk: InstantiateReturnValueOk; - InstantiateReturnValueTo267: InstantiateReturnValueTo267; - InstructionV2: InstructionV2; - InstructionWeights: InstructionWeights; - InteriorMultiLocation: InteriorMultiLocation; - InvalidDisputeStatementKind: InvalidDisputeStatementKind; - InvalidTransaction: InvalidTransaction; - isize: isize; - ISize: ISize; - Json: Json; - Junction: Junction; - Junctions: Junctions; - JunctionsV1: JunctionsV1; - JunctionsV2: JunctionsV2; - JunctionV0: JunctionV0; - JunctionV1: JunctionV1; - JunctionV2: JunctionV2; - Justification: Justification; - JustificationNotification: JustificationNotification; - Justifications: Justifications; - Key: Key; - KeyId: KeyId; - KeyOwnerProof: KeyOwnerProof; - KeyRelationship: KeyRelationship; - Keys: Keys; - KeyType: KeyType; - KeyTypeId: KeyTypeId; - KeyValue: KeyValue; - KeyValueOption: KeyValueOption; - Kind: Kind; - LaneId: LaneId; - LastContribution: LastContribution; - LastRuntimeUpgradeInfo: LastRuntimeUpgradeInfo; - LeasePeriod: LeasePeriod; - LeasePeriodOf: LeasePeriodOf; - LegacyTransaction: LegacyTransaction; - Limits: Limits; - LimitsTo264: LimitsTo264; - LinkedAccountMerkleKey: LinkedAccountMerkleKey; - LinkedAccountMerkleValue: LinkedAccountMerkleValue; - LinkedDidIdentityProviderError: LinkedDidIdentityProviderError; - LocalValidationData: LocalValidationData; - LockIdentifier: LockIdentifier; - LookupSource: LookupSource; - LookupTarget: LookupTarget; - LotteryConfig: LotteryConfig; - MaybeRandomness: MaybeRandomness; - MaybeVrf: MaybeVrf; - MemberCount: MemberCount; - MembershipProof: MembershipProof; - MerkleProof: MerkleProof; - MerkleRoot: MerkleRoot; - MessageData: MessageData; - MessageId: MessageId; - MessageIngestionType: MessageIngestionType; - MessageKey: MessageKey; - MessageNonce: MessageNonce; - MessageQueueChain: MessageQueueChain; - MessagesDeliveryProofOf: MessagesDeliveryProofOf; - MessagesProofOf: MessagesProofOf; - MessagingStateSnapshot: MessagingStateSnapshot; - MessagingStateSnapshotEgressEntry: MessagingStateSnapshotEgressEntry; - MetadataAll: MetadataAll; - MetadataLatest: MetadataLatest; - MetadataV10: MetadataV10; - MetadataV11: MetadataV11; - MetadataV12: MetadataV12; - MetadataV13: MetadataV13; - MetadataV14: MetadataV14; - MetadataV15: MetadataV15; - MetadataV9: MetadataV9; - MigrationStatusResult: MigrationStatusResult; - MmrBatchProof: MmrBatchProof; - MmrEncodableOpaqueLeaf: MmrEncodableOpaqueLeaf; - MmrError: MmrError; - MmrHash: MmrHash; - MmrLeafBatchProof: MmrLeafBatchProof; - MmrLeafIndex: MmrLeafIndex; - MmrLeafProof: MmrLeafProof; - MmrNodeIndex: MmrNodeIndex; - MmrProof: MmrProof; - MmrRootHash: MmrRootHash; - ModuleConstantMetadataV10: ModuleConstantMetadataV10; - ModuleConstantMetadataV11: ModuleConstantMetadataV11; - ModuleConstantMetadataV12: ModuleConstantMetadataV12; - ModuleConstantMetadataV13: ModuleConstantMetadataV13; - ModuleConstantMetadataV9: ModuleConstantMetadataV9; - ModuleId: ModuleId; - ModuleMetadataV10: ModuleMetadataV10; - ModuleMetadataV11: ModuleMetadataV11; - ModuleMetadataV12: ModuleMetadataV12; - ModuleMetadataV13: ModuleMetadataV13; - ModuleMetadataV9: ModuleMetadataV9; - Moment: Moment; - MomentOf: MomentOf; - MoreAttestations: MoreAttestations; - MortalEra: MortalEra; - MultiAddress: MultiAddress; - MultiAsset: MultiAsset; - MultiAssetFilter: MultiAssetFilter; - MultiAssetFilterV1: MultiAssetFilterV1; - MultiAssetFilterV2: MultiAssetFilterV2; - MultiAssets: MultiAssets; - MultiAssetsV1: MultiAssetsV1; - MultiAssetsV2: MultiAssetsV2; - MultiAssetV0: MultiAssetV0; - MultiAssetV1: MultiAssetV1; - MultiAssetV2: MultiAssetV2; - MultiDisputeStatementSet: MultiDisputeStatementSet; - MultiLocation: MultiLocation; - MultiLocationV0: MultiLocationV0; - MultiLocationV1: MultiLocationV1; - MultiLocationV2: MultiLocationV2; - Multiplier: Multiplier; - Multisig: Multisig; - MultiSignature: MultiSignature; - MultiSigner: MultiSigner; - NetworkId: NetworkId; - NetworkState: NetworkState; - NetworkStatePeerset: NetworkStatePeerset; - NetworkStatePeersetInfo: NetworkStatePeersetInfo; - NewBidder: NewBidder; - NextAuthority: NextAuthority; - NextConfigDescriptor: NextConfigDescriptor; - NextConfigDescriptorV1: NextConfigDescriptorV1; - NftCollectionId: NftCollectionId; - NftItemId: NftItemId; - NodeRole: NodeRole; - Nominations: Nominations; - NominatorIndex: NominatorIndex; - NominatorIndexCompact: NominatorIndexCompact; - NotConnectedPeer: NotConnectedPeer; - NpApiError: NpApiError; - NpPoolId: NpPoolId; - Null: Null; - OccupiedCore: OccupiedCore; - OccupiedCoreAssumption: OccupiedCoreAssumption; - OffchainAccuracy: OffchainAccuracy; - OffchainAccuracyCompact: OffchainAccuracyCompact; - OffenceDetails: OffenceDetails; - Offender: Offender; - OldV1SessionInfo: OldV1SessionInfo; - OpaqueCall: OpaqueCall; - OpaqueKeyOwnershipProof: OpaqueKeyOwnershipProof; - OpaqueMetadata: OpaqueMetadata; - OpaqueMultiaddr: OpaqueMultiaddr; - OpaqueNetworkState: OpaqueNetworkState; - OpaquePeerId: OpaquePeerId; - OpaqueTimeSlot: OpaqueTimeSlot; - OpenTip: OpenTip; - OpenTipFinderTo225: OpenTipFinderTo225; - OpenTipTip: OpenTipTip; - OpenTipTo225: OpenTipTo225; - OperatingMode: OperatingMode; - OptionBool: OptionBool; - Origin: Origin; - OriginCaller: OriginCaller; - OriginKindV0: OriginKindV0; - OriginKindV1: OriginKindV1; - OriginKindV2: OriginKindV2; - OutboundHrmpMessage: OutboundHrmpMessage; - OutboundLaneData: OutboundLaneData; - OutboundMessageFee: OutboundMessageFee; - OutboundPayload: OutboundPayload; - OutboundStatus: OutboundStatus; - Outcome: Outcome; - OverweightIndex: OverweightIndex; - Owner: Owner; - PageCounter: PageCounter; - PageIndexData: PageIndexData; - PalletCallMetadataLatest: PalletCallMetadataLatest; - PalletCallMetadataV14: PalletCallMetadataV14; - PalletConstantMetadataLatest: PalletConstantMetadataLatest; - PalletConstantMetadataV14: PalletConstantMetadataV14; - PalletErrorMetadataLatest: PalletErrorMetadataLatest; - PalletErrorMetadataV14: PalletErrorMetadataV14; - PalletEventMetadataLatest: PalletEventMetadataLatest; - PalletEventMetadataV14: PalletEventMetadataV14; - PalletId: PalletId; - PalletMetadataLatest: PalletMetadataLatest; - PalletMetadataV14: PalletMetadataV14; - PalletMetadataV15: PalletMetadataV15; - PalletsOrigin: PalletsOrigin; - PalletStorageMetadataLatest: PalletStorageMetadataLatest; - PalletStorageMetadataV14: PalletStorageMetadataV14; - PalletVersion: PalletVersion; - ParachainDispatchOrigin: ParachainDispatchOrigin; - ParachainInherentData: ParachainInherentData; - ParachainProposal: ParachainProposal; - ParachainsInherentData: ParachainsInherentData; - ParaGenesisArgs: ParaGenesisArgs; - ParaId: ParaId; - ParaInfo: ParaInfo; - ParaLifecycle: ParaLifecycle; - Parameter: Parameter; - ParaPastCodeMeta: ParaPastCodeMeta; - ParaScheduling: ParaScheduling; - ParathreadClaim: ParathreadClaim; - ParathreadClaimQueue: ParathreadClaimQueue; - ParathreadEntry: ParathreadEntry; - ParaValidatorIndex: ParaValidatorIndex; - Pays: Pays; - Peer: Peer; - PeerEndpoint: PeerEndpoint; - PeerEndpointAddr: PeerEndpointAddr; - PeerInfo: PeerInfo; - PeerPing: PeerPing; - PendingChange: PendingChange; - PendingPause: PendingPause; - PendingResume: PendingResume; - Perbill: Perbill; - Percent: Percent; - PerDispatchClassU32: PerDispatchClassU32; - PerDispatchClassWeight: PerDispatchClassWeight; - PerDispatchClassWeightsPerClass: PerDispatchClassWeightsPerClass; - Period: Period; - Permill: Permill; - PermissionLatest: PermissionLatest; - PermissionsV1: PermissionsV1; - PermissionVersions: PermissionVersions; - Perquintill: Perquintill; - PersistedValidationData: PersistedValidationData; - PerU16: PerU16; - Phantom: Phantom; - PhantomData: PhantomData; - Phase: Phase; - PhragmenScore: PhragmenScore; - Points: Points; - PortableType: PortableType; - PortableTypeV14: PortableTypeV14; - Precommits: Precommits; - PrefabWasmModule: PrefabWasmModule; - PrefixedStorageKey: PrefixedStorageKey; - PreimageStatus: PreimageStatus; - PreimageStatusAvailable: PreimageStatusAvailable; - PreRuntime: PreRuntime; - Prevotes: Prevotes; - Priority: Priority; - PriorLock: PriorLock; - PropIndex: PropIndex; - Proposal: Proposal; - ProposalIndex: ProposalIndex; - ProxyAnnouncement: ProxyAnnouncement; - ProxyDefinition: ProxyDefinition; - ProxyState: ProxyState; - ProxyType: ProxyType; - PublicCredentialError: PublicCredentialError; - PublicCredentialFilter: PublicCredentialFilter; - PvfCheckStatement: PvfCheckStatement; - PvfExecTimeoutKind: PvfExecTimeoutKind; - PvfPrepTimeoutKind: PvfPrepTimeoutKind; - QueryId: QueryId; - QueryStatus: QueryStatus; - QueueConfigData: QueueConfigData; - QueuedParathread: QueuedParathread; - Randomness: Randomness; - Raw: Raw; - RawAuraPreDigest: RawAuraPreDigest; - RawBabePreDigest: RawBabePreDigest; - RawBabePreDigestCompat: RawBabePreDigestCompat; - RawBabePreDigestPrimary: RawBabePreDigestPrimary; - RawBabePreDigestPrimaryTo159: RawBabePreDigestPrimaryTo159; - RawBabePreDigestSecondaryPlain: RawBabePreDigestSecondaryPlain; - RawBabePreDigestSecondaryTo159: RawBabePreDigestSecondaryTo159; - RawBabePreDigestSecondaryVRF: RawBabePreDigestSecondaryVRF; - RawBabePreDigestTo159: RawBabePreDigestTo159; - RawDidLinkedInfo: RawDidLinkedInfo; - RawOrigin: RawOrigin; - RawSolution: RawSolution; - RawSolutionTo265: RawSolutionTo265; - RawSolutionWith16: RawSolutionWith16; - RawSolutionWith24: RawSolutionWith24; - RawVRFOutput: RawVRFOutput; - ReadProof: ReadProof; - ReadySolution: ReadySolution; - Reasons: Reasons; - RecoveryConfig: RecoveryConfig; - RefCount: RefCount; - RefCountTo259: RefCountTo259; - ReferendumIndex: ReferendumIndex; - ReferendumInfo: ReferendumInfo; - ReferendumInfoFinished: ReferendumInfoFinished; - ReferendumInfoTo239: ReferendumInfoTo239; - ReferendumStatus: ReferendumStatus; - RegisteredParachainInfo: RegisteredParachainInfo; - RegistrarIndex: RegistrarIndex; - RegistrarInfo: RegistrarInfo; - Registration: Registration; - RegistrationJudgement: RegistrationJudgement; - RegistrationTo198: RegistrationTo198; - RelayBlockNumber: RelayBlockNumber; - RelayChainBlockNumber: RelayChainBlockNumber; - RelayChainHash: RelayChainHash; - RelayerId: RelayerId; - RelayHash: RelayHash; - Releases: Releases; - Remark: Remark; - Renouncing: Renouncing; - RentProjection: RentProjection; - ReplacementTimes: ReplacementTimes; - ReportedRoundStates: ReportedRoundStates; - Reporter: Reporter; - ReportIdOf: ReportIdOf; - ReserveData: ReserveData; - ReserveIdentifier: ReserveIdentifier; - Response: Response; - ResponseV0: ResponseV0; - ResponseV1: ResponseV1; - ResponseV2: ResponseV2; - ResponseV2Error: ResponseV2Error; - ResponseV2Result: ResponseV2Result; - Retriable: Retriable; - RevealedLeaf: RevealedLeaf; - RevealedLeaves: RevealedLeaves; - RewardDestination: RewardDestination; - RewardPoint: RewardPoint; - RoundSnapshot: RoundSnapshot; - RoundState: RoundState; - RpcMethods: RpcMethods; - RuntimeApiDipProofError: RuntimeApiDipProofError; - RuntimeApiMetadataLatest: RuntimeApiMetadataLatest; - RuntimeApiMetadataV15: RuntimeApiMetadataV15; - RuntimeApiMethodMetadataV15: RuntimeApiMethodMetadataV15; - RuntimeApiMethodParamMetadataV15: RuntimeApiMethodParamMetadataV15; - RuntimeCall: RuntimeCall; - RuntimeDbWeight: RuntimeDbWeight; - RuntimeDispatchInfo: RuntimeDispatchInfo; - RuntimeDispatchInfoV1: RuntimeDispatchInfoV1; - RuntimeDispatchInfoV2: RuntimeDispatchInfoV2; - RuntimeEvent: RuntimeEvent; - RuntimeVersion: RuntimeVersion; - RuntimeVersionApi: RuntimeVersionApi; - RuntimeVersionPartial: RuntimeVersionPartial; - RuntimeVersionPre3: RuntimeVersionPre3; - RuntimeVersionPre4: RuntimeVersionPre4; - Schedule: Schedule; - Scheduled: Scheduled; - ScheduledCore: ScheduledCore; - ScheduledTo254: ScheduledTo254; - SchedulePeriod: SchedulePeriod; - SchedulePriority: SchedulePriority; - ScheduleTo212: ScheduleTo212; - ScheduleTo258: ScheduleTo258; - ScheduleTo264: ScheduleTo264; - Scheduling: Scheduling; - ScrapedOnChainVotes: ScrapedOnChainVotes; - Seal: Seal; - SealV0: SealV0; - SeatHolder: SeatHolder; - SeedOf: SeedOf; - ServiceQuality: ServiceQuality; - SessionIndex: SessionIndex; - SessionInfo: SessionInfo; - SessionInfoValidatorGroup: SessionInfoValidatorGroup; - SessionKeys1: SessionKeys1; - SessionKeys10: SessionKeys10; - SessionKeys10B: SessionKeys10B; - SessionKeys2: SessionKeys2; - SessionKeys3: SessionKeys3; - SessionKeys4: SessionKeys4; - SessionKeys5: SessionKeys5; - SessionKeys6: SessionKeys6; - SessionKeys6B: SessionKeys6B; - SessionKeys7: SessionKeys7; - SessionKeys7B: SessionKeys7B; - SessionKeys8: SessionKeys8; - SessionKeys8B: SessionKeys8B; - SessionKeys9: SessionKeys9; - SessionKeys9B: SessionKeys9B; - SetId: SetId; - SetIndex: SetIndex; - Si0Field: Si0Field; - Si0LookupTypeId: Si0LookupTypeId; - Si0Path: Si0Path; - Si0Type: Si0Type; - Si0TypeDef: Si0TypeDef; - Si0TypeDefArray: Si0TypeDefArray; - Si0TypeDefBitSequence: Si0TypeDefBitSequence; - Si0TypeDefCompact: Si0TypeDefCompact; - Si0TypeDefComposite: Si0TypeDefComposite; - Si0TypeDefPhantom: Si0TypeDefPhantom; - Si0TypeDefPrimitive: Si0TypeDefPrimitive; - Si0TypeDefSequence: Si0TypeDefSequence; - Si0TypeDefTuple: Si0TypeDefTuple; - Si0TypeDefVariant: Si0TypeDefVariant; - Si0TypeParameter: Si0TypeParameter; - Si0Variant: Si0Variant; - Si1Field: Si1Field; - Si1LookupTypeId: Si1LookupTypeId; - Si1Path: Si1Path; - Si1Type: Si1Type; - Si1TypeDef: Si1TypeDef; - Si1TypeDefArray: Si1TypeDefArray; - Si1TypeDefBitSequence: Si1TypeDefBitSequence; - Si1TypeDefCompact: Si1TypeDefCompact; - Si1TypeDefComposite: Si1TypeDefComposite; - Si1TypeDefPrimitive: Si1TypeDefPrimitive; - Si1TypeDefSequence: Si1TypeDefSequence; - Si1TypeDefTuple: Si1TypeDefTuple; - Si1TypeDefVariant: Si1TypeDefVariant; - Si1TypeParameter: Si1TypeParameter; - Si1Variant: Si1Variant; - SiField: SiField; - Signature: Signature; - SignedAvailabilityBitfield: SignedAvailabilityBitfield; - SignedAvailabilityBitfields: SignedAvailabilityBitfields; - SignedBlock: SignedBlock; - SignedBlockWithJustification: SignedBlockWithJustification; - SignedBlockWithJustifications: SignedBlockWithJustifications; - SignedExtensionMetadataLatest: SignedExtensionMetadataLatest; - SignedExtensionMetadataV14: SignedExtensionMetadataV14; - SignedSubmission: SignedSubmission; - SignedSubmissionOf: SignedSubmissionOf; - SignedSubmissionTo276: SignedSubmissionTo276; - SignerPayload: SignerPayload; - SigningContext: SigningContext; - SiLookupTypeId: SiLookupTypeId; - SiPath: SiPath; - SiType: SiType; - SiTypeDef: SiTypeDef; - SiTypeDefArray: SiTypeDefArray; - SiTypeDefBitSequence: SiTypeDefBitSequence; - SiTypeDefCompact: SiTypeDefCompact; - SiTypeDefComposite: SiTypeDefComposite; - SiTypeDefPrimitive: SiTypeDefPrimitive; - SiTypeDefSequence: SiTypeDefSequence; - SiTypeDefTuple: SiTypeDefTuple; - SiTypeDefVariant: SiTypeDefVariant; - SiTypeParameter: SiTypeParameter; - SiVariant: SiVariant; - SlashingSpans: SlashingSpans; - SlashingSpansTo204: SlashingSpansTo204; - SlashJournalEntry: SlashJournalEntry; - Slot: Slot; - SlotDuration: SlotDuration; - SlotNumber: SlotNumber; - SlotRange: SlotRange; - SlotRange10: SlotRange10; - SocietyJudgement: SocietyJudgement; - SocietyVote: SocietyVote; - SolutionOrSnapshotSize: SolutionOrSnapshotSize; - SolutionSupport: SolutionSupport; - SolutionSupports: SolutionSupports; - SpanIndex: SpanIndex; - SpanRecord: SpanRecord; - SpecVersion: SpecVersion; - Sr25519Signature: Sr25519Signature; - StakingLedger: StakingLedger; - StakingLedgerTo223: StakingLedgerTo223; - StakingLedgerTo240: StakingLedgerTo240; - StakingRates: StakingRates; - Statement: Statement; - StatementKind: StatementKind; - StorageChangeSet: StorageChangeSet; - StorageData: StorageData; - StorageDeposit: StorageDeposit; - StorageEntryMetadataLatest: StorageEntryMetadataLatest; - StorageEntryMetadataV10: StorageEntryMetadataV10; - StorageEntryMetadataV11: StorageEntryMetadataV11; - StorageEntryMetadataV12: StorageEntryMetadataV12; - StorageEntryMetadataV13: StorageEntryMetadataV13; - StorageEntryMetadataV14: StorageEntryMetadataV14; - StorageEntryMetadataV9: StorageEntryMetadataV9; - StorageEntryModifierLatest: StorageEntryModifierLatest; - StorageEntryModifierV10: StorageEntryModifierV10; - StorageEntryModifierV11: StorageEntryModifierV11; - StorageEntryModifierV12: StorageEntryModifierV12; - StorageEntryModifierV13: StorageEntryModifierV13; - StorageEntryModifierV14: StorageEntryModifierV14; - StorageEntryModifierV9: StorageEntryModifierV9; - StorageEntryTypeLatest: StorageEntryTypeLatest; - StorageEntryTypeV10: StorageEntryTypeV10; - StorageEntryTypeV11: StorageEntryTypeV11; - StorageEntryTypeV12: StorageEntryTypeV12; - StorageEntryTypeV13: StorageEntryTypeV13; - StorageEntryTypeV14: StorageEntryTypeV14; - StorageEntryTypeV9: StorageEntryTypeV9; - StorageHasher: StorageHasher; - StorageHasherV10: StorageHasherV10; - StorageHasherV11: StorageHasherV11; - StorageHasherV12: StorageHasherV12; - StorageHasherV13: StorageHasherV13; - StorageHasherV14: StorageHasherV14; - StorageHasherV9: StorageHasherV9; - StorageInfo: StorageInfo; - StorageKey: StorageKey; - StorageKind: StorageKind; - StorageMetadataV10: StorageMetadataV10; - StorageMetadataV11: StorageMetadataV11; - StorageMetadataV12: StorageMetadataV12; - StorageMetadataV13: StorageMetadataV13; - StorageMetadataV9: StorageMetadataV9; - StorageProof: StorageProof; - StoredPendingChange: StoredPendingChange; - StoredState: StoredState; - StrikeCount: StrikeCount; - SubId: SubId; - SubmissionIndicesOf: SubmissionIndicesOf; - Supports: Supports; - SyncState: SyncState; - SystemInherentData: SystemInherentData; - SystemOrigin: SystemOrigin; - Tally: Tally; - TaskAddress: TaskAddress; - TAssetBalance: TAssetBalance; - TAssetDepositBalance: TAssetDepositBalance; - Text: Text; - Timepoint: Timepoint; - TokenError: TokenError; - TombstoneContractInfo: TombstoneContractInfo; - TraceBlockResponse: TraceBlockResponse; - TraceError: TraceError; - TransactionalError: TransactionalError; - TransactionInfo: TransactionInfo; - TransactionLongevity: TransactionLongevity; - TransactionPriority: TransactionPriority; - TransactionSource: TransactionSource; - TransactionStorageProof: TransactionStorageProof; - TransactionTag: TransactionTag; - TransactionV0: TransactionV0; - TransactionV1: TransactionV1; - TransactionV2: TransactionV2; - TransactionValidity: TransactionValidity; - TransactionValidityError: TransactionValidityError; - TransientValidationData: TransientValidationData; - TreasuryProposal: TreasuryProposal; - TrieId: TrieId; - TrieIndex: TrieIndex; - Type: Type; - u128: u128; - U128: U128; - u16: u16; - U16: U16; - u256: u256; - U256: U256; - u32: u32; - U32: U32; - U32F32: U32F32; - u64: u64; - U64: U64; - u8: u8; - U8: U8; - UnappliedSlash: UnappliedSlash; - UnappliedSlashOther: UnappliedSlashOther; - UncleEntryItem: UncleEntryItem; - UnknownTransaction: UnknownTransaction; - UnlockChunk: UnlockChunk; - UnrewardedRelayer: UnrewardedRelayer; - UnrewardedRelayersState: UnrewardedRelayersState; - UpgradeGoAhead: UpgradeGoAhead; - UpgradeRestriction: UpgradeRestriction; - UpwardMessage: UpwardMessage; - usize: usize; - USize: USize; - ValidationCode: ValidationCode; - ValidationCodeHash: ValidationCodeHash; - ValidationData: ValidationData; - ValidationDataType: ValidationDataType; - ValidationFunctionParams: ValidationFunctionParams; - ValidatorCount: ValidatorCount; - ValidatorId: ValidatorId; - ValidatorIdOf: ValidatorIdOf; - ValidatorIndex: ValidatorIndex; - ValidatorIndexCompact: ValidatorIndexCompact; - ValidatorPrefs: ValidatorPrefs; - ValidatorPrefsTo145: ValidatorPrefsTo145; - ValidatorPrefsTo196: ValidatorPrefsTo196; - ValidatorPrefsWithBlocked: ValidatorPrefsWithBlocked; - ValidatorPrefsWithCommission: ValidatorPrefsWithCommission; - ValidatorSet: ValidatorSet; - ValidatorSetId: ValidatorSetId; - ValidatorSignature: ValidatorSignature; - ValidDisputeStatementKind: ValidDisputeStatementKind; - ValidityAttestation: ValidityAttestation; - ValidTransaction: ValidTransaction; - VecInboundHrmpMessage: VecInboundHrmpMessage; - VerificationRelationship: VerificationRelationship; - VersionedMultiAsset: VersionedMultiAsset; - VersionedMultiAssets: VersionedMultiAssets; - VersionedMultiLocation: VersionedMultiLocation; - VersionedResponse: VersionedResponse; - VersionedXcm: VersionedXcm; - VersionMigrationStage: VersionMigrationStage; - VestingInfo: VestingInfo; - VestingSchedule: VestingSchedule; - Vote: Vote; - VoteIndex: VoteIndex; - Voter: Voter; - VoterInfo: VoterInfo; - Votes: Votes; - VotesTo230: VotesTo230; - VoteThreshold: VoteThreshold; - VoteWeight: VoteWeight; - Voting: Voting; - VotingDelegating: VotingDelegating; - VotingDirect: VotingDirect; - VotingDirectVote: VotingDirectVote; - VouchingStatus: VouchingStatus; - VrfData: VrfData; - VrfOutput: VrfOutput; - VrfProof: VrfProof; - Web3NameMerkleKey: Web3NameMerkleKey; - Web3NameMerkleValue: Web3NameMerkleValue; - Weight: Weight; - WeightLimitV2: WeightLimitV2; - WeightMultiplier: WeightMultiplier; - WeightPerClass: WeightPerClass; - WeightToFeeCoefficient: WeightToFeeCoefficient; - WeightV0: WeightV0; - WeightV1: WeightV1; - WeightV2: WeightV2; - WildFungibility: WildFungibility; - WildFungibilityV0: WildFungibilityV0; - WildFungibilityV1: WildFungibilityV1; - WildFungibilityV2: WildFungibilityV2; - WildMultiAsset: WildMultiAsset; - WildMultiAssetV1: WildMultiAssetV1; - WildMultiAssetV2: WildMultiAssetV2; - WinnersData: WinnersData; - WinnersData10: WinnersData10; - WinnersDataTuple: WinnersDataTuple; - WinnersDataTuple10: WinnersDataTuple10; - WinningData: WinningData; - WinningData10: WinningData10; - WinningDataEntry: WinningDataEntry; - WithdrawReasons: WithdrawReasons; - Xcm: Xcm; - XcmAssetId: XcmAssetId; - XcmError: XcmError; - XcmErrorV0: XcmErrorV0; - XcmErrorV1: XcmErrorV1; - XcmErrorV2: XcmErrorV2; - XcmOrder: XcmOrder; - XcmOrderV0: XcmOrderV0; - XcmOrderV1: XcmOrderV1; - XcmOrderV2: XcmOrderV2; - XcmOrigin: XcmOrigin; - XcmOriginKind: XcmOriginKind; - XcmpMessageFormat: XcmpMessageFormat; - XcmV0: XcmV0; - XcmV1: XcmV1; - XcmV2: XcmV2; - XcmVersion: XcmVersion; - } // InterfaceTypes -} // declare module diff --git a/packages/augment-api/src/interfaces/definitions.ts b/packages/augment-api/src/interfaces/definitions.ts deleted file mode 100644 index 54565e8ce..000000000 --- a/packages/augment-api/src/interfaces/definitions.ts +++ /dev/null @@ -1,3 +0,0 @@ -/* eslint-disable */ - -export { default as extraDefs } from './extraDefs/definitions.js' diff --git a/packages/augment-api/src/interfaces/extraDefs/definitions.ts b/packages/augment-api/src/interfaces/extraDefs/definitions.ts deleted file mode 100644 index 4a453dcf2..000000000 --- a/packages/augment-api/src/interfaces/extraDefs/definitions.ts +++ /dev/null @@ -1,13 +0,0 @@ -/* eslint-disable */ - -import { types, didCalls, stakingCalls, publicCredentialsCalls } from '@kiltprotocol/type-definitions' - -// Only types and runtime calls can be exported from here. -export default { - types, - runtime: { - ...didCalls, - ...stakingCalls, - ...publicCredentialsCalls, - } -} diff --git a/packages/augment-api/src/interfaces/extraDefs/index.ts b/packages/augment-api/src/interfaces/extraDefs/index.ts deleted file mode 100644 index 7f1de782f..000000000 --- a/packages/augment-api/src/interfaces/extraDefs/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-defs`, do not edit -/* eslint-disable */ - -export * from './types.js'; diff --git a/packages/augment-api/src/interfaces/extraDefs/types.ts b/packages/augment-api/src/interfaces/extraDefs/types.ts deleted file mode 100644 index 1df82bb24..000000000 --- a/packages/augment-api/src/interfaces/extraDefs/types.ts +++ /dev/null @@ -1,164 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-defs`, do not edit -/* eslint-disable */ - -import type { Bytes, Enum, Null, Option, Struct, Text, Vec, bool, u16 } from '@polkadot/types-codec'; -import type { ITuple } from '@polkadot/types-codec/types'; -import type { AccountId32, BlockNumber, Hash, Perquintill } from '@polkadot/types/interfaces/runtime'; -// FIXME: manually added as they are not automatically imported -import type { DidServiceEndpointsDidEndpoint, DidDidDetails, PalletDidLookupLinkableAccountLinkableAccountId, DidDidDetailsDidPublicKeyDetails } from '@polkadot/types/lookup' - -/** @name BlindedLeaves */ -export interface BlindedLeaves extends Vec {} - -/** @name BlindedValue */ -export interface BlindedValue extends Bytes {} - -/** @name CompleteMerkleProof */ -export interface CompleteMerkleProof extends Struct { - readonly root: MerkleRoot; - readonly proof: MerkleProof; -} - -/** @name DidApiAccountId */ -export interface DidApiAccountId extends PalletDidLookupLinkableAccountLinkableAccountId {} - -/** @name DidIdentityProviderError */ -export interface DidIdentityProviderError extends Enum { - readonly isDidNotFound: boolean; - readonly isInternal: boolean; - readonly type: 'DidNotFound' | 'Internal'; -} - -/** @name DidKeyMerkleKey */ -export interface DidKeyMerkleKey extends ITuple<[KeyId, KeyRelationship]> {} - -/** @name DidKeyMerkleValue */ -export interface DidKeyMerkleValue extends DidDidDetailsDidPublicKeyDetails {} - -/** @name DidMerkleProofError */ -export interface DidMerkleProofError extends Enum { - readonly isUnsupportedVersion: boolean; - readonly isKeyNotFound: boolean; - readonly isLinkedAccountNotFound: boolean; - readonly isWeb3NameNotFound: boolean; - readonly isInternal: boolean; - readonly type: 'UnsupportedVersion' | 'KeyNotFound' | 'LinkedAccountNotFound' | 'Web3NameNotFound' | 'Internal'; -} - -/** @name DipProofRequest */ -export interface DipProofRequest extends Struct { - readonly identifier: AccountId32; - readonly version: IdentityCommitmentVersion; - readonly proofKeys: Vec; - readonly accounts: Vec; - readonly shouldIncludeWeb3Name: bool; -} - -/** @name IdentityCommitmentVersion */ -export interface IdentityCommitmentVersion extends u16 {} - -/** @name KeyId */ -export interface KeyId extends Hash {} - -/** @name KeyRelationship */ -export interface KeyRelationship extends Enum { - readonly isEncryption: boolean; - readonly isVerification: boolean; - readonly asVerification: VerificationRelationship; - readonly type: 'Encryption' | 'Verification'; -} - -/** @name LinkedAccountMerkleKey */ -export interface LinkedAccountMerkleKey extends PalletDidLookupLinkableAccountLinkableAccountId {} - -/** @name LinkedAccountMerkleValue */ -export interface LinkedAccountMerkleValue extends Null {} - -/** @name LinkedDidIdentityProviderError */ -export interface LinkedDidIdentityProviderError extends Enum { - readonly isDidNotFound: boolean; - readonly isDidDeleted: boolean; - readonly isInternal: boolean; - readonly type: 'DidNotFound' | 'DidDeleted' | 'Internal'; -} - -/** @name MerkleProof */ -export interface MerkleProof extends Struct { - readonly blinded: BlindedLeaves; - readonly revealed: RevealedLeaves; -} - -/** @name MerkleRoot */ -export interface MerkleRoot extends Hash {} - -/** @name PublicCredentialError */ -export interface PublicCredentialError extends Enum { - readonly isInvalidSubjectId: boolean; - readonly type: 'InvalidSubjectId'; -} - -/** @name PublicCredentialFilter */ -export interface PublicCredentialFilter extends Enum { - readonly isCtypeHash: boolean; - readonly asCtypeHash: Hash; - readonly isAttester: boolean; - readonly asAttester: AccountId32; - readonly type: 'CtypeHash' | 'Attester'; -} - -/** @name RawDidLinkedInfo */ -export interface RawDidLinkedInfo extends Struct { - readonly identifier: AccountId32; - readonly accounts: Vec; - readonly w3n: Option; - readonly serviceEndpoints: Vec; - readonly details: DidDidDetails; -} - -/** @name RevealedLeaf */ -export interface RevealedLeaf extends Enum { - readonly isDidKey: boolean; - readonly asDidKey: ITuple<[DidKeyMerkleKey, DidKeyMerkleValue]>; - readonly isWeb3Name: boolean; - readonly asWeb3Name: ITuple<[Web3NameMerkleKey, Web3NameMerkleValue]>; - readonly isLinkedAccount: boolean; - readonly asLinkedAccount: ITuple<[LinkedAccountMerkleKey, LinkedAccountMerkleValue]>; - readonly type: 'DidKey' | 'Web3Name' | 'LinkedAccount'; -} - -/** @name RevealedLeaves */ -export interface RevealedLeaves extends Vec {} - -/** @name RuntimeApiDipProofError */ -export interface RuntimeApiDipProofError extends Enum { - readonly isIdentityProvider: boolean; - readonly asIdentityProvider: LinkedDidIdentityProviderError; - readonly isMerkleProof: boolean; - readonly asMerkleProof: DidMerkleProofError; - readonly type: 'IdentityProvider' | 'MerkleProof'; -} - -/** @name StakingRates */ -export interface StakingRates extends Struct { - readonly collatorStakingRate: Perquintill; - readonly collatorRewardRate: Perquintill; - readonly delegatorStakingRate: Perquintill; - readonly delegatorRewardRate: Perquintill; -} - -/** @name VerificationRelationship */ -export interface VerificationRelationship extends Enum { - readonly isAuthentication: boolean; - readonly isCapabilityDelegation: boolean; - readonly isCapabilityInvocation: boolean; - readonly isAssertionMethod: boolean; - readonly type: 'Authentication' | 'CapabilityDelegation' | 'CapabilityInvocation' | 'AssertionMethod'; -} - -/** @name Web3NameMerkleKey */ -export interface Web3NameMerkleKey extends Text {} - -/** @name Web3NameMerkleValue */ -export interface Web3NameMerkleValue extends BlockNumber {} - -export type PHANTOM_EXTRADEFS = 'extraDefs'; diff --git a/packages/augment-api/src/interfaces/index.ts b/packages/augment-api/src/interfaces/index.ts deleted file mode 100644 index 7f1de782f..000000000 --- a/packages/augment-api/src/interfaces/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-defs`, do not edit -/* eslint-disable */ - -export * from './types.js'; diff --git a/packages/augment-api/src/interfaces/lookup.ts b/packages/augment-api/src/interfaces/lookup.ts deleted file mode 100644 index 6ed6d72e1..000000000 --- a/packages/augment-api/src/interfaces/lookup.ts +++ /dev/null @@ -1,4292 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-defs`, do not edit -/* eslint-disable */ - -/* eslint-disable sort-keys */ - -export default { - /** - * Lookup3: frame_system::AccountInfo> - **/ - FrameSystemAccountInfo: { - nonce: 'u64', - consumers: 'u32', - providers: 'u32', - sufficients: 'u32', - data: 'PalletBalancesAccountData' - }, - /** - * Lookup5: pallet_balances::types::AccountData - **/ - PalletBalancesAccountData: { - free: 'u128', - reserved: 'u128', - frozen: 'u128', - flags: 'u128' - }, - /** - * Lookup9: frame_support::dispatch::PerDispatchClass - **/ - FrameSupportDispatchPerDispatchClassWeight: { - normal: 'SpWeightsWeightV2Weight', - operational: 'SpWeightsWeightV2Weight', - mandatory: 'SpWeightsWeightV2Weight' - }, - /** - * Lookup10: sp_weights::weight_v2::Weight - **/ - SpWeightsWeightV2Weight: { - refTime: 'Compact', - proofSize: 'Compact' - }, - /** - * Lookup14: sp_runtime::generic::digest::Digest - **/ - SpRuntimeDigest: { - logs: 'Vec' - }, - /** - * Lookup16: sp_runtime::generic::digest::DigestItem - **/ - SpRuntimeDigestDigestItem: { - _enum: { - Other: 'Bytes', - __Unused1: 'Null', - __Unused2: 'Null', - __Unused3: 'Null', - Consensus: '([u8;4],Bytes)', - Seal: '([u8;4],Bytes)', - PreRuntime: '([u8;4],Bytes)', - __Unused7: 'Null', - RuntimeEnvironmentUpdated: 'Null' - } - }, - /** - * Lookup19: frame_system::EventRecord - **/ - FrameSystemEventRecord: { - phase: 'FrameSystemPhase', - event: 'Event', - topics: 'Vec' - }, - /** - * Lookup21: frame_system::pallet::Event - **/ - FrameSystemEvent: { - _enum: { - ExtrinsicSuccess: { - dispatchInfo: 'FrameSupportDispatchDispatchInfo', - }, - ExtrinsicFailed: { - dispatchError: 'SpRuntimeDispatchError', - dispatchInfo: 'FrameSupportDispatchDispatchInfo', - }, - CodeUpdated: 'Null', - NewAccount: { - account: 'AccountId32', - }, - KilledAccount: { - account: 'AccountId32', - }, - Remarked: { - _alias: { - hash_: 'hash', - }, - sender: 'AccountId32', - hash_: 'H256' - } - } - }, - /** - * Lookup22: frame_support::dispatch::DispatchInfo - **/ - FrameSupportDispatchDispatchInfo: { - weight: 'SpWeightsWeightV2Weight', - class: 'FrameSupportDispatchDispatchClass', - paysFee: 'FrameSupportDispatchPays' - }, - /** - * Lookup23: frame_support::dispatch::DispatchClass - **/ - FrameSupportDispatchDispatchClass: { - _enum: ['Normal', 'Operational', 'Mandatory'] - }, - /** - * Lookup24: frame_support::dispatch::Pays - **/ - FrameSupportDispatchPays: { - _enum: ['Yes', 'No'] - }, - /** - * Lookup25: sp_runtime::DispatchError - **/ - SpRuntimeDispatchError: { - _enum: { - Other: 'Null', - CannotLookup: 'Null', - BadOrigin: 'Null', - Module: 'SpRuntimeModuleError', - ConsumerRemaining: 'Null', - NoProviders: 'Null', - TooManyConsumers: 'Null', - Token: 'SpRuntimeTokenError', - Arithmetic: 'SpArithmeticArithmeticError', - Transactional: 'SpRuntimeTransactionalError', - Exhausted: 'Null', - Corruption: 'Null', - Unavailable: 'Null', - RootNotAllowed: 'Null' - } - }, - /** - * Lookup26: sp_runtime::ModuleError - **/ - SpRuntimeModuleError: { - index: 'u8', - error: '[u8;4]' - }, - /** - * Lookup27: sp_runtime::TokenError - **/ - SpRuntimeTokenError: { - _enum: ['FundsUnavailable', 'OnlyProvider', 'BelowMinimum', 'CannotCreate', 'UnknownAsset', 'Frozen', 'Unsupported', 'CannotCreateHold', 'NotExpendable', 'Blocked'] - }, - /** - * Lookup28: sp_arithmetic::ArithmeticError - **/ - SpArithmeticArithmeticError: { - _enum: ['Underflow', 'Overflow', 'DivisionByZero'] - }, - /** - * Lookup29: sp_runtime::TransactionalError - **/ - SpRuntimeTransactionalError: { - _enum: ['LimitReached', 'NoLayer'] - }, - /** - * Lookup30: pallet_indices::pallet::Event - **/ - PalletIndicesEvent: { - _enum: { - IndexAssigned: { - who: 'AccountId32', - index: 'u64', - }, - IndexFreed: { - index: 'u64', - }, - IndexFrozen: { - index: 'u64', - who: 'AccountId32' - } - } - }, - /** - * Lookup31: pallet_balances::pallet::Event - **/ - PalletBalancesEvent: { - _enum: { - Endowed: { - account: 'AccountId32', - freeBalance: 'u128', - }, - DustLost: { - account: 'AccountId32', - amount: 'u128', - }, - Transfer: { - from: 'AccountId32', - to: 'AccountId32', - amount: 'u128', - }, - BalanceSet: { - who: 'AccountId32', - free: 'u128', - }, - Reserved: { - who: 'AccountId32', - amount: 'u128', - }, - Unreserved: { - who: 'AccountId32', - amount: 'u128', - }, - ReserveRepatriated: { - from: 'AccountId32', - to: 'AccountId32', - amount: 'u128', - destinationStatus: 'FrameSupportTokensMiscBalanceStatus', - }, - Deposit: { - who: 'AccountId32', - amount: 'u128', - }, - Withdraw: { - who: 'AccountId32', - amount: 'u128', - }, - Slashed: { - who: 'AccountId32', - amount: 'u128', - }, - Minted: { - who: 'AccountId32', - amount: 'u128', - }, - Burned: { - who: 'AccountId32', - amount: 'u128', - }, - Suspended: { - who: 'AccountId32', - amount: 'u128', - }, - Restored: { - who: 'AccountId32', - amount: 'u128', - }, - Upgraded: { - who: 'AccountId32', - }, - Issued: { - amount: 'u128', - }, - Rescinded: { - amount: 'u128', - }, - Locked: { - who: 'AccountId32', - amount: 'u128', - }, - Unlocked: { - who: 'AccountId32', - amount: 'u128', - }, - Frozen: { - who: 'AccountId32', - amount: 'u128', - }, - Thawed: { - who: 'AccountId32', - amount: 'u128' - } - } - }, - /** - * Lookup32: frame_support::traits::tokens::misc::BalanceStatus - **/ - FrameSupportTokensMiscBalanceStatus: { - _enum: ['Free', 'Reserved'] - }, - /** - * Lookup33: pallet_transaction_payment::pallet::Event - **/ - PalletTransactionPaymentEvent: { - _enum: { - TransactionFeePaid: { - who: 'AccountId32', - actualFee: 'u128', - tip: 'u128' - } - } - }, - /** - * Lookup34: pallet_session::pallet::Event - **/ - PalletSessionEvent: { - _enum: { - NewSession: { - sessionIndex: 'u32' - } - } - }, - /** - * Lookup35: parachain_staking::pallet::Event - **/ - ParachainStakingEvent: { - _enum: { - NewRound: '(u64,u32)', - EnteredTopCandidates: 'AccountId32', - LeftTopCandidates: 'AccountId32', - JoinedCollatorCandidates: '(AccountId32,u128)', - CollatorStakedMore: '(AccountId32,u128,u128)', - CollatorStakedLess: '(AccountId32,u128,u128)', - CollatorScheduledExit: '(u32,AccountId32,u32)', - CollatorCanceledExit: 'AccountId32', - CandidateLeft: '(AccountId32,u128)', - CollatorRemoved: '(AccountId32,u128)', - MaxCandidateStakeChanged: 'u128', - DelegatorStakedMore: '(AccountId32,AccountId32,u128,u128)', - DelegatorStakedLess: '(AccountId32,AccountId32,u128,u128)', - DelegatorLeft: '(AccountId32,u128)', - Delegation: '(AccountId32,u128,AccountId32,u128)', - DelegationReplaced: '(AccountId32,u128,AccountId32,u128,AccountId32,u128)', - DelegatorLeftCollator: '(AccountId32,AccountId32,u128,u128)', - Rewarded: '(AccountId32,u128)', - RoundInflationSet: '(Perquintill,Perquintill,Perquintill,Perquintill)', - MaxSelectedCandidatesSet: '(u32,u32)', - BlocksPerRoundSet: '(u32,u64,u64,u64)' - } - }, - /** - * Lookup37: pallet_democracy::pallet::Event - **/ - PalletDemocracyEvent: { - _enum: { - Proposed: { - proposalIndex: 'u32', - deposit: 'u128', - }, - Tabled: { - proposalIndex: 'u32', - deposit: 'u128', - }, - ExternalTabled: 'Null', - Started: { - refIndex: 'u32', - threshold: 'PalletDemocracyVoteThreshold', - }, - Passed: { - refIndex: 'u32', - }, - NotPassed: { - refIndex: 'u32', - }, - Cancelled: { - refIndex: 'u32', - }, - Delegated: { - who: 'AccountId32', - target: 'AccountId32', - }, - Undelegated: { - account: 'AccountId32', - }, - Vetoed: { - who: 'AccountId32', - proposalHash: 'H256', - until: 'u64', - }, - Blacklisted: { - proposalHash: 'H256', - }, - Voted: { - voter: 'AccountId32', - refIndex: 'u32', - vote: 'PalletDemocracyVoteAccountVote', - }, - Seconded: { - seconder: 'AccountId32', - propIndex: 'u32', - }, - ProposalCanceled: { - propIndex: 'u32', - }, - MetadataSet: { - _alias: { - hash_: 'hash', - }, - owner: 'PalletDemocracyMetadataOwner', - hash_: 'H256', - }, - MetadataCleared: { - _alias: { - hash_: 'hash', - }, - owner: 'PalletDemocracyMetadataOwner', - hash_: 'H256', - }, - MetadataTransferred: { - _alias: { - hash_: 'hash', - }, - prevOwner: 'PalletDemocracyMetadataOwner', - owner: 'PalletDemocracyMetadataOwner', - hash_: 'H256' - } - } - }, - /** - * Lookup38: pallet_democracy::vote_threshold::VoteThreshold - **/ - PalletDemocracyVoteThreshold: { - _enum: ['SuperMajorityApprove', 'SuperMajorityAgainst', 'SimpleMajority'] - }, - /** - * Lookup39: pallet_democracy::vote::AccountVote - **/ - PalletDemocracyVoteAccountVote: { - _enum: { - Standard: { - vote: 'Vote', - balance: 'u128', - }, - Split: { - aye: 'u128', - nay: 'u128' - } - } - }, - /** - * Lookup41: pallet_democracy::types::MetadataOwner - **/ - PalletDemocracyMetadataOwner: { - _enum: { - External: 'Null', - Proposal: 'u32', - Referendum: 'u32' - } - }, - /** - * Lookup42: pallet_collective::pallet::Event - **/ - PalletCollectiveEvent: { - _enum: { - Proposed: { - account: 'AccountId32', - proposalIndex: 'u32', - proposalHash: 'H256', - threshold: 'u32', - }, - Voted: { - account: 'AccountId32', - proposalHash: 'H256', - voted: 'bool', - yes: 'u32', - no: 'u32', - }, - Approved: { - proposalHash: 'H256', - }, - Disapproved: { - proposalHash: 'H256', - }, - Executed: { - proposalHash: 'H256', - result: 'Result', - }, - MemberExecuted: { - proposalHash: 'H256', - result: 'Result', - }, - Closed: { - proposalHash: 'H256', - yes: 'u32', - no: 'u32' - } - } - }, - /** - * Lookup47: pallet_membership::pallet::Event - **/ - PalletMembershipEvent: { - _enum: ['MemberAdded', 'MemberRemoved', 'MembersSwapped', 'MembersReset', 'KeyChanged', 'Dummy'] - }, - /** - * Lookup48: pallet_treasury::pallet::Event - **/ - PalletTreasuryEvent: { - _enum: { - Proposed: { - proposalIndex: 'u32', - }, - Spending: { - budgetRemaining: 'u128', - }, - Awarded: { - proposalIndex: 'u32', - award: 'u128', - account: 'AccountId32', - }, - Rejected: { - proposalIndex: 'u32', - slashed: 'u128', - }, - Burnt: { - burntFunds: 'u128', - }, - Rollover: { - rolloverBalance: 'u128', - }, - Deposit: { - value: 'u128', - }, - SpendApproved: { - proposalIndex: 'u32', - amount: 'u128', - beneficiary: 'AccountId32', - }, - UpdatedInactive: { - reactivated: 'u128', - deactivated: 'u128' - } - } - }, - /** - * Lookup49: pallet_utility::pallet::Event - **/ - PalletUtilityEvent: { - _enum: { - BatchInterrupted: { - index: 'u32', - error: 'SpRuntimeDispatchError', - }, - BatchCompleted: 'Null', - BatchCompletedWithErrors: 'Null', - ItemCompleted: 'Null', - ItemFailed: { - error: 'SpRuntimeDispatchError', - }, - DispatchedAs: { - result: 'Result' - } - } - }, - /** - * Lookup50: pallet_vesting::pallet::Event - **/ - PalletVestingEvent: { - _enum: { - VestingUpdated: { - account: 'AccountId32', - unvested: 'u128', - }, - VestingCompleted: { - account: 'AccountId32' - } - } - }, - /** - * Lookup51: pallet_scheduler::pallet::Event - **/ - PalletSchedulerEvent: { - _enum: { - Scheduled: { - when: 'u64', - index: 'u32', - }, - Canceled: { - when: 'u64', - index: 'u32', - }, - Dispatched: { - task: '(u64,u32)', - id: 'Option<[u8;32]>', - result: 'Result', - }, - CallUnavailable: { - task: '(u64,u32)', - id: 'Option<[u8;32]>', - }, - PeriodicFailed: { - task: '(u64,u32)', - id: 'Option<[u8;32]>', - }, - PermanentlyOverweight: { - task: '(u64,u32)', - id: 'Option<[u8;32]>' - } - } - }, - /** - * Lookup54: pallet_proxy::pallet::Event - **/ - PalletProxyEvent: { - _enum: { - ProxyExecuted: { - result: 'Result', - }, - PureCreated: { - pure: 'AccountId32', - who: 'AccountId32', - proxyType: 'SpiritnetRuntimeProxyType', - disambiguationIndex: 'u16', - }, - Announced: { - real: 'AccountId32', - proxy: 'AccountId32', - callHash: 'H256', - }, - ProxyAdded: { - delegator: 'AccountId32', - delegatee: 'AccountId32', - proxyType: 'SpiritnetRuntimeProxyType', - delay: 'u64', - }, - ProxyRemoved: { - delegator: 'AccountId32', - delegatee: 'AccountId32', - proxyType: 'SpiritnetRuntimeProxyType', - delay: 'u64' - } - } - }, - /** - * Lookup55: spiritnet_runtime::ProxyType - **/ - SpiritnetRuntimeProxyType: { - _enum: ['Any', 'NonTransfer', 'Governance', 'ParachainStaking', 'CancelProxy', 'NonDepositClaiming'] - }, - /** - * Lookup57: pallet_preimage::pallet::Event - **/ - PalletPreimageEvent: { - _enum: { - Noted: { - _alias: { - hash_: 'hash', - }, - hash_: 'H256', - }, - Requested: { - _alias: { - hash_: 'hash', - }, - hash_: 'H256', - }, - Cleared: { - _alias: { - hash_: 'hash', - }, - hash_: 'H256' - } - } - }, - /** - * Lookup59: pallet_tips::pallet::Event - **/ - PalletTipsEvent: { - _enum: { - NewTip: { - tipHash: 'H256', - }, - TipClosing: { - tipHash: 'H256', - }, - TipClosed: { - tipHash: 'H256', - who: 'AccountId32', - payout: 'u128', - }, - TipRetracted: { - tipHash: 'H256', - }, - TipSlashed: { - tipHash: 'H256', - finder: 'AccountId32', - deposit: 'u128' - } - } - }, - /** - * Lookup60: pallet_multisig::pallet::Event - **/ - PalletMultisigEvent: { - _enum: { - NewMultisig: { - approving: 'AccountId32', - multisig: 'AccountId32', - callHash: '[u8;32]', - }, - MultisigApproval: { - approving: 'AccountId32', - timepoint: 'PalletMultisigTimepoint', - multisig: 'AccountId32', - callHash: '[u8;32]', - }, - MultisigExecuted: { - approving: 'AccountId32', - timepoint: 'PalletMultisigTimepoint', - multisig: 'AccountId32', - callHash: '[u8;32]', - result: 'Result', - }, - MultisigCancelled: { - cancelling: 'AccountId32', - timepoint: 'PalletMultisigTimepoint', - multisig: 'AccountId32', - callHash: '[u8;32]' - } - } - }, - /** - * Lookup61: pallet_multisig::Timepoint - **/ - PalletMultisigTimepoint: { - height: 'u64', - index: 'u32' - }, - /** - * Lookup62: ctype::pallet::Event - **/ - CtypeEvent: { - _enum: { - CTypeCreated: '(AccountId32,H256)', - CTypeUpdated: 'H256' - } - }, - /** - * Lookup63: attestation::pallet::Event - **/ - AttestationEvent: { - _enum: { - AttestationCreated: '(AccountId32,H256,H256,Option)', - AttestationRevoked: '(AccountId32,H256)', - AttestationRemoved: '(AccountId32,H256)', - DepositReclaimed: '(AccountId32,H256)' - } - }, - /** - * Lookup65: runtime_common::authorization::AuthorizationId - **/ - RuntimeCommonAuthorizationAuthorizationId: { - _enum: { - Delegation: 'H256' - } - }, - /** - * Lookup66: delegation::pallet::Event - **/ - DelegationEvent: { - _enum: { - HierarchyCreated: '(AccountId32,H256,H256)', - HierarchyRevoked: '(AccountId32,H256)', - HierarchyRemoved: '(AccountId32,H256)', - DelegationCreated: '(AccountId32,H256,H256,H256,AccountId32,DelegationDelegationHierarchyPermissions)', - DelegationRevoked: '(AccountId32,H256)', - DelegationRemoved: '(AccountId32,H256)', - DepositReclaimed: '(AccountId32,H256)' - } - }, - /** - * Lookup67: delegation::delegation_hierarchy::Permissions - **/ - DelegationDelegationHierarchyPermissions: { - bits: 'u32' - }, - /** - * Lookup68: did::pallet::Event - **/ - DidEvent: { - _enum: { - DidCreated: '(AccountId32,AccountId32)', - DidUpdated: 'AccountId32', - DidDeleted: 'AccountId32', - DidCallDispatched: '(AccountId32,Result)' - } - }, - /** - * Lookup69: pallet_did_lookup::pallet::Event - **/ - PalletDidLookupEvent: { - _enum: { - AssociationEstablished: '(PalletDidLookupLinkableAccountLinkableAccountId,AccountId32)', - AssociationRemoved: '(PalletDidLookupLinkableAccountLinkableAccountId,AccountId32)', - MigrationProgress: 'Null', - MigrationCompleted: 'Null' - } - }, - /** - * Lookup70: pallet_did_lookup::linkable_account::LinkableAccountId - **/ - PalletDidLookupLinkableAccountLinkableAccountId: { - _enum: { - AccountId20: 'PalletDidLookupAccountAccountId20', - AccountId32: 'AccountId32' - } - }, - /** - * Lookup71: pallet_did_lookup::account::AccountId20 - **/ - PalletDidLookupAccountAccountId20: '[u8;20]', - /** - * Lookup73: pallet_web3_names::pallet::Event - **/ - PalletWeb3NamesEvent: { - _enum: { - Web3NameClaimed: { - owner: 'AccountId32', - name: 'Bytes', - }, - Web3NameReleased: { - owner: 'AccountId32', - name: 'Bytes', - }, - Web3NameBanned: { - name: 'Bytes', - }, - Web3NameUnbanned: { - name: 'Bytes' - } - } - }, - /** - * Lookup76: public_credentials::pallet::Event - **/ - PublicCredentialsEvent: { - _enum: { - CredentialStored: { - subjectId: 'RuntimeCommonAssetsAssetDid', - credentialId: 'H256', - }, - CredentialRemoved: { - subjectId: 'RuntimeCommonAssetsAssetDid', - credentialId: 'H256', - }, - CredentialRevoked: { - credentialId: 'H256', - }, - CredentialUnrevoked: { - credentialId: 'H256' - } - } - }, - /** - * Lookup77: runtime_common::assets::AssetDid - **/ - RuntimeCommonAssetsAssetDid: 'KiltAssetDidsV1AssetDid', - /** - * Lookup78: kilt_asset_dids::v1::AssetDid - **/ - KiltAssetDidsV1AssetDid: { - chainId: 'KiltAssetDidsChainV1ChainId', - assetId: 'KiltAssetDidsAssetV1AssetId' - }, - /** - * Lookup79: kilt_asset_dids::chain::v1::ChainId - **/ - KiltAssetDidsChainV1ChainId: { - _enum: { - Eip155: 'u128', - Bip122: 'KiltAssetDidsChainV1GenesisHexHash32Reference', - Dotsama: 'KiltAssetDidsChainV1GenesisHexHash32Reference', - Solana: 'Bytes', - Generic: 'KiltAssetDidsChainV1GenericChainId' - } - }, - /** - * Lookup81: kilt_asset_dids::chain::v1::GenesisHexHash32Reference - **/ - KiltAssetDidsChainV1GenesisHexHash32Reference: '[u8;16]', - /** - * Lookup85: kilt_asset_dids::chain::v1::GenericChainId - **/ - KiltAssetDidsChainV1GenericChainId: { - namespace: 'Bytes', - reference: 'Bytes' - }, - /** - * Lookup89: kilt_asset_dids::asset::v1::AssetId - **/ - KiltAssetDidsAssetV1AssetId: { - _enum: { - Slip44: 'U256', - Erc20: 'KiltAssetDidsAssetV1EvmSmartContractFungibleReference', - Erc721: 'KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference', - Erc1155: 'KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference', - Generic: 'KiltAssetDidsAssetV1GenericAssetId' - } - }, - /** - * Lookup93: kilt_asset_dids::asset::v1::EvmSmartContractFungibleReference - **/ - KiltAssetDidsAssetV1EvmSmartContractFungibleReference: '[u8;20]', - /** - * Lookup94: kilt_asset_dids::asset::v1::EvmSmartContractNonFungibleReference - **/ - KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference: '(KiltAssetDidsAssetV1EvmSmartContractFungibleReference,Option)', - /** - * Lookup98: kilt_asset_dids::asset::v1::GenericAssetId - **/ - KiltAssetDidsAssetV1GenericAssetId: { - namespace: 'Bytes', - reference: 'Bytes', - id: 'Option' - }, - /** - * Lookup104: pallet_migration::pallet::Event - **/ - PalletMigrationEvent: { - _enum: { - EntriesUpdated: 'PalletMigrationEntriesToMigrate' - } - }, - /** - * Lookup105: pallet_migration::pallet::EntriesToMigrate - **/ - PalletMigrationEntriesToMigrate: { - attestation: 'Vec', - delegation: 'Vec', - did: 'Vec', - lookup: 'Vec', - w3n: 'Vec', - publicCredentials: 'Vec<(RuntimeCommonAssetsAssetDid,H256)>' - }, - /** - * Lookup106: spiritnet_runtime::Runtime - **/ - SpiritnetRuntimeRuntime: 'Null', - /** - * Lookup118: cumulus_pallet_parachain_system::pallet::Event - **/ - CumulusPalletParachainSystemEvent: { - _enum: { - ValidationFunctionStored: 'Null', - ValidationFunctionApplied: { - relayChainBlockNum: 'u32', - }, - ValidationFunctionDiscarded: 'Null', - UpgradeAuthorized: { - codeHash: 'H256', - }, - DownwardMessagesReceived: { - count: 'u32', - }, - DownwardMessagesProcessed: { - weightUsed: 'SpWeightsWeightV2Weight', - dmqHead: 'H256', - }, - UpwardMessageSent: { - messageHash: 'Option<[u8;32]>' - } - } - }, - /** - * Lookup119: cumulus_pallet_xcmp_queue::pallet::Event - **/ - CumulusPalletXcmpQueueEvent: { - _enum: { - Success: { - messageHash: '[u8;32]', - messageId: '[u8;32]', - weight: 'SpWeightsWeightV2Weight', - }, - Fail: { - messageHash: '[u8;32]', - messageId: '[u8;32]', - error: 'XcmV3TraitsError', - weight: 'SpWeightsWeightV2Weight', - }, - BadVersion: { - messageHash: '[u8;32]', - }, - BadFormat: { - messageHash: '[u8;32]', - }, - XcmpMessageSent: { - messageHash: '[u8;32]', - }, - OverweightEnqueued: { - sender: 'u32', - sentAt: 'u32', - index: 'u64', - required: 'SpWeightsWeightV2Weight', - }, - OverweightServiced: { - index: 'u64', - used: 'SpWeightsWeightV2Weight' - } - } - }, - /** - * Lookup120: xcm::v3::traits::Error - **/ - XcmV3TraitsError: { - _enum: { - Overflow: 'Null', - Unimplemented: 'Null', - UntrustedReserveLocation: 'Null', - UntrustedTeleportLocation: 'Null', - LocationFull: 'Null', - LocationNotInvertible: 'Null', - BadOrigin: 'Null', - InvalidLocation: 'Null', - AssetNotFound: 'Null', - FailedToTransactAsset: 'Null', - NotWithdrawable: 'Null', - LocationCannotHold: 'Null', - ExceedsMaxMessageSize: 'Null', - DestinationUnsupported: 'Null', - Transport: 'Null', - Unroutable: 'Null', - UnknownClaim: 'Null', - FailedToDecode: 'Null', - MaxWeightInvalid: 'Null', - NotHoldingFees: 'Null', - TooExpensive: 'Null', - Trap: 'u64', - ExpectationFalse: 'Null', - PalletNotFound: 'Null', - NameMismatch: 'Null', - VersionIncompatible: 'Null', - HoldingWouldOverflow: 'Null', - ExportError: 'Null', - ReanchorFailed: 'Null', - NoDeal: 'Null', - FeesNotMet: 'Null', - LockError: 'Null', - NoPermission: 'Null', - Unanchored: 'Null', - NotDepositable: 'Null', - UnhandledXcmVersion: 'Null', - WeightLimitReached: 'SpWeightsWeightV2Weight', - Barrier: 'Null', - WeightNotComputable: 'Null', - ExceedsStackLimit: 'Null' - } - }, - /** - * Lookup122: pallet_xcm::pallet::Event - **/ - PalletXcmEvent: { - _enum: { - Attempted: { - outcome: 'XcmV3TraitsOutcome', - }, - Sent: { - origin: 'XcmV3MultiLocation', - destination: 'XcmV3MultiLocation', - message: 'XcmV3Xcm', - messageId: '[u8;32]', - }, - UnexpectedResponse: { - origin: 'XcmV3MultiLocation', - queryId: 'u64', - }, - ResponseReady: { - queryId: 'u64', - response: 'XcmV3Response', - }, - Notified: { - queryId: 'u64', - palletIndex: 'u8', - callIndex: 'u8', - }, - NotifyOverweight: { - queryId: 'u64', - palletIndex: 'u8', - callIndex: 'u8', - actualWeight: 'SpWeightsWeightV2Weight', - maxBudgetedWeight: 'SpWeightsWeightV2Weight', - }, - NotifyDispatchError: { - queryId: 'u64', - palletIndex: 'u8', - callIndex: 'u8', - }, - NotifyDecodeFailed: { - queryId: 'u64', - palletIndex: 'u8', - callIndex: 'u8', - }, - InvalidResponder: { - origin: 'XcmV3MultiLocation', - queryId: 'u64', - expectedLocation: 'Option', - }, - InvalidResponderVersion: { - origin: 'XcmV3MultiLocation', - queryId: 'u64', - }, - ResponseTaken: { - queryId: 'u64', - }, - AssetsTrapped: { - _alias: { - hash_: 'hash', - }, - hash_: 'H256', - origin: 'XcmV3MultiLocation', - assets: 'XcmVersionedMultiAssets', - }, - VersionChangeNotified: { - destination: 'XcmV3MultiLocation', - result: 'u32', - cost: 'XcmV3MultiassetMultiAssets', - messageId: '[u8;32]', - }, - SupportedVersionChanged: { - location: 'XcmV3MultiLocation', - version: 'u32', - }, - NotifyTargetSendFail: { - location: 'XcmV3MultiLocation', - queryId: 'u64', - error: 'XcmV3TraitsError', - }, - NotifyTargetMigrationFail: { - location: 'XcmVersionedMultiLocation', - queryId: 'u64', - }, - InvalidQuerierVersion: { - origin: 'XcmV3MultiLocation', - queryId: 'u64', - }, - InvalidQuerier: { - origin: 'XcmV3MultiLocation', - queryId: 'u64', - expectedQuerier: 'XcmV3MultiLocation', - maybeActualQuerier: 'Option', - }, - VersionNotifyStarted: { - destination: 'XcmV3MultiLocation', - cost: 'XcmV3MultiassetMultiAssets', - messageId: '[u8;32]', - }, - VersionNotifyRequested: { - destination: 'XcmV3MultiLocation', - cost: 'XcmV3MultiassetMultiAssets', - messageId: '[u8;32]', - }, - VersionNotifyUnrequested: { - destination: 'XcmV3MultiLocation', - cost: 'XcmV3MultiassetMultiAssets', - messageId: '[u8;32]', - }, - FeesPaid: { - paying: 'XcmV3MultiLocation', - fees: 'XcmV3MultiassetMultiAssets', - }, - AssetsClaimed: { - _alias: { - hash_: 'hash', - }, - hash_: 'H256', - origin: 'XcmV3MultiLocation', - assets: 'XcmVersionedMultiAssets' - } - } - }, - /** - * Lookup123: xcm::v3::traits::Outcome - **/ - XcmV3TraitsOutcome: { - _enum: { - Complete: 'SpWeightsWeightV2Weight', - Incomplete: '(SpWeightsWeightV2Weight,XcmV3TraitsError)', - Error: 'XcmV3TraitsError' - } - }, - /** - * Lookup124: xcm::v3::multilocation::MultiLocation - **/ - XcmV3MultiLocation: { - parents: 'u8', - interior: 'XcmV3Junctions' - }, - /** - * Lookup125: xcm::v3::junctions::Junctions - **/ - XcmV3Junctions: { - _enum: { - Here: 'Null', - X1: 'XcmV3Junction', - X2: '(XcmV3Junction,XcmV3Junction)', - X3: '(XcmV3Junction,XcmV3Junction,XcmV3Junction)', - X4: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)', - X5: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)', - X6: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)', - X7: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)', - X8: '(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)' - } - }, - /** - * Lookup126: xcm::v3::junction::Junction - **/ - XcmV3Junction: { - _enum: { - Parachain: 'Compact', - AccountId32: { - network: 'Option', - id: '[u8;32]', - }, - AccountIndex64: { - network: 'Option', - index: 'Compact', - }, - AccountKey20: { - network: 'Option', - key: '[u8;20]', - }, - PalletInstance: 'u8', - GeneralIndex: 'Compact', - GeneralKey: { - length: 'u8', - data: '[u8;32]', - }, - OnlyChild: 'Null', - Plurality: { - id: 'XcmV3JunctionBodyId', - part: 'XcmV3JunctionBodyPart', - }, - GlobalConsensus: 'XcmV3JunctionNetworkId' - } - }, - /** - * Lookup129: xcm::v3::junction::NetworkId - **/ - XcmV3JunctionNetworkId: { - _enum: { - ByGenesis: '[u8;32]', - ByFork: { - blockNumber: 'u64', - blockHash: '[u8;32]', - }, - Polkadot: 'Null', - Kusama: 'Null', - Westend: 'Null', - Rococo: 'Null', - Wococo: 'Null', - Ethereum: { - chainId: 'Compact', - }, - BitcoinCore: 'Null', - BitcoinCash: 'Null' - } - }, - /** - * Lookup131: xcm::v3::junction::BodyId - **/ - XcmV3JunctionBodyId: { - _enum: { - Unit: 'Null', - Moniker: '[u8;4]', - Index: 'Compact', - Executive: 'Null', - Technical: 'Null', - Legislative: 'Null', - Judicial: 'Null', - Defense: 'Null', - Administration: 'Null', - Treasury: 'Null' - } - }, - /** - * Lookup132: xcm::v3::junction::BodyPart - **/ - XcmV3JunctionBodyPart: { - _enum: { - Voice: 'Null', - Members: { - count: 'Compact', - }, - Fraction: { - nom: 'Compact', - denom: 'Compact', - }, - AtLeastProportion: { - nom: 'Compact', - denom: 'Compact', - }, - MoreThanProportion: { - nom: 'Compact', - denom: 'Compact' - } - } - }, - /** - * Lookup133: xcm::v3::Xcm - **/ - XcmV3Xcm: 'Vec', - /** - * Lookup135: xcm::v3::Instruction - **/ - XcmV3Instruction: { - _enum: { - WithdrawAsset: 'XcmV3MultiassetMultiAssets', - ReserveAssetDeposited: 'XcmV3MultiassetMultiAssets', - ReceiveTeleportedAsset: 'XcmV3MultiassetMultiAssets', - QueryResponse: { - queryId: 'Compact', - response: 'XcmV3Response', - maxWeight: 'SpWeightsWeightV2Weight', - querier: 'Option', - }, - TransferAsset: { - assets: 'XcmV3MultiassetMultiAssets', - beneficiary: 'XcmV3MultiLocation', - }, - TransferReserveAsset: { - assets: 'XcmV3MultiassetMultiAssets', - dest: 'XcmV3MultiLocation', - xcm: 'XcmV3Xcm', - }, - Transact: { - originKind: 'XcmV2OriginKind', - requireWeightAtMost: 'SpWeightsWeightV2Weight', - call: 'XcmDoubleEncoded', - }, - HrmpNewChannelOpenRequest: { - sender: 'Compact', - maxMessageSize: 'Compact', - maxCapacity: 'Compact', - }, - HrmpChannelAccepted: { - recipient: 'Compact', - }, - HrmpChannelClosing: { - initiator: 'Compact', - sender: 'Compact', - recipient: 'Compact', - }, - ClearOrigin: 'Null', - DescendOrigin: 'XcmV3Junctions', - ReportError: 'XcmV3QueryResponseInfo', - DepositAsset: { - assets: 'XcmV3MultiassetMultiAssetFilter', - beneficiary: 'XcmV3MultiLocation', - }, - DepositReserveAsset: { - assets: 'XcmV3MultiassetMultiAssetFilter', - dest: 'XcmV3MultiLocation', - xcm: 'XcmV3Xcm', - }, - ExchangeAsset: { - give: 'XcmV3MultiassetMultiAssetFilter', - want: 'XcmV3MultiassetMultiAssets', - maximal: 'bool', - }, - InitiateReserveWithdraw: { - assets: 'XcmV3MultiassetMultiAssetFilter', - reserve: 'XcmV3MultiLocation', - xcm: 'XcmV3Xcm', - }, - InitiateTeleport: { - assets: 'XcmV3MultiassetMultiAssetFilter', - dest: 'XcmV3MultiLocation', - xcm: 'XcmV3Xcm', - }, - ReportHolding: { - responseInfo: 'XcmV3QueryResponseInfo', - assets: 'XcmV3MultiassetMultiAssetFilter', - }, - BuyExecution: { - fees: 'XcmV3MultiAsset', - weightLimit: 'XcmV3WeightLimit', - }, - RefundSurplus: 'Null', - SetErrorHandler: 'XcmV3Xcm', - SetAppendix: 'XcmV3Xcm', - ClearError: 'Null', - ClaimAsset: { - assets: 'XcmV3MultiassetMultiAssets', - ticket: 'XcmV3MultiLocation', - }, - Trap: 'Compact', - SubscribeVersion: { - queryId: 'Compact', - maxResponseWeight: 'SpWeightsWeightV2Weight', - }, - UnsubscribeVersion: 'Null', - BurnAsset: 'XcmV3MultiassetMultiAssets', - ExpectAsset: 'XcmV3MultiassetMultiAssets', - ExpectOrigin: 'Option', - ExpectError: 'Option<(u32,XcmV3TraitsError)>', - ExpectTransactStatus: 'XcmV3MaybeErrorCode', - QueryPallet: { - moduleName: 'Bytes', - responseInfo: 'XcmV3QueryResponseInfo', - }, - ExpectPallet: { - index: 'Compact', - name: 'Bytes', - moduleName: 'Bytes', - crateMajor: 'Compact', - minCrateMinor: 'Compact', - }, - ReportTransactStatus: 'XcmV3QueryResponseInfo', - ClearTransactStatus: 'Null', - UniversalOrigin: 'XcmV3Junction', - ExportMessage: { - network: 'XcmV3JunctionNetworkId', - destination: 'XcmV3Junctions', - xcm: 'XcmV3Xcm', - }, - LockAsset: { - asset: 'XcmV3MultiAsset', - unlocker: 'XcmV3MultiLocation', - }, - UnlockAsset: { - asset: 'XcmV3MultiAsset', - target: 'XcmV3MultiLocation', - }, - NoteUnlockable: { - asset: 'XcmV3MultiAsset', - owner: 'XcmV3MultiLocation', - }, - RequestUnlock: { - asset: 'XcmV3MultiAsset', - locker: 'XcmV3MultiLocation', - }, - SetFeesMode: { - jitWithdraw: 'bool', - }, - SetTopic: '[u8;32]', - ClearTopic: 'Null', - AliasOrigin: 'XcmV3MultiLocation', - UnpaidExecution: { - weightLimit: 'XcmV3WeightLimit', - checkOrigin: 'Option' - } - } - }, - /** - * Lookup136: xcm::v3::multiasset::MultiAssets - **/ - XcmV3MultiassetMultiAssets: 'Vec', - /** - * Lookup138: xcm::v3::multiasset::MultiAsset - **/ - XcmV3MultiAsset: { - id: 'XcmV3MultiassetAssetId', - fun: 'XcmV3MultiassetFungibility' - }, - /** - * Lookup139: xcm::v3::multiasset::AssetId - **/ - XcmV3MultiassetAssetId: { - _enum: { - Concrete: 'XcmV3MultiLocation', - Abstract: '[u8;32]' - } - }, - /** - * Lookup140: xcm::v3::multiasset::Fungibility - **/ - XcmV3MultiassetFungibility: { - _enum: { - Fungible: 'Compact', - NonFungible: 'XcmV3MultiassetAssetInstance' - } - }, - /** - * Lookup141: xcm::v3::multiasset::AssetInstance - **/ - XcmV3MultiassetAssetInstance: { - _enum: { - Undefined: 'Null', - Index: 'Compact', - Array4: '[u8;4]', - Array8: '[u8;8]', - Array16: '[u8;16]', - Array32: '[u8;32]' - } - }, - /** - * Lookup143: xcm::v3::Response - **/ - XcmV3Response: { - _enum: { - Null: 'Null', - Assets: 'XcmV3MultiassetMultiAssets', - ExecutionResult: 'Option<(u32,XcmV3TraitsError)>', - Version: 'u32', - PalletsInfo: 'Vec', - DispatchResult: 'XcmV3MaybeErrorCode' - } - }, - /** - * Lookup147: xcm::v3::PalletInfo - **/ - XcmV3PalletInfo: { - index: 'Compact', - name: 'Bytes', - moduleName: 'Bytes', - major: 'Compact', - minor: 'Compact', - patch: 'Compact' - }, - /** - * Lookup150: xcm::v3::MaybeErrorCode - **/ - XcmV3MaybeErrorCode: { - _enum: { - Success: 'Null', - Error: 'Bytes', - TruncatedError: 'Bytes' - } - }, - /** - * Lookup153: xcm::v2::OriginKind - **/ - XcmV2OriginKind: { - _enum: ['Native', 'SovereignAccount', 'Superuser', 'Xcm'] - }, - /** - * Lookup154: xcm::double_encoded::DoubleEncoded - **/ - XcmDoubleEncoded: { - encoded: 'Bytes' - }, - /** - * Lookup155: xcm::v3::QueryResponseInfo - **/ - XcmV3QueryResponseInfo: { - destination: 'XcmV3MultiLocation', - queryId: 'Compact', - maxWeight: 'SpWeightsWeightV2Weight' - }, - /** - * Lookup156: xcm::v3::multiasset::MultiAssetFilter - **/ - XcmV3MultiassetMultiAssetFilter: { - _enum: { - Definite: 'XcmV3MultiassetMultiAssets', - Wild: 'XcmV3MultiassetWildMultiAsset' - } - }, - /** - * Lookup157: xcm::v3::multiasset::WildMultiAsset - **/ - XcmV3MultiassetWildMultiAsset: { - _enum: { - All: 'Null', - AllOf: { - id: 'XcmV3MultiassetAssetId', - fun: 'XcmV3MultiassetWildFungibility', - }, - AllCounted: 'Compact', - AllOfCounted: { - id: 'XcmV3MultiassetAssetId', - fun: 'XcmV3MultiassetWildFungibility', - count: 'Compact' - } - } - }, - /** - * Lookup158: xcm::v3::multiasset::WildFungibility - **/ - XcmV3MultiassetWildFungibility: { - _enum: ['Fungible', 'NonFungible'] - }, - /** - * Lookup159: xcm::v3::WeightLimit - **/ - XcmV3WeightLimit: { - _enum: { - Unlimited: 'Null', - Limited: 'SpWeightsWeightV2Weight' - } - }, - /** - * Lookup160: xcm::VersionedMultiAssets - **/ - XcmVersionedMultiAssets: { - _enum: { - __Unused0: 'Null', - V2: 'XcmV2MultiassetMultiAssets', - __Unused2: 'Null', - V3: 'XcmV3MultiassetMultiAssets' - } - }, - /** - * Lookup161: xcm::v2::multiasset::MultiAssets - **/ - XcmV2MultiassetMultiAssets: 'Vec', - /** - * Lookup163: xcm::v2::multiasset::MultiAsset - **/ - XcmV2MultiAsset: { - id: 'XcmV2MultiassetAssetId', - fun: 'XcmV2MultiassetFungibility' - }, - /** - * Lookup164: xcm::v2::multiasset::AssetId - **/ - XcmV2MultiassetAssetId: { - _enum: { - Concrete: 'XcmV2MultiLocation', - Abstract: 'Bytes' - } - }, - /** - * Lookup165: xcm::v2::multilocation::MultiLocation - **/ - XcmV2MultiLocation: { - parents: 'u8', - interior: 'XcmV2MultilocationJunctions' - }, - /** - * Lookup166: xcm::v2::multilocation::Junctions - **/ - XcmV2MultilocationJunctions: { - _enum: { - Here: 'Null', - X1: 'XcmV2Junction', - X2: '(XcmV2Junction,XcmV2Junction)', - X3: '(XcmV2Junction,XcmV2Junction,XcmV2Junction)', - X4: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)', - X5: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)', - X6: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)', - X7: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)', - X8: '(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)' - } - }, - /** - * Lookup167: xcm::v2::junction::Junction - **/ - XcmV2Junction: { - _enum: { - Parachain: 'Compact', - AccountId32: { - network: 'XcmV2NetworkId', - id: '[u8;32]', - }, - AccountIndex64: { - network: 'XcmV2NetworkId', - index: 'Compact', - }, - AccountKey20: { - network: 'XcmV2NetworkId', - key: '[u8;20]', - }, - PalletInstance: 'u8', - GeneralIndex: 'Compact', - GeneralKey: 'Bytes', - OnlyChild: 'Null', - Plurality: { - id: 'XcmV2BodyId', - part: 'XcmV2BodyPart' - } - } - }, - /** - * Lookup168: xcm::v2::NetworkId - **/ - XcmV2NetworkId: { - _enum: { - Any: 'Null', - Named: 'Bytes', - Polkadot: 'Null', - Kusama: 'Null' - } - }, - /** - * Lookup170: xcm::v2::BodyId - **/ - XcmV2BodyId: { - _enum: { - Unit: 'Null', - Named: 'Bytes', - Index: 'Compact', - Executive: 'Null', - Technical: 'Null', - Legislative: 'Null', - Judicial: 'Null', - Defense: 'Null', - Administration: 'Null', - Treasury: 'Null' - } - }, - /** - * Lookup171: xcm::v2::BodyPart - **/ - XcmV2BodyPart: { - _enum: { - Voice: 'Null', - Members: { - count: 'Compact', - }, - Fraction: { - nom: 'Compact', - denom: 'Compact', - }, - AtLeastProportion: { - nom: 'Compact', - denom: 'Compact', - }, - MoreThanProportion: { - nom: 'Compact', - denom: 'Compact' - } - } - }, - /** - * Lookup172: xcm::v2::multiasset::Fungibility - **/ - XcmV2MultiassetFungibility: { - _enum: { - Fungible: 'Compact', - NonFungible: 'XcmV2MultiassetAssetInstance' - } - }, - /** - * Lookup173: xcm::v2::multiasset::AssetInstance - **/ - XcmV2MultiassetAssetInstance: { - _enum: { - Undefined: 'Null', - Index: 'Compact', - Array4: '[u8;4]', - Array8: '[u8;8]', - Array16: '[u8;16]', - Array32: '[u8;32]', - Blob: 'Bytes' - } - }, - /** - * Lookup174: xcm::VersionedMultiLocation - **/ - XcmVersionedMultiLocation: { - _enum: { - __Unused0: 'Null', - V2: 'XcmV2MultiLocation', - __Unused2: 'Null', - V3: 'XcmV3MultiLocation' - } - }, - /** - * Lookup175: cumulus_pallet_xcm::pallet::Event - **/ - CumulusPalletXcmEvent: { - _enum: { - InvalidFormat: '[u8;32]', - UnsupportedVersion: '[u8;32]', - ExecutedDownward: '([u8;32],XcmV3TraitsOutcome)' - } - }, - /** - * Lookup176: cumulus_pallet_dmp_queue::pallet::Event - **/ - CumulusPalletDmpQueueEvent: { - _enum: { - InvalidFormat: { - messageHash: '[u8;32]', - }, - UnsupportedVersion: { - messageHash: '[u8;32]', - }, - ExecutedDownward: { - messageHash: '[u8;32]', - messageId: '[u8;32]', - outcome: 'XcmV3TraitsOutcome', - }, - WeightExhausted: { - messageHash: '[u8;32]', - messageId: '[u8;32]', - remainingWeight: 'SpWeightsWeightV2Weight', - requiredWeight: 'SpWeightsWeightV2Weight', - }, - OverweightEnqueued: { - messageHash: '[u8;32]', - messageId: '[u8;32]', - overweightIndex: 'u64', - requiredWeight: 'SpWeightsWeightV2Weight', - }, - OverweightServiced: { - overweightIndex: 'u64', - weightUsed: 'SpWeightsWeightV2Weight', - }, - MaxMessagesExhausted: { - messageHash: '[u8;32]' - } - } - }, - /** - * Lookup177: frame_system::Phase - **/ - FrameSystemPhase: { - _enum: { - ApplyExtrinsic: 'u32', - Finalization: 'Null', - Initialization: 'Null' - } - }, - /** - * Lookup179: frame_system::LastRuntimeUpgradeInfo - **/ - FrameSystemLastRuntimeUpgradeInfo: { - specVersion: 'Compact', - specName: 'Text' - }, - /** - * Lookup181: frame_system::pallet::Call - **/ - FrameSystemCall: { - _enum: { - remark: { - remark: 'Bytes', - }, - set_heap_pages: { - pages: 'u64', - }, - set_code: { - code: 'Bytes', - }, - set_code_without_checks: { - code: 'Bytes', - }, - set_storage: { - items: 'Vec<(Bytes,Bytes)>', - }, - kill_storage: { - _alias: { - keys_: 'keys', - }, - keys_: 'Vec', - }, - kill_prefix: { - prefix: 'Bytes', - subkeys: 'u32', - }, - remark_with_event: { - remark: 'Bytes' - } - } - }, - /** - * Lookup185: frame_system::limits::BlockWeights - **/ - FrameSystemLimitsBlockWeights: { - baseBlock: 'SpWeightsWeightV2Weight', - maxBlock: 'SpWeightsWeightV2Weight', - perClass: 'FrameSupportDispatchPerDispatchClassWeightsPerClass' - }, - /** - * Lookup186: frame_support::dispatch::PerDispatchClass - **/ - FrameSupportDispatchPerDispatchClassWeightsPerClass: { - normal: 'FrameSystemLimitsWeightsPerClass', - operational: 'FrameSystemLimitsWeightsPerClass', - mandatory: 'FrameSystemLimitsWeightsPerClass' - }, - /** - * Lookup187: frame_system::limits::WeightsPerClass - **/ - FrameSystemLimitsWeightsPerClass: { - baseExtrinsic: 'SpWeightsWeightV2Weight', - maxExtrinsic: 'Option', - maxTotal: 'Option', - reserved: 'Option' - }, - /** - * Lookup189: frame_system::limits::BlockLength - **/ - FrameSystemLimitsBlockLength: { - max: 'FrameSupportDispatchPerDispatchClassU32' - }, - /** - * Lookup190: frame_support::dispatch::PerDispatchClass - **/ - FrameSupportDispatchPerDispatchClassU32: { - normal: 'u32', - operational: 'u32', - mandatory: 'u32' - }, - /** - * Lookup191: sp_weights::RuntimeDbWeight - **/ - SpWeightsRuntimeDbWeight: { - read: 'u64', - write: 'u64' - }, - /** - * Lookup192: sp_version::RuntimeVersion - **/ - SpVersionRuntimeVersion: { - specName: 'Text', - implName: 'Text', - authoringVersion: 'u32', - specVersion: 'u32', - implVersion: 'u32', - apis: 'Vec<([u8;8],u32)>', - transactionVersion: 'u32', - stateVersion: 'u8' - }, - /** - * Lookup196: frame_system::pallet::Error - **/ - FrameSystemError: { - _enum: ['InvalidSpecName', 'SpecVersionNeedsToIncrease', 'FailedToExtractRuntimeVersion', 'NonDefaultComposite', 'NonZeroRefCount', 'CallFiltered'] - }, - /** - * Lookup197: pallet_timestamp::pallet::Call - **/ - PalletTimestampCall: { - _enum: { - set: { - now: 'Compact' - } - } - }, - /** - * Lookup199: pallet_indices::pallet::Call - **/ - PalletIndicesCall: { - _enum: { - claim: { - index: 'u64', - }, - transfer: { - _alias: { - new_: 'new', - }, - new_: 'MultiAddress', - index: 'u64', - }, - free: { - index: 'u64', - }, - force_transfer: { - _alias: { - new_: 'new', - }, - new_: 'MultiAddress', - index: 'u64', - freeze: 'bool', - }, - freeze: { - index: 'u64' - } - } - }, - /** - * Lookup202: pallet_indices::pallet::Error - **/ - PalletIndicesError: { - _enum: ['NotAssigned', 'NotOwner', 'InUse', 'NotTransfer', 'Permanent'] - }, - /** - * Lookup204: pallet_balances::types::BalanceLock - **/ - PalletBalancesBalanceLock: { - id: '[u8;8]', - amount: 'u128', - reasons: 'PalletBalancesReasons' - }, - /** - * Lookup205: pallet_balances::types::Reasons - **/ - PalletBalancesReasons: { - _enum: ['Fee', 'Misc', 'All'] - }, - /** - * Lookup208: pallet_balances::types::ReserveData - **/ - PalletBalancesReserveData: { - id: '[u8;8]', - amount: 'u128' - }, - /** - * Lookup211: pallet_balances::types::IdAmount - **/ - PalletBalancesIdAmountRuntimeHoldReason: { - id: 'SpiritnetRuntimeRuntimeHoldReason', - amount: 'u128' - }, - /** - * Lookup212: spiritnet_runtime::RuntimeHoldReason - **/ - SpiritnetRuntimeRuntimeHoldReason: { - _enum: { - __Unused0: 'Null', - __Unused1: 'Null', - __Unused2: 'Null', - __Unused3: 'Null', - __Unused4: 'Null', - __Unused5: 'Null', - __Unused6: 'Null', - __Unused7: 'Null', - __Unused8: 'Null', - __Unused9: 'Null', - __Unused10: 'Null', - __Unused11: 'Null', - __Unused12: 'Null', - __Unused13: 'Null', - __Unused14: 'Null', - __Unused15: 'Null', - __Unused16: 'Null', - __Unused17: 'Null', - __Unused18: 'Null', - __Unused19: 'Null', - __Unused20: 'Null', - __Unused21: 'Null', - __Unused22: 'Null', - __Unused23: 'Null', - __Unused24: 'Null', - __Unused25: 'Null', - __Unused26: 'Null', - __Unused27: 'Null', - __Unused28: 'Null', - __Unused29: 'Null', - __Unused30: 'Null', - __Unused31: 'Null', - __Unused32: 'Null', - __Unused33: 'Null', - __Unused34: 'Null', - __Unused35: 'Null', - __Unused36: 'Null', - __Unused37: 'Null', - __Unused38: 'Null', - __Unused39: 'Null', - __Unused40: 'Null', - __Unused41: 'Null', - __Unused42: 'Null', - __Unused43: 'Null', - __Unused44: 'Null', - __Unused45: 'Null', - __Unused46: 'Null', - __Unused47: 'Null', - __Unused48: 'Null', - __Unused49: 'Null', - __Unused50: 'Null', - __Unused51: 'Null', - __Unused52: 'Null', - __Unused53: 'Null', - __Unused54: 'Null', - __Unused55: 'Null', - __Unused56: 'Null', - __Unused57: 'Null', - __Unused58: 'Null', - __Unused59: 'Null', - __Unused60: 'Null', - __Unused61: 'Null', - Attestation: 'AttestationHoldReason', - Delegation: 'DelegationHoldReason', - Did: 'DidHoldReason', - __Unused65: 'Null', - __Unused66: 'Null', - DidLookup: 'PalletDidLookupHoldReason', - Web3Names: 'PalletWeb3NamesHoldReason', - PublicCredentials: 'PublicCredentialsHoldReason' - } - }, - /** - * Lookup213: attestation::pallet::HoldReason - **/ - AttestationHoldReason: { - _enum: ['Deposit'] - }, - /** - * Lookup214: delegation::pallet::HoldReason - **/ - DelegationHoldReason: { - _enum: ['Deposit'] - }, - /** - * Lookup215: did::pallet::HoldReason - **/ - DidHoldReason: { - _enum: ['Deposit'] - }, - /** - * Lookup216: pallet_did_lookup::pallet::HoldReason - **/ - PalletDidLookupHoldReason: { - _enum: ['Deposit'] - }, - /** - * Lookup217: pallet_web3_names::pallet::HoldReason - **/ - PalletWeb3NamesHoldReason: { - _enum: ['Deposit'] - }, - /** - * Lookup218: public_credentials::pallet::HoldReason - **/ - PublicCredentialsHoldReason: { - _enum: ['Deposit'] - }, - /** - * Lookup221: pallet_balances::types::IdAmount - **/ - PalletBalancesIdAmountRuntimeFreezeReason: { - id: 'SpiritnetRuntimeRuntimeFreezeReason', - amount: 'u128' - }, - /** - * Lookup222: spiritnet_runtime::RuntimeFreezeReason - **/ - SpiritnetRuntimeRuntimeFreezeReason: { - _enum: { - __Unused0: 'Null', - __Unused1: 'Null', - __Unused2: 'Null', - __Unused3: 'Null', - __Unused4: 'Null', - __Unused5: 'Null', - __Unused6: 'Null', - __Unused7: 'Null', - __Unused8: 'Null', - __Unused9: 'Null', - __Unused10: 'Null', - __Unused11: 'Null', - __Unused12: 'Null', - __Unused13: 'Null', - __Unused14: 'Null', - __Unused15: 'Null', - __Unused16: 'Null', - __Unused17: 'Null', - __Unused18: 'Null', - __Unused19: 'Null', - __Unused20: 'Null', - ParachainStaking: 'ParachainStakingFreezeReason' - } - }, - /** - * Lookup223: parachain_staking::pallet::FreezeReason - **/ - ParachainStakingFreezeReason: { - _enum: ['Staking'] - }, - /** - * Lookup225: pallet_balances::pallet::Call - **/ - PalletBalancesCall: { - _enum: { - transfer_allow_death: { - dest: 'MultiAddress', - value: 'Compact', - }, - set_balance_deprecated: { - who: 'MultiAddress', - newFree: 'Compact', - oldReserved: 'Compact', - }, - force_transfer: { - source: 'MultiAddress', - dest: 'MultiAddress', - value: 'Compact', - }, - transfer_keep_alive: { - dest: 'MultiAddress', - value: 'Compact', - }, - transfer_all: { - dest: 'MultiAddress', - keepAlive: 'bool', - }, - force_unreserve: { - who: 'MultiAddress', - amount: 'u128', - }, - upgrade_accounts: { - who: 'Vec', - }, - transfer: { - dest: 'MultiAddress', - value: 'Compact', - }, - force_set_balance: { - who: 'MultiAddress', - newFree: 'Compact' - } - } - }, - /** - * Lookup226: pallet_balances::pallet::Error - **/ - PalletBalancesError: { - _enum: ['VestingBalance', 'LiquidityRestrictions', 'InsufficientBalance', 'ExistentialDeposit', 'Expendability', 'ExistingVestingSchedule', 'DeadAccount', 'TooManyReserves', 'TooManyHolds', 'TooManyFreezes'] - }, - /** - * Lookup228: pallet_transaction_payment::Releases - **/ - PalletTransactionPaymentReleases: { - _enum: ['V1Ancient', 'V2'] - }, - /** - * Lookup230: sp_consensus_aura::sr25519::app_sr25519::Public - **/ - SpConsensusAuraSr25519AppSr25519Public: 'SpCoreSr25519Public', - /** - * Lookup231: sp_core::sr25519::Public - **/ - SpCoreSr25519Public: '[u8;32]', - /** - * Lookup236: spiritnet_runtime::SessionKeys - **/ - SpiritnetRuntimeSessionKeys: { - aura: 'SpConsensusAuraSr25519AppSr25519Public' - }, - /** - * Lookup239: sp_core::crypto::KeyTypeId - **/ - SpCoreCryptoKeyTypeId: '[u8;4]', - /** - * Lookup240: pallet_session::pallet::Call - **/ - PalletSessionCall: { - _enum: { - set_keys: { - _alias: { - keys_: 'keys', - }, - keys_: 'SpiritnetRuntimeSessionKeys', - proof: 'Bytes', - }, - purge_keys: 'Null' - } - }, - /** - * Lookup241: pallet_session::pallet::Error - **/ - PalletSessionError: { - _enum: ['InvalidProof', 'NoAssociatedValidatorId', 'DuplicatedKey', 'NoKeys', 'NoAccount'] - }, - /** - * Lookup242: parachain_staking::types::RoundInfo - **/ - ParachainStakingRoundInfo: { - current: 'u32', - first: 'u64', - length: 'u64' - }, - /** - * Lookup243: parachain_staking::types::DelegationCounter - **/ - ParachainStakingDelegationCounter: { - round: 'u32', - counter: 'u32' - }, - /** - * Lookup244: parachain_staking::types::Stake - **/ - ParachainStakingStake: { - owner: 'AccountId32', - amount: 'u128' - }, - /** - * Lookup245: parachain_staking::types::Candidate - **/ - ParachainStakingCandidate: { - id: 'AccountId32', - stake: 'u128', - delegators: 'ParachainStakingSetOrderedSet', - total: 'u128', - status: 'ParachainStakingCandidateStatus' - }, - /** - * Lookup246: parachain_staking::set::OrderedSet, S> - **/ - ParachainStakingSetOrderedSet: 'Vec', - /** - * Lookup249: parachain_staking::types::CandidateStatus - **/ - ParachainStakingCandidateStatus: { - _enum: { - Active: 'Null', - Leaving: 'u32' - } - }, - /** - * Lookup250: parachain_staking::types::TotalStake - **/ - ParachainStakingTotalStake: { - collators: 'u128', - delegators: 'u128' - }, - /** - * Lookup253: parachain_staking::inflation::InflationInfo - **/ - ParachainStakingInflationInflationInfo: { - collator: 'ParachainStakingInflationStakingInfo', - delegator: 'ParachainStakingInflationStakingInfo' - }, - /** - * Lookup254: parachain_staking::inflation::StakingInfo - **/ - ParachainStakingInflationStakingInfo: { - maxRate: 'Perquintill', - rewardRate: 'ParachainStakingInflationRewardRate' - }, - /** - * Lookup255: parachain_staking::inflation::RewardRate - **/ - ParachainStakingInflationRewardRate: { - annual: 'Perquintill', - perBlock: 'Perquintill' - }, - /** - * Lookup260: parachain_staking::pallet::Call - **/ - ParachainStakingCall: { - _enum: { - force_new_round: 'Null', - set_inflation: { - collatorMaxRatePercentage: 'Perquintill', - collatorAnnualRewardRatePercentage: 'Perquintill', - delegatorMaxRatePercentage: 'Perquintill', - delegatorAnnualRewardRatePercentage: 'Perquintill', - }, - set_max_selected_candidates: { - _alias: { - new_: 'new', - }, - new_: 'u32', - }, - set_blocks_per_round: { - _alias: { - new_: 'new', - }, - new_: 'u64', - }, - set_max_candidate_stake: { - _alias: { - new_: 'new', - }, - new_: 'u128', - }, - force_remove_candidate: { - collator: 'MultiAddress', - }, - join_candidates: { - stake: 'u128', - }, - init_leave_candidates: 'Null', - execute_leave_candidates: { - collator: 'MultiAddress', - }, - cancel_leave_candidates: 'Null', - candidate_stake_more: { - more: 'u128', - }, - candidate_stake_less: { - less: 'u128', - }, - join_delegators: { - collator: 'MultiAddress', - amount: 'u128', - }, - leave_delegators: 'Null', - delegator_stake_more: { - more: 'u128', - }, - delegator_stake_less: { - less: 'u128', - }, - unlock_unstaked: { - target: 'MultiAddress', - }, - claim_rewards: 'Null', - increment_collator_rewards: 'Null', - increment_delegator_rewards: 'Null', - execute_scheduled_reward_change: 'Null' - } - }, - /** - * Lookup261: parachain_staking::pallet::Error - **/ - ParachainStakingError: { - _enum: ['DelegatorNotFound', 'CandidateNotFound', 'DelegatorExists', 'CandidateExists', 'ValStakeZero', 'ValStakeBelowMin', 'ValStakeAboveMax', 'DelegationBelowMin', 'AlreadyLeaving', 'NotLeaving', 'CannotLeaveYet', 'CannotJoinBeforeUnlocking', 'AlreadyDelegating', 'NotYetDelegating', 'DelegationsPerRoundExceeded', 'TooManyDelegators', 'TooFewCollatorCandidates', 'CannotStakeIfLeaving', 'CannotDelegateIfLeaving', 'MaxCollatorsPerDelegatorExceeded', 'AlreadyDelegatedCollator', 'DelegationNotFound', 'Underflow', 'CannotSetAboveMax', 'CannotSetBelowMin', 'InvalidSchedule', 'NoMoreUnstaking', 'TooEarly', 'StakeNotFound', 'UnstakingIsEmpty', 'RewardsNotFound'] - }, - /** - * Lookup264: frame_support::traits::preimages::Bounded - **/ - FrameSupportPreimagesBounded: { - _enum: { - Legacy: { - _alias: { - hash_: 'hash', - }, - hash_: 'H256', - }, - Inline: 'Bytes', - Lookup: { - _alias: { - hash_: 'hash', - }, - hash_: 'H256', - len: 'u32' - } - } - }, - /** - * Lookup266: pallet_democracy::pallet::Call - **/ - PalletDemocracyCall: { - _enum: { - propose: { - proposal: 'FrameSupportPreimagesBounded', - value: 'Compact', - }, - second: { - proposal: 'Compact', - }, - vote: { - refIndex: 'Compact', - vote: 'PalletDemocracyVoteAccountVote', - }, - emergency_cancel: { - refIndex: 'u32', - }, - external_propose: { - proposal: 'FrameSupportPreimagesBounded', - }, - external_propose_majority: { - proposal: 'FrameSupportPreimagesBounded', - }, - external_propose_default: { - proposal: 'FrameSupportPreimagesBounded', - }, - fast_track: { - proposalHash: 'H256', - votingPeriod: 'u64', - delay: 'u64', - }, - veto_external: { - proposalHash: 'H256', - }, - cancel_referendum: { - refIndex: 'Compact', - }, - delegate: { - to: 'MultiAddress', - conviction: 'PalletDemocracyConviction', - balance: 'u128', - }, - undelegate: 'Null', - clear_public_proposals: 'Null', - unlock: { - target: 'MultiAddress', - }, - remove_vote: { - index: 'u32', - }, - remove_other_vote: { - target: 'MultiAddress', - index: 'u32', - }, - blacklist: { - proposalHash: 'H256', - maybeRefIndex: 'Option', - }, - cancel_proposal: { - propIndex: 'Compact', - }, - set_metadata: { - owner: 'PalletDemocracyMetadataOwner', - maybeHash: 'Option' - } - } - }, - /** - * Lookup267: pallet_democracy::conviction::Conviction - **/ - PalletDemocracyConviction: { - _enum: ['None', 'Locked1x', 'Locked2x', 'Locked3x', 'Locked4x', 'Locked5x', 'Locked6x'] - }, - /** - * Lookup270: pallet_collective::pallet::Call - **/ - PalletCollectiveCall: { - _enum: { - set_members: { - newMembers: 'Vec', - prime: 'Option', - oldCount: 'u32', - }, - execute: { - proposal: 'Call', - lengthBound: 'Compact', - }, - propose: { - threshold: 'Compact', - proposal: 'Call', - lengthBound: 'Compact', - }, - vote: { - proposal: 'H256', - index: 'Compact', - approve: 'bool', - }, - __Unused4: 'Null', - disapprove_proposal: { - proposalHash: 'H256', - }, - close: { - proposalHash: 'H256', - index: 'Compact', - proposalWeightBound: 'SpWeightsWeightV2Weight', - lengthBound: 'Compact' - } - } - }, - /** - * Lookup273: pallet_membership::pallet::Call - **/ - PalletMembershipCall: { - _enum: { - add_member: { - who: 'MultiAddress', - }, - remove_member: { - who: 'MultiAddress', - }, - swap_member: { - remove: 'MultiAddress', - add: 'MultiAddress', - }, - reset_members: { - members: 'Vec', - }, - change_key: { - _alias: { - new_: 'new', - }, - new_: 'MultiAddress', - }, - set_prime: { - who: 'MultiAddress', - }, - clear_prime: 'Null' - } - }, - /** - * Lookup274: pallet_treasury::pallet::Call - **/ - PalletTreasuryCall: { - _enum: { - propose_spend: { - value: 'Compact', - beneficiary: 'MultiAddress', - }, - reject_proposal: { - proposalId: 'Compact', - }, - approve_proposal: { - proposalId: 'Compact', - }, - spend: { - amount: 'Compact', - beneficiary: 'MultiAddress', - }, - remove_approval: { - proposalId: 'Compact' - } - } - }, - /** - * Lookup275: pallet_utility::pallet::Call - **/ - PalletUtilityCall: { - _enum: { - batch: { - calls: 'Vec', - }, - as_derivative: { - index: 'u16', - call: 'Call', - }, - batch_all: { - calls: 'Vec', - }, - dispatch_as: { - asOrigin: 'SpiritnetRuntimeOriginCaller', - call: 'Call', - }, - force_batch: { - calls: 'Vec', - }, - with_weight: { - call: 'Call', - weight: 'SpWeightsWeightV2Weight' - } - } - }, - /** - * Lookup277: spiritnet_runtime::OriginCaller - **/ - SpiritnetRuntimeOriginCaller: { - _enum: { - system: 'FrameSupportDispatchRawOrigin', - __Unused1: 'Null', - __Unused2: 'Null', - __Unused3: 'Null', - __Unused4: 'Null', - __Unused5: 'Null', - Void: 'SpCoreVoid', - __Unused7: 'Null', - __Unused8: 'Null', - __Unused9: 'Null', - __Unused10: 'Null', - __Unused11: 'Null', - __Unused12: 'Null', - __Unused13: 'Null', - __Unused14: 'Null', - __Unused15: 'Null', - __Unused16: 'Null', - __Unused17: 'Null', - __Unused18: 'Null', - __Unused19: 'Null', - __Unused20: 'Null', - __Unused21: 'Null', - __Unused22: 'Null', - __Unused23: 'Null', - __Unused24: 'Null', - __Unused25: 'Null', - __Unused26: 'Null', - __Unused27: 'Null', - __Unused28: 'Null', - __Unused29: 'Null', - __Unused30: 'Null', - Council: 'PalletCollectiveRawOrigin', - TechnicalCommittee: 'PalletCollectiveRawOrigin', - __Unused33: 'Null', - __Unused34: 'Null', - __Unused35: 'Null', - __Unused36: 'Null', - __Unused37: 'Null', - __Unused38: 'Null', - __Unused39: 'Null', - __Unused40: 'Null', - __Unused41: 'Null', - __Unused42: 'Null', - __Unused43: 'Null', - __Unused44: 'Null', - __Unused45: 'Null', - __Unused46: 'Null', - __Unused47: 'Null', - __Unused48: 'Null', - __Unused49: 'Null', - __Unused50: 'Null', - __Unused51: 'Null', - __Unused52: 'Null', - __Unused53: 'Null', - __Unused54: 'Null', - __Unused55: 'Null', - __Unused56: 'Null', - __Unused57: 'Null', - __Unused58: 'Null', - __Unused59: 'Null', - __Unused60: 'Null', - __Unused61: 'Null', - __Unused62: 'Null', - __Unused63: 'Null', - Did: 'DidOriginDidRawOrigin', - __Unused65: 'Null', - __Unused66: 'Null', - __Unused67: 'Null', - __Unused68: 'Null', - __Unused69: 'Null', - __Unused70: 'Null', - __Unused71: 'Null', - __Unused72: 'Null', - __Unused73: 'Null', - __Unused74: 'Null', - __Unused75: 'Null', - __Unused76: 'Null', - __Unused77: 'Null', - __Unused78: 'Null', - __Unused79: 'Null', - __Unused80: 'Null', - __Unused81: 'Null', - __Unused82: 'Null', - PolkadotXcm: 'PalletXcmOrigin', - CumulusXcm: 'CumulusPalletXcmOrigin' - } - }, - /** - * Lookup278: frame_support::dispatch::RawOrigin - **/ - FrameSupportDispatchRawOrigin: { - _enum: { - Root: 'Null', - Signed: 'AccountId32', - None: 'Null' - } - }, - /** - * Lookup279: pallet_collective::RawOrigin - **/ - PalletCollectiveRawOrigin: { - _enum: { - Members: '(u32,u32)', - Member: 'AccountId32', - _Phantom: 'Null' - } - }, - /** - * Lookup281: did::origin::DidRawOrigin - **/ - DidOriginDidRawOrigin: { - id: 'AccountId32', - submitter: 'AccountId32' - }, - /** - * Lookup282: pallet_xcm::pallet::Origin - **/ - PalletXcmOrigin: { - _enum: { - Xcm: 'XcmV3MultiLocation', - Response: 'XcmV3MultiLocation' - } - }, - /** - * Lookup283: cumulus_pallet_xcm::pallet::Origin - **/ - CumulusPalletXcmOrigin: { - _enum: { - Relay: 'Null', - SiblingParachain: 'u32' - } - }, - /** - * Lookup284: sp_core::Void - **/ - SpCoreVoid: 'Null', - /** - * Lookup285: pallet_vesting::pallet::Call - **/ - PalletVestingCall: { - _enum: { - vest: 'Null', - vest_other: { - target: 'MultiAddress', - }, - vested_transfer: { - target: 'MultiAddress', - schedule: 'PalletVestingVestingInfo', - }, - force_vested_transfer: { - source: 'MultiAddress', - target: 'MultiAddress', - schedule: 'PalletVestingVestingInfo', - }, - merge_schedules: { - schedule1Index: 'u32', - schedule2Index: 'u32' - } - } - }, - /** - * Lookup286: pallet_vesting::vesting_info::VestingInfo - **/ - PalletVestingVestingInfo: { - locked: 'u128', - perBlock: 'u128', - startingBlock: 'u64' - }, - /** - * Lookup287: pallet_scheduler::pallet::Call - **/ - PalletSchedulerCall: { - _enum: { - schedule: { - when: 'u64', - maybePeriodic: 'Option<(u64,u32)>', - priority: 'u8', - call: 'Call', - }, - cancel: { - when: 'u64', - index: 'u32', - }, - schedule_named: { - id: '[u8;32]', - when: 'u64', - maybePeriodic: 'Option<(u64,u32)>', - priority: 'u8', - call: 'Call', - }, - cancel_named: { - id: '[u8;32]', - }, - schedule_after: { - after: 'u64', - maybePeriodic: 'Option<(u64,u32)>', - priority: 'u8', - call: 'Call', - }, - schedule_named_after: { - id: '[u8;32]', - after: 'u64', - maybePeriodic: 'Option<(u64,u32)>', - priority: 'u8', - call: 'Call' - } - } - }, - /** - * Lookup289: pallet_proxy::pallet::Call - **/ - PalletProxyCall: { - _enum: { - proxy: { - real: 'MultiAddress', - forceProxyType: 'Option', - call: 'Call', - }, - add_proxy: { - delegate: 'MultiAddress', - proxyType: 'SpiritnetRuntimeProxyType', - delay: 'u64', - }, - remove_proxy: { - delegate: 'MultiAddress', - proxyType: 'SpiritnetRuntimeProxyType', - delay: 'u64', - }, - remove_proxies: 'Null', - create_pure: { - proxyType: 'SpiritnetRuntimeProxyType', - delay: 'u64', - index: 'u16', - }, - kill_pure: { - spawner: 'MultiAddress', - proxyType: 'SpiritnetRuntimeProxyType', - index: 'u16', - height: 'Compact', - extIndex: 'Compact', - }, - announce: { - real: 'MultiAddress', - callHash: 'H256', - }, - remove_announcement: { - real: 'MultiAddress', - callHash: 'H256', - }, - reject_announcement: { - delegate: 'MultiAddress', - callHash: 'H256', - }, - proxy_announced: { - delegate: 'MultiAddress', - real: 'MultiAddress', - forceProxyType: 'Option', - call: 'Call' - } - } - }, - /** - * Lookup291: pallet_preimage::pallet::Call - **/ - PalletPreimageCall: { - _enum: { - note_preimage: { - bytes: 'Bytes', - }, - unnote_preimage: { - _alias: { - hash_: 'hash', - }, - hash_: 'H256', - }, - request_preimage: { - _alias: { - hash_: 'hash', - }, - hash_: 'H256', - }, - unrequest_preimage: { - _alias: { - hash_: 'hash', - }, - hash_: 'H256' - } - } - }, - /** - * Lookup293: pallet_tips::pallet::Call - **/ - PalletTipsCall: { - _enum: { - report_awesome: { - reason: 'Bytes', - who: 'MultiAddress', - }, - retract_tip: { - _alias: { - hash_: 'hash', - }, - hash_: 'H256', - }, - tip_new: { - reason: 'Bytes', - who: 'MultiAddress', - tipValue: 'Compact', - }, - tip: { - _alias: { - hash_: 'hash', - }, - hash_: 'H256', - tipValue: 'Compact', - }, - close_tip: { - _alias: { - hash_: 'hash', - }, - hash_: 'H256', - }, - slash_tip: { - _alias: { - hash_: 'hash', - }, - hash_: 'H256' - } - } - }, - /** - * Lookup294: pallet_multisig::pallet::Call - **/ - PalletMultisigCall: { - _enum: { - as_multi_threshold_1: { - otherSignatories: 'Vec', - call: 'Call', - }, - as_multi: { - threshold: 'u16', - otherSignatories: 'Vec', - maybeTimepoint: 'Option', - call: 'Call', - maxWeight: 'SpWeightsWeightV2Weight', - }, - approve_as_multi: { - threshold: 'u16', - otherSignatories: 'Vec', - maybeTimepoint: 'Option', - callHash: '[u8;32]', - maxWeight: 'SpWeightsWeightV2Weight', - }, - cancel_as_multi: { - threshold: 'u16', - otherSignatories: 'Vec', - timepoint: 'PalletMultisigTimepoint', - callHash: '[u8;32]' - } - } - }, - /** - * Lookup296: ctype::pallet::Call - **/ - CtypeCall: { - _enum: { - add: { - ctype: 'Bytes', - }, - set_block_number: { - ctypeHash: 'H256', - blockNumber: 'u64' - } - } - }, - /** - * Lookup297: attestation::pallet::Call - **/ - AttestationCall: { - _enum: { - add: { - claimHash: 'H256', - ctypeHash: 'H256', - authorization: 'Option', - }, - revoke: { - claimHash: 'H256', - authorization: 'Option', - }, - remove: { - claimHash: 'H256', - authorization: 'Option', - }, - reclaim_deposit: { - claimHash: 'H256', - }, - change_deposit_owner: { - claimHash: 'H256', - }, - update_deposit: { - claimHash: 'H256' - } - } - }, - /** - * Lookup299: runtime_common::authorization::PalletAuthorize> - **/ - RuntimeCommonAuthorizationPalletAuthorize: { - _enum: { - Delegation: 'DelegationAccessControlDelegationAc' - } - }, - /** - * Lookup300: delegation::access_control::DelegationAc - **/ - DelegationAccessControlDelegationAc: { - subjectNodeId: 'H256', - maxChecks: 'u32' - }, - /** - * Lookup301: delegation::pallet::Call - **/ - DelegationCall: { - _enum: { - create_hierarchy: { - rootNodeId: 'H256', - ctypeHash: 'H256', - }, - add_delegation: { - delegationId: 'H256', - parentId: 'H256', - delegate: 'AccountId32', - permissions: 'DelegationDelegationHierarchyPermissions', - delegateSignature: 'DidDidDetailsDidSignature', - }, - revoke_delegation: { - delegationId: 'H256', - maxParentChecks: 'u32', - maxRevocations: 'u32', - }, - remove_delegation: { - delegationId: 'H256', - maxRemovals: 'u32', - }, - reclaim_deposit: { - delegationId: 'H256', - maxRemovals: 'u32', - }, - change_deposit_owner: { - delegationId: 'H256', - }, - update_deposit: { - delegationId: 'H256' - } - } - }, - /** - * Lookup302: did::did_details::DidSignature - **/ - DidDidDetailsDidSignature: { - _enum: { - Ed25519: 'SpCoreEd25519Signature', - Sr25519: 'SpCoreSr25519Signature', - Ecdsa: 'SpCoreEcdsaSignature' - } - }, - /** - * Lookup303: sp_core::ed25519::Signature - **/ - SpCoreEd25519Signature: '[u8;64]', - /** - * Lookup305: sp_core::sr25519::Signature - **/ - SpCoreSr25519Signature: '[u8;64]', - /** - * Lookup306: sp_core::ecdsa::Signature - **/ - SpCoreEcdsaSignature: '[u8;65]', - /** - * Lookup308: did::pallet::Call - **/ - DidCall: { - _enum: { - create: { - details: 'DidDidDetailsDidCreationDetails', - signature: 'DidDidDetailsDidSignature', - }, - set_authentication_key: { - newKey: 'DidDidDetailsDidVerificationKey', - }, - set_delegation_key: { - newKey: 'DidDidDetailsDidVerificationKey', - }, - remove_delegation_key: 'Null', - set_attestation_key: { - newKey: 'DidDidDetailsDidVerificationKey', - }, - remove_attestation_key: 'Null', - add_key_agreement_key: { - newKey: 'DidDidDetailsDidEncryptionKey', - }, - remove_key_agreement_key: { - keyId: 'H256', - }, - add_service_endpoint: { - serviceEndpoint: 'DidServiceEndpointsDidEndpoint', - }, - remove_service_endpoint: { - serviceId: 'Bytes', - }, - delete: { - endpointsToRemove: 'u32', - }, - reclaim_deposit: { - didSubject: 'AccountId32', - endpointsToRemove: 'u32', - }, - submit_did_call: { - didCall: 'DidDidDetailsDidAuthorizedCallOperation', - signature: 'DidDidDetailsDidSignature', - }, - change_deposit_owner: 'Null', - update_deposit: { - did: 'AccountId32', - }, - dispatch_as: { - didIdentifier: 'AccountId32', - call: 'Call', - }, - create_from_account: { - authenticationKey: 'DidDidDetailsDidVerificationKey' - } - } - }, - /** - * Lookup309: did::did_details::DidCreationDetails> - **/ - DidDidDetailsDidCreationDetails: { - did: 'AccountId32', - submitter: 'AccountId32', - newKeyAgreementKeys: 'BTreeSet', - newAttestationKey: 'Option', - newDelegationKey: 'Option', - newServiceDetails: 'Vec' - }, - /** - * Lookup310: runtime_common::constants::did::MaxNewKeyAgreementKeys - **/ - RuntimeCommonConstantsDidMaxNewKeyAgreementKeys: 'Null', - /** - * Lookup311: did::service_endpoints::DidEndpoint - **/ - DidServiceEndpointsDidEndpoint: { - id: 'Bytes', - serviceTypes: 'Vec', - urls: 'Vec' - }, - /** - * Lookup320: did::did_details::DidEncryptionKey - **/ - DidDidDetailsDidEncryptionKey: { - _enum: { - X25519: '[u8;32]' - } - }, - /** - * Lookup324: did::did_details::DidVerificationKey - **/ - DidDidDetailsDidVerificationKey: { - _enum: { - Ed25519: 'SpCoreEd25519Public', - Sr25519: 'SpCoreSr25519Public', - Ecdsa: 'SpCoreEcdsaPublic', - Account: 'AccountId32' - } - }, - /** - * Lookup325: sp_core::ed25519::Public - **/ - SpCoreEd25519Public: '[u8;32]', - /** - * Lookup326: sp_core::ecdsa::Public - **/ - SpCoreEcdsaPublic: '[u8;33]', - /** - * Lookup329: did::did_details::DidAuthorizedCallOperation - **/ - DidDidDetailsDidAuthorizedCallOperation: { - did: 'AccountId32', - txCounter: 'u64', - call: 'Call', - blockNumber: 'u64', - submitter: 'AccountId32' - }, - /** - * Lookup330: pallet_did_lookup::pallet::Call - **/ - PalletDidLookupCall: { - _enum: { - associate_account: { - req: 'PalletDidLookupAssociateAccountRequest', - expiration: 'u64', - }, - associate_sender: 'Null', - remove_sender_association: 'Null', - remove_account_association: { - account: 'PalletDidLookupLinkableAccountLinkableAccountId', - }, - reclaim_deposit: { - account: 'PalletDidLookupLinkableAccountLinkableAccountId', - }, - change_deposit_owner: { - account: 'PalletDidLookupLinkableAccountLinkableAccountId', - }, - update_deposit: { - account: 'PalletDidLookupLinkableAccountLinkableAccountId' - } - } - }, - /** - * Lookup331: pallet_did_lookup::associate_account_request::AssociateAccountRequest - **/ - PalletDidLookupAssociateAccountRequest: { - _enum: { - Polkadot: '(AccountId32,SpRuntimeMultiSignature)', - Ethereum: '(PalletDidLookupAccountAccountId20,PalletDidLookupAccountEthereumSignature)' - } - }, - /** - * Lookup332: sp_runtime::MultiSignature - **/ - SpRuntimeMultiSignature: { - _enum: { - Ed25519: 'SpCoreEd25519Signature', - Sr25519: 'SpCoreSr25519Signature', - Ecdsa: 'SpCoreEcdsaSignature' - } - }, - /** - * Lookup333: pallet_did_lookup::account::EthereumSignature - **/ - PalletDidLookupAccountEthereumSignature: 'SpCoreEcdsaSignature', - /** - * Lookup334: pallet_web3_names::pallet::Call - **/ - PalletWeb3NamesCall: { - _enum: { - claim: { - name: 'Bytes', - }, - release_by_owner: 'Null', - reclaim_deposit: { - name: 'Bytes', - }, - ban: { - name: 'Bytes', - }, - unban: { - name: 'Bytes', - }, - change_deposit_owner: 'Null', - update_deposit: { - nameInput: 'Bytes' - } - } - }, - /** - * Lookup335: public_credentials::pallet::Call - **/ - PublicCredentialsCall: { - _enum: { - add: { - credential: 'PublicCredentialsCredentialsCredential', - }, - revoke: { - credentialId: 'H256', - authorization: 'Option', - }, - unrevoke: { - credentialId: 'H256', - authorization: 'Option', - }, - remove: { - credentialId: 'H256', - authorization: 'Option', - }, - reclaim_deposit: { - credentialId: 'H256', - }, - change_deposit_owner: { - credentialId: 'H256', - }, - update_deposit: { - credentialId: 'H256' - } - } - }, - /** - * Lookup336: public_credentials::credentials::Credential, bounded_collections::bounded_vec::BoundedVec, runtime_common::authorization::PalletAuthorize>> - **/ - PublicCredentialsCredentialsCredential: { - ctypeHash: 'H256', - subject: 'Bytes', - claims: 'Bytes', - authorization: 'Option' - }, - /** - * Lookup339: pallet_migration::pallet::Call - **/ - PalletMigrationCall: { - _enum: { - update_balance: { - requestedMigrations: 'PalletMigrationEntriesToMigrate' - } - } - }, - /** - * Lookup340: cumulus_pallet_parachain_system::pallet::Call - **/ - CumulusPalletParachainSystemCall: { - _enum: { - set_validation_data: { - data: 'CumulusPrimitivesParachainInherentParachainInherentData', - }, - sudo_send_upward_message: { - message: 'Bytes', - }, - authorize_upgrade: { - codeHash: 'H256', - checkVersion: 'bool', - }, - enact_authorized_upgrade: { - code: 'Bytes' - } - } - }, - /** - * Lookup341: cumulus_primitives_parachain_inherent::ParachainInherentData - **/ - CumulusPrimitivesParachainInherentParachainInherentData: { - validationData: 'PolkadotPrimitivesV5PersistedValidationData', - relayChainState: 'SpTrieStorageProof', - downwardMessages: 'Vec', - horizontalMessages: 'BTreeMap>' - }, - /** - * Lookup342: polkadot_primitives::v5::PersistedValidationData - **/ - PolkadotPrimitivesV5PersistedValidationData: { - parentHead: 'Bytes', - relayParentNumber: 'u32', - relayParentStorageRoot: 'H256', - maxPovSize: 'u32' - }, - /** - * Lookup344: sp_trie::storage_proof::StorageProof - **/ - SpTrieStorageProof: { - trieNodes: 'BTreeSet' - }, - /** - * Lookup347: polkadot_core_primitives::InboundDownwardMessage - **/ - PolkadotCorePrimitivesInboundDownwardMessage: { - sentAt: 'u32', - msg: 'Bytes' - }, - /** - * Lookup350: polkadot_core_primitives::InboundHrmpMessage - **/ - PolkadotCorePrimitivesInboundHrmpMessage: { - sentAt: 'u32', - data: 'Bytes' - }, - /** - * Lookup353: parachain_info::pallet::Call - **/ - ParachainInfoCall: 'Null', - /** - * Lookup354: cumulus_pallet_xcmp_queue::pallet::Call - **/ - CumulusPalletXcmpQueueCall: { - _enum: { - service_overweight: { - index: 'u64', - weightLimit: 'SpWeightsWeightV2Weight', - }, - suspend_xcm_execution: 'Null', - resume_xcm_execution: 'Null', - update_suspend_threshold: { - _alias: { - new_: 'new', - }, - new_: 'u32', - }, - update_drop_threshold: { - _alias: { - new_: 'new', - }, - new_: 'u32', - }, - update_resume_threshold: { - _alias: { - new_: 'new', - }, - new_: 'u32', - }, - update_threshold_weight: { - _alias: { - new_: 'new', - }, - new_: 'SpWeightsWeightV2Weight', - }, - update_weight_restrict_decay: { - _alias: { - new_: 'new', - }, - new_: 'SpWeightsWeightV2Weight', - }, - update_xcmp_max_individual_weight: { - _alias: { - new_: 'new', - }, - new_: 'SpWeightsWeightV2Weight' - } - } - }, - /** - * Lookup355: pallet_xcm::pallet::Call - **/ - PalletXcmCall: { - _enum: { - send: { - dest: 'XcmVersionedMultiLocation', - message: 'XcmVersionedXcm', - }, - teleport_assets: { - dest: 'XcmVersionedMultiLocation', - beneficiary: 'XcmVersionedMultiLocation', - assets: 'XcmVersionedMultiAssets', - feeAssetItem: 'u32', - }, - reserve_transfer_assets: { - dest: 'XcmVersionedMultiLocation', - beneficiary: 'XcmVersionedMultiLocation', - assets: 'XcmVersionedMultiAssets', - feeAssetItem: 'u32', - }, - execute: { - message: 'XcmVersionedXcm', - maxWeight: 'SpWeightsWeightV2Weight', - }, - force_xcm_version: { - location: 'XcmV3MultiLocation', - version: 'u32', - }, - force_default_xcm_version: { - maybeXcmVersion: 'Option', - }, - force_subscribe_version_notify: { - location: 'XcmVersionedMultiLocation', - }, - force_unsubscribe_version_notify: { - location: 'XcmVersionedMultiLocation', - }, - limited_reserve_transfer_assets: { - dest: 'XcmVersionedMultiLocation', - beneficiary: 'XcmVersionedMultiLocation', - assets: 'XcmVersionedMultiAssets', - feeAssetItem: 'u32', - weightLimit: 'XcmV3WeightLimit', - }, - limited_teleport_assets: { - dest: 'XcmVersionedMultiLocation', - beneficiary: 'XcmVersionedMultiLocation', - assets: 'XcmVersionedMultiAssets', - feeAssetItem: 'u32', - weightLimit: 'XcmV3WeightLimit', - }, - force_suspension: { - suspended: 'bool' - } - } - }, - /** - * Lookup356: xcm::VersionedXcm - **/ - XcmVersionedXcm: { - _enum: { - __Unused0: 'Null', - __Unused1: 'Null', - V2: 'XcmV2Xcm', - V3: 'XcmV3Xcm' - } - }, - /** - * Lookup357: xcm::v2::Xcm - **/ - XcmV2Xcm: 'Vec', - /** - * Lookup359: xcm::v2::Instruction - **/ - XcmV2Instruction: { - _enum: { - WithdrawAsset: 'XcmV2MultiassetMultiAssets', - ReserveAssetDeposited: 'XcmV2MultiassetMultiAssets', - ReceiveTeleportedAsset: 'XcmV2MultiassetMultiAssets', - QueryResponse: { - queryId: 'Compact', - response: 'XcmV2Response', - maxWeight: 'Compact', - }, - TransferAsset: { - assets: 'XcmV2MultiassetMultiAssets', - beneficiary: 'XcmV2MultiLocation', - }, - TransferReserveAsset: { - assets: 'XcmV2MultiassetMultiAssets', - dest: 'XcmV2MultiLocation', - xcm: 'XcmV2Xcm', - }, - Transact: { - originType: 'XcmV2OriginKind', - requireWeightAtMost: 'Compact', - call: 'XcmDoubleEncoded', - }, - HrmpNewChannelOpenRequest: { - sender: 'Compact', - maxMessageSize: 'Compact', - maxCapacity: 'Compact', - }, - HrmpChannelAccepted: { - recipient: 'Compact', - }, - HrmpChannelClosing: { - initiator: 'Compact', - sender: 'Compact', - recipient: 'Compact', - }, - ClearOrigin: 'Null', - DescendOrigin: 'XcmV2MultilocationJunctions', - ReportError: { - queryId: 'Compact', - dest: 'XcmV2MultiLocation', - maxResponseWeight: 'Compact', - }, - DepositAsset: { - assets: 'XcmV2MultiassetMultiAssetFilter', - maxAssets: 'Compact', - beneficiary: 'XcmV2MultiLocation', - }, - DepositReserveAsset: { - assets: 'XcmV2MultiassetMultiAssetFilter', - maxAssets: 'Compact', - dest: 'XcmV2MultiLocation', - xcm: 'XcmV2Xcm', - }, - ExchangeAsset: { - give: 'XcmV2MultiassetMultiAssetFilter', - receive: 'XcmV2MultiassetMultiAssets', - }, - InitiateReserveWithdraw: { - assets: 'XcmV2MultiassetMultiAssetFilter', - reserve: 'XcmV2MultiLocation', - xcm: 'XcmV2Xcm', - }, - InitiateTeleport: { - assets: 'XcmV2MultiassetMultiAssetFilter', - dest: 'XcmV2MultiLocation', - xcm: 'XcmV2Xcm', - }, - QueryHolding: { - queryId: 'Compact', - dest: 'XcmV2MultiLocation', - assets: 'XcmV2MultiassetMultiAssetFilter', - maxResponseWeight: 'Compact', - }, - BuyExecution: { - fees: 'XcmV2MultiAsset', - weightLimit: 'XcmV2WeightLimit', - }, - RefundSurplus: 'Null', - SetErrorHandler: 'XcmV2Xcm', - SetAppendix: 'XcmV2Xcm', - ClearError: 'Null', - ClaimAsset: { - assets: 'XcmV2MultiassetMultiAssets', - ticket: 'XcmV2MultiLocation', - }, - Trap: 'Compact', - SubscribeVersion: { - queryId: 'Compact', - maxResponseWeight: 'Compact', - }, - UnsubscribeVersion: 'Null' - } - }, - /** - * Lookup360: xcm::v2::Response - **/ - XcmV2Response: { - _enum: { - Null: 'Null', - Assets: 'XcmV2MultiassetMultiAssets', - ExecutionResult: 'Option<(u32,XcmV2TraitsError)>', - Version: 'u32' - } - }, - /** - * Lookup363: xcm::v2::traits::Error - **/ - XcmV2TraitsError: { - _enum: { - Overflow: 'Null', - Unimplemented: 'Null', - UntrustedReserveLocation: 'Null', - UntrustedTeleportLocation: 'Null', - MultiLocationFull: 'Null', - MultiLocationNotInvertible: 'Null', - BadOrigin: 'Null', - InvalidLocation: 'Null', - AssetNotFound: 'Null', - FailedToTransactAsset: 'Null', - NotWithdrawable: 'Null', - LocationCannotHold: 'Null', - ExceedsMaxMessageSize: 'Null', - DestinationUnsupported: 'Null', - Transport: 'Null', - Unroutable: 'Null', - UnknownClaim: 'Null', - FailedToDecode: 'Null', - MaxWeightInvalid: 'Null', - NotHoldingFees: 'Null', - TooExpensive: 'Null', - Trap: 'u64', - UnhandledXcmVersion: 'Null', - WeightLimitReached: 'u64', - Barrier: 'Null', - WeightNotComputable: 'Null' - } - }, - /** - * Lookup364: xcm::v2::multiasset::MultiAssetFilter - **/ - XcmV2MultiassetMultiAssetFilter: { - _enum: { - Definite: 'XcmV2MultiassetMultiAssets', - Wild: 'XcmV2MultiassetWildMultiAsset' - } - }, - /** - * Lookup365: xcm::v2::multiasset::WildMultiAsset - **/ - XcmV2MultiassetWildMultiAsset: { - _enum: { - All: 'Null', - AllOf: { - id: 'XcmV2MultiassetAssetId', - fun: 'XcmV2MultiassetWildFungibility' - } - } - }, - /** - * Lookup366: xcm::v2::multiasset::WildFungibility - **/ - XcmV2MultiassetWildFungibility: { - _enum: ['Fungible', 'NonFungible'] - }, - /** - * Lookup367: xcm::v2::WeightLimit - **/ - XcmV2WeightLimit: { - _enum: { - Unlimited: 'Null', - Limited: 'Compact' - } - }, - /** - * Lookup376: cumulus_pallet_dmp_queue::pallet::Call - **/ - CumulusPalletDmpQueueCall: { - _enum: { - service_overweight: { - index: 'u64', - weightLimit: 'SpWeightsWeightV2Weight' - } - } - }, - /** - * Lookup380: pallet_democracy::types::ReferendumInfo, Balance> - **/ - PalletDemocracyReferendumInfo: { - _enum: { - Ongoing: 'PalletDemocracyReferendumStatus', - Finished: { - approved: 'bool', - end: 'u64' - } - } - }, - /** - * Lookup381: pallet_democracy::types::ReferendumStatus, Balance> - **/ - PalletDemocracyReferendumStatus: { - end: 'u64', - proposal: 'FrameSupportPreimagesBounded', - threshold: 'PalletDemocracyVoteThreshold', - delay: 'u64', - tally: 'PalletDemocracyTally' - }, - /** - * Lookup382: pallet_democracy::types::Tally - **/ - PalletDemocracyTally: { - ayes: 'u128', - nays: 'u128', - turnout: 'u128' - }, - /** - * Lookup383: pallet_democracy::vote::Voting - **/ - PalletDemocracyVoteVoting: { - _enum: { - Direct: { - votes: 'Vec<(u32,PalletDemocracyVoteAccountVote)>', - delegations: 'PalletDemocracyDelegations', - prior: 'PalletDemocracyVotePriorLock', - }, - Delegating: { - balance: 'u128', - target: 'AccountId32', - conviction: 'PalletDemocracyConviction', - delegations: 'PalletDemocracyDelegations', - prior: 'PalletDemocracyVotePriorLock' - } - } - }, - /** - * Lookup387: pallet_democracy::types::Delegations - **/ - PalletDemocracyDelegations: { - votes: 'u128', - capital: 'u128' - }, - /** - * Lookup388: pallet_democracy::vote::PriorLock - **/ - PalletDemocracyVotePriorLock: '(u64,u128)', - /** - * Lookup391: pallet_democracy::pallet::Error - **/ - PalletDemocracyError: { - _enum: ['ValueLow', 'ProposalMissing', 'AlreadyCanceled', 'DuplicateProposal', 'ProposalBlacklisted', 'NotSimpleMajority', 'InvalidHash', 'NoProposal', 'AlreadyVetoed', 'ReferendumInvalid', 'NoneWaiting', 'NotVoter', 'NoPermission', 'AlreadyDelegating', 'InsufficientFunds', 'NotDelegating', 'VotesExist', 'InstantNotAllowed', 'Nonsense', 'WrongUpperBound', 'MaxVotesReached', 'TooMany', 'VotingPeriodLow', 'PreimageNotExist'] - }, - /** - * Lookup393: pallet_collective::Votes - **/ - PalletCollectiveVotes: { - index: 'u32', - threshold: 'u32', - ayes: 'Vec', - nays: 'Vec', - end: 'u64' - }, - /** - * Lookup394: pallet_collective::pallet::Error - **/ - PalletCollectiveError: { - _enum: ['NotMember', 'DuplicateProposal', 'ProposalMissing', 'WrongIndex', 'DuplicateVote', 'AlreadyInitialized', 'TooEarly', 'TooManyProposals', 'WrongProposalWeight', 'WrongProposalLength'] - }, - /** - * Lookup398: pallet_membership::pallet::Error - **/ - PalletMembershipError: { - _enum: ['AlreadyMember', 'NotMember', 'TooManyMembers'] - }, - /** - * Lookup399: pallet_treasury::Proposal - **/ - PalletTreasuryProposal: { - proposer: 'AccountId32', - value: 'u128', - beneficiary: 'AccountId32', - bond: 'u128' - }, - /** - * Lookup403: frame_support::PalletId - **/ - FrameSupportPalletId: '[u8;8]', - /** - * Lookup404: pallet_treasury::pallet::Error - **/ - PalletTreasuryError: { - _enum: ['InsufficientProposersBalance', 'InvalidIndex', 'TooManyApprovals', 'InsufficientPermission', 'ProposalNotApproved'] - }, - /** - * Lookup405: pallet_utility::pallet::Error - **/ - PalletUtilityError: { - _enum: ['TooManyCalls'] - }, - /** - * Lookup408: pallet_vesting::Releases - **/ - PalletVestingReleases: { - _enum: ['V0', 'V1'] - }, - /** - * Lookup409: pallet_vesting::pallet::Error - **/ - PalletVestingError: { - _enum: ['NotVesting', 'AtMaxVestingSchedules', 'AmountLow', 'ScheduleIndexOutOfBounds', 'InvalidScheduleParams'] - }, - /** - * Lookup412: pallet_scheduler::Scheduled, BlockNumber, spiritnet_runtime::OriginCaller, sp_core::crypto::AccountId32> - **/ - PalletSchedulerScheduled: { - maybeId: 'Option<[u8;32]>', - priority: 'u8', - call: 'FrameSupportPreimagesBounded', - maybePeriodic: 'Option<(u64,u32)>', - origin: 'SpiritnetRuntimeOriginCaller' - }, - /** - * Lookup414: pallet_scheduler::pallet::Error - **/ - PalletSchedulerError: { - _enum: ['FailedToSchedule', 'NotFound', 'TargetBlockNumberInPast', 'RescheduleNoChange', 'Named'] - }, - /** - * Lookup417: pallet_proxy::ProxyDefinition - **/ - PalletProxyProxyDefinition: { - delegate: 'AccountId32', - proxyType: 'SpiritnetRuntimeProxyType', - delay: 'u64' - }, - /** - * Lookup421: pallet_proxy::Announcement - **/ - PalletProxyAnnouncement: { - real: 'AccountId32', - callHash: 'H256', - height: 'u64' - }, - /** - * Lookup423: pallet_proxy::pallet::Error - **/ - PalletProxyError: { - _enum: ['TooMany', 'NotFound', 'NotProxy', 'Unproxyable', 'Duplicate', 'NoPermission', 'Unannounced', 'NoSelfProxy'] - }, - /** - * Lookup424: pallet_preimage::RequestStatus - **/ - PalletPreimageRequestStatus: { - _enum: { - Unrequested: { - deposit: '(AccountId32,u128)', - len: 'u32', - }, - Requested: { - deposit: 'Option<(AccountId32,u128)>', - count: 'u32', - len: 'Option' - } - } - }, - /** - * Lookup429: pallet_preimage::pallet::Error - **/ - PalletPreimageError: { - _enum: ['TooBig', 'AlreadyNoted', 'NotAuthorized', 'NotNoted', 'Requested', 'NotRequested'] - }, - /** - * Lookup432: pallet_tips::OpenTip - **/ - PalletTipsOpenTip: { - reason: 'H256', - who: 'AccountId32', - finder: 'AccountId32', - deposit: 'u128', - closes: 'Option', - tips: 'Vec<(AccountId32,u128)>', - findersFee: 'bool' - }, - /** - * Lookup436: pallet_tips::pallet::Error - **/ - PalletTipsError: { - _enum: ['ReasonTooBig', 'AlreadyKnown', 'UnknownTip', 'NotFinder', 'StillOpen', 'Premature'] - }, - /** - * Lookup438: pallet_multisig::Multisig - **/ - PalletMultisigMultisig: { - when: 'PalletMultisigTimepoint', - deposit: 'u128', - depositor: 'AccountId32', - approvals: 'Vec' - }, - /** - * Lookup440: pallet_multisig::pallet::Error - **/ - PalletMultisigError: { - _enum: ['MinimumThreshold', 'AlreadyApproved', 'NoApprovalsNeeded', 'TooFewSignatories', 'TooManySignatories', 'SignatoriesOutOfOrder', 'SenderInSignatories', 'NotFound', 'NotOwner', 'NoTimepoint', 'WrongTimepoint', 'UnexpectedTimepoint', 'MaxWeightTooLow', 'AlreadyStored'] - }, - /** - * Lookup441: ctype::ctype_entry::CtypeEntry - **/ - CtypeCtypeEntry: { - creator: 'AccountId32', - createdAt: 'u64' - }, - /** - * Lookup442: ctype::pallet::Error - **/ - CtypeError: { - _enum: ['NotFound', 'AlreadyExists', 'UnableToPayFees'] - }, - /** - * Lookup443: attestation::attestations::AttestationDetails, sp_core::crypto::AccountId32, Balance> - **/ - AttestationAttestationsAttestationDetails: { - ctypeHash: 'H256', - attester: 'AccountId32', - authorizationId: 'Option', - revoked: 'bool', - deposit: 'KiltSupportDeposit' - }, - /** - * Lookup444: kilt_support::deposit::Deposit - **/ - KiltSupportDeposit: { - owner: 'AccountId32', - amount: 'u128' - }, - /** - * Lookup446: attestation::pallet::Error - **/ - AttestationError: { - _enum: ['AlreadyAttested', 'AlreadyRevoked', 'NotFound', 'CTypeMismatch', 'NotAuthorized', 'MaxDelegatedAttestationsExceeded'] - }, - /** - * Lookup447: delegation::delegation_hierarchy::DelegationNode, sp_core::crypto::AccountId32, Balance> - **/ - DelegationDelegationHierarchyDelegationNode: { - hierarchyRootId: 'H256', - parent: 'Option', - children: 'BTreeSet', - details: 'DelegationDelegationHierarchyDelegationDetails', - deposit: 'KiltSupportDeposit' - }, - /** - * Lookup448: runtime_common::constants::delegation::MaxChildren - **/ - RuntimeCommonConstantsDelegationMaxChildren: 'Null', - /** - * Lookup449: delegation::delegation_hierarchy::DelegationDetails - **/ - DelegationDelegationHierarchyDelegationDetails: { - owner: 'AccountId32', - revoked: 'bool', - permissions: 'DelegationDelegationHierarchyPermissions' - }, - /** - * Lookup452: delegation::delegation_hierarchy::DelegationHierarchyDetails - **/ - DelegationDelegationHierarchyDelegationHierarchyDetails: { - ctypeHash: 'H256' - }, - /** - * Lookup453: delegation::pallet::Error - **/ - DelegationError: { - _enum: ['DelegationAlreadyExists', 'InvalidDelegateSignature', 'DelegationNotFound', 'DelegateNotFound', 'HierarchyAlreadyExists', 'HierarchyNotFound', 'MaxSearchDepthReached', 'NotOwnerOfParentDelegation', 'NotOwnerOfDelegationHierarchy', 'ParentDelegationNotFound', 'ParentDelegationRevoked', 'UnauthorizedRevocation', 'UnauthorizedRemoval', 'UnauthorizedDelegation', 'AccessDenied', 'ExceededRevocationBounds', 'ExceededRemovalBounds', 'MaxRevocationsTooLarge', 'MaxRemovalsTooLarge', 'MaxParentChecksTooLarge', 'Internal', 'MaxChildrenExceeded'] - }, - /** - * Lookup454: did::did_details::DidDetails - **/ - DidDidDetails: { - authenticationKey: 'H256', - keyAgreementKeys: 'BTreeSet', - delegationKey: 'Option', - attestationKey: 'Option', - publicKeys: 'BTreeMap', - lastTxCounter: 'u64', - deposit: 'KiltSupportDeposit' - }, - /** - * Lookup457: did::did_details::DidPublicKeyDetails - **/ - DidDidDetailsDidPublicKeyDetails: { - key: 'DidDidDetailsDidPublicKey', - blockNumber: 'u64' - }, - /** - * Lookup458: did::did_details::DidPublicKey - **/ - DidDidDetailsDidPublicKey: { - _enum: { - PublicVerificationKey: 'DidDidDetailsDidVerificationKey', - PublicEncryptionKey: 'DidDidDetailsDidEncryptionKey' - } - }, - /** - * Lookup463: did::pallet::Error - **/ - DidError: { - _enum: ['InvalidSignatureFormat', 'InvalidSignature', 'AlreadyExists', 'NotFound', 'VerificationKeyNotFound', 'InvalidNonce', 'UnsupportedDidAuthorizationCall', 'InvalidDidAuthorizationCall', 'MaxNewKeyAgreementKeysLimitExceeded', 'MaxPublicKeysExceeded', 'MaxKeyAgreementKeysExceeded', 'BadDidOrigin', 'TransactionExpired', 'AlreadyDeleted', 'NotOwnerOfDeposit', 'UnableToPayFees', 'MaxNumberOfServicesExceeded', 'MaxServiceIdLengthExceeded', 'MaxServiceTypeLengthExceeded', 'MaxNumberOfTypesPerServiceExceeded', 'MaxServiceUrlLengthExceeded', 'MaxNumberOfUrlsPerServiceExceeded', 'ServiceAlreadyExists', 'ServiceNotFound', 'InvalidServiceEncoding', 'MaxStoredEndpointsCountExceeded', 'Internal'] - }, - /** - * Lookup464: pallet_did_lookup::connection_record::ConnectionRecord - **/ - PalletDidLookupConnectionRecord: { - did: 'AccountId32', - deposit: 'KiltSupportDeposit' - }, - /** - * Lookup466: pallet_did_lookup::pallet::Error - **/ - PalletDidLookupError: { - _enum: ['NotFound', 'NotAuthorized', 'OutdatedProof', 'InsufficientFunds', 'Migration'] - }, - /** - * Lookup467: pallet_web3_names::web3_name::Web3NameOwnership, BlockNumber> - **/ - PalletWeb3NamesWeb3NameWeb3NameOwnership: { - owner: 'AccountId32', - claimedAt: 'u64', - deposit: 'KiltSupportDeposit' - }, - /** - * Lookup468: pallet_web3_names::pallet::Error - **/ - PalletWeb3NamesError: { - _enum: ['InsufficientFunds', 'AlreadyExists', 'NotFound', 'OwnerAlreadyExists', 'OwnerNotFound', 'Banned', 'NotBanned', 'AlreadyBanned', 'NotAuthorized', 'TooShort', 'TooLong', 'InvalidCharacter'] - }, - /** - * Lookup469: public_credentials::credentials::CredentialEntry> - **/ - PublicCredentialsCredentialsCredentialEntry: { - ctypeHash: 'H256', - attester: 'AccountId32', - revoked: 'bool', - blockNumber: 'u64', - deposit: 'KiltSupportDeposit', - authorizationId: 'Option' - }, - /** - * Lookup470: public_credentials::pallet::Error - **/ - PublicCredentialsError: { - _enum: ['AlreadyAttested', 'NotFound', 'UnableToPayFees', 'InvalidInput', 'NotAuthorized', 'Internal'] - }, - /** - * Lookup471: pallet_migration::pallet::Error - **/ - PalletMigrationError: { - _enum: ['KeyParse'] - }, - /** - * Lookup473: polkadot_primitives::v5::UpgradeRestriction - **/ - PolkadotPrimitivesV5UpgradeRestriction: { - _enum: ['Present'] - }, - /** - * Lookup474: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot - **/ - CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: { - dmqMqcHead: 'H256', - relayDispatchQueueSize: 'CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize', - ingressChannels: 'Vec<(u32,PolkadotPrimitivesV5AbridgedHrmpChannel)>', - egressChannels: 'Vec<(u32,PolkadotPrimitivesV5AbridgedHrmpChannel)>' - }, - /** - * Lookup475: cumulus_pallet_parachain_system::relay_state_snapshot::RelayDispachQueueSize - **/ - CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize: { - remainingCount: 'u32', - remainingSize: 'u32' - }, - /** - * Lookup478: polkadot_primitives::v5::AbridgedHrmpChannel - **/ - PolkadotPrimitivesV5AbridgedHrmpChannel: { - maxCapacity: 'u32', - maxTotalSize: 'u32', - maxMessageSize: 'u32', - msgCount: 'u32', - totalSize: 'u32', - mqcHead: 'Option' - }, - /** - * Lookup479: polkadot_primitives::v5::AbridgedHostConfiguration - **/ - PolkadotPrimitivesV5AbridgedHostConfiguration: { - maxCodeSize: 'u32', - maxHeadDataSize: 'u32', - maxUpwardQueueCount: 'u32', - maxUpwardQueueSize: 'u32', - maxUpwardMessageSize: 'u32', - maxUpwardMessageNumPerCandidate: 'u32', - hrmpMaxMessageNumPerCandidate: 'u32', - validationUpgradeCooldown: 'u32', - validationUpgradeDelay: 'u32' - }, - /** - * Lookup485: polkadot_core_primitives::OutboundHrmpMessage - **/ - PolkadotCorePrimitivesOutboundHrmpMessage: { - recipient: 'u32', - data: 'Bytes' - }, - /** - * Lookup486: cumulus_pallet_parachain_system::CodeUpgradeAuthorization - **/ - CumulusPalletParachainSystemCodeUpgradeAuthorization: { - codeHash: 'H256', - checkVersion: 'bool' - }, - /** - * Lookup487: cumulus_pallet_parachain_system::pallet::Error - **/ - CumulusPalletParachainSystemError: { - _enum: ['OverlappingUpgrades', 'ProhibitedByPolkadot', 'TooBig', 'ValidationDataNotAvailable', 'HostConfigurationNotAvailable', 'NotScheduled', 'NothingAuthorized', 'Unauthorized'] - }, - /** - * Lookup489: cumulus_pallet_xcmp_queue::InboundChannelDetails - **/ - CumulusPalletXcmpQueueInboundChannelDetails: { - sender: 'u32', - state: 'CumulusPalletXcmpQueueInboundState', - messageMetadata: 'Vec<(u32,PolkadotParachainPrimitivesXcmpMessageFormat)>' - }, - /** - * Lookup490: cumulus_pallet_xcmp_queue::InboundState - **/ - CumulusPalletXcmpQueueInboundState: { - _enum: ['Ok', 'Suspended'] - }, - /** - * Lookup493: polkadot_parachain::primitives::XcmpMessageFormat - **/ - PolkadotParachainPrimitivesXcmpMessageFormat: { - _enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals'] - }, - /** - * Lookup496: cumulus_pallet_xcmp_queue::OutboundChannelDetails - **/ - CumulusPalletXcmpQueueOutboundChannelDetails: { - recipient: 'u32', - state: 'CumulusPalletXcmpQueueOutboundState', - signalsExist: 'bool', - firstIndex: 'u16', - lastIndex: 'u16' - }, - /** - * Lookup497: cumulus_pallet_xcmp_queue::OutboundState - **/ - CumulusPalletXcmpQueueOutboundState: { - _enum: ['Ok', 'Suspended'] - }, - /** - * Lookup499: cumulus_pallet_xcmp_queue::QueueConfigData - **/ - CumulusPalletXcmpQueueQueueConfigData: { - suspendThreshold: 'u32', - dropThreshold: 'u32', - resumeThreshold: 'u32', - thresholdWeight: 'SpWeightsWeightV2Weight', - weightRestrictDecay: 'SpWeightsWeightV2Weight', - xcmpMaxIndividualWeight: 'SpWeightsWeightV2Weight' - }, - /** - * Lookup501: cumulus_pallet_xcmp_queue::pallet::Error - **/ - CumulusPalletXcmpQueueError: { - _enum: ['FailedToSend', 'BadXcmOrigin', 'BadXcm', 'BadOverweightIndex', 'WeightOverLimit'] - }, - /** - * Lookup502: pallet_xcm::pallet::QueryStatus - **/ - PalletXcmQueryStatus: { - _enum: { - Pending: { - responder: 'XcmVersionedMultiLocation', - maybeMatchQuerier: 'Option', - maybeNotify: 'Option<(u8,u8)>', - timeout: 'u64', - }, - VersionNotifier: { - origin: 'XcmVersionedMultiLocation', - isActive: 'bool', - }, - Ready: { - response: 'XcmVersionedResponse', - at: 'u64' - } - } - }, - /** - * Lookup506: xcm::VersionedResponse - **/ - XcmVersionedResponse: { - _enum: { - __Unused0: 'Null', - __Unused1: 'Null', - V2: 'XcmV2Response', - V3: 'XcmV3Response' - } - }, - /** - * Lookup512: pallet_xcm::pallet::VersionMigrationStage - **/ - PalletXcmVersionMigrationStage: { - _enum: { - MigrateSupportedVersion: 'Null', - MigrateVersionNotifiers: 'Null', - NotifyCurrentTargets: 'Option', - MigrateAndNotifyOldTargets: 'Null' - } - }, - /** - * Lookup515: xcm::VersionedAssetId - **/ - XcmVersionedAssetId: { - _enum: { - __Unused0: 'Null', - __Unused1: 'Null', - __Unused2: 'Null', - V3: 'XcmV3MultiassetAssetId' - } - }, - /** - * Lookup516: pallet_xcm::pallet::RemoteLockedFungibleRecord - **/ - PalletXcmRemoteLockedFungibleRecord: { - amount: 'u128', - owner: 'XcmVersionedMultiLocation', - locker: 'XcmVersionedMultiLocation', - consumers: 'Vec<([u8;8],u128)>' - }, - /** - * Lookup523: pallet_xcm::pallet::Error - **/ - PalletXcmError: { - _enum: ['Unreachable', 'SendFailure', 'Filtered', 'UnweighableMessage', 'DestinationNotInvertible', 'Empty', 'CannotReanchor', 'TooManyAssets', 'InvalidOrigin', 'BadVersion', 'BadLocation', 'NoSubscription', 'AlreadySubscribed', 'InvalidAsset', 'LowBalance', 'TooManyLocks', 'AccountNotSovereign', 'FeesNotMet', 'LockNotFound', 'InUse'] - }, - /** - * Lookup524: cumulus_pallet_xcm::pallet::Error - **/ - CumulusPalletXcmError: 'Null', - /** - * Lookup525: cumulus_pallet_dmp_queue::ConfigData - **/ - CumulusPalletDmpQueueConfigData: { - maxIndividual: 'SpWeightsWeightV2Weight' - }, - /** - * Lookup526: cumulus_pallet_dmp_queue::PageIndexData - **/ - CumulusPalletDmpQueuePageIndexData: { - beginUsed: 'u32', - endUsed: 'u32', - overweightCount: 'u64' - }, - /** - * Lookup529: cumulus_pallet_dmp_queue::pallet::Error - **/ - CumulusPalletDmpQueueError: { - _enum: ['Unknown', 'OverLimit'] - }, - /** - * Lookup532: frame_system::extensions::check_non_zero_sender::CheckNonZeroSender - **/ - FrameSystemExtensionsCheckNonZeroSender: 'Null', - /** - * Lookup533: frame_system::extensions::check_spec_version::CheckSpecVersion - **/ - FrameSystemExtensionsCheckSpecVersion: 'Null', - /** - * Lookup534: frame_system::extensions::check_tx_version::CheckTxVersion - **/ - FrameSystemExtensionsCheckTxVersion: 'Null', - /** - * Lookup535: frame_system::extensions::check_genesis::CheckGenesis - **/ - FrameSystemExtensionsCheckGenesis: 'Null', - /** - * Lookup538: frame_system::extensions::check_nonce::CheckNonce - **/ - FrameSystemExtensionsCheckNonce: 'Compact', - /** - * Lookup539: frame_system::extensions::check_weight::CheckWeight - **/ - FrameSystemExtensionsCheckWeight: 'Null', - /** - * Lookup540: pallet_transaction_payment::ChargeTransactionPayment - **/ - PalletTransactionPaymentChargeTransactionPayment: 'Compact' -}; diff --git a/packages/augment-api/src/interfaces/registry.ts b/packages/augment-api/src/interfaces/registry.ts deleted file mode 100644 index 1a828d420..000000000 --- a/packages/augment-api/src/interfaces/registry.ts +++ /dev/null @@ -1,312 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-defs`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import '@polkadot/types/types/registry'; - -import type { AttestationAttestationsAttestationDetails, AttestationCall, AttestationError, AttestationEvent, AttestationHoldReason, CtypeCall, CtypeCtypeEntry, CtypeError, CtypeEvent, CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemCodeUpgradeAuthorization, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, DelegationAccessControlDelegationAc, DelegationCall, DelegationDelegationHierarchyDelegationDetails, DelegationDelegationHierarchyDelegationHierarchyDetails, DelegationDelegationHierarchyDelegationNode, DelegationDelegationHierarchyPermissions, DelegationError, DelegationEvent, DelegationHoldReason, DidCall, DidDidDetails, DidDidDetailsDidAuthorizedCallOperation, DidDidDetailsDidCreationDetails, DidDidDetailsDidEncryptionKey, DidDidDetailsDidPublicKey, DidDidDetailsDidPublicKeyDetails, DidDidDetailsDidSignature, DidDidDetailsDidVerificationKey, DidError, DidEvent, DidHoldReason, DidOriginDidRawOrigin, DidServiceEndpointsDidEndpoint, FrameSupportDispatchDispatchClass, FrameSupportDispatchDispatchInfo, FrameSupportDispatchPays, FrameSupportDispatchPerDispatchClassU32, FrameSupportDispatchPerDispatchClassWeight, FrameSupportDispatchPerDispatchClassWeightsPerClass, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportPreimagesBounded, FrameSupportTokensMiscBalanceStatus, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonZeroSender, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckTxVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, KiltAssetDidsAssetV1AssetId, KiltAssetDidsAssetV1EvmSmartContractFungibleReference, KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference, KiltAssetDidsAssetV1GenericAssetId, KiltAssetDidsChainV1ChainId, KiltAssetDidsChainV1GenericChainId, KiltAssetDidsChainV1GenesisHexHash32Reference, KiltAssetDidsV1AssetDid, KiltSupportDeposit, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesIdAmountRuntimeFreezeReason, PalletBalancesIdAmountRuntimeHoldReason, PalletBalancesReasons, PalletBalancesReserveData, PalletCollectiveCall, PalletCollectiveError, PalletCollectiveEvent, PalletCollectiveRawOrigin, PalletCollectiveVotes, PalletDemocracyCall, PalletDemocracyConviction, PalletDemocracyDelegations, PalletDemocracyError, PalletDemocracyEvent, PalletDemocracyMetadataOwner, PalletDemocracyReferendumInfo, PalletDemocracyReferendumStatus, PalletDemocracyTally, PalletDemocracyVoteAccountVote, PalletDemocracyVotePriorLock, PalletDemocracyVoteThreshold, PalletDemocracyVoteVoting, PalletDidLookupAccountAccountId20, PalletDidLookupAccountEthereumSignature, PalletDidLookupAssociateAccountRequest, PalletDidLookupCall, PalletDidLookupConnectionRecord, PalletDidLookupError, PalletDidLookupEvent, PalletDidLookupHoldReason, PalletDidLookupLinkableAccountLinkableAccountId, PalletIndicesCall, PalletIndicesError, PalletIndicesEvent, PalletMembershipCall, PalletMembershipError, PalletMembershipEvent, PalletMigrationCall, PalletMigrationEntriesToMigrate, PalletMigrationError, PalletMigrationEvent, PalletMultisigCall, PalletMultisigError, PalletMultisigEvent, PalletMultisigMultisig, PalletMultisigTimepoint, PalletPreimageCall, PalletPreimageError, PalletPreimageEvent, PalletPreimageRequestStatus, PalletProxyAnnouncement, PalletProxyCall, PalletProxyError, PalletProxyEvent, PalletProxyProxyDefinition, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, PalletSchedulerScheduled, PalletSessionCall, PalletSessionError, PalletSessionEvent, PalletTimestampCall, PalletTipsCall, PalletTipsError, PalletTipsEvent, PalletTipsOpenTip, PalletTransactionPaymentChargeTransactionPayment, PalletTransactionPaymentEvent, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUtilityCall, PalletUtilityError, PalletUtilityEvent, PalletVestingCall, PalletVestingError, PalletVestingEvent, PalletVestingReleases, PalletVestingVestingInfo, PalletWeb3NamesCall, PalletWeb3NamesError, PalletWeb3NamesEvent, PalletWeb3NamesHoldReason, PalletWeb3NamesWeb3NameWeb3NameOwnership, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PalletXcmQueryStatus, PalletXcmRemoteLockedFungibleRecord, PalletXcmVersionMigrationStage, ParachainInfoCall, ParachainStakingCall, ParachainStakingCandidate, ParachainStakingCandidateStatus, ParachainStakingDelegationCounter, ParachainStakingError, ParachainStakingEvent, ParachainStakingFreezeReason, ParachainStakingInflationInflationInfo, ParachainStakingInflationRewardRate, ParachainStakingInflationStakingInfo, ParachainStakingRoundInfo, ParachainStakingSetOrderedSet, ParachainStakingStake, ParachainStakingTotalStake, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV5AbridgedHostConfiguration, PolkadotPrimitivesV5AbridgedHrmpChannel, PolkadotPrimitivesV5PersistedValidationData, PolkadotPrimitivesV5UpgradeRestriction, PublicCredentialsCall, PublicCredentialsCredentialsCredential, PublicCredentialsCredentialsCredentialEntry, PublicCredentialsError, PublicCredentialsEvent, PublicCredentialsHoldReason, RuntimeCommonAssetsAssetDid, RuntimeCommonAuthorizationAuthorizationId, RuntimeCommonAuthorizationPalletAuthorize, RuntimeCommonConstantsDelegationMaxChildren, RuntimeCommonConstantsDidMaxNewKeyAgreementKeys, SpArithmeticArithmeticError, SpConsensusAuraSr25519AppSr25519Public, SpCoreCryptoKeyTypeId, SpCoreEcdsaPublic, SpCoreEcdsaSignature, SpCoreEd25519Public, SpCoreEd25519Signature, SpCoreSr25519Public, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, SpWeightsRuntimeDbWeight, SpWeightsWeightV2Weight, SpiritnetRuntimeOriginCaller, SpiritnetRuntimeProxyType, SpiritnetRuntimeRuntime, SpiritnetRuntimeRuntimeFreezeReason, SpiritnetRuntimeRuntimeHoldReason, SpiritnetRuntimeSessionKeys, XcmDoubleEncoded, XcmV2BodyId, XcmV2BodyPart, XcmV2Instruction, XcmV2Junction, XcmV2MultiAsset, XcmV2MultiLocation, XcmV2MultiassetAssetId, XcmV2MultiassetAssetInstance, XcmV2MultiassetFungibility, XcmV2MultiassetMultiAssetFilter, XcmV2MultiassetMultiAssets, XcmV2MultiassetWildFungibility, XcmV2MultiassetWildMultiAsset, XcmV2MultilocationJunctions, XcmV2NetworkId, XcmV2OriginKind, XcmV2Response, XcmV2TraitsError, XcmV2WeightLimit, XcmV2Xcm, XcmV3Instruction, XcmV3Junction, XcmV3JunctionBodyId, XcmV3JunctionBodyPart, XcmV3JunctionNetworkId, XcmV3Junctions, XcmV3MaybeErrorCode, XcmV3MultiAsset, XcmV3MultiLocation, XcmV3MultiassetAssetId, XcmV3MultiassetAssetInstance, XcmV3MultiassetFungibility, XcmV3MultiassetMultiAssetFilter, XcmV3MultiassetMultiAssets, XcmV3MultiassetWildFungibility, XcmV3MultiassetWildMultiAsset, XcmV3PalletInfo, XcmV3QueryResponseInfo, XcmV3Response, XcmV3TraitsError, XcmV3TraitsOutcome, XcmV3WeightLimit, XcmV3Xcm, XcmVersionedAssetId, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedResponse, XcmVersionedXcm } from '@polkadot/types/lookup'; - -declare module '@polkadot/types/types/registry' { - interface InterfaceTypes { - AttestationAttestationsAttestationDetails: AttestationAttestationsAttestationDetails; - AttestationCall: AttestationCall; - AttestationError: AttestationError; - AttestationEvent: AttestationEvent; - AttestationHoldReason: AttestationHoldReason; - CtypeCall: CtypeCall; - CtypeCtypeEntry: CtypeCtypeEntry; - CtypeError: CtypeError; - CtypeEvent: CtypeEvent; - CumulusPalletDmpQueueCall: CumulusPalletDmpQueueCall; - CumulusPalletDmpQueueConfigData: CumulusPalletDmpQueueConfigData; - CumulusPalletDmpQueueError: CumulusPalletDmpQueueError; - CumulusPalletDmpQueueEvent: CumulusPalletDmpQueueEvent; - CumulusPalletDmpQueuePageIndexData: CumulusPalletDmpQueuePageIndexData; - CumulusPalletParachainSystemCall: CumulusPalletParachainSystemCall; - CumulusPalletParachainSystemCodeUpgradeAuthorization: CumulusPalletParachainSystemCodeUpgradeAuthorization; - CumulusPalletParachainSystemError: CumulusPalletParachainSystemError; - CumulusPalletParachainSystemEvent: CumulusPalletParachainSystemEvent; - CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot; - CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize: CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize; - CumulusPalletXcmError: CumulusPalletXcmError; - CumulusPalletXcmEvent: CumulusPalletXcmEvent; - CumulusPalletXcmOrigin: CumulusPalletXcmOrigin; - CumulusPalletXcmpQueueCall: CumulusPalletXcmpQueueCall; - CumulusPalletXcmpQueueError: CumulusPalletXcmpQueueError; - CumulusPalletXcmpQueueEvent: CumulusPalletXcmpQueueEvent; - CumulusPalletXcmpQueueInboundChannelDetails: CumulusPalletXcmpQueueInboundChannelDetails; - CumulusPalletXcmpQueueInboundState: CumulusPalletXcmpQueueInboundState; - CumulusPalletXcmpQueueOutboundChannelDetails: CumulusPalletXcmpQueueOutboundChannelDetails; - CumulusPalletXcmpQueueOutboundState: CumulusPalletXcmpQueueOutboundState; - CumulusPalletXcmpQueueQueueConfigData: CumulusPalletXcmpQueueQueueConfigData; - CumulusPrimitivesParachainInherentParachainInherentData: CumulusPrimitivesParachainInherentParachainInherentData; - DelegationAccessControlDelegationAc: DelegationAccessControlDelegationAc; - DelegationCall: DelegationCall; - DelegationDelegationHierarchyDelegationDetails: DelegationDelegationHierarchyDelegationDetails; - DelegationDelegationHierarchyDelegationHierarchyDetails: DelegationDelegationHierarchyDelegationHierarchyDetails; - DelegationDelegationHierarchyDelegationNode: DelegationDelegationHierarchyDelegationNode; - DelegationDelegationHierarchyPermissions: DelegationDelegationHierarchyPermissions; - DelegationError: DelegationError; - DelegationEvent: DelegationEvent; - DelegationHoldReason: DelegationHoldReason; - DidCall: DidCall; - DidDidDetails: DidDidDetails; - DidDidDetailsDidAuthorizedCallOperation: DidDidDetailsDidAuthorizedCallOperation; - DidDidDetailsDidCreationDetails: DidDidDetailsDidCreationDetails; - DidDidDetailsDidEncryptionKey: DidDidDetailsDidEncryptionKey; - DidDidDetailsDidPublicKey: DidDidDetailsDidPublicKey; - DidDidDetailsDidPublicKeyDetails: DidDidDetailsDidPublicKeyDetails; - DidDidDetailsDidSignature: DidDidDetailsDidSignature; - DidDidDetailsDidVerificationKey: DidDidDetailsDidVerificationKey; - DidError: DidError; - DidEvent: DidEvent; - DidHoldReason: DidHoldReason; - DidOriginDidRawOrigin: DidOriginDidRawOrigin; - DidServiceEndpointsDidEndpoint: DidServiceEndpointsDidEndpoint; - FrameSupportDispatchDispatchClass: FrameSupportDispatchDispatchClass; - FrameSupportDispatchDispatchInfo: FrameSupportDispatchDispatchInfo; - FrameSupportDispatchPays: FrameSupportDispatchPays; - FrameSupportDispatchPerDispatchClassU32: FrameSupportDispatchPerDispatchClassU32; - FrameSupportDispatchPerDispatchClassWeight: FrameSupportDispatchPerDispatchClassWeight; - FrameSupportDispatchPerDispatchClassWeightsPerClass: FrameSupportDispatchPerDispatchClassWeightsPerClass; - FrameSupportDispatchRawOrigin: FrameSupportDispatchRawOrigin; - FrameSupportPalletId: FrameSupportPalletId; - FrameSupportPreimagesBounded: FrameSupportPreimagesBounded; - FrameSupportTokensMiscBalanceStatus: FrameSupportTokensMiscBalanceStatus; - FrameSystemAccountInfo: FrameSystemAccountInfo; - FrameSystemCall: FrameSystemCall; - FrameSystemError: FrameSystemError; - FrameSystemEvent: FrameSystemEvent; - FrameSystemEventRecord: FrameSystemEventRecord; - FrameSystemExtensionsCheckGenesis: FrameSystemExtensionsCheckGenesis; - FrameSystemExtensionsCheckNonZeroSender: FrameSystemExtensionsCheckNonZeroSender; - FrameSystemExtensionsCheckNonce: FrameSystemExtensionsCheckNonce; - FrameSystemExtensionsCheckSpecVersion: FrameSystemExtensionsCheckSpecVersion; - FrameSystemExtensionsCheckTxVersion: FrameSystemExtensionsCheckTxVersion; - FrameSystemExtensionsCheckWeight: FrameSystemExtensionsCheckWeight; - FrameSystemLastRuntimeUpgradeInfo: FrameSystemLastRuntimeUpgradeInfo; - FrameSystemLimitsBlockLength: FrameSystemLimitsBlockLength; - FrameSystemLimitsBlockWeights: FrameSystemLimitsBlockWeights; - FrameSystemLimitsWeightsPerClass: FrameSystemLimitsWeightsPerClass; - FrameSystemPhase: FrameSystemPhase; - KiltAssetDidsAssetV1AssetId: KiltAssetDidsAssetV1AssetId; - KiltAssetDidsAssetV1EvmSmartContractFungibleReference: KiltAssetDidsAssetV1EvmSmartContractFungibleReference; - KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference: KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference; - KiltAssetDidsAssetV1GenericAssetId: KiltAssetDidsAssetV1GenericAssetId; - KiltAssetDidsChainV1ChainId: KiltAssetDidsChainV1ChainId; - KiltAssetDidsChainV1GenericChainId: KiltAssetDidsChainV1GenericChainId; - KiltAssetDidsChainV1GenesisHexHash32Reference: KiltAssetDidsChainV1GenesisHexHash32Reference; - KiltAssetDidsV1AssetDid: KiltAssetDidsV1AssetDid; - KiltSupportDeposit: KiltSupportDeposit; - PalletBalancesAccountData: PalletBalancesAccountData; - PalletBalancesBalanceLock: PalletBalancesBalanceLock; - PalletBalancesCall: PalletBalancesCall; - PalletBalancesError: PalletBalancesError; - PalletBalancesEvent: PalletBalancesEvent; - PalletBalancesIdAmountRuntimeFreezeReason: PalletBalancesIdAmountRuntimeFreezeReason; - PalletBalancesIdAmountRuntimeHoldReason: PalletBalancesIdAmountRuntimeHoldReason; - PalletBalancesReasons: PalletBalancesReasons; - PalletBalancesReserveData: PalletBalancesReserveData; - PalletCollectiveCall: PalletCollectiveCall; - PalletCollectiveError: PalletCollectiveError; - PalletCollectiveEvent: PalletCollectiveEvent; - PalletCollectiveRawOrigin: PalletCollectiveRawOrigin; - PalletCollectiveVotes: PalletCollectiveVotes; - PalletDemocracyCall: PalletDemocracyCall; - PalletDemocracyConviction: PalletDemocracyConviction; - PalletDemocracyDelegations: PalletDemocracyDelegations; - PalletDemocracyError: PalletDemocracyError; - PalletDemocracyEvent: PalletDemocracyEvent; - PalletDemocracyMetadataOwner: PalletDemocracyMetadataOwner; - PalletDemocracyReferendumInfo: PalletDemocracyReferendumInfo; - PalletDemocracyReferendumStatus: PalletDemocracyReferendumStatus; - PalletDemocracyTally: PalletDemocracyTally; - PalletDemocracyVoteAccountVote: PalletDemocracyVoteAccountVote; - PalletDemocracyVotePriorLock: PalletDemocracyVotePriorLock; - PalletDemocracyVoteThreshold: PalletDemocracyVoteThreshold; - PalletDemocracyVoteVoting: PalletDemocracyVoteVoting; - PalletDidLookupAccountAccountId20: PalletDidLookupAccountAccountId20; - PalletDidLookupAccountEthereumSignature: PalletDidLookupAccountEthereumSignature; - PalletDidLookupAssociateAccountRequest: PalletDidLookupAssociateAccountRequest; - PalletDidLookupCall: PalletDidLookupCall; - PalletDidLookupConnectionRecord: PalletDidLookupConnectionRecord; - PalletDidLookupError: PalletDidLookupError; - PalletDidLookupEvent: PalletDidLookupEvent; - PalletDidLookupHoldReason: PalletDidLookupHoldReason; - PalletDidLookupLinkableAccountLinkableAccountId: PalletDidLookupLinkableAccountLinkableAccountId; - PalletIndicesCall: PalletIndicesCall; - PalletIndicesError: PalletIndicesError; - PalletIndicesEvent: PalletIndicesEvent; - PalletMembershipCall: PalletMembershipCall; - PalletMembershipError: PalletMembershipError; - PalletMembershipEvent: PalletMembershipEvent; - PalletMigrationCall: PalletMigrationCall; - PalletMigrationEntriesToMigrate: PalletMigrationEntriesToMigrate; - PalletMigrationError: PalletMigrationError; - PalletMigrationEvent: PalletMigrationEvent; - PalletMultisigCall: PalletMultisigCall; - PalletMultisigError: PalletMultisigError; - PalletMultisigEvent: PalletMultisigEvent; - PalletMultisigMultisig: PalletMultisigMultisig; - PalletMultisigTimepoint: PalletMultisigTimepoint; - PalletPreimageCall: PalletPreimageCall; - PalletPreimageError: PalletPreimageError; - PalletPreimageEvent: PalletPreimageEvent; - PalletPreimageRequestStatus: PalletPreimageRequestStatus; - PalletProxyAnnouncement: PalletProxyAnnouncement; - PalletProxyCall: PalletProxyCall; - PalletProxyError: PalletProxyError; - PalletProxyEvent: PalletProxyEvent; - PalletProxyProxyDefinition: PalletProxyProxyDefinition; - PalletSchedulerCall: PalletSchedulerCall; - PalletSchedulerError: PalletSchedulerError; - PalletSchedulerEvent: PalletSchedulerEvent; - PalletSchedulerScheduled: PalletSchedulerScheduled; - PalletSessionCall: PalletSessionCall; - PalletSessionError: PalletSessionError; - PalletSessionEvent: PalletSessionEvent; - PalletTimestampCall: PalletTimestampCall; - PalletTipsCall: PalletTipsCall; - PalletTipsError: PalletTipsError; - PalletTipsEvent: PalletTipsEvent; - PalletTipsOpenTip: PalletTipsOpenTip; - PalletTransactionPaymentChargeTransactionPayment: PalletTransactionPaymentChargeTransactionPayment; - PalletTransactionPaymentEvent: PalletTransactionPaymentEvent; - PalletTransactionPaymentReleases: PalletTransactionPaymentReleases; - PalletTreasuryCall: PalletTreasuryCall; - PalletTreasuryError: PalletTreasuryError; - PalletTreasuryEvent: PalletTreasuryEvent; - PalletTreasuryProposal: PalletTreasuryProposal; - PalletUtilityCall: PalletUtilityCall; - PalletUtilityError: PalletUtilityError; - PalletUtilityEvent: PalletUtilityEvent; - PalletVestingCall: PalletVestingCall; - PalletVestingError: PalletVestingError; - PalletVestingEvent: PalletVestingEvent; - PalletVestingReleases: PalletVestingReleases; - PalletVestingVestingInfo: PalletVestingVestingInfo; - PalletWeb3NamesCall: PalletWeb3NamesCall; - PalletWeb3NamesError: PalletWeb3NamesError; - PalletWeb3NamesEvent: PalletWeb3NamesEvent; - PalletWeb3NamesHoldReason: PalletWeb3NamesHoldReason; - PalletWeb3NamesWeb3NameWeb3NameOwnership: PalletWeb3NamesWeb3NameWeb3NameOwnership; - PalletXcmCall: PalletXcmCall; - PalletXcmError: PalletXcmError; - PalletXcmEvent: PalletXcmEvent; - PalletXcmOrigin: PalletXcmOrigin; - PalletXcmQueryStatus: PalletXcmQueryStatus; - PalletXcmRemoteLockedFungibleRecord: PalletXcmRemoteLockedFungibleRecord; - PalletXcmVersionMigrationStage: PalletXcmVersionMigrationStage; - ParachainInfoCall: ParachainInfoCall; - ParachainStakingCall: ParachainStakingCall; - ParachainStakingCandidate: ParachainStakingCandidate; - ParachainStakingCandidateStatus: ParachainStakingCandidateStatus; - ParachainStakingDelegationCounter: ParachainStakingDelegationCounter; - ParachainStakingError: ParachainStakingError; - ParachainStakingEvent: ParachainStakingEvent; - ParachainStakingFreezeReason: ParachainStakingFreezeReason; - ParachainStakingInflationInflationInfo: ParachainStakingInflationInflationInfo; - ParachainStakingInflationRewardRate: ParachainStakingInflationRewardRate; - ParachainStakingInflationStakingInfo: ParachainStakingInflationStakingInfo; - ParachainStakingRoundInfo: ParachainStakingRoundInfo; - ParachainStakingSetOrderedSet: ParachainStakingSetOrderedSet; - ParachainStakingStake: ParachainStakingStake; - ParachainStakingTotalStake: ParachainStakingTotalStake; - PolkadotCorePrimitivesInboundDownwardMessage: PolkadotCorePrimitivesInboundDownwardMessage; - PolkadotCorePrimitivesInboundHrmpMessage: PolkadotCorePrimitivesInboundHrmpMessage; - PolkadotCorePrimitivesOutboundHrmpMessage: PolkadotCorePrimitivesOutboundHrmpMessage; - PolkadotParachainPrimitivesXcmpMessageFormat: PolkadotParachainPrimitivesXcmpMessageFormat; - PolkadotPrimitivesV5AbridgedHostConfiguration: PolkadotPrimitivesV5AbridgedHostConfiguration; - PolkadotPrimitivesV5AbridgedHrmpChannel: PolkadotPrimitivesV5AbridgedHrmpChannel; - PolkadotPrimitivesV5PersistedValidationData: PolkadotPrimitivesV5PersistedValidationData; - PolkadotPrimitivesV5UpgradeRestriction: PolkadotPrimitivesV5UpgradeRestriction; - PublicCredentialsCall: PublicCredentialsCall; - PublicCredentialsCredentialsCredential: PublicCredentialsCredentialsCredential; - PublicCredentialsCredentialsCredentialEntry: PublicCredentialsCredentialsCredentialEntry; - PublicCredentialsError: PublicCredentialsError; - PublicCredentialsEvent: PublicCredentialsEvent; - PublicCredentialsHoldReason: PublicCredentialsHoldReason; - RuntimeCommonAssetsAssetDid: RuntimeCommonAssetsAssetDid; - RuntimeCommonAuthorizationAuthorizationId: RuntimeCommonAuthorizationAuthorizationId; - RuntimeCommonAuthorizationPalletAuthorize: RuntimeCommonAuthorizationPalletAuthorize; - RuntimeCommonConstantsDelegationMaxChildren: RuntimeCommonConstantsDelegationMaxChildren; - RuntimeCommonConstantsDidMaxNewKeyAgreementKeys: RuntimeCommonConstantsDidMaxNewKeyAgreementKeys; - SpArithmeticArithmeticError: SpArithmeticArithmeticError; - SpConsensusAuraSr25519AppSr25519Public: SpConsensusAuraSr25519AppSr25519Public; - SpCoreCryptoKeyTypeId: SpCoreCryptoKeyTypeId; - SpCoreEcdsaPublic: SpCoreEcdsaPublic; - SpCoreEcdsaSignature: SpCoreEcdsaSignature; - SpCoreEd25519Public: SpCoreEd25519Public; - SpCoreEd25519Signature: SpCoreEd25519Signature; - SpCoreSr25519Public: SpCoreSr25519Public; - SpCoreSr25519Signature: SpCoreSr25519Signature; - SpCoreVoid: SpCoreVoid; - SpRuntimeDigest: SpRuntimeDigest; - SpRuntimeDigestDigestItem: SpRuntimeDigestDigestItem; - SpRuntimeDispatchError: SpRuntimeDispatchError; - SpRuntimeModuleError: SpRuntimeModuleError; - SpRuntimeMultiSignature: SpRuntimeMultiSignature; - SpRuntimeTokenError: SpRuntimeTokenError; - SpRuntimeTransactionalError: SpRuntimeTransactionalError; - SpTrieStorageProof: SpTrieStorageProof; - SpVersionRuntimeVersion: SpVersionRuntimeVersion; - SpWeightsRuntimeDbWeight: SpWeightsRuntimeDbWeight; - SpWeightsWeightV2Weight: SpWeightsWeightV2Weight; - SpiritnetRuntimeOriginCaller: SpiritnetRuntimeOriginCaller; - SpiritnetRuntimeProxyType: SpiritnetRuntimeProxyType; - SpiritnetRuntimeRuntime: SpiritnetRuntimeRuntime; - SpiritnetRuntimeRuntimeFreezeReason: SpiritnetRuntimeRuntimeFreezeReason; - SpiritnetRuntimeRuntimeHoldReason: SpiritnetRuntimeRuntimeHoldReason; - SpiritnetRuntimeSessionKeys: SpiritnetRuntimeSessionKeys; - XcmDoubleEncoded: XcmDoubleEncoded; - XcmV2BodyId: XcmV2BodyId; - XcmV2BodyPart: XcmV2BodyPart; - XcmV2Instruction: XcmV2Instruction; - XcmV2Junction: XcmV2Junction; - XcmV2MultiAsset: XcmV2MultiAsset; - XcmV2MultiLocation: XcmV2MultiLocation; - XcmV2MultiassetAssetId: XcmV2MultiassetAssetId; - XcmV2MultiassetAssetInstance: XcmV2MultiassetAssetInstance; - XcmV2MultiassetFungibility: XcmV2MultiassetFungibility; - XcmV2MultiassetMultiAssetFilter: XcmV2MultiassetMultiAssetFilter; - XcmV2MultiassetMultiAssets: XcmV2MultiassetMultiAssets; - XcmV2MultiassetWildFungibility: XcmV2MultiassetWildFungibility; - XcmV2MultiassetWildMultiAsset: XcmV2MultiassetWildMultiAsset; - XcmV2MultilocationJunctions: XcmV2MultilocationJunctions; - XcmV2NetworkId: XcmV2NetworkId; - XcmV2OriginKind: XcmV2OriginKind; - XcmV2Response: XcmV2Response; - XcmV2TraitsError: XcmV2TraitsError; - XcmV2WeightLimit: XcmV2WeightLimit; - XcmV2Xcm: XcmV2Xcm; - XcmV3Instruction: XcmV3Instruction; - XcmV3Junction: XcmV3Junction; - XcmV3JunctionBodyId: XcmV3JunctionBodyId; - XcmV3JunctionBodyPart: XcmV3JunctionBodyPart; - XcmV3JunctionNetworkId: XcmV3JunctionNetworkId; - XcmV3Junctions: XcmV3Junctions; - XcmV3MaybeErrorCode: XcmV3MaybeErrorCode; - XcmV3MultiAsset: XcmV3MultiAsset; - XcmV3MultiLocation: XcmV3MultiLocation; - XcmV3MultiassetAssetId: XcmV3MultiassetAssetId; - XcmV3MultiassetAssetInstance: XcmV3MultiassetAssetInstance; - XcmV3MultiassetFungibility: XcmV3MultiassetFungibility; - XcmV3MultiassetMultiAssetFilter: XcmV3MultiassetMultiAssetFilter; - XcmV3MultiassetMultiAssets: XcmV3MultiassetMultiAssets; - XcmV3MultiassetWildFungibility: XcmV3MultiassetWildFungibility; - XcmV3MultiassetWildMultiAsset: XcmV3MultiassetWildMultiAsset; - XcmV3PalletInfo: XcmV3PalletInfo; - XcmV3QueryResponseInfo: XcmV3QueryResponseInfo; - XcmV3Response: XcmV3Response; - XcmV3TraitsError: XcmV3TraitsError; - XcmV3TraitsOutcome: XcmV3TraitsOutcome; - XcmV3WeightLimit: XcmV3WeightLimit; - XcmV3Xcm: XcmV3Xcm; - XcmVersionedAssetId: XcmVersionedAssetId; - XcmVersionedMultiAssets: XcmVersionedMultiAssets; - XcmVersionedMultiLocation: XcmVersionedMultiLocation; - XcmVersionedResponse: XcmVersionedResponse; - XcmVersionedXcm: XcmVersionedXcm; - } // InterfaceTypes -} // declare module diff --git a/packages/augment-api/src/interfaces/types-lookup.ts b/packages/augment-api/src/interfaces/types-lookup.ts deleted file mode 100644 index 5e40e6f2f..000000000 --- a/packages/augment-api/src/interfaces/types-lookup.ts +++ /dev/null @@ -1,4548 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-defs`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import '@polkadot/types/lookup'; - -import type { BTreeMap, BTreeSet, Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec'; -import type { ITuple } from '@polkadot/types-codec/types'; -import type { Vote } from '@polkadot/types/interfaces/elections'; -import type { AccountId32, Call, H256, MultiAddress, Perquintill } from '@polkadot/types/interfaces/runtime'; -import type { Event } from '@polkadot/types/interfaces/system'; - -declare module '@polkadot/types/lookup' { - /** @name FrameSystemAccountInfo (3) */ - interface FrameSystemAccountInfo extends Struct { - readonly nonce: u64; - readonly consumers: u32; - readonly providers: u32; - readonly sufficients: u32; - readonly data: PalletBalancesAccountData; - } - - /** @name PalletBalancesAccountData (5) */ - interface PalletBalancesAccountData extends Struct { - readonly free: u128; - readonly reserved: u128; - readonly frozen: u128; - readonly flags: u128; - } - - /** @name FrameSupportDispatchPerDispatchClassWeight (9) */ - interface FrameSupportDispatchPerDispatchClassWeight extends Struct { - readonly normal: SpWeightsWeightV2Weight; - readonly operational: SpWeightsWeightV2Weight; - readonly mandatory: SpWeightsWeightV2Weight; - } - - /** @name SpWeightsWeightV2Weight (10) */ - interface SpWeightsWeightV2Weight extends Struct { - readonly refTime: Compact; - readonly proofSize: Compact; - } - - /** @name SpRuntimeDigest (14) */ - interface SpRuntimeDigest extends Struct { - readonly logs: Vec; - } - - /** @name SpRuntimeDigestDigestItem (16) */ - interface SpRuntimeDigestDigestItem extends Enum { - readonly isOther: boolean; - readonly asOther: Bytes; - readonly isConsensus: boolean; - readonly asConsensus: ITuple<[U8aFixed, Bytes]>; - readonly isSeal: boolean; - readonly asSeal: ITuple<[U8aFixed, Bytes]>; - readonly isPreRuntime: boolean; - readonly asPreRuntime: ITuple<[U8aFixed, Bytes]>; - readonly isRuntimeEnvironmentUpdated: boolean; - readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated'; - } - - /** @name FrameSystemEventRecord (19) */ - interface FrameSystemEventRecord extends Struct { - readonly phase: FrameSystemPhase; - readonly event: Event; - readonly topics: Vec; - } - - /** @name FrameSystemEvent (21) */ - interface FrameSystemEvent extends Enum { - readonly isExtrinsicSuccess: boolean; - readonly asExtrinsicSuccess: { - readonly dispatchInfo: FrameSupportDispatchDispatchInfo; - } & Struct; - readonly isExtrinsicFailed: boolean; - readonly asExtrinsicFailed: { - readonly dispatchError: SpRuntimeDispatchError; - readonly dispatchInfo: FrameSupportDispatchDispatchInfo; - } & Struct; - readonly isCodeUpdated: boolean; - readonly isNewAccount: boolean; - readonly asNewAccount: { - readonly account: AccountId32; - } & Struct; - readonly isKilledAccount: boolean; - readonly asKilledAccount: { - readonly account: AccountId32; - } & Struct; - readonly isRemarked: boolean; - readonly asRemarked: { - readonly sender: AccountId32; - readonly hash_: H256; - } & Struct; - readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked'; - } - - /** @name FrameSupportDispatchDispatchInfo (22) */ - interface FrameSupportDispatchDispatchInfo extends Struct { - readonly weight: SpWeightsWeightV2Weight; - readonly class: FrameSupportDispatchDispatchClass; - readonly paysFee: FrameSupportDispatchPays; - } - - /** @name FrameSupportDispatchDispatchClass (23) */ - interface FrameSupportDispatchDispatchClass extends Enum { - readonly isNormal: boolean; - readonly isOperational: boolean; - readonly isMandatory: boolean; - readonly type: 'Normal' | 'Operational' | 'Mandatory'; - } - - /** @name FrameSupportDispatchPays (24) */ - interface FrameSupportDispatchPays extends Enum { - readonly isYes: boolean; - readonly isNo: boolean; - readonly type: 'Yes' | 'No'; - } - - /** @name SpRuntimeDispatchError (25) */ - interface SpRuntimeDispatchError extends Enum { - readonly isOther: boolean; - readonly isCannotLookup: boolean; - readonly isBadOrigin: boolean; - readonly isModule: boolean; - readonly asModule: SpRuntimeModuleError; - readonly isConsumerRemaining: boolean; - readonly isNoProviders: boolean; - readonly isTooManyConsumers: boolean; - readonly isToken: boolean; - readonly asToken: SpRuntimeTokenError; - readonly isArithmetic: boolean; - readonly asArithmetic: SpArithmeticArithmeticError; - readonly isTransactional: boolean; - readonly asTransactional: SpRuntimeTransactionalError; - readonly isExhausted: boolean; - readonly isCorruption: boolean; - readonly isUnavailable: boolean; - readonly isRootNotAllowed: boolean; - readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional' | 'Exhausted' | 'Corruption' | 'Unavailable' | 'RootNotAllowed'; - } - - /** @name SpRuntimeModuleError (26) */ - interface SpRuntimeModuleError extends Struct { - readonly index: u8; - readonly error: U8aFixed; - } - - /** @name SpRuntimeTokenError (27) */ - interface SpRuntimeTokenError extends Enum { - readonly isFundsUnavailable: boolean; - readonly isOnlyProvider: boolean; - readonly isBelowMinimum: boolean; - readonly isCannotCreate: boolean; - readonly isUnknownAsset: boolean; - readonly isFrozen: boolean; - readonly isUnsupported: boolean; - readonly isCannotCreateHold: boolean; - readonly isNotExpendable: boolean; - readonly isBlocked: boolean; - readonly type: 'FundsUnavailable' | 'OnlyProvider' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported' | 'CannotCreateHold' | 'NotExpendable' | 'Blocked'; - } - - /** @name SpArithmeticArithmeticError (28) */ - interface SpArithmeticArithmeticError extends Enum { - readonly isUnderflow: boolean; - readonly isOverflow: boolean; - readonly isDivisionByZero: boolean; - readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero'; - } - - /** @name SpRuntimeTransactionalError (29) */ - interface SpRuntimeTransactionalError extends Enum { - readonly isLimitReached: boolean; - readonly isNoLayer: boolean; - readonly type: 'LimitReached' | 'NoLayer'; - } - - /** @name PalletIndicesEvent (30) */ - interface PalletIndicesEvent extends Enum { - readonly isIndexAssigned: boolean; - readonly asIndexAssigned: { - readonly who: AccountId32; - readonly index: u64; - } & Struct; - readonly isIndexFreed: boolean; - readonly asIndexFreed: { - readonly index: u64; - } & Struct; - readonly isIndexFrozen: boolean; - readonly asIndexFrozen: { - readonly index: u64; - readonly who: AccountId32; - } & Struct; - readonly type: 'IndexAssigned' | 'IndexFreed' | 'IndexFrozen'; - } - - /** @name PalletBalancesEvent (31) */ - interface PalletBalancesEvent extends Enum { - readonly isEndowed: boolean; - readonly asEndowed: { - readonly account: AccountId32; - readonly freeBalance: u128; - } & Struct; - readonly isDustLost: boolean; - readonly asDustLost: { - readonly account: AccountId32; - readonly amount: u128; - } & Struct; - readonly isTransfer: boolean; - readonly asTransfer: { - readonly from: AccountId32; - readonly to: AccountId32; - readonly amount: u128; - } & Struct; - readonly isBalanceSet: boolean; - readonly asBalanceSet: { - readonly who: AccountId32; - readonly free: u128; - } & Struct; - readonly isReserved: boolean; - readonly asReserved: { - readonly who: AccountId32; - readonly amount: u128; - } & Struct; - readonly isUnreserved: boolean; - readonly asUnreserved: { - readonly who: AccountId32; - readonly amount: u128; - } & Struct; - readonly isReserveRepatriated: boolean; - readonly asReserveRepatriated: { - readonly from: AccountId32; - readonly to: AccountId32; - readonly amount: u128; - readonly destinationStatus: FrameSupportTokensMiscBalanceStatus; - } & Struct; - readonly isDeposit: boolean; - readonly asDeposit: { - readonly who: AccountId32; - readonly amount: u128; - } & Struct; - readonly isWithdraw: boolean; - readonly asWithdraw: { - readonly who: AccountId32; - readonly amount: u128; - } & Struct; - readonly isSlashed: boolean; - readonly asSlashed: { - readonly who: AccountId32; - readonly amount: u128; - } & Struct; - readonly isMinted: boolean; - readonly asMinted: { - readonly who: AccountId32; - readonly amount: u128; - } & Struct; - readonly isBurned: boolean; - readonly asBurned: { - readonly who: AccountId32; - readonly amount: u128; - } & Struct; - readonly isSuspended: boolean; - readonly asSuspended: { - readonly who: AccountId32; - readonly amount: u128; - } & Struct; - readonly isRestored: boolean; - readonly asRestored: { - readonly who: AccountId32; - readonly amount: u128; - } & Struct; - readonly isUpgraded: boolean; - readonly asUpgraded: { - readonly who: AccountId32; - } & Struct; - readonly isIssued: boolean; - readonly asIssued: { - readonly amount: u128; - } & Struct; - readonly isRescinded: boolean; - readonly asRescinded: { - readonly amount: u128; - } & Struct; - readonly isLocked: boolean; - readonly asLocked: { - readonly who: AccountId32; - readonly amount: u128; - } & Struct; - readonly isUnlocked: boolean; - readonly asUnlocked: { - readonly who: AccountId32; - readonly amount: u128; - } & Struct; - readonly isFrozen: boolean; - readonly asFrozen: { - readonly who: AccountId32; - readonly amount: u128; - } & Struct; - readonly isThawed: boolean; - readonly asThawed: { - readonly who: AccountId32; - readonly amount: u128; - } & Struct; - readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed' | 'Minted' | 'Burned' | 'Suspended' | 'Restored' | 'Upgraded' | 'Issued' | 'Rescinded' | 'Locked' | 'Unlocked' | 'Frozen' | 'Thawed'; - } - - /** @name FrameSupportTokensMiscBalanceStatus (32) */ - interface FrameSupportTokensMiscBalanceStatus extends Enum { - readonly isFree: boolean; - readonly isReserved: boolean; - readonly type: 'Free' | 'Reserved'; - } - - /** @name PalletTransactionPaymentEvent (33) */ - interface PalletTransactionPaymentEvent extends Enum { - readonly isTransactionFeePaid: boolean; - readonly asTransactionFeePaid: { - readonly who: AccountId32; - readonly actualFee: u128; - readonly tip: u128; - } & Struct; - readonly type: 'TransactionFeePaid'; - } - - /** @name PalletSessionEvent (34) */ - interface PalletSessionEvent extends Enum { - readonly isNewSession: boolean; - readonly asNewSession: { - readonly sessionIndex: u32; - } & Struct; - readonly type: 'NewSession'; - } - - /** @name ParachainStakingEvent (35) */ - interface ParachainStakingEvent extends Enum { - readonly isNewRound: boolean; - readonly asNewRound: ITuple<[u64, u32]>; - readonly isEnteredTopCandidates: boolean; - readonly asEnteredTopCandidates: AccountId32; - readonly isLeftTopCandidates: boolean; - readonly asLeftTopCandidates: AccountId32; - readonly isJoinedCollatorCandidates: boolean; - readonly asJoinedCollatorCandidates: ITuple<[AccountId32, u128]>; - readonly isCollatorStakedMore: boolean; - readonly asCollatorStakedMore: ITuple<[AccountId32, u128, u128]>; - readonly isCollatorStakedLess: boolean; - readonly asCollatorStakedLess: ITuple<[AccountId32, u128, u128]>; - readonly isCollatorScheduledExit: boolean; - readonly asCollatorScheduledExit: ITuple<[u32, AccountId32, u32]>; - readonly isCollatorCanceledExit: boolean; - readonly asCollatorCanceledExit: AccountId32; - readonly isCandidateLeft: boolean; - readonly asCandidateLeft: ITuple<[AccountId32, u128]>; - readonly isCollatorRemoved: boolean; - readonly asCollatorRemoved: ITuple<[AccountId32, u128]>; - readonly isMaxCandidateStakeChanged: boolean; - readonly asMaxCandidateStakeChanged: u128; - readonly isDelegatorStakedMore: boolean; - readonly asDelegatorStakedMore: ITuple<[AccountId32, AccountId32, u128, u128]>; - readonly isDelegatorStakedLess: boolean; - readonly asDelegatorStakedLess: ITuple<[AccountId32, AccountId32, u128, u128]>; - readonly isDelegatorLeft: boolean; - readonly asDelegatorLeft: ITuple<[AccountId32, u128]>; - readonly isDelegation: boolean; - readonly asDelegation: ITuple<[AccountId32, u128, AccountId32, u128]>; - readonly isDelegationReplaced: boolean; - readonly asDelegationReplaced: ITuple<[AccountId32, u128, AccountId32, u128, AccountId32, u128]>; - readonly isDelegatorLeftCollator: boolean; - readonly asDelegatorLeftCollator: ITuple<[AccountId32, AccountId32, u128, u128]>; - readonly isRewarded: boolean; - readonly asRewarded: ITuple<[AccountId32, u128]>; - readonly isRoundInflationSet: boolean; - readonly asRoundInflationSet: ITuple<[Perquintill, Perquintill, Perquintill, Perquintill]>; - readonly isMaxSelectedCandidatesSet: boolean; - readonly asMaxSelectedCandidatesSet: ITuple<[u32, u32]>; - readonly isBlocksPerRoundSet: boolean; - readonly asBlocksPerRoundSet: ITuple<[u32, u64, u64, u64]>; - readonly type: 'NewRound' | 'EnteredTopCandidates' | 'LeftTopCandidates' | 'JoinedCollatorCandidates' | 'CollatorStakedMore' | 'CollatorStakedLess' | 'CollatorScheduledExit' | 'CollatorCanceledExit' | 'CandidateLeft' | 'CollatorRemoved' | 'MaxCandidateStakeChanged' | 'DelegatorStakedMore' | 'DelegatorStakedLess' | 'DelegatorLeft' | 'Delegation' | 'DelegationReplaced' | 'DelegatorLeftCollator' | 'Rewarded' | 'RoundInflationSet' | 'MaxSelectedCandidatesSet' | 'BlocksPerRoundSet'; - } - - /** @name PalletDemocracyEvent (37) */ - interface PalletDemocracyEvent extends Enum { - readonly isProposed: boolean; - readonly asProposed: { - readonly proposalIndex: u32; - readonly deposit: u128; - } & Struct; - readonly isTabled: boolean; - readonly asTabled: { - readonly proposalIndex: u32; - readonly deposit: u128; - } & Struct; - readonly isExternalTabled: boolean; - readonly isStarted: boolean; - readonly asStarted: { - readonly refIndex: u32; - readonly threshold: PalletDemocracyVoteThreshold; - } & Struct; - readonly isPassed: boolean; - readonly asPassed: { - readonly refIndex: u32; - } & Struct; - readonly isNotPassed: boolean; - readonly asNotPassed: { - readonly refIndex: u32; - } & Struct; - readonly isCancelled: boolean; - readonly asCancelled: { - readonly refIndex: u32; - } & Struct; - readonly isDelegated: boolean; - readonly asDelegated: { - readonly who: AccountId32; - readonly target: AccountId32; - } & Struct; - readonly isUndelegated: boolean; - readonly asUndelegated: { - readonly account: AccountId32; - } & Struct; - readonly isVetoed: boolean; - readonly asVetoed: { - readonly who: AccountId32; - readonly proposalHash: H256; - readonly until: u64; - } & Struct; - readonly isBlacklisted: boolean; - readonly asBlacklisted: { - readonly proposalHash: H256; - } & Struct; - readonly isVoted: boolean; - readonly asVoted: { - readonly voter: AccountId32; - readonly refIndex: u32; - readonly vote: PalletDemocracyVoteAccountVote; - } & Struct; - readonly isSeconded: boolean; - readonly asSeconded: { - readonly seconder: AccountId32; - readonly propIndex: u32; - } & Struct; - readonly isProposalCanceled: boolean; - readonly asProposalCanceled: { - readonly propIndex: u32; - } & Struct; - readonly isMetadataSet: boolean; - readonly asMetadataSet: { - readonly owner: PalletDemocracyMetadataOwner; - readonly hash_: H256; - } & Struct; - readonly isMetadataCleared: boolean; - readonly asMetadataCleared: { - readonly owner: PalletDemocracyMetadataOwner; - readonly hash_: H256; - } & Struct; - readonly isMetadataTransferred: boolean; - readonly asMetadataTransferred: { - readonly prevOwner: PalletDemocracyMetadataOwner; - readonly owner: PalletDemocracyMetadataOwner; - readonly hash_: H256; - } & Struct; - readonly type: 'Proposed' | 'Tabled' | 'ExternalTabled' | 'Started' | 'Passed' | 'NotPassed' | 'Cancelled' | 'Delegated' | 'Undelegated' | 'Vetoed' | 'Blacklisted' | 'Voted' | 'Seconded' | 'ProposalCanceled' | 'MetadataSet' | 'MetadataCleared' | 'MetadataTransferred'; - } - - /** @name PalletDemocracyVoteThreshold (38) */ - interface PalletDemocracyVoteThreshold extends Enum { - readonly isSuperMajorityApprove: boolean; - readonly isSuperMajorityAgainst: boolean; - readonly isSimpleMajority: boolean; - readonly type: 'SuperMajorityApprove' | 'SuperMajorityAgainst' | 'SimpleMajority'; - } - - /** @name PalletDemocracyVoteAccountVote (39) */ - interface PalletDemocracyVoteAccountVote extends Enum { - readonly isStandard: boolean; - readonly asStandard: { - readonly vote: Vote; - readonly balance: u128; - } & Struct; - readonly isSplit: boolean; - readonly asSplit: { - readonly aye: u128; - readonly nay: u128; - } & Struct; - readonly type: 'Standard' | 'Split'; - } - - /** @name PalletDemocracyMetadataOwner (41) */ - interface PalletDemocracyMetadataOwner extends Enum { - readonly isExternal: boolean; - readonly isProposal: boolean; - readonly asProposal: u32; - readonly isReferendum: boolean; - readonly asReferendum: u32; - readonly type: 'External' | 'Proposal' | 'Referendum'; - } - - /** @name PalletCollectiveEvent (42) */ - interface PalletCollectiveEvent extends Enum { - readonly isProposed: boolean; - readonly asProposed: { - readonly account: AccountId32; - readonly proposalIndex: u32; - readonly proposalHash: H256; - readonly threshold: u32; - } & Struct; - readonly isVoted: boolean; - readonly asVoted: { - readonly account: AccountId32; - readonly proposalHash: H256; - readonly voted: bool; - readonly yes: u32; - readonly no: u32; - } & Struct; - readonly isApproved: boolean; - readonly asApproved: { - readonly proposalHash: H256; - } & Struct; - readonly isDisapproved: boolean; - readonly asDisapproved: { - readonly proposalHash: H256; - } & Struct; - readonly isExecuted: boolean; - readonly asExecuted: { - readonly proposalHash: H256; - readonly result: Result; - } & Struct; - readonly isMemberExecuted: boolean; - readonly asMemberExecuted: { - readonly proposalHash: H256; - readonly result: Result; - } & Struct; - readonly isClosed: boolean; - readonly asClosed: { - readonly proposalHash: H256; - readonly yes: u32; - readonly no: u32; - } & Struct; - readonly type: 'Proposed' | 'Voted' | 'Approved' | 'Disapproved' | 'Executed' | 'MemberExecuted' | 'Closed'; - } - - /** @name PalletMembershipEvent (47) */ - interface PalletMembershipEvent extends Enum { - readonly isMemberAdded: boolean; - readonly isMemberRemoved: boolean; - readonly isMembersSwapped: boolean; - readonly isMembersReset: boolean; - readonly isKeyChanged: boolean; - readonly isDummy: boolean; - readonly type: 'MemberAdded' | 'MemberRemoved' | 'MembersSwapped' | 'MembersReset' | 'KeyChanged' | 'Dummy'; - } - - /** @name PalletTreasuryEvent (48) */ - interface PalletTreasuryEvent extends Enum { - readonly isProposed: boolean; - readonly asProposed: { - readonly proposalIndex: u32; - } & Struct; - readonly isSpending: boolean; - readonly asSpending: { - readonly budgetRemaining: u128; - } & Struct; - readonly isAwarded: boolean; - readonly asAwarded: { - readonly proposalIndex: u32; - readonly award: u128; - readonly account: AccountId32; - } & Struct; - readonly isRejected: boolean; - readonly asRejected: { - readonly proposalIndex: u32; - readonly slashed: u128; - } & Struct; - readonly isBurnt: boolean; - readonly asBurnt: { - readonly burntFunds: u128; - } & Struct; - readonly isRollover: boolean; - readonly asRollover: { - readonly rolloverBalance: u128; - } & Struct; - readonly isDeposit: boolean; - readonly asDeposit: { - readonly value: u128; - } & Struct; - readonly isSpendApproved: boolean; - readonly asSpendApproved: { - readonly proposalIndex: u32; - readonly amount: u128; - readonly beneficiary: AccountId32; - } & Struct; - readonly isUpdatedInactive: boolean; - readonly asUpdatedInactive: { - readonly reactivated: u128; - readonly deactivated: u128; - } & Struct; - readonly type: 'Proposed' | 'Spending' | 'Awarded' | 'Rejected' | 'Burnt' | 'Rollover' | 'Deposit' | 'SpendApproved' | 'UpdatedInactive'; - } - - /** @name PalletUtilityEvent (49) */ - interface PalletUtilityEvent extends Enum { - readonly isBatchInterrupted: boolean; - readonly asBatchInterrupted: { - readonly index: u32; - readonly error: SpRuntimeDispatchError; - } & Struct; - readonly isBatchCompleted: boolean; - readonly isBatchCompletedWithErrors: boolean; - readonly isItemCompleted: boolean; - readonly isItemFailed: boolean; - readonly asItemFailed: { - readonly error: SpRuntimeDispatchError; - } & Struct; - readonly isDispatchedAs: boolean; - readonly asDispatchedAs: { - readonly result: Result; - } & Struct; - readonly type: 'BatchInterrupted' | 'BatchCompleted' | 'BatchCompletedWithErrors' | 'ItemCompleted' | 'ItemFailed' | 'DispatchedAs'; - } - - /** @name PalletVestingEvent (50) */ - interface PalletVestingEvent extends Enum { - readonly isVestingUpdated: boolean; - readonly asVestingUpdated: { - readonly account: AccountId32; - readonly unvested: u128; - } & Struct; - readonly isVestingCompleted: boolean; - readonly asVestingCompleted: { - readonly account: AccountId32; - } & Struct; - readonly type: 'VestingUpdated' | 'VestingCompleted'; - } - - /** @name PalletSchedulerEvent (51) */ - interface PalletSchedulerEvent extends Enum { - readonly isScheduled: boolean; - readonly asScheduled: { - readonly when: u64; - readonly index: u32; - } & Struct; - readonly isCanceled: boolean; - readonly asCanceled: { - readonly when: u64; - readonly index: u32; - } & Struct; - readonly isDispatched: boolean; - readonly asDispatched: { - readonly task: ITuple<[u64, u32]>; - readonly id: Option; - readonly result: Result; - } & Struct; - readonly isCallUnavailable: boolean; - readonly asCallUnavailable: { - readonly task: ITuple<[u64, u32]>; - readonly id: Option; - } & Struct; - readonly isPeriodicFailed: boolean; - readonly asPeriodicFailed: { - readonly task: ITuple<[u64, u32]>; - readonly id: Option; - } & Struct; - readonly isPermanentlyOverweight: boolean; - readonly asPermanentlyOverweight: { - readonly task: ITuple<[u64, u32]>; - readonly id: Option; - } & Struct; - readonly type: 'Scheduled' | 'Canceled' | 'Dispatched' | 'CallUnavailable' | 'PeriodicFailed' | 'PermanentlyOverweight'; - } - - /** @name PalletProxyEvent (54) */ - interface PalletProxyEvent extends Enum { - readonly isProxyExecuted: boolean; - readonly asProxyExecuted: { - readonly result: Result; - } & Struct; - readonly isPureCreated: boolean; - readonly asPureCreated: { - readonly pure: AccountId32; - readonly who: AccountId32; - readonly proxyType: SpiritnetRuntimeProxyType; - readonly disambiguationIndex: u16; - } & Struct; - readonly isAnnounced: boolean; - readonly asAnnounced: { - readonly real: AccountId32; - readonly proxy: AccountId32; - readonly callHash: H256; - } & Struct; - readonly isProxyAdded: boolean; - readonly asProxyAdded: { - readonly delegator: AccountId32; - readonly delegatee: AccountId32; - readonly proxyType: SpiritnetRuntimeProxyType; - readonly delay: u64; - } & Struct; - readonly isProxyRemoved: boolean; - readonly asProxyRemoved: { - readonly delegator: AccountId32; - readonly delegatee: AccountId32; - readonly proxyType: SpiritnetRuntimeProxyType; - readonly delay: u64; - } & Struct; - readonly type: 'ProxyExecuted' | 'PureCreated' | 'Announced' | 'ProxyAdded' | 'ProxyRemoved'; - } - - /** @name SpiritnetRuntimeProxyType (55) */ - interface SpiritnetRuntimeProxyType extends Enum { - readonly isAny: boolean; - readonly isNonTransfer: boolean; - readonly isGovernance: boolean; - readonly isParachainStaking: boolean; - readonly isCancelProxy: boolean; - readonly isNonDepositClaiming: boolean; - readonly type: 'Any' | 'NonTransfer' | 'Governance' | 'ParachainStaking' | 'CancelProxy' | 'NonDepositClaiming'; - } - - /** @name PalletPreimageEvent (57) */ - interface PalletPreimageEvent extends Enum { - readonly isNoted: boolean; - readonly asNoted: { - readonly hash_: H256; - } & Struct; - readonly isRequested: boolean; - readonly asRequested: { - readonly hash_: H256; - } & Struct; - readonly isCleared: boolean; - readonly asCleared: { - readonly hash_: H256; - } & Struct; - readonly type: 'Noted' | 'Requested' | 'Cleared'; - } - - /** @name PalletTipsEvent (59) */ - interface PalletTipsEvent extends Enum { - readonly isNewTip: boolean; - readonly asNewTip: { - readonly tipHash: H256; - } & Struct; - readonly isTipClosing: boolean; - readonly asTipClosing: { - readonly tipHash: H256; - } & Struct; - readonly isTipClosed: boolean; - readonly asTipClosed: { - readonly tipHash: H256; - readonly who: AccountId32; - readonly payout: u128; - } & Struct; - readonly isTipRetracted: boolean; - readonly asTipRetracted: { - readonly tipHash: H256; - } & Struct; - readonly isTipSlashed: boolean; - readonly asTipSlashed: { - readonly tipHash: H256; - readonly finder: AccountId32; - readonly deposit: u128; - } & Struct; - readonly type: 'NewTip' | 'TipClosing' | 'TipClosed' | 'TipRetracted' | 'TipSlashed'; - } - - /** @name PalletMultisigEvent (60) */ - interface PalletMultisigEvent extends Enum { - readonly isNewMultisig: boolean; - readonly asNewMultisig: { - readonly approving: AccountId32; - readonly multisig: AccountId32; - readonly callHash: U8aFixed; - } & Struct; - readonly isMultisigApproval: boolean; - readonly asMultisigApproval: { - readonly approving: AccountId32; - readonly timepoint: PalletMultisigTimepoint; - readonly multisig: AccountId32; - readonly callHash: U8aFixed; - } & Struct; - readonly isMultisigExecuted: boolean; - readonly asMultisigExecuted: { - readonly approving: AccountId32; - readonly timepoint: PalletMultisigTimepoint; - readonly multisig: AccountId32; - readonly callHash: U8aFixed; - readonly result: Result; - } & Struct; - readonly isMultisigCancelled: boolean; - readonly asMultisigCancelled: { - readonly cancelling: AccountId32; - readonly timepoint: PalletMultisigTimepoint; - readonly multisig: AccountId32; - readonly callHash: U8aFixed; - } & Struct; - readonly type: 'NewMultisig' | 'MultisigApproval' | 'MultisigExecuted' | 'MultisigCancelled'; - } - - /** @name PalletMultisigTimepoint (61) */ - interface PalletMultisigTimepoint extends Struct { - readonly height: u64; - readonly index: u32; - } - - /** @name CtypeEvent (62) */ - interface CtypeEvent extends Enum { - readonly isCTypeCreated: boolean; - readonly asCTypeCreated: ITuple<[AccountId32, H256]>; - readonly isCTypeUpdated: boolean; - readonly asCTypeUpdated: H256; - readonly type: 'CTypeCreated' | 'CTypeUpdated'; - } - - /** @name AttestationEvent (63) */ - interface AttestationEvent extends Enum { - readonly isAttestationCreated: boolean; - readonly asAttestationCreated: ITuple<[AccountId32, H256, H256, Option]>; - readonly isAttestationRevoked: boolean; - readonly asAttestationRevoked: ITuple<[AccountId32, H256]>; - readonly isAttestationRemoved: boolean; - readonly asAttestationRemoved: ITuple<[AccountId32, H256]>; - readonly isDepositReclaimed: boolean; - readonly asDepositReclaimed: ITuple<[AccountId32, H256]>; - readonly type: 'AttestationCreated' | 'AttestationRevoked' | 'AttestationRemoved' | 'DepositReclaimed'; - } - - /** @name RuntimeCommonAuthorizationAuthorizationId (65) */ - interface RuntimeCommonAuthorizationAuthorizationId extends Enum { - readonly isDelegation: boolean; - readonly asDelegation: H256; - readonly type: 'Delegation'; - } - - /** @name DelegationEvent (66) */ - interface DelegationEvent extends Enum { - readonly isHierarchyCreated: boolean; - readonly asHierarchyCreated: ITuple<[AccountId32, H256, H256]>; - readonly isHierarchyRevoked: boolean; - readonly asHierarchyRevoked: ITuple<[AccountId32, H256]>; - readonly isHierarchyRemoved: boolean; - readonly asHierarchyRemoved: ITuple<[AccountId32, H256]>; - readonly isDelegationCreated: boolean; - readonly asDelegationCreated: ITuple<[AccountId32, H256, H256, H256, AccountId32, DelegationDelegationHierarchyPermissions]>; - readonly isDelegationRevoked: boolean; - readonly asDelegationRevoked: ITuple<[AccountId32, H256]>; - readonly isDelegationRemoved: boolean; - readonly asDelegationRemoved: ITuple<[AccountId32, H256]>; - readonly isDepositReclaimed: boolean; - readonly asDepositReclaimed: ITuple<[AccountId32, H256]>; - readonly type: 'HierarchyCreated' | 'HierarchyRevoked' | 'HierarchyRemoved' | 'DelegationCreated' | 'DelegationRevoked' | 'DelegationRemoved' | 'DepositReclaimed'; - } - - /** @name DelegationDelegationHierarchyPermissions (67) */ - interface DelegationDelegationHierarchyPermissions extends Struct { - readonly bits: u32; - } - - /** @name DidEvent (68) */ - interface DidEvent extends Enum { - readonly isDidCreated: boolean; - readonly asDidCreated: ITuple<[AccountId32, AccountId32]>; - readonly isDidUpdated: boolean; - readonly asDidUpdated: AccountId32; - readonly isDidDeleted: boolean; - readonly asDidDeleted: AccountId32; - readonly isDidCallDispatched: boolean; - readonly asDidCallDispatched: ITuple<[AccountId32, Result]>; - readonly type: 'DidCreated' | 'DidUpdated' | 'DidDeleted' | 'DidCallDispatched'; - } - - /** @name PalletDidLookupEvent (69) */ - interface PalletDidLookupEvent extends Enum { - readonly isAssociationEstablished: boolean; - readonly asAssociationEstablished: ITuple<[PalletDidLookupLinkableAccountLinkableAccountId, AccountId32]>; - readonly isAssociationRemoved: boolean; - readonly asAssociationRemoved: ITuple<[PalletDidLookupLinkableAccountLinkableAccountId, AccountId32]>; - readonly isMigrationProgress: boolean; - readonly isMigrationCompleted: boolean; - readonly type: 'AssociationEstablished' | 'AssociationRemoved' | 'MigrationProgress' | 'MigrationCompleted'; - } - - /** @name PalletDidLookupLinkableAccountLinkableAccountId (70) */ - interface PalletDidLookupLinkableAccountLinkableAccountId extends Enum { - readonly isAccountId20: boolean; - readonly asAccountId20: PalletDidLookupAccountAccountId20; - readonly isAccountId32: boolean; - readonly asAccountId32: AccountId32; - readonly type: 'AccountId20' | 'AccountId32'; - } - - /** @name PalletDidLookupAccountAccountId20 (71) */ - interface PalletDidLookupAccountAccountId20 extends U8aFixed {} - - /** @name PalletWeb3NamesEvent (73) */ - interface PalletWeb3NamesEvent extends Enum { - readonly isWeb3NameClaimed: boolean; - readonly asWeb3NameClaimed: { - readonly owner: AccountId32; - readonly name: Bytes; - } & Struct; - readonly isWeb3NameReleased: boolean; - readonly asWeb3NameReleased: { - readonly owner: AccountId32; - readonly name: Bytes; - } & Struct; - readonly isWeb3NameBanned: boolean; - readonly asWeb3NameBanned: { - readonly name: Bytes; - } & Struct; - readonly isWeb3NameUnbanned: boolean; - readonly asWeb3NameUnbanned: { - readonly name: Bytes; - } & Struct; - readonly type: 'Web3NameClaimed' | 'Web3NameReleased' | 'Web3NameBanned' | 'Web3NameUnbanned'; - } - - /** @name PublicCredentialsEvent (76) */ - interface PublicCredentialsEvent extends Enum { - readonly isCredentialStored: boolean; - readonly asCredentialStored: { - readonly subjectId: RuntimeCommonAssetsAssetDid; - readonly credentialId: H256; - } & Struct; - readonly isCredentialRemoved: boolean; - readonly asCredentialRemoved: { - readonly subjectId: RuntimeCommonAssetsAssetDid; - readonly credentialId: H256; - } & Struct; - readonly isCredentialRevoked: boolean; - readonly asCredentialRevoked: { - readonly credentialId: H256; - } & Struct; - readonly isCredentialUnrevoked: boolean; - readonly asCredentialUnrevoked: { - readonly credentialId: H256; - } & Struct; - readonly type: 'CredentialStored' | 'CredentialRemoved' | 'CredentialRevoked' | 'CredentialUnrevoked'; - } - - /** @name RuntimeCommonAssetsAssetDid (77) */ - interface RuntimeCommonAssetsAssetDid extends KiltAssetDidsV1AssetDid {} - - /** @name KiltAssetDidsV1AssetDid (78) */ - interface KiltAssetDidsV1AssetDid extends Struct { - readonly chainId: KiltAssetDidsChainV1ChainId; - readonly assetId: KiltAssetDidsAssetV1AssetId; - } - - /** @name KiltAssetDidsChainV1ChainId (79) */ - interface KiltAssetDidsChainV1ChainId extends Enum { - readonly isEip155: boolean; - readonly asEip155: u128; - readonly isBip122: boolean; - readonly asBip122: KiltAssetDidsChainV1GenesisHexHash32Reference; - readonly isDotsama: boolean; - readonly asDotsama: KiltAssetDidsChainV1GenesisHexHash32Reference; - readonly isSolana: boolean; - readonly asSolana: Bytes; - readonly isGeneric: boolean; - readonly asGeneric: KiltAssetDidsChainV1GenericChainId; - readonly type: 'Eip155' | 'Bip122' | 'Dotsama' | 'Solana' | 'Generic'; - } - - /** @name KiltAssetDidsChainV1GenesisHexHash32Reference (81) */ - interface KiltAssetDidsChainV1GenesisHexHash32Reference extends U8aFixed {} - - /** @name KiltAssetDidsChainV1GenericChainId (85) */ - interface KiltAssetDidsChainV1GenericChainId extends Struct { - readonly namespace: Bytes; - readonly reference: Bytes; - } - - /** @name KiltAssetDidsAssetV1AssetId (89) */ - interface KiltAssetDidsAssetV1AssetId extends Enum { - readonly isSlip44: boolean; - readonly asSlip44: U256; - readonly isErc20: boolean; - readonly asErc20: KiltAssetDidsAssetV1EvmSmartContractFungibleReference; - readonly isErc721: boolean; - readonly asErc721: KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference; - readonly isErc1155: boolean; - readonly asErc1155: KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference; - readonly isGeneric: boolean; - readonly asGeneric: KiltAssetDidsAssetV1GenericAssetId; - readonly type: 'Slip44' | 'Erc20' | 'Erc721' | 'Erc1155' | 'Generic'; - } - - /** @name KiltAssetDidsAssetV1EvmSmartContractFungibleReference (93) */ - interface KiltAssetDidsAssetV1EvmSmartContractFungibleReference extends U8aFixed {} - - /** @name KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference (94) */ - interface KiltAssetDidsAssetV1EvmSmartContractNonFungibleReference extends ITuple<[KiltAssetDidsAssetV1EvmSmartContractFungibleReference, Option]> {} - - /** @name KiltAssetDidsAssetV1GenericAssetId (98) */ - interface KiltAssetDidsAssetV1GenericAssetId extends Struct { - readonly namespace: Bytes; - readonly reference: Bytes; - readonly id: Option; - } - - /** @name PalletMigrationEvent (104) */ - interface PalletMigrationEvent extends Enum { - readonly isEntriesUpdated: boolean; - readonly asEntriesUpdated: PalletMigrationEntriesToMigrate; - readonly type: 'EntriesUpdated'; - } - - /** @name PalletMigrationEntriesToMigrate (105) */ - interface PalletMigrationEntriesToMigrate extends Struct { - readonly attestation: Vec; - readonly delegation: Vec; - readonly did: Vec; - readonly lookup: Vec; - readonly w3n: Vec; - readonly publicCredentials: Vec>; - } - - /** @name SpiritnetRuntimeRuntime (106) */ - type SpiritnetRuntimeRuntime = Null; - - /** @name CumulusPalletParachainSystemEvent (118) */ - interface CumulusPalletParachainSystemEvent extends Enum { - readonly isValidationFunctionStored: boolean; - readonly isValidationFunctionApplied: boolean; - readonly asValidationFunctionApplied: { - readonly relayChainBlockNum: u32; - } & Struct; - readonly isValidationFunctionDiscarded: boolean; - readonly isUpgradeAuthorized: boolean; - readonly asUpgradeAuthorized: { - readonly codeHash: H256; - } & Struct; - readonly isDownwardMessagesReceived: boolean; - readonly asDownwardMessagesReceived: { - readonly count: u32; - } & Struct; - readonly isDownwardMessagesProcessed: boolean; - readonly asDownwardMessagesProcessed: { - readonly weightUsed: SpWeightsWeightV2Weight; - readonly dmqHead: H256; - } & Struct; - readonly isUpwardMessageSent: boolean; - readonly asUpwardMessageSent: { - readonly messageHash: Option; - } & Struct; - readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed' | 'UpwardMessageSent'; - } - - /** @name CumulusPalletXcmpQueueEvent (119) */ - interface CumulusPalletXcmpQueueEvent extends Enum { - readonly isSuccess: boolean; - readonly asSuccess: { - readonly messageHash: U8aFixed; - readonly messageId: U8aFixed; - readonly weight: SpWeightsWeightV2Weight; - } & Struct; - readonly isFail: boolean; - readonly asFail: { - readonly messageHash: U8aFixed; - readonly messageId: U8aFixed; - readonly error: XcmV3TraitsError; - readonly weight: SpWeightsWeightV2Weight; - } & Struct; - readonly isBadVersion: boolean; - readonly asBadVersion: { - readonly messageHash: U8aFixed; - } & Struct; - readonly isBadFormat: boolean; - readonly asBadFormat: { - readonly messageHash: U8aFixed; - } & Struct; - readonly isXcmpMessageSent: boolean; - readonly asXcmpMessageSent: { - readonly messageHash: U8aFixed; - } & Struct; - readonly isOverweightEnqueued: boolean; - readonly asOverweightEnqueued: { - readonly sender: u32; - readonly sentAt: u32; - readonly index: u64; - readonly required: SpWeightsWeightV2Weight; - } & Struct; - readonly isOverweightServiced: boolean; - readonly asOverweightServiced: { - readonly index: u64; - readonly used: SpWeightsWeightV2Weight; - } & Struct; - readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced'; - } - - /** @name XcmV3TraitsError (120) */ - interface XcmV3TraitsError extends Enum { - readonly isOverflow: boolean; - readonly isUnimplemented: boolean; - readonly isUntrustedReserveLocation: boolean; - readonly isUntrustedTeleportLocation: boolean; - readonly isLocationFull: boolean; - readonly isLocationNotInvertible: boolean; - readonly isBadOrigin: boolean; - readonly isInvalidLocation: boolean; - readonly isAssetNotFound: boolean; - readonly isFailedToTransactAsset: boolean; - readonly isNotWithdrawable: boolean; - readonly isLocationCannotHold: boolean; - readonly isExceedsMaxMessageSize: boolean; - readonly isDestinationUnsupported: boolean; - readonly isTransport: boolean; - readonly isUnroutable: boolean; - readonly isUnknownClaim: boolean; - readonly isFailedToDecode: boolean; - readonly isMaxWeightInvalid: boolean; - readonly isNotHoldingFees: boolean; - readonly isTooExpensive: boolean; - readonly isTrap: boolean; - readonly asTrap: u64; - readonly isExpectationFalse: boolean; - readonly isPalletNotFound: boolean; - readonly isNameMismatch: boolean; - readonly isVersionIncompatible: boolean; - readonly isHoldingWouldOverflow: boolean; - readonly isExportError: boolean; - readonly isReanchorFailed: boolean; - readonly isNoDeal: boolean; - readonly isFeesNotMet: boolean; - readonly isLockError: boolean; - readonly isNoPermission: boolean; - readonly isUnanchored: boolean; - readonly isNotDepositable: boolean; - readonly isUnhandledXcmVersion: boolean; - readonly isWeightLimitReached: boolean; - readonly asWeightLimitReached: SpWeightsWeightV2Weight; - readonly isBarrier: boolean; - readonly isWeightNotComputable: boolean; - readonly isExceedsStackLimit: boolean; - readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'LocationFull' | 'LocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'ExpectationFalse' | 'PalletNotFound' | 'NameMismatch' | 'VersionIncompatible' | 'HoldingWouldOverflow' | 'ExportError' | 'ReanchorFailed' | 'NoDeal' | 'FeesNotMet' | 'LockError' | 'NoPermission' | 'Unanchored' | 'NotDepositable' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable' | 'ExceedsStackLimit'; - } - - /** @name PalletXcmEvent (122) */ - interface PalletXcmEvent extends Enum { - readonly isAttempted: boolean; - readonly asAttempted: { - readonly outcome: XcmV3TraitsOutcome; - } & Struct; - readonly isSent: boolean; - readonly asSent: { - readonly origin: XcmV3MultiLocation; - readonly destination: XcmV3MultiLocation; - readonly message: XcmV3Xcm; - readonly messageId: U8aFixed; - } & Struct; - readonly isUnexpectedResponse: boolean; - readonly asUnexpectedResponse: { - readonly origin: XcmV3MultiLocation; - readonly queryId: u64; - } & Struct; - readonly isResponseReady: boolean; - readonly asResponseReady: { - readonly queryId: u64; - readonly response: XcmV3Response; - } & Struct; - readonly isNotified: boolean; - readonly asNotified: { - readonly queryId: u64; - readonly palletIndex: u8; - readonly callIndex: u8; - } & Struct; - readonly isNotifyOverweight: boolean; - readonly asNotifyOverweight: { - readonly queryId: u64; - readonly palletIndex: u8; - readonly callIndex: u8; - readonly actualWeight: SpWeightsWeightV2Weight; - readonly maxBudgetedWeight: SpWeightsWeightV2Weight; - } & Struct; - readonly isNotifyDispatchError: boolean; - readonly asNotifyDispatchError: { - readonly queryId: u64; - readonly palletIndex: u8; - readonly callIndex: u8; - } & Struct; - readonly isNotifyDecodeFailed: boolean; - readonly asNotifyDecodeFailed: { - readonly queryId: u64; - readonly palletIndex: u8; - readonly callIndex: u8; - } & Struct; - readonly isInvalidResponder: boolean; - readonly asInvalidResponder: { - readonly origin: XcmV3MultiLocation; - readonly queryId: u64; - readonly expectedLocation: Option; - } & Struct; - readonly isInvalidResponderVersion: boolean; - readonly asInvalidResponderVersion: { - readonly origin: XcmV3MultiLocation; - readonly queryId: u64; - } & Struct; - readonly isResponseTaken: boolean; - readonly asResponseTaken: { - readonly queryId: u64; - } & Struct; - readonly isAssetsTrapped: boolean; - readonly asAssetsTrapped: { - readonly hash_: H256; - readonly origin: XcmV3MultiLocation; - readonly assets: XcmVersionedMultiAssets; - } & Struct; - readonly isVersionChangeNotified: boolean; - readonly asVersionChangeNotified: { - readonly destination: XcmV3MultiLocation; - readonly result: u32; - readonly cost: XcmV3MultiassetMultiAssets; - readonly messageId: U8aFixed; - } & Struct; - readonly isSupportedVersionChanged: boolean; - readonly asSupportedVersionChanged: { - readonly location: XcmV3MultiLocation; - readonly version: u32; - } & Struct; - readonly isNotifyTargetSendFail: boolean; - readonly asNotifyTargetSendFail: { - readonly location: XcmV3MultiLocation; - readonly queryId: u64; - readonly error: XcmV3TraitsError; - } & Struct; - readonly isNotifyTargetMigrationFail: boolean; - readonly asNotifyTargetMigrationFail: { - readonly location: XcmVersionedMultiLocation; - readonly queryId: u64; - } & Struct; - readonly isInvalidQuerierVersion: boolean; - readonly asInvalidQuerierVersion: { - readonly origin: XcmV3MultiLocation; - readonly queryId: u64; - } & Struct; - readonly isInvalidQuerier: boolean; - readonly asInvalidQuerier: { - readonly origin: XcmV3MultiLocation; - readonly queryId: u64; - readonly expectedQuerier: XcmV3MultiLocation; - readonly maybeActualQuerier: Option; - } & Struct; - readonly isVersionNotifyStarted: boolean; - readonly asVersionNotifyStarted: { - readonly destination: XcmV3MultiLocation; - readonly cost: XcmV3MultiassetMultiAssets; - readonly messageId: U8aFixed; - } & Struct; - readonly isVersionNotifyRequested: boolean; - readonly asVersionNotifyRequested: { - readonly destination: XcmV3MultiLocation; - readonly cost: XcmV3MultiassetMultiAssets; - readonly messageId: U8aFixed; - } & Struct; - readonly isVersionNotifyUnrequested: boolean; - readonly asVersionNotifyUnrequested: { - readonly destination: XcmV3MultiLocation; - readonly cost: XcmV3MultiassetMultiAssets; - readonly messageId: U8aFixed; - } & Struct; - readonly isFeesPaid: boolean; - readonly asFeesPaid: { - readonly paying: XcmV3MultiLocation; - readonly fees: XcmV3MultiassetMultiAssets; - } & Struct; - readonly isAssetsClaimed: boolean; - readonly asAssetsClaimed: { - readonly hash_: H256; - readonly origin: XcmV3MultiLocation; - readonly assets: XcmVersionedMultiAssets; - } & Struct; - readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail' | 'InvalidQuerierVersion' | 'InvalidQuerier' | 'VersionNotifyStarted' | 'VersionNotifyRequested' | 'VersionNotifyUnrequested' | 'FeesPaid' | 'AssetsClaimed'; - } - - /** @name XcmV3TraitsOutcome (123) */ - interface XcmV3TraitsOutcome extends Enum { - readonly isComplete: boolean; - readonly asComplete: SpWeightsWeightV2Weight; - readonly isIncomplete: boolean; - readonly asIncomplete: ITuple<[SpWeightsWeightV2Weight, XcmV3TraitsError]>; - readonly isError: boolean; - readonly asError: XcmV3TraitsError; - readonly type: 'Complete' | 'Incomplete' | 'Error'; - } - - /** @name XcmV3MultiLocation (124) */ - interface XcmV3MultiLocation extends Struct { - readonly parents: u8; - readonly interior: XcmV3Junctions; - } - - /** @name XcmV3Junctions (125) */ - interface XcmV3Junctions extends Enum { - readonly isHere: boolean; - readonly isX1: boolean; - readonly asX1: XcmV3Junction; - readonly isX2: boolean; - readonly asX2: ITuple<[XcmV3Junction, XcmV3Junction]>; - readonly isX3: boolean; - readonly asX3: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction]>; - readonly isX4: boolean; - readonly asX4: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; - readonly isX5: boolean; - readonly asX5: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; - readonly isX6: boolean; - readonly asX6: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; - readonly isX7: boolean; - readonly asX7: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; - readonly isX8: boolean; - readonly asX8: ITuple<[XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction, XcmV3Junction]>; - readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; - } - - /** @name XcmV3Junction (126) */ - interface XcmV3Junction extends Enum { - readonly isParachain: boolean; - readonly asParachain: Compact; - readonly isAccountId32: boolean; - readonly asAccountId32: { - readonly network: Option; - readonly id: U8aFixed; - } & Struct; - readonly isAccountIndex64: boolean; - readonly asAccountIndex64: { - readonly network: Option; - readonly index: Compact; - } & Struct; - readonly isAccountKey20: boolean; - readonly asAccountKey20: { - readonly network: Option; - readonly key: U8aFixed; - } & Struct; - readonly isPalletInstance: boolean; - readonly asPalletInstance: u8; - readonly isGeneralIndex: boolean; - readonly asGeneralIndex: Compact; - readonly isGeneralKey: boolean; - readonly asGeneralKey: { - readonly length: u8; - readonly data: U8aFixed; - } & Struct; - readonly isOnlyChild: boolean; - readonly isPlurality: boolean; - readonly asPlurality: { - readonly id: XcmV3JunctionBodyId; - readonly part: XcmV3JunctionBodyPart; - } & Struct; - readonly isGlobalConsensus: boolean; - readonly asGlobalConsensus: XcmV3JunctionNetworkId; - readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality' | 'GlobalConsensus'; - } - - /** @name XcmV3JunctionNetworkId (129) */ - interface XcmV3JunctionNetworkId extends Enum { - readonly isByGenesis: boolean; - readonly asByGenesis: U8aFixed; - readonly isByFork: boolean; - readonly asByFork: { - readonly blockNumber: u64; - readonly blockHash: U8aFixed; - } & Struct; - readonly isPolkadot: boolean; - readonly isKusama: boolean; - readonly isWestend: boolean; - readonly isRococo: boolean; - readonly isWococo: boolean; - readonly isEthereum: boolean; - readonly asEthereum: { - readonly chainId: Compact; - } & Struct; - readonly isBitcoinCore: boolean; - readonly isBitcoinCash: boolean; - readonly type: 'ByGenesis' | 'ByFork' | 'Polkadot' | 'Kusama' | 'Westend' | 'Rococo' | 'Wococo' | 'Ethereum' | 'BitcoinCore' | 'BitcoinCash'; - } - - /** @name XcmV3JunctionBodyId (131) */ - interface XcmV3JunctionBodyId extends Enum { - readonly isUnit: boolean; - readonly isMoniker: boolean; - readonly asMoniker: U8aFixed; - readonly isIndex: boolean; - readonly asIndex: Compact; - readonly isExecutive: boolean; - readonly isTechnical: boolean; - readonly isLegislative: boolean; - readonly isJudicial: boolean; - readonly isDefense: boolean; - readonly isAdministration: boolean; - readonly isTreasury: boolean; - readonly type: 'Unit' | 'Moniker' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; - } - - /** @name XcmV3JunctionBodyPart (132) */ - interface XcmV3JunctionBodyPart extends Enum { - readonly isVoice: boolean; - readonly isMembers: boolean; - readonly asMembers: { - readonly count: Compact; - } & Struct; - readonly isFraction: boolean; - readonly asFraction: { - readonly nom: Compact; - readonly denom: Compact; - } & Struct; - readonly isAtLeastProportion: boolean; - readonly asAtLeastProportion: { - readonly nom: Compact; - readonly denom: Compact; - } & Struct; - readonly isMoreThanProportion: boolean; - readonly asMoreThanProportion: { - readonly nom: Compact; - readonly denom: Compact; - } & Struct; - readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; - } - - /** @name XcmV3Xcm (133) */ - interface XcmV3Xcm extends Vec {} - - /** @name XcmV3Instruction (135) */ - interface XcmV3Instruction extends Enum { - readonly isWithdrawAsset: boolean; - readonly asWithdrawAsset: XcmV3MultiassetMultiAssets; - readonly isReserveAssetDeposited: boolean; - readonly asReserveAssetDeposited: XcmV3MultiassetMultiAssets; - readonly isReceiveTeleportedAsset: boolean; - readonly asReceiveTeleportedAsset: XcmV3MultiassetMultiAssets; - readonly isQueryResponse: boolean; - readonly asQueryResponse: { - readonly queryId: Compact; - readonly response: XcmV3Response; - readonly maxWeight: SpWeightsWeightV2Weight; - readonly querier: Option; - } & Struct; - readonly isTransferAsset: boolean; - readonly asTransferAsset: { - readonly assets: XcmV3MultiassetMultiAssets; - readonly beneficiary: XcmV3MultiLocation; - } & Struct; - readonly isTransferReserveAsset: boolean; - readonly asTransferReserveAsset: { - readonly assets: XcmV3MultiassetMultiAssets; - readonly dest: XcmV3MultiLocation; - readonly xcm: XcmV3Xcm; - } & Struct; - readonly isTransact: boolean; - readonly asTransact: { - readonly originKind: XcmV2OriginKind; - readonly requireWeightAtMost: SpWeightsWeightV2Weight; - readonly call: XcmDoubleEncoded; - } & Struct; - readonly isHrmpNewChannelOpenRequest: boolean; - readonly asHrmpNewChannelOpenRequest: { - readonly sender: Compact; - readonly maxMessageSize: Compact; - readonly maxCapacity: Compact; - } & Struct; - readonly isHrmpChannelAccepted: boolean; - readonly asHrmpChannelAccepted: { - readonly recipient: Compact; - } & Struct; - readonly isHrmpChannelClosing: boolean; - readonly asHrmpChannelClosing: { - readonly initiator: Compact; - readonly sender: Compact; - readonly recipient: Compact; - } & Struct; - readonly isClearOrigin: boolean; - readonly isDescendOrigin: boolean; - readonly asDescendOrigin: XcmV3Junctions; - readonly isReportError: boolean; - readonly asReportError: XcmV3QueryResponseInfo; - readonly isDepositAsset: boolean; - readonly asDepositAsset: { - readonly assets: XcmV3MultiassetMultiAssetFilter; - readonly beneficiary: XcmV3MultiLocation; - } & Struct; - readonly isDepositReserveAsset: boolean; - readonly asDepositReserveAsset: { - readonly assets: XcmV3MultiassetMultiAssetFilter; - readonly dest: XcmV3MultiLocation; - readonly xcm: XcmV3Xcm; - } & Struct; - readonly isExchangeAsset: boolean; - readonly asExchangeAsset: { - readonly give: XcmV3MultiassetMultiAssetFilter; - readonly want: XcmV3MultiassetMultiAssets; - readonly maximal: bool; - } & Struct; - readonly isInitiateReserveWithdraw: boolean; - readonly asInitiateReserveWithdraw: { - readonly assets: XcmV3MultiassetMultiAssetFilter; - readonly reserve: XcmV3MultiLocation; - readonly xcm: XcmV3Xcm; - } & Struct; - readonly isInitiateTeleport: boolean; - readonly asInitiateTeleport: { - readonly assets: XcmV3MultiassetMultiAssetFilter; - readonly dest: XcmV3MultiLocation; - readonly xcm: XcmV3Xcm; - } & Struct; - readonly isReportHolding: boolean; - readonly asReportHolding: { - readonly responseInfo: XcmV3QueryResponseInfo; - readonly assets: XcmV3MultiassetMultiAssetFilter; - } & Struct; - readonly isBuyExecution: boolean; - readonly asBuyExecution: { - readonly fees: XcmV3MultiAsset; - readonly weightLimit: XcmV3WeightLimit; - } & Struct; - readonly isRefundSurplus: boolean; - readonly isSetErrorHandler: boolean; - readonly asSetErrorHandler: XcmV3Xcm; - readonly isSetAppendix: boolean; - readonly asSetAppendix: XcmV3Xcm; - readonly isClearError: boolean; - readonly isClaimAsset: boolean; - readonly asClaimAsset: { - readonly assets: XcmV3MultiassetMultiAssets; - readonly ticket: XcmV3MultiLocation; - } & Struct; - readonly isTrap: boolean; - readonly asTrap: Compact; - readonly isSubscribeVersion: boolean; - readonly asSubscribeVersion: { - readonly queryId: Compact; - readonly maxResponseWeight: SpWeightsWeightV2Weight; - } & Struct; - readonly isUnsubscribeVersion: boolean; - readonly isBurnAsset: boolean; - readonly asBurnAsset: XcmV3MultiassetMultiAssets; - readonly isExpectAsset: boolean; - readonly asExpectAsset: XcmV3MultiassetMultiAssets; - readonly isExpectOrigin: boolean; - readonly asExpectOrigin: Option; - readonly isExpectError: boolean; - readonly asExpectError: Option>; - readonly isExpectTransactStatus: boolean; - readonly asExpectTransactStatus: XcmV3MaybeErrorCode; - readonly isQueryPallet: boolean; - readonly asQueryPallet: { - readonly moduleName: Bytes; - readonly responseInfo: XcmV3QueryResponseInfo; - } & Struct; - readonly isExpectPallet: boolean; - readonly asExpectPallet: { - readonly index: Compact; - readonly name: Bytes; - readonly moduleName: Bytes; - readonly crateMajor: Compact; - readonly minCrateMinor: Compact; - } & Struct; - readonly isReportTransactStatus: boolean; - readonly asReportTransactStatus: XcmV3QueryResponseInfo; - readonly isClearTransactStatus: boolean; - readonly isUniversalOrigin: boolean; - readonly asUniversalOrigin: XcmV3Junction; - readonly isExportMessage: boolean; - readonly asExportMessage: { - readonly network: XcmV3JunctionNetworkId; - readonly destination: XcmV3Junctions; - readonly xcm: XcmV3Xcm; - } & Struct; - readonly isLockAsset: boolean; - readonly asLockAsset: { - readonly asset: XcmV3MultiAsset; - readonly unlocker: XcmV3MultiLocation; - } & Struct; - readonly isUnlockAsset: boolean; - readonly asUnlockAsset: { - readonly asset: XcmV3MultiAsset; - readonly target: XcmV3MultiLocation; - } & Struct; - readonly isNoteUnlockable: boolean; - readonly asNoteUnlockable: { - readonly asset: XcmV3MultiAsset; - readonly owner: XcmV3MultiLocation; - } & Struct; - readonly isRequestUnlock: boolean; - readonly asRequestUnlock: { - readonly asset: XcmV3MultiAsset; - readonly locker: XcmV3MultiLocation; - } & Struct; - readonly isSetFeesMode: boolean; - readonly asSetFeesMode: { - readonly jitWithdraw: bool; - } & Struct; - readonly isSetTopic: boolean; - readonly asSetTopic: U8aFixed; - readonly isClearTopic: boolean; - readonly isAliasOrigin: boolean; - readonly asAliasOrigin: XcmV3MultiLocation; - readonly isUnpaidExecution: boolean; - readonly asUnpaidExecution: { - readonly weightLimit: XcmV3WeightLimit; - readonly checkOrigin: Option; - } & Struct; - readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'ReportHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion' | 'BurnAsset' | 'ExpectAsset' | 'ExpectOrigin' | 'ExpectError' | 'ExpectTransactStatus' | 'QueryPallet' | 'ExpectPallet' | 'ReportTransactStatus' | 'ClearTransactStatus' | 'UniversalOrigin' | 'ExportMessage' | 'LockAsset' | 'UnlockAsset' | 'NoteUnlockable' | 'RequestUnlock' | 'SetFeesMode' | 'SetTopic' | 'ClearTopic' | 'AliasOrigin' | 'UnpaidExecution'; - } - - /** @name XcmV3MultiassetMultiAssets (136) */ - interface XcmV3MultiassetMultiAssets extends Vec {} - - /** @name XcmV3MultiAsset (138) */ - interface XcmV3MultiAsset extends Struct { - readonly id: XcmV3MultiassetAssetId; - readonly fun: XcmV3MultiassetFungibility; - } - - /** @name XcmV3MultiassetAssetId (139) */ - interface XcmV3MultiassetAssetId extends Enum { - readonly isConcrete: boolean; - readonly asConcrete: XcmV3MultiLocation; - readonly isAbstract: boolean; - readonly asAbstract: U8aFixed; - readonly type: 'Concrete' | 'Abstract'; - } - - /** @name XcmV3MultiassetFungibility (140) */ - interface XcmV3MultiassetFungibility extends Enum { - readonly isFungible: boolean; - readonly asFungible: Compact; - readonly isNonFungible: boolean; - readonly asNonFungible: XcmV3MultiassetAssetInstance; - readonly type: 'Fungible' | 'NonFungible'; - } - - /** @name XcmV3MultiassetAssetInstance (141) */ - interface XcmV3MultiassetAssetInstance extends Enum { - readonly isUndefined: boolean; - readonly isIndex: boolean; - readonly asIndex: Compact; - readonly isArray4: boolean; - readonly asArray4: U8aFixed; - readonly isArray8: boolean; - readonly asArray8: U8aFixed; - readonly isArray16: boolean; - readonly asArray16: U8aFixed; - readonly isArray32: boolean; - readonly asArray32: U8aFixed; - readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32'; - } - - /** @name XcmV3Response (143) */ - interface XcmV3Response extends Enum { - readonly isNull: boolean; - readonly isAssets: boolean; - readonly asAssets: XcmV3MultiassetMultiAssets; - readonly isExecutionResult: boolean; - readonly asExecutionResult: Option>; - readonly isVersion: boolean; - readonly asVersion: u32; - readonly isPalletsInfo: boolean; - readonly asPalletsInfo: Vec; - readonly isDispatchResult: boolean; - readonly asDispatchResult: XcmV3MaybeErrorCode; - readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version' | 'PalletsInfo' | 'DispatchResult'; - } - - /** @name XcmV3PalletInfo (147) */ - interface XcmV3PalletInfo extends Struct { - readonly index: Compact; - readonly name: Bytes; - readonly moduleName: Bytes; - readonly major: Compact; - readonly minor: Compact; - readonly patch: Compact; - } - - /** @name XcmV3MaybeErrorCode (150) */ - interface XcmV3MaybeErrorCode extends Enum { - readonly isSuccess: boolean; - readonly isError: boolean; - readonly asError: Bytes; - readonly isTruncatedError: boolean; - readonly asTruncatedError: Bytes; - readonly type: 'Success' | 'Error' | 'TruncatedError'; - } - - /** @name XcmV2OriginKind (153) */ - interface XcmV2OriginKind extends Enum { - readonly isNative: boolean; - readonly isSovereignAccount: boolean; - readonly isSuperuser: boolean; - readonly isXcm: boolean; - readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm'; - } - - /** @name XcmDoubleEncoded (154) */ - interface XcmDoubleEncoded extends Struct { - readonly encoded: Bytes; - } - - /** @name XcmV3QueryResponseInfo (155) */ - interface XcmV3QueryResponseInfo extends Struct { - readonly destination: XcmV3MultiLocation; - readonly queryId: Compact; - readonly maxWeight: SpWeightsWeightV2Weight; - } - - /** @name XcmV3MultiassetMultiAssetFilter (156) */ - interface XcmV3MultiassetMultiAssetFilter extends Enum { - readonly isDefinite: boolean; - readonly asDefinite: XcmV3MultiassetMultiAssets; - readonly isWild: boolean; - readonly asWild: XcmV3MultiassetWildMultiAsset; - readonly type: 'Definite' | 'Wild'; - } - - /** @name XcmV3MultiassetWildMultiAsset (157) */ - interface XcmV3MultiassetWildMultiAsset extends Enum { - readonly isAll: boolean; - readonly isAllOf: boolean; - readonly asAllOf: { - readonly id: XcmV3MultiassetAssetId; - readonly fun: XcmV3MultiassetWildFungibility; - } & Struct; - readonly isAllCounted: boolean; - readonly asAllCounted: Compact; - readonly isAllOfCounted: boolean; - readonly asAllOfCounted: { - readonly id: XcmV3MultiassetAssetId; - readonly fun: XcmV3MultiassetWildFungibility; - readonly count: Compact; - } & Struct; - readonly type: 'All' | 'AllOf' | 'AllCounted' | 'AllOfCounted'; - } - - /** @name XcmV3MultiassetWildFungibility (158) */ - interface XcmV3MultiassetWildFungibility extends Enum { - readonly isFungible: boolean; - readonly isNonFungible: boolean; - readonly type: 'Fungible' | 'NonFungible'; - } - - /** @name XcmV3WeightLimit (159) */ - interface XcmV3WeightLimit extends Enum { - readonly isUnlimited: boolean; - readonly isLimited: boolean; - readonly asLimited: SpWeightsWeightV2Weight; - readonly type: 'Unlimited' | 'Limited'; - } - - /** @name XcmVersionedMultiAssets (160) */ - interface XcmVersionedMultiAssets extends Enum { - readonly isV2: boolean; - readonly asV2: XcmV2MultiassetMultiAssets; - readonly isV3: boolean; - readonly asV3: XcmV3MultiassetMultiAssets; - readonly type: 'V2' | 'V3'; - } - - /** @name XcmV2MultiassetMultiAssets (161) */ - interface XcmV2MultiassetMultiAssets extends Vec {} - - /** @name XcmV2MultiAsset (163) */ - interface XcmV2MultiAsset extends Struct { - readonly id: XcmV2MultiassetAssetId; - readonly fun: XcmV2MultiassetFungibility; - } - - /** @name XcmV2MultiassetAssetId (164) */ - interface XcmV2MultiassetAssetId extends Enum { - readonly isConcrete: boolean; - readonly asConcrete: XcmV2MultiLocation; - readonly isAbstract: boolean; - readonly asAbstract: Bytes; - readonly type: 'Concrete' | 'Abstract'; - } - - /** @name XcmV2MultiLocation (165) */ - interface XcmV2MultiLocation extends Struct { - readonly parents: u8; - readonly interior: XcmV2MultilocationJunctions; - } - - /** @name XcmV2MultilocationJunctions (166) */ - interface XcmV2MultilocationJunctions extends Enum { - readonly isHere: boolean; - readonly isX1: boolean; - readonly asX1: XcmV2Junction; - readonly isX2: boolean; - readonly asX2: ITuple<[XcmV2Junction, XcmV2Junction]>; - readonly isX3: boolean; - readonly asX3: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction]>; - readonly isX4: boolean; - readonly asX4: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; - readonly isX5: boolean; - readonly asX5: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; - readonly isX6: boolean; - readonly asX6: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; - readonly isX7: boolean; - readonly asX7: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; - readonly isX8: boolean; - readonly asX8: ITuple<[XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction, XcmV2Junction]>; - readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8'; - } - - /** @name XcmV2Junction (167) */ - interface XcmV2Junction extends Enum { - readonly isParachain: boolean; - readonly asParachain: Compact; - readonly isAccountId32: boolean; - readonly asAccountId32: { - readonly network: XcmV2NetworkId; - readonly id: U8aFixed; - } & Struct; - readonly isAccountIndex64: boolean; - readonly asAccountIndex64: { - readonly network: XcmV2NetworkId; - readonly index: Compact; - } & Struct; - readonly isAccountKey20: boolean; - readonly asAccountKey20: { - readonly network: XcmV2NetworkId; - readonly key: U8aFixed; - } & Struct; - readonly isPalletInstance: boolean; - readonly asPalletInstance: u8; - readonly isGeneralIndex: boolean; - readonly asGeneralIndex: Compact; - readonly isGeneralKey: boolean; - readonly asGeneralKey: Bytes; - readonly isOnlyChild: boolean; - readonly isPlurality: boolean; - readonly asPlurality: { - readonly id: XcmV2BodyId; - readonly part: XcmV2BodyPart; - } & Struct; - readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality'; - } - - /** @name XcmV2NetworkId (168) */ - interface XcmV2NetworkId extends Enum { - readonly isAny: boolean; - readonly isNamed: boolean; - readonly asNamed: Bytes; - readonly isPolkadot: boolean; - readonly isKusama: boolean; - readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama'; - } - - /** @name XcmV2BodyId (170) */ - interface XcmV2BodyId extends Enum { - readonly isUnit: boolean; - readonly isNamed: boolean; - readonly asNamed: Bytes; - readonly isIndex: boolean; - readonly asIndex: Compact; - readonly isExecutive: boolean; - readonly isTechnical: boolean; - readonly isLegislative: boolean; - readonly isJudicial: boolean; - readonly isDefense: boolean; - readonly isAdministration: boolean; - readonly isTreasury: boolean; - readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial' | 'Defense' | 'Administration' | 'Treasury'; - } - - /** @name XcmV2BodyPart (171) */ - interface XcmV2BodyPart extends Enum { - readonly isVoice: boolean; - readonly isMembers: boolean; - readonly asMembers: { - readonly count: Compact; - } & Struct; - readonly isFraction: boolean; - readonly asFraction: { - readonly nom: Compact; - readonly denom: Compact; - } & Struct; - readonly isAtLeastProportion: boolean; - readonly asAtLeastProportion: { - readonly nom: Compact; - readonly denom: Compact; - } & Struct; - readonly isMoreThanProportion: boolean; - readonly asMoreThanProportion: { - readonly nom: Compact; - readonly denom: Compact; - } & Struct; - readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion'; - } - - /** @name XcmV2MultiassetFungibility (172) */ - interface XcmV2MultiassetFungibility extends Enum { - readonly isFungible: boolean; - readonly asFungible: Compact; - readonly isNonFungible: boolean; - readonly asNonFungible: XcmV2MultiassetAssetInstance; - readonly type: 'Fungible' | 'NonFungible'; - } - - /** @name XcmV2MultiassetAssetInstance (173) */ - interface XcmV2MultiassetAssetInstance extends Enum { - readonly isUndefined: boolean; - readonly isIndex: boolean; - readonly asIndex: Compact; - readonly isArray4: boolean; - readonly asArray4: U8aFixed; - readonly isArray8: boolean; - readonly asArray8: U8aFixed; - readonly isArray16: boolean; - readonly asArray16: U8aFixed; - readonly isArray32: boolean; - readonly asArray32: U8aFixed; - readonly isBlob: boolean; - readonly asBlob: Bytes; - readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob'; - } - - /** @name XcmVersionedMultiLocation (174) */ - interface XcmVersionedMultiLocation extends Enum { - readonly isV2: boolean; - readonly asV2: XcmV2MultiLocation; - readonly isV3: boolean; - readonly asV3: XcmV3MultiLocation; - readonly type: 'V2' | 'V3'; - } - - /** @name CumulusPalletXcmEvent (175) */ - interface CumulusPalletXcmEvent extends Enum { - readonly isInvalidFormat: boolean; - readonly asInvalidFormat: U8aFixed; - readonly isUnsupportedVersion: boolean; - readonly asUnsupportedVersion: U8aFixed; - readonly isExecutedDownward: boolean; - readonly asExecutedDownward: ITuple<[U8aFixed, XcmV3TraitsOutcome]>; - readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward'; - } - - /** @name CumulusPalletDmpQueueEvent (176) */ - interface CumulusPalletDmpQueueEvent extends Enum { - readonly isInvalidFormat: boolean; - readonly asInvalidFormat: { - readonly messageHash: U8aFixed; - } & Struct; - readonly isUnsupportedVersion: boolean; - readonly asUnsupportedVersion: { - readonly messageHash: U8aFixed; - } & Struct; - readonly isExecutedDownward: boolean; - readonly asExecutedDownward: { - readonly messageHash: U8aFixed; - readonly messageId: U8aFixed; - readonly outcome: XcmV3TraitsOutcome; - } & Struct; - readonly isWeightExhausted: boolean; - readonly asWeightExhausted: { - readonly messageHash: U8aFixed; - readonly messageId: U8aFixed; - readonly remainingWeight: SpWeightsWeightV2Weight; - readonly requiredWeight: SpWeightsWeightV2Weight; - } & Struct; - readonly isOverweightEnqueued: boolean; - readonly asOverweightEnqueued: { - readonly messageHash: U8aFixed; - readonly messageId: U8aFixed; - readonly overweightIndex: u64; - readonly requiredWeight: SpWeightsWeightV2Weight; - } & Struct; - readonly isOverweightServiced: boolean; - readonly asOverweightServiced: { - readonly overweightIndex: u64; - readonly weightUsed: SpWeightsWeightV2Weight; - } & Struct; - readonly isMaxMessagesExhausted: boolean; - readonly asMaxMessagesExhausted: { - readonly messageHash: U8aFixed; - } & Struct; - readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced' | 'MaxMessagesExhausted'; - } - - /** @name FrameSystemPhase (177) */ - interface FrameSystemPhase extends Enum { - readonly isApplyExtrinsic: boolean; - readonly asApplyExtrinsic: u32; - readonly isFinalization: boolean; - readonly isInitialization: boolean; - readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; - } - - /** @name FrameSystemLastRuntimeUpgradeInfo (179) */ - interface FrameSystemLastRuntimeUpgradeInfo extends Struct { - readonly specVersion: Compact; - readonly specName: Text; - } - - /** @name FrameSystemCall (181) */ - interface FrameSystemCall extends Enum { - readonly isRemark: boolean; - readonly asRemark: { - readonly remark: Bytes; - } & Struct; - readonly isSetHeapPages: boolean; - readonly asSetHeapPages: { - readonly pages: u64; - } & Struct; - readonly isSetCode: boolean; - readonly asSetCode: { - readonly code: Bytes; - } & Struct; - readonly isSetCodeWithoutChecks: boolean; - readonly asSetCodeWithoutChecks: { - readonly code: Bytes; - } & Struct; - readonly isSetStorage: boolean; - readonly asSetStorage: { - readonly items: Vec>; - } & Struct; - readonly isKillStorage: boolean; - readonly asKillStorage: { - readonly keys_: Vec; - } & Struct; - readonly isKillPrefix: boolean; - readonly asKillPrefix: { - readonly prefix: Bytes; - readonly subkeys: u32; - } & Struct; - readonly isRemarkWithEvent: boolean; - readonly asRemarkWithEvent: { - readonly remark: Bytes; - } & Struct; - readonly type: 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent'; - } - - /** @name FrameSystemLimitsBlockWeights (185) */ - interface FrameSystemLimitsBlockWeights extends Struct { - readonly baseBlock: SpWeightsWeightV2Weight; - readonly maxBlock: SpWeightsWeightV2Weight; - readonly perClass: FrameSupportDispatchPerDispatchClassWeightsPerClass; - } - - /** @name FrameSupportDispatchPerDispatchClassWeightsPerClass (186) */ - interface FrameSupportDispatchPerDispatchClassWeightsPerClass extends Struct { - readonly normal: FrameSystemLimitsWeightsPerClass; - readonly operational: FrameSystemLimitsWeightsPerClass; - readonly mandatory: FrameSystemLimitsWeightsPerClass; - } - - /** @name FrameSystemLimitsWeightsPerClass (187) */ - interface FrameSystemLimitsWeightsPerClass extends Struct { - readonly baseExtrinsic: SpWeightsWeightV2Weight; - readonly maxExtrinsic: Option; - readonly maxTotal: Option; - readonly reserved: Option; - } - - /** @name FrameSystemLimitsBlockLength (189) */ - interface FrameSystemLimitsBlockLength extends Struct { - readonly max: FrameSupportDispatchPerDispatchClassU32; - } - - /** @name FrameSupportDispatchPerDispatchClassU32 (190) */ - interface FrameSupportDispatchPerDispatchClassU32 extends Struct { - readonly normal: u32; - readonly operational: u32; - readonly mandatory: u32; - } - - /** @name SpWeightsRuntimeDbWeight (191) */ - interface SpWeightsRuntimeDbWeight extends Struct { - readonly read: u64; - readonly write: u64; - } - - /** @name SpVersionRuntimeVersion (192) */ - interface SpVersionRuntimeVersion extends Struct { - readonly specName: Text; - readonly implName: Text; - readonly authoringVersion: u32; - readonly specVersion: u32; - readonly implVersion: u32; - readonly apis: Vec>; - readonly transactionVersion: u32; - readonly stateVersion: u8; - } - - /** @name FrameSystemError (196) */ - interface FrameSystemError extends Enum { - readonly isInvalidSpecName: boolean; - readonly isSpecVersionNeedsToIncrease: boolean; - readonly isFailedToExtractRuntimeVersion: boolean; - readonly isNonDefaultComposite: boolean; - readonly isNonZeroRefCount: boolean; - readonly isCallFiltered: boolean; - readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered'; - } - - /** @name PalletTimestampCall (197) */ - interface PalletTimestampCall extends Enum { - readonly isSet: boolean; - readonly asSet: { - readonly now: Compact; - } & Struct; - readonly type: 'Set'; - } - - /** @name PalletIndicesCall (199) */ - interface PalletIndicesCall extends Enum { - readonly isClaim: boolean; - readonly asClaim: { - readonly index: u64; - } & Struct; - readonly isTransfer: boolean; - readonly asTransfer: { - readonly new_: MultiAddress; - readonly index: u64; - } & Struct; - readonly isFree: boolean; - readonly asFree: { - readonly index: u64; - } & Struct; - readonly isForceTransfer: boolean; - readonly asForceTransfer: { - readonly new_: MultiAddress; - readonly index: u64; - readonly freeze: bool; - } & Struct; - readonly isFreeze: boolean; - readonly asFreeze: { - readonly index: u64; - } & Struct; - readonly type: 'Claim' | 'Transfer' | 'Free' | 'ForceTransfer' | 'Freeze'; - } - - /** @name PalletIndicesError (202) */ - interface PalletIndicesError extends Enum { - readonly isNotAssigned: boolean; - readonly isNotOwner: boolean; - readonly isInUse: boolean; - readonly isNotTransfer: boolean; - readonly isPermanent: boolean; - readonly type: 'NotAssigned' | 'NotOwner' | 'InUse' | 'NotTransfer' | 'Permanent'; - } - - /** @name PalletBalancesBalanceLock (204) */ - interface PalletBalancesBalanceLock extends Struct { - readonly id: U8aFixed; - readonly amount: u128; - readonly reasons: PalletBalancesReasons; - } - - /** @name PalletBalancesReasons (205) */ - interface PalletBalancesReasons extends Enum { - readonly isFee: boolean; - readonly isMisc: boolean; - readonly isAll: boolean; - readonly type: 'Fee' | 'Misc' | 'All'; - } - - /** @name PalletBalancesReserveData (208) */ - interface PalletBalancesReserveData extends Struct { - readonly id: U8aFixed; - readonly amount: u128; - } - - /** @name PalletBalancesIdAmountRuntimeHoldReason (211) */ - interface PalletBalancesIdAmountRuntimeHoldReason extends Struct { - readonly id: SpiritnetRuntimeRuntimeHoldReason; - readonly amount: u128; - } - - /** @name SpiritnetRuntimeRuntimeHoldReason (212) */ - interface SpiritnetRuntimeRuntimeHoldReason extends Enum { - readonly isAttestation: boolean; - readonly asAttestation: AttestationHoldReason; - readonly isDelegation: boolean; - readonly asDelegation: DelegationHoldReason; - readonly isDid: boolean; - readonly asDid: DidHoldReason; - readonly isDidLookup: boolean; - readonly asDidLookup: PalletDidLookupHoldReason; - readonly isWeb3Names: boolean; - readonly asWeb3Names: PalletWeb3NamesHoldReason; - readonly isPublicCredentials: boolean; - readonly asPublicCredentials: PublicCredentialsHoldReason; - readonly type: 'Attestation' | 'Delegation' | 'Did' | 'DidLookup' | 'Web3Names' | 'PublicCredentials'; - } - - /** @name AttestationHoldReason (213) */ - interface AttestationHoldReason extends Enum { - readonly isDeposit: boolean; - readonly type: 'Deposit'; - } - - /** @name DelegationHoldReason (214) */ - interface DelegationHoldReason extends Enum { - readonly isDeposit: boolean; - readonly type: 'Deposit'; - } - - /** @name DidHoldReason (215) */ - interface DidHoldReason extends Enum { - readonly isDeposit: boolean; - readonly type: 'Deposit'; - } - - /** @name PalletDidLookupHoldReason (216) */ - interface PalletDidLookupHoldReason extends Enum { - readonly isDeposit: boolean; - readonly type: 'Deposit'; - } - - /** @name PalletWeb3NamesHoldReason (217) */ - interface PalletWeb3NamesHoldReason extends Enum { - readonly isDeposit: boolean; - readonly type: 'Deposit'; - } - - /** @name PublicCredentialsHoldReason (218) */ - interface PublicCredentialsHoldReason extends Enum { - readonly isDeposit: boolean; - readonly type: 'Deposit'; - } - - /** @name PalletBalancesIdAmountRuntimeFreezeReason (221) */ - interface PalletBalancesIdAmountRuntimeFreezeReason extends Struct { - readonly id: SpiritnetRuntimeRuntimeFreezeReason; - readonly amount: u128; - } - - /** @name SpiritnetRuntimeRuntimeFreezeReason (222) */ - interface SpiritnetRuntimeRuntimeFreezeReason extends Enum { - readonly isParachainStaking: boolean; - readonly asParachainStaking: ParachainStakingFreezeReason; - readonly type: 'ParachainStaking'; - } - - /** @name ParachainStakingFreezeReason (223) */ - interface ParachainStakingFreezeReason extends Enum { - readonly isStaking: boolean; - readonly type: 'Staking'; - } - - /** @name PalletBalancesCall (225) */ - interface PalletBalancesCall extends Enum { - readonly isTransferAllowDeath: boolean; - readonly asTransferAllowDeath: { - readonly dest: MultiAddress; - readonly value: Compact; - } & Struct; - readonly isSetBalanceDeprecated: boolean; - readonly asSetBalanceDeprecated: { - readonly who: MultiAddress; - readonly newFree: Compact; - readonly oldReserved: Compact; - } & Struct; - readonly isForceTransfer: boolean; - readonly asForceTransfer: { - readonly source: MultiAddress; - readonly dest: MultiAddress; - readonly value: Compact; - } & Struct; - readonly isTransferKeepAlive: boolean; - readonly asTransferKeepAlive: { - readonly dest: MultiAddress; - readonly value: Compact; - } & Struct; - readonly isTransferAll: boolean; - readonly asTransferAll: { - readonly dest: MultiAddress; - readonly keepAlive: bool; - } & Struct; - readonly isForceUnreserve: boolean; - readonly asForceUnreserve: { - readonly who: MultiAddress; - readonly amount: u128; - } & Struct; - readonly isUpgradeAccounts: boolean; - readonly asUpgradeAccounts: { - readonly who: Vec; - } & Struct; - readonly isTransfer: boolean; - readonly asTransfer: { - readonly dest: MultiAddress; - readonly value: Compact; - } & Struct; - readonly isForceSetBalance: boolean; - readonly asForceSetBalance: { - readonly who: MultiAddress; - readonly newFree: Compact; - } & Struct; - readonly type: 'TransferAllowDeath' | 'SetBalanceDeprecated' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve' | 'UpgradeAccounts' | 'Transfer' | 'ForceSetBalance'; - } - - /** @name PalletBalancesError (226) */ - interface PalletBalancesError extends Enum { - readonly isVestingBalance: boolean; - readonly isLiquidityRestrictions: boolean; - readonly isInsufficientBalance: boolean; - readonly isExistentialDeposit: boolean; - readonly isExpendability: boolean; - readonly isExistingVestingSchedule: boolean; - readonly isDeadAccount: boolean; - readonly isTooManyReserves: boolean; - readonly isTooManyHolds: boolean; - readonly isTooManyFreezes: boolean; - readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'Expendability' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves' | 'TooManyHolds' | 'TooManyFreezes'; - } - - /** @name PalletTransactionPaymentReleases (228) */ - interface PalletTransactionPaymentReleases extends Enum { - readonly isV1Ancient: boolean; - readonly isV2: boolean; - readonly type: 'V1Ancient' | 'V2'; - } - - /** @name SpConsensusAuraSr25519AppSr25519Public (230) */ - interface SpConsensusAuraSr25519AppSr25519Public extends SpCoreSr25519Public {} - - /** @name SpCoreSr25519Public (231) */ - interface SpCoreSr25519Public extends U8aFixed {} - - /** @name SpiritnetRuntimeSessionKeys (236) */ - interface SpiritnetRuntimeSessionKeys extends Struct { - readonly aura: SpConsensusAuraSr25519AppSr25519Public; - } - - /** @name SpCoreCryptoKeyTypeId (239) */ - interface SpCoreCryptoKeyTypeId extends U8aFixed {} - - /** @name PalletSessionCall (240) */ - interface PalletSessionCall extends Enum { - readonly isSetKeys: boolean; - readonly asSetKeys: { - readonly keys_: SpiritnetRuntimeSessionKeys; - readonly proof: Bytes; - } & Struct; - readonly isPurgeKeys: boolean; - readonly type: 'SetKeys' | 'PurgeKeys'; - } - - /** @name PalletSessionError (241) */ - interface PalletSessionError extends Enum { - readonly isInvalidProof: boolean; - readonly isNoAssociatedValidatorId: boolean; - readonly isDuplicatedKey: boolean; - readonly isNoKeys: boolean; - readonly isNoAccount: boolean; - readonly type: 'InvalidProof' | 'NoAssociatedValidatorId' | 'DuplicatedKey' | 'NoKeys' | 'NoAccount'; - } - - /** @name ParachainStakingRoundInfo (242) */ - interface ParachainStakingRoundInfo extends Struct { - readonly current: u32; - readonly first: u64; - readonly length: u64; - } - - /** @name ParachainStakingDelegationCounter (243) */ - interface ParachainStakingDelegationCounter extends Struct { - readonly round: u32; - readonly counter: u32; - } - - /** @name ParachainStakingStake (244) */ - interface ParachainStakingStake extends Struct { - readonly owner: AccountId32; - readonly amount: u128; - } - - /** @name ParachainStakingCandidate (245) */ - interface ParachainStakingCandidate extends Struct { - readonly id: AccountId32; - readonly stake: u128; - readonly delegators: ParachainStakingSetOrderedSet; - readonly total: u128; - readonly status: ParachainStakingCandidateStatus; - } - - /** @name ParachainStakingSetOrderedSet (246) */ - interface ParachainStakingSetOrderedSet extends Vec {} - - /** @name ParachainStakingCandidateStatus (249) */ - interface ParachainStakingCandidateStatus extends Enum { - readonly isActive: boolean; - readonly isLeaving: boolean; - readonly asLeaving: u32; - readonly type: 'Active' | 'Leaving'; - } - - /** @name ParachainStakingTotalStake (250) */ - interface ParachainStakingTotalStake extends Struct { - readonly collators: u128; - readonly delegators: u128; - } - - /** @name ParachainStakingInflationInflationInfo (253) */ - interface ParachainStakingInflationInflationInfo extends Struct { - readonly collator: ParachainStakingInflationStakingInfo; - readonly delegator: ParachainStakingInflationStakingInfo; - } - - /** @name ParachainStakingInflationStakingInfo (254) */ - interface ParachainStakingInflationStakingInfo extends Struct { - readonly maxRate: Perquintill; - readonly rewardRate: ParachainStakingInflationRewardRate; - } - - /** @name ParachainStakingInflationRewardRate (255) */ - interface ParachainStakingInflationRewardRate extends Struct { - readonly annual: Perquintill; - readonly perBlock: Perquintill; - } - - /** @name ParachainStakingCall (260) */ - interface ParachainStakingCall extends Enum { - readonly isForceNewRound: boolean; - readonly isSetInflation: boolean; - readonly asSetInflation: { - readonly collatorMaxRatePercentage: Perquintill; - readonly collatorAnnualRewardRatePercentage: Perquintill; - readonly delegatorMaxRatePercentage: Perquintill; - readonly delegatorAnnualRewardRatePercentage: Perquintill; - } & Struct; - readonly isSetMaxSelectedCandidates: boolean; - readonly asSetMaxSelectedCandidates: { - readonly new_: u32; - } & Struct; - readonly isSetBlocksPerRound: boolean; - readonly asSetBlocksPerRound: { - readonly new_: u64; - } & Struct; - readonly isSetMaxCandidateStake: boolean; - readonly asSetMaxCandidateStake: { - readonly new_: u128; - } & Struct; - readonly isForceRemoveCandidate: boolean; - readonly asForceRemoveCandidate: { - readonly collator: MultiAddress; - } & Struct; - readonly isJoinCandidates: boolean; - readonly asJoinCandidates: { - readonly stake: u128; - } & Struct; - readonly isInitLeaveCandidates: boolean; - readonly isExecuteLeaveCandidates: boolean; - readonly asExecuteLeaveCandidates: { - readonly collator: MultiAddress; - } & Struct; - readonly isCancelLeaveCandidates: boolean; - readonly isCandidateStakeMore: boolean; - readonly asCandidateStakeMore: { - readonly more: u128; - } & Struct; - readonly isCandidateStakeLess: boolean; - readonly asCandidateStakeLess: { - readonly less: u128; - } & Struct; - readonly isJoinDelegators: boolean; - readonly asJoinDelegators: { - readonly collator: MultiAddress; - readonly amount: u128; - } & Struct; - readonly isLeaveDelegators: boolean; - readonly isDelegatorStakeMore: boolean; - readonly asDelegatorStakeMore: { - readonly more: u128; - } & Struct; - readonly isDelegatorStakeLess: boolean; - readonly asDelegatorStakeLess: { - readonly less: u128; - } & Struct; - readonly isUnlockUnstaked: boolean; - readonly asUnlockUnstaked: { - readonly target: MultiAddress; - } & Struct; - readonly isClaimRewards: boolean; - readonly isIncrementCollatorRewards: boolean; - readonly isIncrementDelegatorRewards: boolean; - readonly isExecuteScheduledRewardChange: boolean; - readonly type: 'ForceNewRound' | 'SetInflation' | 'SetMaxSelectedCandidates' | 'SetBlocksPerRound' | 'SetMaxCandidateStake' | 'ForceRemoveCandidate' | 'JoinCandidates' | 'InitLeaveCandidates' | 'ExecuteLeaveCandidates' | 'CancelLeaveCandidates' | 'CandidateStakeMore' | 'CandidateStakeLess' | 'JoinDelegators' | 'LeaveDelegators' | 'DelegatorStakeMore' | 'DelegatorStakeLess' | 'UnlockUnstaked' | 'ClaimRewards' | 'IncrementCollatorRewards' | 'IncrementDelegatorRewards' | 'ExecuteScheduledRewardChange'; - } - - /** @name ParachainStakingError (261) */ - interface ParachainStakingError extends Enum { - readonly isDelegatorNotFound: boolean; - readonly isCandidateNotFound: boolean; - readonly isDelegatorExists: boolean; - readonly isCandidateExists: boolean; - readonly isValStakeZero: boolean; - readonly isValStakeBelowMin: boolean; - readonly isValStakeAboveMax: boolean; - readonly isDelegationBelowMin: boolean; - readonly isAlreadyLeaving: boolean; - readonly isNotLeaving: boolean; - readonly isCannotLeaveYet: boolean; - readonly isCannotJoinBeforeUnlocking: boolean; - readonly isAlreadyDelegating: boolean; - readonly isNotYetDelegating: boolean; - readonly isDelegationsPerRoundExceeded: boolean; - readonly isTooManyDelegators: boolean; - readonly isTooFewCollatorCandidates: boolean; - readonly isCannotStakeIfLeaving: boolean; - readonly isCannotDelegateIfLeaving: boolean; - readonly isMaxCollatorsPerDelegatorExceeded: boolean; - readonly isAlreadyDelegatedCollator: boolean; - readonly isDelegationNotFound: boolean; - readonly isUnderflow: boolean; - readonly isCannotSetAboveMax: boolean; - readonly isCannotSetBelowMin: boolean; - readonly isInvalidSchedule: boolean; - readonly isNoMoreUnstaking: boolean; - readonly isTooEarly: boolean; - readonly isStakeNotFound: boolean; - readonly isUnstakingIsEmpty: boolean; - readonly isRewardsNotFound: boolean; - readonly type: 'DelegatorNotFound' | 'CandidateNotFound' | 'DelegatorExists' | 'CandidateExists' | 'ValStakeZero' | 'ValStakeBelowMin' | 'ValStakeAboveMax' | 'DelegationBelowMin' | 'AlreadyLeaving' | 'NotLeaving' | 'CannotLeaveYet' | 'CannotJoinBeforeUnlocking' | 'AlreadyDelegating' | 'NotYetDelegating' | 'DelegationsPerRoundExceeded' | 'TooManyDelegators' | 'TooFewCollatorCandidates' | 'CannotStakeIfLeaving' | 'CannotDelegateIfLeaving' | 'MaxCollatorsPerDelegatorExceeded' | 'AlreadyDelegatedCollator' | 'DelegationNotFound' | 'Underflow' | 'CannotSetAboveMax' | 'CannotSetBelowMin' | 'InvalidSchedule' | 'NoMoreUnstaking' | 'TooEarly' | 'StakeNotFound' | 'UnstakingIsEmpty' | 'RewardsNotFound'; - } - - /** @name FrameSupportPreimagesBounded (264) */ - interface FrameSupportPreimagesBounded extends Enum { - readonly isLegacy: boolean; - readonly asLegacy: { - readonly hash_: H256; - } & Struct; - readonly isInline: boolean; - readonly asInline: Bytes; - readonly isLookup: boolean; - readonly asLookup: { - readonly hash_: H256; - readonly len: u32; - } & Struct; - readonly type: 'Legacy' | 'Inline' | 'Lookup'; - } - - /** @name PalletDemocracyCall (266) */ - interface PalletDemocracyCall extends Enum { - readonly isPropose: boolean; - readonly asPropose: { - readonly proposal: FrameSupportPreimagesBounded; - readonly value: Compact; - } & Struct; - readonly isSecond: boolean; - readonly asSecond: { - readonly proposal: Compact; - } & Struct; - readonly isVote: boolean; - readonly asVote: { - readonly refIndex: Compact; - readonly vote: PalletDemocracyVoteAccountVote; - } & Struct; - readonly isEmergencyCancel: boolean; - readonly asEmergencyCancel: { - readonly refIndex: u32; - } & Struct; - readonly isExternalPropose: boolean; - readonly asExternalPropose: { - readonly proposal: FrameSupportPreimagesBounded; - } & Struct; - readonly isExternalProposeMajority: boolean; - readonly asExternalProposeMajority: { - readonly proposal: FrameSupportPreimagesBounded; - } & Struct; - readonly isExternalProposeDefault: boolean; - readonly asExternalProposeDefault: { - readonly proposal: FrameSupportPreimagesBounded; - } & Struct; - readonly isFastTrack: boolean; - readonly asFastTrack: { - readonly proposalHash: H256; - readonly votingPeriod: u64; - readonly delay: u64; - } & Struct; - readonly isVetoExternal: boolean; - readonly asVetoExternal: { - readonly proposalHash: H256; - } & Struct; - readonly isCancelReferendum: boolean; - readonly asCancelReferendum: { - readonly refIndex: Compact; - } & Struct; - readonly isDelegate: boolean; - readonly asDelegate: { - readonly to: MultiAddress; - readonly conviction: PalletDemocracyConviction; - readonly balance: u128; - } & Struct; - readonly isUndelegate: boolean; - readonly isClearPublicProposals: boolean; - readonly isUnlock: boolean; - readonly asUnlock: { - readonly target: MultiAddress; - } & Struct; - readonly isRemoveVote: boolean; - readonly asRemoveVote: { - readonly index: u32; - } & Struct; - readonly isRemoveOtherVote: boolean; - readonly asRemoveOtherVote: { - readonly target: MultiAddress; - readonly index: u32; - } & Struct; - readonly isBlacklist: boolean; - readonly asBlacklist: { - readonly proposalHash: H256; - readonly maybeRefIndex: Option; - } & Struct; - readonly isCancelProposal: boolean; - readonly asCancelProposal: { - readonly propIndex: Compact; - } & Struct; - readonly isSetMetadata: boolean; - readonly asSetMetadata: { - readonly owner: PalletDemocracyMetadataOwner; - readonly maybeHash: Option; - } & Struct; - readonly type: 'Propose' | 'Second' | 'Vote' | 'EmergencyCancel' | 'ExternalPropose' | 'ExternalProposeMajority' | 'ExternalProposeDefault' | 'FastTrack' | 'VetoExternal' | 'CancelReferendum' | 'Delegate' | 'Undelegate' | 'ClearPublicProposals' | 'Unlock' | 'RemoveVote' | 'RemoveOtherVote' | 'Blacklist' | 'CancelProposal' | 'SetMetadata'; - } - - /** @name PalletDemocracyConviction (267) */ - interface PalletDemocracyConviction extends Enum { - readonly isNone: boolean; - readonly isLocked1x: boolean; - readonly isLocked2x: boolean; - readonly isLocked3x: boolean; - readonly isLocked4x: boolean; - readonly isLocked5x: boolean; - readonly isLocked6x: boolean; - readonly type: 'None' | 'Locked1x' | 'Locked2x' | 'Locked3x' | 'Locked4x' | 'Locked5x' | 'Locked6x'; - } - - /** @name PalletCollectiveCall (270) */ - interface PalletCollectiveCall extends Enum { - readonly isSetMembers: boolean; - readonly asSetMembers: { - readonly newMembers: Vec; - readonly prime: Option; - readonly oldCount: u32; - } & Struct; - readonly isExecute: boolean; - readonly asExecute: { - readonly proposal: Call; - readonly lengthBound: Compact; - } & Struct; - readonly isPropose: boolean; - readonly asPropose: { - readonly threshold: Compact; - readonly proposal: Call; - readonly lengthBound: Compact; - } & Struct; - readonly isVote: boolean; - readonly asVote: { - readonly proposal: H256; - readonly index: Compact; - readonly approve: bool; - } & Struct; - readonly isDisapproveProposal: boolean; - readonly asDisapproveProposal: { - readonly proposalHash: H256; - } & Struct; - readonly isClose: boolean; - readonly asClose: { - readonly proposalHash: H256; - readonly index: Compact; - readonly proposalWeightBound: SpWeightsWeightV2Weight; - readonly lengthBound: Compact; - } & Struct; - readonly type: 'SetMembers' | 'Execute' | 'Propose' | 'Vote' | 'DisapproveProposal' | 'Close'; - } - - /** @name PalletMembershipCall (273) */ - interface PalletMembershipCall extends Enum { - readonly isAddMember: boolean; - readonly asAddMember: { - readonly who: MultiAddress; - } & Struct; - readonly isRemoveMember: boolean; - readonly asRemoveMember: { - readonly who: MultiAddress; - } & Struct; - readonly isSwapMember: boolean; - readonly asSwapMember: { - readonly remove: MultiAddress; - readonly add: MultiAddress; - } & Struct; - readonly isResetMembers: boolean; - readonly asResetMembers: { - readonly members: Vec; - } & Struct; - readonly isChangeKey: boolean; - readonly asChangeKey: { - readonly new_: MultiAddress; - } & Struct; - readonly isSetPrime: boolean; - readonly asSetPrime: { - readonly who: MultiAddress; - } & Struct; - readonly isClearPrime: boolean; - readonly type: 'AddMember' | 'RemoveMember' | 'SwapMember' | 'ResetMembers' | 'ChangeKey' | 'SetPrime' | 'ClearPrime'; - } - - /** @name PalletTreasuryCall (274) */ - interface PalletTreasuryCall extends Enum { - readonly isProposeSpend: boolean; - readonly asProposeSpend: { - readonly value: Compact; - readonly beneficiary: MultiAddress; - } & Struct; - readonly isRejectProposal: boolean; - readonly asRejectProposal: { - readonly proposalId: Compact; - } & Struct; - readonly isApproveProposal: boolean; - readonly asApproveProposal: { - readonly proposalId: Compact; - } & Struct; - readonly isSpend: boolean; - readonly asSpend: { - readonly amount: Compact; - readonly beneficiary: MultiAddress; - } & Struct; - readonly isRemoveApproval: boolean; - readonly asRemoveApproval: { - readonly proposalId: Compact; - } & Struct; - readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal' | 'Spend' | 'RemoveApproval'; - } - - /** @name PalletUtilityCall (275) */ - interface PalletUtilityCall extends Enum { - readonly isBatch: boolean; - readonly asBatch: { - readonly calls: Vec; - } & Struct; - readonly isAsDerivative: boolean; - readonly asAsDerivative: { - readonly index: u16; - readonly call: Call; - } & Struct; - readonly isBatchAll: boolean; - readonly asBatchAll: { - readonly calls: Vec; - } & Struct; - readonly isDispatchAs: boolean; - readonly asDispatchAs: { - readonly asOrigin: SpiritnetRuntimeOriginCaller; - readonly call: Call; - } & Struct; - readonly isForceBatch: boolean; - readonly asForceBatch: { - readonly calls: Vec; - } & Struct; - readonly isWithWeight: boolean; - readonly asWithWeight: { - readonly call: Call; - readonly weight: SpWeightsWeightV2Weight; - } & Struct; - readonly type: 'Batch' | 'AsDerivative' | 'BatchAll' | 'DispatchAs' | 'ForceBatch' | 'WithWeight'; - } - - /** @name SpiritnetRuntimeOriginCaller (277) */ - interface SpiritnetRuntimeOriginCaller extends Enum { - readonly isSystem: boolean; - readonly asSystem: FrameSupportDispatchRawOrigin; - readonly isVoid: boolean; - readonly isCouncil: boolean; - readonly asCouncil: PalletCollectiveRawOrigin; - readonly isTechnicalCommittee: boolean; - readonly asTechnicalCommittee: PalletCollectiveRawOrigin; - readonly isDid: boolean; - readonly asDid: DidOriginDidRawOrigin; - readonly isPolkadotXcm: boolean; - readonly asPolkadotXcm: PalletXcmOrigin; - readonly isCumulusXcm: boolean; - readonly asCumulusXcm: CumulusPalletXcmOrigin; - readonly type: 'System' | 'Void' | 'Council' | 'TechnicalCommittee' | 'Did' | 'PolkadotXcm' | 'CumulusXcm'; - } - - /** @name FrameSupportDispatchRawOrigin (278) */ - interface FrameSupportDispatchRawOrigin extends Enum { - readonly isRoot: boolean; - readonly isSigned: boolean; - readonly asSigned: AccountId32; - readonly isNone: boolean; - readonly type: 'Root' | 'Signed' | 'None'; - } - - /** @name PalletCollectiveRawOrigin (279) */ - interface PalletCollectiveRawOrigin extends Enum { - readonly isMembers: boolean; - readonly asMembers: ITuple<[u32, u32]>; - readonly isMember: boolean; - readonly asMember: AccountId32; - readonly isPhantom: boolean; - readonly type: 'Members' | 'Member' | 'Phantom'; - } - - /** @name DidOriginDidRawOrigin (281) */ - interface DidOriginDidRawOrigin extends Struct { - readonly id: AccountId32; - readonly submitter: AccountId32; - } - - /** @name PalletXcmOrigin (282) */ - interface PalletXcmOrigin extends Enum { - readonly isXcm: boolean; - readonly asXcm: XcmV3MultiLocation; - readonly isResponse: boolean; - readonly asResponse: XcmV3MultiLocation; - readonly type: 'Xcm' | 'Response'; - } - - /** @name CumulusPalletXcmOrigin (283) */ - interface CumulusPalletXcmOrigin extends Enum { - readonly isRelay: boolean; - readonly isSiblingParachain: boolean; - readonly asSiblingParachain: u32; - readonly type: 'Relay' | 'SiblingParachain'; - } - - /** @name SpCoreVoid (284) */ - type SpCoreVoid = Null; - - /** @name PalletVestingCall (285) */ - interface PalletVestingCall extends Enum { - readonly isVest: boolean; - readonly isVestOther: boolean; - readonly asVestOther: { - readonly target: MultiAddress; - } & Struct; - readonly isVestedTransfer: boolean; - readonly asVestedTransfer: { - readonly target: MultiAddress; - readonly schedule: PalletVestingVestingInfo; - } & Struct; - readonly isForceVestedTransfer: boolean; - readonly asForceVestedTransfer: { - readonly source: MultiAddress; - readonly target: MultiAddress; - readonly schedule: PalletVestingVestingInfo; - } & Struct; - readonly isMergeSchedules: boolean; - readonly asMergeSchedules: { - readonly schedule1Index: u32; - readonly schedule2Index: u32; - } & Struct; - readonly type: 'Vest' | 'VestOther' | 'VestedTransfer' | 'ForceVestedTransfer' | 'MergeSchedules'; - } - - /** @name PalletVestingVestingInfo (286) */ - interface PalletVestingVestingInfo extends Struct { - readonly locked: u128; - readonly perBlock: u128; - readonly startingBlock: u64; - } - - /** @name PalletSchedulerCall (287) */ - interface PalletSchedulerCall extends Enum { - readonly isSchedule: boolean; - readonly asSchedule: { - readonly when: u64; - readonly maybePeriodic: Option>; - readonly priority: u8; - readonly call: Call; - } & Struct; - readonly isCancel: boolean; - readonly asCancel: { - readonly when: u64; - readonly index: u32; - } & Struct; - readonly isScheduleNamed: boolean; - readonly asScheduleNamed: { - readonly id: U8aFixed; - readonly when: u64; - readonly maybePeriodic: Option>; - readonly priority: u8; - readonly call: Call; - } & Struct; - readonly isCancelNamed: boolean; - readonly asCancelNamed: { - readonly id: U8aFixed; - } & Struct; - readonly isScheduleAfter: boolean; - readonly asScheduleAfter: { - readonly after: u64; - readonly maybePeriodic: Option>; - readonly priority: u8; - readonly call: Call; - } & Struct; - readonly isScheduleNamedAfter: boolean; - readonly asScheduleNamedAfter: { - readonly id: U8aFixed; - readonly after: u64; - readonly maybePeriodic: Option>; - readonly priority: u8; - readonly call: Call; - } & Struct; - readonly type: 'Schedule' | 'Cancel' | 'ScheduleNamed' | 'CancelNamed' | 'ScheduleAfter' | 'ScheduleNamedAfter'; - } - - /** @name PalletProxyCall (289) */ - interface PalletProxyCall extends Enum { - readonly isProxy: boolean; - readonly asProxy: { - readonly real: MultiAddress; - readonly forceProxyType: Option; - readonly call: Call; - } & Struct; - readonly isAddProxy: boolean; - readonly asAddProxy: { - readonly delegate: MultiAddress; - readonly proxyType: SpiritnetRuntimeProxyType; - readonly delay: u64; - } & Struct; - readonly isRemoveProxy: boolean; - readonly asRemoveProxy: { - readonly delegate: MultiAddress; - readonly proxyType: SpiritnetRuntimeProxyType; - readonly delay: u64; - } & Struct; - readonly isRemoveProxies: boolean; - readonly isCreatePure: boolean; - readonly asCreatePure: { - readonly proxyType: SpiritnetRuntimeProxyType; - readonly delay: u64; - readonly index: u16; - } & Struct; - readonly isKillPure: boolean; - readonly asKillPure: { - readonly spawner: MultiAddress; - readonly proxyType: SpiritnetRuntimeProxyType; - readonly index: u16; - readonly height: Compact; - readonly extIndex: Compact; - } & Struct; - readonly isAnnounce: boolean; - readonly asAnnounce: { - readonly real: MultiAddress; - readonly callHash: H256; - } & Struct; - readonly isRemoveAnnouncement: boolean; - readonly asRemoveAnnouncement: { - readonly real: MultiAddress; - readonly callHash: H256; - } & Struct; - readonly isRejectAnnouncement: boolean; - readonly asRejectAnnouncement: { - readonly delegate: MultiAddress; - readonly callHash: H256; - } & Struct; - readonly isProxyAnnounced: boolean; - readonly asProxyAnnounced: { - readonly delegate: MultiAddress; - readonly real: MultiAddress; - readonly forceProxyType: Option; - readonly call: Call; - } & Struct; - readonly type: 'Proxy' | 'AddProxy' | 'RemoveProxy' | 'RemoveProxies' | 'CreatePure' | 'KillPure' | 'Announce' | 'RemoveAnnouncement' | 'RejectAnnouncement' | 'ProxyAnnounced'; - } - - /** @name PalletPreimageCall (291) */ - interface PalletPreimageCall extends Enum { - readonly isNotePreimage: boolean; - readonly asNotePreimage: { - readonly bytes: Bytes; - } & Struct; - readonly isUnnotePreimage: boolean; - readonly asUnnotePreimage: { - readonly hash_: H256; - } & Struct; - readonly isRequestPreimage: boolean; - readonly asRequestPreimage: { - readonly hash_: H256; - } & Struct; - readonly isUnrequestPreimage: boolean; - readonly asUnrequestPreimage: { - readonly hash_: H256; - } & Struct; - readonly type: 'NotePreimage' | 'UnnotePreimage' | 'RequestPreimage' | 'UnrequestPreimage'; - } - - /** @name PalletTipsCall (293) */ - interface PalletTipsCall extends Enum { - readonly isReportAwesome: boolean; - readonly asReportAwesome: { - readonly reason: Bytes; - readonly who: MultiAddress; - } & Struct; - readonly isRetractTip: boolean; - readonly asRetractTip: { - readonly hash_: H256; - } & Struct; - readonly isTipNew: boolean; - readonly asTipNew: { - readonly reason: Bytes; - readonly who: MultiAddress; - readonly tipValue: Compact; - } & Struct; - readonly isTip: boolean; - readonly asTip: { - readonly hash_: H256; - readonly tipValue: Compact; - } & Struct; - readonly isCloseTip: boolean; - readonly asCloseTip: { - readonly hash_: H256; - } & Struct; - readonly isSlashTip: boolean; - readonly asSlashTip: { - readonly hash_: H256; - } & Struct; - readonly type: 'ReportAwesome' | 'RetractTip' | 'TipNew' | 'Tip' | 'CloseTip' | 'SlashTip'; - } - - /** @name PalletMultisigCall (294) */ - interface PalletMultisigCall extends Enum { - readonly isAsMultiThreshold1: boolean; - readonly asAsMultiThreshold1: { - readonly otherSignatories: Vec; - readonly call: Call; - } & Struct; - readonly isAsMulti: boolean; - readonly asAsMulti: { - readonly threshold: u16; - readonly otherSignatories: Vec; - readonly maybeTimepoint: Option; - readonly call: Call; - readonly maxWeight: SpWeightsWeightV2Weight; - } & Struct; - readonly isApproveAsMulti: boolean; - readonly asApproveAsMulti: { - readonly threshold: u16; - readonly otherSignatories: Vec; - readonly maybeTimepoint: Option; - readonly callHash: U8aFixed; - readonly maxWeight: SpWeightsWeightV2Weight; - } & Struct; - readonly isCancelAsMulti: boolean; - readonly asCancelAsMulti: { - readonly threshold: u16; - readonly otherSignatories: Vec; - readonly timepoint: PalletMultisigTimepoint; - readonly callHash: U8aFixed; - } & Struct; - readonly type: 'AsMultiThreshold1' | 'AsMulti' | 'ApproveAsMulti' | 'CancelAsMulti'; - } - - /** @name CtypeCall (296) */ - interface CtypeCall extends Enum { - readonly isAdd: boolean; - readonly asAdd: { - readonly ctype: Bytes; - } & Struct; - readonly isSetBlockNumber: boolean; - readonly asSetBlockNumber: { - readonly ctypeHash: H256; - readonly blockNumber: u64; - } & Struct; - readonly type: 'Add' | 'SetBlockNumber'; - } - - /** @name AttestationCall (297) */ - interface AttestationCall extends Enum { - readonly isAdd: boolean; - readonly asAdd: { - readonly claimHash: H256; - readonly ctypeHash: H256; - readonly authorization: Option; - } & Struct; - readonly isRevoke: boolean; - readonly asRevoke: { - readonly claimHash: H256; - readonly authorization: Option; - } & Struct; - readonly isRemove: boolean; - readonly asRemove: { - readonly claimHash: H256; - readonly authorization: Option; - } & Struct; - readonly isReclaimDeposit: boolean; - readonly asReclaimDeposit: { - readonly claimHash: H256; - } & Struct; - readonly isChangeDepositOwner: boolean; - readonly asChangeDepositOwner: { - readonly claimHash: H256; - } & Struct; - readonly isUpdateDeposit: boolean; - readonly asUpdateDeposit: { - readonly claimHash: H256; - } & Struct; - readonly type: 'Add' | 'Revoke' | 'Remove' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; - } - - /** @name RuntimeCommonAuthorizationPalletAuthorize (299) */ - interface RuntimeCommonAuthorizationPalletAuthorize extends Enum { - readonly isDelegation: boolean; - readonly asDelegation: DelegationAccessControlDelegationAc; - readonly type: 'Delegation'; - } - - /** @name DelegationAccessControlDelegationAc (300) */ - interface DelegationAccessControlDelegationAc extends Struct { - readonly subjectNodeId: H256; - readonly maxChecks: u32; - } - - /** @name DelegationCall (301) */ - interface DelegationCall extends Enum { - readonly isCreateHierarchy: boolean; - readonly asCreateHierarchy: { - readonly rootNodeId: H256; - readonly ctypeHash: H256; - } & Struct; - readonly isAddDelegation: boolean; - readonly asAddDelegation: { - readonly delegationId: H256; - readonly parentId: H256; - readonly delegate: AccountId32; - readonly permissions: DelegationDelegationHierarchyPermissions; - readonly delegateSignature: DidDidDetailsDidSignature; - } & Struct; - readonly isRevokeDelegation: boolean; - readonly asRevokeDelegation: { - readonly delegationId: H256; - readonly maxParentChecks: u32; - readonly maxRevocations: u32; - } & Struct; - readonly isRemoveDelegation: boolean; - readonly asRemoveDelegation: { - readonly delegationId: H256; - readonly maxRemovals: u32; - } & Struct; - readonly isReclaimDeposit: boolean; - readonly asReclaimDeposit: { - readonly delegationId: H256; - readonly maxRemovals: u32; - } & Struct; - readonly isChangeDepositOwner: boolean; - readonly asChangeDepositOwner: { - readonly delegationId: H256; - } & Struct; - readonly isUpdateDeposit: boolean; - readonly asUpdateDeposit: { - readonly delegationId: H256; - } & Struct; - readonly type: 'CreateHierarchy' | 'AddDelegation' | 'RevokeDelegation' | 'RemoveDelegation' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; - } - - /** @name DidDidDetailsDidSignature (302) */ - interface DidDidDetailsDidSignature extends Enum { - readonly isEd25519: boolean; - readonly asEd25519: SpCoreEd25519Signature; - readonly isSr25519: boolean; - readonly asSr25519: SpCoreSr25519Signature; - readonly isEcdsa: boolean; - readonly asEcdsa: SpCoreEcdsaSignature; - readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; - } - - /** @name SpCoreEd25519Signature (303) */ - interface SpCoreEd25519Signature extends U8aFixed {} - - /** @name SpCoreSr25519Signature (305) */ - interface SpCoreSr25519Signature extends U8aFixed {} - - /** @name SpCoreEcdsaSignature (306) */ - interface SpCoreEcdsaSignature extends U8aFixed {} - - /** @name DidCall (308) */ - interface DidCall extends Enum { - readonly isCreate: boolean; - readonly asCreate: { - readonly details: DidDidDetailsDidCreationDetails; - readonly signature: DidDidDetailsDidSignature; - } & Struct; - readonly isSetAuthenticationKey: boolean; - readonly asSetAuthenticationKey: { - readonly newKey: DidDidDetailsDidVerificationKey; - } & Struct; - readonly isSetDelegationKey: boolean; - readonly asSetDelegationKey: { - readonly newKey: DidDidDetailsDidVerificationKey; - } & Struct; - readonly isRemoveDelegationKey: boolean; - readonly isSetAttestationKey: boolean; - readonly asSetAttestationKey: { - readonly newKey: DidDidDetailsDidVerificationKey; - } & Struct; - readonly isRemoveAttestationKey: boolean; - readonly isAddKeyAgreementKey: boolean; - readonly asAddKeyAgreementKey: { - readonly newKey: DidDidDetailsDidEncryptionKey; - } & Struct; - readonly isRemoveKeyAgreementKey: boolean; - readonly asRemoveKeyAgreementKey: { - readonly keyId: H256; - } & Struct; - readonly isAddServiceEndpoint: boolean; - readonly asAddServiceEndpoint: { - readonly serviceEndpoint: DidServiceEndpointsDidEndpoint; - } & Struct; - readonly isRemoveServiceEndpoint: boolean; - readonly asRemoveServiceEndpoint: { - readonly serviceId: Bytes; - } & Struct; - readonly isDelete: boolean; - readonly asDelete: { - readonly endpointsToRemove: u32; - } & Struct; - readonly isReclaimDeposit: boolean; - readonly asReclaimDeposit: { - readonly didSubject: AccountId32; - readonly endpointsToRemove: u32; - } & Struct; - readonly isSubmitDidCall: boolean; - readonly asSubmitDidCall: { - readonly didCall: DidDidDetailsDidAuthorizedCallOperation; - readonly signature: DidDidDetailsDidSignature; - } & Struct; - readonly isChangeDepositOwner: boolean; - readonly isUpdateDeposit: boolean; - readonly asUpdateDeposit: { - readonly did: AccountId32; - } & Struct; - readonly isDispatchAs: boolean; - readonly asDispatchAs: { - readonly didIdentifier: AccountId32; - readonly call: Call; - } & Struct; - readonly isCreateFromAccount: boolean; - readonly asCreateFromAccount: { - readonly authenticationKey: DidDidDetailsDidVerificationKey; - } & Struct; - readonly type: 'Create' | 'SetAuthenticationKey' | 'SetDelegationKey' | 'RemoveDelegationKey' | 'SetAttestationKey' | 'RemoveAttestationKey' | 'AddKeyAgreementKey' | 'RemoveKeyAgreementKey' | 'AddServiceEndpoint' | 'RemoveServiceEndpoint' | 'Delete' | 'ReclaimDeposit' | 'SubmitDidCall' | 'ChangeDepositOwner' | 'UpdateDeposit' | 'DispatchAs' | 'CreateFromAccount'; - } - - /** @name DidDidDetailsDidCreationDetails (309) */ - interface DidDidDetailsDidCreationDetails extends Struct { - readonly did: AccountId32; - readonly submitter: AccountId32; - readonly newKeyAgreementKeys: BTreeSet; - readonly newAttestationKey: Option; - readonly newDelegationKey: Option; - readonly newServiceDetails: Vec; - } - - /** @name RuntimeCommonConstantsDidMaxNewKeyAgreementKeys (310) */ - type RuntimeCommonConstantsDidMaxNewKeyAgreementKeys = Null; - - /** @name DidServiceEndpointsDidEndpoint (311) */ - interface DidServiceEndpointsDidEndpoint extends Struct { - readonly id: Bytes; - readonly serviceTypes: Vec; - readonly urls: Vec; - } - - /** @name DidDidDetailsDidEncryptionKey (320) */ - interface DidDidDetailsDidEncryptionKey extends Enum { - readonly isX25519: boolean; - readonly asX25519: U8aFixed; - readonly type: 'X25519'; - } - - /** @name DidDidDetailsDidVerificationKey (324) */ - interface DidDidDetailsDidVerificationKey extends Enum { - readonly isEd25519: boolean; - readonly asEd25519: SpCoreEd25519Public; - readonly isSr25519: boolean; - readonly asSr25519: SpCoreSr25519Public; - readonly isEcdsa: boolean; - readonly asEcdsa: SpCoreEcdsaPublic; - readonly isAccount: boolean; - readonly asAccount: AccountId32; - readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa' | 'Account'; - } - - /** @name SpCoreEd25519Public (325) */ - interface SpCoreEd25519Public extends U8aFixed {} - - /** @name SpCoreEcdsaPublic (326) */ - interface SpCoreEcdsaPublic extends U8aFixed {} - - /** @name DidDidDetailsDidAuthorizedCallOperation (329) */ - interface DidDidDetailsDidAuthorizedCallOperation extends Struct { - readonly did: AccountId32; - readonly txCounter: u64; - readonly call: Call; - readonly blockNumber: u64; - readonly submitter: AccountId32; - } - - /** @name PalletDidLookupCall (330) */ - interface PalletDidLookupCall extends Enum { - readonly isAssociateAccount: boolean; - readonly asAssociateAccount: { - readonly req: PalletDidLookupAssociateAccountRequest; - readonly expiration: u64; - } & Struct; - readonly isAssociateSender: boolean; - readonly isRemoveSenderAssociation: boolean; - readonly isRemoveAccountAssociation: boolean; - readonly asRemoveAccountAssociation: { - readonly account: PalletDidLookupLinkableAccountLinkableAccountId; - } & Struct; - readonly isReclaimDeposit: boolean; - readonly asReclaimDeposit: { - readonly account: PalletDidLookupLinkableAccountLinkableAccountId; - } & Struct; - readonly isChangeDepositOwner: boolean; - readonly asChangeDepositOwner: { - readonly account: PalletDidLookupLinkableAccountLinkableAccountId; - } & Struct; - readonly isUpdateDeposit: boolean; - readonly asUpdateDeposit: { - readonly account: PalletDidLookupLinkableAccountLinkableAccountId; - } & Struct; - readonly type: 'AssociateAccount' | 'AssociateSender' | 'RemoveSenderAssociation' | 'RemoveAccountAssociation' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; - } - - /** @name PalletDidLookupAssociateAccountRequest (331) */ - interface PalletDidLookupAssociateAccountRequest extends Enum { - readonly isPolkadot: boolean; - readonly asPolkadot: ITuple<[AccountId32, SpRuntimeMultiSignature]>; - readonly isEthereum: boolean; - readonly asEthereum: ITuple<[PalletDidLookupAccountAccountId20, PalletDidLookupAccountEthereumSignature]>; - readonly type: 'Polkadot' | 'Ethereum'; - } - - /** @name SpRuntimeMultiSignature (332) */ - interface SpRuntimeMultiSignature extends Enum { - readonly isEd25519: boolean; - readonly asEd25519: SpCoreEd25519Signature; - readonly isSr25519: boolean; - readonly asSr25519: SpCoreSr25519Signature; - readonly isEcdsa: boolean; - readonly asEcdsa: SpCoreEcdsaSignature; - readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; - } - - /** @name PalletDidLookupAccountEthereumSignature (333) */ - interface PalletDidLookupAccountEthereumSignature extends SpCoreEcdsaSignature {} - - /** @name PalletWeb3NamesCall (334) */ - interface PalletWeb3NamesCall extends Enum { - readonly isClaim: boolean; - readonly asClaim: { - readonly name: Bytes; - } & Struct; - readonly isReleaseByOwner: boolean; - readonly isReclaimDeposit: boolean; - readonly asReclaimDeposit: { - readonly name: Bytes; - } & Struct; - readonly isBan: boolean; - readonly asBan: { - readonly name: Bytes; - } & Struct; - readonly isUnban: boolean; - readonly asUnban: { - readonly name: Bytes; - } & Struct; - readonly isChangeDepositOwner: boolean; - readonly isUpdateDeposit: boolean; - readonly asUpdateDeposit: { - readonly nameInput: Bytes; - } & Struct; - readonly type: 'Claim' | 'ReleaseByOwner' | 'ReclaimDeposit' | 'Ban' | 'Unban' | 'ChangeDepositOwner' | 'UpdateDeposit'; - } - - /** @name PublicCredentialsCall (335) */ - interface PublicCredentialsCall extends Enum { - readonly isAdd: boolean; - readonly asAdd: { - readonly credential: PublicCredentialsCredentialsCredential; - } & Struct; - readonly isRevoke: boolean; - readonly asRevoke: { - readonly credentialId: H256; - readonly authorization: Option; - } & Struct; - readonly isUnrevoke: boolean; - readonly asUnrevoke: { - readonly credentialId: H256; - readonly authorization: Option; - } & Struct; - readonly isRemove: boolean; - readonly asRemove: { - readonly credentialId: H256; - readonly authorization: Option; - } & Struct; - readonly isReclaimDeposit: boolean; - readonly asReclaimDeposit: { - readonly credentialId: H256; - } & Struct; - readonly isChangeDepositOwner: boolean; - readonly asChangeDepositOwner: { - readonly credentialId: H256; - } & Struct; - readonly isUpdateDeposit: boolean; - readonly asUpdateDeposit: { - readonly credentialId: H256; - } & Struct; - readonly type: 'Add' | 'Revoke' | 'Unrevoke' | 'Remove' | 'ReclaimDeposit' | 'ChangeDepositOwner' | 'UpdateDeposit'; - } - - /** @name PublicCredentialsCredentialsCredential (336) */ - interface PublicCredentialsCredentialsCredential extends Struct { - readonly ctypeHash: H256; - readonly subject: Bytes; - readonly claims: Bytes; - readonly authorization: Option; - } - - /** @name PalletMigrationCall (339) */ - interface PalletMigrationCall extends Enum { - readonly isUpdateBalance: boolean; - readonly asUpdateBalance: { - readonly requestedMigrations: PalletMigrationEntriesToMigrate; - } & Struct; - readonly type: 'UpdateBalance'; - } - - /** @name CumulusPalletParachainSystemCall (340) */ - interface CumulusPalletParachainSystemCall extends Enum { - readonly isSetValidationData: boolean; - readonly asSetValidationData: { - readonly data: CumulusPrimitivesParachainInherentParachainInherentData; - } & Struct; - readonly isSudoSendUpwardMessage: boolean; - readonly asSudoSendUpwardMessage: { - readonly message: Bytes; - } & Struct; - readonly isAuthorizeUpgrade: boolean; - readonly asAuthorizeUpgrade: { - readonly codeHash: H256; - readonly checkVersion: bool; - } & Struct; - readonly isEnactAuthorizedUpgrade: boolean; - readonly asEnactAuthorizedUpgrade: { - readonly code: Bytes; - } & Struct; - readonly type: 'SetValidationData' | 'SudoSendUpwardMessage' | 'AuthorizeUpgrade' | 'EnactAuthorizedUpgrade'; - } - - /** @name CumulusPrimitivesParachainInherentParachainInherentData (341) */ - interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct { - readonly validationData: PolkadotPrimitivesV5PersistedValidationData; - readonly relayChainState: SpTrieStorageProof; - readonly downwardMessages: Vec; - readonly horizontalMessages: BTreeMap>; - } - - /** @name PolkadotPrimitivesV5PersistedValidationData (342) */ - interface PolkadotPrimitivesV5PersistedValidationData extends Struct { - readonly parentHead: Bytes; - readonly relayParentNumber: u32; - readonly relayParentStorageRoot: H256; - readonly maxPovSize: u32; - } - - /** @name SpTrieStorageProof (344) */ - interface SpTrieStorageProof extends Struct { - readonly trieNodes: BTreeSet; - } - - /** @name PolkadotCorePrimitivesInboundDownwardMessage (347) */ - interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct { - readonly sentAt: u32; - readonly msg: Bytes; - } - - /** @name PolkadotCorePrimitivesInboundHrmpMessage (350) */ - interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct { - readonly sentAt: u32; - readonly data: Bytes; - } - - /** @name ParachainInfoCall (353) */ - type ParachainInfoCall = Null; - - /** @name CumulusPalletXcmpQueueCall (354) */ - interface CumulusPalletXcmpQueueCall extends Enum { - readonly isServiceOverweight: boolean; - readonly asServiceOverweight: { - readonly index: u64; - readonly weightLimit: SpWeightsWeightV2Weight; - } & Struct; - readonly isSuspendXcmExecution: boolean; - readonly isResumeXcmExecution: boolean; - readonly isUpdateSuspendThreshold: boolean; - readonly asUpdateSuspendThreshold: { - readonly new_: u32; - } & Struct; - readonly isUpdateDropThreshold: boolean; - readonly asUpdateDropThreshold: { - readonly new_: u32; - } & Struct; - readonly isUpdateResumeThreshold: boolean; - readonly asUpdateResumeThreshold: { - readonly new_: u32; - } & Struct; - readonly isUpdateThresholdWeight: boolean; - readonly asUpdateThresholdWeight: { - readonly new_: SpWeightsWeightV2Weight; - } & Struct; - readonly isUpdateWeightRestrictDecay: boolean; - readonly asUpdateWeightRestrictDecay: { - readonly new_: SpWeightsWeightV2Weight; - } & Struct; - readonly isUpdateXcmpMaxIndividualWeight: boolean; - readonly asUpdateXcmpMaxIndividualWeight: { - readonly new_: SpWeightsWeightV2Weight; - } & Struct; - readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight'; - } - - /** @name PalletXcmCall (355) */ - interface PalletXcmCall extends Enum { - readonly isSend: boolean; - readonly asSend: { - readonly dest: XcmVersionedMultiLocation; - readonly message: XcmVersionedXcm; - } & Struct; - readonly isTeleportAssets: boolean; - readonly asTeleportAssets: { - readonly dest: XcmVersionedMultiLocation; - readonly beneficiary: XcmVersionedMultiLocation; - readonly assets: XcmVersionedMultiAssets; - readonly feeAssetItem: u32; - } & Struct; - readonly isReserveTransferAssets: boolean; - readonly asReserveTransferAssets: { - readonly dest: XcmVersionedMultiLocation; - readonly beneficiary: XcmVersionedMultiLocation; - readonly assets: XcmVersionedMultiAssets; - readonly feeAssetItem: u32; - } & Struct; - readonly isExecute: boolean; - readonly asExecute: { - readonly message: XcmVersionedXcm; - readonly maxWeight: SpWeightsWeightV2Weight; - } & Struct; - readonly isForceXcmVersion: boolean; - readonly asForceXcmVersion: { - readonly location: XcmV3MultiLocation; - readonly version: u32; - } & Struct; - readonly isForceDefaultXcmVersion: boolean; - readonly asForceDefaultXcmVersion: { - readonly maybeXcmVersion: Option; - } & Struct; - readonly isForceSubscribeVersionNotify: boolean; - readonly asForceSubscribeVersionNotify: { - readonly location: XcmVersionedMultiLocation; - } & Struct; - readonly isForceUnsubscribeVersionNotify: boolean; - readonly asForceUnsubscribeVersionNotify: { - readonly location: XcmVersionedMultiLocation; - } & Struct; - readonly isLimitedReserveTransferAssets: boolean; - readonly asLimitedReserveTransferAssets: { - readonly dest: XcmVersionedMultiLocation; - readonly beneficiary: XcmVersionedMultiLocation; - readonly assets: XcmVersionedMultiAssets; - readonly feeAssetItem: u32; - readonly weightLimit: XcmV3WeightLimit; - } & Struct; - readonly isLimitedTeleportAssets: boolean; - readonly asLimitedTeleportAssets: { - readonly dest: XcmVersionedMultiLocation; - readonly beneficiary: XcmVersionedMultiLocation; - readonly assets: XcmVersionedMultiAssets; - readonly feeAssetItem: u32; - readonly weightLimit: XcmV3WeightLimit; - } & Struct; - readonly isForceSuspension: boolean; - readonly asForceSuspension: { - readonly suspended: bool; - } & Struct; - readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets' | 'ForceSuspension'; - } - - /** @name XcmVersionedXcm (356) */ - interface XcmVersionedXcm extends Enum { - readonly isV2: boolean; - readonly asV2: XcmV2Xcm; - readonly isV3: boolean; - readonly asV3: XcmV3Xcm; - readonly type: 'V2' | 'V3'; - } - - /** @name XcmV2Xcm (357) */ - interface XcmV2Xcm extends Vec {} - - /** @name XcmV2Instruction (359) */ - interface XcmV2Instruction extends Enum { - readonly isWithdrawAsset: boolean; - readonly asWithdrawAsset: XcmV2MultiassetMultiAssets; - readonly isReserveAssetDeposited: boolean; - readonly asReserveAssetDeposited: XcmV2MultiassetMultiAssets; - readonly isReceiveTeleportedAsset: boolean; - readonly asReceiveTeleportedAsset: XcmV2MultiassetMultiAssets; - readonly isQueryResponse: boolean; - readonly asQueryResponse: { - readonly queryId: Compact; - readonly response: XcmV2Response; - readonly maxWeight: Compact; - } & Struct; - readonly isTransferAsset: boolean; - readonly asTransferAsset: { - readonly assets: XcmV2MultiassetMultiAssets; - readonly beneficiary: XcmV2MultiLocation; - } & Struct; - readonly isTransferReserveAsset: boolean; - readonly asTransferReserveAsset: { - readonly assets: XcmV2MultiassetMultiAssets; - readonly dest: XcmV2MultiLocation; - readonly xcm: XcmV2Xcm; - } & Struct; - readonly isTransact: boolean; - readonly asTransact: { - readonly originType: XcmV2OriginKind; - readonly requireWeightAtMost: Compact; - readonly call: XcmDoubleEncoded; - } & Struct; - readonly isHrmpNewChannelOpenRequest: boolean; - readonly asHrmpNewChannelOpenRequest: { - readonly sender: Compact; - readonly maxMessageSize: Compact; - readonly maxCapacity: Compact; - } & Struct; - readonly isHrmpChannelAccepted: boolean; - readonly asHrmpChannelAccepted: { - readonly recipient: Compact; - } & Struct; - readonly isHrmpChannelClosing: boolean; - readonly asHrmpChannelClosing: { - readonly initiator: Compact; - readonly sender: Compact; - readonly recipient: Compact; - } & Struct; - readonly isClearOrigin: boolean; - readonly isDescendOrigin: boolean; - readonly asDescendOrigin: XcmV2MultilocationJunctions; - readonly isReportError: boolean; - readonly asReportError: { - readonly queryId: Compact; - readonly dest: XcmV2MultiLocation; - readonly maxResponseWeight: Compact; - } & Struct; - readonly isDepositAsset: boolean; - readonly asDepositAsset: { - readonly assets: XcmV2MultiassetMultiAssetFilter; - readonly maxAssets: Compact; - readonly beneficiary: XcmV2MultiLocation; - } & Struct; - readonly isDepositReserveAsset: boolean; - readonly asDepositReserveAsset: { - readonly assets: XcmV2MultiassetMultiAssetFilter; - readonly maxAssets: Compact; - readonly dest: XcmV2MultiLocation; - readonly xcm: XcmV2Xcm; - } & Struct; - readonly isExchangeAsset: boolean; - readonly asExchangeAsset: { - readonly give: XcmV2MultiassetMultiAssetFilter; - readonly receive: XcmV2MultiassetMultiAssets; - } & Struct; - readonly isInitiateReserveWithdraw: boolean; - readonly asInitiateReserveWithdraw: { - readonly assets: XcmV2MultiassetMultiAssetFilter; - readonly reserve: XcmV2MultiLocation; - readonly xcm: XcmV2Xcm; - } & Struct; - readonly isInitiateTeleport: boolean; - readonly asInitiateTeleport: { - readonly assets: XcmV2MultiassetMultiAssetFilter; - readonly dest: XcmV2MultiLocation; - readonly xcm: XcmV2Xcm; - } & Struct; - readonly isQueryHolding: boolean; - readonly asQueryHolding: { - readonly queryId: Compact; - readonly dest: XcmV2MultiLocation; - readonly assets: XcmV2MultiassetMultiAssetFilter; - readonly maxResponseWeight: Compact; - } & Struct; - readonly isBuyExecution: boolean; - readonly asBuyExecution: { - readonly fees: XcmV2MultiAsset; - readonly weightLimit: XcmV2WeightLimit; - } & Struct; - readonly isRefundSurplus: boolean; - readonly isSetErrorHandler: boolean; - readonly asSetErrorHandler: XcmV2Xcm; - readonly isSetAppendix: boolean; - readonly asSetAppendix: XcmV2Xcm; - readonly isClearError: boolean; - readonly isClaimAsset: boolean; - readonly asClaimAsset: { - readonly assets: XcmV2MultiassetMultiAssets; - readonly ticket: XcmV2MultiLocation; - } & Struct; - readonly isTrap: boolean; - readonly asTrap: Compact; - readonly isSubscribeVersion: boolean; - readonly asSubscribeVersion: { - readonly queryId: Compact; - readonly maxResponseWeight: Compact; - } & Struct; - readonly isUnsubscribeVersion: boolean; - readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion'; - } - - /** @name XcmV2Response (360) */ - interface XcmV2Response extends Enum { - readonly isNull: boolean; - readonly isAssets: boolean; - readonly asAssets: XcmV2MultiassetMultiAssets; - readonly isExecutionResult: boolean; - readonly asExecutionResult: Option>; - readonly isVersion: boolean; - readonly asVersion: u32; - readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version'; - } - - /** @name XcmV2TraitsError (363) */ - interface XcmV2TraitsError extends Enum { - readonly isOverflow: boolean; - readonly isUnimplemented: boolean; - readonly isUntrustedReserveLocation: boolean; - readonly isUntrustedTeleportLocation: boolean; - readonly isMultiLocationFull: boolean; - readonly isMultiLocationNotInvertible: boolean; - readonly isBadOrigin: boolean; - readonly isInvalidLocation: boolean; - readonly isAssetNotFound: boolean; - readonly isFailedToTransactAsset: boolean; - readonly isNotWithdrawable: boolean; - readonly isLocationCannotHold: boolean; - readonly isExceedsMaxMessageSize: boolean; - readonly isDestinationUnsupported: boolean; - readonly isTransport: boolean; - readonly isUnroutable: boolean; - readonly isUnknownClaim: boolean; - readonly isFailedToDecode: boolean; - readonly isMaxWeightInvalid: boolean; - readonly isNotHoldingFees: boolean; - readonly isTooExpensive: boolean; - readonly isTrap: boolean; - readonly asTrap: u64; - readonly isUnhandledXcmVersion: boolean; - readonly isWeightLimitReached: boolean; - readonly asWeightLimitReached: u64; - readonly isBarrier: boolean; - readonly isWeightNotComputable: boolean; - readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable'; - } - - /** @name XcmV2MultiassetMultiAssetFilter (364) */ - interface XcmV2MultiassetMultiAssetFilter extends Enum { - readonly isDefinite: boolean; - readonly asDefinite: XcmV2MultiassetMultiAssets; - readonly isWild: boolean; - readonly asWild: XcmV2MultiassetWildMultiAsset; - readonly type: 'Definite' | 'Wild'; - } - - /** @name XcmV2MultiassetWildMultiAsset (365) */ - interface XcmV2MultiassetWildMultiAsset extends Enum { - readonly isAll: boolean; - readonly isAllOf: boolean; - readonly asAllOf: { - readonly id: XcmV2MultiassetAssetId; - readonly fun: XcmV2MultiassetWildFungibility; - } & Struct; - readonly type: 'All' | 'AllOf'; - } - - /** @name XcmV2MultiassetWildFungibility (366) */ - interface XcmV2MultiassetWildFungibility extends Enum { - readonly isFungible: boolean; - readonly isNonFungible: boolean; - readonly type: 'Fungible' | 'NonFungible'; - } - - /** @name XcmV2WeightLimit (367) */ - interface XcmV2WeightLimit extends Enum { - readonly isUnlimited: boolean; - readonly isLimited: boolean; - readonly asLimited: Compact; - readonly type: 'Unlimited' | 'Limited'; - } - - /** @name CumulusPalletDmpQueueCall (376) */ - interface CumulusPalletDmpQueueCall extends Enum { - readonly isServiceOverweight: boolean; - readonly asServiceOverweight: { - readonly index: u64; - readonly weightLimit: SpWeightsWeightV2Weight; - } & Struct; - readonly type: 'ServiceOverweight'; - } - - /** @name PalletDemocracyReferendumInfo (380) */ - interface PalletDemocracyReferendumInfo extends Enum { - readonly isOngoing: boolean; - readonly asOngoing: PalletDemocracyReferendumStatus; - readonly isFinished: boolean; - readonly asFinished: { - readonly approved: bool; - readonly end: u64; - } & Struct; - readonly type: 'Ongoing' | 'Finished'; - } - - /** @name PalletDemocracyReferendumStatus (381) */ - interface PalletDemocracyReferendumStatus extends Struct { - readonly end: u64; - readonly proposal: FrameSupportPreimagesBounded; - readonly threshold: PalletDemocracyVoteThreshold; - readonly delay: u64; - readonly tally: PalletDemocracyTally; - } - - /** @name PalletDemocracyTally (382) */ - interface PalletDemocracyTally extends Struct { - readonly ayes: u128; - readonly nays: u128; - readonly turnout: u128; - } - - /** @name PalletDemocracyVoteVoting (383) */ - interface PalletDemocracyVoteVoting extends Enum { - readonly isDirect: boolean; - readonly asDirect: { - readonly votes: Vec>; - readonly delegations: PalletDemocracyDelegations; - readonly prior: PalletDemocracyVotePriorLock; - } & Struct; - readonly isDelegating: boolean; - readonly asDelegating: { - readonly balance: u128; - readonly target: AccountId32; - readonly conviction: PalletDemocracyConviction; - readonly delegations: PalletDemocracyDelegations; - readonly prior: PalletDemocracyVotePriorLock; - } & Struct; - readonly type: 'Direct' | 'Delegating'; - } - - /** @name PalletDemocracyDelegations (387) */ - interface PalletDemocracyDelegations extends Struct { - readonly votes: u128; - readonly capital: u128; - } - - /** @name PalletDemocracyVotePriorLock (388) */ - interface PalletDemocracyVotePriorLock extends ITuple<[u64, u128]> {} - - /** @name PalletDemocracyError (391) */ - interface PalletDemocracyError extends Enum { - readonly isValueLow: boolean; - readonly isProposalMissing: boolean; - readonly isAlreadyCanceled: boolean; - readonly isDuplicateProposal: boolean; - readonly isProposalBlacklisted: boolean; - readonly isNotSimpleMajority: boolean; - readonly isInvalidHash: boolean; - readonly isNoProposal: boolean; - readonly isAlreadyVetoed: boolean; - readonly isReferendumInvalid: boolean; - readonly isNoneWaiting: boolean; - readonly isNotVoter: boolean; - readonly isNoPermission: boolean; - readonly isAlreadyDelegating: boolean; - readonly isInsufficientFunds: boolean; - readonly isNotDelegating: boolean; - readonly isVotesExist: boolean; - readonly isInstantNotAllowed: boolean; - readonly isNonsense: boolean; - readonly isWrongUpperBound: boolean; - readonly isMaxVotesReached: boolean; - readonly isTooMany: boolean; - readonly isVotingPeriodLow: boolean; - readonly isPreimageNotExist: boolean; - readonly type: 'ValueLow' | 'ProposalMissing' | 'AlreadyCanceled' | 'DuplicateProposal' | 'ProposalBlacklisted' | 'NotSimpleMajority' | 'InvalidHash' | 'NoProposal' | 'AlreadyVetoed' | 'ReferendumInvalid' | 'NoneWaiting' | 'NotVoter' | 'NoPermission' | 'AlreadyDelegating' | 'InsufficientFunds' | 'NotDelegating' | 'VotesExist' | 'InstantNotAllowed' | 'Nonsense' | 'WrongUpperBound' | 'MaxVotesReached' | 'TooMany' | 'VotingPeriodLow' | 'PreimageNotExist'; - } - - /** @name PalletCollectiveVotes (393) */ - interface PalletCollectiveVotes extends Struct { - readonly index: u32; - readonly threshold: u32; - readonly ayes: Vec; - readonly nays: Vec; - readonly end: u64; - } - - /** @name PalletCollectiveError (394) */ - interface PalletCollectiveError extends Enum { - readonly isNotMember: boolean; - readonly isDuplicateProposal: boolean; - readonly isProposalMissing: boolean; - readonly isWrongIndex: boolean; - readonly isDuplicateVote: boolean; - readonly isAlreadyInitialized: boolean; - readonly isTooEarly: boolean; - readonly isTooManyProposals: boolean; - readonly isWrongProposalWeight: boolean; - readonly isWrongProposalLength: boolean; - readonly type: 'NotMember' | 'DuplicateProposal' | 'ProposalMissing' | 'WrongIndex' | 'DuplicateVote' | 'AlreadyInitialized' | 'TooEarly' | 'TooManyProposals' | 'WrongProposalWeight' | 'WrongProposalLength'; - } - - /** @name PalletMembershipError (398) */ - interface PalletMembershipError extends Enum { - readonly isAlreadyMember: boolean; - readonly isNotMember: boolean; - readonly isTooManyMembers: boolean; - readonly type: 'AlreadyMember' | 'NotMember' | 'TooManyMembers'; - } - - /** @name PalletTreasuryProposal (399) */ - interface PalletTreasuryProposal extends Struct { - readonly proposer: AccountId32; - readonly value: u128; - readonly beneficiary: AccountId32; - readonly bond: u128; - } - - /** @name FrameSupportPalletId (403) */ - interface FrameSupportPalletId extends U8aFixed {} - - /** @name PalletTreasuryError (404) */ - interface PalletTreasuryError extends Enum { - readonly isInsufficientProposersBalance: boolean; - readonly isInvalidIndex: boolean; - readonly isTooManyApprovals: boolean; - readonly isInsufficientPermission: boolean; - readonly isProposalNotApproved: boolean; - readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'TooManyApprovals' | 'InsufficientPermission' | 'ProposalNotApproved'; - } - - /** @name PalletUtilityError (405) */ - interface PalletUtilityError extends Enum { - readonly isTooManyCalls: boolean; - readonly type: 'TooManyCalls'; - } - - /** @name PalletVestingReleases (408) */ - interface PalletVestingReleases extends Enum { - readonly isV0: boolean; - readonly isV1: boolean; - readonly type: 'V0' | 'V1'; - } - - /** @name PalletVestingError (409) */ - interface PalletVestingError extends Enum { - readonly isNotVesting: boolean; - readonly isAtMaxVestingSchedules: boolean; - readonly isAmountLow: boolean; - readonly isScheduleIndexOutOfBounds: boolean; - readonly isInvalidScheduleParams: boolean; - readonly type: 'NotVesting' | 'AtMaxVestingSchedules' | 'AmountLow' | 'ScheduleIndexOutOfBounds' | 'InvalidScheduleParams'; - } - - /** @name PalletSchedulerScheduled (412) */ - interface PalletSchedulerScheduled extends Struct { - readonly maybeId: Option; - readonly priority: u8; - readonly call: FrameSupportPreimagesBounded; - readonly maybePeriodic: Option>; - readonly origin: SpiritnetRuntimeOriginCaller; - } - - /** @name PalletSchedulerError (414) */ - interface PalletSchedulerError extends Enum { - readonly isFailedToSchedule: boolean; - readonly isNotFound: boolean; - readonly isTargetBlockNumberInPast: boolean; - readonly isRescheduleNoChange: boolean; - readonly isNamed: boolean; - readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange' | 'Named'; - } - - /** @name PalletProxyProxyDefinition (417) */ - interface PalletProxyProxyDefinition extends Struct { - readonly delegate: AccountId32; - readonly proxyType: SpiritnetRuntimeProxyType; - readonly delay: u64; - } - - /** @name PalletProxyAnnouncement (421) */ - interface PalletProxyAnnouncement extends Struct { - readonly real: AccountId32; - readonly callHash: H256; - readonly height: u64; - } - - /** @name PalletProxyError (423) */ - interface PalletProxyError extends Enum { - readonly isTooMany: boolean; - readonly isNotFound: boolean; - readonly isNotProxy: boolean; - readonly isUnproxyable: boolean; - readonly isDuplicate: boolean; - readonly isNoPermission: boolean; - readonly isUnannounced: boolean; - readonly isNoSelfProxy: boolean; - readonly type: 'TooMany' | 'NotFound' | 'NotProxy' | 'Unproxyable' | 'Duplicate' | 'NoPermission' | 'Unannounced' | 'NoSelfProxy'; - } - - /** @name PalletPreimageRequestStatus (424) */ - interface PalletPreimageRequestStatus extends Enum { - readonly isUnrequested: boolean; - readonly asUnrequested: { - readonly deposit: ITuple<[AccountId32, u128]>; - readonly len: u32; - } & Struct; - readonly isRequested: boolean; - readonly asRequested: { - readonly deposit: Option>; - readonly count: u32; - readonly len: Option; - } & Struct; - readonly type: 'Unrequested' | 'Requested'; - } - - /** @name PalletPreimageError (429) */ - interface PalletPreimageError extends Enum { - readonly isTooBig: boolean; - readonly isAlreadyNoted: boolean; - readonly isNotAuthorized: boolean; - readonly isNotNoted: boolean; - readonly isRequested: boolean; - readonly isNotRequested: boolean; - readonly type: 'TooBig' | 'AlreadyNoted' | 'NotAuthorized' | 'NotNoted' | 'Requested' | 'NotRequested'; - } - - /** @name PalletTipsOpenTip (432) */ - interface PalletTipsOpenTip extends Struct { - readonly reason: H256; - readonly who: AccountId32; - readonly finder: AccountId32; - readonly deposit: u128; - readonly closes: Option; - readonly tips: Vec>; - readonly findersFee: bool; - } - - /** @name PalletTipsError (436) */ - interface PalletTipsError extends Enum { - readonly isReasonTooBig: boolean; - readonly isAlreadyKnown: boolean; - readonly isUnknownTip: boolean; - readonly isNotFinder: boolean; - readonly isStillOpen: boolean; - readonly isPremature: boolean; - readonly type: 'ReasonTooBig' | 'AlreadyKnown' | 'UnknownTip' | 'NotFinder' | 'StillOpen' | 'Premature'; - } - - /** @name PalletMultisigMultisig (438) */ - interface PalletMultisigMultisig extends Struct { - readonly when: PalletMultisigTimepoint; - readonly deposit: u128; - readonly depositor: AccountId32; - readonly approvals: Vec; - } - - /** @name PalletMultisigError (440) */ - interface PalletMultisigError extends Enum { - readonly isMinimumThreshold: boolean; - readonly isAlreadyApproved: boolean; - readonly isNoApprovalsNeeded: boolean; - readonly isTooFewSignatories: boolean; - readonly isTooManySignatories: boolean; - readonly isSignatoriesOutOfOrder: boolean; - readonly isSenderInSignatories: boolean; - readonly isNotFound: boolean; - readonly isNotOwner: boolean; - readonly isNoTimepoint: boolean; - readonly isWrongTimepoint: boolean; - readonly isUnexpectedTimepoint: boolean; - readonly isMaxWeightTooLow: boolean; - readonly isAlreadyStored: boolean; - readonly type: 'MinimumThreshold' | 'AlreadyApproved' | 'NoApprovalsNeeded' | 'TooFewSignatories' | 'TooManySignatories' | 'SignatoriesOutOfOrder' | 'SenderInSignatories' | 'NotFound' | 'NotOwner' | 'NoTimepoint' | 'WrongTimepoint' | 'UnexpectedTimepoint' | 'MaxWeightTooLow' | 'AlreadyStored'; - } - - /** @name CtypeCtypeEntry (441) */ - interface CtypeCtypeEntry extends Struct { - readonly creator: AccountId32; - readonly createdAt: u64; - } - - /** @name CtypeError (442) */ - interface CtypeError extends Enum { - readonly isNotFound: boolean; - readonly isAlreadyExists: boolean; - readonly isUnableToPayFees: boolean; - readonly type: 'NotFound' | 'AlreadyExists' | 'UnableToPayFees'; - } - - /** @name AttestationAttestationsAttestationDetails (443) */ - interface AttestationAttestationsAttestationDetails extends Struct { - readonly ctypeHash: H256; - readonly attester: AccountId32; - readonly authorizationId: Option; - readonly revoked: bool; - readonly deposit: KiltSupportDeposit; - } - - /** @name KiltSupportDeposit (444) */ - interface KiltSupportDeposit extends Struct { - readonly owner: AccountId32; - readonly amount: u128; - } - - /** @name AttestationError (446) */ - interface AttestationError extends Enum { - readonly isAlreadyAttested: boolean; - readonly isAlreadyRevoked: boolean; - readonly isNotFound: boolean; - readonly isCTypeMismatch: boolean; - readonly isNotAuthorized: boolean; - readonly isMaxDelegatedAttestationsExceeded: boolean; - readonly type: 'AlreadyAttested' | 'AlreadyRevoked' | 'NotFound' | 'CTypeMismatch' | 'NotAuthorized' | 'MaxDelegatedAttestationsExceeded'; - } - - /** @name DelegationDelegationHierarchyDelegationNode (447) */ - interface DelegationDelegationHierarchyDelegationNode extends Struct { - readonly hierarchyRootId: H256; - readonly parent: Option; - readonly children: BTreeSet; - readonly details: DelegationDelegationHierarchyDelegationDetails; - readonly deposit: KiltSupportDeposit; - } - - /** @name RuntimeCommonConstantsDelegationMaxChildren (448) */ - type RuntimeCommonConstantsDelegationMaxChildren = Null; - - /** @name DelegationDelegationHierarchyDelegationDetails (449) */ - interface DelegationDelegationHierarchyDelegationDetails extends Struct { - readonly owner: AccountId32; - readonly revoked: bool; - readonly permissions: DelegationDelegationHierarchyPermissions; - } - - /** @name DelegationDelegationHierarchyDelegationHierarchyDetails (452) */ - interface DelegationDelegationHierarchyDelegationHierarchyDetails extends Struct { - readonly ctypeHash: H256; - } - - /** @name DelegationError (453) */ - interface DelegationError extends Enum { - readonly isDelegationAlreadyExists: boolean; - readonly isInvalidDelegateSignature: boolean; - readonly isDelegationNotFound: boolean; - readonly isDelegateNotFound: boolean; - readonly isHierarchyAlreadyExists: boolean; - readonly isHierarchyNotFound: boolean; - readonly isMaxSearchDepthReached: boolean; - readonly isNotOwnerOfParentDelegation: boolean; - readonly isNotOwnerOfDelegationHierarchy: boolean; - readonly isParentDelegationNotFound: boolean; - readonly isParentDelegationRevoked: boolean; - readonly isUnauthorizedRevocation: boolean; - readonly isUnauthorizedRemoval: boolean; - readonly isUnauthorizedDelegation: boolean; - readonly isAccessDenied: boolean; - readonly isExceededRevocationBounds: boolean; - readonly isExceededRemovalBounds: boolean; - readonly isMaxRevocationsTooLarge: boolean; - readonly isMaxRemovalsTooLarge: boolean; - readonly isMaxParentChecksTooLarge: boolean; - readonly isInternal: boolean; - readonly isMaxChildrenExceeded: boolean; - readonly type: 'DelegationAlreadyExists' | 'InvalidDelegateSignature' | 'DelegationNotFound' | 'DelegateNotFound' | 'HierarchyAlreadyExists' | 'HierarchyNotFound' | 'MaxSearchDepthReached' | 'NotOwnerOfParentDelegation' | 'NotOwnerOfDelegationHierarchy' | 'ParentDelegationNotFound' | 'ParentDelegationRevoked' | 'UnauthorizedRevocation' | 'UnauthorizedRemoval' | 'UnauthorizedDelegation' | 'AccessDenied' | 'ExceededRevocationBounds' | 'ExceededRemovalBounds' | 'MaxRevocationsTooLarge' | 'MaxRemovalsTooLarge' | 'MaxParentChecksTooLarge' | 'Internal' | 'MaxChildrenExceeded'; - } - - /** @name DidDidDetails (454) */ - interface DidDidDetails extends Struct { - readonly authenticationKey: H256; - readonly keyAgreementKeys: BTreeSet; - readonly delegationKey: Option; - readonly attestationKey: Option; - readonly publicKeys: BTreeMap; - readonly lastTxCounter: u64; - readonly deposit: KiltSupportDeposit; - } - - /** @name DidDidDetailsDidPublicKeyDetails (457) */ - interface DidDidDetailsDidPublicKeyDetails extends Struct { - readonly key: DidDidDetailsDidPublicKey; - readonly blockNumber: u64; - } - - /** @name DidDidDetailsDidPublicKey (458) */ - interface DidDidDetailsDidPublicKey extends Enum { - readonly isPublicVerificationKey: boolean; - readonly asPublicVerificationKey: DidDidDetailsDidVerificationKey; - readonly isPublicEncryptionKey: boolean; - readonly asPublicEncryptionKey: DidDidDetailsDidEncryptionKey; - readonly type: 'PublicVerificationKey' | 'PublicEncryptionKey'; - } - - /** @name DidError (463) */ - interface DidError extends Enum { - readonly isInvalidSignatureFormat: boolean; - readonly isInvalidSignature: boolean; - readonly isAlreadyExists: boolean; - readonly isNotFound: boolean; - readonly isVerificationKeyNotFound: boolean; - readonly isInvalidNonce: boolean; - readonly isUnsupportedDidAuthorizationCall: boolean; - readonly isInvalidDidAuthorizationCall: boolean; - readonly isMaxNewKeyAgreementKeysLimitExceeded: boolean; - readonly isMaxPublicKeysExceeded: boolean; - readonly isMaxKeyAgreementKeysExceeded: boolean; - readonly isBadDidOrigin: boolean; - readonly isTransactionExpired: boolean; - readonly isAlreadyDeleted: boolean; - readonly isNotOwnerOfDeposit: boolean; - readonly isUnableToPayFees: boolean; - readonly isMaxNumberOfServicesExceeded: boolean; - readonly isMaxServiceIdLengthExceeded: boolean; - readonly isMaxServiceTypeLengthExceeded: boolean; - readonly isMaxNumberOfTypesPerServiceExceeded: boolean; - readonly isMaxServiceUrlLengthExceeded: boolean; - readonly isMaxNumberOfUrlsPerServiceExceeded: boolean; - readonly isServiceAlreadyExists: boolean; - readonly isServiceNotFound: boolean; - readonly isInvalidServiceEncoding: boolean; - readonly isMaxStoredEndpointsCountExceeded: boolean; - readonly isInternal: boolean; - readonly type: 'InvalidSignatureFormat' | 'InvalidSignature' | 'AlreadyExists' | 'NotFound' | 'VerificationKeyNotFound' | 'InvalidNonce' | 'UnsupportedDidAuthorizationCall' | 'InvalidDidAuthorizationCall' | 'MaxNewKeyAgreementKeysLimitExceeded' | 'MaxPublicKeysExceeded' | 'MaxKeyAgreementKeysExceeded' | 'BadDidOrigin' | 'TransactionExpired' | 'AlreadyDeleted' | 'NotOwnerOfDeposit' | 'UnableToPayFees' | 'MaxNumberOfServicesExceeded' | 'MaxServiceIdLengthExceeded' | 'MaxServiceTypeLengthExceeded' | 'MaxNumberOfTypesPerServiceExceeded' | 'MaxServiceUrlLengthExceeded' | 'MaxNumberOfUrlsPerServiceExceeded' | 'ServiceAlreadyExists' | 'ServiceNotFound' | 'InvalidServiceEncoding' | 'MaxStoredEndpointsCountExceeded' | 'Internal'; - } - - /** @name PalletDidLookupConnectionRecord (464) */ - interface PalletDidLookupConnectionRecord extends Struct { - readonly did: AccountId32; - readonly deposit: KiltSupportDeposit; - } - - /** @name PalletDidLookupError (466) */ - interface PalletDidLookupError extends Enum { - readonly isNotFound: boolean; - readonly isNotAuthorized: boolean; - readonly isOutdatedProof: boolean; - readonly isInsufficientFunds: boolean; - readonly isMigration: boolean; - readonly type: 'NotFound' | 'NotAuthorized' | 'OutdatedProof' | 'InsufficientFunds' | 'Migration'; - } - - /** @name PalletWeb3NamesWeb3NameWeb3NameOwnership (467) */ - interface PalletWeb3NamesWeb3NameWeb3NameOwnership extends Struct { - readonly owner: AccountId32; - readonly claimedAt: u64; - readonly deposit: KiltSupportDeposit; - } - - /** @name PalletWeb3NamesError (468) */ - interface PalletWeb3NamesError extends Enum { - readonly isInsufficientFunds: boolean; - readonly isAlreadyExists: boolean; - readonly isNotFound: boolean; - readonly isOwnerAlreadyExists: boolean; - readonly isOwnerNotFound: boolean; - readonly isBanned: boolean; - readonly isNotBanned: boolean; - readonly isAlreadyBanned: boolean; - readonly isNotAuthorized: boolean; - readonly isTooShort: boolean; - readonly isTooLong: boolean; - readonly isInvalidCharacter: boolean; - readonly type: 'InsufficientFunds' | 'AlreadyExists' | 'NotFound' | 'OwnerAlreadyExists' | 'OwnerNotFound' | 'Banned' | 'NotBanned' | 'AlreadyBanned' | 'NotAuthorized' | 'TooShort' | 'TooLong' | 'InvalidCharacter'; - } - - /** @name PublicCredentialsCredentialsCredentialEntry (469) */ - interface PublicCredentialsCredentialsCredentialEntry extends Struct { - readonly ctypeHash: H256; - readonly attester: AccountId32; - readonly revoked: bool; - readonly blockNumber: u64; - readonly deposit: KiltSupportDeposit; - readonly authorizationId: Option; - } - - /** @name PublicCredentialsError (470) */ - interface PublicCredentialsError extends Enum { - readonly isAlreadyAttested: boolean; - readonly isNotFound: boolean; - readonly isUnableToPayFees: boolean; - readonly isInvalidInput: boolean; - readonly isNotAuthorized: boolean; - readonly isInternal: boolean; - readonly type: 'AlreadyAttested' | 'NotFound' | 'UnableToPayFees' | 'InvalidInput' | 'NotAuthorized' | 'Internal'; - } - - /** @name PalletMigrationError (471) */ - interface PalletMigrationError extends Enum { - readonly isKeyParse: boolean; - readonly type: 'KeyParse'; - } - - /** @name PolkadotPrimitivesV5UpgradeRestriction (473) */ - interface PolkadotPrimitivesV5UpgradeRestriction extends Enum { - readonly isPresent: boolean; - readonly type: 'Present'; - } - - /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (474) */ - interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct { - readonly dmqMqcHead: H256; - readonly relayDispatchQueueSize: CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize; - readonly ingressChannels: Vec>; - readonly egressChannels: Vec>; - } - - /** @name CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize (475) */ - interface CumulusPalletParachainSystemRelayStateSnapshotRelayDispachQueueSize extends Struct { - readonly remainingCount: u32; - readonly remainingSize: u32; - } - - /** @name PolkadotPrimitivesV5AbridgedHrmpChannel (478) */ - interface PolkadotPrimitivesV5AbridgedHrmpChannel extends Struct { - readonly maxCapacity: u32; - readonly maxTotalSize: u32; - readonly maxMessageSize: u32; - readonly msgCount: u32; - readonly totalSize: u32; - readonly mqcHead: Option; - } - - /** @name PolkadotPrimitivesV5AbridgedHostConfiguration (479) */ - interface PolkadotPrimitivesV5AbridgedHostConfiguration extends Struct { - readonly maxCodeSize: u32; - readonly maxHeadDataSize: u32; - readonly maxUpwardQueueCount: u32; - readonly maxUpwardQueueSize: u32; - readonly maxUpwardMessageSize: u32; - readonly maxUpwardMessageNumPerCandidate: u32; - readonly hrmpMaxMessageNumPerCandidate: u32; - readonly validationUpgradeCooldown: u32; - readonly validationUpgradeDelay: u32; - } - - /** @name PolkadotCorePrimitivesOutboundHrmpMessage (485) */ - interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct { - readonly recipient: u32; - readonly data: Bytes; - } - - /** @name CumulusPalletParachainSystemCodeUpgradeAuthorization (486) */ - interface CumulusPalletParachainSystemCodeUpgradeAuthorization extends Struct { - readonly codeHash: H256; - readonly checkVersion: bool; - } - - /** @name CumulusPalletParachainSystemError (487) */ - interface CumulusPalletParachainSystemError extends Enum { - readonly isOverlappingUpgrades: boolean; - readonly isProhibitedByPolkadot: boolean; - readonly isTooBig: boolean; - readonly isValidationDataNotAvailable: boolean; - readonly isHostConfigurationNotAvailable: boolean; - readonly isNotScheduled: boolean; - readonly isNothingAuthorized: boolean; - readonly isUnauthorized: boolean; - readonly type: 'OverlappingUpgrades' | 'ProhibitedByPolkadot' | 'TooBig' | 'ValidationDataNotAvailable' | 'HostConfigurationNotAvailable' | 'NotScheduled' | 'NothingAuthorized' | 'Unauthorized'; - } - - /** @name CumulusPalletXcmpQueueInboundChannelDetails (489) */ - interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct { - readonly sender: u32; - readonly state: CumulusPalletXcmpQueueInboundState; - readonly messageMetadata: Vec>; - } - - /** @name CumulusPalletXcmpQueueInboundState (490) */ - interface CumulusPalletXcmpQueueInboundState extends Enum { - readonly isOk: boolean; - readonly isSuspended: boolean; - readonly type: 'Ok' | 'Suspended'; - } - - /** @name PolkadotParachainPrimitivesXcmpMessageFormat (493) */ - interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum { - readonly isConcatenatedVersionedXcm: boolean; - readonly isConcatenatedEncodedBlob: boolean; - readonly isSignals: boolean; - readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals'; - } - - /** @name CumulusPalletXcmpQueueOutboundChannelDetails (496) */ - interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct { - readonly recipient: u32; - readonly state: CumulusPalletXcmpQueueOutboundState; - readonly signalsExist: bool; - readonly firstIndex: u16; - readonly lastIndex: u16; - } - - /** @name CumulusPalletXcmpQueueOutboundState (497) */ - interface CumulusPalletXcmpQueueOutboundState extends Enum { - readonly isOk: boolean; - readonly isSuspended: boolean; - readonly type: 'Ok' | 'Suspended'; - } - - /** @name CumulusPalletXcmpQueueQueueConfigData (499) */ - interface CumulusPalletXcmpQueueQueueConfigData extends Struct { - readonly suspendThreshold: u32; - readonly dropThreshold: u32; - readonly resumeThreshold: u32; - readonly thresholdWeight: SpWeightsWeightV2Weight; - readonly weightRestrictDecay: SpWeightsWeightV2Weight; - readonly xcmpMaxIndividualWeight: SpWeightsWeightV2Weight; - } - - /** @name CumulusPalletXcmpQueueError (501) */ - interface CumulusPalletXcmpQueueError extends Enum { - readonly isFailedToSend: boolean; - readonly isBadXcmOrigin: boolean; - readonly isBadXcm: boolean; - readonly isBadOverweightIndex: boolean; - readonly isWeightOverLimit: boolean; - readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit'; - } - - /** @name PalletXcmQueryStatus (502) */ - interface PalletXcmQueryStatus extends Enum { - readonly isPending: boolean; - readonly asPending: { - readonly responder: XcmVersionedMultiLocation; - readonly maybeMatchQuerier: Option; - readonly maybeNotify: Option>; - readonly timeout: u64; - } & Struct; - readonly isVersionNotifier: boolean; - readonly asVersionNotifier: { - readonly origin: XcmVersionedMultiLocation; - readonly isActive: bool; - } & Struct; - readonly isReady: boolean; - readonly asReady: { - readonly response: XcmVersionedResponse; - readonly at: u64; - } & Struct; - readonly type: 'Pending' | 'VersionNotifier' | 'Ready'; - } - - /** @name XcmVersionedResponse (506) */ - interface XcmVersionedResponse extends Enum { - readonly isV2: boolean; - readonly asV2: XcmV2Response; - readonly isV3: boolean; - readonly asV3: XcmV3Response; - readonly type: 'V2' | 'V3'; - } - - /** @name PalletXcmVersionMigrationStage (512) */ - interface PalletXcmVersionMigrationStage extends Enum { - readonly isMigrateSupportedVersion: boolean; - readonly isMigrateVersionNotifiers: boolean; - readonly isNotifyCurrentTargets: boolean; - readonly asNotifyCurrentTargets: Option; - readonly isMigrateAndNotifyOldTargets: boolean; - readonly type: 'MigrateSupportedVersion' | 'MigrateVersionNotifiers' | 'NotifyCurrentTargets' | 'MigrateAndNotifyOldTargets'; - } - - /** @name XcmVersionedAssetId (515) */ - interface XcmVersionedAssetId extends Enum { - readonly isV3: boolean; - readonly asV3: XcmV3MultiassetAssetId; - readonly type: 'V3'; - } - - /** @name PalletXcmRemoteLockedFungibleRecord (516) */ - interface PalletXcmRemoteLockedFungibleRecord extends Struct { - readonly amount: u128; - readonly owner: XcmVersionedMultiLocation; - readonly locker: XcmVersionedMultiLocation; - readonly consumers: Vec>; - } - - /** @name PalletXcmError (523) */ - interface PalletXcmError extends Enum { - readonly isUnreachable: boolean; - readonly isSendFailure: boolean; - readonly isFiltered: boolean; - readonly isUnweighableMessage: boolean; - readonly isDestinationNotInvertible: boolean; - readonly isEmpty: boolean; - readonly isCannotReanchor: boolean; - readonly isTooManyAssets: boolean; - readonly isInvalidOrigin: boolean; - readonly isBadVersion: boolean; - readonly isBadLocation: boolean; - readonly isNoSubscription: boolean; - readonly isAlreadySubscribed: boolean; - readonly isInvalidAsset: boolean; - readonly isLowBalance: boolean; - readonly isTooManyLocks: boolean; - readonly isAccountNotSovereign: boolean; - readonly isFeesNotMet: boolean; - readonly isLockNotFound: boolean; - readonly isInUse: boolean; - readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed' | 'InvalidAsset' | 'LowBalance' | 'TooManyLocks' | 'AccountNotSovereign' | 'FeesNotMet' | 'LockNotFound' | 'InUse'; - } - - /** @name CumulusPalletXcmError (524) */ - type CumulusPalletXcmError = Null; - - /** @name CumulusPalletDmpQueueConfigData (525) */ - interface CumulusPalletDmpQueueConfigData extends Struct { - readonly maxIndividual: SpWeightsWeightV2Weight; - } - - /** @name CumulusPalletDmpQueuePageIndexData (526) */ - interface CumulusPalletDmpQueuePageIndexData extends Struct { - readonly beginUsed: u32; - readonly endUsed: u32; - readonly overweightCount: u64; - } - - /** @name CumulusPalletDmpQueueError (529) */ - interface CumulusPalletDmpQueueError extends Enum { - readonly isUnknown: boolean; - readonly isOverLimit: boolean; - readonly type: 'Unknown' | 'OverLimit'; - } - - /** @name FrameSystemExtensionsCheckNonZeroSender (532) */ - type FrameSystemExtensionsCheckNonZeroSender = Null; - - /** @name FrameSystemExtensionsCheckSpecVersion (533) */ - type FrameSystemExtensionsCheckSpecVersion = Null; - - /** @name FrameSystemExtensionsCheckTxVersion (534) */ - type FrameSystemExtensionsCheckTxVersion = Null; - - /** @name FrameSystemExtensionsCheckGenesis (535) */ - type FrameSystemExtensionsCheckGenesis = Null; - - /** @name FrameSystemExtensionsCheckNonce (538) */ - interface FrameSystemExtensionsCheckNonce extends Compact {} - - /** @name FrameSystemExtensionsCheckWeight (539) */ - type FrameSystemExtensionsCheckWeight = Null; - - /** @name PalletTransactionPaymentChargeTransactionPayment (540) */ - interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} - -} // declare module diff --git a/packages/augment-api/src/interfaces/types.ts b/packages/augment-api/src/interfaces/types.ts deleted file mode 100644 index 5aa673d41..000000000 --- a/packages/augment-api/src/interfaces/types.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-defs`, do not edit -/* eslint-disable */ - -export * from './extraDefs/types.js'; diff --git a/packages/augment-api/src/types.ts b/packages/augment-api/src/types.ts deleted file mode 100644 index 92aebb0ee..000000000 --- a/packages/augment-api/src/types.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) 2018-2024, BOTLabs GmbH. - * - * This source code is licensed under the BSD 4-Clause "Original" license - * found in the LICENSE file in the root directory of this source tree. - */ - -import './interfaces/types-lookup.js' -/* eslint-disable import/no-extraneous-dependencies */ -export * from '@polkadot/types/lookup' -export * from './interfaces/index.js' diff --git a/packages/augment-api/tsconfig.build.json b/packages/augment-api/tsconfig.build.json deleted file mode 100644 index 4e30270ee..000000000 --- a/packages/augment-api/tsconfig.build.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./lib", - "declaration": true, - "emitDeclarationOnly": true, - "skipLibCheck": true, - "noUnusedLocals": false, - "paths": { - "@kiltprotocol/augment-api/extraDefs": [ - "./src/interfaces/extraDefs/index.ts" - ], - "@polkadot/api/augment": [ - "./src/interfaces/augment-api.ts" - ], - "@polkadot/types/augment": [ - "./src/interfaces/augment-types.ts" - ] - } - }, - "include": [ - "src/**/*.ts", - "src/**/*.js" - ], - "exclude": [ - "coverage", - "**/*.spec.ts", - "src/**/definitions.ts", - ], -} \ No newline at end of file diff --git a/packages/chain-helpers/package.json b/packages/chain-helpers/package.json index b7d48270c..24a3598e3 100644 --- a/packages/chain-helpers/package.json +++ b/packages/chain-helpers/package.json @@ -33,8 +33,15 @@ "rimraf": "^3.0.2", "typescript": "^4.8.3" }, + "peerDependencies": { + "@kiltprotocol/augment-api": "*" + }, + "peerDependenciesMeta": { + "@kiltprotocol/augment-api": { + "optional": true + } + }, "dependencies": { - "@kiltprotocol/augment-api": "workspace:^", "@kiltprotocol/config": "workspace:*", "@kiltprotocol/type-definitions": "workspace:*", "@kiltprotocol/types": "workspace:*", diff --git a/packages/chain-helpers/src/blockchain/Blockchain.ts b/packages/chain-helpers/src/blockchain/Blockchain.ts index 24884b280..37812a189 100644 --- a/packages/chain-helpers/src/blockchain/Blockchain.ts +++ b/packages/chain-helpers/src/blockchain/Blockchain.ts @@ -5,15 +5,14 @@ * found in the LICENSE file in the root directory of this source tree. */ -import '@kiltprotocol/augment-api' - import type { ApiPromise } from '@polkadot/api' import type { TxWithEvent } from '@polkadot/api-derive/types' import type { Vec } from '@polkadot/types' import type { Call, Extrinsic } from '@polkadot/types/interfaces' import type { AnyNumber, IMethod } from '@polkadot/types/types' import type { BN } from '@polkadot/util' - +// eslint-disable-next-line @typescript-eslint/no-unused-vars -- doing this instead of import '@kiltprotocol/augment-api' to avoid creating an import at runtime +import type * as _ from '@kiltprotocol/augment-api' import type { ISubmittableResult, KeyringPair, diff --git a/packages/credentials/package.json b/packages/credentials/package.json index d3865dce9..b86931895 100644 --- a/packages/credentials/package.json +++ b/packages/credentials/package.json @@ -34,8 +34,10 @@ "rimraf": "^3.0.2", "typescript": "^4.8.3" }, + "peerDependencies": { + "@kiltprotocol/augment-api": "*" + }, "dependencies": { - "@kiltprotocol/augment-api": "workspace:*", "@kiltprotocol/chain-helpers": "workspace:*", "@kiltprotocol/config": "workspace:*", "@kiltprotocol/did": "workspace:*", @@ -51,5 +53,10 @@ "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0", "json-pointer": "^0.6.2" + }, + "peerDependenciesMeta": { + "@kiltprotocol/augment-api": { + "optional": true + } } } diff --git a/packages/did/package.json b/packages/did/package.json index 7659b83ec..a9c808721 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -33,10 +33,12 @@ "rimraf": "^3.0.2", "typescript": "^4.8.3" }, + "peerDependencies": { + "@kiltprotocol/augment-api": "*" + }, "dependencies": { "@digitalbazaar/multikey-context": "^2.0.1", "@digitalbazaar/security-context": "^1.0.0", - "@kiltprotocol/augment-api": "workspace:*", "@kiltprotocol/config": "workspace:*", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", @@ -46,5 +48,10 @@ "@polkadot/util": "^12.0.0", "@polkadot/util-crypto": "^12.0.0", "multibase": "^4.0.6" + }, + "peerDependenciesMeta": { + "@kiltprotocol/augment-api": { + "optional": true + } } } diff --git a/packages/jsonld-suites/src/suites/KiltAttestationProofV1.spec.ts b/packages/jsonld-suites/src/suites/KiltAttestationProofV1.spec.ts index 5d239db80..1b0a5c77a 100644 --- a/packages/jsonld-suites/src/suites/KiltAttestationProofV1.spec.ts +++ b/packages/jsonld-suites/src/suites/KiltAttestationProofV1.spec.ts @@ -97,7 +97,7 @@ const revokedVc = KiltAttestationProofV1.finalizeProof( jest.mocked(mockedApi.query.attestation.attestations).mockImplementation( // @ts-expect-error - async (claimHash) => { + async (claimHash: string) => { if (u8aEq(claimHash, KiltCredentialV1.idToRootHash(attestedVc.id))) { return mockedApi.createType( 'Option', diff --git a/packages/sdk-js/package.json b/packages/sdk-js/package.json index cc56acd51..fd0c821bc 100644 --- a/packages/sdk-js/package.json +++ b/packages/sdk-js/package.json @@ -32,6 +32,7 @@ "bugs": "https://github.com/KILTprotocol/sdk-js/issues", "homepage": "https://github.com/KILTprotocol/sdk-js#readme", "devDependencies": { + "@kiltprotocol/augment-api": "1.11210.0-rc", "rimraf": "^3.0.2", "terser-webpack-plugin": "^5.1.1", "typescript": "^4.8.3", @@ -43,6 +44,10 @@ "@kiltprotocol/config": "workspace:*", "@kiltprotocol/credentials": "workspace:*", "@kiltprotocol/did": "workspace:*", - "@kiltprotocol/utils": "workspace:*" + "@kiltprotocol/utils": "workspace:*", + "@polkadot/typegen": "^10.7.3" + }, + "peerDependencies": { + "@kiltprotocol/augment-api": "^1.11210.0" } } diff --git a/tests/testUtils/metadata/spiritnet.json b/tests/testUtils/metadata/spiritnet.json new file mode 100644 index 000000000..ed4d460bb --- /dev/null +++ b/tests/testUtils/metadata/spiritnet.json @@ -0,0 +1 @@ +"0x6d6574610e7508000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273200120526566436f756e7400012470726f766964657273200120526566436f756e7400012c73756666696369656e7473200120526566436f756e740001106461746114012c4163636f756e74446174610000100000050600140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200000050500240c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540128000c01186e6f726d616c2801045400012c6f7065726174696f6e616c280104540001246d616e6461746f7279280104540000280c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d652c010c75363400012870726f6f665f73697a652c010c75363400002c000006100030083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000034000002080038102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f67733c013c5665633c4469676573744974656d3e00003c000002400040102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e00060024436f6e73656e7375730800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000400105365616c0800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000500144f74686572040034011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e74557064617465640008000044000003040000000800480000024c004c08306672616d655f73797374656d2c4576656e745265636f7264080445015004540130000c01147068617365c502011450686173650001146576656e7450010445000118746f70696373b10101185665633c543e00005008447370697269746e65745f72756e74696d653052756e74696d654576656e740001801853797374656d04005401706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c496e6469636573040078017870616c6c65745f696e64696365733a3a4576656e743c52756e74696d653e0005002042616c616e63657304007c017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000600485472616e73616374696f6e5061796d656e7404008401a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0007001c53657373696f6e040088015470616c6c65745f73657373696f6e3a3a4576656e740016004050617261636861696e5374616b696e6704008c018470617261636861696e5f7374616b696e673a3a4576656e743c52756e74696d653e0015002444656d6f6372616379040094018070616c6c65745f64656d6f63726163793a3a4576656e743c52756e74696d653e001e001c436f756e63696c0400a801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400b801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020004c546563686e6963616c4d656d626572736869700400bc01fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365313e0022002054726561737572790400c0017c70616c6c65745f74726561737572793a3a4576656e743c52756e74696d653e0023001c5574696c6974790400c4015470616c6c65745f7574696c6974793a3a4576656e740028001c56657374696e670400c8017870616c6c65745f76657374696e673a3a4576656e743c52756e74696d653e002900245363686564756c65720400cc018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e002a001450726f78790400d8017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e002b0020507265696d6167650400e4017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e002c0038546970734d656d626572736869700400e801fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365323e002d0010546970730400ec016c70616c6c65745f746970733a3a4576656e743c52756e74696d653e002e00204d756c74697369670400f0017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e002f001443747970650400f8015463747970653a3a4576656e743c52756e74696d653e003d002c4174746573746174696f6e0400fc016c6174746573746174696f6e3a3a4576656e743c52756e74696d653e003e002844656c65676174696f6e04000901016864656c65676174696f6e3a3a4576656e743c52756e74696d653e003f000c44696404001101014c6469643a3a4576656e743c52756e74696d653e004000244469644c6f6f6b757004001501018470616c6c65745f6469645f6c6f6f6b75703a3a4576656e743c52756e74696d653e00430024576562334e616d657304002501018470616c6c65745f776562335f6e616d65733a3a4576656e743c52756e74696d653e004400445075626c696343726564656e7469616c730400310101887075626c69635f63726564656e7469616c733a3a4576656e743c52756e74696d653e004500244d6967726174696f6e0400a101018070616c6c65745f6d6967726174696f6e3a3a4576656e743c52756e74696d653e0046003c50617261636861696e53797374656d0400d90101bc63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d3a3a4576656e743c52756e74696d653e0050002458636d7051756575650400dd0101a463756d756c75735f70616c6c65745f78636d705f71756575653a3a4576656e743c52756e74696d653e0052002c506f6c6b61646f7458636d0400e901016870616c6c65745f78636d3a3a4576656e743c52756e74696d653e0053002843756d756c757358636d0400bd02018863756d756c75735f70616c6c65745f78636d3a3a4576656e743c52756e74696d653e00540020446d7051756575650400c10201a063756d756c75735f70616c6c65745f646d705f71756575653a3a4576656e743c52756e74696d653e00550000540c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5801304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7264013444697370617463684572726f7200013464697370617463685f696e666f5801304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736830011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e580c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874280118576569676874000114636c6173735c01344469737061746368436c617373000120706179735f6665656001105061797300005c0c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000600c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000064082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040068012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e04006c0128546f6b656e4572726f720007002841726974686d65746963040070013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007401485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d000068082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7244018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d00006c082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000070083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000074082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000780c3870616c6c65745f696e64696365731870616c6c6574144576656e7404045400010c34496e64657841737369676e656408010c77686f000130543a3a4163636f756e744964000114696e64657810013c543a3a4163636f756e74496e6465780000047441206163636f756e7420696e646578207761732061737369676e65642e28496e6465784672656564040114696e64657810013c543a3a4163636f756e74496e646578000104bc41206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e2c496e64657846726f7a656e080114696e64657810013c543a3a4163636f756e74496e64657800010c77686f000130543a3a4163636f756e744964000204e841206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e047c54686520604576656e746020656e756d206f6620746869732070616c6c65747c0c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001541c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475738001185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748014346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000840c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574880c3870616c6c65745f73657373696f6e1870616c6c6574144576656e74000104284e657753657373696f6e04013473657373696f6e5f696e64657820013053657373696f6e496e64657800000839014e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f74207468659c626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748c0c4470617261636861696e5f7374616b696e671870616c6c6574144576656e74040454000154204e6577526f756e640800100144426c6f636b4e756d626572466f723c543e000020013053657373696f6e496e6465780000088041206e6577207374616b696e6720726f756e642068617320737461727465642e785c5b626c6f636b206e756d6265722c20726f756e64206e756d6265725c5d50456e7465726564546f7043616e646964617465730400000130543a3a4163636f756e744964000108cc41206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d444c656674546f7043616e646964617465730400000130543a3a4163636f756e744964000208d8416e206163636f756e74207761732072656d6f7665642066726f6d2074686520736574206f6620746f702063616e646964617465732e2c5c5b6163636f756e745c5d604a6f696e6564436f6c6c61746f7243616e646964617465730800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000308e041206e6577206163636f756e7420686173206a6f696e65642074686520736574206f6620636f6c6c61746f722063616e646964617465732ebc5c5b6163636f756e742c20616d6f756e74207374616b656420627920746865206e65772063616e6469646174655c5d48436f6c6c61746f725374616b65644d6f72650c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00040801014120636f6c6c61746f722063616e6469646174652068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d48436f6c6c61746f725374616b65644c6573730c00000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00050801014120636f6c6c61746f722063616e64696461746520686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b652ec45c5b636f6c6c61746f722773206163636f756e742c2070726576696f7573207374616b652c206e6577207374616b655c5d54436f6c6c61746f725363686564756c6564457869740c0020013053657373696f6e496e6465780000000130543a3a4163636f756e744964000020013053657373696f6e496e64657800061001014120636f6c6c61746f722063616e646964617465206861732073746172746564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e646964617465732e205c5b726f756e64206e756d6265722c20636f6c6c61746f722773206163636f756e742c20726f756e64206e756d626572207768656ee074686520636f6c6c61746f722077696c6c206265206566666563746976656c792072656d6f7665642066726f6d2074686520736574206f663063616e646964617465735c5d50436f6c6c61746f7243616e63656c6564457869740400000130543a3a4163636f756e74496400070c05014120636f6c6c61746f722063616e646964617465206861732063616e63656c6564207468652070726f6365737320746f206c656176652074686520736574206f66050163616e6469646174657320616e6420776173206164646564206261636b20746f207468652063616e64696461746520706f6f6c2e205c5b636f6c6c61746f722773246163636f756e745c5d3443616e6469646174654c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000808cc416e206163636f756e7420686173206c6566742074686520736574206f6620636f6c6c61746f722063616e646964617465732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d3c436f6c6c61746f7252656d6f7665640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000908e4416e206163636f756e742077617320666f726365646c792072656d6f7665642066726f6d207468652020736574206f6620636f6c6c61746f72c863616e646964617465732e205c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d604d617843616e6469646174655374616b654368616e676564040018013042616c616e63654f663c543e000a08b4546865206d6178696d756d2063616e646964617465207374616b6520686173206265656e206368616e6765642e485c5b6e6577206d617820616d6f756e745c5d4c44656c656761746f725374616b65644d6f72651000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000b0cf0412064656c656761746f722068617320696e637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d4c44656c656761746f725374616b65644c6573731000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e000c0cf0412064656c656761746f7220686173206465637265617365642074686520616d6f756e74206f662066756e6473206174207374616b6520666f722061f4636f6c6c61746f722e205c5b64656c656761746f722773206163636f756e742c20636f6c6c61746f722773206163636f756e742c2070726576696f7573a064656c65676174696f6e207374616b652c206e65772064656c65676174696f6e207374616b655c5d3444656c656761746f724c6566740800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000d08a8416e206163636f756e7420686173206c6566742074686520736574206f662064656c656761746f72732e985c5b6163636f756e742c20616d6f756e74206f662066756e647320756e2d7374616b65645c5d2844656c65676174696f6e1000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000e0cc8416e206163636f756e74206861732064656c6567617465642061206e657720636f6c6c61746f722063616e6469646174652e11015c5b6163636f756e742c20616d6f756e74206f662066756e6473207374616b65642c20746f74616c20616d6f756e74206f662064656c656761746f7273272066756e64738c7374616b656420666f722074686520636f6c6c61746f722063616e6469646174655c5d4844656c65676174696f6e5265706c616365641800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e0000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000f180d0141206e65772064656c65676174696f6e20686173207265706c6163656420616e206578697374696e67206f6e6520696e2074686520736574206f66206f6e676f696e67010164656c65676174696f6e7320666f72206120636f6c6c61746f722063616e6469646174652e205c5b6e65772064656c656761746f722773206163636f756e742c0901616d6f756e74206f662066756e6473207374616b656420696e20746865206e65772064656c65676174696f6e2c207265706c616365642064656c656761746f7227730d016163636f756e742c20616d6f756e74206f662066756e6473207374616b656420696e20746865207265706c6163652064656c65676174696f6e2c20636f6c6c61746f72050163616e6469646174652773206163636f756e742c206e657720746f74616c20616d6f756e74206f662064656c656761746f7273272066756e6473207374616b656470666f722074686520636f6c6c61746f722063616e6469646174655c5d5444656c656761746f724c656674436f6c6c61746f721000000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e000018013042616c616e63654f663c543e00100cdc416e206163636f756e74206861732073746f707065642064656c65676174696e67206120636f6c6c61746f722063616e6469646174652e09015c5b6163636f756e742c20636f6c6c61746f722063616e6469646174652773206163636f756e742c206f6c6420616d6f756e74206f662064656c656761746f727327d866756e6473207374616b65642c206e657720616d6f756e74206f662064656c656761746f7273272066756e6473207374616b65645c5d2052657761726465640800000130543a3a4163636f756e744964000018013042616c616e63654f663c543e001108c04120636f6c6c61746f72206f7220612064656c656761746f72206861732072656365697665642061207265776172642e745c5b6163636f756e742c20616d6f756e74206f66207265776172645c5d44526f756e64496e666c6174696f6e536574100090012c5065727175696e74696c6c000090012c5065727175696e74696c6c000090012c5065727175696e74696c6c000090012c5065727175696e74696c6c00120c0501496e666c6174696f6e20636f6e66696775726174696f6e20666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e09015c5b6d6178696d756d20636f6c6c61746f722773207374616b696e6720726174652c206d6178696d756d20636f6c6c61746f7227732072657761726420726174652c0d016d6178696d756d2064656c656761746f722773207374616b696e6720726174652c206d6178696d756d2064656c656761746f7227732072657761726420726174655c5d604d617853656c656374656443616e64696461746573536574080020010c753332000020010c753332001308f0546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c656374656420696e20667574757265dc76616c69646174696f6e20726f756e647320686173206368616e6765642e205c5b6f6c642076616c75652c206e65772076616c75655c5d44426c6f636b73506572526f756e64536574100020013053657373696f6e496e6465780000100144426c6f636b4e756d626572466f723c543e0000100144426c6f636b4e756d626572466f723c543e0000100144426c6f636b4e756d626572466f723c543e00140cf8546865206c656e67746820696e20626c6f636b7320666f72206675747572652076616c69646174696f6e20726f756e647320686173206368616e6765642e01015c5b726f756e64206e756d6265722c20666972737420626c6f636b20696e207468652063757272656e7420726f756e642c206f6c642076616c75652c206e65771c76616c75655c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574900c3473705f61726974686d65746963287065725f7468696e67732c5065727175696e74696c6c0000040010010c7536340000940c4070616c6c65745f64656d6f63726163791870616c6c6574144576656e740404540001442050726f706f73656408013870726f706f73616c5f696e64657820012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000004bc41206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e185461626c656408013870726f706f73616c5f696e64657820012450726f70496e64657800011c6465706f73697418013042616c616e63654f663c543e000104d841207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e3845787465726e616c5461626c656400020494416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e1c537461727465640801247265665f696e64657820013c5265666572656e64756d496e6465780001247468726573686f6c64980134566f74655468726573686f6c640003045c41207265666572656e64756d2068617320626567756e2e185061737365640401247265665f696e64657820013c5265666572656e64756d496e646578000404ac412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e244e6f745061737365640401247265665f696e64657820013c5265666572656e64756d496e646578000504ac412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e2443616e63656c6c65640401247265665f696e64657820013c5265666572656e64756d496e6465780006048041207265666572656e64756d20686173206265656e2063616e63656c6c65642e2444656c65676174656408010c77686f000130543a3a4163636f756e744964000118746172676574000130543a3a4163636f756e744964000704dc416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e2c556e64656c65676174656404011c6163636f756e74000130543a3a4163636f756e744964000804e4416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e185665746f65640c010c77686f000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011048323536000114756e74696c100144426c6f636b4e756d626572466f723c543e00090494416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e2c426c61636b6c697374656404013470726f706f73616c5f6861736830011048323536000a04c4412070726f706f73616c5f6861736820686173206265656e20626c61636b6c6973746564207065726d616e656e746c792e14566f7465640c0114766f746572000130543a3a4163636f756e7449640001247265665f696e64657820013c5265666572656e64756d496e646578000110766f74659c01644163636f756e74566f74653c42616c616e63654f663c543e3e000b0490416e206163636f756e742068617320766f74656420696e2061207265666572656e64756d205365636f6e6465640801207365636f6e646572000130543a3a4163636f756e74496400012870726f705f696e64657820012450726f70496e646578000c048c416e206163636f756e742068617320736563636f6e64656420612070726f706f73616c4050726f706f73616c43616e63656c656404012870726f705f696e64657820012450726f70496e646578000d0460412070726f706f73616c20676f742063616e63656c65642e2c4d657461646174615365740801146f776e6572a401344d657461646174614f776e6572043c4d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e0e04d44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e207365742e3c4d65746164617461436c65617265640801146f776e6572a401344d657461646174614f776e6572043c4d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e0f04e44d6574616461746120666f7220612070726f706f73616c206f722061207265666572656e64756d20686173206265656e20636c65617265642e4c4d657461646174615472616e736665727265640c0128707265765f6f776e6572a401344d657461646174614f776e6572046050726576696f7573206d65746164617461206f776e65722e01146f776e6572a401344d657461646174614f776e6572044c4e6577206d65746164617461206f776e65722e011068617368300130507265696d616765486173680438507265696d61676520686173682e1004ac4d6574616461746120686173206265656e207472616e7366657272656420746f206e6577206f776e65722e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574980c4070616c6c65745f64656d6f637261637938766f74655f7468726573686f6c6434566f74655468726573686f6c6400010c5053757065724d616a6f72697479417070726f76650000005053757065724d616a6f72697479416761696e73740001003853696d706c654d616a6f72697479000200009c0c4070616c6c65745f64656d6f637261637910766f74652c4163636f756e74566f7465041c42616c616e636501180108205374616e64617264080110766f7465a00110566f746500011c62616c616e636518011c42616c616e63650000001453706c697408010c61796518011c42616c616e636500010c6e617918011c42616c616e636500010000a00c4070616c6c65745f64656d6f637261637910766f746510566f74650000040008000000a40c4070616c6c65745f64656d6f6372616379147479706573344d657461646174614f776e657200010c2045787465726e616c0000002050726f706f73616c040020012450726f70496e646578000100285265666572656e64756d040020013c5265666572656e64756d496e64657800020000a80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6420012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f746564ac0110626f6f6c00010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ac0000050000b00418526573756c7408045401b4044501640108084f6b0400b4000000000c4572720400640000010000b40000040000b80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e74496400013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800013470726f706f73616c5f6861736830011c543a3a486173680001247468726573686f6c6420012c4d656d626572436f756e74000008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e74496400013470726f706f73616c5f6861736830011c543a3a48617368000114766f746564ac0110626f6f6c00010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e74000108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736830011c543a3a48617368000304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c74000404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736830011c543a3a48617368000118726573756c74b001384469737061746368526573756c740005044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736830011c543a3a4861736800010c79657320012c4d656d626572436f756e740001086e6f20012c4d656d626572436f756e740006045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574bc0c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c00c3c70616c6c65745f74726561737572791870616c6c6574144576656e740804540004490001242050726f706f73656404013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000004344e65772070726f706f73616c2e205370656e64696e670401406275646765745f72656d61696e696e6718013c42616c616e63654f663c542c20493e000104e45765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e1c417761726465640c013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000114617761726418013c42616c616e63654f663c542c20493e00011c6163636f756e74000130543a3a4163636f756e7449640002047c536f6d652066756e64732068617665206265656e20616c6c6f63617465642e2052656a656374656408013870726f706f73616c5f696e64657820013450726f706f73616c496e64657800011c736c617368656418013c42616c616e63654f663c542c20493e000304b0412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e144275726e7404012c6275726e745f66756e647318013c42616c616e63654f663c542c20493e00040488536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20526f6c6c6f766572040140726f6c6c6f7665725f62616c616e636518013c42616c616e63654f663c542c20493e0005042d015370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e1c4465706f73697404011476616c756518013c42616c616e63654f663c542c20493e0006047c536f6d652066756e64732068617665206265656e206465706f73697465642e345370656e64417070726f7665640c013870726f706f73616c5f696e64657820013450726f706f73616c496e646578000118616d6f756e7418013c42616c616e63654f663c542c20493e00012c62656e6566696369617279000130543a3a4163636f756e7449640007049c41206e6577207370656e642070726f706f73616c20686173206265656e20617070726f7665642e3c55706461746564496e61637469766508012c726561637469766174656418013c42616c616e63654f663c542c20493e00012c646561637469766174656418013c42616c616e63654f663c542c20493e000804cc54686520696e6163746976652066756e6473206f66207468652070616c6c65742068617665206265656e20757064617465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c40c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657820010c7533320001146572726f7264013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7264013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74b001384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c80c3870616c6c65745f76657374696e671870616c6c6574144576656e740404540001083856657374696e675570646174656408011c6163636f756e74000130543a3a4163636f756e744964000120756e76657374656418013042616c616e63654f663c543e000008510154686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e6469636174652061206368616e676520696e2066756e647320617661696c61626c652e25015468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e4056657374696e67436f6d706c6574656404011c6163636f756e74000130543a3a4163636f756e7449640001049c416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cc0c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000118245363686564756c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657820010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657820010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736bd001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964d401404f7074696f6e3c5461736b4e616d653e000118726573756c74b001384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736bd001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964d401404f7074696f6e3c5461736b4e616d653e00030429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736bd001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964d401404f7074696f6e3c5461736b4e616d653e0004043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e545065726d616e656e746c794f7665727765696768740801107461736bd001785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964d401404f7074696f6e3c5461736b4e616d653e000504f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652ed000000408102000d404184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000d80c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74b001384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e646578e0010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736830013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00040450412070726f7879207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574dc08447370697269746e65745f72756e74696d652450726f7879547970650001180c416e790000002c4e6f6e5472616e7366657200010028476f7665726e616e63650002004050617261636861696e5374616b696e670003002c43616e63656c50726f7879000400484e6f6e4465706f736974436c61696d696e6700050000e00000050400e40c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f7465640401106861736830011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e245265717565737465640401106861736830011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c65617265640401106861736830011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e80c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ec0c2c70616c6c65745f746970731870616c6c6574144576656e74080454000449000114184e65775469700401207469705f6861736830011c543a3a486173680000049441206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e28546970436c6f73696e670401207469705f6861736830011c543a3a48617368000104d841207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e24546970436c6f7365640c01207469705f6861736830011c543a3a4861736800010c77686f000130543a3a4163636f756e7449640001187061796f757418013c42616c616e63654f663c542c20493e0002048441207469702073756767657374696f6e20686173206265656e20636c6f7365642e305469705265747261637465640401207469705f6861736830011c543a3a486173680003049041207469702073756767657374696f6e20686173206265656e207265747261637465642e28546970536c61736865640c01207469705f6861736830011c543a3a4861736800011866696e646572000130543a3a4163636f756e74496400011c6465706f73697418013c42616c616e63654f663c542c20493e0004048841207469702073756767657374696f6e20686173206265656e20736c61736865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f00c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c74b001384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e74f4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f4083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657820010c7533320000f80c1463747970651870616c6c6574144576656e74040454000108304354797065437265617465640800000144437479706543726561746f724f663c543e00003001384374797065486173684f663c543e0000087441206e657720435479706520686173206265656e20637265617465642e885c5b63726561746f72206964656e7469666965722c20435479706520686173685c5d3043547970655570646174656404003001384374797065486173684f663c543e000108ac496e666f726d6174696f6e2061626f7574206120435479706520686173206265656e20757064617465642e385c5b435479706520686173685c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574fc0c2c6174746573746174696f6e1870616c6c6574144576656e74040454000110484174746573746174696f6e43726561746564100000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00003001384374797065486173684f663c543e0000010101704f7074696f6e3c417574686f72697a6174696f6e49644f663c543e3e0000088c41206e6577206174746573746174696f6e20686173206265656e20637265617465642e05015c5b61747465737465722049442c20636c61696d20686173682c20435479706520686173682c20286f7074696f6e616c292064656c65676174696f6e2049445c5d484174746573746174696f6e5265766f6b6564080000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00010880416e206174746573746174696f6e20686173206265656e207265766f6b65642e685c5b6163636f756e742069642c20636c61696d20686173685c5d484174746573746174696f6e52656d6f766564080000013441747465737465724f663c543e0000300138436c61696d486173684f663c543e00020880416e206174746573746174696f6e20686173206265656e2072656d6f7665642e685c5b6163636f756e742069642c20636c61696d20686173685c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e0000300138436c61696d486173684f663c543e0003080501546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720616e206174746573746174696f6e2e685c5b6163636f756e742069642c20636c61696d20686173685c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574010104184f7074696f6e0404540105010108104e6f6e6500000010536f6d6504000501000001000005010c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c417574686f72697a6174696f6e4964043044656c65676174696f6e4964013001042844656c65676174696f6e040030013044656c65676174696f6e49640000000009010c2864656c65676174696f6e1870616c6c6574144576656e7404045400011c40486965726172636879437265617465640c0000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00003001384374797065486173684f663c543e0000088441206e65772068696572617263687920686173206265656e20637265617465642ea05c5b63726561746f722049442c20726f6f74206e6f64652049442c20435459504520686173685c5d404869657261726368795265766f6b6564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00010874412068696572617263687920686173206265656e207265766f6b65642e705c5b7265766f6b65722049442c20726f6f74206e6f64652049445c5d4048696572617263687952656d6f766564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000208dc412068696572617263687920686173206265656e2072656d6f7665642066726f6d207468652073746f72616765206f6e20636861696e2e705c5b72656d6f7665722049442c20726f6f74206e6f64652049445c5d4444656c65676174696f6e43726561746564180000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000000014044656c656761746f7249644f663c543e00000d01012c5065726d697373696f6e7300030c8841206e65772064656c65676174696f6e20686173206265656e20637265617465642efc5c5b63726561746f722049442c20726f6f74206e6f64652049442c2064656c65676174696f6e206e6f64652049442c20706172656e74206e6f64652049442c6864656c65676174652049442c207065726d697373696f6e735c5d4444656c65676174696f6e5265766f6b6564080000014044656c656761746f7249644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00040878412064656c65676174696f6e20686173206265656e207265766f6b65642e885c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d4444656c65676174696f6e52656d6f76656408000001384163636f756e7449644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e00050878412064656c65676174696f6e20686173206265656e2072656d6f7665642e885c5b72656d6f7665722049442c2064656c65676174696f6e206e6f64652049445c5d404465706f7369745265636c61696d656408000001384163636f756e7449644f663c543e000030015444656c65676174696f6e4e6f646549644f663c543e000608f8546865206465706f736974206f776e6572207265636c61696d65642061206465706f7369742062792072656d6f76696e6720612064656c65676174696f6eac737562747265652e205c5b7265766f6b65722049442c2064656c65676174696f6e206e6f64652049445c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c65740d010c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368792c5065726d697373696f6e7300000401106269747320010c753332000011010c0c6469641870616c6c6574144576656e74040454000110284469644372656174656408000001384163636f756e7449644f663c543e00000001484469644964656e7469666965724f663c543e0000086c41206e65772044494420686173206265656e20637265617465642e985c5b7472616e73616374696f6e207369676e65722c20444944206964656e7469666965725c5d284469645570646174656404000001484469644964656e7469666965724f663c543e0001085c412044494420686173206265656e20757064617465642e485c5b444944206964656e7469666965725c5d2844696444656c6574656404000001484469644964656e7469666965724f663c543e0002085c412044494420686173206265656e2064656c657465642e485c5b444944206964656e7469666965725c5d4444696443616c6c4469737061746368656408000001484469644964656e7469666965724f663c543e0000b001384469737061746368526573756c74000308a041204449442d617574686f72697365642063616c6c20686173206265656e2065786563757465642e7c5c5b4449442063616c6c65722c20646973706174636820726573756c745c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c657415010c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144576656e74040454000110584173736f63696174696f6e45737461626c69736865640800190101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000004f841206e6577206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e742049442077617320637265617465642e484173736f63696174696f6e52656d6f7665640800190101444c696e6b61626c654163636f756e74496400000001484469644964656e7469666965724f663c543e000104ec416e206173736f63696174696f6e206265747765656e20612044494420616e6420616e206163636f756e74204944207761732072656d6f7665642e444d6967726174696f6e50726f6772657373000204c454686572652077617320736f6d652070726f677265737320696e20746865206d6967726174696f6e2070726f636573732e484d6967726174696f6e436f6d706c65746564000304dc416c6c204163636f756e744964732068617665206265656e206d6967726174656420746f204c696e6b61626c654163636f756e7449642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657419010c4470616c6c65745f6469645f6c6f6f6b7570406c696e6b61626c655f6163636f756e74444c696e6b61626c654163636f756e7449640001082c4163636f756e744964323004001d01012c4163636f756e74496432300000002c4163636f756e7449643332040000012c4163636f756e7449643332000100001d010c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e742c4163636f756e744964323000000400210101205b75383b2032305d0000210100000314000000080025010c4470616c6c65745f776562335f6e616d65731870616c6c6574144576656e740404540001103c576562334e616d65436c61696d65640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6529010134576562334e616d654f663c543e0000047041206e6577206e616d6520686173206265656e20636c61696d65642e40576562334e616d6552656c65617365640801146f776e6572000148576562334e616d654f776e65724f663c543e0001106e616d6529010134576562334e616d654f663c543e0001046441206e616d6520686173206265656e2072656c65617365642e38576562334e616d6542616e6e65640401106e616d6529010134576562334e616d654f663c543e0002045c41206e616d6520686173206265656e2062616e6e65642e40576562334e616d65556e62616e6e65640401106e616d6529010134576562334e616d654f663c543e0003046441206e616d6520686173206265656e20756e62616e6e65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657429010c4470616c6c65745f776562335f6e616d657324776562335f6e616d65344173636969576562334e616d65040454000004002d010180426f756e6465645665633c75382c20543a3a4d61784e616d654c656e6774683e00002d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000031010c487075626c69635f63726564656e7469616c731870616c6c6574144576656e740404540001104043726564656e7469616c53746f7265640801287375626a6563745f696435010130543a3a5375626a65637449640488546865207375626a656374206f6620746865206e65772063726564656e7469616c2e013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0474546865206964206f6620746865206e65772063726564656e7469616c2e0004a041206e6577207075626c69632063726564656e7469616c20686173206265656e206973737565642e4443726564656e7469616c52656d6f7665640801287375626a6563745f696435010130543a3a5375626a65637449640498546865207375626a656374206f66207468652072656d6f7665642063726564656e7469616c2e013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0484546865206964206f66207468652072656d6f7665642063726564656e7469616c2e01049841207075626c69632063726564656e7469616c7320686173206265656e2072656d6f7665642e4443726564656e7469616c5265766f6b656404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0484546865206964206f6620746865207265766f6b65642063726564656e7469616c2e02049441207075626c69632063726564656e7469616c20686173206265656e207265766f6b65642e4c43726564656e7469616c556e7265766f6b656404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e048c546865206964206f662074686520756e7265766f6b65642063726564656e7469616c2e03049c41207075626c69632063726564656e7469616c20686173206265656e20756e7265766f6b65642e0490546865206576656e74732067656e65726174656420627920746869732070616c6c65742e35010c3872756e74696d655f636f6d6d6f6e18617373657473204173736574446964000004003901013c41737365744964656e746966696572000039010c3c6b696c745f61737365745f646964730876312041737365744469640000080120636861696e5f69643d01011c436861696e496400012061737365745f69646501011c4173736574496400003d01103c6b696c745f61737365745f6469647314636861696e0876311c436861696e49640001141845697031353504004101013c4569703135355265666572656e63650000001842697031323204004501016447656e657369734865784861736833325265666572656e63650001001c446f7473616d6104004501016447656e657369734865784861736833325265666572656e636500020018536f6c616e6104004d01017047656e657369734261736535384861736833325265666572656e63650003001c47656e6572696304005501013847656e65726963436861696e4964000400004101103c6b696c745f61737365745f6469647314636861696e0876313c4569703135355265666572656e6365000004001801107531323800004501103c6b696c745f61737365745f6469647314636861696e0876316447656e657369734865784861736833325265666572656e636500000400490101205b75383b2031365d000049010000031000000008004d01103c6b696c745f61737365745f6469647314636861696e0876317047656e657369734261736535384861736833325265666572656e63650000040051010170426f756e6465645665633c75382c20436f6e73745533323c33323e3e000051010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00005501103c6b696c745f61737365745f6469647314636861696e0876313847656e65726963436861696e496400000801246e616d6573706163655901015447656e65726963436861696e4e616d6573706163650001247265666572656e63656101015447656e65726963436861696e5265666572656e636500005901103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e4e616d657370616365000004005d0101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f434841494e5f4e414d4553504143455f4c454e4754485f5533323e3e00005d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00006101103c6b696c745f61737365745f6469647314636861696e0876315447656e65726963436861696e5265666572656e636500000400510101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f434841494e5f5245464552454e43455f4c454e4754485f5533323e3e00006501103c6b696c745f61737365745f646964731461737365740876311c4173736574496400011418536c6970343404006901013c536c697034345265666572656e636500000014457263323004007501018445766d536d617274436f6e747261637446756e6769626c655265666572656e63650001001845726337323104007901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650002001c4572633131353504007901019045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e63650003001c47656e6572696304008901013847656e6572696341737365744964000400006901103c6b696c745f61737365745f646964731461737365740876313c536c697034345265666572656e6365000004006d0101105532353600006d01083c7072696d69746976655f7479706573105532353600000400710101205b7536343b20345d000071010000030400000010007501103c6b696c745f61737365745f646964731461737365740876318445766d536d617274436f6e747261637446756e6769626c655265666572656e636500000400210101205b75383b2032305d00007901103c6b696c745f61737365745f646964731461737365740876319045766d536d617274436f6e74726163744e6f6e46756e6769626c655265666572656e6365000008007501018445766d536d617274436f6e747261637446756e6769626c655265666572656e636500007d0101b44f7074696f6e3c45766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e7469666965723e00007d0104184f7074696f6e0404540181010108104e6f6e6500000010536f6d650400810100000100008101103c6b696c745f61737365745f646964731461737365740876319445766d536d617274436f6e74726163744e6f6e46756e6769626c654964656e74696669657200000400850101f4426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4944454e5449464945525f4c454e4754485f5533323e3e000085010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00008901103c6b696c745f61737365745f646964731461737365740876313847656e657269634173736574496400000c01246e616d6573706163658d01015447656e6572696341737365744e616d6573706163650001247265666572656e63659101015447656e6572696341737365745265666572656e63650001086964990101784f7074696f6e3c47656e6572696341737365744964656e7469666965723e00008d01103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365744e616d657370616365000004005d0101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4e414d4553504143455f4c454e4754485f5533323e3e00009101103c6b696c745f61737365745f646964731461737365740876315447656e6572696341737365745265666572656e636500000400950101f0426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f5245464552454e43455f4c454e4754485f5533323e3e000095010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000990104184f7074696f6e040454019d010108104e6f6e6500000010536f6d6504009d0100000100009d01103c6b696c745f61737365745f646964731461737365740876315847656e6572696341737365744964656e74696669657200000400850101f4426f756e6465645665633c75382c20436f6e73745533323c4d4158494d554d5f41535345545f4944454e5449464945525f4c454e4754485f5533323e3e0000a1010c4070616c6c65745f6d6967726174696f6e1870616c6c6574144576656e7404045400010438456e7472696573557064617465640400a501014c456e7472696573546f4d6967726174653c543e000000047c54686520604576656e746020656e756d206f6620746869732070616c6c6574a5010c4070616c6c65745f6d6967726174696f6e1870616c6c657440456e7472696573546f4d69677261746504045401a9010018012c6174746573746174696f6ead01010101426f756e6465645665633c436c61696d486173684f663c543e2c3c5420617320436f6e6669673e3a3a4d61784d6967726174696f6e7350657250616c6c65743e00012864656c65676174696f6ead01012101426f756e6465645665633c44656c65676174696f6e4e6f646549644f663c543e2c3c5420617320436f6e6669673e3a3a0a4d61784d6967726174696f6e7350657250616c6c65743e00010c646964b501011501426f756e6465645665633c4469644964656e7469666965724f663c543e2c3c5420617320436f6e6669673e3a3a4d61784d6967726174696f6e7350657250616c6c65740a3e0001186c6f6f6b7570bd01010d01426f756e6465645665633c4c696e6b61626c654163636f756e7449642c3c5420617320436f6e6669673e3a3a4d61784d6967726174696f6e7350657250616c6c65743e00010c77336ec50101fc426f756e6465645665633c576562334e616d654f663c543e2c3c5420617320436f6e6669673e3a3a4d61784d6967726174696f6e7350657250616c6c65743e0001487075626c69635f63726564656e7469616c73cd01015901426f756e6465645665633c285375626a65637449644f663c543e2c2043726564656e7469616c49644f663c543e292c3c5420617320436f6e6669673e3a3a0a4d61784d6967726174696f6e7350657250616c6c65743e0000a90108447370697269746e65745f72756e74696d651c52756e74696d6500000000ad010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400b10101185665633c543e0000b1010000023000b5010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e0000b9010000020000bd010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011901045300000400c10101185665633c543e0000c101000002190100c5010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012901045300000400c90101185665633c543e0000c901000002290100cd010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d101045300000400d50101185665633c543e0000d1010000040835013000d501000002d10100d9010c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144576656e7404045400011c6056616c69646174696f6e46756e6374696f6e53746f726564000004d05468652076616c69646174696f6e2066756e6374696f6e20686173206265656e207363686564756c656420746f206170706c792e6456616c69646174696f6e46756e6374696f6e4170706c69656404015472656c61795f636861696e5f626c6f636b5f6e756d20015452656c6179436861696e426c6f636b4e756d62657200010445015468652076616c69646174696f6e2066756e6374696f6e20776173206170706c696564206173206f662074686520636f6e7461696e65642072656c617920636861696e20626c6f636b206e756d6265722e6c56616c69646174696f6e46756e6374696f6e446973636172646564000204b05468652072656c61792d636861696e2061626f727465642074686520757067726164652070726f636573732e4455706772616465417574686f72697a6564040124636f64655f6861736830011c543a3a486173680003047c416e207570677261646520686173206265656e20617574686f72697a65642e60446f776e776172644d657373616765735265636569766564040114636f756e7420010c7533320004040101536f6d6520646f776e77617264206d657373616765732068617665206265656e20726563656976656420616e642077696c6c2062652070726f6365737365642e64446f776e776172644d6573736167657350726f63657373656408012c7765696768745f75736564280118576569676874000120646d715f6865616430014472656c61795f636861696e3a3a48617368000504e0446f776e77617264206d6573736167657320776572652070726f636573736564207573696e672074686520676976656e207765696768742e445570776172644d65737361676553656e740401306d6573736167655f68617368d4013c4f7074696f6e3c58636d486173683e000604b8416e20757077617264206d657373616765207761732073656e7420746f207468652072656c617920636861696e2e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574dd010c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144576656e7404045400011c1c537563636573730c01306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d4861736800011877656967687428011857656967687400000464536f6d652058434d20776173206578656375746564206f6b2e104661696c1001306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d486173680001146572726f72e101012058636d4572726f7200011877656967687428011857656967687400010440536f6d652058434d206661696c65642e2842616456657273696f6e0401306d6573736167655f6861736804011c58636d48617368000204544261642058434d2076657273696f6e20757365642e24426164466f726d61740401306d6573736167655f6861736804011c58636d48617368000304504261642058434d20666f726d617420757365642e3c58636d704d65737361676553656e740401306d6573736167655f6861736804011c58636d48617368000404c0416e2048524d50206d657373616765207761732073656e7420746f2061207369626c696e672070617261636861696e2e484f766572776569676874456e71756575656410011873656e646572e501011850617261496400011c73656e745f617420014052656c6179426c6f636b4e756d626572000114696e64657810013c4f766572776569676874496e6465780001207265717569726564280118576569676874000504d4416e2058434d2065786365656465642074686520696e646976696475616c206d65737361676520776569676874206275646765742e484f7665727765696768745365727669636564080114696e64657810013c4f766572776569676874496e646578000110757365642801185765696768740006044101416e2058434d2066726f6d20746865206f7665727765696768742071756575652077617320657865637574656420776974682074686520676976656e2061637475616c2077656967687420757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e101100c78636d08763318747261697473144572726f720001a0204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300304c6f636174696f6e46756c6c000400544c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c753634001500404578706563746174696f6e46616c73650016003850616c6c65744e6f74466f756e64001700304e616d654d69736d617463680018004c56657273696f6e496e636f6d70617469626c6500190050486f6c64696e67576f756c644f766572666c6f77001a002c4578706f72744572726f72001b00385265616e63686f724661696c6564001c00184e6f4465616c001d0028466565734e6f744d6574001e00244c6f636b4572726f72001f00304e6f5065726d697373696f6e00200028556e616e63686f726564002100384e6f744465706f73697461626c650022004c556e68616e646c656458636d56657273696f6e002300485765696768744c696d69745265616368656404002801185765696768740024001c426172726965720025004c5765696768744e6f74436f6d70757461626c650026004445786365656473537461636b4c696d697400270000e5010c48706f6c6b61646f745f70617261636861696e287072696d6974697665730849640000040020010c7533320000e9010c2870616c6c65745f78636d1870616c6c6574144576656e7404045400015c24417474656d7074656404011c6f7574636f6d65ed01015078636d3a3a6c61746573743a3a4f7574636f6d65000004a8457865637574696f6e206f6620616e2058434d206d6573736167652077617320617474656d707465642e1053656e741001186f726967696ef10101344d756c74694c6f636174696f6e00012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e00011c6d6573736167651502011c58636d3c28293e0001286d6573736167655f696404011c58636d486173680001045c412058434d206d657373616765207761732073656e742e48556e6578706563746564526573706f6e73650801186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400020c5901517565727920726573706f6e736520726563656976656420776869636820646f6573206e6f74206d61746368206120726567697374657265642071756572792e2054686973206d61792062652062656361757365206155016d61746368696e6720717565727920776173206e6576657220726567697374657265642c206974206d617920626520626563617573652069742069732061206475706c696361746520726573706f6e73652c206f727062656361757365207468652071756572792074696d6564206f75742e34526573706f6e7365526561647908012071756572795f696410011c51756572794964000120726573706f6e73653d020120526573706f6e73650003085d01517565727920726573706f6e736520686173206265656e20726563656976656420616e6420697320726561647920666f722074616b696e672077697468206074616b655f726573706f6e7365602e205468657265206973806e6f2072656769737465726564206e6f74696669636174696f6e2063616c6c2e204e6f7469666965640c012071756572795f696410011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380004085901517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20686173a86265656e206469737061746368656420616e64206578656375746564207375636365737366756c6c792e404e6f746966794f76657277656967687414012071756572795f696410011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800013461637475616c5f77656967687428011857656967687400014c6d61785f62756467657465645f77656967687428011857656967687400050c6101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652072656769737465726564206e6f74696669636174696f6e20636f756c6441016e6f742062652064697370617463686564206265636175736520746865206469737061746368207765696768742069732067726561746572207468616e20746865206d6178696d756d20776569676874e46f726967696e616c6c7920627564676574656420627920746869732072756e74696d6520666f722074686520717565727920726573756c742e4c4e6f7469667944697370617463684572726f720c012071756572795f696410011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e64657808010875380006085501517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e2054686572652077617320612067656e6572616c206572726f722077697468886469737061746368696e6720746865206e6f74696669636174696f6e2063616c6c2e484e6f746966794465636f64654661696c65640c012071756572795f696410011c5175657279496400013070616c6c65745f696e646578080108753800012863616c6c5f696e646578080108753800070c5101517565727920726573706f6e736520686173206265656e20726563656976656420616e642071756572792069732072656d6f7665642e205468652064697370617463682077617320756e61626c6520746f20626559016465636f64656420696e746f2061206043616c6c603b2074686973206d696768742062652064756520746f2064697370617463682066756e6374696f6e20686176696e672061207369676e6174757265207768696368946973206e6f742060286f726967696e2c20517565727949642c20526573706f6e736529602e40496e76616c6964526573706f6e6465720c01186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400014465787065637465645f6c6f636174696f6e610201544f7074696f6e3c4d756c74694c6f636174696f6e3e00080c5901457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206f726967696e206c6f636174696f6e206f662074686520726573706f6e736520646f657355016e6f74206d6174636820746861742065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5c496e76616c6964526573706f6e64657256657273696f6e0801186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400091c5101457870656374656420717565727920726573706f6e736520686173206265656e2072656365697665642062757420746865206578706563746564206f726967696e206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e34526573706f6e736554616b656e04012071756572795f696410011c51756572794964000a04c8526563656976656420717565727920726573706f6e736520686173206265656e207265616420616e642072656d6f7665642e34417373657473547261707065640c011068617368300110483235360001186f726967696ef10101344d756c74694c6f636174696f6e0001186173736574738102015056657273696f6e65644d756c7469417373657473000b04b8536f6d65206173736574732068617665206265656e20706c6163656420696e20616e20617373657420747261702e5456657273696f6e4368616e67654e6f74696669656410012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e000118726573756c7420012858636d56657273696f6e000110636f73742102012c4d756c74694173736574730001286d6573736167655f696404011c58636d48617368000c0c2501416e2058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e206d65737361676520686173206265656e20617474656d7074656420746f2062652073656e742e00e054686520636f7374206f662073656e64696e672069742028626f726e652062792074686520636861696e2920697320696e636c756465642e5c537570706f7274656456657273696f6e4368616e6765640801206c6f636174696f6ef10101344d756c74694c6f636174696f6e00011c76657273696f6e20012858636d56657273696f6e000d08390154686520737570706f727465642076657273696f6e206f662061206c6f636174696f6e20686173206265656e206368616e6765642e2054686973206d69676874206265207468726f75676820616ec06175746f6d61746963206e6f74696669636174696f6e206f722061206d616e75616c20696e74657276656e74696f6e2e504e6f7469667954617267657453656e644661696c0c01206c6f636174696f6ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c517565727949640001146572726f72e101012058636d4572726f72000e0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f727c73656e64696e6720746865206e6f74696669636174696f6e20746f2069742e644e6f746966795461726765744d6967726174696f6e4661696c0801206c6f636174696f6eb902015856657273696f6e65644d756c74694c6f636174696f6e00012071756572795f696410011c51756572794964000f0859014120676976656e206c6f636174696f6e2077686963682068616420612076657273696f6e206368616e676520737562736372697074696f6e207761732064726f70706564206f77696e6720746f20616e206572726f72b46d6967726174696e6720746865206c6f636174696f6e20746f206f7572206e65772058434d20666f726d61742e54496e76616c69645175657269657256657273696f6e0801186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400101c5501457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652065787065637465642071756572696572206c6f636174696f6e20706c6163656420696e4d0173746f7261676520627920746869732072756e74696d652070726576696f75736c792063616e6e6f74206265206465636f6465642e205468652071756572792072656d61696e7320726567697374657265642e0041015468697320697320756e6578706563746564202873696e63652061206c6f636174696f6e20706c6163656420696e2073746f7261676520696e20612070726576696f75736c7920657865637574696e674d0172756e74696d652073686f756c64206265207265616461626c65207072696f7220746f2071756572792074696d656f75742920616e642064616e6765726f75732073696e63652074686520706f737369626c79590176616c696420726573706f6e73652077696c6c2062652064726f707065642e204d616e75616c20676f7665726e616e636520696e74657276656e74696f6e2069732070726f6261626c7920676f696e6720746f2062651c6e65656465642e38496e76616c6964517565726965721001186f726967696ef10101344d756c74694c6f636174696f6e00012071756572795f696410011c5175657279496400014065787065637465645f71756572696572f10101344d756c74694c6f636174696f6e0001506d617962655f61637475616c5f71756572696572610201544f7074696f6e3c4d756c74694c6f636174696f6e3e00110c5d01457870656374656420717565727920726573706f6e736520686173206265656e20726563656976656420627574207468652071756572696572206c6f636174696f6e206f662074686520726573706f6e736520646f657351016e6f74206d61746368207468652065787065637465642e205468652071756572792072656d61696e73207265676973746572656420666f722061206c617465722c2076616c69642c20726573706f6e736520746f6c626520726563656976656420616e642061637465642075706f6e2e5056657273696f6e4e6f74696679537461727465640c012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e000110636f73742102012c4d756c74694173736574730001286d6573736167655f696404011c58636d486173680012085901412072656d6f746520686173207265717565737465642058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e2066726f6d20757320616e64207765206861766520686f6e6f7265642069742e1d01412076657273696f6e20696e666f726d6174696f6e206d6573736167652069732073656e7420746f207468656d20616e642069747320636f737420697320696e636c756465642e5856657273696f6e4e6f746966795265717565737465640c012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e000110636f73742102012c4d756c74694173736574730001286d6573736167655f696404011c58636d486173680013043d015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073656e642075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e6056657273696f6e4e6f74696679556e7265717565737465640c012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e000110636f73742102012c4d756c74694173736574730001286d6573736167655f696404011c58636d4861736800140461015765206861766520726571756573746564207468617420612072656d6f746520636861696e2073746f70732073656e64696e672075732058434d2076657273696f6e206368616e6765206e6f74696669636174696f6e732e204665657350616964080118706179696e67f10101344d756c74694c6f636174696f6e000110666565732102012c4d756c7469417373657473001504310146656573207765726520706169642066726f6d2061206c6f636174696f6e20666f7220616e206f7065726174696f6e20286f6674656e20666f72207573696e67206053656e6458636d60292e34417373657473436c61696d65640c011068617368300110483235360001186f726967696ef10101344d756c74694c6f636174696f6e0001186173736574738102015056657273696f6e65644d756c7469417373657473001604c0536f6d65206173736574732068617665206265656e20636c61696d65642066726f6d20616e2061737365742074726170047c54686520604576656e746020656e756d206f6620746869732070616c6c6574ed01100c78636d087633187472616974731c4f7574636f6d6500010c20436f6d706c657465040028011857656967687400000028496e636f6d706c65746508002801185765696768740000e10101144572726f72000100144572726f720400e10101144572726f7200020000f101100c78636d087633346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72f50101244a756e6374696f6e730000f501100c78636d087633246a756e6374696f6e73244a756e6374696f6e7300012410486572650000000858310400f90101204a756e6374696f6e0001000858320800f90101204a756e6374696f6e0000f90101204a756e6374696f6e0002000858330c00f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0003000858341000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0004000858351400f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0005000858361800f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0006000858371c00f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0007000858382000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e0000f90101204a756e6374696f6e00080000f901100c78636d087633206a756e6374696f6e204a756e6374696f6e0001282450617261636861696e0400fd01010c7533320000002c4163636f756e744964333208011c6e6574776f726b010201444f7074696f6e3c4e6574776f726b49643e00010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726b010201444f7074696f6e3c4e6574776f726b49643e000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726b010201444f7074696f6e3c4e6574776f726b49643e00010c6b6579210101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e646578040009020110753132380005002847656e6572616c4b65790801186c656e6774680801087538000110646174610401205b75383b2033325d000600244f6e6c794368696c6400070024506c7572616c69747908010869640d020118426f647949640001107061727411020120426f6479506172740008003c476c6f62616c436f6e73656e7375730400050201244e6574776f726b496400090000fd010000062000010204184f7074696f6e0404540105020108104e6f6e6500000010536f6d650400050200000100000502100c78636d087633206a756e6374696f6e244e6574776f726b496400012824427947656e6573697304000401205b75383b2033325d000000184279466f726b080130626c6f636b5f6e756d62657210010c753634000128626c6f636b5f686173680401205b75383b2033325d00010020506f6c6b61646f74000200184b7573616d610003001c57657374656e6400040018526f636f636f00050018576f636f636f00060020457468657265756d040120636861696e5f69642c010c7536340007002c426974636f696e436f72650008002c426974636f696e4361736800090000090200000618000d02100c78636d087633206a756e6374696f6e18426f6479496400012810556e69740000001c4d6f6e696b6572040044011c5b75383b20345d00010014496e6465780400fd01010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e000800205472656173757279000900001102100c78636d087633206a756e6374696f6e20426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74fd01010c753332000100204672616374696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c7533320004000015020c0c78636d0876330c58636d041043616c6c00000400190201585665633c496e737472756374696f6e3c43616c6c3e3e000019020000021d02001d020c0c78636d0876332c496e737472756374696f6e041043616c6c0001c0345769746864726177417373657404002102012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404002102012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404002102012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e73653d020120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572610201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e7366657241737365740801186173736574732102012c4d756c746941737365747300012c62656e6566696369617279f10101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574732102012c4d756c746941737365747300011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64650201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6c6902014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572fd01010c7533320001406d61785f6d6573736167655f73697a65fd01010c7533320001306d61785f6361706163697479fd01010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74fd01010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72fd01010c75333200011873656e646572fd01010c753332000124726563697069656e74fd01010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400f5010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f7204006d0201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473710201404d756c7469417373657446696c74657200012c62656e6566696369617279f10101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473710201404d756c7469417373657446696c74657200011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e000e003445786368616e676541737365740c011067697665710201404d756c7469417373657446696c74657200011077616e742102012c4d756c746941737365747300011c6d6178696d616cac0110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473710201404d756c7469417373657446696c74657200011c72657365727665f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473710201404d756c7469417373657446696c74657200011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f6d0201445175657279526573706f6e7365496e666f000118617373657473710201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573290201284d756c746941737365740001307765696768745f6c696d69747d02012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204001502012458636d3c43616c6c3e0015002c536574417070656e64697804001502012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574732102012c4d756c74694173736574730001187469636b6574f10101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e417373657404002102012c4d756c7469417373657473001c002c457870656374417373657404002102012c4d756c7469417373657473001d00304578706563744f726967696e0400610201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400410201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400590201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6534011c5665633c75383e000134726573706f6e73655f696e666f6d0201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578fd01010c7533320001106e616d6534011c5665633c75383e00012c6d6f64756c655f6e616d6534011c5665633c75383e00012c63726174655f6d616a6f72fd01010c75333200013c6d696e5f63726174655f6d696e6f72fd01010c753332002200505265706f72745472616e7361637453746174757304006d0201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400f90101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726b050201244e6574776f726b496400012c64657374696e6174696f6ef5010154496e746572696f724d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e002600244c6f636b41737365740801146173736574290201284d756c74694173736574000120756e6c6f636b6572f10101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574290201284d756c74694173736574000118746172676574f10101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574290201284d756c746941737365740001146f776e6572f10101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574290201284d756c746941737365740001186c6f636b6572f10101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177ac0110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400f10101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747d02012c5765696768744c696d6974000130636865636b5f6f726967696e610201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f00002102100c78636d087633286d756c746961737365742c4d756c7469417373657473000004002502013c5665633c4d756c746941737365743e000025020000022902002902100c78636d087633286d756c74696173736574284d756c74694173736574000008010869642d02011c4173736574496400010c66756e3102012c46756e676962696c69747900002d02100c78636d087633286d756c746961737365741c4173736574496400010820436f6e63726574650400f10101344d756c74694c6f636174696f6e00000020416273747261637404000401205b75383b2033325d000100003102100c78636d087633286d756c746961737365742c46756e676962696c6974790001082046756e6769626c65040009020110753132380000002c4e6f6e46756e6769626c650400350201344173736574496e7374616e6365000100003502100c78636d087633286d756c74696173736574344173736574496e7374616e636500011824556e646566696e656400000014496e6465780400090201107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804003902011c5b75383b20385d0003001c417272617931360400490101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d0005000039020000030800000008003d020c0c78636d08763320526573706f6e7365000118104e756c6c0000001841737365747304002102012c4d756c74694173736574730001003c457865637574696f6e526573756c740400410201504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040020013873757065723a3a56657273696f6e0003002c50616c6c657473496e666f040049020198426f756e6465645665633c50616c6c6574496e666f2c204d617850616c6c657473496e666f3e000400384469737061746368526573756c740400590201384d617962654572726f72436f646500050000410204184f7074696f6e0404540145020108104e6f6e6500000010536f6d6504004502000001000045020000040820e1010049020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d02045300000400550201185665633c543e00004d020c0c78636d0876332850616c6c6574496e666f0000180114696e646578fd01010c7533320001106e616d6551020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e00012c6d6f64756c655f6e616d6551020180426f756e6465645665633c75382c204d617850616c6c65744e616d654c656e3e0001146d616a6f72fd01010c7533320001146d696e6f72fd01010c7533320001147061746368fd01010c753332000051020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000055020000024d020059020c0c78636d087633384d617962654572726f72436f646500010c1c53756363657373000000144572726f7204005d02018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000100385472756e63617465644572726f7204005d02018c426f756e6465645665633c75382c204d617844697370617463684572726f724c656e3e000200005d020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000610204184f7074696f6e04045401f1010108104e6f6e6500000010536f6d650400f101000001000065020c0c78636d087632284f726967696e4b696e64000110184e617469766500000040536f7665726569676e4163636f756e74000100245375706572757365720002000c58636d0003000069020c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656434011c5665633c75383e00006d020c0c78636d087633445175657279526573706f6e7365496e666f00000c012c64657374696e6174696f6ef10101344d756c74694c6f636174696f6e00012071756572795f69642c011c517565727949640001286d61785f77656967687428011857656967687400007102100c78636d087633286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504002102012c4d756c74694173736574730000001057696c6404007502013857696c644d756c74694173736574000100007502100c78636d087633286d756c746961737365743857696c644d756c746941737365740001100c416c6c00000014416c6c4f6608010869642d02011c4173736574496400010c66756e7902013c57696c6446756e676962696c69747900010028416c6c436f756e7465640400fd01010c75333200020030416c6c4f66436f756e7465640c010869642d02011c4173736574496400010c66756e7902013c57696c6446756e676962696c697479000114636f756e74fd01010c753332000300007902100c78636d087633286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c65000100007d020c0c78636d0876332c5765696768744c696d697400010824556e6c696d697465640000001c4c696d697465640400280118576569676874000100008102080c78636d5056657273696f6e65644d756c746941737365747300010808563204008502013c76323a3a4d756c746941737365747300010008563304002102013c76333a3a4d756c7469417373657473000300008502100c78636d087632286d756c746961737365742c4d756c7469417373657473000004008902013c5665633c4d756c746941737365743e000089020000028d02008d02100c78636d087632286d756c74696173736574284d756c74694173736574000008010869649102011c4173736574496400010c66756eb102012c46756e676962696c69747900009102100c78636d087632286d756c746961737365741c4173736574496400010820436f6e63726574650400950201344d756c74694c6f636174696f6e000000204162737472616374040034011c5665633c75383e000100009502100c78636d087632346d756c74696c6f636174696f6e344d756c74694c6f636174696f6e000008011c706172656e74730801087538000120696e746572696f72990201244a756e6374696f6e7300009902100c78636d087632346d756c74696c6f636174696f6e244a756e6374696f6e73000124104865726500000008583104009d0201204a756e6374696f6e00010008583208009d0201204a756e6374696f6e00009d0201204a756e6374696f6e0002000858330c009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00030008583410009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00040008583514009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00050008583618009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e0006000858371c009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00070008583820009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e00009d0201204a756e6374696f6e000800009d02100c78636d087632206a756e6374696f6e204a756e6374696f6e0001242450617261636861696e0400fd01010c7533320000002c4163636f756e744964333208011c6e6574776f726ba10201244e6574776f726b496400010869640401205b75383b2033325d000100384163636f756e74496e646578363408011c6e6574776f726ba10201244e6574776f726b4964000114696e6465782c010c753634000200304163636f756e744b6579323008011c6e6574776f726ba10201244e6574776f726b496400010c6b6579210101205b75383b2032305d0003003850616c6c6574496e7374616e6365040008010875380004003047656e6572616c496e646578040009020110753132380005002847656e6572616c4b65790400a50201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e000600244f6e6c794368696c6400070024506c7572616c6974790801086964a9020118426f6479496400011070617274ad020120426f64795061727400080000a1020c0c78636d087632244e6574776f726b49640001100c416e79000000144e616d65640400a50201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010020506f6c6b61646f74000200184b7573616d6100030000a5020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401080453000004003401185665633c543e0000a9020c0c78636d08763218426f6479496400012810556e6974000000144e616d65640400a50201805765616b426f756e6465645665633c75382c20436f6e73745533323c33323e3e00010014496e6465780400fd01010c7533320002002445786563757469766500030024546563686e6963616c0004002c4c656769736c6174697665000500204a7564696369616c0006001c446566656e73650007003841646d696e697374726174696f6e00080020547265617375727900090000ad020c0c78636d08763220426f64795061727400011414566f6963650000001c4d656d62657273040114636f756e74fd01010c753332000100204672616374696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c7533320002004441744c6561737450726f706f7274696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c753332000300484d6f72655468616e50726f706f7274696f6e08010c6e6f6dfd01010c75333200011464656e6f6dfd01010c75333200040000b102100c78636d087632286d756c746961737365742c46756e676962696c6974790001082046756e6769626c65040009020110753132380000002c4e6f6e46756e6769626c650400b50201344173736574496e7374616e636500010000b502100c78636d087632286d756c74696173736574344173736574496e7374616e636500011c24556e646566696e656400000014496e6465780400090201107531323800010018417272617934040044011c5b75383b20345d0002001841727261793804003902011c5b75383b20385d0003001c417272617931360400490101205b75383b2031365d0004001c4172726179333204000401205b75383b2033325d00050010426c6f62040034011c5665633c75383e00060000b902080c78636d5856657273696f6e65644d756c74694c6f636174696f6e00010808563204009502014476323a3a4d756c74694c6f636174696f6e0001000856330400f101014476333a3a4d756c74694c6f636174696f6e00030000bd020c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144576656e7404045400010c34496e76616c6964466f726d617404000401205b75383b2033325d00000880446f776e77617264206d65737361676520697320696e76616c69642058434d2e205c5b206964205c5d48556e737570706f7274656456657273696f6e04000401205b75383b2033325d000108bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e205c5b206964205c5d404578656375746564446f776e7761726408000401205b75383b2033325d0000ed01011c4f7574636f6d65000208c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e445c5b2069642c206f7574636f6d65205c5d047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c1020c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144576656e7404045400011c34496e76616c6964466f726d61740401306d6573736167655f6861736804011c58636d4861736800000480446f776e77617264206d65737361676520697320696e76616c69642058434d2e48556e737570706f7274656456657273696f6e0401306d6573736167655f6861736804011c58636d48617368000104bc446f776e77617264206d65737361676520697320756e737570706f727465642076657273696f6e206f662058434d2e404578656375746564446f776e776172640c01306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d4861736800011c6f7574636f6d65ed01011c4f7574636f6d65000204c4446f776e77617264206d65737361676520657865637574656420776974682074686520676976656e206f7574636f6d652e3c5765696768744578686175737465641001306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d4861736800014072656d61696e696e675f77656967687428011857656967687400013c72657175697265645f776569676874280118576569676874000304f054686520776569676874206c696d697420666f722068616e646c696e6720646f776e77617264206d657373616765732077617320726561636865642e484f766572776569676874456e7175657565641001306d6573736167655f6861736804011c58636d486173680001286d6573736167655f696404011c58636d486173680001406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800013c72657175697265645f7765696768742801185765696768740004041901446f776e77617264206d657373616765206973206f76657277656967687420616e642077617320706c6163656420696e20746865206f7665727765696768742071756575652e484f76657277656967687453657276696365640801406f7665727765696768745f696e64657810013c4f766572776569676874496e64657800012c7765696768745f75736564280118576569676874000504e0446f776e77617264206d6573736167652066726f6d20746865206f766572776569676874207175657565207761732065786563757465642e504d61784d657373616765734578686175737465640401306d6573736167655f6861736804011c58636d48617368000604d0546865206d6178696d756d206e756d626572206f6620646f776e77617264206d657373616765732077617320726561636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c50208306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040020010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e00020000c902000002d000cd0208306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6efd01014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d65d102016473705f72756e74696d653a3a52756e74696d65537472696e670000d1020000050200d5020c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b34011c5665633c75383e0000045c536565205b6050616c6c65743a3a72656d61726b605d2e387365745f686561705f7061676573040114706167657310010c7536340001047c536565205b6050616c6c65743a3a7365745f686561705f7061676573605d2e207365745f636f6465040110636f646534011c5665633c75383e00020464536565205b6050616c6c65743a3a7365745f636f6465605d2e5c7365745f636f64655f776974686f75745f636865636b73040110636f646534011c5665633c75383e000304a0536565205b6050616c6c65743a3a7365745f636f64655f776974686f75745f636865636b73605d2e2c7365745f73746f726167650401146974656d73d90201345665633c4b657956616c75653e00040470536565205b6050616c6c65743a3a7365745f73746f72616765605d2e306b696c6c5f73746f726167650401106b657973e10201205665633c4b65793e00050474536565205b6050616c6c65743a3a6b696c6c5f73746f72616765605d2e2c6b696c6c5f70726566697808011870726566697834010c4b657900011c7375626b65797320010c75333200060470536565205b6050616c6c65743a3a6b696c6c5f707265666978605d2e4472656d61726b5f776974685f6576656e7404011872656d61726b34011c5665633c75383e00070488536565205b6050616c6c65743a3a72656d61726b5f776974685f6576656e74605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed902000002dd0200dd0200000408343400e1020000023400e5020c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2801185765696768740001246d61785f626c6f636b2801185765696768740001247065725f636c617373e90201845065724469737061746368436c6173733c57656967687473506572436c6173733e0000e9020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c61737304045401ed02000c01186e6f726d616ced0201045400012c6f7065726174696f6e616ced020104540001246d616e6461746f7279ed020104540000ed020c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632801185765696768740001346d61785f65787472696e736963f10201384f7074696f6e3c5765696768743e0001246d61785f746f74616cf10201384f7074696f6e3c5765696768743e0001207265736572766564f10201384f7074696f6e3c5765696768743e0000f10204184f7074696f6e04045401280108104e6f6e6500000010536f6d650400280000010000f5020c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178f90201545065724469737061746368436c6173733c7533323e0000f9020c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540120000c01186e6f726d616c2001045400012c6f7065726174696f6e616c200104540001246d616e6461746f7279200104540000fd02082873705f776569676874733c52756e74696d65446257656967687400000801107265616410010c753634000114777269746510010c75363400000103082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d65d102013452756e74696d65537472696e67000124696d706c5f6e616d65d102013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e20010c753332000130737065635f76657273696f6e20010c753332000130696d706c5f76657273696f6e20010c753332000110617069730503011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e20010c75333200013473746174655f76657273696f6e080108753800000503040c436f77040454010903000400090300000009030000020d03000d03000004083902200011030c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c657415030c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f772c0124543a3a4d6f6d656e7400000450536565205b6050616c6c65743a3a736574605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e19030000040c0018ac001d030c3870616c6c65745f696e64696365731870616c6c65741043616c6c04045400011414636c61696d040114696e64657810013c543a3a4163636f756e74496e64657800000458536565205b6050616c6c65743a3a636c61696d605d2e207472616e7366657208010c6e6577210301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e64657800010464536565205b6050616c6c65743a3a7472616e73666572605d2e1066726565040114696e64657810013c543a3a4163636f756e74496e64657800020454536565205b6050616c6c65743a3a66726565605d2e38666f7263655f7472616e736665720c010c6e6577210301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657810013c543a3a4163636f756e74496e646578000118667265657a65ac0110626f6f6c0003047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e18667265657a65040114696e64657810013c543a3a4163636f756e74496e6465780004045c536565205b6050616c6c65743a3a667265657a65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e21030c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801b4011408496404000001244163636f756e74496400000014496e6465780400250301304163636f756e74496e6465780001000c526177040034011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400210101205b75383b2032305d000400002503000006b40029030c3870616c6c65745f696e64696365731870616c6c6574144572726f720404540001142c4e6f7441737369676e65640000048c54686520696e64657820776173206e6f7420616c72656164792061737369676e65642e204e6f744f776e6572000104a454686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e14496e5573650002047054686520696e64657820776173206e6f7420617661696c61626c652e2c4e6f745472616e73666572000304c854686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e245065726d616e656e74000404d054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e2d030c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454013103045300000400390301185665633c543e000031030c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964390201384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e733503011c526561736f6e73000035030c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c0002000039030000023103003d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014103045300000400450301185665633c543e000041030c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e7469666965720139021c42616c616e6365011800080108696439020144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000450300000241030049030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454014d030453000004006d0301185665633c543e00004d030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640151031c42616c616e63650118000801086964510301084964000118616d6f756e7418011c42616c616e63650000510308447370697269746e65745f72756e74696d654452756e74696d65486f6c64526561736f6e0001182c4174746573746174696f6e04005503015c6174746573746174696f6e3a3a486f6c64526561736f6e003e002844656c65676174696f6e04005903015864656c65676174696f6e3a3a486f6c64526561736f6e003f000c44696404005d03013c6469643a3a486f6c64526561736f6e004000244469644c6f6f6b757004006103017470616c6c65745f6469645f6c6f6f6b75703a3a486f6c64526561736f6e00430024576562334e616d657304006503017470616c6c65745f776562335f6e616d65733a3a486f6c64526561736f6e004400445075626c696343726564656e7469616c730400690301787075626c69635f63726564656e7469616c733a3a486f6c64526561736f6e0045000055030c2c6174746573746174696f6e1870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000059030c2864656c65676174696f6e1870616c6c657428486f6c64526561736f6e0001041c4465706f736974000000005d030c0c6469641870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000061030c4470616c6c65745f6469645f6c6f6f6b75701870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000065030c4470616c6c65745f776562335f6e616d65731870616c6c657428486f6c64526561736f6e0001041c4465706f7369740000000069030c487075626c69635f63726564656e7469616c731870616c6c657428486f6c64526561736f6e0001041c4465706f736974000000006d030000024d030071030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017503045300000400810301185665633c543e000075030c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e74080849640179031c42616c616e63650118000801086964790301084964000118616d6f756e7418011c42616c616e63650000790308447370697269746e65745f72756e74696d654c52756e74696d65467265657a65526561736f6e0001044050617261636861696e5374616b696e6704007d03017c70617261636861696e5f7374616b696e673a3a467265657a65526561736f6e001500007d030c4470617261636861696e5f7374616b696e671870616c6c657430467265657a65526561736f6e0001041c5374616b696e6700000000810300000275030085030c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000124507472616e736665725f616c6c6f775f646561746808011064657374210301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756509020128543a3a42616c616e636500000494536565205b6050616c6c65743a3a7472616e736665725f616c6c6f775f6465617468605d2e587365745f62616c616e63655f646570726563617465640c010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f6672656509020128543a3a42616c616e63650001306f6c645f726573657276656409020128543a3a42616c616e63650001049c536565205b6050616c6c65743a3a7365745f62616c616e63655f64657072656361746564605d2e38666f7263655f7472616e736665720c0118736f75726365210301504163636f756e7449644c6f6f6b75704f663c543e00011064657374210301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756509020128543a3a42616c616e63650002047c536565205b6050616c6c65743a3a666f7263655f7472616e73666572605d2e4c7472616e736665725f6b6565705f616c69766508011064657374210301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756509020128543a3a42616c616e636500030490536565205b6050616c6c65743a3a7472616e736665725f6b6565705f616c697665605d2e307472616e736665725f616c6c08011064657374210301504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665ac0110626f6f6c00040474536565205b6050616c6c65743a3a7472616e736665725f616c6c605d2e3c666f7263655f756e7265736572766508010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050480536565205b6050616c6c65743a3a666f7263655f756e72657365727665605d2e40757067726164655f6163636f756e747304010c77686fb90101445665633c543a3a4163636f756e7449643e00060484536565205b6050616c6c65743a3a757067726164655f6163636f756e7473605d2e207472616e7366657208011064657374210301504163636f756e7449644c6f6f6b75704f663c543e00011476616c756509020128543a3a42616c616e636500070464536565205b6050616c6c65743a3a7472616e73666572605d2e44666f7263655f7365745f62616c616e636508010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f6672656509020128543a3a42616c616e636500080488536565205b6050616c6c65743a3a666f7263655f7365745f62616c616e6365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e89030c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001283856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804884e756d626572206f6620686f6c64732065786365656420604d6178486f6c6473602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e8d030c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800009103086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e740000000856320001000095030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019903045300000400a10301185665633c543e00009903104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c6963000004009d03013c737232353531393a3a5075626c696300009d030c1c73705f636f72651c73723235353139185075626c6963000004000401205b75383b2033325d0000a103000002990300a503084873705f636f6e73656e7375735f736c6f747310536c6f740000040010010c7536340000a903000002ad0300ad030000040800b10300b10308447370697269746e65745f72756e74696d652c53657373696f6e4b657973000004011061757261990301c43c41757261206173202463726174653a3a426f756e64546f52756e74696d654170705075626c69633e3a3a5075626c69630000b5030000022000b90300000408bd033400bd030c1c73705f636f72651863727970746f244b65795479706549640000040044011c5b75383b20345d0000c1030c3870616c6c65745f73657373696f6e1870616c6c65741043616c6c040454000108207365745f6b6579730801106b657973b103011c543a3a4b65797300011470726f6f6634011c5665633c75383e00000464536565205b6050616c6c65743a3a7365745f6b657973605d2e2870757267655f6b6579730001046c536565205b6050616c6c65743a3a70757267655f6b657973605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec5030c3870616c6c65745f73657373696f6e1870616c6c6574144572726f7204045400011430496e76616c696450726f6f6600000460496e76616c6964206f776e6572736869702070726f6f662e5c4e6f4173736f63696174656456616c696461746f7249640001049c4e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e344475706c6963617465644b65790002046452656769737465726564206475706c6963617465206b65792e184e6f4b657973000304a44e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e244e6f4163636f756e7400040419014b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e04744572726f7220666f72207468652073657373696f6e2070616c6c65742ec9030c4470617261636861696e5f7374616b696e6714747970657324526f756e64496e666f042c426c6f636b4e756d6265720110000c011c63757272656e7420013053657373696f6e496e646578000114666972737410012c426c6f636b4e756d6265720001186c656e67746810012c426c6f636b4e756d6265720000cd030c4470617261636861696e5f7374616b696e671474797065734444656c65676174696f6e436f756e7465720000080114726f756e6420013053657373696f6e496e64657800011c636f756e74657220010c7533320000d1030c4470617261636861696e5f7374616b696e67147479706573145374616b6508244163636f756e74496401001c42616c616e63650118000801146f776e65720001244163636f756e744964000118616d6f756e7418011c42616c616e63650000d5030c4470617261636861696e5f7374616b696e671474797065732443616e6469646174650c244163636f756e74496401001c42616c616e63650118644d617844656c656761746f727350657243616e646964617465000014010869640001244163636f756e7449640001147374616b6518011c42616c616e636500012864656c656761746f7273d9030101014f7264657265645365743c5374616b653c4163636f756e7449642c2042616c616e63653e2c204d617844656c656761746f727350657243616e6469646174653e000114746f74616c18011c42616c616e6365000118737461747573e503013c43616e6469646174655374617475730000d9030c4470617261636861696e5f7374616b696e670c736574284f72646572656453657408045401d103045300000400dd030140426f756e6465645665633c542c20533e0000dd030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d103045300000400e10301185665633c543e0000e103000002d10300e5030c4470617261636861696e5f7374616b696e671474797065733c43616e646964617465537461747573000108184163746976650000001c4c656176696e67040020013053657373696f6e496e64657800010000e9030c4470617261636861696e5f7374616b696e6714747970657328546f74616c5374616b65041c42616c616e6365011800080124636f6c6c61746f727318011c42616c616e636500012864656c656761746f727318011c42616c616e63650000ed030c4470617261636861696e5f7374616b696e670c736574284f72646572656453657408045401d103045300000400f1030140426f756e6465645665633c542c20533e0000f1030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d103045300000400e10301185665633c543e0000f5030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e34496e666c6174696f6e496e666f0000080120636f6c6c61746f72f903012c5374616b696e67496e666f00012464656c656761746f72f903012c5374616b696e67496e666f0000f9030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e2c5374616b696e67496e666f00000801206d61785f7261746590012c5065727175696e74696c6c00012c7265776172645f72617465fd030128526577617264526174650000fd030c4470617261636861696e5f7374616b696e6724696e666c6174696f6e28526577617264526174650000080118616e6e75616c90012c5065727175696e74696c6c0001247065725f626c6f636b90012c5065727175696e74696c6c000001040c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0110045601180453000004000504013842547265654d61703c4b2c20563e00000504042042547265654d617008044b011004560118000400090400000009040000020d04000d040000040810180011040c4470617261636861696e5f7374616b696e671870616c6c65741043616c6c0404540001543c666f7263655f6e65775f726f756e6400000480536565205b6050616c6c65743a3a666f7263655f6e65775f726f756e64605d2e347365745f696e666c6174696f6e100170636f6c6c61746f725f6d61785f726174655f70657263656e7461676590012c5065727175696e74696c6c000198636f6c6c61746f725f616e6e75616c5f7265776172645f726174655f70657263656e7461676590012c5065727175696e74696c6c00017464656c656761746f725f6d61785f726174655f70657263656e7461676590012c5065727175696e74696c6c00019c64656c656761746f725f616e6e75616c5f7265776172645f726174655f70657263656e7461676590012c5065727175696e74696c6c00010478536565205b6050616c6c65743a3a7365745f696e666c6174696f6e605d2e6c7365745f6d61785f73656c65637465645f63616e6469646174657304010c6e657720010c753332000204b0536565205b6050616c6c65743a3a7365745f6d61785f73656c65637465645f63616e64696461746573605d2e507365745f626c6f636b735f7065725f726f756e6404010c6e6577100144426c6f636b4e756d626572466f723c543e00030494536565205b6050616c6c65743a3a7365745f626c6f636b735f7065725f726f756e64605d2e5c7365745f6d61785f63616e6469646174655f7374616b6504010c6e657718013042616c616e63654f663c543e000404a0536565205b6050616c6c65743a3a7365745f6d61785f63616e6469646174655f7374616b65605d2e58666f7263655f72656d6f76655f63616e646964617465040120636f6c6c61746f722103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263650005049c536565205b6050616c6c65743a3a666f7263655f72656d6f76655f63616e646964617465605d2e3c6a6f696e5f63616e646964617465730401147374616b6518013042616c616e63654f663c543e00060480536565205b6050616c6c65743a3a6a6f696e5f63616e64696461746573605d2e54696e69745f6c656176655f63616e6469646174657300070498536565205b6050616c6c65743a3a696e69745f6c656176655f63616e64696461746573605d2e60657865637574655f6c656176655f63616e64696461746573040120636f6c6c61746f722103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000804a4536565205b6050616c6c65743a3a657865637574655f6c656176655f63616e64696461746573605d2e5c63616e63656c5f6c656176655f63616e64696461746573000904a0536565205b6050616c6c65743a3a63616e63656c5f6c656176655f63616e64696461746573605d2e5063616e6469646174655f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000a0494536565205b6050616c6c65743a3a63616e6469646174655f7374616b655f6d6f7265605d2e5063616e6469646174655f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000b0494536565205b6050616c6c65743a3a63616e6469646174655f7374616b655f6c657373605d2e3c6a6f696e5f64656c656761746f7273080120636f6c6c61746f722103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365000118616d6f756e7418013042616c616e63654f663c543e000c0480536565205b6050616c6c65743a3a6a6f696e5f64656c656761746f7273605d2e406c656176655f64656c656761746f7273000d0484536565205b6050616c6c65743a3a6c656176655f64656c656761746f7273605d2e5064656c656761746f725f7374616b655f6d6f72650401106d6f726518013042616c616e63654f663c543e000e0494536565205b6050616c6c65743a3a64656c656761746f725f7374616b655f6d6f7265605d2e5064656c656761746f725f7374616b655f6c6573730401106c65737318013042616c616e63654f663c543e000f0494536565205b6050616c6c65743a3a64656c656761746f725f7374616b655f6c657373605d2e3c756e6c6f636b5f756e7374616b65640401187461726765742103018c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636500100480536565205b6050616c6c65743a3a756e6c6f636b5f756e7374616b6564605d2e34636c61696d5f7265776172647300110478536565205b6050616c6c65743a3a636c61696d5f72657761726473605d2e68696e6372656d656e745f636f6c6c61746f725f72657761726473001204ac536565205b6050616c6c65743a3a696e6372656d656e745f636f6c6c61746f725f72657761726473605d2e6c696e6372656d656e745f64656c656761746f725f72657761726473001304b0536565205b6050616c6c65743a3a696e6372656d656e745f64656c656761746f725f72657761726473605d2e7c657865637574655f7363686564756c65645f7265776172645f6368616e6765001404c0536565205b6050616c6c65743a3a657865637574655f7363686564756c65645f7265776172645f6368616e6765605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e15040c4470617261636861696e5f7374616b696e671870616c6c6574144572726f7204045400017c4444656c656761746f724e6f74466f756e64000004b8546865206163636f756e74206973206e6f742070617274206f66207468652064656c656761746f7273207365742e4443616e6469646174654e6f74466f756e64000104dc546865206163636f756e74206973206e6f742070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3c44656c656761746f72457869737473000204c8546865206163636f756e7420697320616c72656164792070617274206f66207468652064656c656761746f7273207365742e3c43616e646964617465457869737473000304ec546865206163636f756e7420697320616c72656164792070617274206f662074686520636f6c6c61746f722063616e64696461746573207365742e3056616c5374616b655a65726f000404e4546865206163636f756e7420747269656420746f207374616b65206d6f7265206f72206c657373207769746820616d6f756e74207a65726f2e4056616c5374616b6542656c6f774d696e0005080d01546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f20626520616464656420746f2074686520636f6c6c61746f723c63616e64696461746573207365742e4056616c5374616b6541626f76654d61780006041101546865206163636f756e742068617320616c7265616479207374616b656420746865206d6178696d756d20616d6f756e74206f662066756e647320706f737369626c652e4844656c65676174696f6e42656c6f774d696e000708f8546865206163636f756e7420686173206e6f74207374616b656420656e6f7567682066756e647320746f2064656c6567617465206120636f6c6c61746f722863616e6469646174652e38416c72656164794c656176696e670008080d0154686520636f6c6c61746f722063616e6469646174652068617320616c72656164792074726967676572207468652070726f6365737320746f206c65617665207468656c736574206f6620636f6c6c61746f722063616e646964617465732e284e6f744c656176696e67000908f454686520636f6c6c61746f722063616e6469646174652077616e74656420746f20657865637574652074686520657869742062757420686173206e6f74f472657175657374656420746f206c65617665206265666f72652062792063616c6c696e672060696e69745f6c656176655f63616e64696461746573602e3843616e6e6f744c65617665596574000a08dc54686520636f6c6c61746f7220747269656420746f206c65617665206265666f72652077616974696e67206174206c6561737420666f72746045786974517565756544656c617960206d616e7920726f756e64732e6443616e6e6f744a6f696e4265666f7265556e6c6f636b696e67000b10f8546865206163636f756e742068617320612066756c6c206c697374206f6620756e7374616b696e6720726571756573747320616e64206e6565647320746ffc756e6c6f636b206174206c65617374206f6e65206f66207468657365206265666f7265206265696e672061626c6520746f206a6f696e2028616761696e292edc4e4f54453a2043616e206f6e6c792068617070656e20696620746865206163636f756e742077617320612063616e646964617465206f72f464656c656761746f72206265666f726520616e642065697468657220676f74206b69636b6564206f722065786974656420766f6c756e746172696c792e44416c726561647944656c65676174696e67000c04e4546865206163636f756e7420697320616c72656164792064656c65676174696e672074686520636f6c6c61746f722063616e6469646174652e404e6f7459657444656c65676174696e67000d080901546865206163636f756e7420686173206e6f742064656c65676174656420616e7920636f6c6c61746f722063616e646964617465207965742c2068656e6365206974806973206e6f7420696e2074686520736574206f662064656c656761746f72732e6c44656c65676174696f6e73506572526f756e644578636565646564000e1811015468652064656c656761746f722068617320657863656564656420746865206e756d626572206f662064656c65676174696f6e732070657220726f756e6420776869636894697320657175616c20746f204d617844656c656761746f7273506572436f6c6c61746f722e000901546869732070726f746563747320616761696e73742061747461636b7320696e20776869636820612064656c656761746f722063616e2072652d64656c6567617465010166726f6d206120636f6c6c61746f722077686f2068617320616c726561647920617574686f726564206120626c6f636b2c20746f20616e6f74686572206f6e6570776869636820686173206e6f7420696e207468697320726f756e642e44546f6f4d616e7944656c656761746f7273000f14010154686520636f6c6c61746f722063616e6469646174652068617320616c7265616479207265616368656420746865206d6178696d756d206e756d626572206f662c64656c656761746f72732e00050154686973206572726f722069732067656e65726174656420696e20636173652061206e65772064656c65676174696f6e207265717565737420646f6573206e6f74f47374616b6520656e6f7567682066756e647320746f207265706c61636520736f6d65206f74686572206578697374696e672064656c65676174696f6e2e60546f6f466577436f6c6c61746f7243616e64696461746573001008110154686520736574206f6620636f6c6c61746f722063616e6469646174657320776f756c642066616c6c2062656c6f7720746865207265717569726564206d696e696d756d5469662074686520636f6c6c61746f72206c6566742e5043616e6e6f745374616b6549664c656176696e67001108f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66010163616e6469646174657320616e642063616e6e6f7420706572666f726d20616e79206f7468657220616374696f6e7320696e20746865206d65616e74696d652e5c43616e6e6f7444656c656761746549664c656176696e67001208f854686520636f6c6c61746f722063616e64696461746520697320696e207468652070726f63657373206f66206c656176696e672074686520736574206f66ac63616e6469646174657320616e6420746875732063616e6e6f742062652064656c65676174656420746f2e804d6178436f6c6c61746f727350657244656c656761746f72457863656564656400130811015468652064656c656761746f722068617320616c72656164792064656c65676174656420746865206d6178696d756d206e756d626572206f662063616e6469646174657320616c6c6f7765642e60416c726561647944656c656761746564436f6c6c61746f72001408ec5468652064656c656761746f722068617320616c72656164792070726576696f75736c792064656c6567617465642074686520636f6c6c61746f722863616e6469646174652e4844656c65676174696f6e4e6f74466f756e64001504f854686520676976656e2064656c65676174696f6e20646f6573206e6f7420657869737420696e2074686520736574206f662064656c65676174696f6e732e24556e646572666c6f77001608050154686520636f6c6c61746f722064656c6567617465206f72207468652064656c656761746f7220697320747279696e6720746f20756e2d7374616b65206d6f72658066756e64732074686174206172652063757272656e746c79207374616b65642e4443616e6e6f7453657441626f76654d6178001708d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738061626f766520746865206d6178696d756d2076616c756520616c6c6f7765642e4443616e6e6f7453657442656c6f774d696e001808d8546865206e756d626572206f662073656c65637465642063616e6469646174657320706572207374616b696e6720726f756e642069738062656c6f7720746865206d696e696d756d2076616c756520616c6c6f7765642e3c496e76616c69645363686564756c65001904dc416e20696e76616c696420696e666c6174696f6e20636f6e66696775726174696f6e20697320747279696e6720746f206265207365742e3c4e6f4d6f7265556e7374616b696e67001a08c4546865207374616b696e6720726577617264206265696e6720756e6c6f636b656420646f6573206e6f742065786973742e7c4d617820756e6c6f636b696e6720726571756573747320726561636865642e20546f6f4561726c79001b0801015468652072657761726420726174652063616e6e6f742062652061646a75737465642079657420617320616e20656e74697265207965617220686173206e6f741c7061737365642e345374616b654e6f74466f756e64001c04d850726f7669646564207374616b65642076616c7565206973207a65726f2e2053686f756c64206e65766572206265207468726f776e2e40556e7374616b696e674973456d707479001d049443616e6e6f7420756e6c6f636b207768656e20556e7374616b656420697320656d7074792e3c526577617264734e6f74466f756e64001e047843616e6e6f7420636c61696d207265776172647320696620656d7074792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e19040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011d04045300000400e50501185665633c543e00001d040000040c2021040000210410346672616d655f737570706f72741874726169747324707265696d616765731c426f756e646564040454012504010c184c6567616379040110686173683001104861736800000018496e6c696e65040095010134426f756e646564496e6c696e65000100184c6f6f6b7570080110686173683001104861736800010c6c656e20010c75333200020000250408447370697269746e65745f72756e74696d652c52756e74696d6543616c6c0001801853797374656d0400d50201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400150301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c496e646963657304001d0301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c496e64696365732c2052756e74696d653e0005002042616c616e6365730400850301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0006001c53657373696f6e0400c10301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53657373696f6e2c2052756e74696d653e0016004050617261636861696e5374616b696e670400110401d50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e5374616b696e672c2052756e74696d653e0015002444656d6f63726163790400290401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656d6f63726163792c2052756e74696d653e001e001c436f756e63696c0400390401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f756e63696c2c2052756e74696d653e001f0048546563686e6963616c436f6d6d69747465650400410401dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c436f6d6d69747465652c2052756e74696d653e0020004c546563686e6963616c4d656d626572736869700400450401e10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546563686e6963616c4d656d626572736869702c2052756e74696d653e0022002054726561737572790400490401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54726561737572792c2052756e74696d653e0023001c5574696c69747904004d0401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e0028001c56657374696e670400750401b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c56657374696e672c2052756e74696d653e002900245363686564756c657204007d0401b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e002a001450726f78790400850401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e002b0020507265696d61676504008d0401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e002c0038546970734d656d626572736869700400910401cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970734d656d626572736869702c2052756e74696d653e002d0010546970730400950401a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c546970732c2052756e74696d653e002e00204d756c74697369670400990401b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e002f001443747970650400a10401a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c43747970652c2052756e74696d653e003d002c4174746573746174696f6e0400a50401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4174746573746174696f6e2c2052756e74696d653e003e002844656c65676174696f6e0400b50401bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44656c65676174696f6e2c2052756e74696d653e003f000c4469640400d10401a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469642c2052756e74696d653e004000244469644c6f6f6b75700400290501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4469644c6f6f6b75702c2052756e74696d653e00430024576562334e616d65730400390501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c576562334e616d65732c2052756e74696d653e004400445075626c696343726564656e7469616c7304003d0501d90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5075626c696343726564656e7469616c732c2052756e74696d653e004500244d6967726174696f6e04004d0501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d6967726174696f6e2c2052756e74696d653e0046003c50617261636861696e53797374656d0400510501d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e53797374656d2c2052756e74696d653e0050003450617261636861696e496e666f0400850501c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50617261636861696e496e666f2c2052756e74696d653e0051002458636d7051756575650400890501b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c58636d7051756575652c2052756e74696d653e0052002c506f6c6b61646f7458636d04008d0501c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c506f6c6b61646f7458636d2c2052756e74696d653e00530020446d7051756575650400e10501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c446d7051756575652c2052756e74696d653e0055000029040c4070616c6c65745f64656d6f63726163791870616c6c65741043616c6c04045400014c1c70726f706f736508012070726f706f73616c21040140426f756e64656443616c6c4f663c543e00011476616c75650902013042616c616e63654f663c543e00000460536565205b6050616c6c65743a3a70726f706f7365605d2e187365636f6e6404012070726f706f73616cfd01012450726f70496e6465780001045c536565205b6050616c6c65743a3a7365636f6e64605d2e10766f74650801247265665f696e646578fd01013c5265666572656e64756d496e646578000110766f74659c01644163636f756e74566f74653c42616c616e63654f663c543e3e00020454536565205b6050616c6c65743a3a766f7465605d2e40656d657267656e63795f63616e63656c0401247265665f696e64657820013c5265666572656e64756d496e64657800030484536565205b6050616c6c65743a3a656d657267656e63795f63616e63656c605d2e4065787465726e616c5f70726f706f736504012070726f706f73616c21040140426f756e64656443616c6c4f663c543e00040484536565205b6050616c6c65743a3a65787465726e616c5f70726f706f7365605d2e6465787465726e616c5f70726f706f73655f6d616a6f7269747904012070726f706f73616c21040140426f756e64656443616c6c4f663c543e000504a8536565205b6050616c6c65743a3a65787465726e616c5f70726f706f73655f6d616a6f72697479605d2e6065787465726e616c5f70726f706f73655f64656661756c7404012070726f706f73616c21040140426f756e64656443616c6c4f663c543e000604a4536565205b6050616c6c65743a3a65787465726e616c5f70726f706f73655f64656661756c74605d2e28666173745f747261636b0c013470726f706f73616c5f6861736830011048323536000134766f74696e675f706572696f64100144426c6f636b4e756d626572466f723c543e00011464656c6179100144426c6f636b4e756d626572466f723c543e0007046c536565205b6050616c6c65743a3a666173745f747261636b605d2e347665746f5f65787465726e616c04013470726f706f73616c5f686173683001104832353600080478536565205b6050616c6c65743a3a7665746f5f65787465726e616c605d2e4463616e63656c5f7265666572656e64756d0401247265665f696e646578fd01013c5265666572656e64756d496e64657800090488536565205b6050616c6c65743a3a63616e63656c5f7265666572656e64756d605d2e2064656c65676174650c0108746f210301504163636f756e7449644c6f6f6b75704f663c543e000128636f6e76696374696f6e2d040128436f6e76696374696f6e00011c62616c616e636518013042616c616e63654f663c543e000a0464536565205b6050616c6c65743a3a64656c6567617465605d2e28756e64656c6567617465000b046c536565205b6050616c6c65743a3a756e64656c6567617465605d2e58636c6561725f7075626c69635f70726f706f73616c73000c049c536565205b6050616c6c65743a3a636c6561725f7075626c69635f70726f706f73616c73605d2e18756e6c6f636b040118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e000d045c536565205b6050616c6c65743a3a756e6c6f636b605d2e2c72656d6f76655f766f7465040114696e64657820013c5265666572656e64756d496e646578000e0470536565205b6050616c6c65743a3a72656d6f76655f766f7465605d2e4472656d6f76655f6f746865725f766f7465080118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e000114696e64657820013c5265666572656e64756d496e646578000f0488536565205b6050616c6c65743a3a72656d6f76655f6f746865725f766f7465605d2e24626c61636b6c69737408013470726f706f73616c5f686173683001104832353600013c6d617962655f7265665f696e6465783104015c4f7074696f6e3c5265666572656e64756d496e6465783e00100468536565205b6050616c6c65743a3a626c61636b6c697374605d2e3c63616e63656c5f70726f706f73616c04012870726f705f696e646578fd01012450726f70496e64657800110480536565205b6050616c6c65743a3a63616e63656c5f70726f706f73616c605d2e307365745f6d657461646174610801146f776e6572a401344d657461646174614f776e65720001286d617962655f68617368350401504f7074696f6e3c507265696d616765486173683e00120474536565205b6050616c6c65743a3a7365745f6d65746164617461605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d040c4070616c6c65745f64656d6f637261637928636f6e76696374696f6e28436f6e76696374696f6e00011c104e6f6e65000000204c6f636b65643178000100204c6f636b65643278000200204c6f636b65643378000300204c6f636b65643478000400204c6f636b65643578000500204c6f636b6564367800060000310404184f7074696f6e04045401200108104e6f6e6500000010536f6d650400200000010000350404184f7074696f6e04045401300108104e6f6e6500000010536f6d65040030000001000039040c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273b90101445665633c543a3a4163636f756e7449643e0001147072696d653d0401504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7420012c4d656d626572436f756e7400000470536565205b6050616c6c65743a3a7365745f6d656d62657273605d2e1c6578656375746508012070726f706f73616c2504017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64fd01010c75333200010460536565205b6050616c6c65743a3a65786563757465605d2e1c70726f706f73650c01247468726573686f6c64fd01012c4d656d626572436f756e7400012070726f706f73616c2504017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64fd01010c75333200020460536565205b6050616c6c65743a3a70726f706f7365605d2e10766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578fd01013450726f706f73616c496e64657800011c617070726f7665ac0110626f6f6c00030454536565205b6050616c6c65743a3a766f7465605d2e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a4861736800050490536565205b6050616c6c65743a3a646973617070726f76655f70726f706f73616c605d2e14636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578fd01013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642801185765696768740001306c656e6774685f626f756e64fd01010c75333200060458536565205b6050616c6c65743a3a636c6f7365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3d0404184f7074696f6e04045401000108104e6f6e6500000010536f6d65040000000001000041040c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d62657273b90101445665633c543a3a4163636f756e7449643e0001147072696d653d0401504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7420012c4d656d626572436f756e7400000470536565205b6050616c6c65743a3a7365745f6d656d62657273605d2e1c6578656375746508012070726f706f73616c2504017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64fd01010c75333200010460536565205b6050616c6c65743a3a65786563757465605d2e1c70726f706f73650c01247468726573686f6c64fd01012c4d656d626572436f756e7400012070726f706f73616c2504017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e64fd01010c75333200020460536565205b6050616c6c65743a3a70726f706f7365605d2e10766f74650c012070726f706f73616c30011c543a3a48617368000114696e646578fd01013450726f706f73616c496e64657800011c617070726f7665ac0110626f6f6c00030454536565205b6050616c6c65743a3a766f7465605d2e4c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736830011c543a3a4861736800050490536565205b6050616c6c65743a3a646973617070726f76655f70726f706f73616c605d2e14636c6f736510013470726f706f73616c5f6861736830011c543a3a48617368000114696e646578fd01013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642801185765696768740001306c656e6774685f626f756e64fd01010c75333200060458536565205b6050616c6c65743a3a636c6f7365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e45040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0000046c536565205b6050616c6c65743a3a6164645f6d656d626572605d2e3472656d6f76655f6d656d62657204010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e00010478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e2c737761705f6d656d62657208011872656d6f7665210301504163636f756e7449644c6f6f6b75704f663c543e00010c616464210301504163636f756e7449644c6f6f6b75704f663c543e00020470536565205b6050616c6c65743a3a737761705f6d656d626572605d2e3472657365745f6d656d6265727304011c6d656d62657273b90101445665633c543a3a4163636f756e7449643e00030478536565205b6050616c6c65743a3a72657365745f6d656d62657273605d2e286368616e67655f6b657904010c6e6577210301504163636f756e7449644c6f6f6b75704f663c543e0004046c536565205b6050616c6c65743a3a6368616e67655f6b6579605d2e247365745f7072696d6504010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e00050468536565205b6050616c6c65743a3a7365745f7072696d65605d2e2c636c6561725f7072696d6500060470536565205b6050616c6c65743a3a636c6561725f7072696d65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e49040c3c70616c6c65745f74726561737572791870616c6c65741043616c6c0804540004490001143470726f706f73655f7370656e6408011476616c75650902013c42616c616e63654f663c542c20493e00012c62656e6566696369617279210301504163636f756e7449644c6f6f6b75704f663c543e00000478536565205b6050616c6c65743a3a70726f706f73655f7370656e64605d2e3c72656a6563745f70726f706f73616c04012c70726f706f73616c5f6964fd01013450726f706f73616c496e64657800010480536565205b6050616c6c65743a3a72656a6563745f70726f706f73616c605d2e40617070726f76655f70726f706f73616c04012c70726f706f73616c5f6964fd01013450726f706f73616c496e64657800020484536565205b6050616c6c65743a3a617070726f76655f70726f706f73616c605d2e147370656e64080118616d6f756e740902013c42616c616e63654f663c542c20493e00012c62656e6566696369617279210301504163636f756e7449644c6f6f6b75704f663c543e00030458536565205b6050616c6c65743a3a7370656e64605d2e3c72656d6f76655f617070726f76616c04012c70726f706f73616c5f6964fd01013450726f706f73616c496e64657800040480536565205b6050616c6c65743a3a72656d6f76655f617070726f76616c605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d040c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c735104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000458536565205b6050616c6c65743a3a6261746368605d2e3461735f64657269766174697665080114696e646578e0010c75313600011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00010478536565205b6050616c6c65743a3a61735f64657269766174697665605d2e2462617463685f616c6c04011463616c6c735104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00020468536565205b6050616c6c65743a3a62617463685f616c6c605d2e2c64697370617463685f617308012461735f6f726967696e55040154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00030470536565205b6050616c6c65743a3a64697370617463685f6173605d2e2c666f7263655f626174636804011463616c6c735104017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00040470536565205b6050616c6c65743a3a666f7263655f6261746368605d2e2c776974685f77656967687408011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00011877656967687428011857656967687400050470536565205b6050616c6c65743a3a776974685f776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5104000002250400550408447370697269746e65745f72756e74696d65304f726967696e43616c6c657200011c1873797374656d0400590401746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000001c436f756e63696c04005d0401010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e001f0048546563686e6963616c436f6d6d69747465650400610401010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365323e0020000c4469640400650401506469643a3a4f726967696e3c52756e74696d653e0040002c506f6c6b61646f7458636d04006904014870616c6c65745f78636d3a3a4f726967696e0053002843756d756c757358636d04006d04016863756d756c75735f70616c6c65745f78636d3a3a4f726967696e00540010566f69640400710401110173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a566f69640006000059040c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200005d04084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080020012c4d656d626572436f756e74000020012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d000200006104084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080020012c4d656d626572436f756e74000020012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d0002000065040c0c646964186f726967696e304469645261774f726967696e08344469644964656e7469666965720100244163636f756e74496401000008010869640001344469644964656e7469666965720001247375626d69747465720001244163636f756e744964000069040c2870616c6c65745f78636d1870616c6c6574184f726967696e0001080c58636d0400f10101344d756c74694c6f636174696f6e00000020526573706f6e73650400f10101344d756c74694c6f636174696f6e000100006d040c4863756d756c75735f70616c6c65745f78636d1870616c6c6574184f726967696e0001081452656c6179000000405369626c696e6750617261636861696e0400e5010118506172614964000100007104081c73705f636f726510566f69640001000075040c3870616c6c65745f76657374696e671870616c6c65741043616c6c040454000114107665737400000454536565205b6050616c6c65743a3a76657374605d2e28766573745f6f74686572040118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e0001046c536565205b6050616c6c65743a3a766573745f6f74686572605d2e3c7665737465645f7472616e73666572080118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65790401b056657374696e67496e666f3c42616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e3e00020480536565205b6050616c6c65743a3a7665737465645f7472616e73666572605d2e54666f7263655f7665737465645f7472616e736665720c0118736f75726365210301504163636f756e7449644c6f6f6b75704f663c543e000118746172676574210301504163636f756e7449644c6f6f6b75704f663c543e0001207363686564756c65790401b056657374696e67496e666f3c42616c616e63654f663c543e2c20426c6f636b4e756d626572466f723c543e3e00030498536565205b6050616c6c65743a3a666f7263655f7665737465645f7472616e73666572605d2e3c6d657267655f7363686564756c657308013c7363686564756c65315f696e64657820010c75333200013c7363686564756c65325f696e64657820010c75333200040480536565205b6050616c6c65743a3a6d657267655f7363686564756c6573605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e79040c3870616c6c65745f76657374696e673076657374696e675f696e666f2c56657374696e67496e666f081c42616c616e636501182c426c6f636b4e756d6265720110000c01186c6f636b656418011c42616c616e63650001247065725f626c6f636b18011c42616c616e63650001387374617274696e675f626c6f636b10012c426c6f636b4e756d62657200007d040c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000118207363686564756c651001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963810401ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000464536565205b6050616c6c65743a3a7363686564756c65605d2e1863616e63656c0801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657820010c7533320001045c536565205b6050616c6c65743a3a63616e63656c605d2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963810401ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0002047c536565205b6050616c6c65743a3a7363686564756c655f6e616d6564605d2e3063616e63656c5f6e616d656404010869640401205461736b4e616d6500030474536565205b6050616c6c65743a3a63616e63656c5f6e616d6564605d2e387363686564756c655f61667465721001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963810401ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004047c536565205b6050616c6c65743a3a7363686564756c655f6166746572605d2e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963810401ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00050494536565205b6050616c6c65743a3a7363686564756c655f6e616d65645f6166746572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e810404184f7074696f6e04045401d00108104e6f6e6500000010536f6d650400d0000001000085040c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616c210301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065890401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000458536565205b6050616c6c65743a3a70726f7879605d2e246164645f70726f78790c012064656c6567617465210301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00010468536565205b6050616c6c65743a3a6164645f70726f7879605d2e3072656d6f76655f70726f78790c012064656c6567617465210301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00020474536565205b6050616c6c65743a3a72656d6f76655f70726f7879605d2e3872656d6f76655f70726f786965730003047c536565205b6050616c6c65743a3a72656d6f76655f70726f78696573605d2e2c6372656174655f707572650c012870726f78795f74797065dc0130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e000114696e646578e0010c75313600040470536565205b6050616c6c65743a3a6372656174655f70757265605d2e246b696c6c5f7075726514011c737061776e6572210301504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065dc0130543a3a50726f787954797065000114696e646578e0010c7531360001186865696768742c0144426c6f636b4e756d626572466f723c543e0001246578745f696e646578fd01010c75333200050468536565205b6050616c6c65743a3a6b696c6c5f70757265605d2e20616e6e6f756e63650801107265616c210301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00060464536565205b6050616c6c65743a3a616e6e6f756e6365605d2e4c72656d6f76655f616e6e6f756e63656d656e740801107265616c210301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00070490536565205b6050616c6c65743a3a72656d6f76655f616e6e6f756e63656d656e74605d2e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465210301504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736830013443616c6c486173684f663c543e00080490536565205b6050616c6c65743a3a72656a6563745f616e6e6f756e63656d656e74605d2e3c70726f78795f616e6e6f756e63656410012064656c6567617465210301504163636f756e7449644c6f6f6b75704f663c543e0001107265616c210301504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065890401504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00090480536565205b6050616c6c65743a3a70726f78795f616e6e6f756e636564605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e890404184f7074696f6e04045401dc0108104e6f6e6500000010536f6d650400dc00000100008d040c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000110346e6f74655f707265696d616765040114627974657334011c5665633c75383e00000478536565205b6050616c6c65743a3a6e6f74655f707265696d616765605d2e3c756e6e6f74655f707265696d6167650401106861736830011c543a3a4861736800010480536565205b6050616c6c65743a3a756e6e6f74655f707265696d616765605d2e40726571756573745f707265696d6167650401106861736830011c543a3a4861736800020484536565205b6050616c6c65743a3a726571756573745f707265696d616765605d2e48756e726571756573745f707265696d6167650401106861736830011c543a3a486173680003048c536565205b6050616c6c65743a3a756e726571756573745f707265696d616765605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e91040c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0000046c536565205b6050616c6c65743a3a6164645f6d656d626572605d2e3472656d6f76655f6d656d62657204010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e00010478536565205b6050616c6c65743a3a72656d6f76655f6d656d626572605d2e2c737761705f6d656d62657208011872656d6f7665210301504163636f756e7449644c6f6f6b75704f663c543e00010c616464210301504163636f756e7449644c6f6f6b75704f663c543e00020470536565205b6050616c6c65743a3a737761705f6d656d626572605d2e3472657365745f6d656d6265727304011c6d656d62657273b90101445665633c543a3a4163636f756e7449643e00030478536565205b6050616c6c65743a3a72657365745f6d656d62657273605d2e286368616e67655f6b657904010c6e6577210301504163636f756e7449644c6f6f6b75704f663c543e0004046c536565205b6050616c6c65743a3a6368616e67655f6b6579605d2e247365745f7072696d6504010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e00050468536565205b6050616c6c65743a3a7365745f7072696d65605d2e2c636c6561725f7072696d6500060470536565205b6050616c6c65743a3a636c6561725f7072696d65605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e95040c2c70616c6c65745f746970731870616c6c65741043616c6c080454000449000118387265706f72745f617765736f6d65080118726561736f6e34011c5665633c75383e00010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0000047c536565205b6050616c6c65743a3a7265706f72745f617765736f6d65605d2e2c726574726163745f7469700401106861736830011c543a3a4861736800010470536565205b6050616c6c65743a3a726574726163745f746970605d2e1c7469705f6e65770c0118726561736f6e34011c5665633c75383e00010c77686f210301504163636f756e7449644c6f6f6b75704f663c543e0001247469705f76616c75650902013c42616c616e63654f663c542c20493e00020460536565205b6050616c6c65743a3a7469705f6e6577605d2e0c7469700801106861736830011c543a3a486173680001247469705f76616c75650902013c42616c616e63654f663c542c20493e00030450536565205b6050616c6c65743a3a746970605d2e24636c6f73655f7469700401106861736830011c543a3a4861736800040468536565205b6050616c6c65743a3a636c6f73655f746970605d2e24736c6173685f7469700401106861736830011c543a3a4861736800050468536565205b6050616c6c65743a3a736c6173685f746970605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e99040c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f72696573b90101445665633c543a3a4163636f756e7449643e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000494536565205b6050616c6c65743a3a61735f6d756c74695f7468726573686f6c645f31605d2e2061735f6d756c74691401247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573b90101445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e749d0401904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00011063616c6c2504017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f77656967687428011857656967687400010464536565205b6050616c6c65743a3a61735f6d756c7469605d2e40617070726f76655f61735f6d756c74691401247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573b90101445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e749d0401904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f77656967687428011857656967687400020484536565205b6050616c6c65743a3a617070726f76655f61735f6d756c7469605d2e3c63616e63656c5f61735f6d756c74691001247468726573686f6c64e0010c7531360001446f746865725f7369676e61746f72696573b90101445665633c543a3a4163636f756e7449643e00012474696d65706f696e74f4017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e00012463616c6c5f686173680401205b75383b2033325d00030480536565205b6050616c6c65743a3a63616e63656c5f61735f6d756c7469605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e9d0404184f7074696f6e04045401f40108104e6f6e6500000010536f6d650400f40000010000a1040c1463747970651870616c6c65741043616c6c0404540001080c616464040114637479706534011c5665633c75383e00000450536565205b6050616c6c65743a3a616464605d2e407365745f626c6f636b5f6e756d62657208012863747970655f686173683001384374797065486173684f663c543e000130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e00010484536565205b6050616c6c65743a3a7365745f626c6f636b5f6e756d626572605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea5040c2c6174746573746174696f6e1870616c6c65741043616c6c0404540001180c6164640c0128636c61696d5f68617368300138436c61696d486173684f663c543e00012863747970655f686173683001384374797065486173684f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e00000450536565205b6050616c6c65743a3a616464605d2e187265766f6b65080128636c61696d5f68617368300138436c61696d486173684f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0001045c536565205b6050616c6c65743a3a7265766f6b65605d2e1872656d6f7665080128636c61696d5f68617368300138436c61696d486173684f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0002045c536565205b6050616c6c65743a3a72656d6f7665605d2e3c7265636c61696d5f6465706f736974040128636c61696d5f68617368300138436c61696d486173684f663c543e00030480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e506368616e67655f6465706f7369745f6f776e6572040128636c61696d5f68617368300138436c61696d486173684f663c543e00040494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f736974040128636c61696d5f68617368300138436c61696d486173684f663c543e0005047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea90404184f7074696f6e04045401ad040108104e6f6e6500000010536f6d650400ad040000010000ad040c3872756e74696d655f636f6d6d6f6e34617574686f72697a6174696f6e3c50616c6c6574417574686f72697a65043044656c65676174696f6e416301b10401042844656c65676174696f6e0400b104013044656c65676174696f6e416300000000b1040c2864656c65676174696f6e386163636573735f636f6e74726f6c3044656c65676174696f6e416304045401a9010008013c7375626a6563745f6e6f64655f696430015444656c65676174696f6e4e6f646549644f663c543e0001286d61785f636865636b7320010c7533320000b5040c2864656c65676174696f6e1870616c6c65741043616c6c04045400011c406372656174655f686965726172636879080130726f6f745f6e6f64655f696430015444656c65676174696f6e4e6f646549644f663c543e00012863747970655f686173683001384374797065486173684f663c543e00000484536565205b6050616c6c65743a3a6372656174655f686965726172636879605d2e386164645f64656c65676174696f6e14013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e000124706172656e745f696430015444656c65676174696f6e4e6f646549644f663c543e00012064656c656761746500014044656c656761746f7249644f663c543e00012c7065726d697373696f6e730d01012c5065726d697373696f6e7300014864656c65676174655f7369676e6174757265b904016844656c65676174655369676e6174757265547970654f663c543e0001047c536565205b6050616c6c65743a3a6164645f64656c65676174696f6e605d2e447265766f6b655f64656c65676174696f6e0c013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001446d61785f706172656e745f636865636b7320010c75333200013c6d61785f7265766f636174696f6e7320010c75333200020488536565205b6050616c6c65743a3a7265766f6b655f64656c65676174696f6e605d2e4472656d6f76655f64656c65676174696f6e08013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c7320010c75333200030488536565205b6050616c6c65743a3a72656d6f76655f64656c65676174696f6e605d2e3c7265636c61696d5f6465706f73697408013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0001306d61785f72656d6f76616c7320010c75333200040480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e506368616e67655f6465706f7369745f6f776e657204013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e00050494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f73697404013464656c65676174696f6e5f696430015444656c65676174696f6e4e6f646549644f663c543e0006047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb9040c0c6469642c6469645f64657461696c73304469645369676e617475726500010c1c456432353531390400bd040148656432353531393a3a5369676e61747572650000001c537232353531390400c5040148737232353531393a3a5369676e61747572650001001445636473610400c904014065636473613a3a5369676e617475726500020000bd040c1c73705f636f72651c65643235353139245369676e617475726500000400c10401205b75383b2036345d0000c104000003400000000800c5040c1c73705f636f72651c73723235353139245369676e617475726500000400c10401205b75383b2036345d0000c9040c1c73705f636f7265146563647361245369676e617475726500000400cd0401205b75383b2036355d0000cd04000003410000000800d1040c0c6469641870616c6c65741043616c6c0404540001441863726561746508011c64657461696c73d5040170426f783c4469644372656174696f6e44657461696c734f663c543e3e0001247369676e6174757265b90401304469645369676e61747572650000045c536565205b6050616c6c65743a3a637265617465605d2e587365745f61757468656e7469636174696f6e5f6b657904011c6e65775f6b657911050188446964566572696669636174696f6e4b65793c4163636f756e7449644f663c543e3e0001049c536565205b6050616c6c65743a3a7365745f61757468656e7469636174696f6e5f6b6579605d2e487365745f64656c65676174696f6e5f6b657904011c6e65775f6b657911050188446964566572696669636174696f6e4b65793c4163636f756e7449644f663c543e3e0002048c536565205b6050616c6c65743a3a7365745f64656c65676174696f6e5f6b6579605d2e5472656d6f76655f64656c65676174696f6e5f6b657900030498536565205b6050616c6c65743a3a72656d6f76655f64656c65676174696f6e5f6b6579605d2e4c7365745f6174746573746174696f6e5f6b657904011c6e65775f6b657911050188446964566572696669636174696f6e4b65793c4163636f756e7449644f663c543e3e00040490536565205b6050616c6c65743a3a7365745f6174746573746174696f6e5f6b6579605d2e5872656d6f76655f6174746573746174696f6e5f6b65790005049c536565205b6050616c6c65743a3a72656d6f76655f6174746573746174696f6e5f6b6579605d2e546164645f6b65795f61677265656d656e745f6b657904011c6e65775f6b657901050140446964456e6372797074696f6e4b657900060498536565205b6050616c6c65743a3a6164645f6b65795f61677265656d656e745f6b6579605d2e6072656d6f76655f6b65795f61677265656d656e745f6b65790401186b65795f69643001284b657949644f663c543e000704a4536565205b6050616c6c65743a3a72656d6f76655f6b65795f61677265656d656e745f6b6579605d2e506164645f736572766963655f656e64706f696e74040140736572766963655f656e64706f696e74dd040138446964456e64706f696e743c543e00080494536565205b6050616c6c65743a3a6164645f736572766963655f656e64706f696e74605d2e5c72656d6f76655f736572766963655f656e64706f696e74040128736572766963655f6964e104015053657276696365456e64706f696e7449643c543e000904a0536565205b6050616c6c65743a3a72656d6f76655f736572766963655f656e64706f696e74605d2e1864656c65746504014c656e64706f696e74735f746f5f72656d6f766520010c753332000a045c536565205b6050616c6c65743a3a64656c657465605d2e3c7265636c61696d5f6465706f73697408012c6469645f7375626a6563740001484469644964656e7469666965724f663c543e00014c656e64706f696e74735f746f5f72656d6f766520010c753332000b0480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e3c7375626d69745f6469645f63616c6c0801206469645f63616c6c25050190426f783c446964417574686f72697a656443616c6c4f7065726174696f6e4f663c543e3e0001247369676e6174757265b90401304469645369676e6174757265000c0480536565205b6050616c6c65743a3a7375626d69745f6469645f63616c6c605d2e506368616e67655f6465706f7369745f6f776e6572000d0494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f73697404010c6469640001484469644964656e7469666965724f663c543e000e047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e2c64697370617463685f61730801386469645f6964656e7469666965720001484469644964656e7469666965724f663c543e00011063616c6c25040154426f783c44696443616c6c61626c654f663c543e3e000f0470536565205b6050616c6c65743a3a64697370617463685f6173605d2e4c6372656174655f66726f6d5f6163636f756e7404014861757468656e7469636174696f6e5f6b657911050188446964566572696669636174696f6e4b65793c4163636f756e7449644f663c543e3e00100490536565205b6050616c6c65743a3a6372656174655f66726f6d5f6163636f756e74605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed5040c0c6469642c6469645f64657461696c73484469644372656174696f6e44657461696c7310344469644964656e7469666965720100244163636f756e7449640100584d61784e65774b657941677265656d656e744b65797301d9042c446964456e64706f696e7401dd040018010c6469640001344469644964656e7469666965720001247375626d69747465720001244163636f756e7449640001586e65775f6b65795f61677265656d656e745f6b657973fd0401c04469644e65774b657941677265656d656e744b65795365743c4d61784e65774b657941677265656d656e744b6579733e00014c6e65775f6174746573746174696f6e5f6b65790d0501944f7074696f6e3c446964566572696669636174696f6e4b65793c4163636f756e7449643e3e0001486e65775f64656c65676174696f6e5f6b65790d0501944f7074696f6e3c446964566572696669636174696f6e4b65793c4163636f756e7449643e3e00014c6e65775f736572766963655f64657461696c73210501405665633c446964456e64706f696e743e0000d904103872756e74696d655f636f6d6d6f6e24636f6e7374616e74730c646964584d61784e65774b657941677265656d656e744b65797300000000dd040c0c64696444736572766963655f656e64706f696e74732c446964456e64706f696e7404045400000c01086964e104015053657276696365456e64706f696e7449643c543e000134736572766963655f7479706573e504017453657276696365456e64706f696e7454797065456e74726965733c543e00011075726c73f104017053657276696365456e64706f696e7455726c456e74726965733c543e0000e1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000e5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e904045300000400ed0401185665633c543e0000e9040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000ed04000002e90400f1040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f504045300000400f90401185665633c543e0000f5040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000f904000002f50400fd040c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e64656442547265655365740804540101050453000004000505012c42547265655365743c543e000001050c0c6469642c6469645f64657461696c7340446964456e6372797074696f6e4b65790001041858323535313904000401205b75383b2033325d00000000050504204254726565536574040454010105000400090500000009050000020105000d0504184f7074696f6e0404540111050108104e6f6e6500000010536f6d6504001105000001000011050c0c6469642c6469645f64657461696c7348446964566572696669636174696f6e4b657904244163636f756e744964010001101c4564323535313904001505013c656432353531393a3a5075626c69630000001c5372323535313904009d03013c737232353531393a3a5075626c696300010014456364736104001905013465636473613a3a5075626c69630002001c4163636f756e7404000001244163636f756e7449640003000015050c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d000019050c1c73705f636f7265146563647361185075626c6963000004001d0501205b75383b2033335d00001d050000032100000008002105000002dd040025050c0c6469642c6469645f64657461696c7368446964417574686f72697a656443616c6c4f7065726174696f6e14344469644964656e74696669657201002c44696443616c6c61626c650125042c426c6f636b4e756d6265720110244163636f756e7449640100245478436f756e74657201100014010c6469640001344469644964656e74696669657200012874785f636f756e7465721001245478436f756e74657200011063616c6c2504012c44696443616c6c61626c65000130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720001247375626d69747465720001244163636f756e744964000029050c4470616c6c65745f6469645f6c6f6f6b75701870616c6c65741043616c6c04045400011c446173736f63696174655f6163636f756e7408010c7265712d05015c4173736f63696174654163636f756e745265717565737400012865787069726174696f6e100144426c6f636b4e756d626572466f723c543e00000488536565205b6050616c6c65743a3a6173736f63696174655f6163636f756e74605d2e406173736f63696174655f73656e64657200010484536565205b6050616c6c65743a3a6173736f63696174655f73656e646572605d2e6472656d6f76655f73656e6465725f6173736f63696174696f6e000204a8536565205b6050616c6c65743a3a72656d6f76655f73656e6465725f6173736f63696174696f6e605d2e6872656d6f76655f6163636f756e745f6173736f63696174696f6e04011c6163636f756e74190101444c696e6b61626c654163636f756e744964000304ac536565205b6050616c6c65743a3a72656d6f76655f6163636f756e745f6173736f63696174696f6e605d2e3c7265636c61696d5f6465706f73697404011c6163636f756e74190101444c696e6b61626c654163636f756e74496400040480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e506368616e67655f6465706f7369745f6f776e657204011c6163636f756e74190101444c696e6b61626c654163636f756e74496400050494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f73697404011c6163636f756e74190101444c696e6b61626c654163636f756e7449640006047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d050c4470616c6c65745f6469645f6c6f6f6b7570646173736f63696174655f6163636f756e745f726571756573745c4173736f63696174654163636f756e745265717565737400010820506f6c6b61646f74080000012c4163636f756e74496433320000310501384d756c74695369676e617475726500000020457468657265756d08001d01012c4163636f756e7449643230000035050144457468657265756d5369676e6174757265000100003105082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400bd040148656432353531393a3a5369676e61747572650000001c537232353531390400c5040148737232353531393a3a5369676e61747572650001001445636473610400c904014065636473613a3a5369676e61747572650002000035050c4470616c6c65745f6469645f6c6f6f6b75701c6163636f756e7444457468657265756d5369676e617475726500000400c904014065636473613a3a5369676e6174757265000039050c4470616c6c65745f776562335f6e616d65731870616c6c65741043616c6c04045400011c14636c61696d0401106e616d652d010140576562334e616d65496e7075743c543e00000458536565205b6050616c6c65743a3a636c61696d605d2e4072656c656173655f62795f6f776e657200010484536565205b6050616c6c65743a3a72656c656173655f62795f6f776e6572605d2e3c7265636c61696d5f6465706f7369740401106e616d652d010140576562334e616d65496e7075743c543e00020480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e0c62616e0401106e616d652d010140576562334e616d65496e7075743c543e00030450536565205b6050616c6c65743a3a62616e605d2e14756e62616e0401106e616d652d010140576562334e616d65496e7075743c543e00040458536565205b6050616c6c65743a3a756e62616e605d2e506368616e67655f6465706f7369745f6f776e657200050494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f7369740401286e616d655f696e7075742d010140576562334e616d65496e7075743c543e0006047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e3d050c487075626c69635f63726564656e7469616c731870616c6c65741043616c6c04045400011c0c61646404012863726564656e7469616c41050164426f783c496e70757443726564656e7469616c4f663c543e3e00000450536565205b6050616c6c65743a3a616464605d2e187265766f6b6508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0001045c536565205b6050616c6c65743a3a7265766f6b65605d2e20756e7265766f6b6508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e00020464536565205b6050616c6c65743a3a756e7265766f6b65605d2e1872656d6f766508013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e000134617574686f72697a6174696f6ea90401604f7074696f6e3c543a3a416363657373436f6e74726f6c3e0003045c536565205b6050616c6c65743a3a72656d6f7665605d2e3c7265636c61696d5f6465706f73697404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e00040480536565205b6050616c6c65743a3a7265636c61696d5f6465706f736974605d2e506368616e67655f6465706f7369745f6f776e657204013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e00050494536565205b6050616c6c65743a3a6368616e67655f6465706f7369745f6f776e6572605d2e387570646174655f6465706f73697404013463726564656e7469616c5f696430014443726564656e7469616c49644f663c543e0006047c536565205b6050616c6c65743a3a7570646174655f6465706f736974605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e41050c487075626c69635f63726564656e7469616c732c63726564656e7469616c732843726564656e7469616c10244374797065486173680130445375626a6563744964656e74696669657201450518436c61696d7301490534416363657373436f6e74726f6c01ad040010012863747970655f6861736830012443747970654861736800011c7375626a656374450501445375626a6563744964656e746966696572000118636c61696d7349050118436c61696d73000134617574686f72697a6174696f6ea90401544f7074696f6e3c416363657373436f6e74726f6c3e000045050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e000049050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e00004d050c4070616c6c65745f6d6967726174696f6e1870616c6c65741043616c6c040454000104387570646174655f62616c616e63650401507265717565737465645f6d6967726174696f6e73a501014c456e7472696573546f4d6967726174653c543e0000047c536565205b6050616c6c65743a3a7570646174655f62616c616e6365605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e51050c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c65741043616c6c0404540001104c7365745f76616c69646174696f6e5f64617461040110646174615505015450617261636861696e496e686572656e744461746100000490536565205b6050616c6c65743a3a7365745f76616c69646174696f6e5f64617461605d2e607375646f5f73656e645f7570776172645f6d65737361676504011c6d6573736167653401345570776172644d657373616765000104a4536565205b6050616c6c65743a3a7375646f5f73656e645f7570776172645f6d657373616765605d2e44617574686f72697a655f75706772616465080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6eac0110626f6f6c00020488536565205b6050616c6c65743a3a617574686f72697a655f75706772616465605d2e60656e6163745f617574686f72697a65645f75706772616465040110636f646534011c5665633c75383e000304a4536565205b6050616c6c65743a3a656e6163745f617574686f72697a65645f75706772616465605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5505089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e745450617261636861696e496e686572656e7444617461000010013c76616c69646174696f6e5f646174615905015c50657273697374656456616c69646174696f6e4461746100014472656c61795f636861696e5f73746174656105015473705f747269653a3a53746f7261676550726f6f66000144646f776e776172645f6d657373616765736905016c5665633c496e626f756e64446f776e776172644d6573736167653e00014c686f72697a6f6e74616c5f6d65737361676573710501a442547265654d61703c5061726149642c205665633c496e626f756e6448726d704d6573736167653e3e000059050c4c706f6c6b61646f745f7072696d6974697665730876355c50657273697374656456616c69646174696f6e446174610804480130044e01200010012c706172656e745f686561645d050120486561644461746100014c72656c61795f706172656e745f6e756d6265722001044e00016472656c61795f706172656e745f73746f726167655f726f6f74300104480001306d61785f706f765f73697a6520010c75333200005d050c48706f6c6b61646f745f70617261636861696e287072696d6974697665732048656164446174610000040034011c5665633c75383e000061050c1c73705f747269653473746f726167655f70726f6f663053746f7261676550726f6f660000040128747269655f6e6f6465736505014442547265655365743c5665633c75383e3e00006505042042547265655365740404540134000400e10200000069050000026d05006d050860706f6c6b61646f745f636f72655f7072696d69746976657358496e626f756e64446f776e776172644d657373616765042c426c6f636b4e756d62657201200008011c73656e745f617420012c426c6f636b4e756d62657200010c6d736734013c446f776e776172644d65737361676500007105042042547265654d617008044b01e50104560175050004007d05000000750500000279050079050860706f6c6b61646f745f636f72655f7072696d69746976657348496e626f756e6448726d704d657373616765042c426c6f636b4e756d62657201200008011c73656e745f617420012c426c6f636b4e756d6265720001106461746134015073705f7374643a3a7665633a3a5665633c75383e00007d05000002810500810500000408e50175050085050c3870617261636861696e5f696e666f1870616c6c65741043616c6c040454000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e89050c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c65741043616c6c04045400012448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d69742801185765696768740000048c536565205b6050616c6c65743a3a736572766963655f6f766572776569676874605d2e5473757370656e645f78636d5f657865637574696f6e00010498536565205b6050616c6c65743a3a73757370656e645f78636d5f657865637574696f6e605d2e50726573756d655f78636d5f657865637574696f6e00020494536565205b6050616c6c65743a3a726573756d655f78636d5f657865637574696f6e605d2e607570646174655f73757370656e645f7468726573686f6c6404010c6e657720010c753332000304a4536565205b6050616c6c65743a3a7570646174655f73757370656e645f7468726573686f6c64605d2e547570646174655f64726f705f7468726573686f6c6404010c6e657720010c75333200040498536565205b6050616c6c65743a3a7570646174655f64726f705f7468726573686f6c64605d2e5c7570646174655f726573756d655f7468726573686f6c6404010c6e657720010c753332000504a0536565205b6050616c6c65743a3a7570646174655f726573756d655f7468726573686f6c64605d2e5c7570646174655f7468726573686f6c645f77656967687404010c6e6577280118576569676874000604a0536565205b6050616c6c65743a3a7570646174655f7468726573686f6c645f776569676874605d2e707570646174655f7765696768745f72657374726963745f646563617904010c6e6577280118576569676874000704b4536565205b6050616c6c65743a3a7570646174655f7765696768745f72657374726963745f6465636179605d2e847570646174655f78636d705f6d61785f696e646976696475616c5f77656967687404010c6e6577280118576569676874000804c8536565205b6050616c6c65743a3a7570646174655f78636d705f6d61785f696e646976696475616c5f776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e8d050c2870616c6c65745f78636d1870616c6c65741043616c6c04045400012c1073656e6408011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011c6d65737361676591050154426f783c56657273696f6e656458636d3c28293e3e00000454536565205b6050616c6c65743a3a73656e64605d2e3c74656c65706f72745f61737365747310011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747381020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c75333200010480536565205b6050616c6c65743a3a74656c65706f72745f617373657473605d2e5c726573657276655f7472616e736665725f61737365747310011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747381020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c753332000204a0536565205b6050616c6c65743a3a726573657276655f7472616e736665725f617373657473605d2e1c6578656375746508011c6d657373616765c10501c0426f783c56657273696f6e656458636d3c3c5420617320537973436f6e6669673e3a3a52756e74696d6543616c6c3e3e0001286d61785f77656967687428011857656967687400030460536565205b6050616c6c65743a3a65786563757465605d2e44666f7263655f78636d5f76657273696f6e0801206c6f636174696f6ef1010148426f783c4d756c74694c6f636174696f6e3e00011c76657273696f6e20012858636d56657273696f6e00040488536565205b6050616c6c65743a3a666f7263655f78636d5f76657273696f6e605d2e64666f7263655f64656661756c745f78636d5f76657273696f6e0401446d617962655f78636d5f76657273696f6e310401484f7074696f6e3c58636d56657273696f6e3e000504a8536565205b6050616c6c65743a3a666f7263655f64656661756c745f78636d5f76657273696f6e605d2e78666f7263655f7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6eb902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000604bc536565205b6050616c6c65743a3a666f7263655f7375627363726962655f76657273696f6e5f6e6f74696679605d2e80666f7263655f756e7375627363726962655f76657273696f6e5f6e6f746966790401206c6f636174696f6eb902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e000704c4536565205b6050616c6c65743a3a666f7263655f756e7375627363726962655f76657273696f6e5f6e6f74696679605d2e7c6c696d697465645f726573657276655f7472616e736665725f61737365747314011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747381020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c7533320001307765696768745f6c696d69747d02012c5765696768744c696d6974000804c0536565205b6050616c6c65743a3a6c696d697465645f726573657276655f7472616e736665725f617373657473605d2e5c6c696d697465645f74656c65706f72745f61737365747314011064657374b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00012c62656e6566696369617279b902016c426f783c56657273696f6e65644d756c74694c6f636174696f6e3e00011861737365747381020164426f783c56657273696f6e65644d756c74694173736574733e0001386665655f61737365745f6974656d20010c7533320001307765696768745f6c696d69747d02012c5765696768744c696d6974000904a0536565205b6050616c6c65743a3a6c696d697465645f74656c65706f72745f617373657473605d2e40666f7263655f73757370656e73696f6e04012473757370656e646564ac0110626f6f6c000a0484536565205b6050616c6c65743a3a666f7263655f73757370656e73696f6e605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e9105080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c00010808563204009505015076323a3a58636d3c52756e74696d6543616c6c3e00020008563304001502015076333a3a58636d3c52756e74696d6543616c6c3e0003000095050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400990501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e000099050000029d05009d050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404008502012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404008502012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404008502012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e7365a1050120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574738502012c4d756c746941737365747300012c62656e6566696369617279950201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574738502012c4d756c746941737365747300011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065650201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6c69020168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572fd01010c7533320001406d61785f6d6573736167655f73697a65fd01010c7533320001306d61785f6361706163697479fd01010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74fd01010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72fd01010c75333200011873656e646572fd01010c753332000124726563697069656e74fd01010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040099020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374950201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473b10501404d756c7469417373657446696c7465720001286d61785f617373657473fd01010c75333200012c62656e6566696369617279950201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473b10501404d756c7469417373657446696c7465720001286d61785f617373657473fd01010c75333200011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e000e003445786368616e6765417373657408011067697665b10501404d756c7469417373657446696c74657200011c726563656976658502012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473b10501404d756c7469417373657446696c74657200011c72657365727665950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473b10501404d756c7469417373657446696c74657200011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374950201344d756c74694c6f636174696f6e000118617373657473b10501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e080110666565738d0201284d756c746941737365740001307765696768745f6c696d6974bd05012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c657204009505014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e64697804009505014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574738502012c4d756c74694173736574730001187469636b6574950201344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b0000a1050c0c78636d08763220526573706f6e7365000110104e756c6c0000001841737365747304008502012c4d756c74694173736574730001003c457865637574696f6e526573756c740400a50501504f7074696f6e3c287533322c204572726f72293e0002001c56657273696f6e040020013873757065723a3a56657273696f6e00030000a50504184f7074696f6e04045401a9050108104e6f6e6500000010536f6d650400a9050000010000a9050000040820ad0500ad05100c78636d08763218747261697473144572726f72000168204f766572666c6f7700000034556e696d706c656d656e74656400010060556e74727573746564526573657276654c6f636174696f6e00020064556e7472757374656454656c65706f72744c6f636174696f6e000300444d756c74694c6f636174696f6e46756c6c000400684d756c74694c6f636174696f6e4e6f74496e7665727469626c65000500244261644f726967696e0006003c496e76616c69644c6f636174696f6e0007003441737365744e6f74466f756e64000800544661696c6564546f5472616e7361637441737365740009003c4e6f74576974686472617761626c65000a00484c6f636174696f6e43616e6e6f74486f6c64000b0054457863656564734d61784d65737361676553697a65000c005844657374696e6174696f6e556e737570706f72746564000d00245472616e73706f7274000e0028556e726f757461626c65000f0030556e6b6e6f776e436c61696d001000384661696c6564546f4465636f6465001100404d6178576569676874496e76616c6964001200384e6f74486f6c64696e674665657300130030546f6f457870656e736976650014001054726170040010010c7536340015004c556e68616e646c656458636d56657273696f6e001600485765696768744c696d69745265616368656404001001185765696768740017001c426172726965720018004c5765696768744e6f74436f6d70757461626c6500190000b105100c78636d087632286d756c74696173736574404d756c7469417373657446696c74657200010820446566696e69746504008502012c4d756c74694173736574730000001057696c640400b505013857696c644d756c7469417373657400010000b505100c78636d087632286d756c746961737365743857696c644d756c746941737365740001080c416c6c00000014416c6c4f6608010869649102011c4173736574496400010c66756eb905013c57696c6446756e676962696c69747900010000b905100c78636d087632286d756c746961737365743c57696c6446756e676962696c6974790001082046756e6769626c650000002c4e6f6e46756e6769626c6500010000bd050c0c78636d0876322c5765696768744c696d697400010824556e6c696d697465640000001c4c696d6974656404002c010c75363400010000c105080c78636d3056657273696f6e656458636d042c52756e74696d6543616c6c0001080856320400c505015076323a3a58636d3c52756e74696d6543616c6c3e0002000856330400d505015076333a3a58636d3c52756e74696d6543616c6c3e00030000c5050c0c78636d0876320c58636d042c52756e74696d6543616c6c00000400c90501745665633c496e737472756374696f6e3c52756e74696d6543616c6c3e3e0000c905000002cd0500cd050c0c78636d0876322c496e737472756374696f6e042c52756e74696d6543616c6c000170345769746864726177417373657404008502012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404008502012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404008502012c4d756c7469417373657473000200345175657279526573706f6e73650c012071756572795f69642c011c51756572794964000120726573706f6e7365a1050120526573706f6e73650001286d61785f7765696768742c010c753634000300345472616e7366657241737365740801186173736574738502012c4d756c746941737365747300012c62656e6566696369617279950201344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574738502012c4d756c746941737365747300011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f74797065650201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f73742c010c75363400011063616c6cd1050168446f75626c65456e636f6465643c52756e74696d6543616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572fd01010c7533320001406d61785f6d6573736167655f73697a65fd01010c7533320001306d61785f6361706163697479fd01010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74fd01010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72fd01010c75333200011873656e646572fd01010c753332000124726563697069656e74fd01010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e040099020154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f720c012071756572795f69642c011c5175657279496400011064657374950201344d756c74694c6f636174696f6e00014c6d61785f726573706f6e73655f7765696768742c010c753634000c00304465706f73697441737365740c0118617373657473b10501404d756c7469417373657446696c7465720001286d61785f617373657473fd01010c75333200012c62656e6566696369617279950201344d756c74694c6f636174696f6e000d004c4465706f736974526573657276654173736574100118617373657473b10501404d756c7469417373657446696c7465720001286d61785f617373657473fd01010c75333200011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e000e003445786368616e6765417373657408011067697665b10501404d756c7469417373657446696c74657200011c726563656976658502012c4d756c7469417373657473000f005c496e6974696174655265736572766557697468647261770c0118617373657473b10501404d756c7469417373657446696c74657200011c72657365727665950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473b10501404d756c7469417373657446696c74657200011064657374950201344d756c74694c6f636174696f6e00010c78636d9505011c58636d3c28293e001100305175657279486f6c64696e6710012071756572795f69642c011c5175657279496400011064657374950201344d756c74694c6f636174696f6e000118617373657473b10501404d756c7469417373657446696c74657200014c6d61785f726573706f6e73655f7765696768742c010c75363400120030427579457865637574696f6e080110666565738d0201284d756c746941737365740001307765696768745f6c696d6974bd05012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400c505014058636d3c52756e74696d6543616c6c3e0015002c536574417070656e6469780400c505014058636d3c52756e74696d6543616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574738502012c4d756c74694173736574730001187469636b6574950201344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f7765696768742c010c753634001a0048556e73756273637269626556657273696f6e001b0000d1050c0c78636d38646f75626c655f656e636f64656434446f75626c65456e636f646564040454000004011c656e636f64656434011c5665633c75383e0000d5050c0c78636d0876330c58636d041043616c6c00000400d90501585665633c496e737472756374696f6e3c43616c6c3e3e0000d905000002dd0500dd050c0c78636d0876332c496e737472756374696f6e041043616c6c0001c0345769746864726177417373657404002102012c4d756c7469417373657473000000545265736572766541737365744465706f736974656404002102012c4d756c7469417373657473000100585265636569766554656c65706f72746564417373657404002102012c4d756c7469417373657473000200345175657279526573706f6e736510012071756572795f69642c011c51756572794964000120726573706f6e73653d020120526573706f6e73650001286d61785f77656967687428011857656967687400011c71756572696572610201544f7074696f6e3c4d756c74694c6f636174696f6e3e000300345472616e7366657241737365740801186173736574732102012c4d756c746941737365747300012c62656e6566696369617279f10101344d756c74694c6f636174696f6e000400505472616e736665725265736572766541737365740c01186173736574732102012c4d756c746941737365747300011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e000500205472616e736163740c012c6f726967696e5f6b696e64650201284f726967696e4b696e64000158726571756972655f7765696768745f61745f6d6f737428011857656967687400011063616c6cd105014c446f75626c65456e636f6465643c43616c6c3e0006006448726d704e65774368616e6e656c4f70656e526571756573740c011873656e646572fd01010c7533320001406d61785f6d6573736167655f73697a65fd01010c7533320001306d61785f6361706163697479fd01010c7533320007004c48726d704368616e6e656c4163636570746564040124726563697069656e74fd01010c7533320008004848726d704368616e6e656c436c6f73696e670c0124696e69746961746f72fd01010c75333200011873656e646572fd01010c753332000124726563697069656e74fd01010c7533320009002c436c6561724f726967696e000a003444657363656e644f726967696e0400f5010154496e746572696f724d756c74694c6f636174696f6e000b002c5265706f72744572726f7204006d0201445175657279526573706f6e7365496e666f000c00304465706f7369744173736574080118617373657473710201404d756c7469417373657446696c74657200012c62656e6566696369617279f10101344d756c74694c6f636174696f6e000d004c4465706f7369745265736572766541737365740c0118617373657473710201404d756c7469417373657446696c74657200011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e000e003445786368616e676541737365740c011067697665710201404d756c7469417373657446696c74657200011077616e742102012c4d756c746941737365747300011c6d6178696d616cac0110626f6f6c000f005c496e6974696174655265736572766557697468647261770c0118617373657473710201404d756c7469417373657446696c74657200011c72657365727665f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e00100040496e69746961746554656c65706f72740c0118617373657473710201404d756c7469417373657446696c74657200011064657374f10101344d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e001100345265706f7274486f6c64696e67080134726573706f6e73655f696e666f6d0201445175657279526573706f6e7365496e666f000118617373657473710201404d756c7469417373657446696c74657200120030427579457865637574696f6e08011066656573290201284d756c746941737365740001307765696768745f6c696d69747d02012c5765696768744c696d697400130034526566756e64537572706c75730014003c5365744572726f7248616e646c65720400d505012458636d3c43616c6c3e0015002c536574417070656e6469780400d505012458636d3c43616c6c3e00160028436c6561724572726f7200170028436c61696d41737365740801186173736574732102012c4d756c74694173736574730001187469636b6574f10101344d756c74694c6f636174696f6e001800105472617004002c010c7536340019004053756273637269626556657273696f6e08012071756572795f69642c011c5175657279496400014c6d61785f726573706f6e73655f776569676874280118576569676874001a0048556e73756273637269626556657273696f6e001b00244275726e417373657404002102012c4d756c7469417373657473001c002c457870656374417373657404002102012c4d756c7469417373657473001d00304578706563744f726967696e0400610201544f7074696f6e3c4d756c74694c6f636174696f6e3e001e002c4578706563744572726f720400410201504f7074696f6e3c287533322c204572726f72293e001f00504578706563745472616e736163745374617475730400590201384d617962654572726f72436f64650020002c517565727950616c6c657408012c6d6f64756c655f6e616d6534011c5665633c75383e000134726573706f6e73655f696e666f6d0201445175657279526573706f6e7365496e666f0021003045787065637450616c6c6574140114696e646578fd01010c7533320001106e616d6534011c5665633c75383e00012c6d6f64756c655f6e616d6534011c5665633c75383e00012c63726174655f6d616a6f72fd01010c75333200013c6d696e5f63726174655f6d696e6f72fd01010c753332002200505265706f72745472616e7361637453746174757304006d0201445175657279526573706f6e7365496e666f0023004c436c6561725472616e736163745374617475730024003c556e6976657273616c4f726967696e0400f90101204a756e6374696f6e002500344578706f72744d6573736167650c011c6e6574776f726b050201244e6574776f726b496400012c64657374696e6174696f6ef5010154496e746572696f724d756c74694c6f636174696f6e00010c78636d1502011c58636d3c28293e002600244c6f636b41737365740801146173736574290201284d756c74694173736574000120756e6c6f636b6572f10101344d756c74694c6f636174696f6e0027002c556e6c6f636b41737365740801146173736574290201284d756c74694173736574000118746172676574f10101344d756c74694c6f636174696f6e002800384e6f7465556e6c6f636b61626c650801146173736574290201284d756c746941737365740001146f776e6572f10101344d756c74694c6f636174696f6e0029003452657175657374556e6c6f636b0801146173736574290201284d756c746941737365740001186c6f636b6572f10101344d756c74694c6f636174696f6e002a002c536574466565734d6f64650401306a69745f7769746864726177ac0110626f6f6c002b0020536574546f70696304000401205b75383b2033325d002c0028436c656172546f706963002d002c416c6961734f726967696e0400f10101344d756c74694c6f636174696f6e002e003c556e70616964457865637574696f6e0801307765696768745f6c696d69747d02012c5765696768744c696d6974000130636865636b5f6f726967696e610201544f7074696f6e3c4d756c74694c6f636174696f6e3e002f0000e1050c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c65741043616c6c04045400010448736572766963655f6f766572776569676874080114696e64657810013c4f766572776569676874496e6465780001307765696768745f6c696d69742801185765696768740000048c536565205b6050616c6c65743a3a736572766963655f6f766572776569676874605d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee5050000021d0400e90500000408ed051800ed050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e0000f1050c4070616c6c65745f64656d6f6372616379147479706573385265666572656e64756d496e666f0c2c426c6f636b4e756d62657201102050726f706f73616c0121041c42616c616e6365011801081c4f6e676f696e670400f50501c05265666572656e64756d5374617475733c426c6f636b4e756d6265722c2050726f706f73616c2c2042616c616e63653e0000002046696e6973686564080120617070726f766564ac0110626f6f6c00010c656e6410012c426c6f636b4e756d62657200010000f5050c4070616c6c65745f64656d6f6372616379147479706573405265666572656e64756d5374617475730c2c426c6f636b4e756d62657201102050726f706f73616c0121041c42616c616e636501180014010c656e6410012c426c6f636b4e756d62657200012070726f706f73616c2104012050726f706f73616c0001247468726573686f6c64980134566f74655468726573686f6c6400011464656c617910012c426c6f636b4e756d62657200011474616c6c79f905013854616c6c793c42616c616e63653e0000f9050c4070616c6c65745f64656d6f63726163791474797065731454616c6c79041c42616c616e63650118000c01106179657318011c42616c616e63650001106e61797318011c42616c616e636500011c7475726e6f757418011c42616c616e63650000fd050c4070616c6c65745f64656d6f637261637910766f746518566f74696e67101c42616c616e63650118244163636f756e74496401002c426c6f636b4e756d6265720110204d6178566f746573000108184469726563740c0114766f746573010601f4426f756e6465645665633c285265666572656e64756d496e6465782c204163636f756e74566f74653c42616c616e63653e292c204d6178566f7465733e00012c64656c65676174696f6e730d06015044656c65676174696f6e733c42616c616e63653e0001147072696f721106017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0000002844656c65676174696e6714011c62616c616e636518011c42616c616e63650001187461726765740001244163636f756e744964000128636f6e76696374696f6e2d040128436f6e76696374696f6e00012c64656c65676174696f6e730d06015044656c65676174696f6e733c42616c616e63653e0001147072696f721106017c5072696f724c6f636b3c426c6f636b4e756d6265722c2042616c616e63653e0001000001060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010506045300000400090601185665633c543e0000050600000408209c0009060000020506000d060c4070616c6c65745f64656d6f63726163791474797065732c44656c65676174696f6e73041c42616c616e6365011800080114766f74657318011c42616c616e636500011c6361706974616c18011c42616c616e6365000011060c4070616c6c65745f64656d6f637261637910766f7465245072696f724c6f636b082c426c6f636b4e756d62657201101c42616c616e6365011800080010012c426c6f636b4e756d626572000018011c42616c616e636500001506000004082104980019060000040810ed05001d060c4070616c6c65745f64656d6f63726163791870616c6c6574144572726f720404540001602056616c75654c6f770000043456616c756520746f6f206c6f773c50726f706f73616c4d697373696e670001045c50726f706f73616c20646f6573206e6f742065786973743c416c726561647943616e63656c65640002049443616e6e6f742063616e63656c207468652073616d652070726f706f73616c207477696365444475706c696361746550726f706f73616c0003045450726f706f73616c20616c7265616479206d6164654c50726f706f73616c426c61636b6c69737465640004046850726f706f73616c207374696c6c20626c61636b6c6973746564444e6f7453696d706c654d616a6f72697479000504a84e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792c496e76616c69644861736800060430496e76616c69642068617368284e6f50726f706f73616c000704504e6f2065787465726e616c2070726f706f73616c34416c72656164795665746f6564000804984964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365445265666572656e64756d496e76616c696400090484566f746520676976656e20666f7220696e76616c6964207265666572656e64756d2c4e6f6e6557616974696e67000a04504e6f2070726f706f73616c732077616974696e67204e6f74566f746572000b04c454686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e304e6f5065726d697373696f6e000c04c8546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e44416c726561647944656c65676174696e67000d0488546865206163636f756e7420697320616c72656164792064656c65676174696e672e44496e73756666696369656e7446756e6473000e04fc546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e344e6f7444656c65676174696e67000f04a0546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e28566f74657345786973740010085501546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696ce87468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e44496e7374616e744e6f74416c6c6f776564001104d854686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e204e6f6e73656e73650012049444656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e3c57726f6e675570706572426f756e6400130450496e76616c696420757070657220626f756e642e3c4d6178566f74657352656163686564001404804d6178696d756d206e756d626572206f6620766f74657320726561636865642e1c546f6f4d616e79001504804d6178696d756d206e756d626572206f66206974656d7320726561636865642e3c566f74696e67506572696f644c6f7700160454566f74696e6720706572696f6420746f6f206c6f7740507265696d6167654e6f7445786973740017047054686520707265696d61676520646f6573206e6f742065786973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e21060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400b10101185665633c543e00002506084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e64657820013450726f706f73616c496e6465780001247468726573686f6c6420012c4d656d626572436f756e7400011061796573b90101385665633c4163636f756e7449643e0001106e617973b90101385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d626572000029060c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e2d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400b10101185665633c543e000031060c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d6265720000045c4163636f756e74206973206e6f742061206d656d626572444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765643c50726f706f73616c4d697373696e670002044c50726f706f73616c206d7573742065786973742857726f6e67496e646578000304404d69736d61746368656420696e646578344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f72656448416c7265616479496e697469616c697a6564000504804d656d626572732061726520616c726561647920696e697469616c697a65642120546f6f4561726c79000604010154686520636c6f73652063616c6c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e40546f6f4d616e7950726f706f73616c73000704fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732e4c57726f6e6750726f706f73616c576569676874000804d054686520676976656e2077656967687420626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e4c57726f6e6750726f706f73616c4c656e677468000904d054686520676976656e206c656e67746820626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e35060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e000039060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e3d06083c70616c6c65745f74726561737572792050726f706f73616c08244163636f756e74496401001c42616c616e636501180010012070726f706f7365720001244163636f756e74496400011476616c756518011c42616c616e636500012c62656e65666963696172790001244163636f756e744964000110626f6e6418011c42616c616e6365000041060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540120045300000400b50301185665633c543e000045060c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040020010c7533320000490604184f7074696f6e04045401180108104e6f6e6500000010536f6d6504001800000100004d0608346672616d655f737570706f72742050616c6c65744964000004003902011c5b75383b20385d000051060c3c70616c6c65745f74726561737572791870616c6c6574144572726f7208045400044900011470496e73756666696369656e7450726f706f7365727342616c616e63650000047850726f706f73657227732062616c616e636520697320746f6f206c6f772e30496e76616c6964496e646578000104904e6f2070726f706f73616c206f7220626f756e7479206174207468617420696e6465782e40546f6f4d616e79417070726f76616c7300020480546f6f206d616e7920617070726f76616c7320696e207468652071756575652e58496e73756666696369656e745065726d697373696f6e0003084501546865207370656e64206f726967696e2069732076616c6964206275742074686520616d6f756e7420697420697320616c6c6f77656420746f207370656e64206973206c6f776572207468616e207468654c616d6f756e7420746f206265207370656e742e4c50726f706f73616c4e6f74417070726f7665640004047c50726f706f73616c20686173206e6f74206265656e20617070726f7665642e04784572726f7220666f72207468652074726561737572792070616c6c65742e55060c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e59060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540179040453000004005d0601185665633c543e00005d060000027904006106083870616c6c65745f76657374696e672052656c65617365730001080856300000000856310001000065060c3870616c6c65745f76657374696e671870616c6c6574144572726f72040454000114284e6f7456657374696e6700000484546865206163636f756e7420676976656e206973206e6f742076657374696e672e5441744d617856657374696e675363686564756c65730001082501546865206163636f756e7420616c72656164792068617320604d617856657374696e675363686564756c65736020636f756e74206f66207363686564756c657320616e642074687573510163616e6e6f742061646420616e6f74686572206f6e652e20436f6e7369646572206d657267696e67206578697374696e67207363686564756c657320696e206f7264657220746f2061646420616e6f746865722e24416d6f756e744c6f770002040501416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e605363686564756c65496e6465784f75744f66426f756e6473000304d0416e20696e64657820776173206f7574206f6620626f756e6473206f66207468652076657374696e67207363686564756c65732e54496e76616c69645363686564756c65506172616d730004040d014661696c656420746f206372656174652061206e6577207363686564756c65206265636175736520736f6d6520706172616d657465722077617320696e76616c69642e04744572726f7220666f72207468652076657374696e672070616c6c65742e69060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016d06045300000400750601185665633c543e00006d0604184f7074696f6e0404540171060108104e6f6e6500000010536f6d650400710600000100007106084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c0121042c426c6f636b4e756d62657201103450616c6c6574734f726967696e015504244163636f756e7449640100001401206d617962655f6964d401304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c2104011043616c6c0001386d617962655f706572696f646963810401944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e5504013450616c6c6574734f726967696e000075060000026d060079060c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e7d06000004088106180081060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018506045300000400890601185665633c543e00008506083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501dc2c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065dc012450726f78795479706500011464656c617910012c426c6f636b4e756d626572000089060000028506008d06000004089106180091060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019506045300000400990601185665633c543e00009506083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801302c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173683001104861736800011868656967687410012c426c6f636b4e756d626572000099060000029506009d060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea106083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f736974a5060150284163636f756e7449642c2042616c616e63652900010c6c656e20010c753332000000245265717565737465640c011c6465706f736974a90601704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7420010c75333200010c6c656e3104012c4f7074696f6e3c7533323e00010000a50600000408001800a90604184f7074696f6e04045401a5060108104e6f6e6500000010536f6d650400a5060000010000ad0600000408302000b1060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000b5060c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400011818546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb9060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e0000bd060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec106082c70616c6c65745f746970731c4f70656e54697010244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572011010486173680130001c0118726561736f6e3001104861736800010c77686f0001244163636f756e74496400011866696e6465720001244163636f756e74496400011c6465706f73697418011c42616c616e6365000118636c6f736573c506014c4f7074696f6e3c426c6f636b4e756d6265723e00011074697073c90601645665633c284163636f756e7449642c2042616c616e6365293e00012c66696e646572735f666565ac0110626f6f6c0000c50604184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000c906000002a50600cd060c3473705f61726974686d65746963287065725f7468696e67731c50657263656e740000040008010875380000d1060c2c70616c6c65745f746970731870616c6c6574144572726f7208045400044900011830526561736f6e546f6f4269670000048454686520726561736f6e20676976656e206973206a75737420746f6f206269672e30416c72656164794b6e6f776e00010488546865207469702077617320616c726561647920666f756e642f737461727465642e28556e6b6e6f776e5469700002046054686520746970206861736820697320756e6b6e6f776e2e244e6f7446696e6465720003041d01546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e245374696c6c4f70656e0004042901546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e245072656d61747572650005043101546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed50600000408000400d906083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656ef4015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c73dd06018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e0000dd060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400b90101185665633c543e0000e1060c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ee5060c1463747970652c63747970655f656e747279284374797065456e747279081c43726561746f7201002c426c6f636b4e756d62657201100008011c63726561746f7200011c43726561746f72000128637265617465645f617410012c426c6f636b4e756d6265720000e9060c1463747970651870616c6c6574144572726f7204045400010c204e6f74466f756e64000004985468657265206973206e6f20435479706520776974682074686520676976656e20686173682e34416c72656164794578697374730001046454686520435479706520616c7265616479206578697374732e3c556e61626c65546f506179466565730002040d0154686520706179696e67206163636f756e742077617320756e61626c6520746f2070617920746865206665657320666f72206372656174696e6720612063747970652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742eed060c2c6174746573746174696f6e306174746573746174696f6e73484174746573746174696f6e44657461696c7314244374797065486173680130284174746573746572496401003c417574686f72697a6174696f6e4964010501244163636f756e74496401001c42616c616e636501180014012863747970655f68617368300124437479706548617368000120617474657374657200012841747465737465724964000140617574686f72697a6174696f6e5f69640101015c4f7074696f6e3c417574686f72697a6174696f6e49643e00011c7265766f6b6564ac0110626f6f6c00011c6465706f736974f106016c4465706f7369743c4163636f756e7449642c2042616c616e63653e0000f1060c306b696c745f737570706f72741c6465706f7369741c4465706f736974081c4163636f756e7401001c42616c616e63650118000801146f776e657200011c4163636f756e74000118616d6f756e7418011c42616c616e63650000f5060000040805013000f9060c2c6174746573746174696f6e1870616c6c6574144572726f720404540001183c416c726561647941747465737465640000080901546865726520697320616c726561647920616e206174746573746174696f6e2077697468207468652073616d6520636c61696d20686173682073746f726564206f6e18636861696e2e38416c72656164795265766f6b6564000104a4546865206174746573746174696f6e2068617320616c7265616479206265656e207265766f6b65642e204e6f74466f756e64000204c04e6f206174746573746174696f6e206f6e20636861696e206d61746368696e672074686520636c61696d20686173682e3443547970654d69736d61746368000308fc546865206174746573746174696f6e20435479706520646f6573206e6f74206d61746368207468652043547970652073706563696669656420696e207468656864656c65676174696f6e2068696572617263687920726f6f742e344e6f74417574686f72697a6564000404f05468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f206368616e676520746865206174746573746174696f6e2e804d617844656c6567617465644174746573746174696f6e73457863656564656400050cf4546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732068617320616c7265616479206265656e05017265616368656420666f722074686520636f72726573706f6e64696e672064656c65676174696f6e2069642073756368207468617420616e6f74686572206f6e654063616e6e6f742062652061646465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742efd060c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368793844656c65676174696f6e4e6f6465144044656c65676174696f6e4e6f6465496401302c4d61784368696c6472656e0101074444656c65676174696f6e44657461696c73010507244163636f756e74496401001c42616c616e63650118001401446869657261726368795f726f6f745f696430014044656c65676174696f6e4e6f64654964000118706172656e74350401604f7074696f6e3c44656c65676174696f6e4e6f646549643e0001206368696c6472656e090701b8426f756e64656442547265655365743c44656c65676174696f6e4e6f646549642c204d61784368696c6472656e3e00011c64657461696c730507014444656c65676174696f6e44657461696c7300011c6465706f736974f106016c4465706f7369743c4163636f756e7449642c2042616c616e63653e00000107103872756e74696d655f636f6d6d6f6e24636f6e7374616e74732864656c65676174696f6e2c4d61784368696c6472656e0000000005070c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368794444656c65676174696f6e44657461696c73042c44656c656761746f7249640100000c01146f776e657200012c44656c656761746f72496400011c7265766f6b6564ac0110626f6f6c00012c7065726d697373696f6e730d01012c5065726d697373696f6e73000009070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401300453000004000d07012c42547265655365743c543e00000d07042042547265655365740404540130000400b10100000011070c2864656c65676174696f6e5064656c65676174696f6e5f6869657261726368796844656c65676174696f6e48696572617263687944657461696c73042443747970654861736801300004012863747970655f68617368300124437479706548617368000015070c2864656c65676174696f6e1870616c6c6574144572726f720404540001585c44656c65676174696f6e416c72656164794578697374730000041101546865726520697320616c726561647920612064656c65676174696f6e206e6f64652077697468207468652073616d652049442073746f726564206f6e20636861696e2e60496e76616c696444656c65676174655369676e617475726500010805015468652064656c65676174652773207369676e617475726520666f72207468652064656c65676174696f6e206372656174696f6e206f7065726174696f6e20697320696e76616c69642e4844656c65676174696f6e4e6f74466f756e64000204c04e6f2064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e4044656c65676174654e6f74466f756e64000304b84e6f2064656c656761746520776974682074686520676976656e2049442073746f726564206f6e20636861696e2e58486965726172636879416c7265616479457869737473000404f8546865726520697320616c72656164792061206869657261726368792077697468207468652073616d652049442073746f726564206f6e20636861696e2e444869657261726368794e6f74466f756e64000504bc4e6f2068696572617263687920776974682074686520676976656e2049442073746f726564206f6e20636861696e2e544d617853656172636844657074685265616368656400060409014d6178206e756d626572206f66206e6f64657320636865636b656420776974686f757420766572696679696e672074686520676976656e20636f6e646974696f6e2e684e6f744f776e65724f66506172656e7444656c65676174696f6e000708f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6ef462656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20706172656e74206e6f64652e744e6f744f776e65724f6644656c65676174696f6e486965726172636879000808f45468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f207772697465207468652064656c65676174696f6eec62656361757365207468657920617265206e6f7420746865206f776e6572206f66207468652064656c65676174696f6e20726f6f74206e6f64652e60506172656e7444656c65676174696f6e4e6f74466f756e64000904dc4e6f20706172656e742064656c65676174696f6e20776974682074686520676976656e2049442073746f726564206f6e20636861696e2e5c506172656e7444656c65676174696f6e5265766f6b6564000a04c854686520706172656e742064656c65676174696f6e206861732070726576696f75736c79206265656e207265766f6b65642e58556e617574686f72697a65645265766f636174696f6e000b04fc5468652064656c65676174696f6e207265766f6b6572206973206e6f7420616c6c6f77656420746f207265766f6b65207468652064656c65676174696f6e2e4c556e617574686f72697a656452656d6f76616c000c04ec5468652063616c6c206f726967696e206973206e6f7420617574686f72697a656420746f2072656d6f7665207468652064656c65676174696f6e2e58556e617574686f72697a656444656c65676174696f6e000d04fc5468652064656c65676174696f6e2063726561746f72206973206e6f7420616c6c6f77656420746f20637265617465207468652064656c65676174696f6e2e3041636365737344656e696564000e04f0546865206f7065726174696f6e207761736e277420616c6c6f7765642062656361757365206f6620696e73756666696369656e74207269676874732e6045786365656465645265766f636174696f6e426f756e6473000f080d014d6178206e756d626572206f66207265766f636174696f6e7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7238746865206f7065726174696f6e2e54457863656564656452656d6f76616c426f756e647300100811014d6178206e756d626572206f662072656d6f76616c7320666f722064656c65676174696f6e206e6f64657320686173206265656e207265616368656420666f7220746865286f7065726174696f6e2e584d61785265766f636174696f6e73546f6f4c61726765001104f8546865206d6178206e756d626572206f66207265766f636174696f6e206578636565647320746865206c696d697420666f72207468652070616c6c65742e4c4d617852656d6f76616c73546f6f4c61726765001204f0546865206d6178206e756d626572206f662072656d6f76616c73206578636565647320746865206c696d697420666f72207468652070616c6c65742e5c4d6178506172656e74436865636b73546f6f4c617267650013040501546865206d6178206e756d626572206f6620706172656e7420636865636b73206578636565647320746865206c696d697420666f72207468652070616c6c65742e20496e7465726e616c001404f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e4c4d61784368696c6472656e4578636565646564001508dc546865206d6178206e756d626572206f6620616c6c206368696c6472656e20686173206265656e207265616368656420666f722074686578636f72726573706f6e64696e672064656c65676174696f6e206e6f64652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e19070c0c6469642c6469645f64657461696c732844696444657461696c7304045400001c014861757468656e7469636174696f6e5f6b65793001284b657949644f663c543e0001486b65795f61677265656d656e745f6b6579731d0701684469644b657941677265656d656e744b65795365744f663c543e00013864656c65676174696f6e5f6b6579350401484f7074696f6e3c4b657949644f663c543e3e00013c6174746573746174696f6e5f6b6579350401484f7074696f6e3c4b657949644f663c543e3e00012c7075626c69635f6b657973210701504469645075626c69634b65794d61704f663c543e00013c6c6173745f74785f636f756e74657210010c75363400011c6465706f736974f10601944465706f7369743c4163636f756e7449644f663c543e2c2042616c616e63654f663c543e3e00001d070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401300453000004000d07012c42547265655365743c543e000021070c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b013004560125070453000004002d07013842547265654d61703c4b2c20563e000025070c0c6469642c6469645f64657461696c734c4469645075626c69634b657944657461696c73082c426c6f636b4e756d6265720110244163636f756e74496401000008010c6b65792907015c4469645075626c69634b65793c4163636f756e7449643e000130626c6f636b5f6e756d62657210012c426c6f636b4e756d626572000029070c0c6469642c6469645f64657461696c73304469645075626c69634b657904244163636f756e74496401000108545075626c6963566572696669636174696f6e4b6579040011050174446964566572696669636174696f6e4b65793c4163636f756e7449643e0000004c5075626c6963456e6372797074696f6e4b6579040001050140446964456e6372797074696f6e4b6579000100002d07042042547265654d617008044b01300456012507000400310700000031070000023507003507000004083025070039070000040800e104003d070c0c6469641870616c6c6574144572726f7204045400016c58496e76616c69645369676e6174757265466f726d6174000008050154686520444944206f7065726174696f6e207369676e6174757265206973206e6f7420696e2074686520666f726d61742074686520766572696669636174696f6e306b657920657870656374732e40496e76616c69645369676e6174757265000108f854686520444944206f7065726174696f6e207369676e617475726520697320696e76616c696420666f7220746865207061796c6f616420616e642074686568766572696669636174696f6e206b65792070726f76696465642e34416c7265616479457869737473000204f85468652044494420776974682074686520676976656e206964656e74696669657220697320616c72656164792070726573656e74206f6e20636861696e2e204e6f74466f756e64000304d44e6f2044494420776974682074686520676976656e206964656e7469666965722069732070726573656e74206f6e20636861696e2e5c566572696669636174696f6e4b65794e6f74466f756e6400040809014f6e65206f72206d6f726520766572696669636174696f6e206b657973207265666572656e63656420617265206e6f742073746f72656420696e2074686520736574546f6620766572696669636174696f6e206b6579732e30496e76616c69644e6f6e6365000504090154686520444944206f7065726174696f6e206e6f6e6365206973206e6f7420657175616c20746f207468652063757272656e7420444944206e6f6e6365202b20312e7c556e737570706f72746564446964417574686f72697a6174696f6e43616c6c000604e05468652063616c6c65642065787472696e73696320646f6573206e6f7420737570706f72742044494420617574686f7269736174696f6e2e6c496e76616c6964446964417574686f72697a6174696f6e43616c6c000708dc5468652063616c6c2068616420706172616d6574657273207468617420636f6e666c696374656420776974682065616368206f74686572406f72207765726520696e76616c69642e8c4d61784e65774b657941677265656d656e744b6579734c696d697445786365656465640008080d0141206e756d626572206f66206e6577206b65792061677265656d656e74206b6579732067726561746572207468616e20746865206d6178696d756d20616c6c6f77656448686173206265656e2070726f76696465642e544d61785075626c69634b65797345786365656465640009080501546865206d6178696d756d206e756d626572206f66207075626c6963206b65797320666f72207468697320444944206b6579206964656e74696669657220686173346265656e20726561636865642e6c4d61784b657941677265656d656e744b6579734578636565646564000a080501546865206d6178696d756d206e756d626572206f66206b65792061677265656d656e747320686173206265656e207265616368656420666f722074686520444944207375626a6563742e304261644469644f726967696e000b04bc546865204449442063616c6c20776173207375626d6974746564206279207468652077726f6e67206163636f756e74485472616e73616374696f6e45787069726564000c040d0154686520626c6f636b206e756d6265722070726f766964656420696e2061204449442d617574686f72697a6564206f7065726174696f6e20697320696e76616c69642e38416c726561647944656c65746564000d04b0546865204449442068617320616c7265616479206265656e2070726576696f75736c792064656c657465642e444e6f744f776e65724f664465706f736974000e04fc4f6e6c7920746865206f776e6572206f6620746865206465706f7369742063616e207265636c61696d206974732072657365727665642062616c616e63652e3c556e61626c65546f50617946656573000f04f0546865206f726967696e20697320756e61626c6520746f207265736572766520746865206465706f73697420616e642070617920746865206665652e6c4d61784e756d6265724f66536572766963657345786365656465640010041101546865206d6178696d756d206e756d626572206f66207365727669636520656e64706f696e747320666f7220612044494420686173206265656e2065786365656465642e684d61785365727669636549644c656e6774684578636565646564001104f0546865207365727669636520656e64706f696e7420494420657863656564656420746865206d6178696d756d20616c6c6f776564206c656e6774682e704d617853657276696365547970654c656e6774684578636565646564001208f84f6e65206f6620746865207365727669636520656e64706f696e7420747970657320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e884d61784e756d6265724f665479706573506572536572766963654578636565646564001308ec546865206d6178696d756d206e756d626572206f6620747970657320666f722061207365727669636520656e64706f696e7420686173206265656e2465786365656465642e6c4d61785365727669636555726c4c656e6774684578636565646564001408f44f6e65206f6620746865207365727669636520656e64706f696e742055524c7320657863656564656420746865206d6178696d756d20616c6c6f7765641c6c656e6774682e844d61784e756d6265724f6655726c735065725365727669636545786365656465640015041101546865206d6178696d756d206e756d626572206f662055524c7320666f722061207365727669636520656e64706f696e7420686173206265656e2065786365656465642e5053657276696365416c726561647945786973747300160411014120736572766963652077697468207468652070726f766964656420494420697320616c72656164792070726573656e7420666f722074686520676976656e204449442e3c536572766963654e6f74466f756e6400170409014120736572766963652077697468207468652070726f7669646564204944206973206e6f742070726573656e7420756e6465722074686520676976656e204449442e58496e76616c696453657276696365456e636f64696e6700180409014f6e65206f6620746865207365727669636520656e64706f696e742064657461696c7320636f6e7461696e73206e6f6e2d415343494920636861726163746572732e7c4d617853746f726564456e64706f696e7473436f756e7445786365656465640019080d01546865206e756d626572206f66207365727669636520656e64706f696e74732073746f72656420756e6465722074686520444944206973206c6172676572207468616e88746865206e756d626572206f6620656e64706f696e747320746f2064656c6574652e20496e7465726e616c001a04f4416e206572726f722074686174206973206e6f7420737570706f73656420746f2074616b6520706c6163652c207965742069742068617070656e65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e41070c4470616c6c65745f6469645f6c6f6f6b757044636f6e6e656374696f6e5f7265636f726440436f6e6e656374696f6e5265636f72640c344469644964656e74696669657201001c4163636f756e7401001c42616c616e636501180008010c6469640001344469644964656e74696669657200011c6465706f736974f10601644465706f7369743c4163636f756e742c2042616c616e63653e00004507000004080019010049070c4470616c6c65745f6469645f6c6f6f6b75701870616c6c6574144572726f72040454000114204e6f74466f756e640000047c546865206173736f63696174696f6e20646f6573206e6f742065786973742e344e6f74417574686f72697a65640001081101546865206f726967696e20776173206e6f7420616c6c6f77656420746f206d616e61676520746865206173736f63696174696f6e206265747765656e20746865204449444c616e6420746865206163636f756e742049442e344f7574646174656450726f6f66000204b454686520737570706c6965642070726f6f66206f66206f776e65727368697020776173206f757464617465642e44496e73756666696369656e7446756e64730003081101546865206163636f756e742068617320696e73756666696369656e742066756e647320616e642063616e277420706179207468652066656573206f72207265736572766530746865206465706f7369742e244d6967726174696f6e00040c010154686520436f6e6e65637465644163636f756e747320616e6420436f6e6e6563746564446964732073746f7261676520617265206f7574206f662073796e632e0011014e4f54453a20746869732077696c6c206f6e6c792062652072657475726e6564206966207468652073746f726167652068617320696e636f6e73697374656e636965732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4d070c4470616c6c65745f776562335f6e616d657324776562335f6e616d6544576562334e616d654f776e6572736869700c144f776e657201001c4465706f73697401f1062c426c6f636b4e756d6265720110000c01146f776e65720001144f776e6572000128636c61696d65645f617410012c426c6f636b4e756d62657200011c6465706f736974f106011c4465706f736974000051070c4470616c6c65745f776562335f6e616d65731870616c6c6574144572726f7204045400013044496e73756666696369656e7446756e64730000040d01546865207478207375626d697474657220646f6573206e6f74206861766520656e6f7567682066756e647320746f2070617920666f7220746865206465706f7369742e34416c7265616479457869737473000104dc54686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c7920636c61696d65642e204e6f74466f756e640002048854686520737065636966696564206e616d6520646f6573206e6f742065786973742e484f776e6572416c7265616479457869737473000304a054686520737065636966696564206f776e657220616c7265616479206f776e732061206e616d652e344f776e65724e6f74466f756e64000404ac54686520737065636966696564206f776e657220646f6573206e6f74206f776e20616e79206e616d65732e1842616e6e6564000508ec54686520737065636966696564206e616d6520686173206265656e2062616e6e656420616e642063616e6e6f7420626520696e746572616374656414776974682e244e6f7442616e6e6564000604ac54686520737065636966696564206e616d65206973206e6f742063757272656e746c792062616e6e65642e34416c726561647942616e6e6564000704d854686520737065636966696564206e616d652068617320616c7265616479206265656e2070726576696f75736c792062616e6e65642e344e6f74417574686f72697a6564000804cc546865206163746f722063616e6e6f7420706572666f726d65642074686520737065636966696564206f7065726174696f6e2e20546f6f53686f7274000904a841206e616d65207468617420697320746f6f2073686f7274206973206265696e6720636c61696d65642e1c546f6f4c6f6e67000a04a441206e616d65207468617420697320746f6f206c6f6e67206973206265696e6720636c61696d65642e40496e76616c6964436861726163746572000b04f441206e616d65207468617420636f6e7461696e73206e6f7420616c6c6f7765642063686172616374657273206973206265696e6720636c61696d65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e55070c487075626c69635f63726564656e7469616c732c63726564656e7469616c733c43726564656e7469616c456e7472791824435479706548617368013020417474657374657201002c426c6f636b4e756d6265720110244163636f756e74496401001c42616c616e636501183c417574686f72697a6174696f6e49640105010018012863747970655f686173683001244354797065486173680001206174746573746572000120417474657374657200011c7265766f6b6564ac0110626f6f6c000130626c6f636b5f6e756d62657210012c426c6f636b4e756d62657200011c6465706f736974f106016c4465706f7369743c4163636f756e7449642c2042616c616e63653e000140617574686f72697a6174696f6e5f69640101015c4f7074696f6e3c417574686f72697a6174696f6e49643e000059070c487075626c69635f63726564656e7469616c731870616c6c6574144572726f720404540001183c416c72656164794174746573746564000008f8412063726564656e7469616c2077697468207468652073616d6520726f6f7420686173682068617320616c72656164792069737375656420746f2074686548737065636966696564207375626a6563742e204e6f74466f756e6400010805014e6f2063726564656e7469616c2077697468207468652073706563696669656420726f6f74206861736820686173206265656e2069737375656420746f2074686548737065636966696564207375626a6563742e3c556e61626c65546f50617946656573000204d44e6f7420656e6f75676820746f6b656e7320746f2070617920666f72207468652066656573206f7220746865206465706f7369742e30496e76616c6964496e707574000304805468652063726564656e7469616c20696e70757420697320696e76616c69642e344e6f74417574686f72697a6564000404e05468652063616c6c6572206973206e6f7420617574686f72697a656420746f20706572666f726d656420746865206f7065726174696f6e2e20496e7465726e616c000508f443617463682d616c6c20666f7220616e79206f74686572206572726f727320746861742073686f756c64206e6f742068617070656e2c207965742069742468617070656e65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e5d070c4070616c6c65745f6d6967726174696f6e1870616c6c6574144572726f72040454000104204b65795061727365000000048054686520604572726f726020656e756d206f6620746869732070616c6c65742e610704184f7074696f6e0404540165070108104e6f6e6500000010536f6d6504006507000001000065070c4c706f6c6b61646f745f7072696d69746976657308763548557067726164655265737472696374696f6e0001041c50726573656e740000000069070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f74584d6573736167696e675374617465536e617073686f740000100130646d715f6d71635f6865616430014472656c61795f636861696e3a3a4861736800016472656c61795f64697370617463685f71756575655f73697a656d07015452656c617944697370616368517565756553697a65000140696e67726573735f6368616e6e656c73710701885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00013c6567726573735f6368616e6e656c73710701885665633c285061726149642c20416272696467656448726d704368616e6e656c293e00006d070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d5072656c61795f73746174655f736e617073686f745452656c617944697370616368517565756553697a65000008013c72656d61696e696e675f636f756e7420010c75333200013872656d61696e696e675f73697a6520010c75333200007107000002750700750700000408e50179070079070c4c706f6c6b61646f745f7072696d6974697665730876354c416272696467656448726d704368616e6e656c00001801306d61785f636170616369747920010c7533320001386d61785f746f74616c5f73697a6520010c7533320001406d61785f6d6573736167655f73697a6520010c7533320001246d73675f636f756e7420010c753332000128746f74616c5f73697a6520010c7533320001206d71635f68656164350401304f7074696f6e3c486173683e00007d070c4c706f6c6b61646f745f7072696d697469766573087635644162726964676564486f7374436f6e66696775726174696f6e00002401346d61785f636f64655f73697a6520010c7533320001486d61785f686561645f646174615f73697a6520010c7533320001586d61785f7570776172645f71756575655f636f756e7420010c7533320001546d61785f7570776172645f71756575655f73697a6520010c75333200015c6d61785f7570776172645f6d6573736167655f73697a6520010c7533320001906d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e64696461746520010c75333200018868726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e64696461746520010c75333200016c76616c69646174696f6e5f757067726164655f636f6f6c646f776e20012c426c6f636b4e756d62657200016076616c69646174696f6e5f757067726164655f64656c617920012c426c6f636b4e756d62657200008107089463756d756c75735f7072696d6974697665735f70617261636861696e5f696e686572656e74444d6573736167655175657565436861696e0000040030012452656c61794861736800008507042042547265654d617008044b01e5010456018107000400890700000089070000028d07008d0700000408e501810700910700000295070095070860706f6c6b61646f745f636f72655f7072696d6974697665734c4f7574626f756e6448726d704d6573736167650408496401e50100080124726563697069656e74e501010849640001106461746134015073705f7374643a3a7665633a3a5665633c75383e00009907087c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736830011c543a3a48617368000134636865636b5f76657273696f6eac0110626f6f6c00009d070c7c63756d756c75735f70616c6c65745f70617261636861696e5f73797374656d1870616c6c6574144572726f720404540001204c4f7665726c617070696e6755706772616465730000041901417474656d707420746f20757067726164652076616c69646174696f6e2066756e6374696f6e207768696c65206578697374696e6720757067726164652070656e64696e672e5050726f686962697465644279506f6c6b61646f740001044d01506f6c6b61646f742063757272656e746c792070726f68696269747320746869732070617261636861696e2066726f6d20757067726164696e67206974732076616c69646174696f6e2066756e6374696f6e2e18546f6f426967000208450154686520737570706c6965642076616c69646174696f6e2066756e6374696f6e2068617320636f6d70696c656420696e746f206120626c6f62206c6172676572207468616e20506f6c6b61646f742069733c77696c6c696e6720746f2072756e2e6856616c69646174696f6e446174614e6f74417661696c61626c650003041d0154686520696e686572656e7420776869636820737570706c696573207468652076616c69646174696f6e206461746120646964206e6f742072756e207468697320626c6f636b2e74486f7374436f6e66696775726174696f6e4e6f74417661696c61626c65000404290154686520696e686572656e7420776869636820737570706c6965732074686520686f737420636f6e66696775726174696f6e20646964206e6f742072756e207468697320626c6f636b2e304e6f745363686564756c6564000504d84e6f2076616c69646174696f6e2066756e6374696f6e20757067726164652069732063757272656e746c79207363686564756c65642e444e6f7468696e67417574686f72697a6564000604904e6f20636f6465207570677261646520686173206265656e20617574686f72697a65642e30556e617574686f72697a6564000704bc54686520676976656e20636f6465207570677261646520686173206e6f74206265656e20617574686f72697a65642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea107000002a50700a507086463756d756c75735f70616c6c65745f78636d705f717565756554496e626f756e644368616e6e656c44657461696c7300000c011873656e646572e50101185061726149640001147374617465a9070130496e626f756e6453746174650001406d6573736167655f6d65746164617461ad0701a85665633c2852656c6179426c6f636b4e756d6265722c2058636d704d657373616765466f726d6174293e0000a907086463756d756c75735f70616c6c65745f78636d705f717565756530496e626f756e645374617465000108084f6b0000002453757370656e64656400010000ad07000002b10700b1070000040820b50700b5070c48706f6c6b61646f745f70617261636861696e287072696d6974697665734458636d704d657373616765466f726d617400010c60436f6e636174656e6174656456657273696f6e656458636d0000005c436f6e636174656e61746564456e636f646564426c6f620001001c5369676e616c7300020000b90700000408e5012000bd07000002c10700c107086463756d756c75735f70616c6c65745f78636d705f7175657565584f7574626f756e644368616e6e656c44657461696c730000140124726563697069656e74e50101185061726149640001147374617465c50701344f7574626f756e6453746174650001347369676e616c735f6578697374ac0110626f6f6c00012c66697273745f696e646578e0010c7531360001286c6173745f696e646578e0010c7531360000c507086463756d756c75735f70616c6c65745f78636d705f7175657565344f7574626f756e645374617465000108084f6b0000002453757370656e64656400010000c90700000408e501e000cd07086463756d756c75735f70616c6c65745f78636d705f71756575653c5175657565436f6e66696744617461000018014473757370656e645f7468726573686f6c6420010c75333200013864726f705f7468726573686f6c6420010c753332000140726573756d655f7468726573686f6c6420010c7533320001407468726573686f6c645f7765696768742801185765696768740001547765696768745f72657374726963745f646563617928011857656967687400016878636d705f6d61785f696e646976696475616c5f7765696768742801185765696768740000d1070000040ce501203400d5070c6463756d756c75735f70616c6c65745f78636d705f71756575651870616c6c6574144572726f72040454000114304661696c6564546f53656e640000046c4661696c656420746f2073656e642058434d206d6573736167652e3042616458636d4f726967696e0001043c4261642058434d206f726967696e2e1842616458636d000204344261642058434d20646174612e484261644f766572776569676874496e64657800030454426164206f76657277656967687420696e6465782e3c5765696768744f7665724c696d6974000404f850726f76696465642077656967687420697320706f737369626c79206e6f7420656e6f75676820746f206578656375746520746865206d6573736167652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed9070c2870616c6c65745f78636d1870616c6c65742c5175657279537461747573042c426c6f636b4e756d6265720110010c1c50656e64696e67100124726573706f6e646572b902015856657273696f6e65644d756c74694c6f636174696f6e00014c6d617962655f6d617463685f71756572696572dd0701784f7074696f6e3c56657273696f6e65644d756c74694c6f636174696f6e3e0001306d617962655f6e6f74696679e10701404f7074696f6e3c2875382c207538293e00011c74696d656f757410012c426c6f636b4e756d6265720000003c56657273696f6e4e6f7469666965720801186f726967696eb902015856657273696f6e65644d756c74694c6f636174696f6e00012469735f616374697665ac0110626f6f6c000100145265616479080120726573706f6e7365e907014456657273696f6e6564526573706f6e7365000108617410012c426c6f636b4e756d62657200020000dd0704184f7074696f6e04045401b9020108104e6f6e6500000010536f6d650400b9020000010000e10704184f7074696f6e04045401e5070108104e6f6e6500000010536f6d650400e5070000010000e50700000408080800e907080c78636d4456657273696f6e6564526573706f6e73650001080856320400a105013076323a3a526573706f6e736500020008563304003d02013076333a3a526573706f6e736500030000ed070000040820b90200f1070000040c10282000f5070c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401f907045300000400fd0701185665633c543e0000f90700000408b9022000fd07000002f9070001080c2870616c6c65745f78636d1870616c6c65745456657273696f6e4d6967726174696f6e53746167650001105c4d696772617465537570706f7274656456657273696f6e0000005c4d69677261746556657273696f6e4e6f74696669657273000100504e6f7469667943757272656e745461726765747304000508013c4f7074696f6e3c5665633c75383e3e000200684d696772617465416e644e6f746966794f6c645461726765747300030000050804184f7074696f6e04045401340108104e6f6e6500000010536f6d65040034000001000009080000040c20000d08000d08080c78636d4056657273696f6e65644173736574496400010408563304002d02012c76333a3a417373657449640003000011080c2870616c6c65745f78636d1870616c6c65746852656d6f74654c6f636b656446756e6769626c655265636f72640848436f6e73756d65724964656e746966696572013902304d6178436f6e73756d6572730000100118616d6f756e74180110753132380001146f776e6572b902015856657273696f6e65644d756c74694c6f636174696f6e0001186c6f636b6572b902015856657273696f6e65644d756c74694c6f636174696f6e000124636f6e73756d657273150801d0426f756e6465645665633c28436f6e73756d65724964656e7469666965722c2075313238292c204d6178436f6e73756d6572733e000015080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540119080453000004001d0801185665633c543e0000190800000408390218001d0800000219080021080c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454012508045300000400290801185665633c543e000025080000040818b9020029080000022508002d080c2870616c6c65745f78636d1870616c6c6574144572726f720404540001502c556e726561636861626c650000085d0154686520646573697265642064657374696e6174696f6e2077617320756e726561636861626c652c2067656e6572616c6c7920626563617573652074686572652069732061206e6f20776179206f6620726f7574696e6718746f2069742e2c53656e644661696c757265000108610154686572652077617320736f6d65206f746865722069737375652028692e652e206e6f7420746f20646f207769746820726f7574696e672920696e2073656e64696e6720746865206d6573736167652e2050657268617073a861206c61636b206f6620737061636520666f7220627566666572696e6720746865206d6573736167652e2046696c74657265640002049c546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e48556e776569676861626c654d657373616765000304b4546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e6044657374696e6174696f6e4e6f74496e7665727469626c65000404f05468652064657374696e6174696f6e20604d756c74694c6f636174696f6e602070726f76696465642063616e6e6f7420626520696e7665727465642e14456d707479000504805468652061737365747320746f2062652073656e742061726520656d7074792e3843616e6e6f745265616e63686f720006043501436f756c64206e6f742072652d616e63686f72207468652061737365747320746f206465636c61726520746865206665657320666f72207468652064657374696e6174696f6e20636861696e2e34546f6f4d616e79417373657473000704c4546f6f206d616e79206173736574732068617665206265656e20617474656d7074656420666f72207472616e736665722e34496e76616c69644f726967696e000804784f726967696e20697320696e76616c696420666f722073656e64696e672e2842616456657273696f6e00090421015468652076657273696f6e206f6620746865206056657273696f6e6564602076616c75652075736564206973206e6f742061626c6520746f20626520696e7465727072657465642e2c4261644c6f636174696f6e000a08410154686520676976656e206c6f636174696f6e20636f756c64206e6f7420626520757365642028652e672e20626563617573652069742063616e6e6f742062652065787072657373656420696e2074686560646573697265642076657273696f6e206f662058434d292e384e6f537562736372697074696f6e000b04bc546865207265666572656e63656420737562736372697074696f6e20636f756c64206e6f7420626520666f756e642e44416c726561647953756273637269626564000c041101546865206c6f636174696f6e20697320696e76616c69642073696e636520697420616c726561647920686173206120737562736372697074696f6e2066726f6d2075732e30496e76616c69644173736574000d0480496e76616c696420617373657420666f7220746865206f7065726174696f6e2e284c6f7742616c616e6365000e044101546865206f776e657220646f6573206e6f74206f776e2028616c6c29206f662074686520617373657420746861742074686579207769736820746f20646f20746865206f7065726174696f6e206f6e2e30546f6f4d616e794c6f636b73000f04c0546865206173736574206f776e65722068617320746f6f206d616e79206c6f636b73206f6e207468652061737365742e4c4163636f756e744e6f74536f7665726569676e001004310154686520676976656e206163636f756e74206973206e6f7420616e206964656e7469666961626c6520736f7665726569676e206163636f756e7420666f7220616e79206c6f636174696f6e2e28466565734e6f744d65740011042901546865206f7065726174696f6e207265717569726564206665657320746f20626520706169642077686963682074686520696e69746961746f7220636f756c64206e6f74206d6565742e304c6f636b4e6f74466f756e64001204f4412072656d6f7465206c6f636b20776974682074686520636f72726573706f6e64696e67206461746120636f756c64206e6f7420626520666f756e642e14496e557365001304490154686520756e6c6f636b206f7065726174696f6e2063616e6e6f742073756363656564206265636175736520746865726520617265207374696c6c20636f6e73756d657273206f6620746865206c6f636b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e31080c4863756d756c75735f70616c6c65745f78636d1870616c6c6574144572726f72040454000100048054686520604572726f726020656e756d206f6620746869732070616c6c65742e3508086063756d756c75735f70616c6c65745f646d705f717565756528436f6e6669674461746100000401386d61785f696e646976696475616c28011857656967687400003908086063756d756c75735f70616c6c65745f646d705f71756575653450616765496e6465784461746100000c0128626567696e5f7573656420012c50616765436f756e746572000120656e645f7573656420012c50616765436f756e7465720001406f7665727765696768745f636f756e7410013c4f766572776569676874496e64657800003d0800000241080041080000040820340045080c6063756d756c75735f70616c6c65745f646d705f71756575651870616c6c6574144572726f720404540001081c556e6b6e6f776e0000048c546865206d65737361676520696e64657820676976656e20697320756e6b6e6f776e2e244f7665724c696d6974000104310154686520616d6f756e74206f662077656967687420676976656e20697320706f737369626c79206e6f7420656e6f75676820666f7220657865637574696e6720746865206d6573736167652e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e4908102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730121031043616c6c012504245369676e6174757265013105144578747261014d08000400340000004d08000004205108550859085d08610869086d08710800510810306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000550810306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000590810306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e040454000000005d0810306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000610810306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004006508010c45726100006508102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000690810306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e6365040454000004002c0120543a3a4e6f6e636500006d0810306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000007108086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e74040454000004000902013042616c616e63654f663c543e0000981853797374656d011853797374656d401c4163636f756e7401010402000c510100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000020040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010024180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000020040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510308000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040520340400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d626572010010200000000000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003080000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010038040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004804001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010020100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f706963730101040230c9020400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000cd0204000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100ac0400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100ac0400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e50686173650000c502040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e01d50201541830426c6f636b57656967687473e5026d01025b1f5d00070088526a7402004001c2a0a91d000107d00918a44b0200d000010700e6bd4f570200f000010000c2a0a91d000107d0abacbe680200200101070088526a7402004001010700a2941a1d02005000c2a0a91d0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468f5023000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e7410206009000000000000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e204462576569676874fd0240089d26020000000000dce704000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e01036103386b696c742d7370697269746e6574386b696c742d7370697269746e657401000000ca2b00000000000038df6acb689907609b0400000037e397fc7c91f5e402000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000f3ff14d5ab5270590300000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000ab3c0572291feb8b01000000dd718d5cc53262d401000000ea93e3f16f3d69620200000026609555c065660302000000a47b7d544994c99b0100000045bfba51a310b2230100000008000000000484204765742074686520636861696e27732063757272656e742076657273696f6e2e2853533538507265666978e008260014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e011103002454696d657374616d70012454696d657374616d70080c4e6f7701001020000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100ac040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0115030004344d696e696d756d506572696f6410207017000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e00021c496e6469636573011c496e646963657304204163636f756e7473000104021019030400048820546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e011d030178041c4465706f736974184000b47cf328350000000000000000000004ac20546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e012903052042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b7301010402002d03040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e20526573657276657301010402003d03040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e14486f6c6473010104020049030400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a6573010104020071030400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e018503017c14484578697374656e7469616c4465706f736974184000a0724e18090000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7320103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573201032000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e204d6178486f6c647320103200000004190120546865206d6178696d756d206e756d626572206f6620686f6c647320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e284d6178467265657a657320103200000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01890306485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c69657201008d0340000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100910304000000018404604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00071041757261011041757261082c417574686f726974696573010095030400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f740100a5032000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000000171c53657373696f6e011c53657373696f6e1c2856616c696461746f72730100b9010400047c205468652063757272656e7420736574206f662076616c696461746f72732e3043757272656e74496e646578010020100000000004782043757272656e7420696e646578206f66207468652073657373696f6e2e345175657565644368616e6765640100ac040008390120547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f7273a420686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e285175657565644b6579730100a9030400083d012054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b657973e02077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e4844697361626c656456616c696461746f72730100b5030400148020496e6469636573206f662064697361626c65642076616c696461746f72732e003d01205468652076656320697320616c77617973206b65707420736f7274656420736f20746861742077652063616e2066696e642077686574686572206120676976656e2076616c696461746f722069733d012064697361626c6564207573696e672062696e617279207365617263682e204974206765747320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e73642061206e657720736574206f66206964656e7469746965732e204e6578744b6579730001040500b1030400049c20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e204b65794f776e657200010405b90300040004090120546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e01c10301880001c503164050617261636861696e5374616b696e67014050617261636861696e5374616b696e6740544d617853656c656374656443616e64696461746573010020100000000004090120546865206d6178696d756d206e756d626572206f6620636f6c6c61746f722063616e646964617465732073656c6563746564206174206561636820726f756e642e14526f756e640100c90350000000000000000000000000140000000000000004e82043757272656e7420726f756e64206e756d62657220616e64206e65787420726f756e64207363686564756c6564207472616e736974696f6e2e384c61737444656c65676174696f6e0101040500cd03200000000000000000140d012044656c65676174696f6e20696e666f726d6174696f6e20666f7220746865206c61746573742073657373696f6e20696e20776869636820612064656c656761746f722c2064656c6567617465642e000501204974206d6170732066726f6d20616e206163636f756e7420746f20746865206e756d626572206f662064656c65676174696f6e7320696e20746865206c617374982073657373696f6e20696e2077686963682074686579202872652d2964656c6567617465642e3844656c656761746f7253746174650001040500d10304000c802044656c65676174696f6e207374616b696e6720696e666f726d6174696f6e2e00cc204974206d6170732066726f6d20616e206163636f756e7420746f206974732064656c65676174696f6e2064657461696c732e3443616e646964617465506f6f6c0001040500d503040010a420546865207374616b696e6720696e666f726d6174696f6e20666f7220612063616e6469646174652e00b0204974206d6170732066726f6d20616e206163636f756e7420746f2069747320696e666f726d6174696f6e2eb8204d6f72656f7665722c20697420636f756e747320746865206e756d626572206f662063616e646964617465732e5c436f756e746572466f7243616e646964617465506f6f6c010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617048546f74616c436f6c6c61746f725374616b650100e90380000000000000000000000000000000000000000000000000000000000000000014f420546f74616c2066756e6473206c6f636b656420746f206261636b207468652063757272656e746c792073656c656374656420636f6c6c61746f72732ed0205468652073756d206f6620616c6c20636f6c6c61746f7220616e642074686569722064656c656761746f72207374616b65732e002101204e6f74653a20546865726520617265206d6f72652066756e6473206c6f636b656420627920746869732070616c6c65742c2073696e636520746865206261636b696e6720666f720901206e6f6e20636f6c6c6174696e672063616e64696461746573206973206e6f7420696e636c7564656420696e2060546f74616c436f6c6c61746f725374616b65602e34546f7043616e646964617465730100ed03040028e82054686520636f6c6c61746f722063616e64696461746573207769746820746865206869676865737420616d6f756e74206f66207374616b652e00190120456163682074696d6520746865207374616b65206f66206120636f6c6c61746f7220697320696e637265617365642c20697420697320636865636b65642077686574686572050120746869732070757368657320616e6f746865722063616e646964617465206f7574206f6620746865206c6973742e205768656e20746865207374616b652069732101207265647563656420686f77657665722c206974206973206e6f7420636865636b656420696620616e6f746865722063616e64696461746520686173206d6f7265207374616b652c11012073696e6365207468697320776f756c64207265717569726520697465726174696e67206f7665722074686520656e74697265206043616e646964617465506f6f6c602e001501205468657265206d75737420616c77617973206265206d6f72652063616e64696461746573207468616e20604d617853656c656374656443616e646964617465736020736f0d012074686174206120636f6c6c61746f722063616e2064726f70206f7574206f662074686520636f6c6c61746f7220736574206279207265647563696e672074686569721c207374616b652e3c496e666c6174696f6e436f6e6669670100f503c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046420496e666c6174696f6e20636f6e66696775726174696f6e2e24556e7374616b696e670101040500010404001088205468652066756e64732077616974696e6720746f20626520756e7374616b65642e001d01204974206d6170732066726f6d206163636f756e747320746f20616c6c207468652066756e64732061646472657373656420746f207468656d20696e20746865206675747572652020626c6f636b732e644d6178436f6c6c61746f7243616e6469646174655374616b65010018400000000000000000000000000000000004cc20546865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e6469646174652063616e207374616b652e4c4c617374526577617264526564756374696f6e010010200000000000000000140d0120546865207965617220696e20776869636820746865206c617374206175746f6d6174696320726564756374696f6e206f66207468652072657761726420726174657328206f636375727265642e00250120497420737461727473206174207a65726f2061742067656e6573697320616e6420696e6372656d656e7473206279206f6e6520657665727920424c4f434b535f5045525f5945415234206d616e7920626c6f636b732e38426c6f636b73417574686f726564010104050010200000000000000000080d0120546865206e756d626572206f6620617574686f72656420626c6f636b7320666f7220636f6c6c61746f72732e20497420697320757064617465642076696120746865b020606e6f74655f617574686f726020686f6f6b207768656e20617574686f72696e67206120626c6f636b202e38426c6f636b73526577617264656401010405001020000000000000000024210120546865206e756d626572206f6620626c6f636b7320666f7220776869636820726577617264732068617665206265656e20636c61696d656420627920616e20616464726573732e00190120466f7220636f6c6c61746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f7265642e2049742069732075706461746564207768656ecc20696e6372656d656e74696e6720636f6c6c61746f7220726577617264732c20656974686572207768656e2063616c6c696e67e02060696e635f636f6c6c61746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e00250120466f722064656c656761746f72732c20746869732063616e206265206174206d6f737420426c6f636b73417574686f726564206f662074686520636f6c6c61746f722e497420697305012075706461746564207768656e20696e6372656d656e74696e672064656c656761746f7220726577617264732c20656974686572207768656e2063616c6c696e67e42060696e635f64656c656761746f725f7265776172647360206f72207570646174696e67207468652060496e666c6174696f6e496e666f602e1c5265776172647301010405001840000000000000000000000000000000000c01012054686520616363756d756c61746564207265776172647320666f7220636f6c6c61746f722063616e6469646174657320616e642064656c656761746f72732e001101204974206d6170732066726f6d206163636f756e747320746f20746865697220746f74616c20726577617264732073696e636520746865206c617374207061796f75742e34466f7263654e6577526f756e640100ac040000011104018c3c444d696e426c6f636b73506572526f756e6410202c0100000000000004d4204d696e696d756d206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e64732063616e206c6173742e5444656661756c74426c6f636b73506572526f756e641020580200000000000008fc2044656661756c74206e756d626572206f6620626c6f636b732076616c69646174696f6e20726f756e6473206c6173742c2061732073657420696e207468655c2067656e6573697320636f6e66696775726174696f6e2e345374616b654475726174696f6e1020e0c40000000000000c0501204e756d626572206f6620626c6f636b7320666f7220776869636820756e7374616b65642062616c616e63652077696c6c207374696c6c206265206c6f636b6564f0206265666f72652069742063616e20626520756e6c6f636b6564206279206163746976656c792063616c6c696e67207468652065787472696e7369634c2060756e6c6f636b5f756e7374616b6564602e3845786974517565756544656c6179201002000000080901204e756d626572206f6620726f756e6473206120636f6c6c61746f722068617320746f207374617920616374697665206166746572207375626d697474696e672061c4207265717565737420746f206c656176652074686520736574206f6620636f6c6c61746f722063616e646964617465732e304d696e436f6c6c61746f7273201010000000080d01204d696e696d756d206e756d626572206f6620636f6c6c61746f72732073656c65637465642066726f6d2074686520736574206f662063616e64696461746573206174602065766572792076616c69646174696f6e20726f756e642e504d696e5265717569726564436f6c6c61746f7273201004000000081101204d696e696d756d206e756d626572206f6620636f6c6c61746f72732077686963682063616e6e6f74206c6561766520746865206e6574776f726b2069662074686572653c20617265206e6f206f74686572732e584d617844656c65676174696f6e73506572526f756e64201001000000140101204d6178696d756d206e756d626572206f662064656c65676174696f6e732077686963682063616e206265206d6164652077697468696e207468652073616d651c20726f756e642e000d01204e4f54453a20546f2070726576656e742072652d64656c65676174696f6e2d7265776172642061747461636b732c2077652073686f756c64206b65657020746869732c20746f206265206f6e652e604d617844656c656761746f7273506572436f6c6c61746f7220102300000004e4204d6178696d756d206e756d626572206f662064656c656761746f727320612073696e676c6520636f6c6c61746f722063616e20686176652e404d6178546f7043616e6469646174657320104b00000004a0204d6178696d756d2073697a65206f662074686520746f702063616e64696461746573207365742e404d696e436f6c6c61746f725374616b6518400000e8890423c78a0000000000000000080901204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520656c65637465642061732076616c696461746f723420666f72206120726f756e642e644d696e436f6c6c61746f7243616e6469646174655374616b6518400000e8890423c78a0000000000000000080501204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f20626520616464656420746f2074686520736574206f66302063616e646964617465732e444d696e44656c656761746f725374616b651840000082dfe40d4700000000000000000004f8204d696e696d756d207374616b6520726571756972656420666f7220616e79206163636f756e7420746f206265636f6d6520612064656c656761746f722e484d6178556e7374616b65526571756573747320100a00000028e8204d6178206e756d626572206f6620636f6e63757272656e742061637469766520756e7374616b696e67207265717565737473206265666f72652c20756e6c6f636b696e672e001501204e4f54453a20546f2070726f7465637420616761696e737420697272656d6f766162696c697479206f6620612063616e646964617465206f722064656c656761746f722cf4207765206f6e6c7920616c6c6f7720666f72204d6178556e7374616b655265717565737473202d2031206d616e79206d616e75616c20756e7374616b6501012072657175657374732e20546865206c617374206f6e6520736572766573206173206120706c616365686f6c64657220666f7220746865206361736573206f66f02063616c6c696e672065697468657220606b69636b5f64656c656761746f72602c20666f7263655f72656d6f76655f63616e64696461746560206f7209012060657865637574655f6c656176655f63616e64696461746573602e204f74686572776973652c2061207573657220636f756c64206d6178206f75742074686569720d0120756e7374616b6520726571756573747320616e642070726576656e74207468656d73656c7665732066726f6d206265696e67206b69636b65642066726f6d20746865f020736574206f662063616e646964617465732f64656c656761746f727320756e74696c207468657920756e6c6f636b2074686569722066756e64732e484e6574776f726b5265776172645374617274102048a3c800000000000c110120546865207374617274696e6720626c6f636b206e756d62657220666f7220746865206e6574776f726b20726577617264732e204f6e6365207468652063757272656e74090120626c6f636b206e756d626572206578636565647320746869732073746172742c207468652062656e65666963696172792077696c6c2072656365697665207468658420636f6e666967757265642072657761726420696e206561636820626c6f636b2e444e6574776f726b52657761726452617465902000008a5d784563010c0d0120546865207261746520696e2070657263656e7420666f7220746865206e6574776f726b207265776172647320776869636820617265206261736564206f6e207468650901206d6178696d756d206e756d626572206f6620636f6c6c61746f727320616e6420746865206d6178696d756d20616d6f756e74206120636f6c6c61746f722063616e1c207374616b652e0115041528417574686f72736869700128417574686f72736869700418417574686f720000000400046420417574686f72206f662063757272656e7420626c6f636b2e00000000141c41757261457874011c41757261457874042c417574686f72697469657301009503040014942053657276657320617320636163686520666f722074686520617574686f7269746965732e0071012054686520617574686f72697469657320696e204175526120617265206f7665727772697474656e20696e20606f6e5f696e697469616c697a6560207768656e2077652073776974636820746f2061206e65772073657373696f6e2c790120627574207765207265717569726520746865206f6c6420617574686f72697469657320746f2076657269667920746865207365616c207768656e2076616c69646174696e67206120506f562e20546869732077696c6c20616c77617973f0206265207570646174656420746f20746865206c6174657374204175526120617574686f72697469657320696e20606f6e5f66696e616c697a65602e00000000182444656d6f6372616379012444656d6f6372616379303c5075626c696350726f70436f756e74010020100000000004f420546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e2c5075626c696350726f707301001904040004050120546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c2e244465706f7369744f660001040520e90504000c842054686f73652077686f2068617665206c6f636b65642061206465706f7369742e00d82054574f582d4e4f54453a20536166652c20617320696e6372656173696e6720696e7465676572206b6579732061726520736166652e3c5265666572656e64756d436f756e74010020100000000004310120546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e344c6f77657374556e62616b6564010020100000000008250120546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746fdc20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e405265666572656e64756d496e666f4f660001040520f10504000cb420496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e0009012054574f582d4e4f54453a205341464520617320696e646578657320617265206e6f7420756e64657220616e2061747461636b6572e280997320636f6e74726f6c2e20566f74696e674f660101040500fd05e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105d0120416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077655d012068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e00e82054574f582d4e4f54453a205341464520617320604163636f756e7449646073206172652063727970746f2068617368657320616e797761792e544c6173745461626c656457617345787465726e616c0100ac0400085901205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c6963282070726f706f73616c2e304e65787445787465726e616c00001506040010590120546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e550120546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743aa4202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f7268202d20605075626c696350726f70736020697320656d7074792e24426c61636b6c6973740001040630190604000851012041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d626572e82028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e3443616e63656c6c6174696f6e730101040630ac0400042901205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e284d657461646174614f6600010402a430040018ec2047656e6572616c20696e666f726d6174696f6e20636f6e6365726e696e6720616e792070726f706f73616c206f72207265666572656e64756d2e6901205468652060507265696d61676548617368602072656665727320746f2074686520707265696d616765206f66207468652060507265696d61676573602070726f76696465722077686963682063616e2062652061204a534f4e882064756d70206f7220495046532068617368206f662061204a534f4e2066696c652e00750120436f6e73696465722061206761726261676520636f6c6c656374696f6e20666f722061206d65746164617461206f662066696e6973686564207265666572656e64756d7320746f2060756e7265717565737460202872656d6f76652944206c6172676520707265696d616765732e0129040194303c456e6163746d656e74506572696f641020201c00000000000014e82054686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e0031012049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e737572652074686174510120766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365b4207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e304c61756e6368506572696f641020e0c400000000000004e420486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e30566f74696e67506572696f641020e0c400000000000004b820486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e44566f74654c6f636b696e67506572696f641020e0c4000000000000109020546865206d696e696d756d20706572696f64206f6620766f7465206c6f636b696e672e0065012049742073686f756c64206265206e6f2073686f72746572207468616e20656e6163746d656e7420706572696f6420746f20656e73757265207468617420696e207468652063617365206f6620616e20617070726f76616c2c49012074686f7365207375636365737366756c20766f7465727320617265206c6f636b656420696e746f2074686520636f6e73657175656e636573207468617420746865697220766f74657320656e7461696c2e384d696e696d756d4465706f73697418400080c6a47e8d0300000000000000000004350120546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e38496e7374616e74416c6c6f776564ac04010c550120496e64696361746f7220666f72207768657468657220616e20656d657267656e6379206f726967696e206973206576656e20616c6c6f77656420746f2068617070656e2e20536f6d6520636861696e73206d617961012077616e7420746f207365742074686973207065726d616e656e746c7920746f206066616c7365602c206f7468657273206d61792077616e7420746f20636f6e646974696f6e206974206f6e207468696e67732073756368a020617320616e207570677261646520686176696e672068617070656e656420726563656e746c792e5446617374547261636b566f74696e67506572696f641020840300000000000004ec204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f72206120666173742d747261636b207265666572656e64756d2e34436f6f6c6f6666506572696f641020e0c400000000000004610120506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d6178566f74657320106400000010b020546865206d6178696d756d206e756d626572206f6620766f74657320666f7220616e206163636f756e742e00d420416c736f207573656420746f20636f6d70757465207765696768742c20616e206f7665726c79206269672076616c75652063616e1501206c65616420746f2065787472696e7369632077697468207665727920626967207765696768743a20736565206064656c65676174656020666f7220696e7374616e63652e304d617850726f706f73616c73201064000000040d0120546865206d6178696d756d206e756d626572206f66207075626c69632070726f706f73616c7320746861742063616e20657869737420617420616e792074696d652e2c4d61784465706f73697473201064000000041d0120546865206d6178696d756d206e756d626572206f66206465706f736974732061207075626c69632070726f706f73616c206d6179206861766520617420616e792074696d652e384d6178426c61636b6c697374656420106400000004d820546865206d6178696d756d206e756d626572206f66206974656d732077686963682063616e20626520626c61636b6c69737465642e011d061e1c436f756e63696c011c436f756e63696c182450726f706f73616c7301002106040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406302504040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e6700010406302506040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010020100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100b9010400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01390401a804444d617850726f706f73616c576569676874282807004429353a0200a00004250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e0129061f48546563686e6963616c436f6d6d69747465650148546563686e6963616c436f6d6d6974746565182450726f706f73616c7301002d06040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406302504040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e6700010406302506040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010020100000000004482050726f706f73616c7320736f206661722e1c4d656d626572730100b9010400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01410401b804444d617850726f706f73616c576569676874282807004429353a0200a00004250120546865206d6178696d756d20776569676874206f6620612064697370617463682063616c6c20746861742063616e2062652070726f706f73656420616e642065786563757465642e013106204c546563686e6963616c4d656d62657273686970014c546563686e6963616c4d656d62657273686970081c4d656d6265727301003506040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01450401bc000139062220547265617375727901205472656173757279103450726f706f73616c436f756e74010020100000000004a4204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e2450726f706f73616c7300010405203d060400047c2050726f706f73616c7320746861742068617665206265656e206d6164652e2c4465616374697661746564010018400000000000000000000000000000000004f02054686520616d6f756e7420776869636820686173206265656e207265706f7274656420617320696e61637469766520746f2043757272656e63792e24417070726f76616c7301004106040004f82050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e01490401c01c3050726f706f73616c426f6e6445061050c30000085501204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e110120416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e4c50726f706f73616c426f6e644d696e696d756d1840000082dfe40d47000000000000000000044901204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e4c50726f706f73616c426f6e644d6178696d756d49060400044901204d6178696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e2c5370656e64506572696f641020c0a8000000000000048820506572696f64206265747765656e2073756363657373697665207370656e64732e104275726e450610000000000411012050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e2050616c6c657449644d06206b696c742f7473790419012054686520747265617375727927732070616c6c65742069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e304d6178417070726f76616c732010640000000c150120546865206d6178696d756d206e756d626572206f6620617070726f76616c7320746861742063616e207761697420696e20746865207370656e64696e672071756575652e004d01204e4f54453a205468697320706172616d6574657220697320616c736f20757365642077697468696e2074686520426f756e746965732050616c6c657420657874656e73696f6e20696620656e61626c65642e015106231c5574696c69747900014d0401c4044c626174636865645f63616c6c735f6c696d69742010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e015506281c56657374696e67011c56657374696e67081c56657374696e6700010402005906040004d820496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e3853746f7261676556657273696f6e0100610604000c7c2053746f726167652076657273696f6e206f66207468652070616c6c65742e003101204e6577206e6574776f726b732073746172742077697468206c61746573742076657273696f6e2c2061732064657465726d696e6564206279207468652067656e65736973206275696c642e01750401c808444d696e5665737465645472616e73666572184000407a10f35a0000000000000000000004e820546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e4c4d617856657374696e675363686564756c657320101c0000000001650629245363686564756c657201245363686564756c65720c3c496e636f6d706c65746553696e6365000010040000184167656e6461010104051069060400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e184c6f6f6b75700001040504d0040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e017d0401cc08344d6178696d756d57656967687428280700a0db215d0200000104290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b201032000000141d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0018204e4f54453a5101202b20446570656e64656e742070616c6c657473272062656e63686d61726b73206d696768742072657175697265206120686967686572206c696d697420666f72207468652073657474696e672e205365742061c420686967686572206c696d697420756e646572206072756e74696d652d62656e63686d61726b736020666561747572652e0179062a1450726f7879011450726f7879081c50726f7869657301010405007d064400000000000000000000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e747301010405008d0644000000000000000000000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01850401d8184050726f78794465706f7369744261736518400020f7a54b330000000000000000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f72184000f4a92b80010000000000000000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657320100a00000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6720100a00000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f7369744261736518400020f7a54b330000000000000000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72184000e8535700030000000000000000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e019d062b20507265696d6167650120507265696d6167650824537461747573466f720001040630a1060400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f7200010406ad06b106040000018d0401e40001b5062c38546970734d656d626572736869700138546970734d656d62657273686970081c4d656d626572730100b906040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01910401e80001bd062d10546970730110546970730810546970730001040530c10604000c650120546970734d6170207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e3d012054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c7265616479802067756172616e7465656420746f20626520612073656375726520686173682e1c526561736f6e7300010406303404000849012053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e610120696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e01950401ec144c4d6178696d756d526561736f6e4c656e6774682010004000000c88204d6178696d756d2061636365707461626c6520726561736f6e206c656e6774682e0065012042656e63686d61726b7320646570656e64206f6e20746869732076616c75652c206265207375726520746f2075706461746520776569676874732066696c65207768656e206368616e67696e6720746869732076616c756548446174614465706f73697450657242797465184000743ba40b00000000000000000000000461012054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e206f7220626f756e7479206465736372697074696f6e2e30546970436f756e74646f776e1020201c0000000000000445012054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e3454697046696e64657273466565cd060400043501205468652070657263656e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e505469705265706f72744465706f73697442617365184000f45628fa320000000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e01d1062e204d756c746973696701204d756c746973696704244d756c7469736967730001080502d506d906040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01990401f00c2c4465706f73697442617365184000801b84ee320000000000000000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f72184000743ba40b00000000000000000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657320104000000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e01e1062f1443747970650114437479706504184374797065730001040230e50604001060204354797065732073746f726564206f6e20636861696e2e001901204974206d6170732066726f6d2061204354797065206861736820746f206974732063726561746f7220616e6420626c6f636b206e756d62657220696e207768696368206974342077617320637265617465642e01a10401f80001e9063d2c4174746573746174696f6e012c4174746573746174696f6e08304174746573746174696f6e730001040230ed0604000c78204174746573746174696f6e732073746f726564206f6e20636861696e2e00cc204974206d6170732066726f6d206120636c61696d206861736820746f207468652066756c6c206174746573746174696f6e2e5045787465726e616c4174746573746174696f6e730101080502f506ac04000ca02044656c656761746564206174746573746174696f6e732073746f726564206f6e20636861696e2e00e8204974206d6170732066726f6d20612064656c65676174696f6e20494420746f206120766563746f72206f6620636c61696d206861736865732e01a50401fc081c4465706f7369741840001cc9dd006e0000000000000000000004e420546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720616e206174746573746174696f6e2e604d617844656c6567617465644174746573746174696f6e732010e803000008090120546865206d6178696d756d206e756d626572206f662064656c656761746564206174746573746174696f6e732077686963682063616e206265206d61646520627954207468652073616d652064656c65676174696f6e2e01f9063e2844656c65676174696f6e012844656c65676174696f6e083c44656c65676174696f6e4e6f6465730001040230fd0604000c882044656c65676174696f6e206e6f6465732073746f726564206f6e20636861696e2e00b0204974206d6170732066726f6d2061206e6f646520494420746f20746865206e6f64652064657461696c732e5444656c65676174696f6e48696572617263686965730001040230110704000ca02044656c65676174696f6e2068696572617263686965732073746f726564206f6e20636861696e2e00dc204974206d61707320666f7220612028726f6f7429206e6f646520494420746f20746865206869657261726368792064657461696c732e01b504010901181c4465706f73697418400080c6a47e8d0300000000000000000004dc20546865206465706f736974207468617420697320726571756972656420666f722073746f72696e6720612064656c65676174696f6e2e584d61785369676e6174757265427974654c656e677468e008400000384d61785265766f636174696f6e73201005000000047c204d6178696d756d206e756d626572206f66207265766f636174696f6e732e2c4d617852656d6f76616c7320100500000004f4204d6178696d756d206e756d626572206f662072656d6f76616c732e2053686f756c642062652073616d65206173204d61785265766f636174696f6e733c4d6178506172656e74436865636b73201005000000080d01204d6178696d756d206e756d626572206f6620757077617264732074726176657273616c73206f66207468652064656c65676174696f6e20747265652066726f6d2061f0206e6f646520746f2074686520726f6f7420616e64207468757320746865206465707468206f66207468652064656c65676174696f6e20747265652e2c4d61784368696c6472656e2010e80300000c0d01204d6178696d756d206e756d626572206f6620616c6c206368696c6472656e20666f7220612064656c65676174696f6e206e6f64652e20466f7220612062696e617279fc20747265652c20746869732073686f756c6420626520747769636520746865206d6178696d756d206465707468206f662074686520747265652c20692e652e5c206032205e204d6178506172656e74436865636b73602e0115073f0c446964010c446964100c4469640001040200190704000c5820444944732073746f726564206f6e20636861696e2e00c8204974206d6170732066726f6d206120444944206964656e74696669657220746f20746865204449442064657461696c732e4053657276696365456e64706f696e747300010805023907dd0404000ca0205365727669636520656e64706f696e7473206173736f636961746564207769746820444944732e000901204974206d6170732066726f6d2028444944206964656e7469666965722c20736572766963652049442920746f2074686520736572766963652064657461696c732e44446964456e64706f696e7473436f756e7401010402002010000000000cac20436f756e746572206f66207365727669636520656e64706f696e747320666f722065616368204449442e00cc204974206d6170732066726f6d2028444944206964656e7469666965722920746f20612033322d62697420636f756e7465722e30446964426c61636b6c6973740001040200b40400141d012054686520736574206f66204449447320746861742068617665206265656e2064656c6574656420616e642063616e6e6f74207468657265666f726520626520637265617465647020616761696e20666f7220736563757269747920726561736f6e732e002101204974206d6170732066726f6d206120444944206964656e74696669657220746f206120756e6974207475706c652c20666f72207468652073616b65206f6620747261636b696e674420444944206964656e746966696572732e01d104011101382c426173654465706f736974184000008d49fd1a07000000000000000000100d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974f820746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f73697473fc20696e6372656173652062792074686520616d6f756e74206f662075736564206b65797320616e64207365727669636520656e64706f696e74732e20546865c8206465706f7369742063616e206265207265636c61696d6564207768656e20746865204449442069732064656c657465642e5853657276696365456e64706f696e744465706f736974184000b0156a084a00000000000000000000100d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368207365727669636520656e64706f696e7409012061732061206465706f73697420746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e205468651501206465706f7369742063616e206265207265636c61696d6564207768656e20746865207365727669636520656e64706f696e742069732072656d6f766564206f722074686534204449442064656c657465642e284b65794465706f736974184000dc20749701000000000000000000000805012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368206164646564206b65792061732061e4206465706f73697420746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e0c466565184000203d88792d000000000000000000000c09012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f7220656163682044494420617320612066656520746f0d0120696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206665652077696c6c206e6f74206765748820726566756e646564207768656e20746865204449442069732064656c657465642e4c4d61785075626c69634b6579735065724469642010140000000c1101204d6178696d756d206e756d626572206f6620746f74616c207075626c6963206b6579732077686963682063616e2062652073746f7265642070657220444944206b6579d8206964656e7469666965722e205468697320696e636c7564657320746865206f6e65732063757272656e746c79207573656420666f72f02061757468656e7469636174696f6e2c206b65792061677265656d656e742c206174746573746174696f6e2c20616e642064656c65676174696f6e2e584d61784e65774b657941677265656d656e744b65797320100a000000081501204d6178696d756d206e756d626572206f66206b65792061677265656d656e74206b65797320746861742063616e20626520616464656420696e2061206372656174696f6e2c206f7065726174696f6e2e604d6178546f74616c4b657941677265656d656e744b657973201013000000101101204d6178696d756d206e756d626572206f6620746f74616c206b65792061677265656d656e74206b65797320746861742063616e2062652073746f72656420666f7220613420444944207375626a6563742e00c42053686f756c642062652067726561746572207468616e20604d61784e65774b657941677265656d656e744b657973602e4c4d6178426c6f636b73547856616c696469747910202c0100000000000008ec20546865206d6178696d756d206e756d626572206f6620626c6f636b732061204449442d617574686f72697a6564206f7065726174696f6e2069739420636f6e736964657265642076616c696420616674657220697473206372656174696f6e2e644d61784e756d6265724f66536572766963657350657244696420101900000004fc20546865206d6178696d756d206e756d626572206f6620736572766963657320746861742063616e2062652073746f72656420756e6465722061204449442e484d61785365727669636549644c656e677468201032000000049020546865206d6178696d756d206c656e677468206f66206120736572766963652049442e504d617853657276696365547970654c656e67746820103200000004c820546865206d6178696d756d206c656e677468206f66206120736572766963652074797065206465736372697074696f6e2e684d61784e756d6265724f6654797065735065725365727669636520100100000004090120546865206d6178696d756d206e756d626572206f662061207479706573206465736372697074696f6e20666f722061207365727669636520656e64706f696e742e4c4d61785365727669636555726c4c656e6774682010c8000000049420546865206d6178696d756d206c656e677468206f66206120736572766963652055524c2e644d61784e756d6265724f6655726c735065725365727669636520100200000004d420546865206d6178696d756d206e756d626572206f6620612055524c7320666f722061207365727669636520656e64706f696e742e013d074024496e666c6174696f6e000000084c496e697469616c506572696f644c656e677468102048a3c800000000000c050120546865206c656e677468206f662074686520696e697469616c20706572696f6420696e2077686963682074686520636f6e7374616e74207265776172642069731101206d696e7465642e204f6e6365207468652063757272656e7420626c6f636b206578636565647320746869732c207265776172647320617265206e6f206675727468657220206973737565642e4c496e697469616c506572696f64526577617264184036f539fdaeb30200000000000000000008fc2054686520616d6f756e74206f66206e65776c792069737375656420746f6b656e732070657220626c6f636b20647572696e672074686520696e697469616c2020706572696f642e0042244469644c6f6f6b757001244469644c6f6f6b75700834436f6e6e6563746564446964730001040219014107040004a8204d617070696e672066726f6d206163636f756e74206964656e7469666965727320746f20444944732e44436f6e6e65637465644163636f756e747300010802024507b404000cbc204d617070696e672066726f6d2028444944202b206163636f756e74206964656e74696669657229202d3e2028292e0d012054686520656d707479207475706c65206973207573656420617320612073656e74696e656c2076616c756520746f2073696d706c7920696e64696361746520746865982070726573656e6365206f66206120676976656e207475706c6520696e20746865206d61702e012905011501041c4465706f736974184000c0afd69136000000000000000000000c0d012054686520616d6f756e74206f662062616c616e636520746861742077696c6c2062652074616b656e20666f722065616368204449442061732061206465706f736974110120746f20696e63656e746976697365206661697220757365206f6620746865206f6e20636861696e2073746f726167652e20546865206465706f7369742063616e2062658c207265636c61696d6564207768656e20746865204449442069732064656c657465642e0149074324576562334e616d65730124576562334e616d65730c144f776e65720001040229014d0704000488204d6170206f66206e616d65202d3e206f776e6572736869702064657461696c732e144e616d65730001040200290104000458204d6170206f66206f776e6572202d3e206e616d652e1842616e6e6564000104022901b404000c4c204d6170206f66206e616d65202d3e2028292e00e02049662061206e616d65206b65792069732070726573656e742c20746865206e616d652069732063757272656e746c792062616e6e65642e0139050125010c1c4465706f736974184000d450a85d6b0000000000000000000004bc2054686520616d6f756e74206f66204b494c5420746f206465706f73697420746f20636c61696d2061206e616d652e344d696e4e616d654c656e677468201003000000048820546865206d696e20656e636f646564206c656e677468206f662061206e616d652e344d61784e616d654c656e677468201020000000048820546865206d617820656e636f646564206c656e677468206f662061206e616d652e01510744445075626c696343726564656e7469616c7301445075626c696343726564656e7469616c73082c43726564656e7469616c730001080502d101550704000cc020546865206d6170206f66207075626c69632063726564656e7469616c7320616c72656164792061747465737465642ef0204974206d6170732066726f6d206120287375626a656374206964202b2063726564656e7469616c20696429202d3e20746865206372656174696f6e6c2064657461696c73206f66207468652063726564656e7469616c2e4843726564656e7469616c5375626a656374730001040230350104001025012041207265766572736520696e646578206d617070696e672066726f6d2063726564656e7469616c20494420746f20746865207375626a656374207468652063726564656e7469616c3c207761732069737375656420746f2e001901204974206974207573656420746f20706572666f726d20656666696369656e74206c6f6f6b7570206f662063726564656e7469616c7320676976656e2074686569722049442e013d050131010c1c4465706f7369741840005c6a51fc45000000000000000000000411012054686520616d6f756e74206f6620746f6b656e7320746f2072657365727665207768656e20617474657374696e672061207075626c69632063726564656e7469616c2e584d6178456e636f646564436c61696d734c656e6774682010a0860100040d0120546865206d6178696d756d206c656e67746820696e206279746573206f662074686520656e636f64656420636c61696d73206f6620612063726564656e7469616c2e484d61785375626a65637449644c656e67746820100c01000008e820546865206d6178696d756d206c656e67746820696e206279746573206f6620746865207261772063726564656e7469616c207375626a65637430206964656e7469666965722e01590745244d6967726174696f6e01244d6967726174696f6e04304d696772617465644b6579730001040230b4040000014d0501a10104584d61784d6967726174696f6e7350657250616c6c657420106400000004b420546865206d617820616d6f756e74206f6e206d6967726174696f6e7320666f7220656163682070616c6c6574015d07463c50617261636861696e53797374656d013c50617261636861696e53797374656d545450656e64696e6756616c69646174696f6e436f64650100340400107d0120496e2063617365206f662061207363686564756c656420757067726164652c20746869732073746f72616765206669656c6420636f6e7461696e73207468652076616c69646174696f6e20636f646520746f206265206170706c6965642e00090220417320736f6f6e206173207468652072656c617920636861696e2067697665732075732074686520676f2d6168656164207369676e616c2c2077652077696c6c206f766572777269746520746865205b603a636f6465605d5b73705f636f72653a3a73746f726167653a3a77656c6c5f6b6e6f776e5f6b6579733a3a434f44455dad012077686963682077696c6c20726573756c7420746865206e65787420626c6f636b2070726f63657373207769746820746865206e65772076616c69646174696f6e20636f64652e205468697320636f6e636c756465732074686520757067726164652070726f636573732e444e657756616c69646174696f6e436f64650000340400145d012056616c69646174696f6e20636f6465207468617420697320736574206279207468652070617261636861696e20616e6420697320746f20626520636f6d6d756e69636174656420746f20636f6c6c61746f7220616e647820636f6e73657175656e746c79207468652072656c61792d636861696e2e00650120546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b206966206e6f206f746865722070616c6c657420616c7265616479207365742c207468652076616c75652e3856616c69646174696f6e446174610000590504000cd020546865205b6050657273697374656456616c69646174696f6e44617461605d2073657420666f72207468697320626c6f636b2e2d0120546869732076616c756520697320657870656374656420746f20626520736574206f6e6c79206f6e63652070657220626c6f636b20616e642069742773206e657665722073746f7265643420696e2074686520747269652e5044696453657456616c69646174696f6e436f64650100ac040004e02057657265207468652076616c69646174696f6e20646174612073657420746f206e6f74696679207468652072656c617920636861696e3f644c61737452656c6179436861696e426c6f636b4e756d6265720100201000000000041d01205468652072656c617920636861696e20626c6f636b206e756d626572206173736f636961746564207769746820746865206c6173742070617261636861696e20626c6f636b2e60557067726164655265737472696374696f6e5369676e616c0100610704001c750120416e206f7074696f6e20776869636820696e64696361746573206966207468652072656c61792d636861696e20726573747269637473207369676e616c6c696e6720612076616c69646174696f6e20636f646520757067726164652e610120496e206f7468657220776f7264732c20696620746869732069732060536f6d656020616e64205b604e657756616c69646174696f6e436f6465605d2069732060536f6d6560207468656e207468652070726f64756365646c2063616e6469646174652077696c6c20626520696e76616c69642e00710120546869732073746f72616765206974656d2069732061206d6972726f72206f662074686520636f72726573706f6e64696e672076616c756520666f72207468652063757272656e742070617261636861696e2066726f6d207468656d012072656c61792d636861696e2e20546869732076616c756520697320657068656d6572616c207768696368206d65616e7320697420646f65736e277420686974207468652073746f726167652e20546869732076616c756520697360207365742061667465722074686520696e686572656e742e3c52656c6179537461746550726f6f6600006105040018c4205468652073746174652070726f6f6620666f7220746865206c6173742072656c617920706172656e7420626c6f636b2e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e5852656c6576616e744d6573736167696e6753746174650000690704001c65012054686520736e617073686f74206f6620736f6d652073746174652072656c6174656420746f206d6573736167696e672072656c6576616e7420746f207468652063757272656e742070617261636861696e2061732070657248207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e44486f7374436f6e66696775726174696f6e00007d070400182901205468652070617261636861696e20686f737420636f6e66696775726174696f6e207468617420776173206f627461696e65642066726f6d207468652072656c617920706172656e742e006d012054686973206669656c64206973206d65616e7420746f2062652075706461746564206561636820626c6f636b2077697468207468652076616c69646174696f6e206461746120696e686572656e742e205468657265666f72652c4d01206265666f72652070726f63657373696e67206f662074686520696e686572656e742c20652e672e20696e20606f6e5f696e697469616c697a656020746869732064617461206d6179206265207374616c652e00ac2054686973206461746120697320616c736f20616273656e742066726f6d207468652067656e657369732e384c617374446d714d7163486561640100810780000000000000000000000000000000000000000000000000000000000000000010f420546865206c61737420646f776e77617264206d65737361676520717565756520636861696e20686561642077652068617665206f627365727665642e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e404c61737448726d704d7163486561647301008507040010490120546865206d65737361676520717565756520636861696e2068656164732077652068617665206f62736572766564207065722065616368206368616e6e656c20696e636f6d696e67206368616e6e656c2e00650120546869732076616c7565206973206c6f61646564206265666f726520616e642073617665642061667465722070726f63657373696e6720696e626f756e6420646f776e77617264206d65737361676573206361727269656460206279207468652073797374656d20696e686572656e742e6450726f636573736564446f776e776172644d6573736167657301002010000000000cc8204e756d626572206f6620646f776e77617264206d657373616765732070726f63657373656420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e3448726d7057617465726d61726b01002010000000000ca02048524d502077617465726d61726b2074686174207761732073657420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5048726d704f7574626f756e644d657373616765730100910704000ca42048524d50206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e385570776172644d657373616765730100e10204000cac20557077617264206d65737361676573207468617420776572652073656e7420696e206120626c6f636b2e00ec20546869732077696c6c20626520636c656172656420696e20606f6e5f696e697469616c697a6560206f662065616368206e657720626c6f636b2e5450656e64696e675570776172644d657373616765730100e102040004310120557077617264206d65737361676573207468617420617265207374696c6c2070656e64696e6720616e64206e6f74207965742073656e6420746f207468652072656c617920636861696e2e84416e6e6f756e63656448726d704d6573736167657350657243616e646964617465010020100000000008650120546865206e756d626572206f662048524d50206d65737361676573207765206f6273657276656420696e20606f6e5f696e697469616c697a656020616e64207468757320757365642074686174206e756d62657220666f72f020616e6e6f756e63696e672074686520776569676874206f6620606f6e5f696e697469616c697a656020616e6420606f6e5f66696e616c697a65602e68526573657276656458636d705765696768744f766572726964650000280400085d01205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e672058434d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e645265736572766564446d705765696768744f766572726964650000280400085901205468652077656967687420776520726573657276652061742074686520626567696e6e696e67206f662074686520626c6f636b20666f722070726f63657373696e6720444d50206d657373616765732e2054686973b8206f76657272696465732074686520616d6f756e742073657420696e2074686520436f6e6669672074726169742e44417574686f72697a65645570677261646500009907040004b820546865206e65787420617574686f72697a656420757067726164652c206966207468657265206973206f6e652e60437573746f6d56616c69646174696f6e486561644461746100003404000c2901204120637573746f6d2068656164206461746120746861742073686f756c642062652072657475726e656420617320726573756c74206f66206076616c69646174655f626c6f636b602e00110120536565206050616c6c65743a3a7365745f637573746f6d5f76616c69646174696f6e5f686561645f646174616020666f72206d6f726520696e666f726d6174696f6e2e01510501d90100019d07503450617261636861696e496e666f013450617261636861696e496e666f042c50617261636861696e49640100e501106400000000018505000000512458636d705175657565012458636d7051756575652844496e626f756e6458636d705374617475730100a1070400049420537461747573206f662074686520696e626f756e642058434d50206368616e6e656c732e4c496e626f756e6458636d704d657373616765730101080205b90734040004190120496e626f756e64206167677265676174652058434d50206d657373616765732e2049742063616e206f6e6c79206265206f6e6520706572205061726149642f626c6f636b2e484f7574626f756e6458636d705374617475730100bd070400185d0120546865206e6f6e2d656d7074792058434d50206368616e6e656c7320696e206f72646572206f66206265636f6d696e67206e6f6e2d656d7074792c20616e642074686520696e646578206f6620746865206669727374510120616e64206c617374206f7574626f756e64206d6573736167652e204966207468652074776f20696e64696365732061726520657175616c2c207468656e20697420696e6469636174657320616e20656d707479590120717565756520616e64207468657265206d7573742062652061206e6f6e2d604f6b6020604f7574626f756e64537461747573602e20576520617373756d65207175657565732067726f77206e6f20677265617465725901207468616e203635353335206974656d732e20517565756520696e646963657320666f72206e6f726d616c206d6573736167657320626567696e206174206f6e653b207a65726f20697320726573657276656420696e11012063617365206f6620746865206e65656420746f2073656e64206120686967682d7072696f72697479207369676e616c206d657373616765207468697320626c6f636b2e09012054686520626f6f6c20697320747275652069662074686572652069732061207369676e616c206d6573736167652077616974696e6720746f2062652073656e742e504f7574626f756e6458636d704d657373616765730101080205c90734040004bc20546865206d65737361676573206f7574626f756e6420696e206120676976656e2058434d50206368616e6e656c2e385369676e616c4d6573736167657301010402e50134040004a020416e79207369676e616c206d657373616765732077616974696e6720746f2062652073656e742e2c5175657565436f6e6669670100cd0774020000000500000001000000821a06000008000700c817a804020004000415012054686520636f6e66696775726174696f6e20776869636820636f6e74726f6c73207468652064796e616d696373206f6620746865206f7574626f756e642071756575652e284f7665727765696768740001040510d107040010050120546865206d657373616765732074686174206578636565646564206d617820696e646976696475616c206d65737361676520776569676874206275646765742e003901205468657365206d657373616765207374617920696e20746869732073746f72616765206d617020756e74696c207468657920617265206d616e75616c6c79206469737061746368656420766961582060736572766963655f6f766572776569676874602e50436f756e746572466f724f766572776569676874010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d61703c4f766572776569676874436f756e7401001020000000000000000008690120546865206e756d626572206f66206f766572776569676874206d657373616765732065766572207265636f7264656420696e20604f766572776569676874602e20416c736f20646f75626c657320617320746865206e6578748420617661696c61626c652066726565206f76657277656967687420696e6465782e38517565756553757370656e6465640100ac04000441012057686574686572206f72206e6f74207468652058434d502071756575652069732073757370656e6465642066726f6d20657865637574696e6720696e636f6d696e672058434d73206f72206e6f742e01890501dd010001d507522c506f6c6b61646f7458636d012c506f6c6b61646f7458636d30305175657279436f756e746572010010200000000000000000048820546865206c617465737420617661696c61626c6520717565727920696e6465782e1c517565726965730001040210d9070400045420546865206f6e676f696e6720717565726965732e28417373657454726170730101040630201000000000106820546865206578697374696e672061737365742074726170732e007501204b65792069732074686520626c616b6532203235362068617368206f6620286f726967696e2c2076657273696f6e656420604d756c7469417373657473602920706169722e2056616c756520697320746865206e756d626572206f661d012074696d65732074686973207061697220686173206265656e20747261707065642028757375616c6c79206a75737420312069662069742065786973747320617420616c6c292e385361666558636d56657273696f6e00002004000861012044656661756c742076657273696f6e20746f20656e636f64652058434d207768656e206c61746573742076657273696f6e206f662064657374696e6174696f6e20697320756e6b6e6f776e2e20496620604e6f6e65602c3d01207468656e207468652064657374696e6174696f6e732077686f73652058434d2076657273696f6e20697320756e6b6e6f776e2061726520636f6e7369646572656420756e726561636861626c652e40537570706f7274656456657273696f6e0001080502ed0720040004f020546865204c61746573742076657273696f6e732074686174207765206b6e6f7720766172696f7573206c6f636174696f6e7320737570706f72742e4056657273696f6e4e6f746966696572730001080502ed0710040004050120416c6c206c6f636174696f6e7320746861742077652068617665207265717565737465642076657273696f6e206e6f74696669636174696f6e732066726f6d2e5056657273696f6e4e6f74696679546172676574730001080502ed07f10704000871012054686520746172676574206c6f636174696f6e73207468617420617265207375627363726962656420746f206f75722076657273696f6e206368616e6765732c2061732077656c6c20617320746865206d6f737420726563656e7494206f66206f75722076657273696f6e7320776520696e666f726d6564207468656d206f662e5456657273696f6e446973636f7665727951756575650100f50704000c65012044657374696e6174696f6e732077686f7365206c61746573742058434d2076657273696f6e20776520776f756c64206c696b6520746f206b6e6f772e204475706c696361746573206e6f7420616c6c6f7765642c20616e6471012074686520607533326020636f756e74657220697320746865206e756d626572206f662074696d6573207468617420612073656e6420746f207468652064657374696e6174696f6e20686173206265656e20617474656d707465642c8c20776869636820697320757365642061732061207072696f726974697a6174696f6e2e4043757272656e744d6967726174696f6e000001080400049c205468652063757272656e74206d6967726174696f6e27732073746167652c20696620616e792e5452656d6f74654c6f636b656446756e6769626c657300010c05020209081108040004f02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e20612072656d6f746520636861696e2e3c4c6f636b656446756e6769626c657300010402002108040004e02046756e6769626c6520617373657473207768696368207765206b6e6f7720617265206c6f636b6564206f6e207468697320636861696e2e5458636d457865637574696f6e53757370656e6465640100ac040004b420476c6f62616c2073757370656e73696f6e207374617465206f66207468652058434d206578656375746f722e018d0501e90100012d08532843756d756c757358636d000001bd02000131085420446d7051756575650120446d7051756575651434436f6e66696775726174696f6e01003508280700e40b540202000400044c2054686520636f6e66696775726174696f6e2e2450616765496e646578010039084000000000000000000000000000000000044020546865207061676520696e6465782e14506167657301010402203d0804000444205468652071756575652070616765732e284f766572776569676874000104021041080400046420546865206f766572776569676874206d657373616765732e50436f756e746572466f724f766572776569676874010020100000000004ac436f756e74657220666f72207468652072656c6174656420636f756e7465642073746f72616765206d617001e10501c10200014508554908042048436865636b4e6f6e5a65726f53656e6465725108b440436865636b5370656356657273696f6e55082038436865636b547856657273696f6e59082030436865636b47656e657369735d083038436865636b4d6f7274616c69747961083028436865636b4e6f6e63656908b42c436865636b5765696768746d08b4604368617267655472616e73616374696f6e5061796d656e747108b4a901" \ No newline at end of file diff --git a/tests/testUtils/metadata/spiritnet.ts b/tests/testUtils/metadata/spiritnet.ts index ff33e2a4a..d553215b5 100644 --- a/tests/testUtils/metadata/spiritnet.ts +++ b/tests/testUtils/metadata/spiritnet.ts @@ -9,8 +9,8 @@ import { readFileSync } from 'fs' import path from 'path' import type { HexString } from '@kiltprotocol/types' -const META_PATH = 'packages/augment-api/metadata/spiritnet.json' -const { result: metaHex } = JSON.parse( +const META_PATH = 'tests/testUtils/metadata/spiritnet.json' +const metaHex = JSON.parse( readFileSync(path.resolve(META_PATH), { encoding: 'utf-8' }) ) diff --git a/tsconfig.docs.json b/tsconfig.docs.json index d28b8e082..ac6631d1c 100644 --- a/tsconfig.docs.json +++ b/tsconfig.docs.json @@ -5,7 +5,6 @@ "entryPointStrategy": "resolve", "entryPoints": [ "packages/asset-credentials/src/index.ts", - "packages/augment-api/src/index.ts", "packages/chain-helpers/src/index.ts", "packages/config/src/index.ts", "packages/credentials/src/index.ts", diff --git a/tsconfig.json b/tsconfig.json index 2b9e6075f..a67011f3c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,8 +15,6 @@ "@kiltprotocol/jsonld-suites": ["jsonld-suites/src"], "@kiltprotocol/did": ["did/src"], "@kiltprotocol/docs": ["docs/src"], - "@kiltprotocol/augment-api": ["augment-api/src"], - "@kiltprotocol/augment-api/extraDefs": ["augment-api/src/interfaces/extraDefs"], "@kiltprotocol/type-definitions": ["type-definitions/src"], "@kiltprotocol/legacy-credentials": ["legacy-credentials/src"] } diff --git a/yarn.lock b/yarn.lock index a3aeb934b..d8f576c2b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,13 @@ __metadata: version: 6 cacheKey: 8 +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -1567,164 +1574,21 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/aix-ppc64@npm:0.19.12" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/android-arm64@npm:0.19.12" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/android-arm@npm:0.19.12" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/android-x64@npm:0.19.12" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/darwin-arm64@npm:0.19.12" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/darwin-x64@npm:0.19.12" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/freebsd-arm64@npm:0.19.12" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/freebsd-x64@npm:0.19.12" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-arm64@npm:0.19.12" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-arm@npm:0.19.12" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-ia32@npm:0.19.12" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-loong64@npm:0.19.12" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-mips64el@npm:0.19.12" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-ppc64@npm:0.19.12" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-riscv64@npm:0.19.12" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-s390x@npm:0.19.12" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/linux-x64@npm:0.19.12" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/netbsd-x64@npm:0.19.12" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/openbsd-x64@npm:0.19.12" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/sunos-x64@npm:0.19.12" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/win32-arm64@npm:0.19.12" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/win32-ia32@npm:0.19.12" - conditions: os=win32 & cpu=ia32 +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/win32-x64@npm:0.19.12" - conditions: os=win32 & cpu=x64 +"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": + version: 4.10.0 + resolution: "@eslint-community/regexpp@npm:4.10.0" + checksum: 2a6e345429ea8382aaaf3a61f865cae16ed44d31ca917910033c02dc00d505d939f10b81e079fa14d43b51499c640138e153b7e40743c4c094d9df97d4e56f7b languageName: node linkType: hard @@ -1745,6 +1609,30 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.6.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: 10957c7592b20ca0089262d8c2a8accbad14b4f6507e35416c32ee6b4dbf9cad67dfb77096bbd405405e9ada2b107f3797fe94362e1c55e0b09d6e90dd149127 + languageName: node + linkType: hard + +"@eslint/js@npm:8.57.0": + version: 8.57.0 + resolution: "@eslint/js@npm:8.57.0" + checksum: 315dc65b0e9893e2bff139bddace7ea601ad77ed47b4550e73da8c9c2d2766c7a575c3cddf17ef85b8fd6a36ff34f91729d0dcca56e73ca887c10df91a41b0bb + languageName: node + linkType: hard + "@gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" @@ -1752,6 +1640,17 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/config-array@npm:^0.11.14": + version: 0.11.14 + resolution: "@humanwhocodes/config-array@npm:0.11.14" + dependencies: + "@humanwhocodes/object-schema": ^2.0.2 + debug: ^4.3.1 + minimatch: ^3.0.5 + checksum: 861ccce9eaea5de19546653bccf75bf09fe878bc39c3aab00aeee2d2a0e654516adad38dd1098aab5e3af0145bbcbf3f309bdf4d964f8dab9dcd5834ae4c02f2 + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.5.0": version: 0.5.0 resolution: "@humanwhocodes/config-array@npm:0.5.0" @@ -1763,6 +1662,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + "@humanwhocodes/object-schema@npm:^1.2.0": version: 1.2.1 resolution: "@humanwhocodes/object-schema@npm:1.2.1" @@ -1770,6 +1676,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/object-schema@npm:^2.0.2": + version: 2.0.2 + resolution: "@humanwhocodes/object-schema@npm:2.0.2" + checksum: 2fc11503361b5fb4f14714c700c02a3f4c7c93e9acd6b87a29f62c522d90470f364d6161b03d1cc618b979f2ae02aed1106fd29d302695d8927e2fc8165ba8ee + languageName: node + linkType: hard + "@istanbuljs/load-nyc-config@npm:^1.0.0": version: 1.1.0 resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" @@ -2076,7 +1989,6 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/asset-credentials@workspace:packages/asset-credentials" dependencies: - "@kiltprotocol/augment-api": "workspace:*" "@kiltprotocol/chain-helpers": "workspace:*" "@kiltprotocol/config": "workspace:*" "@kiltprotocol/credentials": "workspace:*" @@ -2089,34 +2001,39 @@ __metadata: "@polkadot/util-crypto": ^12.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 + peerDependencies: + "@kiltprotocol/augment-api": "*" + peerDependenciesMeta: + "@kiltprotocol/augment-api": + optional: true languageName: unknown linkType: soft -"@kiltprotocol/augment-api@workspace:*, @kiltprotocol/augment-api@workspace:^, @kiltprotocol/augment-api@workspace:packages/augment-api": - version: 0.0.0-use.local - resolution: "@kiltprotocol/augment-api@workspace:packages/augment-api" +"@kiltprotocol/augment-api@npm:1.11210.0-rc": + version: 1.11210.0-rc + resolution: "@kiltprotocol/augment-api@npm:1.11210.0-rc" dependencies: - "@kiltprotocol/type-definitions": "workspace:*" - "@polkadot/api": ^10.7.3 - "@polkadot/api-base": ^10.0.0 - "@polkadot/rpc-core": ^10.0.0 - "@polkadot/typegen": ^10.7.3 - "@polkadot/types": ^10.0.0 - "@polkadot/types-codec": ^10.0.0 - "@types/node": ^16.11.7 - glob: ^7.1.1 - rimraf: ^3.0.2 - tsx: ^4.7.0 - typescript: ^4.8.3 - yargs: ^16.2.0 - languageName: unknown - linkType: soft + "@typescript-eslint/eslint-plugin": ^7.0.2 + "@typescript-eslint/parser": ^7.0.2 + dotenv: ^16.4.5 + eslint: ^8.57.0 + eslint-plugin-unused-imports: ^3.1.0 + peerDependencies: + "@kiltprotocol/type-definitions": ^0.35.0 + "@polkadot/api": ~10.12.0 + "@polkadot/typegen": ~10.12.0 + typescript: "*" + bin: + kilt_reaugment: augmentFromFile.mjs + kilt_updateMetadata: updateMetadata.mjs + checksum: 44288830a41e467f32d8efcd5f5027a73810b5835f0d92ab1dfbd30935ad66951802db14633ab67cd0f81ee26755cb4cc77d55bf0f3c180432a9bc844d83e7ac + languageName: node + linkType: hard "@kiltprotocol/chain-helpers@workspace:*, @kiltprotocol/chain-helpers@workspace:packages/chain-helpers": version: 0.0.0-use.local resolution: "@kiltprotocol/chain-helpers@workspace:packages/chain-helpers" dependencies: - "@kiltprotocol/augment-api": "workspace:^" "@kiltprotocol/config": "workspace:*" "@kiltprotocol/type-definitions": "workspace:*" "@kiltprotocol/types": "workspace:*" @@ -2128,6 +2045,11 @@ __metadata: "@polkadot/util-crypto": ^12.0.0 rimraf: ^3.0.2 typescript: ^4.8.3 + peerDependencies: + "@kiltprotocol/augment-api": "*" + peerDependenciesMeta: + "@kiltprotocol/augment-api": + optional: true languageName: unknown linkType: soft @@ -2147,7 +2069,6 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/credentials@workspace:packages/credentials" dependencies: - "@kiltprotocol/augment-api": "workspace:*" "@kiltprotocol/chain-helpers": "workspace:*" "@kiltprotocol/config": "workspace:*" "@kiltprotocol/did": "workspace:*" @@ -2166,6 +2087,11 @@ __metadata: json-pointer: ^0.6.2 rimraf: ^3.0.2 typescript: ^4.8.3 + peerDependencies: + "@kiltprotocol/augment-api": "*" + peerDependenciesMeta: + "@kiltprotocol/augment-api": + optional: true languageName: unknown linkType: soft @@ -2175,7 +2101,6 @@ __metadata: dependencies: "@digitalbazaar/multikey-context": ^2.0.1 "@digitalbazaar/security-context": ^1.0.0 - "@kiltprotocol/augment-api": "workspace:*" "@kiltprotocol/config": "workspace:*" "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" @@ -2187,6 +2112,11 @@ __metadata: multibase: ^4.0.6 rimraf: ^3.0.2 typescript: ^4.8.3 + peerDependencies: + "@kiltprotocol/augment-api": "*" + peerDependenciesMeta: + "@kiltprotocol/augment-api": + optional: true languageName: unknown linkType: soft @@ -2264,16 +2194,20 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/sdk-js@workspace:packages/sdk-js" dependencies: + "@kiltprotocol/augment-api": 1.11210.0-rc "@kiltprotocol/chain-helpers": "workspace:*" "@kiltprotocol/config": "workspace:*" "@kiltprotocol/credentials": "workspace:*" "@kiltprotocol/did": "workspace:*" "@kiltprotocol/utils": "workspace:*" + "@polkadot/typegen": ^10.7.3 rimraf: ^3.0.2 terser-webpack-plugin: ^5.1.1 typescript: ^4.8.3 webpack: ^5.76.0 webpack-cli: ^4.9.2 + peerDependencies: + "@kiltprotocol/augment-api": ^1.11210.0 languageName: unknown linkType: soft @@ -2380,7 +2314,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3": +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -2437,7 +2371,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-base@npm:10.7.3, @polkadot/api-base@npm:^10.0.0": +"@polkadot/api-base@npm:10.7.3": version: 10.7.3 resolution: "@polkadot/api-base@npm:10.7.3" dependencies: @@ -2531,7 +2465,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/rpc-core@npm:10.7.3, @polkadot/rpc-core@npm:^10.0.0": +"@polkadot/rpc-core@npm:10.7.3": version: 10.7.3 resolution: "@polkadot/rpc-core@npm:10.7.3" dependencies: @@ -2610,7 +2544,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/types-codec@npm:10.7.3, @polkadot/types-codec@npm:^10.0.0": +"@polkadot/types-codec@npm:10.7.3": version: 10.7.3 resolution: "@polkadot/types-codec@npm:10.7.3" dependencies: @@ -3092,10 +3026,10 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": - version: 7.0.10 - resolution: "@types/json-schema@npm:7.0.10" - checksum: 369f12207298e3c8931100ab86c9c60d9217ab930a8ae0b851495f4f30695d3f0eb431eedc8e8d9c69357869899ea0fe6f9d65ddde5ea70415d67ef340dfdd1f +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 languageName: node linkType: hard @@ -3120,7 +3054,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:^16.11.7": +"@types/node@npm:*": version: 16.18.40 resolution: "@types/node@npm:16.18.40" checksum: a683930491b4fd7cb2dc7684e32bbeedc4a83fb1949a7b15ea724fbfaa9988cec59091f169a3f1090cb91992caba8c1a7d50315b2c67c6e2579a3788bb09eec4 @@ -3148,6 +3082,13 @@ __metadata: languageName: node linkType: hard +"@types/semver@npm:^7.5.0": + version: 7.5.8 + resolution: "@types/semver@npm:7.5.8" + checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663 + languageName: node + linkType: hard + "@types/ssh2-streams@npm:*": version: 0.1.9 resolution: "@types/ssh2-streams@npm:0.1.9" @@ -3220,6 +3161,31 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/eslint-plugin@npm:^7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/eslint-plugin@npm:7.0.2" + dependencies: + "@eslint-community/regexpp": ^4.5.1 + "@typescript-eslint/scope-manager": 7.0.2 + "@typescript-eslint/type-utils": 7.0.2 + "@typescript-eslint/utils": 7.0.2 + "@typescript-eslint/visitor-keys": 7.0.2 + debug: ^4.3.4 + graphemer: ^1.4.0 + ignore: ^5.2.4 + natural-compare: ^1.4.0 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependencies: + "@typescript-eslint/parser": ^7.0.0 + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: ec65524af6948d3ca8ee709c8eb12b086235467fa9de10e4e692d62e42ca9d8da255cec641f59e6912d7658dc9ecfc29f121e00704107d345310b71914916589 + languageName: node + linkType: hard + "@typescript-eslint/parser@npm:^5.7.0": version: 5.16.0 resolution: "@typescript-eslint/parser@npm:5.16.0" @@ -3237,6 +3203,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/parser@npm:^7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/parser@npm:7.0.2" + dependencies: + "@typescript-eslint/scope-manager": 7.0.2 + "@typescript-eslint/types": 7.0.2 + "@typescript-eslint/typescript-estree": 7.0.2 + "@typescript-eslint/visitor-keys": 7.0.2 + debug: ^4.3.4 + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: ac47105ee238f6085c281f2634579ffe2e54f3f62c8540c569536f3229b9a7ba4eeeda947461255266e8d5c4162ab4c43974d174c93591d1a16c3bb0c8123eec + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:5.16.0": version: 5.16.0 resolution: "@typescript-eslint/scope-manager@npm:5.16.0" @@ -3247,6 +3231,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/scope-manager@npm:7.0.2" + dependencies: + "@typescript-eslint/types": 7.0.2 + "@typescript-eslint/visitor-keys": 7.0.2 + checksum: e8db4d7cab296bb234c720f16b35aef6e44d94f3f0fc1565209e69aa17d2ae63fa4ad8650d77135cd45d658551072179d82d379725751a6b23d9a97f54928484 + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:5.16.0": version: 5.16.0 resolution: "@typescript-eslint/type-utils@npm:5.16.0" @@ -3263,6 +3257,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/type-utils@npm:7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/type-utils@npm:7.0.2" + dependencies: + "@typescript-eslint/typescript-estree": 7.0.2 + "@typescript-eslint/utils": 7.0.2 + debug: ^4.3.4 + ts-api-utils: ^1.0.1 + peerDependencies: + eslint: ^8.56.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 288c556dc33fea3ed3089c7075a18b7ca8b1c34dcb7530c4c31c7c0282522266fbfd2f202aae47b4b2e600a9c5fb6bd15a080aad33b2f810f647af25b0d28dea + languageName: node + linkType: hard + "@typescript-eslint/types@npm:5.16.0": version: 5.16.0 resolution: "@typescript-eslint/types@npm:5.16.0" @@ -3270,6 +3281,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/types@npm:7.0.2" + checksum: 4224afa1cc2e056f3a83d9a69fd894d2b3b15eaa8319ef075066ffd8d20379983124c7663bee873b541e8a95c5dd61a5bad864eeecc7ec68968b6cb4ca70c6bd + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.16.0": version: 5.16.0 resolution: "@typescript-eslint/typescript-estree@npm:5.16.0" @@ -3288,6 +3306,25 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/typescript-estree@npm:7.0.2" + dependencies: + "@typescript-eslint/types": 7.0.2 + "@typescript-eslint/visitor-keys": 7.0.2 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + minimatch: 9.0.3 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: 3fc491081746fa0bb7ba552cdfecd7490de16867541fa6748462856a2a49a60158f65f48ce45f4ae451655ecbce840d065fc5b06d6f0f61d60d0997a2d08cdf2 + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:5.16.0": version: 5.16.0 resolution: "@typescript-eslint/utils@npm:5.16.0" @@ -3304,6 +3341,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/utils@npm:7.0.2" + dependencies: + "@eslint-community/eslint-utils": ^4.4.0 + "@types/json-schema": ^7.0.12 + "@types/semver": ^7.5.0 + "@typescript-eslint/scope-manager": 7.0.2 + "@typescript-eslint/types": 7.0.2 + "@typescript-eslint/typescript-estree": 7.0.2 + semver: ^7.5.4 + peerDependencies: + eslint: ^8.56.0 + checksum: 76b067290f926cf5f955e5e4217958fec5b83f9071f92ec11c2fb1395c61c0b5481706de7ad0260669c02fa8762e18ff397a1fbba822634880f8c6f1690b957c + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:5.16.0": version: 5.16.0 resolution: "@typescript-eslint/visitor-keys@npm:5.16.0" @@ -3314,6 +3368,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:7.0.2": + version: 7.0.2 + resolution: "@typescript-eslint/visitor-keys@npm:7.0.2" + dependencies: + "@typescript-eslint/types": 7.0.2 + eslint-visitor-keys: ^3.4.1 + checksum: f1f97961baa6dda9235576c0ec0c359fd157aa2336b82f46578697f6b1c0ad3a76b28bc0ac586305595aaa1b84fdaaba668e53dd24819ad184d2e1f7031353dc + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.0 + resolution: "@ungap/structured-clone@npm:1.2.0" + checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 + languageName: node + linkType: hard + "@webassemblyjs/ast@npm:1.11.6, @webassemblyjs/ast@npm:^1.11.5": version: 1.11.6 resolution: "@webassemblyjs/ast@npm:1.11.6" @@ -3549,7 +3620,7 @@ __metadata: languageName: node linkType: hard -"acorn-jsx@npm:^5.3.1": +"acorn-jsx@npm:^5.3.1, acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" peerDependencies: @@ -3567,12 +3638,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.7.1, acorn@npm:^8.8.2": - version: 8.8.2 - resolution: "acorn@npm:8.8.2" +"acorn@npm:^8.7.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" bin: acorn: bin/acorn - checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 + checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c languageName: node linkType: hard @@ -3763,6 +3834,13 @@ __metadata: languageName: node linkType: hard +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + "array-ify@npm:^1.0.0": version: 1.0.0 resolution: "array-ify@npm:1.0.0" @@ -4315,17 +4393,6 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^7.0.2": - version: 7.0.4 - resolution: "cliui@npm:7.0.4" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.0 - wrap-ansi: ^7.0.0 - checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f - languageName: node - linkType: hard - "cliui@npm:^8.0.1": version: 8.0.1 resolution: "cliui@npm:8.0.1" @@ -4851,6 +4918,13 @@ __metadata: languageName: node linkType: hard +"dotenv@npm:^16.4.5": + version: 16.4.5 + resolution: "dotenv@npm:16.4.5" + checksum: 301a12c3d44fd49888b74eb9ccf9f07a1f5df43f489e7fcb89647a2edcd84c42d6bc349dc8df099cd18f07c35c7b04685c1a4f3e6a6a9e6b30f8d48c15b7f49c + languageName: node + linkType: hard + "ed25519-signature-2018-context@npm:^1.1.0": version: 1.1.0 resolution: "ed25519-signature-2018-context@npm:1.1.0" @@ -5010,86 +5084,6 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:~0.19.10": - version: 0.19.12 - resolution: "esbuild@npm:0.19.12" - dependencies: - "@esbuild/aix-ppc64": 0.19.12 - "@esbuild/android-arm": 0.19.12 - "@esbuild/android-arm64": 0.19.12 - "@esbuild/android-x64": 0.19.12 - "@esbuild/darwin-arm64": 0.19.12 - "@esbuild/darwin-x64": 0.19.12 - "@esbuild/freebsd-arm64": 0.19.12 - "@esbuild/freebsd-x64": 0.19.12 - "@esbuild/linux-arm": 0.19.12 - "@esbuild/linux-arm64": 0.19.12 - "@esbuild/linux-ia32": 0.19.12 - "@esbuild/linux-loong64": 0.19.12 - "@esbuild/linux-mips64el": 0.19.12 - "@esbuild/linux-ppc64": 0.19.12 - "@esbuild/linux-riscv64": 0.19.12 - "@esbuild/linux-s390x": 0.19.12 - "@esbuild/linux-x64": 0.19.12 - "@esbuild/netbsd-x64": 0.19.12 - "@esbuild/openbsd-x64": 0.19.12 - "@esbuild/sunos-x64": 0.19.12 - "@esbuild/win32-arm64": 0.19.12 - "@esbuild/win32-ia32": 0.19.12 - "@esbuild/win32-x64": 0.19.12 - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 2936e29107b43e65a775b78b7bc66ddd7d76febd73840ac7e825fb22b65029422ff51038a08d19b05154f543584bd3afe7d1ef1c63900429475b17fbe61cb61f - languageName: node - linkType: hard - "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -5230,6 +5224,28 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-unused-imports@npm:^3.1.0": + version: 3.1.0 + resolution: "eslint-plugin-unused-imports@npm:3.1.0" + dependencies: + eslint-rule-composer: ^0.3.0 + peerDependencies: + "@typescript-eslint/eslint-plugin": 6 - 7 + eslint: 8 + peerDependenciesMeta: + "@typescript-eslint/eslint-plugin": + optional: true + checksum: c41da339ea8faf40b8b4081f0d52a4c75d24f121c5b95b19b777d12abfbc23505e4aab2422918b2517dd239a749a38912fb3405b42a9aa6b50c32cf5f3d6ecf0 + languageName: node + linkType: hard + +"eslint-rule-composer@npm:^0.3.0": + version: 0.3.0 + resolution: "eslint-rule-composer@npm:0.3.0" + checksum: c2f57cded8d1c8f82483e0ce28861214347e24fd79fd4144667974cd334d718f4ba05080aaef2399e3bbe36f7d6632865110227e6b176ed6daa2d676df9281b1 + languageName: node + linkType: hard + "eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" @@ -5240,6 +5256,16 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e + languageName: node + linkType: hard + "eslint-utils@npm:^2.1.0": version: 2.1.0 resolution: "eslint-utils@npm:2.1.0" @@ -5274,10 +5300,10 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.0.0": - version: 3.3.0 - resolution: "eslint-visitor-keys@npm:3.3.0" - checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 +"eslint-visitor-keys@npm:^3.0.0, eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 languageName: node linkType: hard @@ -5331,6 +5357,54 @@ __metadata: languageName: node linkType: hard +"eslint@npm:^8.57.0": + version: 8.57.0 + resolution: "eslint@npm:8.57.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.4 + "@eslint/js": 8.57.0 + "@humanwhocodes/config-array": ^0.11.14 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + "@ungap/structured-clone": ^1.2.0 + ajv: ^6.12.4 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 + esquery: ^1.4.2 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 + ignore: ^5.2.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.3 + strip-ansi: ^6.0.1 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: 3a48d7ff85ab420a8447e9810d8087aea5b1df9ef68c9151732b478de698389ee656fd895635b5f2871c89ee5a2652b3f343d11e9db6f8486880374ebc74a2d9 + languageName: node + linkType: hard + "espree@npm:^7.3.0, espree@npm:^7.3.1": version: 7.3.1 resolution: "espree@npm:7.3.1" @@ -5342,6 +5416,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 + languageName: node + linkType: hard + "esprima@npm:^4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -5352,12 +5437,12 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.0": - version: 1.4.0 - resolution: "esquery@npm:1.4.0" +"esquery@npm:^1.4.0, esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" dependencies: estraverse: ^5.1.0 - checksum: a0807e17abd7fbe5fbd4fab673038d6d8a50675cdae6b04fbaa520c34581be0c5fa24582990e8acd8854f671dd291c78bb2efb9e0ed5b62f33bac4f9cf820210 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 languageName: node linkType: hard @@ -5656,7 +5741,7 @@ __metadata: languageName: node linkType: hard -"fsevents@^2.3.2, fsevents@npm:~2.3.3": +fsevents@^2.3.2: version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -5666,7 +5751,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin": +"fsevents@patch:fsevents@^2.3.2#~builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -5775,15 +5860,6 @@ __metadata: languageName: node linkType: hard -"get-tsconfig@npm:^4.7.2": - version: 4.7.2 - resolution: "get-tsconfig@npm:4.7.2" - dependencies: - resolve-pkg-maps: ^1.0.0 - checksum: 172358903250eff0103943f816e8a4e51d29b8e5449058bdf7266714a908a48239f6884308bd3a6ff28b09f692b9533dbebfd183ab63e4e14f073cda91f1bca9 - languageName: node - linkType: hard - "git-raw-commits@npm:^2.0.0": version: 2.0.11 resolution: "git-raw-commits@npm:2.0.11" @@ -5808,6 +5884,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + "glob-to-regexp@npm:^0.4.1": version: 0.4.1 resolution: "glob-to-regexp@npm:0.4.1" @@ -5815,7 +5900,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0": +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0": version: 7.2.0 resolution: "glob@npm:7.2.0" dependencies: @@ -5845,16 +5930,16 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.6.0, globals@npm:^13.9.0": - version: 13.13.0 - resolution: "globals@npm:13.13.0" +"globals@npm:^13.19.0, globals@npm:^13.6.0, globals@npm:^13.9.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" dependencies: type-fest: ^0.20.2 - checksum: c55ea8fd3afecb72567bac41605577e19e68476993dfb0ca4c49b86075af5f0ae3f0f5502525f69010f7c5ea5db6a1c540a80a4f80ebdfb2f686d87b0f05d7e9 + checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c languageName: node linkType: hard -"globby@npm:^11.0.4": +"globby@npm:^11.0.4, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -5875,6 +5960,13 @@ __metadata: languageName: node linkType: hard +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 + languageName: node + linkType: hard + "handlebars@npm:^4.7.7": version: 4.7.7 resolution: "handlebars@npm:4.7.7" @@ -6064,10 +6156,10 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.1.8, ignore@npm:^5.2.0": - version: 5.2.0 - resolution: "ignore@npm:5.2.0" - checksum: 6b1f926792d614f64c6c83da3a1f9c83f6196c2839aa41e1e32dd7b8d174cef2e329d75caabb62cb61ce9dc432f75e67d07d122a037312db7caa73166a1bdb77 +"ignore@npm:^5.1.8, ignore@npm:^5.2.0, ignore@npm:^5.2.4": + version: 5.3.1 + resolution: "ignore@npm:5.3.1" + checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 languageName: node linkType: hard @@ -6288,6 +6380,13 @@ __metadata: languageName: node linkType: hard +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + "is-plain-obj@npm:^1.1.0": version: 1.1.0 resolution: "is-plain-obj@npm:1.1.0" @@ -6907,6 +7006,17 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + "jsdoc-type-pratt-parser@npm:~2.2.3": version: 2.2.5 resolution: "jsdoc-type-pratt-parser@npm:2.2.5" @@ -7397,16 +7507,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.4": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: ^1.1.7 - checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a - languageName: node - linkType: hard - -"minimatch@npm:^9.0.0": +"minimatch@npm:9.0.3, minimatch@npm:^9.0.0": version: 9.0.3 resolution: "minimatch@npm:9.0.3" dependencies: @@ -7415,6 +7516,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + "minimist-options@npm:4.1.0": version: 4.1.0 resolution: "minimist-options@npm:4.1.0" @@ -7802,17 +7912,17 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.9.1": - version: 0.9.1 - resolution: "optionator@npm:0.9.1" +"optionator@npm:^0.9.1, optionator@npm:^0.9.3": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" dependencies: + "@aashutoshrathi/word-wrap": ^1.2.3 deep-is: ^0.1.3 fast-levenshtein: ^2.0.6 levn: ^0.4.1 prelude-ls: ^1.2.1 type-check: ^0.4.0 - word-wrap: ^1.2.3 - checksum: dbc6fa065604b24ea57d734261914e697bd73b69eff7f18e967e8912aa2a40a19a9f599a507fa805be6c13c24c4eae8c71306c239d517d42d4c041c942f508a0 + checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a languageName: node linkType: hard @@ -8398,13 +8508,6 @@ __metadata: languageName: node linkType: hard -"resolve-pkg-maps@npm:^1.0.0": - version: 1.0.0 - resolution: "resolve-pkg-maps@npm:1.0.0" - checksum: 1012afc566b3fdb190a6309cc37ef3b2dcc35dff5fa6683a9d00cd25c3247edfbc4691b91078c97adc82a29b77a2660c30d791d65dab4fc78bfc473f60289977 - languageName: node - linkType: hard - "resolve.exports@npm:^2.0.0": version: 2.0.2 resolution: "resolve.exports@npm:2.0.2" @@ -8592,14 +8695,14 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.2.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.5.3": - version: 7.5.4 - resolution: "semver@npm:7.5.4" +"semver@npm:^7.2.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.6.0 + resolution: "semver@npm:7.6.0" dependencies: lru-cache: ^6.0.0 bin: semver: bin/semver.js - checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + checksum: 7427f05b70786c696640edc29fdd4bc33b2acf3bbe1740b955029044f80575fc664e1a512e4113c3af21e767154a94b4aa214bf6cd6e42a1f6dba5914e0b208c languageName: node linkType: hard @@ -9286,6 +9389,15 @@ __metadata: languageName: node linkType: hard +"ts-api-utils@npm:^1.0.1": + version: 1.2.1 + resolution: "ts-api-utils@npm:1.2.1" + peerDependencies: + typescript: ">=4.2.0" + checksum: 17a2a4454d65a6765b9351304cfd516fcda3098f49d72bba90cb7f22b6a09a573b4a1993fd7de7d6b8046c408960c5f21a25e64ccb969d484b32ea3b3e19d6e4 + languageName: node + linkType: hard + "ts-jest-resolver@npm:^2.0.1": version: 2.0.1 resolution: "ts-jest-resolver@npm:2.0.1" @@ -9365,22 +9477,6 @@ __metadata: languageName: node linkType: hard -"tsx@npm:^4.7.0": - version: 4.7.0 - resolution: "tsx@npm:4.7.0" - dependencies: - esbuild: ~0.19.10 - fsevents: ~2.3.3 - get-tsconfig: ^4.7.2 - dependenciesMeta: - fsevents: - optional: true - bin: - tsx: dist/cli.mjs - checksum: a3a17fa8a40dbe0aff26fb2bc71a069e568152e0685b0bd9a31ea1091806274ba14882551433ed01efa7eae16f1aa965e2e47f3075ec1e914c42cf5dfce1f924 - languageName: node - linkType: hard - "tweetnacl@npm:^0.14.3": version: 0.14.5 resolution: "tweetnacl@npm:0.14.5" @@ -9842,13 +9938,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"word-wrap@npm:^1.2.3": - version: 1.2.5 - resolution: "word-wrap@npm:1.2.5" - checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb - languageName: node - linkType: hard - "wordwrap@npm:^1.0.0": version: 1.0.0 resolution: "wordwrap@npm:1.0.0" @@ -9955,7 +10044,7 @@ typescript@^4.8.3: languageName: node linkType: hard -"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": +"yargs-parser@npm:^20.2.3": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 @@ -9988,21 +10077,6 @@ typescript@^4.8.3: languageName: node linkType: hard -"yargs@npm:^16.2.0": - version: 16.2.0 - resolution: "yargs@npm:16.2.0" - dependencies: - cliui: ^7.0.2 - escalade: ^3.1.1 - get-caller-file: ^2.0.5 - require-directory: ^2.1.1 - string-width: ^4.2.0 - y18n: ^5.0.5 - yargs-parser: ^20.2.2 - checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 - languageName: node - linkType: hard - "yargs@npm:^17.3.1, yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" From 38436accc226cd966bb662601e39259618a0848b Mon Sep 17 00:00:00 2001 From: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> Date: Tue, 26 Mar 2024 14:45:37 +0100 Subject: [PATCH 095/130] refactor!: new data integrity (#847) * refactor: update to new jcs suites with createVerifyData implemented * feat: use jcs createVerifyData for known jcs suites --- packages/credentials/package.json | 8 +-- .../credentials/src/proofs/DataIntegrity.ts | 71 ++++++++++++------- packages/utils/package.json | 6 +- yarn.lock | 58 +++++++-------- 4 files changed, 82 insertions(+), 61 deletions(-) diff --git a/packages/credentials/package.json b/packages/credentials/package.json index b86931895..2edafbe3d 100644 --- a/packages/credentials/package.json +++ b/packages/credentials/package.json @@ -41,10 +41,10 @@ "@kiltprotocol/chain-helpers": "workspace:*", "@kiltprotocol/config": "workspace:*", "@kiltprotocol/did": "workspace:*", - "@kiltprotocol/eddsa-jcs-2022": "0.1.0-rc.1", - "@kiltprotocol/es256k-jcs-2023": "0.1.0-rc.1", - "@kiltprotocol/jcs-data-integrity-proofs-common": "0.1.0-rc.1", - "@kiltprotocol/sr25519-jcs-2023": "0.1.0-rc.1", + "@kiltprotocol/eddsa-jcs-2022": "0.1.0-rc.2", + "@kiltprotocol/es256k-jcs-2023": "0.1.0-rc.2", + "@kiltprotocol/jcs-data-integrity-proofs-common": "0.1.0-rc.2", + "@kiltprotocol/sr25519-jcs-2023": "0.1.0-rc.2", "@kiltprotocol/types": "workspace:*", "@kiltprotocol/utils": "workspace:*", "@polkadot/api": "^10.7.3", diff --git a/packages/credentials/src/proofs/DataIntegrity.ts b/packages/credentials/src/proofs/DataIntegrity.ts index 6503fc536..3ef9ffc86 100644 --- a/packages/credentials/src/proofs/DataIntegrity.ts +++ b/packages/credentials/src/proofs/DataIntegrity.ts @@ -17,6 +17,7 @@ import type { import { cryptosuite as eddsaSuite } from '@kiltprotocol/eddsa-jcs-2022' import { cryptosuite as ecdsaSuite } from '@kiltprotocol/es256k-jcs-2023' import { cryptosuite as sr25519Suite } from '@kiltprotocol/sr25519-jcs-2023' +import { createVerifyData as createVerifyDataJcs } from '@kiltprotocol/jcs-data-integrity-proofs-common' import { parse, resolve } from '@kiltprotocol/did' import type { @@ -65,6 +66,47 @@ export type DataIntegrityProof = { previousProof?: string } +const KNOWN_JCS_SUITES = [ + 'ecdsa-jcs-2019', + eddsaSuite.name, + ecdsaSuite.name, + sr25519Suite.name, +] + +async function createVerifyData({ + proof, + document, + suite, + options = {}, +}: { + proof: DataIntegrityProof + document: Record + suite: CryptoSuite + options?: Record +}): Promise { + if (suite.createVerifyData) { + return suite.createVerifyData({ proof, document }) + } + // jcs suites will not work with the default logic. Use createVerifyData from jcs common instead. + if (KNOWN_JCS_SUITES.includes(suite.name)) { + return createVerifyDataJcs({ document, proof }) + } + const proofOpts = { ...proof } + // @ts-expect-error property is non-optional but not part of canonized proof + delete proofOpts.proofValue + const canonizedProof = await suite.canonize( + { + // Adding the document context to the proof should NOT happen for a jcs proof according to the relevant specs; + // however both digitalbazaar/jsonld-signatures as well as digitalbazaar/data-integrity currently do enforce this. + '@context': document['@context'], + ...proofOpts, + }, + options + ) + const canonizedDoc = await suite.canonize(document, options) + return u8aConcat(sha256AsU8a(canonizedProof), sha256AsU8a(canonizedDoc)) +} + /** * Creates a data integrity proof for the provided document. * This function: @@ -146,21 +188,8 @@ export async function createProof( proof.previousProof = previousProof } - const canonizedProof = await suite.canonize({ - // TODO: It's unclear if this behaviour is desirable (see https://github.com/digitalbazaar/data-integrity/issues/19). - // Adding the document context to the proof should NOT happen for a jcs proof according to the relevant specs; - // however both digitalbazaar/jsonld-signatures as well as digitalbazaar/data-integrity currently do enforce this. - // Not sure how to proceed; implement to spec or allow interoperability. - '@context': document['@context'], - ...proof, - }) - const canonizedDoc = await suite.canonize(document) - - const combinedHashes = u8aConcat( - sha256AsU8a(canonizedProof), - sha256AsU8a(canonizedDoc) - ) - const signatureBytes = await signer.sign({ data: combinedHashes }) + const verifyData = await createVerifyData({ proof, document, suite }) + const signatureBytes = await signer.sign({ data: verifyData }) proof.proofValue = MULTIBASE_BASE58BTC_HEADER + base58Encode(signatureBytes) return { ...document, proof } @@ -422,17 +451,7 @@ export async function verifyProof( verificationMethod, }) // transform document & proof options - const proofOpts: Record = { - '@context': unsecuredDocument['@context'], - ...proof, - } - delete proofOpts.proofValue - const canonizedProof = await suite.canonize(proofOpts) - const canonizedDoc = await suite.canonize(unsecuredDocument) - const transformedData = u8aConcat( - sha256AsU8a(canonizedProof), - sha256AsU8a(canonizedDoc) - ) + const transformedData = await createVerifyData({ proof, document, suite }) // verify signature const verified = await verifier.verify({ data: transformedData, signature }) // verify challenge & domain diff --git a/packages/utils/package.json b/packages/utils/package.json index 6e88775e2..69ccc24a1 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -35,9 +35,9 @@ "typescript": "^4.8.3" }, "dependencies": { - "@kiltprotocol/eddsa-jcs-2022": "0.1.0-rc.1", - "@kiltprotocol/es256k-jcs-2023": "0.1.0-rc.1", - "@kiltprotocol/sr25519-jcs-2023": "0.1.0-rc.1", + "@kiltprotocol/eddsa-jcs-2022": "0.1.0-rc.2", + "@kiltprotocol/es256k-jcs-2023": "0.1.0-rc.2", + "@kiltprotocol/sr25519-jcs-2023": "0.1.0-rc.2", "@kiltprotocol/types": "workspace:*", "@polkadot/api": "^10.7.3", "@polkadot/keyring": "^12.0.0", diff --git a/yarn.lock b/yarn.lock index d8f576c2b..492ec69e3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2072,10 +2072,10 @@ __metadata: "@kiltprotocol/chain-helpers": "workspace:*" "@kiltprotocol/config": "workspace:*" "@kiltprotocol/did": "workspace:*" - "@kiltprotocol/eddsa-jcs-2022": 0.1.0-rc.1 - "@kiltprotocol/es256k-jcs-2023": 0.1.0-rc.1 - "@kiltprotocol/jcs-data-integrity-proofs-common": 0.1.0-rc.1 - "@kiltprotocol/sr25519-jcs-2023": 0.1.0-rc.1 + "@kiltprotocol/eddsa-jcs-2022": 0.1.0-rc.2 + "@kiltprotocol/es256k-jcs-2023": 0.1.0-rc.2 + "@kiltprotocol/jcs-data-integrity-proofs-common": 0.1.0-rc.2 + "@kiltprotocol/sr25519-jcs-2023": 0.1.0-rc.2 "@kiltprotocol/types": "workspace:*" "@kiltprotocol/utils": "workspace:*" "@polkadot/api": ^10.7.3 @@ -2120,35 +2120,37 @@ __metadata: languageName: unknown linkType: soft -"@kiltprotocol/eddsa-jcs-2022@npm:0.1.0-rc.1": - version: 0.1.0-rc.1 - resolution: "@kiltprotocol/eddsa-jcs-2022@npm:0.1.0-rc.1" +"@kiltprotocol/eddsa-jcs-2022@npm:0.1.0-rc.2": + version: 0.1.0-rc.2 + resolution: "@kiltprotocol/eddsa-jcs-2022@npm:0.1.0-rc.2" dependencies: - "@kiltprotocol/jcs-data-integrity-proofs-common": ^0.1.0-rc.1 + "@kiltprotocol/jcs-data-integrity-proofs-common": ^0.1.0-rc.2 "@noble/curves": ^1.0.0 "@scure/base": ^1.1.1 - checksum: c3127e4f98e37216752e52314aa3e173d32327819fc88ba69fdba7bfbb014ca61cf271eb01864274c1c25813edbf07975c8dc829708dc525f7425ea2a38ab7d9 + checksum: f0d5e6060f43e9e0a340cd942c2a4b8df1136d8fefc3256bb8a8ce48b8f8f7ca206b1aa5a491f839b108a66d541d98f480b1150ee8f59d5c637307f0898cc299 languageName: node linkType: hard -"@kiltprotocol/es256k-jcs-2023@npm:0.1.0-rc.1": - version: 0.1.0-rc.1 - resolution: "@kiltprotocol/es256k-jcs-2023@npm:0.1.0-rc.1" +"@kiltprotocol/es256k-jcs-2023@npm:0.1.0-rc.2": + version: 0.1.0-rc.2 + resolution: "@kiltprotocol/es256k-jcs-2023@npm:0.1.0-rc.2" dependencies: - "@kiltprotocol/jcs-data-integrity-proofs-common": ^0.1.0-rc.1 + "@kiltprotocol/jcs-data-integrity-proofs-common": ^0.1.0-rc.2 "@noble/curves": ^1.0.0 "@scure/base": ^1.1.1 - checksum: 843437a6806c10728fedc6cfa45f408aa9278263d64fce7c5057515d06fed74bc9ea702d932cc24543daff66a1b9935389b0a1453ea45d59111b46b59b19ad56 + checksum: 2dde304294d89d4d2ad24fcdd4c04707b8cb0b8e32f06f56ea21a1a5145313e9fcd8506b1eb41452df67d179f166861282c24beffb0371882cf646c907bcd720 languageName: node linkType: hard -"@kiltprotocol/jcs-data-integrity-proofs-common@npm:0.1.0-rc.1, @kiltprotocol/jcs-data-integrity-proofs-common@npm:^0.1.0-rc.1": - version: 0.1.0-rc.1 - resolution: "@kiltprotocol/jcs-data-integrity-proofs-common@npm:0.1.0-rc.1" +"@kiltprotocol/jcs-data-integrity-proofs-common@npm:0.1.0-rc.2, @kiltprotocol/jcs-data-integrity-proofs-common@npm:^0.1.0-rc.2": + version: 0.1.0-rc.2 + resolution: "@kiltprotocol/jcs-data-integrity-proofs-common@npm:0.1.0-rc.2" dependencies: + "@noble/hashes": ^1.3.0 canonicalize: ^2.0.0 - multibase: ^4.0.6 - checksum: fefc3c86bdb0a732f5851155cedf1743eedace4cf03fa5fbeb37f321c3cf87e9ac1704328e0d69d3cb80203e9afc07b6849907816c402bcd90b7c18b99177d40 + peerDependencies: + "@scure/base": ^1.1.0 + checksum: e7a219dad6f31c29f21c7b656c1f0c7669b634dedc053bb0088c68c2334a404f631827d3e1168546292d5b7b371b7f7761bab1e0242f0bd87d606210fb03ec5f languageName: node linkType: hard @@ -2211,14 +2213,14 @@ __metadata: languageName: unknown linkType: soft -"@kiltprotocol/sr25519-jcs-2023@npm:0.1.0-rc.1": - version: 0.1.0-rc.1 - resolution: "@kiltprotocol/sr25519-jcs-2023@npm:0.1.0-rc.1" +"@kiltprotocol/sr25519-jcs-2023@npm:0.1.0-rc.2": + version: 0.1.0-rc.2 + resolution: "@kiltprotocol/sr25519-jcs-2023@npm:0.1.0-rc.2" dependencies: - "@kiltprotocol/jcs-data-integrity-proofs-common": ^0.1.0-rc.1 + "@kiltprotocol/jcs-data-integrity-proofs-common": ^0.1.0-rc.2 "@polkadot/util-crypto": ^12.0.1 "@scure/base": ^1.1.1 - checksum: 8253c03b8c9daef61bc2155ee64894a568f4b591c941dc0bb668839475ed8d8fcf1048339710805e3046cb3ea603ed58c5e857887c4c67b602af098c2a92fb52 + checksum: f831ed34299a72502cd26be95a52e288944db0bd2f59b908a8954aa3c91cfae3d603cbcc89852dc606d57fdcb07a63570dbb3d9493b9461959dfa7e65bbe0fbe languageName: node linkType: hard @@ -2250,9 +2252,9 @@ __metadata: version: 0.0.0-use.local resolution: "@kiltprotocol/utils@workspace:packages/utils" dependencies: - "@kiltprotocol/eddsa-jcs-2022": 0.1.0-rc.1 - "@kiltprotocol/es256k-jcs-2023": 0.1.0-rc.1 - "@kiltprotocol/sr25519-jcs-2023": 0.1.0-rc.1 + "@kiltprotocol/eddsa-jcs-2022": 0.1.0-rc.2 + "@kiltprotocol/es256k-jcs-2023": 0.1.0-rc.2 + "@kiltprotocol/sr25519-jcs-2023": 0.1.0-rc.2 "@kiltprotocol/types": "workspace:*" "@polkadot/api": ^10.7.3 "@polkadot/keyring": ^12.0.0 @@ -2290,7 +2292,7 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.3.0": +"@noble/hashes@npm:1.3.0, @noble/hashes@npm:^1.3.0": version: 1.3.0 resolution: "@noble/hashes@npm:1.3.0" checksum: d7ddb6d7c60f1ce1f87facbbef5b724cdea536fc9e7f59ae96e0fc9de96c8f1a2ae2bdedbce10f7dcc621338dfef8533daa73c873f2b5c87fa1a4e05a95c2e2e From f0fbdf263a6ca30f13953893b757e737e304115c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Mar 2024 14:49:52 +0100 Subject: [PATCH 096/130] chore(deps): bump @babel/traverse from 7.22.10 to 7.23.6 (#826) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.22.10 to 7.23.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.6/packages/babel-traverse) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> --- yarn.lock | 117 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 106 insertions(+), 11 deletions(-) diff --git a/yarn.lock b/yarn.lock index 492ec69e3..4e4ce009b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -41,6 +41,16 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/code-frame@npm:7.23.5" + dependencies: + "@babel/highlight": ^7.23.4 + chalk: ^2.4.2 + checksum: d90981fdf56a2824a9b14d19a4c0e8db93633fd488c772624b4e83e0ceac6039a27cd298a247c3214faa952bf803ba23696172ae7e7235f3b97f43ba278c569a + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.1, @babel/compat-data@npm:^7.22.9": version: 7.22.9 resolution: "@babel/compat-data@npm:7.22.9" @@ -83,6 +93,18 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/generator@npm:7.23.6" + dependencies: + "@babel/types": ^7.23.6 + "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 + jsesc: ^2.5.1 + checksum: 1a1a1c4eac210f174cd108d479464d053930a812798e09fee069377de39a893422df5b5b146199ead7239ae6d3a04697b45fc9ac6e38e0f6b76374390f91fc6c + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" @@ -167,6 +189,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-environment-visitor@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 + languageName: node + linkType: hard + "@babel/helper-explode-assignable-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-explode-assignable-expression@npm:7.18.6" @@ -176,7 +205,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0, @babel/helper-function-name@npm:^7.22.5": +"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0": version: 7.22.5 resolution: "@babel/helper-function-name@npm:7.22.5" dependencies: @@ -186,6 +215,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-function-name@npm:7.23.0" + dependencies: + "@babel/template": ^7.22.15 + "@babel/types": ^7.23.0 + checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10 + languageName: node + linkType: hard + "@babel/helper-hoist-variables@npm:^7.18.6, @babel/helper-hoist-variables@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-hoist-variables@npm:7.22.5" @@ -305,6 +344,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/helper-string-parser@npm:7.23.4" + checksum: c0641144cf1a7e7dc93f3d5f16d5327465b6cf5d036b48be61ecba41e1eece161b48f46b7f960951b67f8c3533ce506b16dece576baef4d8b3b49f8c65410f90 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.19.1, @babel/helper-validator-identifier@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-validator-identifier@npm:7.22.5" @@ -312,6 +358,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.18.6, @babel/helper-validator-option@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-validator-option@npm:7.22.5" @@ -353,6 +406,17 @@ __metadata: languageName: node linkType: hard +"@babel/highlight@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/highlight@npm:7.23.4" + dependencies: + "@babel/helper-validator-identifier": ^7.22.20 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + checksum: 643acecdc235f87d925979a979b539a5d7d1f31ae7db8d89047269082694122d11aa85351304c9c978ceeb6d250591ccadb06c366f358ccee08bb9c122476b89 + languageName: node + linkType: hard + "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.22.10, @babel/parser@npm:^7.22.5": version: 7.22.10 resolution: "@babel/parser@npm:7.22.10" @@ -362,6 +426,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/parser@npm:7.23.6" + bin: + parser: ./bin/babel-parser.js + checksum: 140801c43731a6c41fd193f5c02bc71fd647a0360ca616b23d2db8be4b9739b9f951a03fc7c2db4f9b9214f4b27c1074db0f18bc3fa653783082d5af7c8860d5 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" @@ -1282,21 +1355,32 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/template@npm:7.22.15" + dependencies: + "@babel/code-frame": ^7.22.13 + "@babel/parser": ^7.22.15 + "@babel/types": ^7.22.15 + checksum: 1f3e7dcd6c44f5904c184b3f7fe280394b191f2fed819919ffa1e529c259d5b197da8981b6ca491c235aee8dbad4a50b7e31304aa531271cb823a4a24a0dd8fd + languageName: node + linkType: hard + "@babel/traverse@npm:^7.19.0, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.22.10": - version: 7.22.10 - resolution: "@babel/traverse@npm:7.22.10" + version: 7.23.6 + resolution: "@babel/traverse@npm:7.23.6" dependencies: - "@babel/code-frame": ^7.22.10 - "@babel/generator": ^7.22.10 - "@babel/helper-environment-visitor": ^7.22.5 - "@babel/helper-function-name": ^7.22.5 + "@babel/code-frame": ^7.23.5 + "@babel/generator": ^7.23.6 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 "@babel/helper-hoist-variables": ^7.22.5 "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/parser": ^7.22.10 - "@babel/types": ^7.22.10 - debug: ^4.1.0 + "@babel/parser": ^7.23.6 + "@babel/types": ^7.23.6 + debug: ^4.3.1 globals: ^11.1.0 - checksum: 9f7b358563bfb0f57ac4ed639f50e5c29a36b821a1ce1eea0c7db084f5b925e3275846d0de63bde01ca407c85d9804e0efbe370d92cd2baaafde3bd13b0f4cdb + checksum: 48f2eac0e86b6cb60dab13a5ea6a26ba45c450262fccdffc334c01089e75935f7546be195e260e97f6e43cea419862eda095018531a2718fef8189153d479f88 languageName: node linkType: hard @@ -1311,6 +1395,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.22.15, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/types@npm:7.23.6" + dependencies: + "@babel/helper-string-parser": ^7.23.4 + "@babel/helper-validator-identifier": ^7.22.20 + to-fast-properties: ^2.0.0 + checksum: 68187dbec0d637f79bc96263ac95ec8b06d424396678e7e225492be866414ce28ebc918a75354d4c28659be6efe30020b4f0f6df81cc418a2d30645b690a8de0 + languageName: node + linkType: hard + "@balena/dockerignore@npm:^1.0.2": version: 1.0.2 resolution: "@balena/dockerignore@npm:1.0.2" From 4aa68dd90693d41225df83ca7d644dfde5a868c4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 26 Mar 2024 15:36:26 +0100 Subject: [PATCH 097/130] chore(deps): update yarn to v4 (#804) * chore(deps): update yarn to v4 * chore: apply migrations to lock file and plugins * chore: fix scripts * ci: update workflows --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Raphael Flechtner --- .github/workflows/tests-polkadot-deps.yml | 4 +- .github/workflows/tests.yml | 2 + .../@yarnpkg/plugin-interactive-tools.cjs | 363 - .../@yarnpkg/plugin-workspace-tools.cjs | 28 - .yarn/releases/yarn-3.3.1.cjs | 823 --- .yarn/releases/yarn-4.1.1.cjs | 893 +++ .yarnrc.yml | 8 +- package.json | 6 +- yarn.lock | 6221 ++++++++--------- 9 files changed, 3964 insertions(+), 4384 deletions(-) delete mode 100644 .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs delete mode 100644 .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs delete mode 100755 .yarn/releases/yarn-3.3.1.cjs create mode 100755 .yarn/releases/yarn-4.1.1.cjs diff --git a/.github/workflows/tests-polkadot-deps.yml b/.github/workflows/tests-polkadot-deps.yml index 14cd09c03..b14047507 100644 --- a/.github/workflows/tests-polkadot-deps.yml +++ b/.github/workflows/tests-polkadot-deps.yml @@ -93,7 +93,7 @@ jobs: steps: - uses: actions/download-artifact@v3 with: - name: build-16.x + name: build-20.x - name: unzip run: unzip build.zip -d . @@ -137,7 +137,7 @@ jobs: steps: - uses: actions/download-artifact@v3 with: - name: deps-16.x + name: deps-20.x - name: set dependencies env run: | echo 'DEPS<> $GITHUB_ENV diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 837de26ee..54958f5a1 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -100,6 +100,8 @@ jobs: run: unzip build.zip -d . - name: unit tests run: yarn test:ci + env: + YARN_IGNORE_NODE: 1 cache_imgs: runs-on: ubuntu-latest diff --git a/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs b/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs deleted file mode 100644 index 527659ff9..000000000 --- a/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +++ /dev/null @@ -1,363 +0,0 @@ -/* eslint-disable */ -//prettier-ignore -module.exports = { -name: "@yarnpkg/plugin-interactive-tools", -factory: function (require) { -var plugin=(()=>{var PR=Object.create,J1=Object.defineProperty,MR=Object.defineProperties,FR=Object.getOwnPropertyDescriptor,LR=Object.getOwnPropertyDescriptors,RR=Object.getOwnPropertyNames,hh=Object.getOwnPropertySymbols,NR=Object.getPrototypeOf,Z4=Object.prototype.hasOwnProperty,aD=Object.prototype.propertyIsEnumerable;var dD=(i,u,f)=>u in i?J1(i,u,{enumerable:!0,configurable:!0,writable:!0,value:f}):i[u]=f,dt=(i,u)=>{for(var f in u||(u={}))Z4.call(u,f)&&dD(i,f,u[f]);if(hh)for(var f of hh(u))aD.call(u,f)&&dD(i,f,u[f]);return i},zn=(i,u)=>MR(i,LR(u)),BR=i=>J1(i,"__esModule",{value:!0});var Si=(i,u)=>{var f={};for(var c in i)Z4.call(i,c)&&u.indexOf(c)<0&&(f[c]=i[c]);if(i!=null&&hh)for(var c of hh(i))u.indexOf(c)<0&&aD.call(i,c)&&(f[c]=i[c]);return f};var Me=(i,u)=>()=>(u||i((u={exports:{}}).exports,u),u.exports),jR=(i,u)=>{for(var f in u)J1(i,f,{get:u[f],enumerable:!0})},UR=(i,u,f)=>{if(u&&typeof u=="object"||typeof u=="function")for(let c of RR(u))!Z4.call(i,c)&&c!=="default"&&J1(i,c,{get:()=>u[c],enumerable:!(f=FR(u,c))||f.enumerable});return i},Er=i=>UR(BR(J1(i!=null?PR(NR(i)):{},"default",i&&i.__esModule&&"default"in i?{get:()=>i.default,enumerable:!0}:{value:i,enumerable:!0})),i);var ey=Me((YH,pD)=>{"use strict";var hD=Object.getOwnPropertySymbols,qR=Object.prototype.hasOwnProperty,zR=Object.prototype.propertyIsEnumerable;function WR(i){if(i==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(i)}function HR(){try{if(!Object.assign)return!1;var i=new String("abc");if(i[5]="de",Object.getOwnPropertyNames(i)[0]==="5")return!1;for(var u={},f=0;f<10;f++)u["_"+String.fromCharCode(f)]=f;var c=Object.getOwnPropertyNames(u).map(function(t){return u[t]});if(c.join("")!=="0123456789")return!1;var g={};return"abcdefghijklmnopqrst".split("").forEach(function(t){g[t]=t}),Object.keys(Object.assign({},g)).join("")==="abcdefghijklmnopqrst"}catch(t){return!1}}pD.exports=HR()?Object.assign:function(i,u){for(var f,c=WR(i),g,t=1;t{"use strict";var ty=ey(),as=typeof Symbol=="function"&&Symbol.for,Q1=as?Symbol.for("react.element"):60103,bR=as?Symbol.for("react.portal"):60106,GR=as?Symbol.for("react.fragment"):60107,VR=as?Symbol.for("react.strict_mode"):60108,YR=as?Symbol.for("react.profiler"):60114,$R=as?Symbol.for("react.provider"):60109,KR=as?Symbol.for("react.context"):60110,XR=as?Symbol.for("react.forward_ref"):60112,JR=as?Symbol.for("react.suspense"):60113,QR=as?Symbol.for("react.memo"):60115,ZR=as?Symbol.for("react.lazy"):60116,mD=typeof Symbol=="function"&&Symbol.iterator;function Z1(i){for(var u="https://reactjs.org/docs/error-decoder.html?invariant="+i,f=1;fmh.length&&mh.push(i)}function uy(i,u,f,c){var g=typeof i;(g==="undefined"||g==="boolean")&&(i=null);var t=!1;if(i===null)t=!0;else switch(g){case"string":case"number":t=!0;break;case"object":switch(i.$$typeof){case Q1:case bR:t=!0}}if(t)return f(c,i,u===""?"."+sy(i,0):u),1;if(t=0,u=u===""?".":u+":",Array.isArray(i))for(var C=0;C{"use strict";kD.exports=xD()});var AD=Me((ga,e2)=>{(function(){var i,u="4.17.21",f=200,c="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",g="Expected a function",t="Invalid `variable` option passed into `_.template`",C="__lodash_hash_undefined__",A=500,x="__lodash_placeholder__",D=1,L=2,N=4,j=1,$=2,h=1,re=2,ce=4,Q=8,oe=16,Se=32,me=64,De=128,J=256,Te=512,Oe=30,Le="...",ot=800,ct=16,Ue=1,be=2,At=3,Ot=1/0,Nt=9007199254740991,Je=17976931348623157e292,V=0/0,ne=4294967295,ge=ne-1,Z=ne>>>1,Ae=[["ary",De],["bind",h],["bindKey",re],["curry",Q],["curryRight",oe],["flip",Te],["partial",Se],["partialRight",me],["rearg",J]],at="[object Arguments]",it="[object Array]",Ft="[object AsyncFunction]",jt="[object Boolean]",hn="[object Date]",Un="[object DOMException]",Jt="[object Error]",Yt="[object Function]",cr="[object GeneratorFunction]",w="[object Map]",pt="[object Number]",Mn="[object Null]",Bn="[object Object]",Xn="[object Promise]",vr="[object Proxy]",gr="[object RegExp]",r0="[object Set]",Ci="[object String]",yo="[object Symbol]",Ds="[object Undefined]",Mu="[object WeakMap]",Gf="[object WeakSet]",iu="[object ArrayBuffer]",ou="[object DataView]",ol="[object Float32Array]",ul="[object Float64Array]",Es="[object Int8Array]",Uo="[object Int16Array]",sl="[object Int32Array]",Ss="[object Uint8Array]",Cs="[object Uint8ClampedArray]",Ti="[object Uint16Array]",Fu="[object Uint32Array]",ll=/\b__p \+= '';/g,fl=/\b(__p \+=) '' \+/g,cl=/(__e\(.*?\)|\b__t\)) \+\n'';/g,al=/&(?:amp|lt|gt|quot|#39);/g,Ui=/[&<>"']/g,Mr=RegExp(al.source),Ac=RegExp(Ui.source),of=/<%-([\s\S]+?)%>/g,Ts=/<%([\s\S]+?)%>/g,xs=/<%=([\s\S]+?)%>/g,dl=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,qi=/^\w*$/,qo=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,kr=/[\\^$.*+?()[\]{}|]/g,Fr=RegExp(kr.source),si=/^\s+/,H0=/\s/,b0=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Bt=/\{\n\/\* \[wrapped with (.+)\] \*/,Lu=/,? & /,c0=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Ru=/[()=,{}\[\]\/\s]/,ks=/\\(\\)?/g,As=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,uu=/\w*$/,wo=/^[-+]0x[0-9a-f]+$/i,zo=/^0b[01]+$/i,Os=/^\[object .+?Constructor\]$/,Is=/^0o[0-7]+$/i,uf=/^(?:0|[1-9]\d*)$/,_n=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Nu=/($^)/,Wo=/['\n\r\u2028\u2029\\]/g,su="\\ud800-\\udfff",Ps="\\u0300-\\u036f",pl="\\ufe20-\\ufe2f",Vf="\\u20d0-\\u20ff",hl=Ps+pl+Vf,Bu="\\u2700-\\u27bf",ju="a-z\\xdf-\\xf6\\xf8-\\xff",sf="\\xac\\xb1\\xd7\\xf7",ro="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Ms="\\u2000-\\u206f",ml=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Uu="A-Z\\xc0-\\xd6\\xd8-\\xde",G0="\\ufe0e\\ufe0f",Fs=sf+ro+Ms+ml,tt="['\u2019]",zi="["+su+"]",lu="["+Fs+"]",Ho="["+hl+"]",O0="\\d+",vl="["+Bu+"]",gl="["+ju+"]",fu="[^"+su+Fs+O0+Bu+ju+Uu+"]",_l="\\ud83c[\\udffb-\\udfff]",Sn="(?:"+Ho+"|"+_l+")",gt="[^"+su+"]",en="(?:\\ud83c[\\udde6-\\uddff]){2}",I0="[\\ud800-\\udbff][\\udc00-\\udfff]",li="["+Uu+"]",qu="\\u200d",Wi="(?:"+gl+"|"+fu+")",zu="(?:"+li+"|"+fu+")",Wu="(?:"+tt+"(?:d|ll|m|re|s|t|ve))?",Ls="(?:"+tt+"(?:D|LL|M|RE|S|T|VE))?",fi=Sn+"?",e0="["+G0+"]?",io="(?:"+qu+"(?:"+[gt,en,I0].join("|")+")"+e0+fi+")*",D0="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Do="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",i0=e0+fi+io,Rs="(?:"+[vl,en,I0].join("|")+")"+i0,a0="(?:"+[gt+Ho+"?",Ho,en,I0,zi].join("|")+")",Hu=RegExp(tt,"g"),V0=RegExp(Ho,"g"),bu=RegExp(_l+"(?="+_l+")|"+a0+i0,"g"),Ns=RegExp([li+"?"+gl+"+"+Wu+"(?="+[lu,li,"$"].join("|")+")",zu+"+"+Ls+"(?="+[lu,li+Wi,"$"].join("|")+")",li+"?"+Wi+"+"+Wu,li+"+"+Ls,Do,D0,O0,Rs].join("|"),"g"),bo=RegExp("["+qu+su+hl+G0+"]"),P0=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ln=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],lf=-1,nr={};nr[ol]=nr[ul]=nr[Es]=nr[Uo]=nr[sl]=nr[Ss]=nr[Cs]=nr[Ti]=nr[Fu]=!0,nr[at]=nr[it]=nr[iu]=nr[jt]=nr[ou]=nr[hn]=nr[Jt]=nr[Yt]=nr[w]=nr[pt]=nr[Bn]=nr[gr]=nr[r0]=nr[Ci]=nr[Mu]=!1;var rr={};rr[at]=rr[it]=rr[iu]=rr[ou]=rr[jt]=rr[hn]=rr[ol]=rr[ul]=rr[Es]=rr[Uo]=rr[sl]=rr[w]=rr[pt]=rr[Bn]=rr[gr]=rr[r0]=rr[Ci]=rr[yo]=rr[Ss]=rr[Cs]=rr[Ti]=rr[Fu]=!0,rr[Jt]=rr[Yt]=rr[Mu]=!1;var Go={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},Gu={"&":"&","<":"<",">":">",'"':""","'":"'"},yl={"&":"&","<":"<",">":">",""":'"',"'":"'"},cu={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Bs=parseFloat,Vu=parseInt,M0=typeof global=="object"&&global&&global.Object===Object&&global,au=typeof self=="object"&&self&&self.Object===Object&&self,Lr=M0||au||Function("return this")(),F=typeof ga=="object"&&ga&&!ga.nodeType&&ga,R=F&&typeof e2=="object"&&e2&&!e2.nodeType&&e2,U=R&&R.exports===F,H=U&&M0.process,fe=function(){try{var ae=R&&R.require&&R.require("util").types;return ae||H&&H.binding&&H.binding("util")}catch(Be){}}(),ue=fe&&fe.isArrayBuffer,de=fe&&fe.isDate,W=fe&&fe.isMap,ve=fe&&fe.isRegExp,Fe=fe&&fe.isSet,Ge=fe&&fe.isTypedArray;function K(ae,Be,Ie){switch(Ie.length){case 0:return ae.call(Be);case 1:return ae.call(Be,Ie[0]);case 2:return ae.call(Be,Ie[0],Ie[1]);case 3:return ae.call(Be,Ie[0],Ie[1],Ie[2])}return ae.apply(Be,Ie)}function xe(ae,Be,Ie,ht){for(var mt=-1,wn=ae==null?0:ae.length;++mt-1}function wt(ae,Be,Ie){for(var ht=-1,mt=ae==null?0:ae.length;++ht-1;);return Ie}function js(ae,Be){for(var Ie=ae.length;Ie--&&Qe(Be,ae[Ie],0)>-1;);return Ie}function Dl(ae,Be){for(var Ie=ae.length,ht=0;Ie--;)ae[Ie]===Be&&++ht;return ht}var du=Cn(Go),Yu=Cn(Gu);function Us(ae){return"\\"+cu[ae]}function oo(ae,Be){return ae==null?i:ae[Be]}function Hi(ae){return bo.test(ae)}function qs(ae){return P0.test(ae)}function F0(ae){for(var Be,Ie=[];!(Be=ae.next()).done;)Ie.push(Be.value);return Ie}function Gr(ae){var Be=-1,Ie=Array(ae.size);return ae.forEach(function(ht,mt){Ie[++Be]=[mt,ht]}),Ie}function ir(ae,Be){return function(Ie){return ae(Be(Ie))}}function L0(ae,Be){for(var Ie=-1,ht=ae.length,mt=0,wn=[];++Ie-1}function Ju(a,p){var E=this.__data__,I=hf(E,a);return I<0?(++this.size,E.push([a,p])):E[I][1]=p,this}Z0.prototype.clear=df,Z0.prototype.delete=Ba,Z0.prototype.get=Oc,Z0.prototype.has=mu,Z0.prototype.set=Ju;function ei(a){var p=-1,E=a==null?0:a.length;for(this.clear();++p=p?a:p)),a}function vi(a,p,E,I,B,G){var te,se=p&D,Ee=p&L,$e=p&N;if(E&&(te=B?E(a,I,B,G):E(a)),te!==i)return te;if(!Jr(a))return a;var Ke=On(a);if(Ke){if(te=f1(a),!se)return Xr(a,te)}else{var nt=U0(a),Ct=nt==Yt||nt==cr;if(Eu(a))return Od(a,se);if(nt==Bn||nt==at||Ct&&!B){if(te=Ee||Ct?{}:zd(a),!se)return Ee?Zu(a,Wa(te,a)):j0(a,mf(te,a))}else{if(!rr[nt])return B?a:{};te=Wd(a,nt,se)}}G||(G=new co);var Gt=G.get(a);if(Gt)return Gt;G.set(a,te),kp(a)?a.forEach(function(dn){te.add(vi(dn,p,E,dn,a,G))}):Tp(a)&&a.forEach(function(dn,Yn){te.set(Yn,vi(dn,p,E,Yn,a,G))});var an=$e?Ee?Dn:r1:Ee?Yi:q0,qn=Ke?i:an(a);return je(qn||a,function(dn,Yn){qn&&(Yn=dn,dn=a[Yn]),xl(te,Yn,vi(dn,p,E,Yn,a,G))}),te}function Xf(a){var p=q0(a);return function(E){return Rc(E,a,p)}}function Rc(a,p,E){var I=E.length;if(a==null)return!I;for(a=$t(a);I--;){var B=E[I],G=p[B],te=a[B];if(te===i&&!(B in a)||!G(te))return!1}return!0}function Jf(a,p,E){if(typeof a!="function")throw new Yr(g);return wf(function(){a.apply(i,E)},p)}function ao(a,p,E,I){var B=-1,G=xt,te=!0,se=a.length,Ee=[],$e=p.length;if(!se)return Ee;E&&(p=lt(p,qr(E))),I?(G=wt,te=!1):p.length>=f&&(G=So,te=!1,p=new vu(p));e:for(;++BB?0:B+E),I=I===i||I>B?B:jn(I),I<0&&(I+=B),I=E>I?0:Ip(I);E0&&E(se)?p>1?k0(se,p-1,E,I,B):Rt(B,se):I||(B[B.length]=se)}return B}var v=ec(),m=ec(!0);function S(a,p){return a&&v(a,p,q0)}function O(a,p){return a&&m(a,p,q0)}function M(a,p){return st(p,function(E){return rs(a[E])})}function b(a,p){p=Gs(p,a);for(var E=0,I=p.length;a!=null&&Ep}function ut(a,p){return a!=null&&or.call(a,p)}function In(a,p){return a!=null&&p in $t(a)}function A0(a,p,E){return a>=kn(p,E)&&a=120&&Ke.length>=120)?new vu(te&&Ke):i}Ke=a[0];var nt=-1,Ct=se[0];e:for(;++nt-1;)se!==a&&C0.call(se,Ee,1),C0.call(a,Ee,1);return a}function jc(a,p){for(var E=a?p.length:0,I=E-1;E--;){var B=p[E];if(E==I||B!==G){var G=B;es(B)?C0.call(a,B,1):$a(a,B)}}return a}function Ga(a,p){return a+hu(Ai()*(p-a+1))}function Lm(a,p,E,I){for(var B=-1,G=wr(B0((p-a)/(E||1)),0),te=Ie(G);G--;)te[I?G:++B]=a,a+=E;return te}function Va(a,p){var E="";if(!a||p<1||p>Nt)return E;do p%2&&(E+=a),p=hu(p/2),p&&(a+=a);while(p);return E}function Wn(a,p){return m1(Gd(a,p,$i),a+"")}function wd(a){return Fc(Ef(a))}function Dd(a,p){var E=Ef(a);return Yc(E,mi(p,0,E.length))}function Ol(a,p,E,I){if(!Jr(a))return a;p=Gs(p,a);for(var B=-1,G=p.length,te=G-1,se=a;se!=null&&++BB?0:B+p),E=E>B?B:E,E<0&&(E+=B),B=p>E?0:E-p>>>0,p>>>=0;for(var G=Ie(B);++I>>1,te=a[G];te!==null&&!mo(te)&&(E?te<=p:te=f){var $e=p?null:bm(a);if($e)return Y0($e);te=!1,B=So,Ee=new vu}else Ee=p?[]:se;e:for(;++I=I?a:Oo(a,p,E)}var Ad=pu||function(a){return Lr.clearTimeout(a)};function Od(a,p){if(p)return a.slice();var E=a.length,I=Nr?Nr(E):new a.constructor(E);return a.copy(I),I}function Qa(a){var p=new a.constructor(a.byteLength);return new R0(p).set(new R0(a)),p}function jm(a,p){var E=p?Qa(a.buffer):a.buffer;return new a.constructor(E,a.byteOffset,a.byteLength)}function Um(a){var p=new a.constructor(a.source,uu.exec(a));return p.lastIndex=a.lastIndex,p}function qm(a){return Wr?$t(Wr.call(a)):{}}function Id(a,p){var E=p?Qa(a.buffer):a.buffer;return new a.constructor(E,a.byteOffset,a.length)}function Pd(a,p){if(a!==p){var E=a!==i,I=a===null,B=a===a,G=mo(a),te=p!==i,se=p===null,Ee=p===p,$e=mo(p);if(!se&&!$e&&!G&&a>p||G&&te&&Ee&&!se&&!$e||I&&te&&Ee||!E&&Ee||!B)return 1;if(!I&&!G&&!$e&&a=se)return Ee;var $e=E[I];return Ee*($e=="desc"?-1:1)}}return a.index-p.index}function gf(a,p,E,I){for(var B=-1,G=a.length,te=E.length,se=-1,Ee=p.length,$e=wr(G-te,0),Ke=Ie(Ee+$e),nt=!I;++se1?E[B-1]:i,te=B>2?E[2]:i;for(G=a.length>3&&typeof G=="function"?(B--,G):i,te&&Ii(E[0],E[1],te)&&(G=B<3?i:G,B=1),p=$t(p);++I-1?B[G?p[te]:te]:i}}function Rd(a){return yu(function(p){var E=p.length,I=E,B=Qn.prototype.thru;for(a&&p.reverse();I--;){var G=p[I];if(typeof G!="function")throw new Yr(g);if(B&&!te&&Gc(G)=="wrapper")var te=new Qn([],!0)}for(I=te?I:E;++I1&&er.reverse(),Ke&&Eese))return!1;var $e=G.get(a),Ke=G.get(p);if($e&&Ke)return $e==p&&Ke==a;var nt=-1,Ct=!0,Gt=E&$?new vu:i;for(G.set(a,p),G.set(p,a);++nt1?"& ":"")+p[I],p=p.join(E>2?", ":" "),a.replace(b0,`{ -/* [wrapped with `+p+`] */ -`)}function Xm(a){return On(a)||Ll(a)||!!(di&&a&&a[di])}function es(a,p){var E=typeof a;return p=p==null?Nt:p,!!p&&(E=="number"||E!="symbol"&&uf.test(a))&&a>-1&&a%1==0&&a0){if(++p>=ot)return arguments[0]}else p=0;return a.apply(i,arguments)}}function Yc(a,p){var E=-1,I=a.length,B=I-1;for(p=p===i?I:p;++E1?a[p-1]:i;return E=typeof E=="function"?(a.pop(),E):i,sp(a,E)});function fp(a){var p=z(a);return p.__chain__=!0,p}function cp(a,p){return p(a),a}function Kc(a,p){return p(a)}var Wv=yu(function(a){var p=a.length,E=p?a[0]:0,I=this.__wrapped__,B=function(G){return Hs(G,a)};return p>1||this.__actions__.length||!(I instanceof nn)||!es(E)?this.thru(B):(I=I.slice(E,+E+(p?1:0)),I.__actions__.push({func:Kc,args:[B],thisArg:i}),new Qn(I,this.__chain__).thru(function(G){return p&&!G.length&&G.push(i),G}))});function Hv(){return fp(this)}function bv(){return new Qn(this.value(),this.__chain__)}function Gv(){this.__values__===i&&(this.__values__=Op(this.value()));var a=this.__index__>=this.__values__.length,p=a?i:this.__values__[this.__index__++];return{done:a,value:p}}function Vv(){return this}function Yv(a){for(var p,E=this;E instanceof Or;){var I=Jd(E);I.__index__=0,I.__values__=i,p?B.__wrapped__=I:p=I;var B=I;E=E.__wrapped__}return B.__wrapped__=a,p}function Ml(){var a=this.__wrapped__;if(a instanceof nn){var p=a;return this.__actions__.length&&(p=new nn(this)),p=p.reverse(),p.__actions__.push({func:Kc,args:[g1],thisArg:i}),new Qn(p,this.__chain__)}return this.thru(g1)}function Fl(){return xd(this.__wrapped__,this.__actions__)}var Xc=_f(function(a,p,E){or.call(a,E)?++a[E]:ti(a,E,1)});function $v(a,p,E){var I=On(a)?rt:Nc;return E&&Ii(a,p,E)&&(p=i),I(a,cn(p,3))}function Kv(a,p){var E=On(a)?st:Qf;return E(a,cn(p,3))}var Xv=Ld(Qd),D1=Ld($c);function Jv(a,p){return k0(Jc(a,p),1)}function Qv(a,p){return k0(Jc(a,p),Ot)}function ap(a,p,E){return E=E===i?1:jn(E),k0(Jc(a,p),E)}function dp(a,p){var E=On(a)?je:$o;return E(a,cn(p,3))}function pp(a,p){var E=On(a)?Xe:kl;return E(a,cn(p,3))}var Zv=_f(function(a,p,E){or.call(a,E)?a[E].push(p):ti(a,E,[p])});function eg(a,p,E,I){a=Vi(a)?a:Ef(a),E=E&&!I?jn(E):0;var B=a.length;return E<0&&(E=wr(B+E,0)),ia(a)?E<=B&&a.indexOf(p,E)>-1:!!B&&Qe(a,p,E)>-1}var tg=Wn(function(a,p,E){var I=-1,B=typeof p=="function",G=Vi(a)?Ie(a.length):[];return $o(a,function(te){G[++I]=B?K(p,te,E):po(te,p,E)}),G}),hp=_f(function(a,p,E){ti(a,E,p)});function Jc(a,p){var E=On(a)?lt:vd;return E(a,cn(p,3))}function ng(a,p,E,I){return a==null?[]:(On(p)||(p=p==null?[]:[p]),E=I?i:E,On(E)||(E=E==null?[]:[E]),Oi(a,p,E))}var rg=_f(function(a,p,E){a[E?0:1].push(p)},function(){return[[],[]]});function mp(a,p,E){var I=On(a)?yn:bn,B=arguments.length<3;return I(a,cn(p,4),E,B,$o)}function ig(a,p,E){var I=On(a)?sn:bn,B=arguments.length<3;return I(a,cn(p,4),E,B,kl)}function og(a,p){var E=On(a)?st:Qf;return E(a,Zc(cn(p,3)))}function ug(a){var p=On(a)?Fc:wd;return p(a)}function sg(a,p,E){(E?Ii(a,p,E):p===i)?p=1:p=jn(p);var I=On(a)?Lc:Dd;return I(a,p)}function lg(a){var p=On(a)?Kf:Ao;return p(a)}function E1(a){if(a==null)return 0;if(Vi(a))return ia(a)?Rr(a):a.length;var p=U0(a);return p==w||p==r0?a.size:Zf(a).length}function fg(a,p,E){var I=On(a)?ar:Nm;return E&&Ii(a,p,E)&&(p=i),I(a,cn(p,3))}var cg=Wn(function(a,p){if(a==null)return[];var E=p.length;return E>1&&Ii(a,p[0],p[1])?p=[]:E>2&&Ii(p[0],p[1],p[2])&&(p=[p[0]]),Oi(a,k0(p,1),[])}),rc=Sl||function(){return Lr.Date.now()};function ag(a,p){if(typeof p!="function")throw new Yr(g);return a=jn(a),function(){if(--a<1)return p.apply(this,arguments)}}function vp(a,p,E){return p=E?i:p,p=a&&p==null?a.length:p,Lt(a,De,i,i,i,i,p)}function gp(a,p){var E;if(typeof p!="function")throw new Yr(g);return a=jn(a),function(){return--a>0&&(E=p.apply(this,arguments)),a<=1&&(p=i),E}}var S1=Wn(function(a,p,E){var I=h;if(E.length){var B=L0(E,An(S1));I|=Se}return Lt(a,I,p,E,B)}),_p=Wn(function(a,p,E){var I=h|re;if(E.length){var B=L0(E,An(_p));I|=Se}return Lt(p,I,a,E,B)});function C1(a,p,E){p=E?i:p;var I=Lt(a,Q,i,i,i,i,i,p);return I.placeholder=C1.placeholder,I}function yp(a,p,E){p=E?i:p;var I=Lt(a,oe,i,i,i,i,i,p);return I.placeholder=yp.placeholder,I}function wp(a,p,E){var I,B,G,te,se,Ee,$e=0,Ke=!1,nt=!1,Ct=!0;if(typeof a!="function")throw new Yr(g);p=Fo(p)||0,Jr(E)&&(Ke=!!E.leading,nt="maxWait"in E,G=nt?wr(Fo(E.maxWait)||0,p):G,Ct="trailing"in E?!!E.trailing:Ct);function Gt(f0){var Jo=I,Su=B;return I=B=i,$e=f0,te=a.apply(Su,Jo),te}function an(f0){return $e=f0,se=wf(Yn,p),Ke?Gt(f0):te}function qn(f0){var Jo=f0-Ee,Su=f0-$e,Zp=p-Jo;return nt?kn(Zp,G-Su):Zp}function dn(f0){var Jo=f0-Ee,Su=f0-$e;return Ee===i||Jo>=p||Jo<0||nt&&Su>=G}function Yn(){var f0=rc();if(dn(f0))return er(f0);se=wf(Yn,qn(f0))}function er(f0){return se=i,Ct&&I?Gt(f0):(I=B=i,te)}function vo(){se!==i&&Ad(se),$e=0,I=Ee=B=se=i}function Pi(){return se===i?te:er(rc())}function Mi(){var f0=rc(),Jo=dn(f0);if(I=arguments,B=this,Ee=f0,Jo){if(se===i)return an(Ee);if(nt)return Ad(se),se=wf(Yn,p),Gt(Ee)}return se===i&&(se=wf(Yn,p)),te}return Mi.cancel=vo,Mi.flush=Pi,Mi}var dg=Wn(function(a,p){return Jf(a,1,p)}),Dp=Wn(function(a,p,E){return Jf(a,Fo(p)||0,E)});function pg(a){return Lt(a,Te)}function Qc(a,p){if(typeof a!="function"||p!=null&&typeof p!="function")throw new Yr(g);var E=function(){var I=arguments,B=p?p.apply(this,I):I[0],G=E.cache;if(G.has(B))return G.get(B);var te=a.apply(this,I);return E.cache=G.set(B,te)||G,te};return E.cache=new(Qc.Cache||ei),E}Qc.Cache=ei;function Zc(a){if(typeof a!="function")throw new Yr(g);return function(){var p=arguments;switch(p.length){case 0:return!a.call(this);case 1:return!a.call(this,p[0]);case 2:return!a.call(this,p[0],p[1]);case 3:return!a.call(this,p[0],p[1],p[2])}return!a.apply(this,p)}}function ea(a){return gp(2,a)}var hg=Bm(function(a,p){p=p.length==1&&On(p[0])?lt(p[0],qr(cn())):lt(k0(p,1),qr(cn()));var E=p.length;return Wn(function(I){for(var B=-1,G=kn(I.length,E);++B=p}),Ll=_i(function(){return arguments}())?_i:function(a){return n0(a)&&or.call(a,"callee")&&!N0.call(a,"callee")},On=Ie.isArray,x1=ue?qr(ue):Re;function Vi(a){return a!=null&&na(a.length)&&!rs(a)}function l0(a){return n0(a)&&Vi(a)}function kg(a){return a===!0||a===!1||n0(a)&&Ye(a)==jt}var Eu=pi||W1,Ag=de?qr(de):Ce;function Og(a){return n0(a)&&a.nodeType===1&&!ic(a)}function Cp(a){if(a==null)return!0;if(Vi(a)&&(On(a)||typeof a=="string"||typeof a.splice=="function"||Eu(a)||Df(a)||Ll(a)))return!a.length;var p=U0(a);if(p==w||p==r0)return!a.size;if(nc(a))return!Zf(a).length;for(var E in a)if(or.call(a,E))return!1;return!0}function Ig(a,p){return ze(a,p)}function Pg(a,p,E){E=typeof E=="function"?E:i;var I=E?E(a,p):i;return I===i?ze(a,p,i,E):!!I}function k1(a){if(!n0(a))return!1;var p=Ye(a);return p==Jt||p==Un||typeof a.message=="string"&&typeof a.name=="string"&&!ic(a)}function Mg(a){return typeof a=="number"&&Br(a)}function rs(a){if(!Jr(a))return!1;var p=Ye(a);return p==Yt||p==cr||p==Ft||p==vr}function A1(a){return typeof a=="number"&&a==jn(a)}function na(a){return typeof a=="number"&&a>-1&&a%1==0&&a<=Nt}function Jr(a){var p=typeof a;return a!=null&&(p=="object"||p=="function")}function n0(a){return a!=null&&typeof a=="object"}var Tp=W?qr(W):on;function Fg(a,p){return a===p||sr(a,p,Nn(p))}function Lg(a,p,E){return E=typeof E=="function"?E:i,sr(a,p,Nn(p),E)}function Rg(a){return xp(a)&&a!=+a}function Ng(a){if(Zm(a))throw new mt(c);return mn(a)}function Bg(a){return a===null}function O1(a){return a==null}function xp(a){return typeof a=="number"||n0(a)&&Ye(a)==pt}function ic(a){if(!n0(a)||Ye(a)!=Bn)return!1;var p=uo(a);if(p===null)return!0;var E=or.call(p,"constructor")&&p.constructor;return typeof E=="function"&&E instanceof E&&bi.call(E)==af}var ra=ve?qr(ve):pr;function jg(a){return A1(a)&&a>=-Nt&&a<=Nt}var kp=Fe?qr(Fe):Hr;function ia(a){return typeof a=="string"||!On(a)&&n0(a)&&Ye(a)==Ci}function mo(a){return typeof a=="symbol"||n0(a)&&Ye(a)==yo}var Df=Ge?qr(Ge):Vn;function Ap(a){return a===i}function Ug(a){return n0(a)&&U0(a)==Mu}function qg(a){return n0(a)&&Ye(a)==Gf}var zg=bc(Ha),Wg=bc(function(a,p){return a<=p});function Op(a){if(!a)return[];if(Vi(a))return ia(a)?Jn(a):Xr(a);if(u0&&a[u0])return F0(a[u0]());var p=U0(a),E=p==w?Gr:p==r0?Y0:Ef;return E(a)}function is(a){if(!a)return a===0?a:0;if(a=Fo(a),a===Ot||a===-Ot){var p=a<0?-1:1;return p*Je}return a===a?a:0}function jn(a){var p=is(a),E=p%1;return p===p?E?p-E:p:0}function Ip(a){return a?mi(jn(a),0,ne):0}function Fo(a){if(typeof a=="number")return a;if(mo(a))return V;if(Jr(a)){var p=typeof a.valueOf=="function"?a.valueOf():a;a=Jr(p)?p+"":p}if(typeof a!="string")return a===0?a:+a;a=E0(a);var E=zo.test(a);return E||Is.test(a)?Vu(a.slice(2),E?2:8):wo.test(a)?V:+a}function oa(a){return yi(a,Yi(a))}function Hg(a){return a?mi(jn(a),-Nt,Nt):a===0?a:0}function yr(a){return a==null?"":ho(a)}var Pp=Io(function(a,p){if(nc(p)||Vi(p)){yi(p,q0(p),a);return}for(var E in p)or.call(p,E)&&xl(a,E,p[E])}),Mp=Io(function(a,p){yi(p,Yi(p),a)}),ua=Io(function(a,p,E,I){yi(p,Yi(p),a,I)}),bg=Io(function(a,p,E,I){yi(p,q0(p),a,I)}),Gg=yu(Hs);function Vg(a,p){var E=dr(a);return p==null?E:mf(E,p)}var Fp=Wn(function(a,p){a=$t(a);var E=-1,I=p.length,B=I>2?p[2]:i;for(B&&Ii(p[0],p[1],B)&&(I=1);++E1),G}),yi(a,Dn(a),E),I&&(E=vi(E,D|L|N,Gm));for(var B=p.length;B--;)$a(E,p[B]);return E});function l_(a,p){return Bp(a,Zc(cn(p)))}var f_=yu(function(a,p){return a==null?{}:Fm(a,p)});function Bp(a,p){if(a==null)return{};var E=lt(Dn(a),function(I){return[I]});return p=cn(p),yd(a,E,function(I,B){return p(I,B[0])})}function c_(a,p,E){p=Gs(p,a);var I=-1,B=p.length;for(B||(B=1,a=i);++Ip){var I=a;a=p,p=I}if(E||a%1||p%1){var B=Ai();return kn(a+B*(p-a+Bs("1e-"+((B+"").length-1))),p)}return Ga(a,p)}var __=yf(function(a,p,E){return p=p.toLowerCase(),a+(E?Wp(p):p)});function Wp(a){return L1(yr(a).toLowerCase())}function Hp(a){return a=yr(a),a&&a.replace(_n,du).replace(V0,"")}function y_(a,p,E){a=yr(a),p=ho(p);var I=a.length;E=E===i?I:mi(jn(E),0,I);var B=E;return E-=p.length,E>=0&&a.slice(E,B)==p}function M1(a){return a=yr(a),a&&Ac.test(a)?a.replace(Ui,Yu):a}function w_(a){return a=yr(a),a&&Fr.test(a)?a.replace(kr,"\\$&"):a}var D_=yf(function(a,p,E){return a+(E?"-":"")+p.toLowerCase()}),bp=yf(function(a,p,E){return a+(E?" ":"")+p.toLowerCase()}),E_=Fd("toLowerCase");function S_(a,p,E){a=yr(a),p=jn(p);var I=p?Rr(a):0;if(!p||I>=p)return a;var B=(p-I)/2;return Hc(hu(B),E)+a+Hc(B0(B),E)}function C_(a,p,E){a=yr(a),p=jn(p);var I=p?Rr(a):0;return p&&I>>0,E?(a=yr(a),a&&(typeof p=="string"||p!=null&&!ra(p))&&(p=ho(p),!p&&Hi(a))?Vs(Jn(a),0,E):a.split(p,E)):[]}var I_=yf(function(a,p,E){return a+(E?" ":"")+L1(p)});function P_(a,p,E){return a=yr(a),E=E==null?0:mi(jn(E),0,a.length),p=ho(p),a.slice(E,E+p.length)==p}function M_(a,p,E){var I=z.templateSettings;E&&Ii(a,p,E)&&(p=i),a=yr(a),p=ua({},p,I,n1);var B=ua({},p.imports,I.imports,n1),G=q0(B),te=Eo(B,G),se,Ee,$e=0,Ke=p.interpolate||Nu,nt="__p += '",Ct=X0((p.escape||Nu).source+"|"+Ke.source+"|"+(Ke===xs?As:Nu).source+"|"+(p.evaluate||Nu).source+"|$","g"),Gt="//# sourceURL="+(or.call(p,"sourceURL")?(p.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++lf+"]")+` -`;a.replace(Ct,function(dn,Yn,er,vo,Pi,Mi){return er||(er=vo),nt+=a.slice($e,Mi).replace(Wo,Us),Yn&&(se=!0,nt+=`' + -__e(`+Yn+`) + -'`),Pi&&(Ee=!0,nt+=`'; -`+Pi+`; -__p += '`),er&&(nt+=`' + -((__t = (`+er+`)) == null ? '' : __t) + -'`),$e=Mi+dn.length,dn}),nt+=`'; -`;var an=or.call(p,"variable")&&p.variable;if(!an)nt=`with (obj) { -`+nt+` -} -`;else if(Ru.test(an))throw new mt(t);nt=(Ee?nt.replace(ll,""):nt).replace(fl,"$1").replace(cl,"$1;"),nt="function("+(an||"obj")+`) { -`+(an?"":`obj || (obj = {}); -`)+"var __t, __p = ''"+(se?", __e = _.escape":"")+(Ee?`, __j = Array.prototype.join; -function print() { __p += __j.call(arguments, '') } -`:`; -`)+nt+`return __p -}`;var qn=$p(function(){return wn(G,Gt+"return "+nt).apply(i,te)});if(qn.source=nt,k1(qn))throw qn;return qn}function F_(a){return yr(a).toLowerCase()}function L_(a){return yr(a).toUpperCase()}function R_(a,p,E){if(a=yr(a),a&&(E||p===i))return E0(a);if(!a||!(p=ho(p)))return a;var I=Jn(a),B=Jn(p),G=wl(I,B),te=js(I,B)+1;return Vs(I,G,te).join("")}function F1(a,p,E){if(a=yr(a),a&&(E||p===i))return a.slice(0,ai(a)+1);if(!a||!(p=ho(p)))return a;var I=Jn(a),B=js(I,Jn(p))+1;return Vs(I,0,B).join("")}function N_(a,p,E){if(a=yr(a),a&&(E||p===i))return a.replace(si,"");if(!a||!(p=ho(p)))return a;var I=Jn(a),B=wl(I,Jn(p));return Vs(I,B).join("")}function B_(a,p){var E=Oe,I=Le;if(Jr(p)){var B="separator"in p?p.separator:B;E="length"in p?jn(p.length):E,I="omission"in p?ho(p.omission):I}a=yr(a);var G=a.length;if(Hi(a)){var te=Jn(a);G=te.length}if(E>=G)return a;var se=E-Rr(I);if(se<1)return I;var Ee=te?Vs(te,0,se).join(""):a.slice(0,se);if(B===i)return Ee+I;if(te&&(se+=Ee.length-se),ra(B)){if(a.slice(se).search(B)){var $e,Ke=Ee;for(B.global||(B=X0(B.source,yr(uu.exec(B))+"g")),B.lastIndex=0;$e=B.exec(Ke);)var nt=$e.index;Ee=Ee.slice(0,nt===i?se:nt)}}else if(a.indexOf(ho(B),se)!=se){var Ct=Ee.lastIndexOf(B);Ct>-1&&(Ee=Ee.slice(0,Ct))}return Ee+I}function Vp(a){return a=yr(a),a&&Mr.test(a)?a.replace(al,o0):a}var j_=yf(function(a,p,E){return a+(E?" ":"")+p.toUpperCase()}),L1=Fd("toUpperCase");function Yp(a,p,E){return a=yr(a),p=E?i:p,p===i?qs(a)?cf(a):d0(a):a.match(p)||[]}var $p=Wn(function(a,p){try{return K(a,i,p)}catch(E){return k1(E)?E:new mt(E)}}),U_=yu(function(a,p){return je(p,function(E){E=Xo(E),ti(a,E,S1(a[E],a))}),a});function Kp(a){var p=a==null?0:a.length,E=cn();return a=p?lt(a,function(I){if(typeof I[1]!="function")throw new Yr(g);return[E(I[0]),I[1]]}):[],Wn(function(I){for(var B=-1;++BNt)return[];var E=ne,I=kn(a,ne);p=cn(p),a-=ne;for(var B=ci(I,p);++E0||p<0)?new nn(E):(a<0?E=E.takeRight(-a):a&&(E=E.drop(a)),p!==i&&(p=jn(p),E=p<0?E.dropRight(-p):E.take(p-a)),E)},nn.prototype.takeRightWhile=function(a){return this.reverse().takeWhile(a).reverse()},nn.prototype.toArray=function(){return this.take(ne)},S(nn.prototype,function(a,p){var E=/^(?:filter|find|map|reject)|While$/.test(p),I=/^(?:head|last)$/.test(p),B=z[I?"take"+(p=="last"?"Right":""):p],G=I||/^find/.test(p);!B||(z.prototype[p]=function(){var te=this.__wrapped__,se=I?[1]:arguments,Ee=te instanceof nn,$e=se[0],Ke=Ee||On(te),nt=function(Yn){var er=B.apply(z,Rt([Yn],se));return I&&Ct?er[0]:er};Ke&&E&&typeof $e=="function"&&$e.length!=1&&(Ee=Ke=!1);var Ct=this.__chain__,Gt=!!this.__actions__.length,an=G&&!Ct,qn=Ee&&!Gt;if(!G&&Ke){te=qn?te:new nn(this);var dn=a.apply(te,se);return dn.__actions__.push({func:Kc,args:[nt],thisArg:i}),new Qn(dn,Ct)}return an&&qn?a.apply(this,se):(dn=this.thru(nt),an?I?dn.value()[0]:dn.value():dn)})}),je(["pop","push","shift","sort","splice","unshift"],function(a){var p=$r[a],E=/^(?:push|sort|unshift)$/.test(a)?"tap":"thru",I=/^(?:pop|shift)$/.test(a);z.prototype[a]=function(){var B=arguments;if(I&&!this.__chain__){var G=this.value();return p.apply(On(G)?G:[],B)}return this[E](function(te){return p.apply(On(te)?te:[],B)})}}),S(nn.prototype,function(a,p){var E=z[p];if(E){var I=E.name+"";or.call(bt,I)||(bt[I]=[]),bt[I].push({name:p,func:E})}}),bt[zc(i,re).name]=[{name:"wrapper",func:i}],nn.prototype.clone=s0,nn.prototype.reverse=t0,nn.prototype.value=g0,z.prototype.at=Wv,z.prototype.chain=Hv,z.prototype.commit=bv,z.prototype.next=Gv,z.prototype.plant=Yv,z.prototype.reverse=Ml,z.prototype.toJSON=z.prototype.valueOf=z.prototype.value=Fl,z.prototype.first=z.prototype.head,u0&&(z.prototype[u0]=Vv),z},K0=$0();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Lr._=K0,define(function(){return K0})):R?((R.exports=K0)._=K0,F._=K0):Lr._=K0}).call(ga)});var ay=Me((XH,cy)=>{"use strict";var fr=cy.exports;cy.exports.default=fr;var Pr="[",t2="]",ya="\x07",vh=";",OD=process.env.TERM_PROGRAM==="Apple_Terminal";fr.cursorTo=(i,u)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");return typeof u!="number"?Pr+(i+1)+"G":Pr+(u+1)+";"+(i+1)+"H"};fr.cursorMove=(i,u)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");let f="";return i<0?f+=Pr+-i+"D":i>0&&(f+=Pr+i+"C"),u<0?f+=Pr+-u+"A":u>0&&(f+=Pr+u+"B"),f};fr.cursorUp=(i=1)=>Pr+i+"A";fr.cursorDown=(i=1)=>Pr+i+"B";fr.cursorForward=(i=1)=>Pr+i+"C";fr.cursorBackward=(i=1)=>Pr+i+"D";fr.cursorLeft=Pr+"G";fr.cursorSavePosition=OD?"7":Pr+"s";fr.cursorRestorePosition=OD?"8":Pr+"u";fr.cursorGetPosition=Pr+"6n";fr.cursorNextLine=Pr+"E";fr.cursorPrevLine=Pr+"F";fr.cursorHide=Pr+"?25l";fr.cursorShow=Pr+"?25h";fr.eraseLines=i=>{let u="";for(let f=0;f[t2,"8",vh,vh,u,ya,i,t2,"8",vh,vh,ya].join("");fr.image=(i,u={})=>{let f=`${t2}1337;File=inline=1`;return u.width&&(f+=`;width=${u.width}`),u.height&&(f+=`;height=${u.height}`),u.preserveAspectRatio===!1&&(f+=";preserveAspectRatio=0"),f+":"+i.toString("base64")+ya};fr.iTerm={setCwd:(i=process.cwd())=>`${t2}50;CurrentDir=${i}${ya}`,annotation:(i,u={})=>{let f=`${t2}1337;`,c=typeof u.x!="undefined",g=typeof u.y!="undefined";if((c||g)&&!(c&&g&&typeof u.length!="undefined"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return i=i.replace(/\|/g,""),f+=u.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",u.length>0?f+=(c?[i,u.length,u.x,u.y]:[u.length,i]).join("|"):f+=i,f+ya}}});var PD=Me((JH,dy)=>{"use strict";var ID=(i,u)=>{for(let f of Reflect.ownKeys(u))Object.defineProperty(i,f,Object.getOwnPropertyDescriptor(u,f));return i};dy.exports=ID;dy.exports.default=ID});var FD=Me((QH,gh)=>{"use strict";var oN=PD(),_h=new WeakMap,MD=(i,u={})=>{if(typeof i!="function")throw new TypeError("Expected a function");let f,c=!1,g=0,t=i.displayName||i.name||"",C=function(...A){if(_h.set(C,++g),c){if(u.throw===!0)throw new Error(`Function \`${t}\` can only be called once`);return f}return c=!0,f=i.apply(this,A),i=null,f};return oN(C,i),_h.set(C,g),C};gh.exports=MD;gh.exports.default=MD;gh.exports.callCount=i=>{if(!_h.has(i))throw new Error(`The given function \`${i.name}\` is not wrapped by the \`onetime\` package`);return _h.get(i)}});var LD=Me((ZH,yh)=>{yh.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&yh.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&yh.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var vy=Me((eb,n2)=>{var uN=require("assert"),r2=LD(),sN=/^win/i.test(process.platform),wh=require("events");typeof wh!="function"&&(wh=wh.EventEmitter);var Bi;process.__signal_exit_emitter__?Bi=process.__signal_exit_emitter__:(Bi=process.__signal_exit_emitter__=new wh,Bi.count=0,Bi.emitted={});Bi.infinite||(Bi.setMaxListeners(Infinity),Bi.infinite=!0);n2.exports=function(i,u){uN.equal(typeof i,"function","a callback must be provided for exit handler"),i2===!1&&RD();var f="exit";u&&u.alwaysLast&&(f="afterexit");var c=function(){Bi.removeListener(f,i),Bi.listeners("exit").length===0&&Bi.listeners("afterexit").length===0&&py()};return Bi.on(f,i),c};n2.exports.unload=py;function py(){!i2||(i2=!1,r2.forEach(function(i){try{process.removeListener(i,hy[i])}catch(u){}}),process.emit=my,process.reallyExit=ND,Bi.count-=1)}function wa(i,u,f){Bi.emitted[i]||(Bi.emitted[i]=!0,Bi.emit(i,u,f))}var hy={};r2.forEach(function(i){hy[i]=function(){var f=process.listeners(i);f.length===Bi.count&&(py(),wa("exit",null,i),wa("afterexit",null,i),sN&&i==="SIGHUP"&&(i="SIGINT"),process.kill(process.pid,i))}});n2.exports.signals=function(){return r2};n2.exports.load=RD;var i2=!1;function RD(){i2||(i2=!0,Bi.count+=1,r2=r2.filter(function(i){try{return process.on(i,hy[i]),!0}catch(u){return!1}}),process.emit=fN,process.reallyExit=lN)}var ND=process.reallyExit;function lN(i){process.exitCode=i||0,wa("exit",process.exitCode,null),wa("afterexit",process.exitCode,null),ND.call(process,process.exitCode)}var my=process.emit;function fN(i,u){if(i==="exit"){u!==void 0&&(process.exitCode=u);var f=my.apply(this,arguments);return wa("exit",process.exitCode,null),wa("afterexit",process.exitCode,null),f}else return my.apply(this,arguments)}});var jD=Me((tb,BD)=>{"use strict";var cN=FD(),aN=vy();BD.exports=cN(()=>{aN(()=>{process.stderr.write("[?25h")},{alwaysLast:!0})})});var gy=Me(Da=>{"use strict";var dN=jD(),Dh=!1;Da.show=(i=process.stderr)=>{!i.isTTY||(Dh=!1,i.write("[?25h"))};Da.hide=(i=process.stderr)=>{!i.isTTY||(dN(),Dh=!0,i.write("[?25l"))};Da.toggle=(i,u)=>{i!==void 0&&(Dh=i),Dh?Da.show(u):Da.hide(u)}});var WD=Me(o2=>{"use strict";var UD=o2&&o2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(o2,"__esModule",{value:!0});var qD=UD(ay()),zD=UD(gy()),pN=(i,{showCursor:u=!1}={})=>{let f=0,c="",g=!1,t=C=>{!u&&!g&&(zD.default.hide(),g=!0);let A=C+` -`;A!==c&&(c=A,i.write(qD.default.eraseLines(f)+A),f=A.split(` -`).length)};return t.clear=()=>{i.write(qD.default.eraseLines(f)),c="",f=0},t.done=()=>{c="",f=0,u||(zD.default.show(),g=!1)},t};o2.default={create:pN}});var bD=Me((ib,HD)=>{HD.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var YD=Me(ru=>{"use strict";var GD=bD(),nl=process.env;Object.defineProperty(ru,"_vendors",{value:GD.map(function(i){return i.constant})});ru.name=null;ru.isPR=null;GD.forEach(function(i){var u=Array.isArray(i.env)?i.env:[i.env],f=u.every(function(c){return VD(c)});if(ru[i.constant]=f,f)switch(ru.name=i.name,typeof i.pr){case"string":ru.isPR=!!nl[i.pr];break;case"object":"env"in i.pr?ru.isPR=i.pr.env in nl&&nl[i.pr.env]!==i.pr.ne:"any"in i.pr?ru.isPR=i.pr.any.some(function(c){return!!nl[c]}):ru.isPR=VD(i.pr);break;default:ru.isPR=null}});ru.isCI=!!(nl.CI||nl.CONTINUOUS_INTEGRATION||nl.BUILD_NUMBER||nl.RUN_ID||ru.name);function VD(i){return typeof i=="string"?!!nl[i]:Object.keys(i).every(function(u){return nl[u]===i[u]})}});var KD=Me((ub,$D)=>{"use strict";$D.exports=YD().isCI});var JD=Me((sb,XD)=>{"use strict";var hN=i=>{let u=new Set;do for(let f of Reflect.ownKeys(i))u.add([i,f]);while((i=Reflect.getPrototypeOf(i))&&i!==Object.prototype);return u};XD.exports=(i,{include:u,exclude:f}={})=>{let c=g=>{let t=C=>typeof C=="string"?g===C:C.test(g);return u?u.some(t):f?!f.some(t):!0};for(let[g,t]of hN(i.constructor.prototype)){if(t==="constructor"||!c(t))continue;let C=Reflect.getOwnPropertyDescriptor(g,t);C&&typeof C.value=="function"&&(i[t]=i[t].bind(i))}return i}});var iE=Me(Sr=>{"use strict";Object.defineProperty(Sr,"__esModule",{value:!0});var Ea,u2,Eh,Sh,_y;typeof window=="undefined"||typeof MessageChannel!="function"?(Sa=null,yy=null,wy=function(){if(Sa!==null)try{var i=Sr.unstable_now();Sa(!0,i),Sa=null}catch(u){throw setTimeout(wy,0),u}},QD=Date.now(),Sr.unstable_now=function(){return Date.now()-QD},Ea=function(i){Sa!==null?setTimeout(Ea,0,i):(Sa=i,setTimeout(wy,0))},u2=function(i,u){yy=setTimeout(i,u)},Eh=function(){clearTimeout(yy)},Sh=function(){return!1},_y=Sr.unstable_forceFrameRate=function(){}):(Ch=window.performance,Dy=window.Date,ZD=window.setTimeout,eE=window.clearTimeout,typeof console!="undefined"&&(tE=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof tE!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Ch=="object"&&typeof Ch.now=="function"?Sr.unstable_now=function(){return Ch.now()}:(nE=Dy.now(),Sr.unstable_now=function(){return Dy.now()-nE}),s2=!1,l2=null,Th=-1,Ey=5,Sy=0,Sh=function(){return Sr.unstable_now()>=Sy},_y=function(){},Sr.unstable_forceFrameRate=function(i){0>i||125kh(C,f))x!==void 0&&0>kh(x,C)?(i[c]=x,i[A]=f,c=A):(i[c]=C,i[t]=f,c=t);else if(x!==void 0&&0>kh(x,f))i[c]=x,i[A]=f,c=A;else break e}}return u}return null}function kh(i,u){var f=i.sortIndex-u.sortIndex;return f!==0?f:i.id-u.id}var ds=[],Nf=[],mN=1,_o=null,to=3,Oh=!1,pc=!1,f2=!1;function Ih(i){for(var u=Iu(Nf);u!==null;){if(u.callback===null)Ah(Nf);else if(u.startTime<=i)Ah(Nf),u.sortIndex=u.expirationTime,Ty(ds,u);else break;u=Iu(Nf)}}function xy(i){if(f2=!1,Ih(i),!pc)if(Iu(ds)!==null)pc=!0,Ea(ky);else{var u=Iu(Nf);u!==null&&u2(xy,u.startTime-i)}}function ky(i,u){pc=!1,f2&&(f2=!1,Eh()),Oh=!0;var f=to;try{for(Ih(u),_o=Iu(ds);_o!==null&&(!(_o.expirationTime>u)||i&&!Sh());){var c=_o.callback;if(c!==null){_o.callback=null,to=_o.priorityLevel;var g=c(_o.expirationTime<=u);u=Sr.unstable_now(),typeof g=="function"?_o.callback=g:_o===Iu(ds)&&Ah(ds),Ih(u)}else Ah(ds);_o=Iu(ds)}if(_o!==null)var t=!0;else{var C=Iu(Nf);C!==null&&u2(xy,C.startTime-u),t=!1}return t}finally{_o=null,to=f,Oh=!1}}function rE(i){switch(i){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var vN=_y;Sr.unstable_ImmediatePriority=1;Sr.unstable_UserBlockingPriority=2;Sr.unstable_NormalPriority=3;Sr.unstable_IdlePriority=5;Sr.unstable_LowPriority=4;Sr.unstable_runWithPriority=function(i,u){switch(i){case 1:case 2:case 3:case 4:case 5:break;default:i=3}var f=to;to=i;try{return u()}finally{to=f}};Sr.unstable_next=function(i){switch(to){case 1:case 2:case 3:var u=3;break;default:u=to}var f=to;to=u;try{return i()}finally{to=f}};Sr.unstable_scheduleCallback=function(i,u,f){var c=Sr.unstable_now();if(typeof f=="object"&&f!==null){var g=f.delay;g=typeof g=="number"&&0c?(i.sortIndex=g,Ty(Nf,i),Iu(ds)===null&&i===Iu(Nf)&&(f2?Eh():f2=!0,u2(xy,g-c))):(i.sortIndex=f,Ty(ds,i),pc||Oh||(pc=!0,Ea(ky))),i};Sr.unstable_cancelCallback=function(i){i.callback=null};Sr.unstable_wrapCallback=function(i){var u=to;return function(){var f=to;to=u;try{return i.apply(this,arguments)}finally{to=f}}};Sr.unstable_getCurrentPriorityLevel=function(){return to};Sr.unstable_shouldYield=function(){var i=Sr.unstable_now();Ih(i);var u=Iu(ds);return u!==_o&&_o!==null&&u!==null&&u.callback!==null&&u.startTime<=i&&u.expirationTime<_o.expirationTime||Sh()};Sr.unstable_requestPaint=vN;Sr.unstable_continueExecution=function(){pc||Oh||(pc=!0,Ea(ky))};Sr.unstable_pauseExecution=function(){};Sr.unstable_getFirstCallbackNode=function(){return Iu(ds)};Sr.unstable_Profiling=null});var Ay=Me((fb,oE)=>{"use strict";oE.exports=iE()});var uE=Me((cb,c2)=>{c2.exports=function i(u){"use strict";var f=ey(),c=lr(),g=Ay();function t(v){for(var m="https://reactjs.org/docs/error-decoder.html?invariant="+v,S=1;Sqo||(v.current=qi[qo],qi[qo]=null,qo--)}function Fr(v,m){qo++,qi[qo]=v.current,v.current=m}var si={},H0={current:si},b0={current:!1},Bt=si;function Lu(v,m){var S=v.type.contextTypes;if(!S)return si;var O=v.stateNode;if(O&&O.__reactInternalMemoizedUnmaskedChildContext===m)return O.__reactInternalMemoizedMaskedChildContext;var M={},b;for(b in S)M[b]=m[b];return O&&(v=v.stateNode,v.__reactInternalMemoizedUnmaskedChildContext=m,v.__reactInternalMemoizedMaskedChildContext=M),M}function c0(v){return v=v.childContextTypes,v!=null}function Ru(v){kr(b0,v),kr(H0,v)}function ks(v){kr(b0,v),kr(H0,v)}function As(v,m,S){if(H0.current!==si)throw Error(t(168));Fr(H0,m,v),Fr(b0,S,v)}function uu(v,m,S){var O=v.stateNode;if(v=m.childContextTypes,typeof O.getChildContext!="function")return S;O=O.getChildContext();for(var M in O)if(!(M in v))throw Error(t(108,Oe(m)||"Unknown",M));return f({},S,{},O)}function wo(v){var m=v.stateNode;return m=m&&m.__reactInternalMemoizedMergedChildContext||si,Bt=H0.current,Fr(H0,m,v),Fr(b0,b0.current,v),!0}function zo(v,m,S){var O=v.stateNode;if(!O)throw Error(t(169));S?(m=uu(v,m,Bt),O.__reactInternalMemoizedMergedChildContext=m,kr(b0,v),kr(H0,v),Fr(H0,m,v)):kr(b0,v),Fr(b0,S,v)}var Os=g.unstable_runWithPriority,Is=g.unstable_scheduleCallback,uf=g.unstable_cancelCallback,_n=g.unstable_shouldYield,Nu=g.unstable_requestPaint,Wo=g.unstable_now,su=g.unstable_getCurrentPriorityLevel,Ps=g.unstable_ImmediatePriority,pl=g.unstable_UserBlockingPriority,Vf=g.unstable_NormalPriority,hl=g.unstable_LowPriority,Bu=g.unstable_IdlePriority,ju={},sf=Nu!==void 0?Nu:function(){},ro=null,Ms=null,ml=!1,Uu=Wo(),G0=1e4>Uu?Wo:function(){return Wo()-Uu};function Fs(){switch(su()){case Ps:return 99;case pl:return 98;case Vf:return 97;case hl:return 96;case Bu:return 95;default:throw Error(t(332))}}function tt(v){switch(v){case 99:return Ps;case 98:return pl;case 97:return Vf;case 96:return hl;case 95:return Bu;default:throw Error(t(332))}}function zi(v,m){return v=tt(v),Os(v,m)}function lu(v,m,S){return v=tt(v),Is(v,m,S)}function Ho(v){return ro===null?(ro=[v],Ms=Is(Ps,vl)):ro.push(v),ju}function O0(){if(Ms!==null){var v=Ms;Ms=null,uf(v)}vl()}function vl(){if(!ml&&ro!==null){ml=!0;var v=0;try{var m=ro;zi(99,function(){for(;v=m&&(ai=!0),v.firstContext=null)}function D0(v,m){if(zu!==v&&m!==!1&&m!==0)if((typeof m!="number"||m===1073741823)&&(zu=v,m=1073741823),m={context:v,observedBits:m,next:null},Wi===null){if(qu===null)throw Error(t(308));Wi=m,qu.dependencies={expirationTime:0,firstContext:m,responders:null}}else Wi=Wi.next=m;return Jt?v._currentValue:v._currentValue2}var Do=!1;function i0(v){return{baseState:v,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Rs(v){return{baseState:v.baseState,firstUpdate:v.firstUpdate,lastUpdate:v.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function a0(v,m){return{expirationTime:v,suspenseConfig:m,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function Hu(v,m){v.lastUpdate===null?v.firstUpdate=v.lastUpdate=m:(v.lastUpdate.next=m,v.lastUpdate=m)}function V0(v,m){var S=v.alternate;if(S===null){var O=v.updateQueue,M=null;O===null&&(O=v.updateQueue=i0(v.memoizedState))}else O=v.updateQueue,M=S.updateQueue,O===null?M===null?(O=v.updateQueue=i0(v.memoizedState),M=S.updateQueue=i0(S.memoizedState)):O=v.updateQueue=Rs(M):M===null&&(M=S.updateQueue=Rs(O));M===null||O===M?Hu(O,m):O.lastUpdate===null||M.lastUpdate===null?(Hu(O,m),Hu(M,m)):(Hu(O,m),M.lastUpdate=m)}function bu(v,m){var S=v.updateQueue;S=S===null?v.updateQueue=i0(v.memoizedState):Ns(v,S),S.lastCapturedUpdate===null?S.firstCapturedUpdate=S.lastCapturedUpdate=m:(S.lastCapturedUpdate.next=m,S.lastCapturedUpdate=m)}function Ns(v,m){var S=v.alternate;return S!==null&&m===S.updateQueue&&(m=v.updateQueue=Rs(m)),m}function bo(v,m,S,O,M,b){switch(S.tag){case 1:return v=S.payload,typeof v=="function"?v.call(b,O,M):v;case 3:v.effectTag=v.effectTag&-4097|64;case 0:if(v=S.payload,M=typeof v=="function"?v.call(b,O,M):v,M==null)break;return f({},O,M);case 2:Do=!0}return O}function P0(v,m,S,O,M){Do=!1,m=Ns(v,m);for(var b=m.baseState,ee=null,Ye=0,Ze=m.firstUpdate,ut=b;Ze!==null;){var In=Ze.expirationTime;Inpr?(Hr=mn,mn=null):Hr=mn.sibling;var Vn=jr(Re,mn,ze[pr],Et);if(Vn===null){mn===null&&(mn=Hr);break}v&&mn&&Vn.alternate===null&&m(Re,mn),Ce=b(Vn,Ce,pr),sr===null?on=Vn:sr.sibling=Vn,sr=Vn,mn=Hr}if(pr===ze.length)return S(Re,mn),on;if(mn===null){for(;prpr?(Hr=mn,mn=null):Hr=mn.sibling;var ni=jr(Re,mn,Vn.value,Et);if(ni===null){mn===null&&(mn=Hr);break}v&&mn&&ni.alternate===null&&m(Re,mn),Ce=b(ni,Ce,pr),sr===null?on=ni:sr.sibling=ni,sr=ni,mn=Hr}if(Vn.done)return S(Re,mn),on;if(mn===null){for(;!Vn.done;pr++,Vn=ze.next())Vn=A0(Re,Vn.value,Et),Vn!==null&&(Ce=b(Vn,Ce,pr),sr===null?on=Vn:sr.sibling=Vn,sr=Vn);return on}for(mn=O(Re,mn);!Vn.done;pr++,Vn=ze.next())Vn=gi(mn,Re,pr,Vn.value,Et),Vn!==null&&(v&&Vn.alternate!==null&&mn.delete(Vn.key===null?pr:Vn.key),Ce=b(Vn,Ce,pr),sr===null?on=Vn:sr.sibling=Vn,sr=Vn);return v&&mn.forEach(function(Zf){return m(Re,Zf)}),on}return function(Re,Ce,ze,Et){var on=typeof ze=="object"&&ze!==null&&ze.type===L&&ze.key===null;on&&(ze=ze.props.children);var sr=typeof ze=="object"&&ze!==null;if(sr)switch(ze.$$typeof){case x:e:{for(sr=ze.key,on=Ce;on!==null;){if(on.key===sr)if(on.tag===7?ze.type===L:on.elementType===ze.type){S(Re,on.sibling),Ce=M(on,ze.type===L?ze.props.children:ze.props,Et),Ce.ref=au(Re,on,ze),Ce.return=Re,Re=Ce;break e}else{S(Re,on);break}else m(Re,on);on=on.sibling}ze.type===L?(Ce=mi(ze.props.children,Re.mode,Et,ze.key),Ce.return=Re,Re=Ce):(Et=Hs(ze.type,ze.key,ze.props,null,Re.mode,Et),Et.ref=au(Re,Ce,ze),Et.return=Re,Re=Et)}return ee(Re);case D:e:{for(on=ze.key;Ce!==null;){if(Ce.key===on)if(Ce.tag===4&&Ce.stateNode.containerInfo===ze.containerInfo&&Ce.stateNode.implementation===ze.implementation){S(Re,Ce.sibling),Ce=M(Ce,ze.children||[],Et),Ce.return=Re,Re=Ce;break e}else{S(Re,Ce);break}else m(Re,Ce);Ce=Ce.sibling}Ce=Xf(ze,Re.mode,Et),Ce.return=Re,Re=Ce}return ee(Re)}if(typeof ze=="string"||typeof ze=="number")return ze=""+ze,Ce!==null&&Ce.tag===6?(S(Re,Ce.sibling),Ce=M(Ce,ze,Et),Ce.return=Re,Re=Ce):(S(Re,Ce),Ce=vi(ze,Re.mode,Et),Ce.return=Re,Re=Ce),ee(Re);if(M0(ze))return po(Re,Ce,ze,Et);if(J(ze))return _i(Re,Ce,ze,Et);if(sr&&Lr(Re,ze),typeof ze=="undefined"&&!on)switch(Re.tag){case 1:case 0:throw Re=Re.type,Error(t(152,Re.displayName||Re.name||"Component"))}return S(Re,Ce)}}var R=F(!0),U=F(!1),H={},fe={current:H},ue={current:H},de={current:H};function W(v){if(v===H)throw Error(t(174));return v}function ve(v,m){Fr(de,m,v),Fr(ue,v,v),Fr(fe,H,v),m=Ot(m),kr(fe,v),Fr(fe,m,v)}function Fe(v){kr(fe,v),kr(ue,v),kr(de,v)}function Ge(v){var m=W(de.current),S=W(fe.current);m=Nt(S,v.type,m),S!==m&&(Fr(ue,v,v),Fr(fe,m,v))}function K(v){ue.current===v&&(kr(fe,v),kr(ue,v))}var xe={current:0};function je(v){for(var m=v;m!==null;){if(m.tag===13){var S=m.memoizedState;if(S!==null&&(S=S.dehydrated,S===null||ll(S)||fl(S)))return m}else if(m.tag===19&&m.memoizedProps.revealOrder!==void 0){if((m.effectTag&64)!=0)return m}else if(m.child!==null){m.child.return=m,m=m.child;continue}if(m===v)break;for(;m.sibling===null;){if(m.return===null||m.return===v)return null;m=m.return}m.sibling.return=m.return,m=m.sibling}return null}function Xe(v,m){return{responder:v,props:m}}var rt=C.ReactCurrentDispatcher,st=C.ReactCurrentBatchConfig,xt=0,wt=null,lt=null,Rt=null,yn=null,sn=null,ar=null,rn=0,Hn=null,d0=0,Cr=!1,He=null,Qe=0;function Ne(){throw Error(t(321))}function ft(v,m){if(m===null)return!1;for(var S=0;Srn&&(rn=In,pf(rn))):(Yf(In,Ze.suspenseConfig),b=Ze.eagerReducer===v?Ze.eagerState:v(b,Ze.action)),ee=Ze,Ze=Ze.next}while(Ze!==null&&Ze!==O);ut||(Ye=ee,M=b),Sn(b,m.memoizedState)||(ai=!0),m.memoizedState=b,m.baseUpdate=Ye,m.baseState=M,S.lastRenderedState=b}return[m.memoizedState,S.dispatch]}function ci(v){var m=Cn();return typeof v=="function"&&(v=v()),m.memoizedState=m.baseState=v,v=m.queue={last:null,dispatch:null,lastRenderedReducer:p0,lastRenderedState:v},v=v.dispatch=Us.bind(null,wt,v),[m.memoizedState,v]}function xi(v){return h0(p0,v)}function E0(v,m,S,O){return v={tag:v,create:m,destroy:S,deps:O,next:null},Hn===null?(Hn={lastEffect:null},Hn.lastEffect=v.next=v):(m=Hn.lastEffect,m===null?Hn.lastEffect=v.next=v:(S=m.next,m.next=v,v.next=S,Hn.lastEffect=v)),v}function qr(v,m,S,O){var M=Cn();d0|=v,M.memoizedState=E0(m,S,void 0,O===void 0?null:O)}function Eo(v,m,S,O){var M=bn();O=O===void 0?null:O;var b=void 0;if(lt!==null){var ee=lt.memoizedState;if(b=ee.destroy,O!==null&&ft(O,ee.deps)){E0(0,S,b,O);return}}d0|=v,M.memoizedState=E0(m,S,b,O)}function So(v,m){return qr(516,192,v,m)}function wl(v,m){return Eo(516,192,v,m)}function js(v,m){if(typeof m=="function")return v=v(),m(v),function(){m(null)};if(m!=null)return v=v(),m.current=v,function(){m.current=null}}function Dl(){}function du(v,m){return Cn().memoizedState=[v,m===void 0?null:m],v}function Yu(v,m){var S=bn();m=m===void 0?null:m;var O=S.memoizedState;return O!==null&&m!==null&&ft(m,O[1])?O[0]:(S.memoizedState=[v,m],v)}function Us(v,m,S){if(!(25>Qe))throw Error(t(301));var O=v.alternate;if(v===wt||O!==null&&O===wt)if(Cr=!0,v={expirationTime:xt,suspenseConfig:null,action:S,eagerReducer:null,eagerState:null,next:null},He===null&&(He=new Map),S=He.get(m),S===void 0)He.set(m,v);else{for(m=S;m.next!==null;)m=m.next;m.next=v}else{var M=g0(),b=nr.suspense;M=Kr(M,v,b),b={expirationTime:M,suspenseConfig:b,action:S,eagerReducer:null,eagerState:null,next:null};var ee=m.last;if(ee===null)b.next=b;else{var Ye=ee.next;Ye!==null&&(b.next=Ye),ee.next=b}if(m.last=b,v.expirationTime===0&&(O===null||O.expirationTime===0)&&(O=m.lastRenderedReducer,O!==null))try{var Ze=m.lastRenderedState,ut=O(Ze,S);if(b.eagerReducer=O,b.eagerState=ut,Sn(ut,Ze))return}catch(In){}finally{}_0(v,M)}}var oo={readContext:D0,useCallback:Ne,useContext:Ne,useEffect:Ne,useImperativeHandle:Ne,useLayoutEffect:Ne,useMemo:Ne,useReducer:Ne,useRef:Ne,useState:Ne,useDebugValue:Ne,useResponder:Ne,useDeferredValue:Ne,useTransition:Ne},Hi={readContext:D0,useCallback:du,useContext:D0,useEffect:So,useImperativeHandle:function(v,m,S){return S=S!=null?S.concat([v]):null,qr(4,36,js.bind(null,m,v),S)},useLayoutEffect:function(v,m){return qr(4,36,v,m)},useMemo:function(v,m){var S=Cn();return m=m===void 0?null:m,v=v(),S.memoizedState=[v,m],v},useReducer:function(v,m,S){var O=Cn();return m=S!==void 0?S(m):m,O.memoizedState=O.baseState=m,v=O.queue={last:null,dispatch:null,lastRenderedReducer:v,lastRenderedState:m},v=v.dispatch=Us.bind(null,wt,v),[O.memoizedState,v]},useRef:function(v){var m=Cn();return v={current:v},m.memoizedState=v},useState:ci,useDebugValue:Dl,useResponder:Xe,useDeferredValue:function(v,m){var S=ci(v),O=S[0],M=S[1];return So(function(){g.unstable_next(function(){var b=st.suspense;st.suspense=m===void 0?null:m;try{M(v)}finally{st.suspense=b}})},[v,m]),O},useTransition:function(v){var m=ci(!1),S=m[0],O=m[1];return[du(function(M){O(!0),g.unstable_next(function(){var b=st.suspense;st.suspense=v===void 0?null:v;try{O(!1),M()}finally{st.suspense=b}})},[v,S]),S]}},qs={readContext:D0,useCallback:Yu,useContext:D0,useEffect:wl,useImperativeHandle:function(v,m,S){return S=S!=null?S.concat([v]):null,Eo(4,36,js.bind(null,m,v),S)},useLayoutEffect:function(v,m){return Eo(4,36,v,m)},useMemo:function(v,m){var S=bn();m=m===void 0?null:m;var O=S.memoizedState;return O!==null&&m!==null&&ft(m,O[1])?O[0]:(v=v(),S.memoizedState=[v,m],v)},useReducer:h0,useRef:function(){return bn().memoizedState},useState:xi,useDebugValue:Dl,useResponder:Xe,useDeferredValue:function(v,m){var S=xi(v),O=S[0],M=S[1];return wl(function(){g.unstable_next(function(){var b=st.suspense;st.suspense=m===void 0?null:m;try{M(v)}finally{st.suspense=b}})},[v,m]),O},useTransition:function(v){var m=xi(!1),S=m[0],O=m[1];return[Yu(function(M){O(!0),g.unstable_next(function(){var b=st.suspense;st.suspense=v===void 0?null:v;try{O(!1),M()}finally{st.suspense=b}})},[v,S]),S]}},F0=null,Gr=null,ir=!1;function L0(v,m){var S=xo(5,null,null,0);S.elementType="DELETED",S.type="DELETED",S.stateNode=m,S.return=v,S.effectTag=8,v.lastEffect!==null?(v.lastEffect.nextEffect=S,v.lastEffect=S):v.firstEffect=v.lastEffect=S}function Y0(v,m){switch(v.tag){case 5:return m=Ti(m,v.type,v.pendingProps),m!==null?(v.stateNode=m,!0):!1;case 6:return m=Fu(m,v.pendingProps),m!==null?(v.stateNode=m,!0):!1;case 13:return!1;default:return!1}}function Co(v){if(ir){var m=Gr;if(m){var S=m;if(!Y0(v,m)){if(m=cl(S),!m||!Y0(v,m)){v.effectTag=v.effectTag&-1025|2,ir=!1,F0=v;return}L0(F0,S)}F0=v,Gr=al(m)}else v.effectTag=v.effectTag&-1025|2,ir=!1,F0=v}}function $u(v){for(v=v.return;v!==null&&v.tag!==5&&v.tag!==3&&v.tag!==13;)v=v.return;F0=v}function Vo(v){if(!w||v!==F0)return!1;if(!ir)return $u(v),ir=!0,!1;var m=v.type;if(v.tag!==5||m!=="head"&&m!=="body"&&!at(m,v.memoizedProps))for(m=Gr;m;)L0(v,m),m=cl(m);if($u(v),v.tag===13){if(!w)throw Error(t(316));if(v=v.memoizedState,v=v!==null?v.dehydrated:null,!v)throw Error(t(317));Gr=Ac(v)}else Gr=F0?cl(v.stateNode):null;return!0}function Rr(){w&&(Gr=F0=null,ir=!1)}var Jn=C.ReactCurrentOwner,ai=!1;function o0(v,m,S,O){m.child=v===null?U(m,null,S,O):R(m,v.child,S,O)}function Vr(v,m,S,O,M){S=S.render;var b=m.ref;return io(m,M),O=St(v,m,S,O,b,M),v!==null&&!ai?(m.updateQueue=v.updateQueue,m.effectTag&=-517,v.expirationTime<=M&&(v.expirationTime=0),X0(v,m,M)):(m.effectTag|=1,o0(v,m,O,M),m.child)}function ff(v,m,S,O,M,b){if(v===null){var ee=S.type;return typeof ee=="function"&&!mf(ee)&&ee.defaultProps===void 0&&S.compare===null&&S.defaultProps===void 0?(m.tag=15,m.type=ee,cf(v,m,ee,O,M,b)):(v=Hs(S.type,null,O,null,m.mode,b),v.ref=m.ref,v.return=m,m.child=v)}return ee=v.child,Mm)&&Qn.set(v,m)))}}function Gi(v,m){v.expirationTimev?m:v)}function x0(v){if(v.lastExpiredTime!==0)v.callbackExpirationTime=1073741823,v.callbackPriority=99,v.callbackNode=Ho(Z0.bind(null,v));else{var m=fo(v),S=v.callbackNode;if(m===0)S!==null&&(v.callbackNode=null,v.callbackExpirationTime=0,v.callbackPriority=90);else{var O=g0();if(m===1073741823?O=99:m===1||m===2?O=95:(O=10*(1073741821-m)-10*(1073741821-O),O=0>=O?99:250>=O?98:5250>=O?97:95),S!==null){var M=v.callbackPriority;if(v.callbackExpirationTime===m&&M>=O)return;S!==ju&&uf(S)}v.callbackExpirationTime=m,v.callbackPriority=O,m=m===1073741823?Ho(Z0.bind(null,v)):lu(O,Xu.bind(null,v),{timeout:10*(1073741821-m)-G0()}),v.callbackNode=m}}}function Xu(v,m){if(t0=0,m)return m=g0(),kl(v,m),x0(v),null;var S=fo(v);if(S!==0){if(m=v.callbackNode,(Kt&(Br|zr))!==Fn)throw Error(t(327));if(Ws(),v===X&&S===ye||mu(v,S),Y!==null){var O=Kt;Kt|=Br;var M=ei(v);do try{Ua();break}catch(Ye){Ju(v,Ye)}while(1);if(Wu(),Kt=O,B0.current=M,he===wr)throw m=We,mu(v,S),ao(v,S),x0(v),m;if(Y===null)switch(M=v.finishedWork=v.current.alternate,v.finishedExpirationTime=S,O=he,X=null,O){case lo:case wr:throw Error(t(345));case kn:kl(v,2=S){v.lastPingedTime=S,mu(v,S);break}}if(b=fo(v),b!==0&&b!==S)break;if(O!==0&&O!==S){v.lastPingedTime=O;break}v.timeoutHandle=jt(gu.bind(null,v),M);break}gu(v);break;case hi:if(ao(v,S),O=v.lastSuspendedTime,S===O&&(v.nextKnownPendingLevel=$f(M)),qt&&(M=v.lastPingedTime,M===0||M>=S)){v.lastPingedTime=S,mu(v,S);break}if(M=fo(v),M!==0&&M!==S)break;if(O!==0&&O!==S){v.lastPingedTime=O;break}if(Dt!==1073741823?O=10*(1073741821-Dt)-G0():et===1073741823?O=0:(O=10*(1073741821-et)-5e3,M=G0(),S=10*(1073741821-S)-M,O=M-O,0>O&&(O=0),O=(120>O?120:480>O?480:1080>O?1080:1920>O?1920:3e3>O?3e3:4320>O?4320:1960*Cl(O/1960))-O,S=O?O=0:(M=ee.busyDelayMs|0,b=G0()-(10*(1073741821-b)-(ee.timeoutMs|0||5e3)),O=b<=M?0:M+O-b),10 component higher in the tree to provide a loading indicator or placeholder to display.`+dl(M))}he!==Ai&&(he=kn),b=zs(b,M),Ze=O;do{switch(Ze.tag){case 3:ee=b,Ze.effectTag|=4096,Ze.expirationTime=m;var Ce=pu(Ze,ee,m);bu(Ze,Ce);break e;case 1:ee=b;var ze=Ze.type,Et=Ze.stateNode;if((Ze.effectTag&64)==0&&(typeof ze.getDerivedStateFromError=="function"||Et!==null&&typeof Et.componentDidCatch=="function"&&(Ar===null||!Ar.has(Et)))){Ze.effectTag|=4096,Ze.expirationTime=m;var on=Sl(Ze,ee,m);bu(Ze,on);break e}}Ze=Ze.return}while(Ze!==null)}Y=vu(Y)}catch(sr){m=sr;continue}break}while(1)}function ei(){var v=B0.current;return B0.current=oo,v===null?oo:v}function Yf(v,m){vZt&&(Zt=v)}function ja(){for(;Y!==null;)Y=Ic(Y)}function Ua(){for(;Y!==null&&!_n();)Y=Ic(Y)}function Ic(v){var m=Lc(v.alternate,v,ye);return v.memoizedProps=v.pendingProps,m===null&&(m=vu(v)),hu.current=null,m}function vu(v){Y=v;do{var m=Y.alternate;if(v=Y.return,(Y.effectTag&2048)==0){e:{var S=m;m=Y;var O=ye,M=m.pendingProps;switch(m.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:c0(m.type)&&Ru(m);break;case 3:Fe(m),ks(m),M=m.stateNode,M.pendingContext&&(M.context=M.pendingContext,M.pendingContext=null),(S===null||S.child===null)&&Vo(m)&&ki(m),$r(m);break;case 5:K(m);var b=W(de.current);if(O=m.type,S!==null&&m.stateNode!=null)m0(S,m,O,M,b),S.ref!==m.ref&&(m.effectTag|=128);else if(M){if(S=W(fe.current),Vo(m)){if(M=m,!w)throw Error(t(175));S=Ui(M.stateNode,M.type,M.memoizedProps,b,S,M),M.updateQueue=S,S=S!==null,S&&ki(m)}else{var ee=ne(O,M,b,S,m);Yr(ee,m,!1,!1),m.stateNode=ee,Z(ee,O,M,b,S)&&ki(m)}m.ref!==null&&(m.effectTag|=128)}else if(m.stateNode===null)throw Error(t(166));break;case 6:if(S&&m.stateNode!=null)Tn(S,m,S.memoizedProps,M);else{if(typeof M!="string"&&m.stateNode===null)throw Error(t(166));if(S=W(de.current),b=W(fe.current),Vo(m)){if(S=m,!w)throw Error(t(176));(S=Mr(S.stateNode,S.memoizedProps,S))&&ki(m)}else m.stateNode=Ft(M,S,b,m)}break;case 11:break;case 13:if(kr(xe,m),M=m.memoizedState,(m.effectTag&64)!=0){m.expirationTime=O;break e}M=M!==null,b=!1,S===null?m.memoizedProps.fallback!==void 0&&Vo(m):(O=S.memoizedState,b=O!==null,M||O===null||(O=S.child.sibling,O!==null&&(ee=m.firstEffect,ee!==null?(m.firstEffect=O,O.nextEffect=ee):(m.firstEffect=m.lastEffect=O,O.nextEffect=null),O.effectTag=8))),M&&!b&&(m.mode&2)!=0&&(S===null&&m.memoizedProps.unstable_avoidThisFallback!==!0||(xe.current&1)!=0?he===lo&&(he=T0):((he===lo||he===T0)&&(he=hi),Zt!==0&&X!==null&&(ao(X,ye),$o(X,Zt)))),cr&&M&&(m.effectTag|=4),Yt&&(M||b)&&(m.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:Fe(m),$r(m);break;case 10:fi(m);break;case 9:break;case 14:break;case 17:c0(m.type)&&Ru(m);break;case 19:if(kr(xe,m),M=m.memoizedState,M===null)break;if(b=(m.effectTag&64)!=0,ee=M.rendering,ee===null){if(b)bi(M,!1);else if(he!==lo||S!==null&&(S.effectTag&64)!=0)for(S=m.child;S!==null;){if(ee=je(S),ee!==null){for(m.effectTag|=64,bi(M,!1),S=ee.updateQueue,S!==null&&(m.updateQueue=S,m.effectTag|=4),M.lastEffect===null&&(m.firstEffect=null),m.lastEffect=M.lastEffect,S=O,M=m.child;M!==null;)b=M,O=S,b.effectTag&=2,b.nextEffect=null,b.firstEffect=null,b.lastEffect=null,ee=b.alternate,ee===null?(b.childExpirationTime=0,b.expirationTime=O,b.child=null,b.memoizedProps=null,b.memoizedState=null,b.updateQueue=null,b.dependencies=null):(b.childExpirationTime=ee.childExpirationTime,b.expirationTime=ee.expirationTime,b.child=ee.child,b.memoizedProps=ee.memoizedProps,b.memoizedState=ee.memoizedState,b.updateQueue=ee.updateQueue,O=ee.dependencies,b.dependencies=O===null?null:{expirationTime:O.expirationTime,firstContext:O.firstContext,responders:O.responders}),M=M.sibling;Fr(xe,xe.current&1|2,m),m=m.child;break e}S=S.sibling}}else{if(!b)if(S=je(ee),S!==null){if(m.effectTag|=64,b=!0,S=S.updateQueue,S!==null&&(m.updateQueue=S,m.effectTag|=4),bi(M,!0),M.tail===null&&M.tailMode==="hidden"&&!ee.alternate){m=m.lastEffect=M.lastEffect,m!==null&&(m.nextEffect=null);break}}else G0()>M.tailExpiration&&1M&&(M=O),ee>M&&(M=ee),b=b.sibling;S.childExpirationTime=M}if(m!==null)return m;v!==null&&(v.effectTag&2048)==0&&(v.firstEffect===null&&(v.firstEffect=Y.firstEffect),Y.lastEffect!==null&&(v.lastEffect!==null&&(v.lastEffect.nextEffect=Y.firstEffect),v.lastEffect=Y.lastEffect),1v?m:v}function gu(v){var m=Fs();return zi(99,co.bind(null,v,m)),null}function co(v,m){do Ws();while(dr!==null);if((Kt&(Br|zr))!==Fn)throw Error(t(327));var S=v.finishedWork,O=v.finishedExpirationTime;if(S===null)return null;if(v.finishedWork=null,v.finishedExpirationTime=0,S===v.current)throw Error(t(177));v.callbackNode=null,v.callbackExpirationTime=0,v.callbackPriority=90,v.nextKnownPendingLevel=0;var M=$f(S);if(v.firstPendingTime=M,O<=v.lastSuspendedTime?v.firstSuspendedTime=v.lastSuspendedTime=v.nextKnownPendingLevel=0:O<=v.firstSuspendedTime&&(v.firstSuspendedTime=O-1),O<=v.lastPingedTime&&(v.lastPingedTime=0),O<=v.lastExpiredTime&&(v.lastExpiredTime=0),v===X&&(Y=X=null,ye=0),1=S?mt(v,m,S):(Fr(xe,xe.current&1,m),m=X0(v,m,S),m!==null?m.sibling:null);Fr(xe,xe.current&1,m);break;case 19:if(O=m.childExpirationTime>=S,(v.effectTag&64)!=0){if(O)return $t(v,m,S);m.effectTag|=64}if(M=m.memoizedState,M!==null&&(M.rendering=null,M.tail=null),Fr(xe,xe.current,m),!O)return null}return X0(v,m,S)}ai=!1}}else ai=!1;switch(m.expirationTime=0,m.tag){case 2:if(O=m.type,v!==null&&(v.alternate=null,m.alternate=null,m.effectTag|=2),v=m.pendingProps,M=Lu(m,H0.current),io(m,S),M=St(null,m,O,v,M,S),m.effectTag|=1,typeof M=="object"&&M!==null&&typeof M.render=="function"&&M.$$typeof===void 0){if(m.tag=1,Qt(),c0(O)){var b=!0;wo(m)}else b=!1;m.memoizedState=M.state!==null&&M.state!==void 0?M.state:null;var ee=O.getDerivedStateFromProps;typeof ee=="function"&&Go(m,O,ee,v),M.updater=Gu,m.stateNode=M,M._reactInternalFiber=m,Vu(m,O,v,S),m=Be(null,m,O,!0,b,S)}else m.tag=0,o0(null,m,M,S),m=m.child;return m;case 16:if(M=m.elementType,v!==null&&(v.alternate=null,m.alternate=null,m.effectTag|=2),v=m.pendingProps,Te(M),M._status!==1)throw M._result;switch(M=M._result,m.type=M,b=m.tag=Wa(M),v=I0(M,v),b){case 0:m=K0(null,m,M,v,S);break;case 1:m=ae(null,m,M,v,S);break;case 11:m=Vr(null,m,M,v,S);break;case 14:m=ff(null,m,M,I0(M.type,v),O,S);break;default:throw Error(t(306,M,""))}return m;case 0:return O=m.type,M=m.pendingProps,M=m.elementType===O?M:I0(O,M),K0(v,m,O,M,S);case 1:return O=m.type,M=m.pendingProps,M=m.elementType===O?M:I0(O,M),ae(v,m,O,M,S);case 3:if(Ie(m),O=m.updateQueue,O===null)throw Error(t(282));if(M=m.memoizedState,M=M!==null?M.element:null,P0(m,O,m.pendingProps,null,S),O=m.memoizedState.element,O===M)Rr(),m=X0(v,m,S);else{if((M=m.stateNode.hydrate)&&(w?(Gr=al(m.stateNode.containerInfo),F0=m,M=ir=!0):M=!1),M)for(S=U(m,null,O,S),m.child=S;S;)S.effectTag=S.effectTag&-3|1024,S=S.sibling;else o0(v,m,O,S),Rr();m=m.child}return m;case 5:return Ge(m),v===null&&Co(m),O=m.type,M=m.pendingProps,b=v!==null?v.memoizedProps:null,ee=M.children,at(O,M)?ee=null:b!==null&&at(O,b)&&(m.effectTag|=16),$0(v,m),m.mode&4&&S!==1&&it(O,M)?(m.expirationTime=m.childExpirationTime=1,m=null):(o0(v,m,ee,S),m=m.child),m;case 6:return v===null&&Co(m),null;case 13:return mt(v,m,S);case 4:return ve(m,m.stateNode.containerInfo),O=m.pendingProps,v===null?m.child=R(m,null,O,S):o0(v,m,O,S),m.child;case 11:return O=m.type,M=m.pendingProps,M=m.elementType===O?M:I0(O,M),Vr(v,m,O,M,S);case 7:return o0(v,m,m.pendingProps,S),m.child;case 8:return o0(v,m,m.pendingProps.children,S),m.child;case 12:return o0(v,m,m.pendingProps.children,S),m.child;case 10:e:{if(O=m.type._context,M=m.pendingProps,ee=m.memoizedProps,b=M.value,Ls(m,b),ee!==null){var Ye=ee.value;if(b=Sn(Ye,b)?0:(typeof O._calculateChangedBits=="function"?O._calculateChangedBits(Ye,b):1073741823)|0,b===0){if(ee.children===M.children&&!b0.current){m=X0(v,m,S);break e}}else for(Ye=m.child,Ye!==null&&(Ye.return=m);Ye!==null;){var Ze=Ye.dependencies;if(Ze!==null){ee=Ye.child;for(var ut=Ze.firstContext;ut!==null;){if(ut.context===O&&(ut.observedBits&b)!=0){Ye.tag===1&&(ut=a0(S,null),ut.tag=2,V0(Ye,ut)),Ye.expirationTime=m&&v<=m}function ao(v,m){var S=v.firstSuspendedTime,O=v.lastSuspendedTime;Sm||S===0)&&(v.lastSuspendedTime=m),m<=v.lastPingedTime&&(v.lastPingedTime=0),m<=v.lastExpiredTime&&(v.lastExpiredTime=0)}function $o(v,m){m>v.firstPendingTime&&(v.firstPendingTime=m);var S=v.firstSuspendedTime;S!==0&&(m>=S?v.firstSuspendedTime=v.lastSuspendedTime=v.nextKnownPendingLevel=0:m>=v.lastSuspendedTime&&(v.lastSuspendedTime=m+1),m>v.nextKnownPendingLevel&&(v.nextKnownPendingLevel=m))}function kl(v,m){var S=v.lastExpiredTime;(S===0||S>m)&&(v.lastExpiredTime=m)}function Nc(v){var m=v._reactInternalFiber;if(m===void 0)throw typeof v.render=="function"?Error(t(188)):Error(t(268,Object.keys(v)));return v=Ue(m),v===null?null:v.stateNode}function Al(v,m){v=v.memoizedState,v!==null&&v.dehydrated!==null&&v.retryTime{"use strict";sE.exports=uE()});var cE=Me((db,fE)=>{"use strict";var gN={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};fE.exports=gN});var hE=Me((pb,aE)=>{"use strict";var _N=Object.assign||function(i){for(var u=1;u"}}]),i}(),dE=function(){Ph(i,null,[{key:"fromJS",value:function(f){var c=f.width,g=f.height;return new i(c,g)}}]);function i(u,f){Iy(this,i),this.width=u,this.height=f}return Ph(i,[{key:"fromJS",value:function(f){f(this.width,this.height)}},{key:"toString",value:function(){return""}}]),i}(),pE=function(){function i(u,f){Iy(this,i),this.unit=u,this.value=f}return Ph(i,[{key:"fromJS",value:function(f){f(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case ps.UNIT_POINT:return String(this.value);case ps.UNIT_PERCENT:return this.value+"%";case ps.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),i}();aE.exports=function(i,u){function f(C,A,x){var D=C[A];C[A]=function(){for(var L=arguments.length,N=Array(L),j=0;j1?N-1:0),$=1;$1&&arguments[1]!==void 0?arguments[1]:NaN,x=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,D=arguments.length>3&&arguments[3]!==void 0?arguments[3]:ps.DIRECTION_LTR;return C.call(this,A,x,D)}),_N({Config:u.Config,Node:u.Node,Layout:i("Layout",yN),Size:i("Size",dE),Value:i("Value",pE),getInstanceCount:function(){return u.getInstanceCount.apply(u,arguments)}},ps)}});var mE=Me((exports,module)=>{(function(i,u){typeof define=="function"&&define.amd?define([],function(){return u}):typeof module=="object"&&module.exports?module.exports=u:(i.nbind=i.nbind||{}).init=u})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(i,u){return function(){i&&i.apply(this,arguments);try{Module.ccall("nbind_init")}catch(f){u(f);return}u(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module!="undefined"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof require=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(u,f){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),u=nodePath.normalize(u);var c=nodeFS.readFileSync(u);return f?c:c.toString()},Module.readBinary=function(u){var f=Module.read(u,!0);return f.buffer||(f=new Uint8Array(f)),assert(f.buffer),f},Module.load=function(u){globalEval(read(u))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module!="undefined"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr!="undefined"&&(Module.printErr=printErr),typeof read!="undefined"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(u){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(u));var f=read(u,"binary");return assert(typeof f=="object"),f},typeof scriptArgs!="undefined"?Module.arguments=scriptArgs:typeof arguments!="undefined"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(i,u){quit(i)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(u){var f=new XMLHttpRequest;return f.open("GET",u,!1),f.send(null),f.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(u){var f=new XMLHttpRequest;return f.open("GET",u,!1),f.responseType="arraybuffer",f.send(null),new Uint8Array(f.response)}),Module.readAsync=function(u,f,c){var g=new XMLHttpRequest;g.open("GET",u,!0),g.responseType="arraybuffer",g.onload=function(){g.status==200||g.status==0&&g.response?f(g.response):c()},g.onerror=c,g.send(null)},typeof arguments!="undefined"&&(Module.arguments=arguments),typeof console!="undefined")Module.print||(Module.print=function(u){console.log(u)}),Module.printErr||(Module.printErr=function(u){console.warn(u)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump!="undefined"?function(i){dump(i)}:function(i){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle=="undefined"&&(Module.setWindowTitle=function(i){document.title=i})}else throw"Unknown runtime environment. Where are we?";function globalEval(i){eval.call(null,i)}!Module.load&&Module.read&&(Module.load=function(u){globalEval(Module.read(u))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(i,u){throw u}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(i){return tempRet0=i,i},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(i){STACKTOP=i},getNativeTypeSize:function(i){switch(i){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(i[i.length-1]==="*")return Runtime.QUANTUM_SIZE;if(i[0]==="i"){var u=parseInt(i.substr(1));return assert(u%8==0),u/8}else return 0}}},getNativeFieldSize:function(i){return Math.max(Runtime.getNativeTypeSize(i),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(i,u){return u==="double"||u==="i64"?i&7&&(assert((i&7)==4),i+=4):assert((i&3)==0),i},getAlignSize:function(i,u,f){return!f&&(i=="i64"||i=="double")?8:i?Math.min(u||(i?Runtime.getNativeFieldSize(i):0),Runtime.QUANTUM_SIZE):Math.min(u,8)},dynCall:function(i,u,f){return f&&f.length?Module["dynCall_"+i].apply(null,[u].concat(f)):Module["dynCall_"+i].call(null,u)},functionPointers:[],addFunction:function(i){for(var u=0;u>2],f=(u+i+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=f,f>=TOTAL_MEMORY){var c=enlargeMemory();if(!c)return HEAP32[DYNAMICTOP_PTR>>2]=u,0}return u},alignMemory:function(i,u){var f=i=Math.ceil(i/(u||16))*(u||16);return f},makeBigInt:function(i,u,f){var c=f?+(i>>>0)+ +(u>>>0)*4294967296:+(i>>>0)+ +(u|0)*4294967296;return c},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(i,u){i||abort("Assertion failed: "+u)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(i){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(i){var u=Runtime.stackAlloc(i.length);return writeArrayToMemory(i,u),u},stringToC:function(i){var u=0;if(i!=null&&i!==0){var f=(i.length<<2)+1;u=Runtime.stackAlloc(f),stringToUTF8(i,u,f)}return u}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(u,f,c,g,t){var C=getCFunc(u),A=[],x=0;if(g)for(var D=0;D>0]=u;break;case"i8":HEAP8[i>>0]=u;break;case"i16":HEAP16[i>>1]=u;break;case"i32":HEAP32[i>>2]=u;break;case"i64":tempI64=[u>>>0,(tempDouble=u,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[i>>2]=tempI64[0],HEAP32[i+4>>2]=tempI64[1];break;case"float":HEAPF32[i>>2]=u;break;case"double":HEAPF64[i>>3]=u;break;default:abort("invalid type for setValue: "+f)}}Module.setValue=setValue;function getValue(i,u,f){switch(u=u||"i8",u.charAt(u.length-1)==="*"&&(u="i32"),u){case"i1":return HEAP8[i>>0];case"i8":return HEAP8[i>>0];case"i16":return HEAP16[i>>1];case"i32":return HEAP32[i>>2];case"i64":return HEAP32[i>>2];case"float":return HEAPF32[i>>2];case"double":return HEAPF64[i>>3];default:abort("invalid type for setValue: "+u)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(i,u,f,c){var g,t;typeof i=="number"?(g=!0,t=i):(g=!1,t=i.length);var C=typeof u=="string"?u:null,A;if(f==ALLOC_NONE?A=c:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][f===void 0?ALLOC_STATIC:f](Math.max(t,C?1:u.length)),g){var c=A,x;for(assert((A&3)==0),x=A+(t&~3);c>2]=0;for(x=A+t;c>0]=0;return A}if(C==="i8")return i.subarray||i.slice?HEAPU8.set(i,A):HEAPU8.set(new Uint8Array(i),A),A;for(var D=0,L,N,j;D>0],f|=c,!(c==0&&!u||(g++,u&&g==u)););u||(u=g);var t="";if(f<128){for(var C=1024,A;u>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(i,i+Math.min(u,C))),t=t?t+A:A,i+=C,u-=C;return t}return Module.UTF8ToString(i)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(i){for(var u="";;){var f=HEAP8[i++>>0];if(!f)return u;u+=String.fromCharCode(f)}}Module.AsciiToString=AsciiToString;function stringToAscii(i,u){return writeAsciiToMemory(i,u,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(i,u){for(var f=u;i[f];)++f;if(f-u>16&&i.subarray&&UTF8Decoder)return UTF8Decoder.decode(i.subarray(u,f));for(var c,g,t,C,A,x,D="";;){if(c=i[u++],!c)return D;if(!(c&128)){D+=String.fromCharCode(c);continue}if(g=i[u++]&63,(c&224)==192){D+=String.fromCharCode((c&31)<<6|g);continue}if(t=i[u++]&63,(c&240)==224?c=(c&15)<<12|g<<6|t:(C=i[u++]&63,(c&248)==240?c=(c&7)<<18|g<<12|t<<6|C:(A=i[u++]&63,(c&252)==248?c=(c&3)<<24|g<<18|t<<12|C<<6|A:(x=i[u++]&63,c=(c&1)<<30|g<<24|t<<18|C<<12|A<<6|x))),c<65536)D+=String.fromCharCode(c);else{var L=c-65536;D+=String.fromCharCode(55296|L>>10,56320|L&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(i){return UTF8ArrayToString(HEAPU8,i)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(i,u,f,c){if(!(c>0))return 0;for(var g=f,t=f+c-1,C=0;C=55296&&A<=57343&&(A=65536+((A&1023)<<10)|i.charCodeAt(++C)&1023),A<=127){if(f>=t)break;u[f++]=A}else if(A<=2047){if(f+1>=t)break;u[f++]=192|A>>6,u[f++]=128|A&63}else if(A<=65535){if(f+2>=t)break;u[f++]=224|A>>12,u[f++]=128|A>>6&63,u[f++]=128|A&63}else if(A<=2097151){if(f+3>=t)break;u[f++]=240|A>>18,u[f++]=128|A>>12&63,u[f++]=128|A>>6&63,u[f++]=128|A&63}else if(A<=67108863){if(f+4>=t)break;u[f++]=248|A>>24,u[f++]=128|A>>18&63,u[f++]=128|A>>12&63,u[f++]=128|A>>6&63,u[f++]=128|A&63}else{if(f+5>=t)break;u[f++]=252|A>>30,u[f++]=128|A>>24&63,u[f++]=128|A>>18&63,u[f++]=128|A>>12&63,u[f++]=128|A>>6&63,u[f++]=128|A&63}}return u[f]=0,f-g}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(i,u,f){return stringToUTF8Array(i,HEAPU8,u,f)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(i){for(var u=0,f=0;f=55296&&c<=57343&&(c=65536+((c&1023)<<10)|i.charCodeAt(++f)&1023),c<=127?++u:c<=2047?u+=2:c<=65535?u+=3:c<=2097151?u+=4:c<=67108863?u+=5:u+=6}return u}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):void 0;function demangle(i){var u=Module.___cxa_demangle||Module.__cxa_demangle;if(u){try{var f=i.substr(1),c=lengthBytesUTF8(f)+1,g=_malloc(c);stringToUTF8(f,g,c);var t=_malloc(4),C=u(g,0,0,t);if(getValue(t,"i32")===0&&C)return Pointer_stringify(C)}catch(A){}finally{g&&_free(g),t&&_free(t),C&&_free(C)}return i}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),i}function demangleAll(i){var u=/__Z[\w\d_]+/g;return i.replace(u,function(f){var c=demangle(f);return f===c?f:f+" ["+c+"]"})}function jsStackTrace(){var i=new Error;if(!i.stack){try{throw new Error(0)}catch(u){i=u}if(!i.stack)return"(no stack trace available)"}return i.stack.toString()}function stackTrace(){var i=jsStackTrace();return Module.extraStackTrace&&(i+=` -`+Module.extraStackTrace()),demangleAll(i)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var u=i.shift();if(typeof u=="function"){u();continue}var f=u.func;typeof f=="number"?u.arg===void 0?Module.dynCall_v(f):Module.dynCall_vi(f,u.arg):f(u.arg===void 0?null:u.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(i){__ATPRERUN__.unshift(i)}Module.addOnPreRun=addOnPreRun;function addOnInit(i){__ATINIT__.unshift(i)}Module.addOnInit=addOnInit;function addOnPreMain(i){__ATMAIN__.unshift(i)}Module.addOnPreMain=addOnPreMain;function addOnExit(i){__ATEXIT__.unshift(i)}Module.addOnExit=addOnExit;function addOnPostRun(i){__ATPOSTRUN__.unshift(i)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(i,u,f){var c=f>0?f:lengthBytesUTF8(i)+1,g=new Array(c),t=stringToUTF8Array(i,g,0,g.length);return u&&(g.length=t),g}Module.intArrayFromString=intArrayFromString;function intArrayToString(i){for(var u=[],f=0;f255&&(c&=255),u.push(String.fromCharCode(c))}return u.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(i,u,f){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var c,g;f&&(g=u+lengthBytesUTF8(i),c=HEAP8[g]),stringToUTF8(i,u,Infinity),f&&(HEAP8[g]=c)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(i,u){HEAP8.set(i,u)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(i,u,f){for(var c=0;c>0]=i.charCodeAt(c);f||(HEAP8[u>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function(u,f){var c=u>>>16,g=u&65535,t=f>>>16,C=f&65535;return g*C+(c*C+g*t<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(i){return froundBuffer[0]=i,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(i){i=i>>>0;for(var u=0;u<32;u++)if(i&1<<31-u)return u;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(i){return i<0?Math.ceil(i):Math.floor(i)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(i){return i}function addRunDependency(i){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(i){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var u=dependenciesFulfilled;dependenciesFulfilled=null,u()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(i,u,f,c,g,t,C,A){return _nbind.callbackSignatureList[i].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(i,u,f,c,g,t,C,A){return ASM_CONSTS[i](u,f,c,g,t,C,A)}function _emscripten_asm_const_iiiii(i,u,f,c,g){return ASM_CONSTS[i](u,f,c,g)}function _emscripten_asm_const_iiidddddd(i,u,f,c,g,t,C,A,x){return ASM_CONSTS[i](u,f,c,g,t,C,A,x)}function _emscripten_asm_const_iiididi(i,u,f,c,g,t,C){return ASM_CONSTS[i](u,f,c,g,t,C)}function _emscripten_asm_const_iiii(i,u,f,c){return ASM_CONSTS[i](u,f,c)}function _emscripten_asm_const_iiiid(i,u,f,c,g){return ASM_CONSTS[i](u,f,c,g)}function _emscripten_asm_const_iiiiii(i,u,f,c,g,t){return ASM_CONSTS[i](u,f,c,g,t)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(i,u){__ATEXIT__.unshift({func:i,arg:u})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(i,u,f,c){var g=arguments.length,t=g<3?u:c===null?c=Object.getOwnPropertyDescriptor(u,f):c,C;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")t=Reflect.decorate(i,u,f,c);else for(var A=i.length-1;A>=0;A--)(C=i[A])&&(t=(g<3?C(t):g>3?C(u,f,t):C(u,f))||t);return g>3&&t&&Object.defineProperty(u,f,t),t}function _defineHidden(i){return function(u,f){Object.defineProperty(u,f,{configurable:!1,enumerable:!1,value:i,writable:!0})}}var _nbind={};function __nbind_free_external(i){_nbind.externalList[i].dereference(i)}function __nbind_reference_external(i){_nbind.externalList[i].reference()}function _llvm_stackrestore(i){var u=_llvm_stacksave,f=u.LLVM_SAVEDSTACKS[i];u.LLVM_SAVEDSTACKS.splice(i,1),Runtime.stackRestore(f)}function __nbind_register_pool(i,u,f,c){_nbind.Pool.pageSize=i,_nbind.Pool.usedPtr=u/4,_nbind.Pool.rootPtr=f,_nbind.Pool.pagePtr=c/4,HEAP32[u/4]=16909060,HEAP8[u]==1&&(_nbind.bigEndian=!0),HEAP32[u/4]=0,_nbind.makeTypeKindTbl=(t={},t[1024]=_nbind.PrimitiveType,t[64]=_nbind.Int64Type,t[2048]=_nbind.BindClass,t[3072]=_nbind.BindClassPtr,t[4096]=_nbind.SharedClassPtr,t[5120]=_nbind.ArrayType,t[6144]=_nbind.ArrayType,t[7168]=_nbind.CStringType,t[9216]=_nbind.CallbackType,t[10240]=_nbind.BindType,t),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var g=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});g.proto=Module,_nbind.BindClass.list.push(g);var t}function _emscripten_set_main_loop_timing(i,u){if(Browser.mainLoop.timingMode=i,Browser.mainLoop.timingValue=u,!Browser.mainLoop.func)return 1;if(i==0)Browser.mainLoop.scheduler=function(){var C=Math.max(0,Browser.mainLoop.tickStartTime+u-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,C)},Browser.mainLoop.method="timeout";else if(i==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(i==2){if(!window.setImmediate){let t=function(C){C.source===window&&C.data===c&&(C.stopPropagation(),f.shift()())};var g=t,f=[],c="setimmediate";window.addEventListener("message",t,!0),window.setImmediate=function(A){f.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:c})):window.postMessage(c,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(i,u,f,c,g){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=i,Browser.mainLoop.arg=c;var t;typeof c!="undefined"?t=function(){Module.dynCall_vi(i,c)}:t=function(){Module.dynCall_v(i)};var C=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var x=Date.now(),D=Browser.mainLoop.queue.shift();if(D.func(D.arg),Browser.mainLoop.remainingBlockers){var L=Browser.mainLoop.remainingBlockers,N=L%1==0?L-1:Math.floor(L);D.counted?Browser.mainLoop.remainingBlockers=N:(N=N+.5,Browser.mainLoop.remainingBlockers=(8*L+N)/9)}if(console.log('main loop blocker "'+D.name+'" took '+(Date.now()-x)+" ms"),Browser.mainLoop.updateStatus(),C1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(t),!(C0?_emscripten_set_main_loop_timing(0,1e3/u):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),f)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var i=Browser.mainLoop.timingMode,u=Browser.mainLoop.timingValue,f=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(f,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(i,u),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var i=Module.statusMessage||"Please wait...",u=Browser.mainLoop.remainingBlockers,f=Browser.mainLoop.expectedBlockers;u?u=6;){var Le=J>>Te-6&63;Te-=6,De+=Se[Le]}return Te==2?(De+=Se[(J&3)<<4],De+=me+me):Te==4&&(De+=Se[(J&15)<<2],De+=me),De}h.src="data:audio/x-"+C.substr(-3)+";base64,"+Q(t),L(h)},h.src=$,Browser.safeSetTimeout(function(){L(h)},1e4)}else return N()},Module.preloadPlugins.push(u);function f(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var c=Module.canvas;c&&(c.requestPointerLock=c.requestPointerLock||c.mozRequestPointerLock||c.webkitRequestPointerLock||c.msRequestPointerLock||function(){},c.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},c.exitPointerLock=c.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",f,!1),document.addEventListener("mozpointerlockchange",f,!1),document.addEventListener("webkitpointerlockchange",f,!1),document.addEventListener("mspointerlockchange",f,!1),Module.elementPointerLock&&c.addEventListener("click",function(g){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),g.preventDefault())},!1))},createContext:function(i,u,f,c){if(u&&Module.ctx&&i==Module.canvas)return Module.ctx;var g,t;if(u){var C={antialias:!1,alpha:!1};if(c)for(var A in c)C[A]=c[A];t=GL.createContext(i,C),t&&(g=GL.getContext(t).GLctx)}else g=i.getContext("2d");return g?(f&&(u||assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=g,u&&GL.makeContextCurrent(t),Module.useWebGL=u,Browser.moduleContextCreatedCallbacks.forEach(function(x){x()}),Browser.init()),g):null},destroyContext:function(i,u,f){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(i,u,f){Browser.lockPointer=i,Browser.resizeCanvas=u,Browser.vrDevice=f,typeof Browser.lockPointer=="undefined"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas=="undefined"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice=="undefined"&&(Browser.vrDevice=null);var c=Module.canvas;function g(){Browser.isFullscreen=!1;var C=c.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===C?(c.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},c.exitFullscreen=c.exitFullscreen.bind(document),Browser.lockPointer&&c.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(C.parentNode.insertBefore(c,C),C.parentNode.removeChild(C),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(c)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",g,!1),document.addEventListener("mozfullscreenchange",g,!1),document.addEventListener("webkitfullscreenchange",g,!1),document.addEventListener("MSFullscreenChange",g,!1));var t=document.createElement("div");c.parentNode.insertBefore(t,c),t.appendChild(c),t.requestFullscreen=t.requestFullscreen||t.mozRequestFullScreen||t.msRequestFullscreen||(t.webkitRequestFullscreen?function(){t.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(t.webkitRequestFullScreen?function(){t.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),f?t.requestFullscreen({vrDisplay:f}):t.requestFullscreen()},requestFullScreen:function(i,u,f){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(c,g,t){return Browser.requestFullscreen(c,g,t)},Browser.requestFullscreen(i,u,f)},nextRAF:0,fakeRequestAnimationFrame:function(i){var u=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=u+1e3/60;else for(;u+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var f=Math.max(Browser.nextRAF-u,0);setTimeout(i,f)},requestAnimationFrame:function(u){typeof window=="undefined"?Browser.fakeRequestAnimationFrame(u):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(u))},safeCallback:function(i){return function(){if(!ABORT)return i.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var i=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],i.forEach(function(u){u()})}},safeRequestAnimationFrame:function(i){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?i():Browser.queuedAsyncCallbacks.push(i))})},safeSetTimeout:function(i,u){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?i():Browser.queuedAsyncCallbacks.push(i))},u)},safeSetInterval:function(i,u){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&i()},u)},getMimetype:function(i){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[i.substr(i.lastIndexOf(".")+1)]},getUserMedia:function(i){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(i)},getMovementX:function(i){return i.movementX||i.mozMovementX||i.webkitMovementX||0},getMovementY:function(i){return i.movementY||i.mozMovementY||i.webkitMovementY||0},getMouseWheelDelta:function(i){var u=0;switch(i.type){case"DOMMouseScroll":u=i.detail;break;case"mousewheel":u=i.wheelDelta;break;case"wheel":u=i.deltaY;break;default:throw"unrecognized mouse wheel event: "+i.type}return u},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(i){if(Browser.pointerLock)i.type!="mousemove"&&"mozMovementX"in i?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(i),Browser.mouseMovementY=Browser.getMovementY(i)),typeof SDL!="undefined"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var u=Module.canvas.getBoundingClientRect(),f=Module.canvas.width,c=Module.canvas.height,g=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset,t=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(i.type==="touchstart"||i.type==="touchend"||i.type==="touchmove"){var C=i.touch;if(C===void 0)return;var A=C.pageX-(g+u.left),x=C.pageY-(t+u.top);A=A*(f/u.width),x=x*(c/u.height);var D={x:A,y:x};if(i.type==="touchstart")Browser.lastTouches[C.identifier]=D,Browser.touches[C.identifier]=D;else if(i.type==="touchend"||i.type==="touchmove"){var L=Browser.touches[C.identifier];L||(L=D),Browser.lastTouches[C.identifier]=L,Browser.touches[C.identifier]=D}return}var N=i.pageX-(g+u.left),j=i.pageY-(t+u.top);N=N*(f/u.width),j=j*(c/u.height),Browser.mouseMovementX=N-Browser.mouseX,Browser.mouseMovementY=j-Browser.mouseY,Browser.mouseX=N,Browser.mouseY=j}},asyncLoad:function(i,u,f,c){var g=c?"":getUniqueRunDependency("al "+i);Module.readAsync(i,function(t){assert(t,'Loading data file "'+i+'" failed (no arrayBuffer).'),u(new Uint8Array(t)),g&&removeRunDependency(g)},function(t){if(f)f();else throw'Loading data file "'+i+'" failed.'}),g&&addRunDependency(g)},resizeListeners:[],updateResizeListeners:function(){var i=Module.canvas;Browser.resizeListeners.forEach(function(u){u(i.width,i.height)})},setCanvasSize:function(i,u,f){var c=Module.canvas;Browser.updateCanvasDimensions(c,i,u),f||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var i=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];i=i|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=i}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var i=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];i=i&~8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=i}Browser.updateResizeListeners()},updateCanvasDimensions:function(i,u,f){u&&f?(i.widthNative=u,i.heightNative=f):(u=i.widthNative,f=i.heightNative);var c=u,g=f;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(c/g>2];return u},getStr:function(){var i=Pointer_stringify(SYSCALLS.get());return i},get64:function(){var i=SYSCALLS.get(),u=SYSCALLS.get();return i>=0?assert(u===0):assert(u===-1),i},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(i,u){SYSCALLS.varargs=u;try{var f=SYSCALLS.getStreamFromFD();return FS.close(f),0}catch(c){return(typeof FS=="undefined"||!(c instanceof FS.ErrnoError))&&abort(c),-c.errno}}function ___syscall54(i,u){SYSCALLS.varargs=u;try{return 0}catch(f){return(typeof FS=="undefined"||!(f instanceof FS.ErrnoError))&&abort(f),-f.errno}}function _typeModule(i){var u=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function f(x,D,L,N,j,$){if(D==1){var h=N&896;(h==128||h==256||h==384)&&(x="X const")}var re;return $?re=L.replace("X",x).replace("Y",j):re=x.replace("X",L).replace("Y",j),re.replace(/([*&]) (?=[*&])/g,"$1")}function c(x,D,L,N,j){throw new Error(x+" type "+L.replace("X",D+"?")+(N?" with flag "+N:"")+" in "+j)}function g(x,D,L,N,j,$,h,re){$===void 0&&($="X"),re===void 0&&(re=1);var ce=L(x);if(ce)return ce;var Q=N(x),oe=Q.placeholderFlag,Se=u[oe];h&&Se&&($=f(h[2],h[0],$,Se[0],"?",!0));var me;oe==0&&(me="Unbound"),oe>=10&&(me="Corrupt"),re>20&&(me="Deeply nested"),me&&c(me,x,$,oe,j||"?");var De=Q.paramList[0],J=g(De,D,L,N,j,$,Se,re+1),Te,Oe={flags:Se[0],id:x,name:"",paramList:[J]},Le=[],ot="?";switch(Q.placeholderFlag){case 1:Te=J.spec;break;case 2:if((J.flags&15360)==1024&&J.spec.ptrSize==1){Oe.flags=7168;break}case 3:case 6:case 5:Te=J.spec,(J.flags&15360)!=2048;break;case 8:ot=""+Q.paramList[1],Oe.paramList.push(Q.paramList[1]);break;case 9:for(var ct=0,Ue=Q.paramList[1];ct>2]=i),i}function _llvm_stacksave(){var i=_llvm_stacksave;return i.LLVM_SAVEDSTACKS||(i.LLVM_SAVEDSTACKS=[]),i.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),i.LLVM_SAVEDSTACKS.length-1}function ___syscall140(i,u){SYSCALLS.varargs=u;try{var f=SYSCALLS.getStreamFromFD(),c=SYSCALLS.get(),g=SYSCALLS.get(),t=SYSCALLS.get(),C=SYSCALLS.get(),A=g;return FS.llseek(f,A,C),HEAP32[t>>2]=f.position,f.getdents&&A===0&&C===0&&(f.getdents=null),0}catch(x){return(typeof FS=="undefined"||!(x instanceof FS.ErrnoError))&&abort(x),-x.errno}}function ___syscall146(i,u){SYSCALLS.varargs=u;try{var f=SYSCALLS.get(),c=SYSCALLS.get(),g=SYSCALLS.get(),t=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(L,N){var j=___syscall146.buffers[L];assert(j),N===0||N===10?((L===1?Module.print:Module.printErr)(UTF8ArrayToString(j,0)),j.length=0):j.push(N)});for(var C=0;C>2],x=HEAP32[c+(C*8+4)>>2],D=0;Di.pageSize/2||u>i.pageSize-f){var c=_nbind.typeNameTbl.NBind.proto;return c.lalloc(u)}else return HEAPU32[i.usedPtr]=f+u,i.rootPtr+f},i.lreset=function(u,f){var c=HEAPU32[i.pagePtr];if(c){var g=_nbind.typeNameTbl.NBind.proto;g.lreset(u,f)}else HEAPU32[i.usedPtr]=u},i}();_nbind.Pool=Pool;function constructType(i,u){var f=i==10240?_nbind.makeTypeNameTbl[u.name]||_nbind.BindType:_nbind.makeTypeKindTbl[i],c=new f(u);return typeIdTbl[u.id]=c,_nbind.typeNameTbl[u.name]=c,c}_nbind.constructType=constructType;function getType(i){return typeIdTbl[i]}_nbind.getType=getType;function queryType(i){var u=HEAPU8[i],f=_nbind.structureList[u][1];i/=4,f<0&&(++i,f=HEAPU32[i]+1);var c=Array.prototype.slice.call(HEAPU32.subarray(i+1,i+1+f));return u==9&&(c=[c[0],c.slice(1)]),{paramList:c,placeholderFlag:u}}_nbind.queryType=queryType;function getTypes(i,u){return i.map(function(f){return typeof f=="number"?_nbind.getComplexType(f,constructType,getType,queryType,u):_nbind.typeNameTbl[f]})}_nbind.getTypes=getTypes;function readTypeIdList(i,u){return Array.prototype.slice.call(HEAPU32,i/4,i/4+u)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(i){for(var u=i;HEAPU8[u++];);return String.fromCharCode.apply("",HEAPU8.subarray(i,u-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(i){var u={};if(i)for(;;){var f=HEAPU32[i/4];if(!f)break;u[readAsciiString(f)]=!0,i+=4}return u}_nbind.readPolicyList=readPolicyList;function getDynCall(i,u){var f={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},c=i.map(function(t){return f[t.name]||"i"}).join(""),g=Module["dynCall_"+c];if(!g)throw new Error("dynCall_"+c+" not found for "+u+"("+i.map(function(t){return t.name}).join(", ")+")");return g}_nbind.getDynCall=getDynCall;function addMethod(i,u,f,c){var g=i[u];i.hasOwnProperty(u)&&g?((g.arity||g.arity===0)&&(g=_nbind.makeOverloader(g,g.arity),i[u]=g),g.addMethod(f,c)):(f.arity=c,i[u]=f)}_nbind.addMethod=addMethod;function throwError(i){throw new Error(i)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(i){__extends(u,i);function u(){var f=i!==null&&i.apply(this,arguments)||this;return f.heap=HEAPU32,f.ptrSize=4,f}return u.prototype.needsWireRead=function(f){return!!this.wireRead||!!this.makeWireRead},u.prototype.needsWireWrite=function(f){return!!this.wireWrite||!!this.makeWireWrite},u}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(i){__extends(u,i);function u(f){var c=i.call(this,f)||this,g=f.flags&32?{32:HEAPF32,64:HEAPF64}:f.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return c.heap=g[f.ptrSize*8],c.ptrSize=f.ptrSize,c}return u.prototype.needsWireWrite=function(f){return!!f&&!!f.Strict},u.prototype.makeWireWrite=function(f,c){return c&&c.Strict&&function(g){if(typeof g=="number")return g;throw new Error("Type mismatch")}},u}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(i,u){if(i==null){if(u&&u.Nullable)return 0;throw new Error("Type mismatch")}if(u&&u.Strict){if(typeof i!="string")throw new Error("Type mismatch")}else i=i.toString();var f=Module.lengthBytesUTF8(i)+1,c=_nbind.Pool.lalloc(f);return Module.stringToUTF8Array(i,HEAPU8,c,f),c}_nbind.pushCString=pushCString;function popCString(i){return i===0?null:Module.Pointer_stringify(i)}_nbind.popCString=popCString;var CStringType=function(i){__extends(u,i);function u(){var f=i!==null&&i.apply(this,arguments)||this;return f.wireRead=popCString,f.wireWrite=pushCString,f.readResources=[_nbind.resources.pool],f.writeResources=[_nbind.resources.pool],f}return u.prototype.makeWireWrite=function(f,c){return function(g){return pushCString(g,c)}},u}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(i){__extends(u,i);function u(){var f=i!==null&&i.apply(this,arguments)||this;return f.wireRead=function(c){return!!c},f}return u.prototype.needsWireWrite=function(f){return!!f&&!!f.Strict},u.prototype.makeWireRead=function(f){return"!!("+f+")"},u.prototype.makeWireWrite=function(f,c){return c&&c.Strict&&function(g){if(typeof g=="boolean")return g;throw new Error("Type mismatch")}||f},u}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function i(){}return i.prototype.persist=function(){this.__nbindState|=1},i}();_nbind.Wrapper=Wrapper;function makeBound(i,u){var f=function(c){__extends(g,c);function g(t,C,A,x){var D=c.call(this)||this;if(!(D instanceof g))return new(Function.prototype.bind.apply(g,Array.prototype.concat.apply([null],arguments)));var L=C,N=A,j=x;if(t!==_nbind.ptrMarker){var $=D.__nbindConstructor.apply(D,arguments);L=4096|512,j=HEAPU32[$/4],N=HEAPU32[$/4+1]}var h={configurable:!0,enumerable:!1,value:null,writable:!1},re={__nbindFlags:L,__nbindPtr:N};j&&(re.__nbindShared=j,_nbind.mark(D));for(var ce=0,Q=Object.keys(re);ce>=1;var f=_nbind.valueList[i];return _nbind.valueList[i]=firstFreeValue,firstFreeValue=i,f}else{if(u)return _nbind.popShared(i,u);throw new Error("Invalid value slot "+i)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(i){return typeof i=="number"?i:pushValue(i)*4096+valueBase}function pop64(i){return i=3?C=Buffer.from(t):C=new Buffer(t),C.copy(c)}else getBuffer(c).set(t)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var i=0,u=dirtyList;i>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(i,u,f,c,g,t){try{Module.dynCall_viiiii(i,u,f,c,g,t)}catch(C){if(typeof C!="number"&&C!=="longjmp")throw C;Module.setThrew(1,0)}}function invoke_vif(i,u,f){try{Module.dynCall_vif(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_vid(i,u,f){try{Module.dynCall_vid(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_fiff(i,u,f,c){try{return Module.dynCall_fiff(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_vi(i,u){try{Module.dynCall_vi(i,u)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_vii(i,u,f){try{Module.dynCall_vii(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_ii(i,u){try{return Module.dynCall_ii(i,u)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_viddi(i,u,f,c,g){try{Module.dynCall_viddi(i,u,f,c,g)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}function invoke_vidd(i,u,f,c){try{Module.dynCall_vidd(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_iiii(i,u,f,c){try{return Module.dynCall_iiii(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_diii(i,u,f,c){try{return Module.dynCall_diii(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_di(i,u){try{return Module.dynCall_di(i,u)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_iid(i,u,f){try{return Module.dynCall_iid(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_iii(i,u,f){try{return Module.dynCall_iii(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_viiddi(i,u,f,c,g,t){try{Module.dynCall_viiddi(i,u,f,c,g,t)}catch(C){if(typeof C!="number"&&C!=="longjmp")throw C;Module.setThrew(1,0)}}function invoke_viiiiii(i,u,f,c,g,t,C){try{Module.dynCall_viiiiii(i,u,f,c,g,t,C)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(i,u,f){try{return Module.dynCall_dii(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_i(i){try{return Module.dynCall_i(i)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_iiiiii(i,u,f,c,g,t){try{return Module.dynCall_iiiiii(i,u,f,c,g,t)}catch(C){if(typeof C!="number"&&C!=="longjmp")throw C;Module.setThrew(1,0)}}function invoke_viiid(i,u,f,c,g){try{Module.dynCall_viiid(i,u,f,c,g)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}function invoke_viififi(i,u,f,c,g,t,C){try{Module.dynCall_viififi(i,u,f,c,g,t,C)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(i,u,f,c){try{Module.dynCall_viii(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_v(i){try{Module.dynCall_v(i)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viid(i,u,f,c){try{Module.dynCall_viid(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_idd(i,u,f){try{return Module.dynCall_idd(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_viiii(i,u,f,c,g){try{Module.dynCall_viiii(i,u,f,c,g)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:Infinity},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(i,u,f){var c=new i.Int8Array(f),g=new i.Int16Array(f),t=new i.Int32Array(f),C=new i.Uint8Array(f),A=new i.Uint16Array(f),x=new i.Uint32Array(f),D=new i.Float32Array(f),L=new i.Float64Array(f),N=u.DYNAMICTOP_PTR|0,j=u.tempDoublePtr|0,$=u.ABORT|0,h=u.STACKTOP|0,re=u.STACK_MAX|0,ce=u.cttz_i8|0,Q=u.___dso_handle|0,oe=0,Se=0,me=0,De=0,J=i.NaN,Te=i.Infinity,Oe=0,Le=0,ot=0,ct=0,Ue=0,be=0,At=i.Math.floor,Ot=i.Math.abs,Nt=i.Math.sqrt,Je=i.Math.pow,V=i.Math.cos,ne=i.Math.sin,ge=i.Math.tan,Z=i.Math.acos,Ae=i.Math.asin,at=i.Math.atan,it=i.Math.atan2,Ft=i.Math.exp,jt=i.Math.log,hn=i.Math.ceil,Un=i.Math.imul,Jt=i.Math.min,Yt=i.Math.max,cr=i.Math.clz32,w=i.Math.fround,pt=u.abort,Mn=u.assert,Bn=u.enlargeMemory,Xn=u.getTotalMemory,vr=u.abortOnCannotGrowMemory,gr=u.invoke_viiiii,r0=u.invoke_vif,Ci=u.invoke_vid,yo=u.invoke_fiff,Ds=u.invoke_vi,Mu=u.invoke_vii,Gf=u.invoke_ii,iu=u.invoke_viddi,ou=u.invoke_vidd,ol=u.invoke_iiii,ul=u.invoke_diii,Es=u.invoke_di,Uo=u.invoke_iid,sl=u.invoke_iii,Ss=u.invoke_viiddi,Cs=u.invoke_viiiiii,Ti=u.invoke_dii,Fu=u.invoke_i,ll=u.invoke_iiiiii,fl=u.invoke_viiid,cl=u.invoke_viififi,al=u.invoke_viii,Ui=u.invoke_v,Mr=u.invoke_viid,Ac=u.invoke_idd,of=u.invoke_viiii,Ts=u._emscripten_asm_const_iiiii,xs=u._emscripten_asm_const_iiidddddd,dl=u._emscripten_asm_const_iiiid,qi=u.__nbind_reference_external,qo=u._emscripten_asm_const_iiiiiiii,kr=u._removeAccessorPrefix,Fr=u._typeModule,si=u.__nbind_register_pool,H0=u.__decorate,b0=u._llvm_stackrestore,Bt=u.___cxa_atexit,Lu=u.__extends,c0=u.__nbind_get_value_object,Ru=u.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,ks=u._emscripten_set_main_loop_timing,As=u.__nbind_register_primitive,uu=u.__nbind_register_type,wo=u._emscripten_memcpy_big,zo=u.__nbind_register_function,Os=u.___setErrNo,Is=u.__nbind_register_class,uf=u.__nbind_finish,_n=u._abort,Nu=u._nbind_value,Wo=u._llvm_stacksave,su=u.___syscall54,Ps=u._defineHidden,pl=u._emscripten_set_main_loop,Vf=u._emscripten_get_now,hl=u.__nbind_register_callback_signature,Bu=u._emscripten_asm_const_iiiiii,ju=u.__nbind_free_external,sf=u._emscripten_asm_const_iiii,ro=u._emscripten_asm_const_iiididi,Ms=u.___syscall6,ml=u._atexit,Uu=u.___syscall140,G0=u.___syscall146,Fs=w(0);let tt=w(0);function zi(e){e=e|0;var n=0;return n=h,h=h+e|0,h=h+15&-16,n|0}function lu(){return h|0}function Ho(e){e=e|0,h=e}function O0(e,n){e=e|0,n=n|0,h=e,re=n}function vl(e,n){e=e|0,n=n|0,oe||(oe=e,Se=n)}function gl(e){e=e|0,be=e}function fu(){return be|0}function _l(){var e=0,n=0;vn(8104,8,400)|0,vn(8504,408,540)|0,e=9044,n=e+44|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));c[9088]=0,c[9089]=1,t[2273]=0,t[2274]=948,t[2275]=948,Bt(17,8104,Q|0)|0}function Sn(e){e=e|0,lf(e+948|0)}function gt(e){return e=w(e),((Ar(e)|0)&2147483647)>>>0>2139095040|0}function en(e,n,r){e=e|0,n=n|0,r=r|0;e:do if(t[e+(n<<3)+4>>2]|0)e=e+(n<<3)|0;else{if((n|2|0)==3?t[e+60>>2]|0:0){e=e+56|0;break}switch(n|0){case 0:case 2:case 4:case 5:{if(t[e+52>>2]|0){e=e+48|0;break e}break}default:}if(t[e+68>>2]|0){e=e+64|0;break}else{e=(n|1|0)==5?948:r;break}}while(0);return e|0}function I0(e){e=e|0;var n=0;return n=uh(1e3)|0,li(e,(n|0)!=0,2456),t[2276]=(t[2276]|0)+1,vn(n|0,8104,1e3)|0,c[e+2>>0]|0&&(t[n+4>>2]=2,t[n+12>>2]=4),t[n+976>>2]=e,n|0}function li(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;s=h,h=h+16|0,o=s,n||(t[o>>2]=r,zs(e,5,3197,o)),h=s}function qu(){return I0(956)|0}function Wi(e){e=e|0;var n=0;return n=Tt(1e3)|0,zu(n,e),li(t[e+976>>2]|0,1,2456),t[2276]=(t[2276]|0)+1,t[n+944>>2]=0,n|0}function zu(e,n){e=e|0,n=n|0;var r=0;vn(e|0,n|0,948)|0,af(e+948|0,n+948|0),r=e+960|0,e=n+960|0,n=r+40|0;do t[r>>2]=t[e>>2],r=r+4|0,e=e+4|0;while((r|0)<(n|0))}function Wu(e){e=e|0;var n=0,r=0,o=0,s=0;if(n=e+944|0,r=t[n>>2]|0,r|0&&(Ls(r+948|0,e)|0,t[n>>2]=0),r=fi(e)|0,r|0){n=0;do t[(e0(e,n)|0)+944>>2]=0,n=n+1|0;while((n|0)!=(r|0))}r=e+948|0,o=t[r>>2]|0,s=e+952|0,n=t[s>>2]|0,(n|0)!=(o|0)&&(t[s>>2]=n+(~((n+-4-o|0)>>>2)<<2)),io(r),sh(e),t[2276]=(t[2276]|0)+-1}function Ls(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0;o=t[e>>2]|0,_=e+4|0,r=t[_>>2]|0,l=r;e:do if((o|0)==(r|0))s=o,d=4;else for(e=o;;){if((t[e>>2]|0)==(n|0)){s=e,d=4;break e}if(e=e+4|0,(e|0)==(r|0)){e=0;break}}while(0);return(d|0)==4&&((s|0)!=(r|0)?(o=s+4|0,e=l-o|0,n=e>>2,n&&(Y1(s|0,o|0,e|0)|0,r=t[_>>2]|0),e=s+(n<<2)|0,(r|0)==(e|0)||(t[_>>2]=r+(~((r+-4-e|0)>>>2)<<2)),e=1):e=0),e|0}function fi(e){return e=e|0,(t[e+952>>2]|0)-(t[e+948>>2]|0)>>2|0}function e0(e,n){e=e|0,n=n|0;var r=0;return r=t[e+948>>2]|0,(t[e+952>>2]|0)-r>>2>>>0>n>>>0?e=t[r+(n<<2)>>2]|0:e=0,e|0}function io(e){e=e|0;var n=0,r=0,o=0,s=0;o=h,h=h+32|0,n=o,s=t[e>>2]|0,r=(t[e+4>>2]|0)-s|0,((t[e+8>>2]|0)-s|0)>>>0>r>>>0&&(s=r>>2,z(n,s,s,e+8|0),dr(e,n),Or(n)),h=o}function D0(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;k=fi(e)|0;do if(k|0){if((t[(e0(e,0)|0)+944>>2]|0)==(e|0)){if(!(Ls(e+948|0,n)|0))break;vn(n+400|0,8504,540)|0,t[n+944>>2]=0,ln(e);break}d=t[(t[e+976>>2]|0)+12>>2]|0,_=e+948|0,y=(d|0)==0,r=0,l=0;do o=t[(t[_>>2]|0)+(l<<2)>>2]|0,(o|0)==(n|0)?ln(e):(s=Wi(o)|0,t[(t[_>>2]|0)+(r<<2)>>2]=s,t[s+944>>2]=e,y||Q4[d&15](o,s,e,r),r=r+1|0),l=l+1|0;while((l|0)!=(k|0));if(r>>>0>>0){y=e+948|0,_=e+952|0,d=r,r=t[_>>2]|0;do l=(t[y>>2]|0)+(d<<2)|0,o=l+4|0,s=r-o|0,n=s>>2,n&&(Y1(l|0,o|0,s|0)|0,r=t[_>>2]|0),s=r,o=l+(n<<2)|0,(s|0)!=(o|0)&&(r=s+(~((s+-4-o|0)>>>2)<<2)|0,t[_>>2]=r),d=d+1|0;while((d|0)!=(k|0))}}while(0)}function Do(e){e=e|0;var n=0,r=0,o=0,s=0;i0(e,(fi(e)|0)==0,2491),i0(e,(t[e+944>>2]|0)==0,2545),n=e+948|0,r=t[n>>2]|0,o=e+952|0,s=t[o>>2]|0,(s|0)!=(r|0)&&(t[o>>2]=s+(~((s+-4-r|0)>>>2)<<2)),io(n),n=e+976|0,r=t[n>>2]|0,vn(e|0,8104,1e3)|0,c[r+2>>0]|0&&(t[e+4>>2]=2,t[e+12>>2]=4),t[n>>2]=r}function i0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;s=h,h=h+16|0,o=s,n||(t[o>>2]=r,wn(e,5,3197,o)),h=s}function Rs(){return t[2276]|0}function a0(){var e=0;return e=uh(20)|0,Hu((e|0)!=0,2592),t[2277]=(t[2277]|0)+1,t[e>>2]=t[239],t[e+4>>2]=t[240],t[e+8>>2]=t[241],t[e+12>>2]=t[242],t[e+16>>2]=t[243],e|0}function Hu(e,n){e=e|0,n=n|0;var r=0,o=0;o=h,h=h+16|0,r=o,e||(t[r>>2]=n,wn(0,5,3197,r)),h=o}function V0(e){e=e|0,sh(e),t[2277]=(t[2277]|0)+-1}function bu(e,n){e=e|0,n=n|0;var r=0;n?(i0(e,(fi(e)|0)==0,2629),r=1):(r=0,n=0),t[e+964>>2]=n,t[e+988>>2]=r}function Ns(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,l=o+8|0,s=o+4|0,d=o,t[s>>2]=n,i0(e,(t[n+944>>2]|0)==0,2709),i0(e,(t[e+964>>2]|0)==0,2763),bo(e),n=e+948|0,t[d>>2]=(t[n>>2]|0)+(r<<2),t[l>>2]=t[d>>2],P0(n,l,s)|0,t[(t[s>>2]|0)+944>>2]=e,ln(e),h=o}function bo(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;if(r=fi(e)|0,r|0?(t[(e0(e,0)|0)+944>>2]|0)!=(e|0):0){o=t[(t[e+976>>2]|0)+12>>2]|0,s=e+948|0,l=(o|0)==0,n=0;do d=t[(t[s>>2]|0)+(n<<2)>>2]|0,_=Wi(d)|0,t[(t[s>>2]|0)+(n<<2)>>2]=_,t[_+944>>2]=e,l||Q4[o&15](d,_,e,n),n=n+1|0;while((n|0)!=(r|0))}}function P0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0;Pe=h,h=h+64|0,P=Pe+52|0,_=Pe+48|0,q=Pe+28|0,we=Pe+24|0,le=Pe+20|0,ie=Pe,o=t[e>>2]|0,l=o,n=o+((t[n>>2]|0)-l>>2<<2)|0,o=e+4|0,s=t[o>>2]|0,d=e+8|0;do if(s>>>0<(t[d>>2]|0)>>>0){if((n|0)==(s|0)){t[n>>2]=t[r>>2],t[o>>2]=(t[o>>2]|0)+4;break}Qn(e,n,s,n+4|0),n>>>0<=r>>>0&&(r=(t[o>>2]|0)>>>0>r>>>0?r+4|0:r),t[n>>2]=t[r>>2]}else{o=(s-l>>2)+1|0,s=Q0(e)|0,s>>>0>>0&&$n(e),T=t[e>>2]|0,k=(t[d>>2]|0)-T|0,l=k>>1,z(ie,k>>2>>>0>>1>>>0?l>>>0>>0?o:l:s,n-T>>2,e+8|0),T=ie+8|0,o=t[T>>2]|0,l=ie+12|0,k=t[l>>2]|0,d=k,y=o;do if((o|0)==(k|0)){if(k=ie+4|0,o=t[k>>2]|0,ke=t[ie>>2]|0,s=ke,o>>>0<=ke>>>0){o=d-s>>1,o=(o|0)==0?1:o,z(q,o,o>>>2,t[ie+16>>2]|0),t[we>>2]=t[k>>2],t[le>>2]=t[T>>2],t[_>>2]=t[we>>2],t[P>>2]=t[le>>2],s0(q,_,P),o=t[ie>>2]|0,t[ie>>2]=t[q>>2],t[q>>2]=o,o=q+4|0,ke=t[k>>2]|0,t[k>>2]=t[o>>2],t[o>>2]=ke,o=q+8|0,ke=t[T>>2]|0,t[T>>2]=t[o>>2],t[o>>2]=ke,o=q+12|0,ke=t[l>>2]|0,t[l>>2]=t[o>>2],t[o>>2]=ke,Or(q),o=t[T>>2]|0;break}l=o,d=((l-s>>2)+1|0)/-2|0,_=o+(d<<2)|0,s=y-l|0,l=s>>2,l&&(Y1(_|0,o|0,s|0)|0,o=t[k>>2]|0),ke=_+(l<<2)|0,t[T>>2]=ke,t[k>>2]=o+(d<<2),o=ke}while(0);t[o>>2]=t[r>>2],t[T>>2]=(t[T>>2]|0)+4,n=nn(e,ie,n)|0,Or(ie)}while(0);return h=Pe,n|0}function ln(e){e=e|0;var n=0;do{if(n=e+984|0,c[n>>0]|0)break;c[n>>0]=1,D[e+504>>2]=w(J),e=t[e+944>>2]|0}while((e|0)!=0)}function lf(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-o|0)>>>2)<<2)),Ve(r))}function nr(e){return e=e|0,t[e+944>>2]|0}function rr(e){e=e|0,i0(e,(t[e+964>>2]|0)!=0,2832),ln(e)}function Go(e){return e=e|0,(c[e+984>>0]|0)!=0|0}function Gu(e,n){e=e|0,n=n|0,fL(e,n,400)|0&&(vn(e|0,n|0,400)|0,ln(e))}function yl(e){e=e|0;var n=tt;return n=w(D[e+44>>2]),e=gt(n)|0,w(e?w(0):n)}function cu(e){e=e|0;var n=tt;return n=w(D[e+48>>2]),gt(n)|0&&(n=c[(t[e+976>>2]|0)+2>>0]|0?w(1):w(0)),w(n)}function Bs(e,n){e=e|0,n=n|0,t[e+980>>2]=n}function Vu(e){return e=e|0,t[e+980>>2]|0}function M0(e,n){e=e|0,n=n|0;var r=0;r=e+4|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function au(e){return e=e|0,t[e+4>>2]|0}function Lr(e,n){e=e|0,n=n|0;var r=0;r=e+8|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function F(e){return e=e|0,t[e+8>>2]|0}function R(e,n){e=e|0,n=n|0;var r=0;r=e+12|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function U(e){return e=e|0,t[e+12>>2]|0}function H(e,n){e=e|0,n=n|0;var r=0;r=e+16|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function fe(e){return e=e|0,t[e+16>>2]|0}function ue(e,n){e=e|0,n=n|0;var r=0;r=e+20|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function de(e){return e=e|0,t[e+20>>2]|0}function W(e,n){e=e|0,n=n|0;var r=0;r=e+24|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function ve(e){return e=e|0,t[e+24>>2]|0}function Fe(e,n){e=e|0,n=n|0;var r=0;r=e+28|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function Ge(e){return e=e|0,t[e+28>>2]|0}function K(e,n){e=e|0,n=n|0;var r=0;r=e+32|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function xe(e){return e=e|0,t[e+32>>2]|0}function je(e,n){e=e|0,n=n|0;var r=0;r=e+36|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function Xe(e){return e=e|0,t[e+36>>2]|0}function rt(e,n){e=e|0,n=w(n);var r=0;r=e+40|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function st(e,n){e=e|0,n=w(n);var r=0;r=e+44|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function xt(e,n){e=e|0,n=w(n);var r=0;r=e+48|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function wt(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+52|0,s=e+56|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function lt(e,n){e=e|0,n=w(n);var r=0,o=0;o=e+52|0,r=e+56|0,(w(D[o>>2])==n?(t[r>>2]|0)==2:0)||(D[o>>2]=n,o=gt(n)|0,t[r>>2]=o?3:2,ln(e))}function Rt(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+52|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function yn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+132+(n<<3)|0,n=e+132+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function sn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=l?0:2,s=e+132+(n<<3)|0,n=e+132+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function ar(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=n+132+(r<<3)|0,n=t[o+4>>2]|0,r=e,t[r>>2]=t[o>>2],t[r+4>>2]=n}function rn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+60+(n<<3)|0,n=e+60+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function Hn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=l?0:2,s=e+60+(n<<3)|0,n=e+60+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function d0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=n+60+(r<<3)|0,n=t[o+4>>2]|0,r=e,t[r>>2]=t[o>>2],t[r+4>>2]=n}function Cr(e,n){e=e|0,n=n|0;var r=0;r=e+60+(n<<3)+4|0,(t[r>>2]|0)!=3&&(D[e+60+(n<<3)>>2]=w(J),t[r>>2]=3,ln(e))}function He(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+204+(n<<3)|0,n=e+204+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function Qe(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=l?0:2,s=e+204+(n<<3)|0,n=e+204+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function Ne(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=n+204+(r<<3)|0,n=t[o+4>>2]|0,r=e,t[r>>2]=t[o>>2],t[r+4>>2]=n}function ft(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+276+(n<<3)|0,n=e+276+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function St(e,n){return e=e|0,n=n|0,w(D[e+276+(n<<3)>>2])}function Qt(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+348|0,s=e+352|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Cn(e,n){e=e|0,n=w(n);var r=0,o=0;o=e+348|0,r=e+352|0,(w(D[o>>2])==n?(t[r>>2]|0)==2:0)||(D[o>>2]=n,o=gt(n)|0,t[r>>2]=o?3:2,ln(e))}function bn(e){e=e|0;var n=0;n=e+352|0,(t[n>>2]|0)!=3&&(D[e+348>>2]=w(J),t[n>>2]=3,ln(e))}function p0(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+348|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function h0(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+356|0,s=e+360|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function ci(e,n){e=e|0,n=w(n);var r=0,o=0;o=e+356|0,r=e+360|0,(w(D[o>>2])==n?(t[r>>2]|0)==2:0)||(D[o>>2]=n,o=gt(n)|0,t[r>>2]=o?3:2,ln(e))}function xi(e){e=e|0;var n=0;n=e+360|0,(t[n>>2]|0)!=3&&(D[e+356>>2]=w(J),t[n>>2]=3,ln(e))}function E0(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+356|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function qr(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+364|0,s=e+368|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Eo(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+364|0,s=e+368|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function So(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+364|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function wl(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+372|0,s=e+376|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function js(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+372|0,s=e+376|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Dl(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+372|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function du(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+380|0,s=e+384|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Yu(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+380|0,s=e+384|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Us(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+380|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function oo(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+388|0,s=e+392|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Hi(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+388|0,s=e+392|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function qs(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+388|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function F0(e,n){e=e|0,n=w(n);var r=0;r=e+396|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function Gr(e){return e=e|0,w(D[e+396>>2])}function ir(e){return e=e|0,w(D[e+400>>2])}function L0(e){return e=e|0,w(D[e+404>>2])}function Y0(e){return e=e|0,w(D[e+408>>2])}function Co(e){return e=e|0,w(D[e+412>>2])}function $u(e){return e=e|0,w(D[e+416>>2])}function Vo(e){return e=e|0,w(D[e+420>>2])}function Rr(e,n){switch(e=e|0,n=n|0,i0(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(D[e+424+(n<<2)>>2])}function Jn(e,n){switch(e=e|0,n=n|0,i0(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(D[e+448+(n<<2)>>2])}function ai(e,n){switch(e=e|0,n=n|0,i0(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(D[e+472+(n<<2)>>2])}function o0(e,n){e=e|0,n=n|0;var r=0,o=tt;return r=t[e+4>>2]|0,(r|0)==(t[n+4>>2]|0)?r?(o=w(D[e>>2]),e=w(Ot(w(o-w(D[n>>2]))))>2]=0,t[o+4>>2]=0,t[o+8>>2]=0,Ru(o|0,e|0,n|0,0),wn(e,3,(c[o+11>>0]|0)<0?t[o>>2]|0:o,r),ML(o),h=r}function $0(e,n,r,o){e=w(e),n=w(n),r=r|0,o=o|0;var s=tt;e=w(e*n),s=w(V4(e,w(1)));do if(Vr(s,w(0))|0)e=w(e-s);else{if(e=w(e-s),Vr(s,w(1))|0){e=w(e+w(1));break}if(r){e=w(e+w(1));break}o||(s>w(.5)?s=w(1):(o=Vr(s,w(.5))|0,s=w(o?1:0)),e=w(e+s))}while(0);return w(e/n)}function K0(e,n,r,o,s,l,d,_,y,k,T,P,q){e=e|0,n=w(n),r=r|0,o=w(o),s=s|0,l=w(l),d=d|0,_=w(_),y=w(y),k=w(k),T=w(T),P=w(P),q=q|0;var we=0,le=tt,ie=tt,Pe=tt,ke=tt,qe=tt,pe=tt;return y>2]),le!=w(0)):0)?(Pe=w($0(n,le,0,0)),ke=w($0(o,le,0,0)),ie=w($0(l,le,0,0)),le=w($0(_,le,0,0))):(ie=l,Pe=n,le=_,ke=o),(s|0)==(e|0)?we=Vr(ie,Pe)|0:we=0,(d|0)==(r|0)?q=Vr(le,ke)|0:q=0,((we?0:(qe=w(n-T),!(ae(e,qe,y)|0)))?!(Be(e,qe,s,y)|0):0)?we=Ie(e,qe,s,l,y)|0:we=1,((q?0:(pe=w(o-P),!(ae(r,pe,k)|0)))?!(Be(r,pe,d,k)|0):0)?q=Ie(r,pe,d,_,k)|0:q=1,q=we&q),q|0}function ae(e,n,r){return e=e|0,n=w(n),r=w(r),(e|0)==1?e=Vr(n,r)|0:e=0,e|0}function Be(e,n,r,o){return e=e|0,n=w(n),r=r|0,o=w(o),(e|0)==2&(r|0)==0?n>=o?e=1:e=Vr(n,o)|0:e=0,e|0}function Ie(e,n,r,o,s){return e=e|0,n=w(n),r=r|0,o=w(o),s=w(s),(e|0)==2&(r|0)==2&o>n?s<=n?e=1:e=Vr(n,s)|0:e=0,e|0}function ht(e,n,r,o,s,l,d,_,y,k,T){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=l|0,d=w(d),_=w(_),y=y|0,k=k|0,T=T|0;var P=0,q=0,we=0,le=0,ie=tt,Pe=tt,ke=0,qe=0,pe=0,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=tt,Ki=tt,Xi=tt,Ji=0,Ro=0;zt=h,h=h+160|0,It=zt+152|0,Ht=zt+120|0,Ln=zt+104|0,pe=zt+72|0,le=zt+56|0,vt=zt+8|0,qe=zt,_e=(t[2279]|0)+1|0,t[2279]=_e,gn=e+984|0,((c[gn>>0]|0)!=0?(t[e+512>>2]|0)!=(t[2278]|0):0)?ke=4:(t[e+516>>2]|0)==(o|0)?Pn=0:ke=4,(ke|0)==4&&(t[e+520>>2]=0,t[e+924>>2]=-1,t[e+928>>2]=-1,D[e+932>>2]=w(-1),D[e+936>>2]=w(-1),Pn=1);e:do if(t[e+964>>2]|0)if(ie=w(mt(e,2,d)),Pe=w(mt(e,0,d)),P=e+916|0,Xi=w(D[P>>2]),Ki=w(D[e+920>>2]),Dr=w(D[e+932>>2]),K0(s,n,l,r,t[e+924>>2]|0,Xi,t[e+928>>2]|0,Ki,Dr,w(D[e+936>>2]),ie,Pe,T)|0)ke=22;else if(we=t[e+520>>2]|0,!we)ke=21;else for(q=0;;){if(P=e+524+(q*24|0)|0,Dr=w(D[P>>2]),Ki=w(D[e+524+(q*24|0)+4>>2]),Xi=w(D[e+524+(q*24|0)+16>>2]),K0(s,n,l,r,t[e+524+(q*24|0)+8>>2]|0,Dr,t[e+524+(q*24|0)+12>>2]|0,Ki,Xi,w(D[e+524+(q*24|0)+20>>2]),ie,Pe,T)|0){ke=22;break e}if(q=q+1|0,q>>>0>=we>>>0){ke=21;break}}else{if(y){if(P=e+916|0,!(Vr(w(D[P>>2]),n)|0)){ke=21;break}if(!(Vr(w(D[e+920>>2]),r)|0)){ke=21;break}if((t[e+924>>2]|0)!=(s|0)){ke=21;break}P=(t[e+928>>2]|0)==(l|0)?P:0,ke=22;break}if(we=t[e+520>>2]|0,!we)ke=21;else for(q=0;;){if(P=e+524+(q*24|0)|0,((Vr(w(D[P>>2]),n)|0?Vr(w(D[e+524+(q*24|0)+4>>2]),r)|0:0)?(t[e+524+(q*24|0)+8>>2]|0)==(s|0):0)?(t[e+524+(q*24|0)+12>>2]|0)==(l|0):0){ke=22;break e}if(q=q+1|0,q>>>0>=we>>>0){ke=21;break}}}while(0);do if((ke|0)==21)c[11697]|0?(P=0,ke=28):(P=0,ke=31);else if((ke|0)==22){if(q=(c[11697]|0)!=0,!((P|0)!=0&(Pn^1)))if(q){ke=28;break}else{ke=31;break}le=P+16|0,t[e+908>>2]=t[le>>2],we=P+20|0,t[e+912>>2]=t[we>>2],(c[11698]|0)==0|q^1||(t[qe>>2]=Gn(_e)|0,t[qe+4>>2]=_e,wn(e,4,2972,qe),q=t[e+972>>2]|0,q|0&&Nl[q&127](e),s=$t(s,y)|0,l=$t(l,y)|0,Ro=+w(D[le>>2]),Ji=+w(D[we>>2]),t[vt>>2]=s,t[vt+4>>2]=l,L[vt+8>>3]=+n,L[vt+16>>3]=+r,L[vt+24>>3]=Ro,L[vt+32>>3]=Ji,t[vt+40>>2]=k,wn(e,4,2989,vt))}while(0);return(ke|0)==28&&(q=Gn(_e)|0,t[le>>2]=q,t[le+4>>2]=_e,t[le+8>>2]=Pn?3047:11699,wn(e,4,3038,le),q=t[e+972>>2]|0,q|0&&Nl[q&127](e),vt=$t(s,y)|0,ke=$t(l,y)|0,t[pe>>2]=vt,t[pe+4>>2]=ke,L[pe+8>>3]=+n,L[pe+16>>3]=+r,t[pe+24>>2]=k,wn(e,4,3049,pe),ke=31),(ke|0)==31&&(X0(e,n,r,o,s,l,d,_,y,T),c[11697]|0&&(q=t[2279]|0,vt=Gn(q)|0,t[Ln>>2]=vt,t[Ln+4>>2]=q,t[Ln+8>>2]=Pn?3047:11699,wn(e,4,3083,Ln),q=t[e+972>>2]|0,q|0&&Nl[q&127](e),vt=$t(s,y)|0,Ln=$t(l,y)|0,Ji=+w(D[e+908>>2]),Ro=+w(D[e+912>>2]),t[Ht>>2]=vt,t[Ht+4>>2]=Ln,L[Ht+8>>3]=Ji,L[Ht+16>>3]=Ro,t[Ht+24>>2]=k,wn(e,4,3092,Ht)),t[e+516>>2]=o,P||(q=e+520|0,P=t[q>>2]|0,(P|0)==16&&(c[11697]|0&&wn(e,4,3124,It),t[q>>2]=0,P=0),y?P=e+916|0:(t[q>>2]=P+1,P=e+524+(P*24|0)|0),D[P>>2]=n,D[P+4>>2]=r,t[P+8>>2]=s,t[P+12>>2]=l,t[P+16>>2]=t[e+908>>2],t[P+20>>2]=t[e+912>>2],P=0)),y&&(t[e+416>>2]=t[e+908>>2],t[e+420>>2]=t[e+912>>2],c[e+985>>0]=1,c[gn>>0]=0),t[2279]=(t[2279]|0)+-1,t[e+512>>2]=t[2278],h=zt,Pn|(P|0)==0|0}function mt(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return o=w(Tr(e,n,r)),w(o+w(R0(e,n,r)))}function wn(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=h,h=h+16|0,s=l,t[s>>2]=o,e?o=t[e+976>>2]|0:o=0,Ku(o,e,n,r,s),h=l}function Gn(e){return e=e|0,(e>>>0>60?3201:3201+(60-e)|0)|0}function $t(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;return s=h,h=h+32|0,r=s+12|0,o=s,t[r>>2]=t[254],t[r+4>>2]=t[255],t[r+8>>2]=t[256],t[o>>2]=t[257],t[o+4>>2]=t[258],t[o+8>>2]=t[259],(e|0)>2?e=11699:e=t[(n?o:r)+(e<<2)>>2]|0,h=s,e|0}function X0(e,n,r,o,s,l,d,_,y,k){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=l|0,d=w(d),_=w(_),y=y|0,k=k|0;var T=0,P=0,q=0,we=0,le=tt,ie=tt,Pe=tt,ke=tt,qe=tt,pe=tt,_e=tt,vt=0,Ln=0,Ht=0,It=tt,gn=tt,Pn=0,zt=tt,Dr=0,Ki=0,Xi=0,Ji=0,Ro=0,kf=0,Af=0,Cu=0,Of=0,Js=0,Qs=0,If=0,Pf=0,Mf=0,Kn=0,Tu=0,Ff=0,us=0,Lf=tt,Rf=tt,Zs=tt,el=tt,ss=tt,Fi=0,nu=0,go=0,xu=0,jl=0,Ul=tt,tl=tt,ql=tt,zl=tt,Li=tt,Di=tt,ku=0,xr=tt,Wl=tt,Qi=tt,ls=tt,Zi=tt,fs=tt,Hl=0,bl=0,cs=tt,Ri=tt,Au=0,Gl=0,Vl=0,Yl=0,En=tt,br=0,Ei=0,eo=0,Ni=0,xn=0,Vt=0,Ou=0,kt=tt,$l=0,Qr=0;Ou=h,h=h+16|0,Fi=Ou+12|0,nu=Ou+8|0,go=Ou+4|0,xu=Ou,i0(e,(s|0)==0|(gt(n)|0)^1,3326),i0(e,(l|0)==0|(gt(r)|0)^1,3406),Ei=so(e,o)|0,t[e+496>>2]=Ei,xn=N0(2,Ei)|0,Vt=N0(0,Ei)|0,D[e+440>>2]=w(Tr(e,xn,d)),D[e+444>>2]=w(R0(e,xn,d)),D[e+428>>2]=w(Tr(e,Vt,d)),D[e+436>>2]=w(R0(e,Vt,d)),D[e+464>>2]=w(C0(e,xn)),D[e+468>>2]=w(di(e,xn)),D[e+452>>2]=w(C0(e,Vt)),D[e+460>>2]=w(di(e,Vt)),D[e+488>>2]=w(u0(e,xn,d)),D[e+492>>2]=w(v0(e,xn,d)),D[e+476>>2]=w(u0(e,Vt,d)),D[e+484>>2]=w(v0(e,Vt,d));do if(t[e+964>>2]|0)To(e,n,r,s,l,d,_);else{if(eo=e+948|0,Ni=(t[e+952>>2]|0)-(t[eo>>2]|0)>>2,!Ni){pu(e,n,r,s,l,d,_);break}if(y?0:Sl(e,n,r,s,l,d,_)|0)break;bo(e),Tu=e+508|0,c[Tu>>0]=0,xn=N0(t[e+4>>2]|0,Ei)|0,Vt=Cl(xn,Ei)|0,br=Nr(xn)|0,Ff=t[e+8>>2]|0,Gl=e+28|0,us=(t[Gl>>2]|0)!=0,Zi=br?d:_,cs=br?_:d,Lf=w(B0(e,xn,d)),Rf=w(hu(e,xn,d)),le=w(B0(e,Vt,d)),fs=w(Fn(e,xn,d)),Ri=w(Fn(e,Vt,d)),Ht=br?s:l,Au=br?l:s,En=br?fs:Ri,qe=br?Ri:fs,ls=w(mt(e,2,d)),ke=w(mt(e,0,d)),ie=w(w(Tn(e+364|0,d))-En),Pe=w(w(Tn(e+380|0,d))-En),pe=w(w(Tn(e+372|0,_))-qe),_e=w(w(Tn(e+388|0,_))-qe),Zs=br?ie:pe,el=br?Pe:_e,ls=w(n-ls),n=w(ls-En),gt(n)|0?En=n:En=w(Ur(w(cc(n,Pe)),ie)),Wl=w(r-ke),n=w(Wl-qe),gt(n)|0?Qi=n:Qi=w(Ur(w(cc(n,_e)),pe)),ie=br?En:Qi,xr=br?Qi:En;e:do if((Ht|0)==1)for(o=0,P=0;;){if(T=e0(e,P)|0,!o)(w(Br(T))>w(0)?w(zr(T))>w(0):0)?o=T:o=0;else if(pi(T)|0){we=0;break e}if(P=P+1|0,P>>>0>=Ni>>>0){we=o;break}}else we=0;while(0);vt=we+500|0,Ln=we+504|0,o=0,T=0,n=w(0),q=0;do{if(P=t[(t[eo>>2]|0)+(q<<2)>>2]|0,(t[P+36>>2]|0)==1)lo(P),c[P+985>>0]=1,c[P+984>>0]=0;else{$r(P),y&&Yo(P,so(P,Ei)|0,ie,xr,En);do if((t[P+24>>2]|0)!=1)if((P|0)==(we|0)){t[vt>>2]=t[2278],D[Ln>>2]=w(0);break}else{wr(e,P,En,s,Qi,En,Qi,l,Ei,k);break}else T|0&&(t[T+960>>2]=P),t[P+960>>2]=0,T=P,o=(o|0)==0?P:o;while(0);Di=w(D[P+504>>2]),n=w(n+w(Di+w(mt(P,xn,En))))}q=q+1|0}while((q|0)!=(Ni|0));for(Xi=n>ie,ku=us&((Ht|0)==2&Xi)?1:Ht,Dr=(Au|0)==1,Ro=Dr&(y^1),kf=(ku|0)==1,Af=(ku|0)==2,Cu=976+(xn<<2)|0,Of=(Au|2|0)==2,Mf=Dr&(us^1),Js=1040+(Vt<<2)|0,Qs=1040+(xn<<2)|0,If=976+(Vt<<2)|0,Pf=(Au|0)!=1,Xi=us&((Ht|0)!=0&Xi),Ki=e+976|0,Dr=Dr^1,n=ie,Pn=0,Ji=0,Di=w(0),ss=w(0);;){e:do if(Pn>>>0>>0)for(Ln=t[eo>>2]|0,q=0,_e=w(0),pe=w(0),Pe=w(0),ie=w(0),P=0,T=0,we=Pn;;){if(vt=t[Ln+(we<<2)>>2]|0,(t[vt+36>>2]|0)!=1?(t[vt+940>>2]=Ji,(t[vt+24>>2]|0)!=1):0){if(ke=w(mt(vt,xn,En)),Kn=t[Cu>>2]|0,r=w(Tn(vt+380+(Kn<<3)|0,Zi)),qe=w(D[vt+504>>2]),r=w(cc(r,qe)),r=w(Ur(w(Tn(vt+364+(Kn<<3)|0,Zi)),r)),us&(q|0)!=0&w(ke+w(pe+r))>n){l=q,ke=_e,Ht=we;break e}ke=w(ke+r),r=w(pe+ke),ke=w(_e+ke),pi(vt)|0&&(Pe=w(Pe+w(Br(vt))),ie=w(ie-w(qe*w(zr(vt))))),T|0&&(t[T+960>>2]=vt),t[vt+960>>2]=0,q=q+1|0,T=vt,P=(P|0)==0?vt:P}else ke=_e,r=pe;if(we=we+1|0,we>>>0>>0)_e=ke,pe=r;else{l=q,Ht=we;break}}else l=0,ke=w(0),Pe=w(0),ie=w(0),P=0,Ht=Pn;while(0);Kn=Pe>w(0)&Pew(0)&ieel&((gt(el)|0)^1))n=el,Kn=51;else if(c[(t[Ki>>2]|0)+3>>0]|0)Kn=51;else{if(It!=w(0)?w(Br(e))!=w(0):0){Kn=53;break}n=ke,Kn=53}while(0);if((Kn|0)==51&&(Kn=0,gt(n)|0?Kn=53:(gn=w(n-ke),zt=n)),(Kn|0)==53&&(Kn=0,ke>2]|0,we=gnw(0),pe=w(gn/It),Pe=w(0),ke=w(0),n=w(0),T=P;do r=w(Tn(T+380+(q<<3)|0,Zi)),ie=w(Tn(T+364+(q<<3)|0,Zi)),ie=w(cc(r,w(Ur(ie,w(D[T+504>>2]))))),we?(r=w(ie*w(zr(T))),(r!=w(-0)?(kt=w(ie-w(qe*r)),Ul=w(kn(T,xn,kt,zt,En)),kt!=Ul):0)&&(Pe=w(Pe-w(Ul-ie)),n=w(n+r))):((vt?(tl=w(Br(T)),tl!=w(0)):0)?(kt=w(ie+w(pe*tl)),ql=w(kn(T,xn,kt,zt,En)),kt!=ql):0)&&(Pe=w(Pe-w(ql-ie)),ke=w(ke-tl)),T=t[T+960>>2]|0;while((T|0)!=0);if(n=w(_e+n),ie=w(gn+Pe),jl)n=w(0);else{qe=w(It+ke),we=t[Cu>>2]|0,vt=iew(0),qe=w(ie/qe),n=w(0);do{kt=w(Tn(P+380+(we<<3)|0,Zi)),Pe=w(Tn(P+364+(we<<3)|0,Zi)),Pe=w(cc(kt,w(Ur(Pe,w(D[P+504>>2]))))),vt?(kt=w(Pe*w(zr(P))),ie=w(-kt),kt!=w(-0)?(kt=w(pe*ie),ie=w(kn(P,xn,w(Pe+(Ln?ie:kt)),zt,En))):ie=Pe):(q?(zl=w(Br(P)),zl!=w(0)):0)?ie=w(kn(P,xn,w(Pe+w(qe*zl)),zt,En)):ie=Pe,n=w(n-w(ie-Pe)),ke=w(mt(P,xn,En)),r=w(mt(P,Vt,En)),ie=w(ie+ke),D[nu>>2]=ie,t[xu>>2]=1,Pe=w(D[P+396>>2]);e:do if(gt(Pe)|0){T=gt(xr)|0;do if(!T){if(Xi|(m0(P,Vt,xr)|0|Dr)||(T0(e,P)|0)!=4||(t[(hi(P,Vt)|0)+4>>2]|0)==3||(t[(Ai(P,Vt)|0)+4>>2]|0)==3)break;D[Fi>>2]=xr,t[go>>2]=1;break e}while(0);if(m0(P,Vt,xr)|0){T=t[P+992+(t[If>>2]<<2)>>2]|0,kt=w(r+w(Tn(T,xr))),D[Fi>>2]=kt,T=Pf&(t[T+4>>2]|0)==2,t[go>>2]=((gt(kt)|0|T)^1)&1;break}else{D[Fi>>2]=xr,t[go>>2]=T?0:2;break}}else kt=w(ie-ke),It=w(kt/Pe),kt=w(Pe*kt),t[go>>2]=1,D[Fi>>2]=w(r+(br?It:kt));while(0);Kt(P,xn,zt,En,xu,nu),Kt(P,Vt,xr,En,go,Fi);do if(m0(P,Vt,xr)|0?0:(T0(e,P)|0)==4){if((t[(hi(P,Vt)|0)+4>>2]|0)==3){T=0;break}T=(t[(Ai(P,Vt)|0)+4>>2]|0)!=3}else T=0;while(0);kt=w(D[nu>>2]),It=w(D[Fi>>2]),$l=t[xu>>2]|0,Qr=t[go>>2]|0,ht(P,br?kt:It,br?It:kt,Ei,br?$l:Qr,br?Qr:$l,En,Qi,y&(T^1),3488,k)|0,c[Tu>>0]=c[Tu>>0]|c[P+508>>0],P=t[P+960>>2]|0}while((P|0)!=0)}}else n=w(0);if(n=w(gn+n),Qr=n>0]=Qr|C[Tu>>0],Af&n>w(0)?(T=t[Cu>>2]|0,((t[e+364+(T<<3)+4>>2]|0)!=0?(Li=w(Tn(e+364+(T<<3)|0,Zi)),Li>=w(0)):0)?ie=w(Ur(w(0),w(Li-w(zt-n)))):ie=w(0)):ie=n,vt=Pn>>>0>>0,vt){we=t[eo>>2]|0,q=Pn,T=0;do P=t[we+(q<<2)>>2]|0,t[P+24>>2]|0||(T=((t[(hi(P,xn)|0)+4>>2]|0)==3&1)+T|0,T=T+((t[(Ai(P,xn)|0)+4>>2]|0)==3&1)|0),q=q+1|0;while((q|0)!=(Ht|0));T?(ke=w(0),r=w(0)):Kn=101}else Kn=101;e:do if((Kn|0)==101)switch(Kn=0,Ff|0){case 1:{T=0,ke=w(ie*w(.5)),r=w(0);break e}case 2:{T=0,ke=ie,r=w(0);break e}case 3:{if(l>>>0<=1){T=0,ke=w(0),r=w(0);break e}r=w((l+-1|0)>>>0),T=0,ke=w(0),r=w(w(Ur(ie,w(0)))/r);break e}case 5:{r=w(ie/w((l+1|0)>>>0)),T=0,ke=r;break e}case 4:{r=w(ie/w(l>>>0)),T=0,ke=w(r*w(.5));break e}default:{T=0,ke=w(0),r=w(0);break e}}while(0);if(n=w(Lf+ke),vt){Pe=w(ie/w(T|0)),q=t[eo>>2]|0,P=Pn,ie=w(0);do{T=t[q+(P<<2)>>2]|0;e:do if((t[T+36>>2]|0)!=1){switch(t[T+24>>2]|0){case 1:{if(X(T,xn)|0){if(!y)break e;kt=w(Y(T,xn,zt)),kt=w(kt+w(C0(e,xn))),kt=w(kt+w(Tr(T,xn,En))),D[T+400+(t[Qs>>2]<<2)>>2]=kt;break e}break}case 0:if(Qr=(t[(hi(T,xn)|0)+4>>2]|0)==3,kt=w(Pe+n),n=Qr?kt:n,y&&(Qr=T+400+(t[Qs>>2]<<2)|0,D[Qr>>2]=w(n+w(D[Qr>>2]))),Qr=(t[(Ai(T,xn)|0)+4>>2]|0)==3,kt=w(Pe+n),n=Qr?kt:n,Ro){kt=w(r+w(mt(T,xn,En))),ie=xr,n=w(n+w(kt+w(D[T+504>>2])));break e}else{n=w(n+w(r+w(ye(T,xn,En)))),ie=w(Ur(ie,w(ye(T,Vt,En))));break e}default:}y&&(kt=w(ke+w(C0(e,xn))),Qr=T+400+(t[Qs>>2]<<2)|0,D[Qr>>2]=w(kt+w(D[Qr>>2])))}while(0);P=P+1|0}while((P|0)!=(Ht|0))}else ie=w(0);if(r=w(Rf+n),Of?ke=w(w(kn(e,Vt,w(Ri+ie),cs,d))-Ri):ke=xr,Pe=w(w(kn(e,Vt,w(Ri+(Mf?xr:ie)),cs,d))-Ri),vt&y){P=Pn;do{q=t[(t[eo>>2]|0)+(P<<2)>>2]|0;do if((t[q+36>>2]|0)!=1){if((t[q+24>>2]|0)==1){if(X(q,Vt)|0){if(kt=w(Y(q,Vt,xr)),kt=w(kt+w(C0(e,Vt))),kt=w(kt+w(Tr(q,Vt,En))),T=t[Js>>2]|0,D[q+400+(T<<2)>>2]=kt,!(gt(kt)|0))break}else T=t[Js>>2]|0;kt=w(C0(e,Vt)),D[q+400+(T<<2)>>2]=w(kt+w(Tr(q,Vt,En)));break}T=T0(e,q)|0;do if((T|0)==4){if((t[(hi(q,Vt)|0)+4>>2]|0)==3){Kn=139;break}if((t[(Ai(q,Vt)|0)+4>>2]|0)==3){Kn=139;break}if(m0(q,Vt,xr)|0){n=le;break}$l=t[q+908+(t[Cu>>2]<<2)>>2]|0,t[Fi>>2]=$l,n=w(D[q+396>>2]),Qr=gt(n)|0,ie=(t[j>>2]=$l,w(D[j>>2])),Qr?n=Pe:(gn=w(mt(q,Vt,En)),kt=w(ie/n),n=w(n*ie),n=w(gn+(br?kt:n))),D[nu>>2]=n,D[Fi>>2]=w(w(mt(q,xn,En))+ie),t[go>>2]=1,t[xu>>2]=1,Kt(q,xn,zt,En,go,Fi),Kt(q,Vt,xr,En,xu,nu),n=w(D[Fi>>2]),gn=w(D[nu>>2]),kt=br?n:gn,n=br?gn:n,Qr=((gt(kt)|0)^1)&1,ht(q,kt,n,Ei,Qr,((gt(n)|0)^1)&1,En,Qi,1,3493,k)|0,n=le}else Kn=139;while(0);e:do if((Kn|0)==139){Kn=0,n=w(ke-w(ye(q,Vt,En)));do if((t[(hi(q,Vt)|0)+4>>2]|0)==3){if((t[(Ai(q,Vt)|0)+4>>2]|0)!=3)break;n=w(le+w(Ur(w(0),w(n*w(.5)))));break e}while(0);if((t[(Ai(q,Vt)|0)+4>>2]|0)==3){n=le;break}if((t[(hi(q,Vt)|0)+4>>2]|0)==3){n=w(le+w(Ur(w(0),n)));break}switch(T|0){case 1:{n=le;break e}case 2:{n=w(le+w(n*w(.5)));break e}default:{n=w(le+n);break e}}}while(0);kt=w(Di+n),Qr=q+400+(t[Js>>2]<<2)|0,D[Qr>>2]=w(kt+w(D[Qr>>2]))}while(0);P=P+1|0}while((P|0)!=(Ht|0))}if(Di=w(Di+Pe),ss=w(Ur(ss,r)),l=Ji+1|0,Ht>>>0>=Ni>>>0)break;n=zt,Pn=Ht,Ji=l}do if(y){if(T=l>>>0>1,T?0:!(he(e)|0))break;if(!(gt(xr)|0)){n=w(xr-Di);e:do switch(t[e+12>>2]|0){case 3:{le=w(le+n),pe=w(0);break}case 2:{le=w(le+w(n*w(.5))),pe=w(0);break}case 4:{xr>Di?pe=w(n/w(l>>>0)):pe=w(0);break}case 7:if(xr>Di){le=w(le+w(n/w(l<<1>>>0))),pe=w(n/w(l>>>0)),pe=T?pe:w(0);break e}else{le=w(le+w(n*w(.5))),pe=w(0);break e}case 6:{pe=w(n/w(Ji>>>0)),pe=xr>Di&T?pe:w(0);break}default:pe=w(0)}while(0);if(l|0)for(vt=1040+(Vt<<2)|0,Ln=976+(Vt<<2)|0,we=0,P=0;;){e:do if(P>>>0>>0)for(ie=w(0),Pe=w(0),n=w(0),q=P;;){T=t[(t[eo>>2]|0)+(q<<2)>>2]|0;do if((t[T+36>>2]|0)!=1?(t[T+24>>2]|0)==0:0){if((t[T+940>>2]|0)!=(we|0))break e;if(We(T,Vt)|0&&(kt=w(D[T+908+(t[Ln>>2]<<2)>>2]),n=w(Ur(n,w(kt+w(mt(T,Vt,En)))))),(T0(e,T)|0)!=5)break;Li=w(et(T)),Li=w(Li+w(Tr(T,0,En))),kt=w(D[T+912>>2]),kt=w(w(kt+w(mt(T,0,En)))-Li),Li=w(Ur(Pe,Li)),kt=w(Ur(ie,kt)),ie=kt,Pe=Li,n=w(Ur(n,w(Li+kt)))}while(0);if(T=q+1|0,T>>>0>>0)q=T;else{q=T;break}}else Pe=w(0),n=w(0),q=P;while(0);if(qe=w(pe+n),r=le,le=w(le+qe),P>>>0>>0){ke=w(r+Pe),T=P;do{P=t[(t[eo>>2]|0)+(T<<2)>>2]|0;e:do if((t[P+36>>2]|0)!=1?(t[P+24>>2]|0)==0:0)switch(T0(e,P)|0){case 1:{kt=w(r+w(Tr(P,Vt,En))),D[P+400+(t[vt>>2]<<2)>>2]=kt;break e}case 3:{kt=w(w(le-w(R0(P,Vt,En)))-w(D[P+908+(t[Ln>>2]<<2)>>2])),D[P+400+(t[vt>>2]<<2)>>2]=kt;break e}case 2:{kt=w(r+w(w(qe-w(D[P+908+(t[Ln>>2]<<2)>>2]))*w(.5))),D[P+400+(t[vt>>2]<<2)>>2]=kt;break e}case 4:{if(kt=w(r+w(Tr(P,Vt,En))),D[P+400+(t[vt>>2]<<2)>>2]=kt,m0(P,Vt,xr)|0||(br?(ie=w(D[P+908>>2]),n=w(ie+w(mt(P,xn,En))),Pe=qe):(Pe=w(D[P+912>>2]),Pe=w(Pe+w(mt(P,Vt,En))),n=qe,ie=w(D[P+908>>2])),Vr(n,ie)|0?Vr(Pe,w(D[P+912>>2]))|0:0))break e;ht(P,n,Pe,Ei,1,1,En,Qi,1,3501,k)|0;break e}case 5:{D[P+404>>2]=w(w(ke-w(et(P)))+w(Y(P,0,xr)));break e}default:break e}while(0);T=T+1|0}while((T|0)!=(q|0))}if(we=we+1|0,(we|0)==(l|0))break;P=q}}}while(0);if(D[e+908>>2]=w(kn(e,2,ls,d,d)),D[e+912>>2]=w(kn(e,0,Wl,_,d)),((ku|0)!=0?(Hl=t[e+32>>2]|0,bl=(ku|0)==2,!(bl&(Hl|0)!=2)):0)?bl&(Hl|0)==2&&(n=w(fs+zt),n=w(Ur(w(cc(n,w(Dt(e,xn,ss,Zi)))),fs)),Kn=198):(n=w(kn(e,xn,ss,Zi,d)),Kn=198),(Kn|0)==198&&(D[e+908+(t[976+(xn<<2)>>2]<<2)>>2]=n),((Au|0)!=0?(Vl=t[e+32>>2]|0,Yl=(Au|0)==2,!(Yl&(Vl|0)!=2)):0)?Yl&(Vl|0)==2&&(n=w(Ri+xr),n=w(Ur(w(cc(n,w(Dt(e,Vt,w(Ri+Di),cs)))),Ri)),Kn=204):(n=w(kn(e,Vt,w(Ri+Di),cs,d)),Kn=204),(Kn|0)==204&&(D[e+908+(t[976+(Vt<<2)>>2]<<2)>>2]=n),y){if((t[Gl>>2]|0)==2){P=976+(Vt<<2)|0,q=1040+(Vt<<2)|0,T=0;do we=e0(e,T)|0,t[we+24>>2]|0||($l=t[P>>2]|0,kt=w(D[e+908+($l<<2)>>2]),Qr=we+400+(t[q>>2]<<2)|0,kt=w(kt-w(D[Qr>>2])),D[Qr>>2]=w(kt-w(D[we+908+($l<<2)>>2]))),T=T+1|0;while((T|0)!=(Ni|0))}if(o|0){T=br?ku:s;do bt(e,o,En,T,Qi,Ei,k),o=t[o+960>>2]|0;while((o|0)!=0)}if(T=(xn|2|0)==3,P=(Vt|2|0)==3,T|P){o=0;do q=t[(t[eo>>2]|0)+(o<<2)>>2]|0,(t[q+36>>2]|0)!=1&&(T&&Zt(e,q,xn),P&&Zt(e,q,Vt)),o=o+1|0;while((o|0)!=(Ni|0))}}}while(0);h=Ou}function ki(e,n){e=e|0,n=w(n);var r=0;li(e,n>=w(0),3147),r=n==w(0),D[e+4>>2]=r?w(0):n}function Yr(e,n,r,o){e=e|0,n=w(n),r=w(r),o=o|0;var s=tt,l=tt,d=0,_=0,y=0;t[2278]=(t[2278]|0)+1,$r(e),m0(e,2,n)|0?(s=w(Tn(t[e+992>>2]|0,n)),y=1,s=w(s+w(mt(e,2,n)))):(s=w(Tn(e+380|0,n)),s>=w(0)?y=2:(y=((gt(n)|0)^1)&1,s=n)),m0(e,0,r)|0?(l=w(Tn(t[e+996>>2]|0,r)),_=1,l=w(l+w(mt(e,0,n)))):(l=w(Tn(e+388|0,r)),l>=w(0)?_=2:(_=((gt(r)|0)^1)&1,l=r)),d=e+976|0,(ht(e,s,l,o,y,_,n,r,1,3189,t[d>>2]|0)|0?(Yo(e,t[e+496>>2]|0,n,r,n),bi(e,w(D[(t[d>>2]|0)+4>>2]),w(0),w(0)),c[11696]|0):0)&&ff(e,7)}function $r(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;_=h,h=h+32|0,d=_+24|0,l=_+16|0,o=_+8|0,s=_,r=0;do n=e+380+(r<<3)|0,((t[e+380+(r<<3)+4>>2]|0)!=0?(y=n,k=t[y+4>>2]|0,T=o,t[T>>2]=t[y>>2],t[T+4>>2]=k,T=e+364+(r<<3)|0,k=t[T+4>>2]|0,y=s,t[y>>2]=t[T>>2],t[y+4>>2]=k,t[l>>2]=t[o>>2],t[l+4>>2]=t[o+4>>2],t[d>>2]=t[s>>2],t[d+4>>2]=t[s+4>>2],o0(l,d)|0):0)||(n=e+348+(r<<3)|0),t[e+992+(r<<2)>>2]=n,r=r+1|0;while((r|0)!=2);h=_}function m0(e,n,r){e=e|0,n=n|0,r=w(r);var o=0;switch(e=t[e+992+(t[976+(n<<2)>>2]<<2)>>2]|0,t[e+4>>2]|0){case 0:case 3:{e=0;break}case 1:{w(D[e>>2])>2])>2]|0){case 2:{n=w(w(w(D[e>>2])*n)/w(100));break}case 1:{n=w(D[e>>2]);break}default:n=w(J)}return w(n)}function Yo(e,n,r,o,s){e=e|0,n=n|0,r=w(r),o=w(o),s=w(s);var l=0,d=tt;n=t[e+944>>2]|0?n:1,l=N0(t[e+4>>2]|0,n)|0,n=Cl(l,n)|0,r=w(Wr(e,l,r)),o=w(Wr(e,n,o)),d=w(r+w(Tr(e,l,s))),D[e+400+(t[1040+(l<<2)>>2]<<2)>>2]=d,r=w(r+w(R0(e,l,s))),D[e+400+(t[1e3+(l<<2)>>2]<<2)>>2]=r,r=w(o+w(Tr(e,n,s))),D[e+400+(t[1040+(n<<2)>>2]<<2)>>2]=r,s=w(o+w(R0(e,n,s))),D[e+400+(t[1e3+(n<<2)>>2]<<2)>>2]=s}function bi(e,n,r,o){e=e|0,n=w(n),r=w(r),o=w(o);var s=0,l=0,d=tt,_=tt,y=0,k=0,T=tt,P=0,q=tt,we=tt,le=tt,ie=tt;if(n!=w(0)&&(s=e+400|0,ie=w(D[s>>2]),l=e+404|0,le=w(D[l>>2]),P=e+416|0,we=w(D[P>>2]),k=e+420|0,d=w(D[k>>2]),q=w(ie+r),T=w(le+o),o=w(q+we),_=w(T+d),y=(t[e+988>>2]|0)==1,D[s>>2]=w($0(ie,n,0,y)),D[l>>2]=w($0(le,n,0,y)),r=w(V4(w(we*n),w(1))),Vr(r,w(0))|0?l=0:l=(Vr(r,w(1))|0)^1,r=w(V4(w(d*n),w(1))),Vr(r,w(0))|0?s=0:s=(Vr(r,w(1))|0)^1,ie=w($0(o,n,y&l,y&(l^1))),D[P>>2]=w(ie-w($0(q,n,0,y))),ie=w($0(_,n,y&s,y&(s^1))),D[k>>2]=w(ie-w($0(T,n,0,y))),l=(t[e+952>>2]|0)-(t[e+948>>2]|0)>>2,l|0)){s=0;do bi(e0(e,s)|0,n,q,T),s=s+1|0;while((s|0)!=(l|0))}}function or(e,n,r,o,s){switch(e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,r|0){case 5:case 0:{e=q8(t[489]|0,o,s)|0;break}default:e=AL(o,s)|0}return e|0}function zs(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;s=h,h=h+16|0,l=s,t[l>>2]=o,Ku(e,0,n,r,l),h=s}function Ku(e,n,r,o,s){if(e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,e=e|0?e:956,sD[t[e+8>>2]&1](e,n,r,o,s)|0,(r|0)==5)_n();else return}function J0(e,n,r){e=e|0,n=n|0,r=r|0,c[e+n>>0]=r&1}function af(e,n){e=e|0,n=n|0;var r=0,o=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,o=(t[r>>2]|0)-(t[n>>2]|0)>>2,o|0&&(S0(e,o),El(e,t[n>>2]|0,t[r>>2]|0,o))}function S0(e,n){e=e|0,n=n|0;var r=0;if((Q0(e)|0)>>>0>>0&&$n(e),n>>>0>1073741823)_n();else{r=Tt(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function El(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,o=e+4|0,e=r-n|0,(e|0)>0&&(vn(t[o>>2]|0,n|0,e|0)|0,t[o>>2]=(t[o>>2]|0)+(e>>>2<<2))}function Q0(e){return e=e|0,1073741823}function Tr(e,n,r){return e=e|0,n=n|0,r=w(r),(Nr(n)|0?(t[e+96>>2]|0)!=0:0)?e=e+92|0:e=en(e+60|0,t[1040+(n<<2)>>2]|0,992)|0,w(uo(e,r))}function R0(e,n,r){return e=e|0,n=n|0,r=w(r),(Nr(n)|0?(t[e+104>>2]|0)!=0:0)?e=e+100|0:e=en(e+60|0,t[1e3+(n<<2)>>2]|0,992)|0,w(uo(e,r))}function Nr(e){return e=e|0,(e|1|0)==3|0}function uo(e,n){return e=e|0,n=w(n),(t[e+4>>2]|0)==3?n=w(0):n=w(Tn(e,n)),w(n)}function so(e,n){return e=e|0,n=n|0,e=t[e>>2]|0,((e|0)==0?(n|0)>1?n:1:e)|0}function N0(e,n){e=e|0,n=n|0;var r=0;e:do if((n|0)==2){switch(e|0){case 2:{e=3;break e}case 3:break;default:{r=4;break e}}e=2}else r=4;while(0);return e|0}function C0(e,n){e=e|0,n=n|0;var r=tt;return((Nr(n)|0?(t[e+312>>2]|0)!=0:0)?(r=w(D[e+308>>2]),r>=w(0)):0)||(r=w(Ur(w(D[(en(e+276|0,t[1040+(n<<2)>>2]|0,992)|0)>>2]),w(0)))),w(r)}function di(e,n){e=e|0,n=n|0;var r=tt;return((Nr(n)|0?(t[e+320>>2]|0)!=0:0)?(r=w(D[e+316>>2]),r>=w(0)):0)||(r=w(Ur(w(D[(en(e+276|0,t[1e3+(n<<2)>>2]|0,992)|0)>>2]),w(0)))),w(r)}function u0(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return((Nr(n)|0?(t[e+240>>2]|0)!=0:0)?(o=w(Tn(e+236|0,r)),o>=w(0)):0)||(o=w(Ur(w(Tn(en(e+204|0,t[1040+(n<<2)>>2]|0,992)|0,r)),w(0)))),w(o)}function v0(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return((Nr(n)|0?(t[e+248>>2]|0)!=0:0)?(o=w(Tn(e+244|0,r)),o>=w(0)):0)||(o=w(Ur(w(Tn(en(e+204|0,t[1e3+(n<<2)>>2]|0,992)|0,r)),w(0)))),w(o)}function To(e,n,r,o,s,l,d){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=w(l),d=w(d);var _=tt,y=tt,k=tt,T=tt,P=tt,q=tt,we=0,le=0,ie=0;ie=h,h=h+16|0,we=ie,le=e+964|0,i0(e,(t[le>>2]|0)!=0,3519),_=w(Fn(e,2,n)),y=w(Fn(e,0,n)),k=w(mt(e,2,n)),T=w(mt(e,0,n)),gt(n)|0?P=n:P=w(Ur(w(0),w(w(n-k)-_))),gt(r)|0?q=r:q=w(Ur(w(0),w(w(r-T)-y))),(o|0)==1&(s|0)==1?(D[e+908>>2]=w(kn(e,2,w(n-k),l,l)),n=w(kn(e,0,w(r-T),d,l))):(lD[t[le>>2]&1](we,e,P,o,q,s),P=w(_+w(D[we>>2])),q=w(n-k),D[e+908>>2]=w(kn(e,2,(o|2|0)==2?P:q,l,l)),q=w(y+w(D[we+4>>2])),n=w(r-T),n=w(kn(e,0,(s|2|0)==2?q:n,d,l))),D[e+912>>2]=n,h=ie}function pu(e,n,r,o,s,l,d){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=w(l),d=w(d);var _=tt,y=tt,k=tt,T=tt;k=w(Fn(e,2,l)),_=w(Fn(e,0,l)),T=w(mt(e,2,l)),y=w(mt(e,0,l)),n=w(n-T),D[e+908>>2]=w(kn(e,2,(o|2|0)==2?k:n,l,l)),r=w(r-y),D[e+912>>2]=w(kn(e,0,(s|2|0)==2?_:r,d,l))}function Sl(e,n,r,o,s,l,d){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=w(l),d=w(d);var _=0,y=tt,k=tt;return _=(o|0)==2,((n<=w(0)&_?0:!(r<=w(0)&(s|0)==2))?!((o|0)==1&(s|0)==1):0)?e=0:(y=w(mt(e,0,l)),k=w(mt(e,2,l)),_=n>2]=w(kn(e,2,_?w(0):n,l,l)),n=w(r-y),_=r>2]=w(kn(e,0,_?w(0):n,d,l)),e=1),e|0}function Cl(e,n){return e=e|0,n=n|0,qt(e)|0?e=N0(2,n)|0:e=0,e|0}function B0(e,n,r){return e=e|0,n=n|0,r=w(r),r=w(u0(e,n,r)),w(r+w(C0(e,n)))}function hu(e,n,r){return e=e|0,n=n|0,r=w(r),r=w(v0(e,n,r)),w(r+w(di(e,n)))}function Fn(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return o=w(B0(e,n,r)),w(o+w(hu(e,n,r)))}function pi(e){return e=e|0,t[e+24>>2]|0?e=0:w(Br(e))!=w(0)?e=1:e=w(zr(e))!=w(0),e|0}function Br(e){e=e|0;var n=tt;if(t[e+944>>2]|0){if(n=w(D[e+44>>2]),gt(n)|0)return n=w(D[e+40>>2]),e=n>w(0)&((gt(n)|0)^1),w(e?n:w(0))}else n=w(0);return w(n)}function zr(e){e=e|0;var n=tt,r=0,o=tt;do if(t[e+944>>2]|0){if(n=w(D[e+48>>2]),gt(n)|0){if(r=c[(t[e+976>>2]|0)+2>>0]|0,r<<24>>24==0?(o=w(D[e+40>>2]),o>24?w(1):w(0)}}else n=w(0);while(0);return w(n)}function lo(e){e=e|0;var n=0,r=0;if(pa(e+400|0,0,540)|0,c[e+985>>0]=1,bo(e),r=fi(e)|0,r|0){n=e+948|0,e=0;do lo(t[(t[n>>2]|0)+(e<<2)>>2]|0),e=e+1|0;while((e|0)!=(r|0))}}function wr(e,n,r,o,s,l,d,_,y,k){e=e|0,n=n|0,r=w(r),o=o|0,s=w(s),l=w(l),d=w(d),_=_|0,y=y|0,k=k|0;var T=0,P=tt,q=0,we=0,le=tt,ie=tt,Pe=0,ke=tt,qe=0,pe=tt,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=0,Ki=0;Dr=h,h=h+16|0,Ln=Dr+12|0,Ht=Dr+8|0,It=Dr+4|0,gn=Dr,zt=N0(t[e+4>>2]|0,y)|0,_e=Nr(zt)|0,P=w(Tn(Ut(n)|0,_e?l:d)),vt=m0(n,2,l)|0,Pn=m0(n,0,d)|0;do if(gt(P)|0?0:!(gt(_e?r:s)|0)){if(T=n+504|0,!(gt(w(D[T>>2]))|0)&&(!(fn(t[n+976>>2]|0,0)|0)||(t[n+500>>2]|0)==(t[2278]|0)))break;D[T>>2]=w(Ur(P,w(Fn(n,zt,l))))}else q=7;while(0);do if((q|0)==7){if(qe=_e^1,!(qe|vt^1)){d=w(Tn(t[n+992>>2]|0,l)),D[n+504>>2]=w(Ur(d,w(Fn(n,2,l))));break}if(!(_e|Pn^1)){d=w(Tn(t[n+996>>2]|0,d)),D[n+504>>2]=w(Ur(d,w(Fn(n,0,l))));break}D[Ln>>2]=w(J),D[Ht>>2]=w(J),t[It>>2]=0,t[gn>>2]=0,ke=w(mt(n,2,l)),pe=w(mt(n,0,l)),vt?(le=w(ke+w(Tn(t[n+992>>2]|0,l))),D[Ln>>2]=le,t[It>>2]=1,we=1):(we=0,le=w(J)),Pn?(P=w(pe+w(Tn(t[n+996>>2]|0,d))),D[Ht>>2]=P,t[gn>>2]=1,T=1):(T=0,P=w(J)),q=t[e+32>>2]|0,_e&(q|0)==2?q=2:(gt(le)|0?!(gt(r)|0):0)&&(D[Ln>>2]=r,t[It>>2]=2,we=2,le=r),(((q|0)==2&qe?0:gt(P)|0)?!(gt(s)|0):0)&&(D[Ht>>2]=s,t[gn>>2]=2,T=2,P=s),ie=w(D[n+396>>2]),Pe=gt(ie)|0;do if(Pe)q=we;else{if((we|0)==1&qe){D[Ht>>2]=w(w(le-ke)/ie),t[gn>>2]=1,T=1,q=1;break}_e&(T|0)==1?(D[Ln>>2]=w(ie*w(P-pe)),t[It>>2]=1,T=1,q=1):q=we}while(0);Ki=gt(r)|0,we=(T0(e,n)|0)!=4,(_e|vt|((o|0)!=1|Ki)|(we|(q|0)==1)?0:(D[Ln>>2]=r,t[It>>2]=1,!Pe))&&(D[Ht>>2]=w(w(r-ke)/ie),t[gn>>2]=1,T=1),(Pn|qe|((_|0)!=1|(gt(s)|0))|(we|(T|0)==1)?0:(D[Ht>>2]=s,t[gn>>2]=1,!Pe))&&(D[Ln>>2]=w(ie*w(s-pe)),t[It>>2]=1),Kt(n,2,l,l,It,Ln),Kt(n,0,d,l,gn,Ht),r=w(D[Ln>>2]),s=w(D[Ht>>2]),ht(n,r,s,y,t[It>>2]|0,t[gn>>2]|0,l,d,0,3565,k)|0,d=w(D[n+908+(t[976+(zt<<2)>>2]<<2)>>2]),D[n+504>>2]=w(Ur(d,w(Fn(n,zt,l))))}while(0);t[n+500>>2]=t[2278],h=Dr}function kn(e,n,r,o,s){return e=e|0,n=n|0,r=w(r),o=w(o),s=w(s),o=w(Dt(e,n,r,o)),w(Ur(o,w(Fn(e,n,s))))}function T0(e,n){return e=e|0,n=n|0,n=n+20|0,n=t[((t[n>>2]|0)==0?e+16|0:n)>>2]|0,((n|0)==5?qt(t[e+4>>2]|0)|0:0)&&(n=1),n|0}function hi(e,n){return e=e|0,n=n|0,(Nr(n)|0?(t[e+96>>2]|0)!=0:0)?n=4:n=t[1040+(n<<2)>>2]|0,e+60+(n<<3)|0}function Ai(e,n){return e=e|0,n=n|0,(Nr(n)|0?(t[e+104>>2]|0)!=0:0)?n=5:n=t[1e3+(n<<2)>>2]|0,e+60+(n<<3)|0}function Kt(e,n,r,o,s,l){switch(e=e|0,n=n|0,r=w(r),o=w(o),s=s|0,l=l|0,r=w(Tn(e+380+(t[976+(n<<2)>>2]<<3)|0,r)),r=w(r+w(mt(e,n,o))),t[s>>2]|0){case 2:case 1:{s=gt(r)|0,o=w(D[l>>2]),D[l>>2]=s|o>2]=2,D[l>>2]=r);break}default:}}function X(e,n){return e=e|0,n=n|0,e=e+132|0,(Nr(n)|0?(t[(en(e,4,948)|0)+4>>2]|0)!=0:0)?e=1:e=(t[(en(e,t[1040+(n<<2)>>2]|0,948)|0)+4>>2]|0)!=0,e|0}function Y(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0;return e=e+132|0,(Nr(n)|0?(o=en(e,4,948)|0,(t[o+4>>2]|0)!=0):0)?s=4:(o=en(e,t[1040+(n<<2)>>2]|0,948)|0,t[o+4>>2]|0?s=4:r=w(0)),(s|0)==4&&(r=w(Tn(o,r))),w(r)}function ye(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return o=w(D[e+908+(t[976+(n<<2)>>2]<<2)>>2]),o=w(o+w(Tr(e,n,r))),w(o+w(R0(e,n,r)))}function he(e){e=e|0;var n=0,r=0,o=0;e:do if(qt(t[e+4>>2]|0)|0)n=0;else if((t[e+16>>2]|0)!=5)if(r=fi(e)|0,!r)n=0;else for(n=0;;){if(o=e0(e,n)|0,(t[o+24>>2]|0)==0?(t[o+20>>2]|0)==5:0){n=1;break e}if(n=n+1|0,n>>>0>=r>>>0){n=0;break}}else n=1;while(0);return n|0}function We(e,n){e=e|0,n=n|0;var r=tt;return r=w(D[e+908+(t[976+(n<<2)>>2]<<2)>>2]),r>=w(0)&((gt(r)|0)^1)|0}function et(e){e=e|0;var n=tt,r=0,o=0,s=0,l=0,d=0,_=0,y=tt;if(r=t[e+968>>2]|0,r)y=w(D[e+908>>2]),n=w(D[e+912>>2]),n=w(rD[r&0](e,y,n)),i0(e,(gt(n)|0)^1,3573);else{l=fi(e)|0;do if(l|0){for(r=0,s=0;;){if(o=e0(e,s)|0,t[o+940>>2]|0){d=8;break}if((t[o+24>>2]|0)!=1)if(_=(T0(e,o)|0)==5,_){r=o;break}else r=(r|0)==0?o:r;if(s=s+1|0,s>>>0>=l>>>0){d=8;break}}if((d|0)==8&&!r)break;return n=w(et(r)),w(n+w(D[r+404>>2]))}while(0);n=w(D[e+912>>2])}return w(n)}function Dt(e,n,r,o){e=e|0,n=n|0,r=w(r),o=w(o);var s=tt,l=0;return qt(n)|0?(n=1,l=3):Nr(n)|0?(n=0,l=3):(o=w(J),s=w(J)),(l|0)==3&&(s=w(Tn(e+364+(n<<3)|0,o)),o=w(Tn(e+380+(n<<3)|0,o))),l=o=w(0)&((gt(o)|0)^1)),r=l?o:r,l=s>=w(0)&((gt(s)|0)^1)&r>2]|0,l)|0,le=Cl(Pe,l)|0,ie=Nr(Pe)|0,P=w(mt(n,2,r)),q=w(mt(n,0,r)),m0(n,2,r)|0?_=w(P+w(Tn(t[n+992>>2]|0,r))):(X(n,2)|0?_t(n,2)|0:0)?(_=w(D[e+908>>2]),y=w(C0(e,2)),y=w(_-w(y+w(di(e,2)))),_=w(Y(n,2,r)),_=w(kn(n,2,w(y-w(_+w(_r(n,2,r)))),r,r))):_=w(J),m0(n,0,s)|0?y=w(q+w(Tn(t[n+996>>2]|0,s))):(X(n,0)|0?_t(n,0)|0:0)?(y=w(D[e+912>>2]),qe=w(C0(e,0)),qe=w(y-w(qe+w(di(e,0)))),y=w(Y(n,0,s)),y=w(kn(n,0,w(qe-w(y+w(_r(n,0,s)))),s,r))):y=w(J),k=gt(_)|0,T=gt(y)|0;do if(k^T?(we=w(D[n+396>>2]),!(gt(we)|0)):0)if(k){_=w(P+w(w(y-q)*we));break}else{qe=w(q+w(w(_-P)/we)),y=T?qe:y;break}while(0);T=gt(_)|0,k=gt(y)|0,T|k&&(pe=(T^1)&1,o=r>w(0)&((o|0)!=0&T),_=ie?_:o?r:_,ht(n,_,y,l,ie?pe:o?2:pe,T&(k^1)&1,_,y,0,3623,d)|0,_=w(D[n+908>>2]),_=w(_+w(mt(n,2,r))),y=w(D[n+912>>2]),y=w(y+w(mt(n,0,r)))),ht(n,_,y,l,1,1,_,y,1,3635,d)|0,(_t(n,Pe)|0?!(X(n,Pe)|0):0)?(pe=t[976+(Pe<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),qe=w(qe-w(di(e,Pe))),qe=w(qe-w(R0(n,Pe,r))),qe=w(qe-w(_r(n,Pe,ie?r:s))),D[n+400+(t[1040+(Pe<<2)>>2]<<2)>>2]=qe):ke=21;do if((ke|0)==21){if(X(n,Pe)|0?0:(t[e+8>>2]|0)==1){pe=t[976+(Pe<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(w(qe-w(D[n+908+(pe<<2)>>2]))*w(.5)),D[n+400+(t[1040+(Pe<<2)>>2]<<2)>>2]=qe;break}(X(n,Pe)|0?0:(t[e+8>>2]|0)==2)&&(pe=t[976+(Pe<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),D[n+400+(t[1040+(Pe<<2)>>2]<<2)>>2]=qe)}while(0);(_t(n,le)|0?!(X(n,le)|0):0)?(pe=t[976+(le<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),qe=w(qe-w(di(e,le))),qe=w(qe-w(R0(n,le,r))),qe=w(qe-w(_r(n,le,ie?s:r))),D[n+400+(t[1040+(le<<2)>>2]<<2)>>2]=qe):ke=30;do if((ke|0)==30?!(X(n,le)|0):0){if((T0(e,n)|0)==2){pe=t[976+(le<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(w(qe-w(D[n+908+(pe<<2)>>2]))*w(.5)),D[n+400+(t[1040+(le<<2)>>2]<<2)>>2]=qe;break}pe=(T0(e,n)|0)==3,pe^(t[e+28>>2]|0)==2&&(pe=t[976+(le<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),D[n+400+(t[1040+(le<<2)>>2]<<2)>>2]=qe)}while(0)}function Zt(e,n,r){e=e|0,n=n|0,r=r|0;var o=tt,s=0;s=t[976+(r<<2)>>2]|0,o=w(D[n+908+(s<<2)>>2]),o=w(w(D[e+908+(s<<2)>>2])-o),o=w(o-w(D[n+400+(t[1040+(r<<2)>>2]<<2)>>2])),D[n+400+(t[1e3+(r<<2)>>2]<<2)>>2]=o}function qt(e){return e=e|0,(e|1|0)==1|0}function Ut(e){e=e|0;var n=tt;switch(t[e+56>>2]|0){case 0:case 3:{n=w(D[e+40>>2]),n>w(0)&((gt(n)|0)^1)?e=c[(t[e+976>>2]|0)+2>>0]|0?1056:992:e=1056;break}default:e=e+52|0}return e|0}function fn(e,n){return e=e|0,n=n|0,(c[e+n>>0]|0)!=0|0}function _t(e,n){return e=e|0,n=n|0,e=e+132|0,(Nr(n)|0?(t[(en(e,5,948)|0)+4>>2]|0)!=0:0)?e=1:e=(t[(en(e,t[1e3+(n<<2)>>2]|0,948)|0)+4>>2]|0)!=0,e|0}function _r(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0;return e=e+132|0,(Nr(n)|0?(o=en(e,5,948)|0,(t[o+4>>2]|0)!=0):0)?s=4:(o=en(e,t[1e3+(n<<2)>>2]|0,948)|0,t[o+4>>2]|0?s=4:r=w(0)),(s|0)==4&&(r=w(Tn(o,r))),w(r)}function Wr(e,n,r){return e=e|0,n=n|0,r=w(r),X(e,n)|0?r=w(Y(e,n,r)):r=w(-w(_r(e,n,r))),w(r)}function Ar(e){return e=w(e),D[j>>2]=e,t[j>>2]|0|0}function z(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>1073741823)_n();else{s=Tt(n<<2)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<2)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<2)}function dr(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>2)<<2)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Or(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&Ve(e)}function Qn(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;if(d=e+4|0,_=t[d>>2]|0,s=_-o|0,l=s>>2,e=n+(l<<2)|0,e>>>0>>0){o=_;do t[o>>2]=t[e>>2],e=e+4|0,o=(t[d>>2]|0)+4|0,t[d>>2]=o;while(e>>>0>>0)}l|0&&Y1(_+(0-l<<2)|0,n|0,s|0)|0}function nn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0;return _=n+4|0,y=t[_>>2]|0,s=t[e>>2]|0,d=r,l=d-s|0,o=y+(0-(l>>2)<<2)|0,t[_>>2]=o,(l|0)>0&&vn(o|0,s|0,l|0)|0,s=e+4|0,l=n+8|0,o=(t[s>>2]|0)-d|0,(o|0)>0&&(vn(t[l>>2]|0,r|0,o|0)|0,t[l>>2]=(t[l>>2]|0)+(o>>>2<<2)),d=t[e>>2]|0,t[e>>2]=t[_>>2],t[_>>2]=d,d=t[s>>2]|0,t[s>>2]=t[l>>2],t[l>>2]=d,d=e+8|0,r=n+12|0,e=t[d>>2]|0,t[d>>2]=t[r>>2],t[r>>2]=e,t[n>>2]=t[_>>2],y|0}function s0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;if(d=t[n>>2]|0,l=t[r>>2]|0,(d|0)!=(l|0)){s=e+8|0,r=((l+-4-d|0)>>>2)+1|0,e=d,o=t[s>>2]|0;do t[o>>2]=t[e>>2],o=(t[s>>2]|0)+4|0,t[s>>2]=o,e=e+4|0;while((e|0)!=(l|0));t[n>>2]=d+(r<<2)}}function t0(){_l()}function g0(){var e=0;return e=Tt(4)|0,Kr(e),e|0}function Kr(e){e=e|0,t[e>>2]=a0()|0}function _0(e){e=e|0,e|0&&(Gi(e),Ve(e))}function Gi(e){e=e|0,V0(t[e>>2]|0)}function fo(e,n,r){e=e|0,n=n|0,r=r|0,J0(t[e>>2]|0,n,r)}function x0(e,n){e=e|0,n=w(n),ki(t[e>>2]|0,n)}function Xu(e,n){return e=e|0,n=n|0,fn(t[e>>2]|0,n)|0}function Z0(){var e=0;return e=Tt(8)|0,df(e,0),e|0}function df(e,n){e=e|0,n=n|0,n?n=I0(t[n>>2]|0)|0:n=qu()|0,t[e>>2]=n,t[e+4>>2]=0,Bs(n,e)}function Ba(e){e=e|0;var n=0;return n=Tt(8)|0,df(n,e),n|0}function Oc(e){e=e|0,e|0&&(mu(e),Ve(e))}function mu(e){e=e|0;var n=0;Wu(t[e>>2]|0),n=e+4|0,e=t[n>>2]|0,t[n>>2]=0,e|0&&(Ju(e),Ve(e))}function Ju(e){e=e|0,ei(e)}function ei(e){e=e|0,e=t[e>>2]|0,e|0&&ju(e|0)}function Yf(e){return e=e|0,Vu(e)|0}function pf(e){e=e|0;var n=0,r=0;r=e+4|0,n=t[r>>2]|0,t[r>>2]=0,n|0&&(Ju(n),Ve(n)),Do(t[e>>2]|0)}function ja(e,n){e=e|0,n=n|0,Gu(t[e>>2]|0,t[n>>2]|0)}function Ua(e,n){e=e|0,n=n|0,W(t[e>>2]|0,n)}function Ic(e,n,r){e=e|0,n=n|0,r=+r,yn(t[e>>2]|0,n,w(r))}function vu(e,n,r){e=e|0,n=n|0,r=+r,sn(t[e>>2]|0,n,w(r))}function $f(e,n){e=e|0,n=n|0,R(t[e>>2]|0,n)}function gu(e,n){e=e|0,n=n|0,H(t[e>>2]|0,n)}function co(e,n){e=e|0,n=n|0,ue(t[e>>2]|0,n)}function qa(e,n){e=e|0,n=n|0,M0(t[e>>2]|0,n)}function Ws(e,n){e=e|0,n=n|0,Fe(t[e>>2]|0,n)}function za(e,n){e=e|0,n=n|0,Lr(t[e>>2]|0,n)}function Pc(e,n,r){e=e|0,n=n|0,r=+r,rn(t[e>>2]|0,n,w(r))}function Qu(e,n,r){e=e|0,n=n|0,r=+r,Hn(t[e>>2]|0,n,w(r))}function Mc(e,n){e=e|0,n=n|0,Cr(t[e>>2]|0,n)}function Fc(e,n){e=e|0,n=n|0,K(t[e>>2]|0,n)}function Lc(e,n){e=e|0,n=n|0,je(t[e>>2]|0,n)}function Kf(e,n){e=e|0,n=+n,rt(t[e>>2]|0,w(n))}function Tl(e,n){e=e|0,n=+n,wt(t[e>>2]|0,w(n))}function xl(e,n){e=e|0,n=+n,lt(t[e>>2]|0,w(n))}function hf(e,n){e=e|0,n=+n,st(t[e>>2]|0,w(n))}function xo(e,n){e=e|0,n=+n,xt(t[e>>2]|0,w(n))}function mf(e,n){e=e|0,n=+n,Qt(t[e>>2]|0,w(n))}function Wa(e,n){e=e|0,n=+n,Cn(t[e>>2]|0,w(n))}function ti(e){e=e|0,bn(t[e>>2]|0)}function Hs(e,n){e=e|0,n=+n,h0(t[e>>2]|0,w(n))}function mi(e,n){e=e|0,n=+n,ci(t[e>>2]|0,w(n))}function vi(e){e=e|0,xi(t[e>>2]|0)}function Xf(e,n){e=e|0,n=+n,qr(t[e>>2]|0,w(n))}function Rc(e,n){e=e|0,n=+n,Eo(t[e>>2]|0,w(n))}function Jf(e,n){e=e|0,n=+n,wl(t[e>>2]|0,w(n))}function ao(e,n){e=e|0,n=+n,js(t[e>>2]|0,w(n))}function $o(e,n){e=e|0,n=+n,du(t[e>>2]|0,w(n))}function kl(e,n){e=e|0,n=+n,Yu(t[e>>2]|0,w(n))}function Nc(e,n){e=e|0,n=+n,oo(t[e>>2]|0,w(n))}function Al(e,n){e=e|0,n=+n,Hi(t[e>>2]|0,w(n))}function vf(e,n){e=e|0,n=+n,F0(t[e>>2]|0,w(n))}function Qf(e,n,r){e=e|0,n=n|0,r=+r,ft(t[e>>2]|0,n,w(r))}function k0(e,n,r){e=e|0,n=n|0,r=+r,He(t[e>>2]|0,n,w(r))}function v(e,n,r){e=e|0,n=n|0,r=+r,Qe(t[e>>2]|0,n,w(r))}function m(e){return e=e|0,ve(t[e>>2]|0)|0}function S(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,ar(s,t[n>>2]|0,r),O(e,s),h=o}function O(e,n){e=e|0,n=n|0,M(e,t[n+4>>2]|0,+w(D[n>>2]))}function M(e,n,r){e=e|0,n=n|0,r=+r,t[e>>2]=n,L[e+8>>3]=r}function b(e){return e=e|0,U(t[e>>2]|0)|0}function ee(e){return e=e|0,fe(t[e>>2]|0)|0}function Ye(e){return e=e|0,de(t[e>>2]|0)|0}function Ze(e){return e=e|0,au(t[e>>2]|0)|0}function ut(e){return e=e|0,Ge(t[e>>2]|0)|0}function In(e){return e=e|0,F(t[e>>2]|0)|0}function A0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,d0(s,t[n>>2]|0,r),O(e,s),h=o}function jr(e){return e=e|0,xe(t[e>>2]|0)|0}function gi(e){return e=e|0,Xe(t[e>>2]|0)|0}function po(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Rt(o,t[n>>2]|0),O(e,o),h=r}function _i(e){return e=e|0,+ +w(yl(t[e>>2]|0))}function Re(e){return e=e|0,+ +w(cu(t[e>>2]|0))}function Ce(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,p0(o,t[n>>2]|0),O(e,o),h=r}function ze(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,E0(o,t[n>>2]|0),O(e,o),h=r}function Et(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,So(o,t[n>>2]|0),O(e,o),h=r}function on(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Dl(o,t[n>>2]|0),O(e,o),h=r}function sr(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Us(o,t[n>>2]|0),O(e,o),h=r}function mn(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,qs(o,t[n>>2]|0),O(e,o),h=r}function pr(e){return e=e|0,+ +w(Gr(t[e>>2]|0))}function Hr(e,n){return e=e|0,n=n|0,+ +w(St(t[e>>2]|0,n))}function Vn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,Ne(s,t[n>>2]|0,r),O(e,s),h=o}function ni(e,n,r){e=e|0,n=n|0,r=r|0,Ns(t[e>>2]|0,t[n>>2]|0,r)}function Zf(e,n){e=e|0,n=n|0,D0(t[e>>2]|0,t[n>>2]|0)}function Pm(e){return e=e|0,fi(t[e>>2]|0)|0}function Ha(e){return e=e|0,e=nr(t[e>>2]|0)|0,e?e=Yf(e)|0:e=0,e|0}function vd(e,n){return e=e|0,n=n|0,e=e0(t[e>>2]|0,n)|0,e?e=Yf(e)|0:e=0,e|0}function gd(e,n){e=e|0,n=n|0;var r=0,o=0;o=Tt(4)|0,ba(o,n),r=e+4|0,n=t[r>>2]|0,t[r>>2]=o,n|0&&(Ju(n),Ve(n)),bu(t[e>>2]|0,1)}function ba(e,n){e=e|0,n=n|0,Oo(e,n)}function Bc(e,n,r,o,s,l){e=e|0,n=n|0,r=w(r),o=o|0,s=w(s),l=l|0;var d=0,_=0;d=h,h=h+16|0,_=d,Mm(_,Vu(n)|0,+r,o,+s,l),D[e>>2]=w(+L[_>>3]),D[e+4>>2]=w(+L[_+8>>3]),h=d}function Mm(e,n,r,o,s,l){e=e|0,n=n|0,r=+r,o=o|0,s=+s,l=l|0;var d=0,_=0,y=0,k=0,T=0;d=h,h=h+32|0,T=d+8|0,k=d+20|0,y=d,_=d+16|0,L[T>>3]=r,t[k>>2]=o,L[y>>3]=s,t[_>>2]=l,_d(e,t[n+4>>2]|0,T,k,y,_),h=d}function _d(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0;d=h,h=h+16|0,_=d,Zo(_),n=Oi(n)|0,Fm(e,n,+L[r>>3],t[o>>2]|0,+L[s>>3],t[l>>2]|0),eu(_),h=d}function Oi(e){return e=e|0,t[e>>2]|0}function Fm(e,n,r,o,s,l){e=e|0,n=n|0,r=+r,o=o|0,s=+s,l=l|0;var d=0;d=ko(yd()|0)|0,r=+Ko(r),o=jc(o)|0,s=+Ko(s),Ga(e,ro(0,d|0,n|0,+r,o|0,+s,jc(l)|0)|0)}function yd(){var e=0;return c[7608]|0||(Ed(9120),e=7608,t[e>>2]=1,t[e+4>>2]=0),9120}function ko(e){return e=e|0,t[e+8>>2]|0}function Ko(e){return e=+e,+ +Ol(e)}function jc(e){return e=e|0,Dd(e)|0}function Ga(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;s=h,h=h+32|0,r=s,o=n,o&1?(Lm(r,0),c0(o|0,r|0)|0,Va(e,r),Wn(r)):(t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2]),h=s}function Lm(e,n){e=e|0,n=n|0,wd(e,n),t[e+8>>2]=0,c[e+24>>0]=0}function Va(e,n){e=e|0,n=n|0,n=n+8|0,t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2]}function Wn(e){e=e|0,c[e+24>>0]=0}function wd(e,n){e=e|0,n=n|0,t[e>>2]=n}function Dd(e){return e=e|0,e|0}function Ol(e){return e=+e,+e}function Ed(e){e=e|0,Ao(e,Rm()|0,4)}function Rm(){return 1064}function Ao(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=hl(n|0,r+1|0)|0}function Oo(e,n){e=e|0,n=n|0,n=t[n>>2]|0,t[e>>2]=n,qi(n|0)}function Nm(e){e=e|0;var n=0,r=0;r=e+4|0,n=t[r>>2]|0,t[r>>2]=0,n|0&&(Ju(n),Ve(n)),bu(t[e>>2]|0,0)}function Uc(e){e=e|0,rr(t[e>>2]|0)}function Ya(e){return e=e|0,Go(t[e>>2]|0)|0}function Sd(e,n,r,o){e=e|0,n=+n,r=+r,o=o|0,Yr(t[e>>2]|0,w(n),w(r),o)}function Cd(e){return e=e|0,+ +w(ir(t[e>>2]|0))}function ho(e){return e=e|0,+ +w(Y0(t[e>>2]|0))}function bs(e){return e=e|0,+ +w(L0(t[e>>2]|0))}function $a(e){return e=e|0,+ +w(Co(t[e>>2]|0))}function Td(e){return e=e|0,+ +w($u(t[e>>2]|0))}function qc(e){return e=e|0,+ +w(Vo(t[e>>2]|0))}function xd(e,n){e=e|0,n=n|0,L[e>>3]=+w(ir(t[n>>2]|0)),L[e+8>>3]=+w(Y0(t[n>>2]|0)),L[e+16>>3]=+w(L0(t[n>>2]|0)),L[e+24>>3]=+w(Co(t[n>>2]|0)),L[e+32>>3]=+w($u(t[n>>2]|0)),L[e+40>>3]=+w(Vo(t[n>>2]|0))}function Ka(e,n){return e=e|0,n=n|0,+ +w(Rr(t[e>>2]|0,n))}function kd(e,n){return e=e|0,n=n|0,+ +w(Jn(t[e>>2]|0,n))}function Xa(e,n){return e=e|0,n=n|0,+ +w(ai(t[e>>2]|0,n))}function Ja(){return Rs()|0}function Gs(){Bm(),Vs(),Ad(),Od(),Qa(),jm()}function Bm(){hO(11713,4938,1)}function Vs(){FA(10448)}function Ad(){hA(10408)}function Od(){Bk(10324)}function Qa(){Gx(10096)}function jm(){Um(9132)}function Um(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0,pe=0,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=0,Ki=0,Xi=0,Ji=0,Ro=0,kf=0,Af=0,Cu=0,Of=0,Js=0,Qs=0,If=0,Pf=0,Mf=0,Kn=0,Tu=0,Ff=0,us=0,Lf=0,Rf=0,Zs=0,el=0,ss=0,Fi=0,nu=0,go=0,xu=0,jl=0,Ul=0,tl=0,ql=0,zl=0,Li=0,Di=0,ku=0,xr=0,Wl=0,Qi=0,ls=0,Zi=0,fs=0,Hl=0,bl=0,cs=0,Ri=0,Au=0,Gl=0,Vl=0,Yl=0,En=0,br=0,Ei=0,eo=0,Ni=0,xn=0,Vt=0,Ou=0;n=h,h=h+672|0,r=n+656|0,Ou=n+648|0,Vt=n+640|0,xn=n+632|0,Ni=n+624|0,eo=n+616|0,Ei=n+608|0,br=n+600|0,En=n+592|0,Yl=n+584|0,Vl=n+576|0,Gl=n+568|0,Au=n+560|0,Ri=n+552|0,cs=n+544|0,bl=n+536|0,Hl=n+528|0,fs=n+520|0,Zi=n+512|0,ls=n+504|0,Qi=n+496|0,Wl=n+488|0,xr=n+480|0,ku=n+472|0,Di=n+464|0,Li=n+456|0,zl=n+448|0,ql=n+440|0,tl=n+432|0,Ul=n+424|0,jl=n+416|0,xu=n+408|0,go=n+400|0,nu=n+392|0,Fi=n+384|0,ss=n+376|0,el=n+368|0,Zs=n+360|0,Rf=n+352|0,Lf=n+344|0,us=n+336|0,Ff=n+328|0,Tu=n+320|0,Kn=n+312|0,Mf=n+304|0,Pf=n+296|0,If=n+288|0,Qs=n+280|0,Js=n+272|0,Of=n+264|0,Cu=n+256|0,Af=n+248|0,kf=n+240|0,Ro=n+232|0,Ji=n+224|0,Xi=n+216|0,Ki=n+208|0,Dr=n+200|0,zt=n+192|0,Pn=n+184|0,gn=n+176|0,It=n+168|0,Ht=n+160|0,Ln=n+152|0,vt=n+144|0,_e=n+136|0,pe=n+128|0,qe=n+120|0,ke=n+112|0,Pe=n+104|0,ie=n+96|0,le=n+88|0,we=n+80|0,q=n+72|0,P=n+64|0,T=n+56|0,k=n+48|0,y=n+40|0,_=n+32|0,d=n+24|0,l=n+16|0,s=n+8|0,o=n,qm(e,3646),Id(e,3651,2)|0,Pd(e,3665,2)|0,zm(e,3682,18)|0,t[Ou>>2]=19,t[Ou+4>>2]=0,t[r>>2]=t[Ou>>2],t[r+4>>2]=t[Ou+4>>2],gf(e,3690,r)|0,t[Vt>>2]=1,t[Vt+4>>2]=0,t[r>>2]=t[Vt>>2],t[r+4>>2]=t[Vt+4>>2],Md(e,3696,r)|0,t[xn>>2]=2,t[xn+4>>2]=0,t[r>>2]=t[xn>>2],t[r+4>>2]=t[xn+4>>2],Xr(e,3706,r)|0,t[Ni>>2]=1,t[Ni+4>>2]=0,t[r>>2]=t[Ni>>2],t[r+4>>2]=t[Ni+4>>2],yi(e,3722,r)|0,t[eo>>2]=2,t[eo+4>>2]=0,t[r>>2]=t[eo>>2],t[r+4>>2]=t[eo+4>>2],yi(e,3734,r)|0,t[Ei>>2]=3,t[Ei+4>>2]=0,t[r>>2]=t[Ei>>2],t[r+4>>2]=t[Ei+4>>2],Xr(e,3753,r)|0,t[br>>2]=4,t[br+4>>2]=0,t[r>>2]=t[br>>2],t[r+4>>2]=t[br+4>>2],Xr(e,3769,r)|0,t[En>>2]=5,t[En+4>>2]=0,t[r>>2]=t[En>>2],t[r+4>>2]=t[En+4>>2],Xr(e,3783,r)|0,t[Yl>>2]=6,t[Yl+4>>2]=0,t[r>>2]=t[Yl>>2],t[r+4>>2]=t[Yl+4>>2],Xr(e,3796,r)|0,t[Vl>>2]=7,t[Vl+4>>2]=0,t[r>>2]=t[Vl>>2],t[r+4>>2]=t[Vl+4>>2],Xr(e,3813,r)|0,t[Gl>>2]=8,t[Gl+4>>2]=0,t[r>>2]=t[Gl>>2],t[r+4>>2]=t[Gl+4>>2],Xr(e,3825,r)|0,t[Au>>2]=3,t[Au+4>>2]=0,t[r>>2]=t[Au>>2],t[r+4>>2]=t[Au+4>>2],yi(e,3843,r)|0,t[Ri>>2]=4,t[Ri+4>>2]=0,t[r>>2]=t[Ri>>2],t[r+4>>2]=t[Ri+4>>2],yi(e,3853,r)|0,t[cs>>2]=9,t[cs+4>>2]=0,t[r>>2]=t[cs>>2],t[r+4>>2]=t[cs+4>>2],Xr(e,3870,r)|0,t[bl>>2]=10,t[bl+4>>2]=0,t[r>>2]=t[bl>>2],t[r+4>>2]=t[bl+4>>2],Xr(e,3884,r)|0,t[Hl>>2]=11,t[Hl+4>>2]=0,t[r>>2]=t[Hl>>2],t[r+4>>2]=t[Hl+4>>2],Xr(e,3896,r)|0,t[fs>>2]=1,t[fs+4>>2]=0,t[r>>2]=t[fs>>2],t[r+4>>2]=t[fs+4>>2],j0(e,3907,r)|0,t[Zi>>2]=2,t[Zi+4>>2]=0,t[r>>2]=t[Zi>>2],t[r+4>>2]=t[Zi+4>>2],j0(e,3915,r)|0,t[ls>>2]=3,t[ls+4>>2]=0,t[r>>2]=t[ls>>2],t[r+4>>2]=t[ls+4>>2],j0(e,3928,r)|0,t[Qi>>2]=4,t[Qi+4>>2]=0,t[r>>2]=t[Qi>>2],t[r+4>>2]=t[Qi+4>>2],j0(e,3948,r)|0,t[Wl>>2]=5,t[Wl+4>>2]=0,t[r>>2]=t[Wl>>2],t[r+4>>2]=t[Wl+4>>2],j0(e,3960,r)|0,t[xr>>2]=6,t[xr+4>>2]=0,t[r>>2]=t[xr>>2],t[r+4>>2]=t[xr+4>>2],j0(e,3974,r)|0,t[ku>>2]=7,t[ku+4>>2]=0,t[r>>2]=t[ku>>2],t[r+4>>2]=t[ku+4>>2],j0(e,3983,r)|0,t[Di>>2]=20,t[Di+4>>2]=0,t[r>>2]=t[Di>>2],t[r+4>>2]=t[Di+4>>2],gf(e,3999,r)|0,t[Li>>2]=8,t[Li+4>>2]=0,t[r>>2]=t[Li>>2],t[r+4>>2]=t[Li+4>>2],j0(e,4012,r)|0,t[zl>>2]=9,t[zl+4>>2]=0,t[r>>2]=t[zl>>2],t[r+4>>2]=t[zl+4>>2],j0(e,4022,r)|0,t[ql>>2]=21,t[ql+4>>2]=0,t[r>>2]=t[ql>>2],t[r+4>>2]=t[ql+4>>2],gf(e,4039,r)|0,t[tl>>2]=10,t[tl+4>>2]=0,t[r>>2]=t[tl>>2],t[r+4>>2]=t[tl+4>>2],j0(e,4053,r)|0,t[Ul>>2]=11,t[Ul+4>>2]=0,t[r>>2]=t[Ul>>2],t[r+4>>2]=t[Ul+4>>2],j0(e,4065,r)|0,t[jl>>2]=12,t[jl+4>>2]=0,t[r>>2]=t[jl>>2],t[r+4>>2]=t[jl+4>>2],j0(e,4084,r)|0,t[xu>>2]=13,t[xu+4>>2]=0,t[r>>2]=t[xu>>2],t[r+4>>2]=t[xu+4>>2],j0(e,4097,r)|0,t[go>>2]=14,t[go+4>>2]=0,t[r>>2]=t[go>>2],t[r+4>>2]=t[go+4>>2],j0(e,4117,r)|0,t[nu>>2]=15,t[nu+4>>2]=0,t[r>>2]=t[nu>>2],t[r+4>>2]=t[nu+4>>2],j0(e,4129,r)|0,t[Fi>>2]=16,t[Fi+4>>2]=0,t[r>>2]=t[Fi>>2],t[r+4>>2]=t[Fi+4>>2],j0(e,4148,r)|0,t[ss>>2]=17,t[ss+4>>2]=0,t[r>>2]=t[ss>>2],t[r+4>>2]=t[ss+4>>2],j0(e,4161,r)|0,t[el>>2]=18,t[el+4>>2]=0,t[r>>2]=t[el>>2],t[r+4>>2]=t[el+4>>2],j0(e,4181,r)|0,t[Zs>>2]=5,t[Zs+4>>2]=0,t[r>>2]=t[Zs>>2],t[r+4>>2]=t[Zs+4>>2],yi(e,4196,r)|0,t[Rf>>2]=6,t[Rf+4>>2]=0,t[r>>2]=t[Rf>>2],t[r+4>>2]=t[Rf+4>>2],yi(e,4206,r)|0,t[Lf>>2]=7,t[Lf+4>>2]=0,t[r>>2]=t[Lf>>2],t[r+4>>2]=t[Lf+4>>2],yi(e,4217,r)|0,t[us>>2]=3,t[us+4>>2]=0,t[r>>2]=t[us>>2],t[r+4>>2]=t[us+4>>2],Zu(e,4235,r)|0,t[Ff>>2]=1,t[Ff+4>>2]=0,t[r>>2]=t[Ff>>2],t[r+4>>2]=t[Ff+4>>2],_f(e,4251,r)|0,t[Tu>>2]=4,t[Tu+4>>2]=0,t[r>>2]=t[Tu>>2],t[r+4>>2]=t[Tu+4>>2],Zu(e,4263,r)|0,t[Kn>>2]=5,t[Kn+4>>2]=0,t[r>>2]=t[Kn>>2],t[r+4>>2]=t[Kn+4>>2],Zu(e,4279,r)|0,t[Mf>>2]=6,t[Mf+4>>2]=0,t[r>>2]=t[Mf>>2],t[r+4>>2]=t[Mf+4>>2],Zu(e,4293,r)|0,t[Pf>>2]=7,t[Pf+4>>2]=0,t[r>>2]=t[Pf>>2],t[r+4>>2]=t[Pf+4>>2],Zu(e,4306,r)|0,t[If>>2]=8,t[If+4>>2]=0,t[r>>2]=t[If>>2],t[r+4>>2]=t[If+4>>2],Zu(e,4323,r)|0,t[Qs>>2]=9,t[Qs+4>>2]=0,t[r>>2]=t[Qs>>2],t[r+4>>2]=t[Qs+4>>2],Zu(e,4335,r)|0,t[Js>>2]=2,t[Js+4>>2]=0,t[r>>2]=t[Js>>2],t[r+4>>2]=t[Js+4>>2],_f(e,4353,r)|0,t[Of>>2]=12,t[Of+4>>2]=0,t[r>>2]=t[Of>>2],t[r+4>>2]=t[Of+4>>2],Io(e,4363,r)|0,t[Cu>>2]=1,t[Cu+4>>2]=0,t[r>>2]=t[Cu>>2],t[r+4>>2]=t[Cu+4>>2],_u(e,4376,r)|0,t[Af>>2]=2,t[Af+4>>2]=0,t[r>>2]=t[Af>>2],t[r+4>>2]=t[Af+4>>2],_u(e,4388,r)|0,t[kf>>2]=13,t[kf+4>>2]=0,t[r>>2]=t[kf>>2],t[r+4>>2]=t[kf+4>>2],Io(e,4402,r)|0,t[Ro>>2]=14,t[Ro+4>>2]=0,t[r>>2]=t[Ro>>2],t[r+4>>2]=t[Ro+4>>2],Io(e,4411,r)|0,t[Ji>>2]=15,t[Ji+4>>2]=0,t[r>>2]=t[Ji>>2],t[r+4>>2]=t[Ji+4>>2],Io(e,4421,r)|0,t[Xi>>2]=16,t[Xi+4>>2]=0,t[r>>2]=t[Xi>>2],t[r+4>>2]=t[Xi+4>>2],Io(e,4433,r)|0,t[Ki>>2]=17,t[Ki+4>>2]=0,t[r>>2]=t[Ki>>2],t[r+4>>2]=t[Ki+4>>2],Io(e,4446,r)|0,t[Dr>>2]=18,t[Dr+4>>2]=0,t[r>>2]=t[Dr>>2],t[r+4>>2]=t[Dr+4>>2],Io(e,4458,r)|0,t[zt>>2]=3,t[zt+4>>2]=0,t[r>>2]=t[zt>>2],t[r+4>>2]=t[zt+4>>2],_u(e,4471,r)|0,t[Pn>>2]=1,t[Pn+4>>2]=0,t[r>>2]=t[Pn>>2],t[r+4>>2]=t[Pn+4>>2],ec(e,4486,r)|0,t[gn>>2]=10,t[gn+4>>2]=0,t[r>>2]=t[gn>>2],t[r+4>>2]=t[gn+4>>2],Zu(e,4496,r)|0,t[It>>2]=11,t[It+4>>2]=0,t[r>>2]=t[It>>2],t[r+4>>2]=t[It+4>>2],Zu(e,4508,r)|0,t[Ht>>2]=3,t[Ht+4>>2]=0,t[r>>2]=t[Ht>>2],t[r+4>>2]=t[Ht+4>>2],_f(e,4519,r)|0,t[Ln>>2]=4,t[Ln+4>>2]=0,t[r>>2]=t[Ln>>2],t[r+4>>2]=t[Ln+4>>2],Wm(e,4530,r)|0,t[vt>>2]=19,t[vt+4>>2]=0,t[r>>2]=t[vt>>2],t[r+4>>2]=t[vt+4>>2],Fd(e,4542,r)|0,t[_e>>2]=12,t[_e+4>>2]=0,t[r>>2]=t[_e>>2],t[r+4>>2]=t[_e+4>>2],yf(e,4554,r)|0,t[pe>>2]=13,t[pe+4>>2]=0,t[r>>2]=t[pe>>2],t[r+4>>2]=t[pe+4>>2],tc(e,4568,r)|0,t[qe>>2]=2,t[qe+4>>2]=0,t[r>>2]=t[qe>>2],t[r+4>>2]=t[qe+4>>2],Hm(e,4578,r)|0,t[ke>>2]=20,t[ke+4>>2]=0,t[r>>2]=t[ke>>2],t[r+4>>2]=t[ke+4>>2],Ld(e,4587,r)|0,t[Pe>>2]=22,t[Pe+4>>2]=0,t[r>>2]=t[Pe>>2],t[r+4>>2]=t[Pe+4>>2],gf(e,4602,r)|0,t[ie>>2]=23,t[ie+4>>2]=0,t[r>>2]=t[ie>>2],t[r+4>>2]=t[ie+4>>2],gf(e,4619,r)|0,t[le>>2]=14,t[le+4>>2]=0,t[r>>2]=t[le>>2],t[r+4>>2]=t[le+4>>2],Rd(e,4629,r)|0,t[we>>2]=1,t[we+4>>2]=0,t[r>>2]=t[we>>2],t[r+4>>2]=t[we+4>>2],zc(e,4637,r)|0,t[q>>2]=4,t[q+4>>2]=0,t[r>>2]=t[q>>2],t[r+4>>2]=t[q+4>>2],_u(e,4653,r)|0,t[P>>2]=5,t[P+4>>2]=0,t[r>>2]=t[P>>2],t[r+4>>2]=t[P+4>>2],_u(e,4669,r)|0,t[T>>2]=6,t[T+4>>2]=0,t[r>>2]=t[T>>2],t[r+4>>2]=t[T+4>>2],_u(e,4686,r)|0,t[k>>2]=7,t[k+4>>2]=0,t[r>>2]=t[k>>2],t[r+4>>2]=t[k+4>>2],_u(e,4701,r)|0,t[y>>2]=8,t[y+4>>2]=0,t[r>>2]=t[y>>2],t[r+4>>2]=t[y+4>>2],_u(e,4719,r)|0,t[_>>2]=9,t[_+4>>2]=0,t[r>>2]=t[_>>2],t[r+4>>2]=t[_+4>>2],_u(e,4736,r)|0,t[d>>2]=21,t[d+4>>2]=0,t[r>>2]=t[d>>2],t[r+4>>2]=t[d+4>>2],Nd(e,4754,r)|0,t[l>>2]=2,t[l+4>>2]=0,t[r>>2]=t[l>>2],t[r+4>>2]=t[l+4>>2],ec(e,4772,r)|0,t[s>>2]=3,t[s+4>>2]=0,t[r>>2]=t[s>>2],t[r+4>>2]=t[s+4>>2],ec(e,4790,r)|0,t[o>>2]=4,t[o+4>>2]=0,t[r>>2]=t[o>>2],t[r+4>>2]=t[o+4>>2],ec(e,4808,r)|0,h=n}function qm(e,n){e=e|0,n=n|0;var r=0;r=Nx()|0,t[e>>2]=r,Bx(r,n),Cf(t[e>>2]|0)}function Id(e,n,r){return e=e|0,n=n|0,r=r|0,Ex(e,Zn(n)|0,r,0),e|0}function Pd(e,n,r){return e=e|0,n=n|0,r=r|0,ux(e,Zn(n)|0,r,0),e|0}function zm(e,n,r){return e=e|0,n=n|0,r=r|0,V9(e,Zn(n)|0,r,0),e|0}function gf(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],I9(e,n,s),h=o,e|0}function Md(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],vo(e,n,s),h=o,e|0}function Xr(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],a(e,n,s),h=o,e|0}function yi(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],n4(e,n,s),h=o,e|0}function j0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],b_(e,n,s),h=o,e|0}function Zu(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],L_(e,n,s),h=o,e|0}function _f(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Hp(e,n,s),h=o,e|0}function Io(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],e_(e,n,s),h=o,e|0}function _u(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Ip(e,n,s),h=o,e|0}function ec(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Ng(e,n,s),h=o,e|0}function Wm(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],l0(e,n,s),h=o,e|0}function Fd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],hg(e,n,s),h=o,e|0}function yf(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],sg(e,n,s),h=o,e|0}function tc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Kv(e,n,s),h=o,e|0}function Hm(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],y1(e,n,s),h=o,e|0}function Ld(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],wv(e,n,s),h=o,e|0}function Rd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],fv(e,n,s),h=o,e|0}function zc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Gd(e,n,s),h=o,e|0}function Nd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Wc(e,n,s),h=o,e|0}function Wc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Hc(e,r,s,1),h=o}function Zn(e){return e=e|0,e|0}function Hc(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=Za()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Bd(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,bc(l,o)|0,o),h=s}function Za(){var e=0,n=0;if(c[7616]|0||(yu(9136),Bt(24,9136,Q|0)|0,n=7616,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9136)|0)){e=9136,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));yu(9136)}return 9136}function Bd(e){return e=e|0,0}function bc(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=Za()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],n1(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jd(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ur(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0;d=h,h=h+32|0,q=d+24|0,P=d+20|0,y=d+16|0,T=d+12|0,k=d+8|0,_=d+4|0,we=d,t[P>>2]=n,t[y>>2]=r,t[T>>2]=o,t[k>>2]=s,t[_>>2]=l,l=e+28|0,t[we>>2]=t[l>>2],t[q>>2]=t[we>>2],e1(e+24|0,q,P,T,k,y,_)|0,t[l>>2]=t[t[l>>2]>>2],h=d}function e1(e,n,r,o,s,l,d){return e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0,e=bm(n)|0,n=Tt(24)|0,t1(n+4|0,t[r>>2]|0,t[o>>2]|0,t[s>>2]|0,t[l>>2]|0,t[d>>2]|0),t[n>>2]=t[e>>2],t[e>>2]=n,n|0}function bm(e){return e=e|0,t[e>>2]|0}function t1(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=o,t[e+12>>2]=s,t[e+16>>2]=l}function Lt(e,n){return e=e|0,n=n|0,n|e|0}function n1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function jd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Gm(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Ud(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],n1(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Vm(e,_),Ym(_),h=k;return}}function Gm(e){return e=e|0,357913941}function Ud(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Vm(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Ym(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function yu(e){e=e|0,Gc(e)}function r1(e){e=e|0,i1(e+24|0)}function Dn(e){return e=e|0,t[e>>2]|0}function i1(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Gc(e){e=e|0;var n=0;n=An()|0,Nn(e,2,3,n,cn()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function An(){return 9228}function cn(){return 1140}function Vc(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=Il(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=$m(n,o)|0,h=r,n|0}function Nn(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=o,t[e+12>>2]=s,t[e+16>>2]=l}function Il(e){return e=e|0,(t[(Za()|0)+24>>2]|0)+(e*12|0)|0}function $m(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;return s=h,h=h+48|0,o=s,r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Bl[r&31](o,e),o=o1(o)|0,h=s,o|0}function o1(e){e=e|0;var n=0,r=0,o=0,s=0;return s=h,h=h+32|0,n=s+12|0,r=s,o=U0(u1()|0)|0,o?(s1(n,o),l1(r,n),qd(e,r),e=f1(n)|0):e=zd(e)|0,h=s,e|0}function u1(){var e=0;return c[7632]|0||(nc(9184),Bt(25,9184,Q|0)|0,e=7632,t[e>>2]=1,t[e+4>>2]=0),9184}function U0(e){return e=e|0,t[e+36>>2]|0}function s1(e,n){e=e|0,n=n|0,t[e>>2]=n,t[e+4>>2]=e,t[e+8>>2]=0}function l1(e,n){e=e|0,n=n|0,t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=0}function qd(e,n){e=e|0,n=n|0,Ii(n,e,e+8|0,e+16|0,e+24|0,e+32|0,e+40|0)|0}function f1(e){return e=e|0,t[(t[e+4>>2]|0)+8>>2]|0}function zd(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0;y=h,h=h+16|0,r=y+4|0,o=y,s=Qo(8)|0,l=s,d=Tt(48)|0,_=d,n=_+48|0;do t[_>>2]=t[e>>2],_=_+4|0,e=e+4|0;while((_|0)<(n|0));return n=l+4|0,t[n>>2]=d,_=Tt(8)|0,d=t[n>>2]|0,t[o>>2]=0,t[r>>2]=t[o>>2],Wd(_,d,r),t[s>>2]=_,h=y,l|0}function Wd(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1092,t[r+12>>2]=n,t[e+4>>2]=r}function Km(e){e=e|0,da(e),Ve(e)}function Xm(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function es(e){e=e|0,Ve(e)}function Ii(e,n,r,o,s,l,d){return e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0,l=c1(t[e>>2]|0,n,r,o,s,l,d)|0,d=e+4|0,t[(t[d>>2]|0)+8>>2]=l,t[(t[d>>2]|0)+8>>2]|0}function c1(e,n,r,o,s,l,d){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0;var _=0,y=0;return _=h,h=h+16|0,y=_,Zo(y),e=Oi(e)|0,d=Jm(e,+L[n>>3],+L[r>>3],+L[o>>3],+L[s>>3],+L[l>>3],+L[d>>3])|0,eu(y),h=_,d|0}function Jm(e,n,r,o,s,l,d){e=e|0,n=+n,r=+r,o=+o,s=+s,l=+l,d=+d;var _=0;return _=ko(a1()|0)|0,n=+Ko(n),r=+Ko(r),o=+Ko(o),s=+Ko(s),l=+Ko(l),xs(0,_|0,e|0,+n,+r,+o,+s,+l,+ +Ko(d))|0}function a1(){var e=0;return c[7624]|0||(Qm(9172),e=7624,t[e>>2]=1,t[e+4>>2]=0),9172}function Qm(e){e=e|0,Ao(e,Zm()|0,6)}function Zm(){return 1112}function nc(e){e=e|0,Ys(e)}function Hd(e){e=e|0,d1(e+24|0),bd(e+16|0)}function d1(e){e=e|0,tv(e)}function bd(e){e=e|0,ev(e)}function ev(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,Ve(r);while((n|0)!=0);t[e>>2]=0}function tv(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,Ve(r);while((n|0)!=0);t[e>>2]=0}function Ys(e){e=e|0;var n=0;t[e+16>>2]=0,t[e+20>>2]=0,n=e+24|0,t[n>>2]=0,t[e+28>>2]=n,t[e+36>>2]=0,c[e+40>>0]=0,c[e+41>>0]=0}function Gd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Vd(e,r,s,0),h=o}function Vd(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=p1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=h1(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Yd(l,o)|0,o),h=s}function p1(){var e=0,n=0;if(c[7640]|0||(Xo(9232),Bt(26,9232,Q|0)|0,n=7640,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9232)|0)){e=9232,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Xo(9232)}return 9232}function h1(e){return e=e|0,0}function Yd(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=p1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],wf(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(m1(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function wf(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function m1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=$d(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Kd(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],wf(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Yc(e,_),Xd(_),h=k;return}}function $d(e){return e=e|0,357913941}function Kd(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Yc(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Xd(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Xo(e){e=e|0,Jd(e)}function Pl(e){e=e|0,nv(e+24|0)}function nv(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Jd(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,rv()|0,3),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function rv(){return 1144}function iv(e,n,r,o,s){e=e|0,n=n|0,r=+r,o=+o,s=s|0;var l=0,d=0,_=0,y=0;l=h,h=h+16|0,d=l+8|0,_=l,y=ov(e)|0,e=t[y+4>>2]|0,t[_>>2]=t[y>>2],t[_+4>>2]=e,t[d>>2]=t[_>>2],t[d+4>>2]=t[_+4>>2],uv(n,d,r,o,s),h=l}function ov(e){return e=e|0,(t[(p1()|0)+24>>2]|0)+(e*12|0)|0}function uv(e,n,r,o,s){e=e|0,n=n|0,r=+r,o=+o,s=s|0;var l=0,d=0,_=0,y=0,k=0;k=h,h=h+16|0,d=k+2|0,_=k+1|0,y=k,l=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(l=t[(t[e>>2]|0)+l>>2]|0),wu(d,r),r=+Du(d,r),wu(_,o),o=+Du(_,o),ts(y,s),y=ns(y,s)|0,iD[l&1](e,r,o,y),h=k}function wu(e,n){e=e|0,n=+n}function Du(e,n){return e=e|0,n=+n,+ +lv(n)}function ts(e,n){e=e|0,n=n|0}function ns(e,n){return e=e|0,n=n|0,sv(n)|0}function sv(e){return e=e|0,e|0}function lv(e){return e=+e,+e}function fv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Qd(e,r,s,1),h=o}function Qd(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=$c()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Zd(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,cv(l,o)|0,o),h=s}function $c(){var e=0,n=0;if(c[7648]|0||(np(9268),Bt(27,9268,Q|0)|0,n=7648,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9268)|0)){e=9268,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));np(9268)}return 9268}function Zd(e){return e=e|0,0}function cv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=$c()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],ep(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(av(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ep(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function av(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=tp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,dv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],ep(l,o,r),t[y>>2]=(t[y>>2]|0)+12,pv(e,_),hv(_),h=k;return}}function tp(e){return e=e|0,357913941}function dv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function pv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function hv(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function np(e){e=e|0,Po(e)}function mv(e){e=e|0,vv(e+24|0)}function vv(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Po(e){e=e|0;var n=0;n=An()|0,Nn(e,2,4,n,gv()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gv(){return 1160}function _v(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=yv(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=rp(n,o)|0,h=r,n|0}function yv(e){return e=e|0,(t[($c()|0)+24>>2]|0)+(e*12|0)|0}function rp(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),ip(dc[r&31](e)|0)|0}function ip(e){return e=e|0,e&1|0}function wv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Dv(e,r,s,0),h=o}function Dv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=v1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=g1(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Ev(l,o)|0,o),h=s}function v1(){var e=0,n=0;if(c[7656]|0||(up(9304),Bt(28,9304,Q|0)|0,n=7656,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9304)|0)){e=9304,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));up(9304)}return 9304}function g1(e){return e=e|0,0}function Ev(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=v1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],op(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Sv(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function op(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Sv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Cv(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Tv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],op(l,o,r),t[y>>2]=(t[y>>2]|0)+12,xv(e,_),kv(_),h=k;return}}function Cv(e){return e=e|0,357913941}function Tv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function xv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function kv(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function up(e){e=e|0,Iv(e)}function Av(e){e=e|0,Ov(e+24|0)}function Ov(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Iv(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,Pv()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Pv(){return 1164}function Mv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=Fv(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Lv(n,s,r),h=o}function Fv(e){return e=e|0,(t[(v1()|0)+24>>2]|0)+(e*12|0)|0}function Lv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),$s(s,r),r=Ks(s,r)|0,Bl[o&31](e,r),Xs(s),h=l}function $s(e,n){e=e|0,n=n|0,Rv(e,n)}function Ks(e,n){return e=e|0,n=n|0,e|0}function Xs(e){e=e|0,Ju(e)}function Rv(e,n){e=e|0,n=n|0,_1(e,n)}function _1(e,n){e=e|0,n=n|0,t[e>>2]=n}function y1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],sp(e,r,s,0),h=o}function sp(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=w1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Nv(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Bv(l,o)|0,o),h=s}function w1(){var e=0,n=0;if(c[7664]|0||(cp(9340),Bt(29,9340,Q|0)|0,n=7664,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9340)|0)){e=9340,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));cp(9340)}return 9340}function Nv(e){return e=e|0,0}function Bv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=w1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],lp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jv(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function lp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function jv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Uv(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,qv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],lp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,zv(e,_),fp(_),h=k;return}}function Uv(e){return e=e|0,357913941}function qv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function zv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function fp(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function cp(e){e=e|0,Hv(e)}function Kc(e){e=e|0,Wv(e+24|0)}function Wv(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Hv(e){e=e|0;var n=0;n=An()|0,Nn(e,2,4,n,bv()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function bv(){return 1180}function Gv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=Vv(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=Yv(n,s,r)|0,h=o,r|0}function Vv(e){return e=e|0,(t[(w1()|0)+24>>2]|0)+(e*12|0)|0}function Yv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;return l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),Ml(s,r),s=Fl(s,r)|0,s=Xc(J4[o&15](e,s)|0)|0,h=l,s|0}function Ml(e,n){e=e|0,n=n|0}function Fl(e,n){return e=e|0,n=n|0,$v(n)|0}function Xc(e){return e=e|0,e|0}function $v(e){return e=e|0,e|0}function Kv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Xv(e,r,s,0),h=o}function Xv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=D1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Jv(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Qv(l,o)|0,o),h=s}function D1(){var e=0,n=0;if(c[7672]|0||(hp(9376),Bt(30,9376,Q|0)|0,n=7672,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9376)|0)){e=9376,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));hp(9376)}return 9376}function Jv(e){return e=e|0,0}function Qv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=D1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],ap(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(dp(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ap(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function dp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=pp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Zv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],ap(l,o,r),t[y>>2]=(t[y>>2]|0)+12,eg(e,_),tg(_),h=k;return}}function pp(e){return e=e|0,357913941}function Zv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function eg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function tg(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function hp(e){e=e|0,rg(e)}function Jc(e){e=e|0,ng(e+24|0)}function ng(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function rg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,mp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function mp(){return 1196}function ig(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=og(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=ug(n,o)|0,h=r,n|0}function og(e){return e=e|0,(t[(D1()|0)+24>>2]|0)+(e*12|0)|0}function ug(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Xc(dc[r&31](e)|0)|0}function sg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],lg(e,r,s,1),h=o}function lg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=E1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=fg(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,cg(l,o)|0,o),h=s}function E1(){var e=0,n=0;if(c[7680]|0||(C1(9412),Bt(31,9412,Q|0)|0,n=7680,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9412)|0)){e=9412,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));C1(9412)}return 9412}function fg(e){return e=e|0,0}function cg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=E1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],rc(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(ag(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function rc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function ag(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=vp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,gp(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],rc(l,o,r),t[y>>2]=(t[y>>2]|0)+12,S1(e,_),_p(_),h=k;return}}function vp(e){return e=e|0,357913941}function gp(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function S1(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function _p(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function C1(e){e=e|0,dg(e)}function yp(e){e=e|0,wp(e+24|0)}function wp(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function dg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,6,n,Dp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Dp(){return 1200}function pg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=Qc(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=Zc(n,o)|0,h=r,n|0}function Qc(e){return e=e|0,(t[(E1()|0)+24>>2]|0)+(e*12|0)|0}function Zc(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),ea(dc[r&31](e)|0)|0}function ea(e){return e=e|0,e|0}function hg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],T1(e,r,s,0),h=o}function T1(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=ta()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=mg(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,vg(l,o)|0,o),h=s}function ta(){var e=0,n=0;if(c[7688]|0||(Sp(9448),Bt(32,9448,Q|0)|0,n=7688,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9448)|0)){e=9448,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Sp(9448)}return 9448}function mg(e){return e=e|0,0}function vg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=ta()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Ep(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(gg(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Ep(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function gg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=_g(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,yg(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Ep(l,o,r),t[y>>2]=(t[y>>2]|0)+12,wg(e,_),Dg(_),h=k;return}}function _g(e){return e=e|0,357913941}function yg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function wg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Dg(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Sp(e){e=e|0,Cg(e)}function Eg(e){e=e|0,Sg(e+24|0)}function Sg(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Cg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,6,n,Mo()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Mo(){return 1204}function Tg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=xg(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Ll(n,s,r),h=o}function xg(e){return e=e|0,(t[(ta()|0)+24>>2]|0)+(e*12|0)|0}function Ll(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),On(s,r),s=x1(s,r)|0,Bl[o&31](e,s),h=l}function On(e,n){e=e|0,n=n|0}function x1(e,n){return e=e|0,n=n|0,Vi(n)|0}function Vi(e){return e=e|0,e|0}function l0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],kg(e,r,s,0),h=o}function kg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=Eu()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Ag(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Og(l,o)|0,o),h=s}function Eu(){var e=0,n=0;if(c[7696]|0||(A1(9484),Bt(33,9484,Q|0)|0,n=7696,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9484)|0)){e=9484,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));A1(9484)}return 9484}function Ag(e){return e=e|0,0}function Og(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=Eu()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Cp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Ig(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Cp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Ig(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Pg(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,k1(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Cp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Mg(e,_),rs(_),h=k;return}}function Pg(e){return e=e|0,357913941}function k1(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Mg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function rs(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function A1(e){e=e|0,n0(e)}function na(e){e=e|0,Jr(e+24|0)}function Jr(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function n0(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,Tp()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Tp(){return 1212}function Fg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+8|0,d=s,_=Lg(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],Rg(n,l,r,o),h=s}function Lg(e){return e=e|0,(t[(Eu()|0)+24>>2]|0)+(e*12|0)|0}function Rg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;_=h,h=h+16|0,l=_+1|0,d=_,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),On(l,r),l=x1(l,r)|0,Ml(d,o),d=Fl(d,o)|0,X1[s&15](e,l,d),h=_}function Ng(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Bg(e,r,s,1),h=o}function Bg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=O1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=xp(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,ic(l,o)|0,o),h=s}function O1(){var e=0,n=0;if(c[7704]|0||(Ap(9520),Bt(34,9520,Q|0)|0,n=7704,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9520)|0)){e=9520,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ap(9520)}return 9520}function xp(e){return e=e|0,0}function ic(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=O1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],ra(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jg(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ra(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function jg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=kp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,ia(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],ra(l,o,r),t[y>>2]=(t[y>>2]|0)+12,mo(e,_),Df(_),h=k;return}}function kp(e){return e=e|0,357913941}function ia(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function mo(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Df(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Ap(e){e=e|0,zg(e)}function Ug(e){e=e|0,qg(e+24|0)}function qg(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function zg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,Wg()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Wg(){return 1224}function Op(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;return s=h,h=h+16|0,l=s+8|0,d=s,_=is(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],o=+jn(n,l,r),h=s,+o}function is(e){return e=e|0,(t[(O1()|0)+24>>2]|0)+(e*12|0)|0}function jn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(s,r),s=ns(s,r)|0,d=+Ol(+uD[o&7](e,s)),h=l,+d}function Ip(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Fo(e,r,s,1),h=o}function Fo(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=oa()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Hg(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,yr(l,o)|0,o),h=s}function oa(){var e=0,n=0;if(c[7712]|0||(Fp(9556),Bt(35,9556,Q|0)|0,n=7712,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9556)|0)){e=9556,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Fp(9556)}return 9556}function Hg(e){return e=e|0,0}function yr(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=oa()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Pp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Mp(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Pp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Mp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=ua(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,bg(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Pp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Gg(e,_),Vg(_),h=k;return}}function ua(e){return e=e|0,357913941}function bg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Gg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Vg(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Fp(e){e=e|0,Kg(e)}function Yg(e){e=e|0,$g(e+24|0)}function $g(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Kg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,Xg()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Xg(){return 1232}function Jg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=Qg(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=+Zg(n,s),h=o,+r}function Qg(e){return e=e|0,(t[(oa()|0)+24>>2]|0)+(e*12|0)|0}function Zg(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),+ +Ol(+oD[r&15](e))}function e_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],t_(e,r,s,1),h=o}function t_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=oc()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=n_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,I1(l,o)|0,o),h=s}function oc(){var e=0,n=0;if(c[7720]|0||(Rp(9592),Bt(36,9592,Q|0)|0,n=7720,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9592)|0)){e=9592,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Rp(9592)}return 9592}function n_(e){return e=e|0,0}function I1(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=oc()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Lp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(r_(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Lp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function r_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=i_(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,q0(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Lp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Yi(e,_),o_(_),h=k;return}}function i_(e){return e=e|0,357913941}function q0(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Yi(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function o_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Rp(e){e=e|0,s_(e)}function u_(e){e=e|0,Np(e+24|0)}function Np(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function s_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,7,n,l_()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function l_(){return 1276}function f_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=Bp(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=c_(n,o)|0,h=r,n|0}function Bp(e){return e=e|0,(t[(oc()|0)+24>>2]|0)+(e*12|0)|0}function c_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;return s=h,h=h+16|0,o=s,r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Bl[r&31](o,e),o=jp(o)|0,h=s,o|0}function jp(e){e=e|0;var n=0,r=0,o=0,s=0;return s=h,h=h+32|0,n=s+12|0,r=s,o=U0(Up()|0)|0,o?(s1(n,o),l1(r,n),qp(e,r),e=f1(n)|0):e=zp(e)|0,h=s,e|0}function Up(){var e=0;return c[7736]|0||(Wp(9640),Bt(25,9640,Q|0)|0,e=7736,t[e>>2]=1,t[e+4>>2]=0),9640}function qp(e,n){e=e|0,n=n|0,Ef(n,e,e+8|0)|0}function zp(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;return r=h,h=h+16|0,s=r+4|0,d=r,o=Qo(8)|0,n=o,_=Tt(16)|0,t[_>>2]=t[e>>2],t[_+4>>2]=t[e+4>>2],t[_+8>>2]=t[e+8>>2],t[_+12>>2]=t[e+12>>2],l=n+4|0,t[l>>2]=_,e=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],P1(e,l,s),t[o>>2]=e,h=r,n|0}function P1(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1244,t[r+12>>2]=n,t[e+4>>2]=r}function a_(e){e=e|0,da(e),Ve(e)}function d_(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function p_(e){e=e|0,Ve(e)}function Ef(e,n,r){return e=e|0,n=n|0,r=r|0,n=h_(t[e>>2]|0,n,r)|0,r=e+4|0,t[(t[r>>2]|0)+8>>2]=n,t[(t[r>>2]|0)+8>>2]|0}function h_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;return o=h,h=h+16|0,s=o,Zo(s),e=Oi(e)|0,r=m_(e,t[n>>2]|0,+L[r>>3])|0,eu(s),h=o,r|0}function m_(e,n,r){e=e|0,n=n|0,r=+r;var o=0;return o=ko(v_()|0)|0,n=jc(n)|0,dl(0,o|0,e|0,n|0,+ +Ko(r))|0}function v_(){var e=0;return c[7728]|0||(g_(9628),e=7728,t[e>>2]=1,t[e+4>>2]=0),9628}function g_(e){e=e|0,Ao(e,__()|0,2)}function __(){return 1264}function Wp(e){e=e|0,Ys(e)}function Hp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],y_(e,r,s,1),h=o}function y_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=M1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=w_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,D_(l,o)|0,o),h=s}function M1(){var e=0,n=0;if(c[7744]|0||(Gp(9684),Bt(37,9684,Q|0)|0,n=7744,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9684)|0)){e=9684,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Gp(9684)}return 9684}function w_(e){return e=e|0,0}function D_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=M1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],bp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(E_(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function bp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function E_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=S_(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,C_(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],bp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,T_(e,_),x_(_),h=k;return}}function S_(e){return e=e|0,357913941}function C_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function T_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function x_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Gp(e){e=e|0,O_(e)}function k_(e){e=e|0,A_(e+24|0)}function A_(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function O_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,I_()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function I_(){return 1280}function P_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=M_(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=F_(n,s,r)|0,h=o,r|0}function M_(e){return e=e|0,(t[(M1()|0)+24>>2]|0)+(e*12|0)|0}function F_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return d=h,h=h+32|0,s=d,l=d+16|0,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(l,r),l=ns(l,r)|0,X1[o&15](s,e,l),l=jp(s)|0,h=d,l|0}function L_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],R_(e,r,s,1),h=o}function R_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=F1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=N_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,B_(l,o)|0,o),h=s}function F1(){var e=0,n=0;if(c[7752]|0||(Kp(9720),Bt(38,9720,Q|0)|0,n=7752,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9720)|0)){e=9720,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Kp(9720)}return 9720}function N_(e){return e=e|0,0}function B_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=F1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Vp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(j_(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Vp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function j_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=L1(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Yp(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Vp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,$p(e,_),U_(_),h=k;return}}function L1(e){return e=e|0,357913941}function Yp(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function $p(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function U_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Kp(e){e=e|0,z_(e)}function q_(e){e=e|0,R1(e+24|0)}function R1(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function z_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,8,n,W_()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function W_(){return 1288}function H_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=$i(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=N1(n,o)|0,h=r,n|0}function $i(e){return e=e|0,(t[(F1()|0)+24>>2]|0)+(e*12|0)|0}function N1(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Dd(dc[r&31](e)|0)|0}function b_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],G_(e,r,s,0),h=o}function G_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=B1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=V_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,j1(l,o)|0,o),h=s}function B1(){var e=0,n=0;if(c[7760]|0||(q1(9756),Bt(39,9756,Q|0)|0,n=7760,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9756)|0)){e=9756,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));q1(9756)}return 9756}function V_(e){return e=e|0,0}function j1(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=B1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Xp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(U1(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Xp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function U1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Y_(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,$_(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Xp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,K_(e,_),X_(_),h=k;return}}function Y_(e){return e=e|0,357913941}function $_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function K_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function X_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function q1(e){e=e|0,Z_(e)}function J_(e){e=e|0,Q_(e+24|0)}function Q_(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Z_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,8,n,z1()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function z1(){return 1292}function W1(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=e4(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],t4(n,s,r),h=o}function e4(e){return e=e|0,(t[(B1()|0)+24>>2]|0)+(e*12|0)|0}function t4(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),wu(s,r),r=+Du(s,r),nD[o&31](e,r),h=l}function n4(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r4(e,r,s,0),h=o}function r4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=H1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=i4(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,o4(l,o)|0,o),h=s}function H1(){var e=0,n=0;if(c[7768]|0||(Qp(9792),Bt(40,9792,Q|0)|0,n=7768,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9792)|0)){e=9792,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Qp(9792)}return 9792}function i4(e){return e=e|0,0}function o4(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=H1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Jp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(u4(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Jp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function u4(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=s4(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,l4(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Jp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,f4(e,_),c4(_),h=k;return}}function s4(e){return e=e|0,357913941}function l4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function f4(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function c4(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Qp(e){e=e|0,p4(e)}function a4(e){e=e|0,d4(e+24|0)}function d4(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function p4(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,h4()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function h4(){return 1300}function m4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=+o;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+8|0,d=s,_=v4(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],g4(n,l,r,o),h=s}function v4(e){return e=e|0,(t[(H1()|0)+24>>2]|0)+(e*12|0)|0}function g4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=+o;var s=0,l=0,d=0,_=0;_=h,h=h+16|0,l=_+1|0,d=_,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),ts(l,r),l=ns(l,r)|0,wu(d,o),o=+Du(d,o),cD[s&15](e,l,o),h=_}function a(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],p(e,r,s,0),h=o}function p(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=E()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=I(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,B(l,o)|0,o),h=s}function E(){var e=0,n=0;if(c[7776]|0||(nt(9828),Bt(41,9828,Q|0)|0,n=7776,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9828)|0)){e=9828,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));nt(9828)}return 9828}function I(e){return e=e|0,0}function B(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=E()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],G(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(te(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function G(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function te(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=se(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Ee(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],G(l,o,r),t[y>>2]=(t[y>>2]|0)+12,$e(e,_),Ke(_),h=k;return}}function se(e){return e=e|0,357913941}function Ee(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function $e(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Ke(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function nt(e){e=e|0,an(e)}function Ct(e){e=e|0,Gt(e+24|0)}function Gt(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function an(e){e=e|0;var n=0;n=An()|0,Nn(e,2,7,n,qn()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function qn(){return 1312}function dn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=Yn(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],er(n,s,r),h=o}function Yn(e){return e=e|0,(t[(E()|0)+24>>2]|0)+(e*12|0)|0}function er(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(s,r),s=ns(s,r)|0,Bl[o&31](e,s),h=l}function vo(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Pi(e,r,s,0),h=o}function Pi(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=Mi()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=f0(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Jo(l,o)|0,o),h=s}function Mi(){var e=0,n=0;if(c[7784]|0||(kw(9864),Bt(42,9864,Q|0)|0,n=7784,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9864)|0)){e=9864,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));kw(9864)}return 9864}function f0(e){return e=e|0,0}function Jo(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=Mi()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Su(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Zp(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Su(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Zp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=v9(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,g9(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Su(l,o,r),t[y>>2]=(t[y>>2]|0)+12,_9(e,_),y9(_),h=k;return}}function v9(e){return e=e|0,357913941}function g9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function _9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function y9(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function kw(e){e=e|0,E9(e)}function w9(e){e=e|0,D9(e+24|0)}function D9(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function E9(e){e=e|0;var n=0;n=An()|0,Nn(e,2,8,n,S9()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function S9(){return 1320}function C9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=T9(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],x9(n,s,r),h=o}function T9(e){return e=e|0,(t[(Mi()|0)+24>>2]|0)+(e*12|0)|0}function x9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),k9(s,r),s=A9(s,r)|0,Bl[o&31](e,s),h=l}function k9(e,n){e=e|0,n=n|0}function A9(e,n){return e=e|0,n=n|0,O9(n)|0}function O9(e){return e=e|0,e|0}function I9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],P9(e,r,s,0),h=o}function P9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=_4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=M9(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,F9(l,o)|0,o),h=s}function _4(){var e=0,n=0;if(c[7792]|0||(Ow(9900),Bt(43,9900,Q|0)|0,n=7792,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9900)|0)){e=9900,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ow(9900)}return 9900}function M9(e){return e=e|0,0}function F9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=_4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Aw(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(L9(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Aw(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function L9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=R9(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,N9(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Aw(l,o,r),t[y>>2]=(t[y>>2]|0)+12,B9(e,_),j9(_),h=k;return}}function R9(e){return e=e|0,357913941}function N9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function B9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function j9(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Ow(e){e=e|0,z9(e)}function U9(e){e=e|0,q9(e+24|0)}function q9(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function z9(e){e=e|0;var n=0;n=An()|0,Nn(e,2,22,n,W9()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function W9(){return 1344}function H9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;r=h,h=h+16|0,o=r+8|0,s=r,l=b9(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],G9(n,o),h=r}function b9(e){return e=e|0,(t[(_4()|0)+24>>2]|0)+(e*12|0)|0}function G9(e,n){e=e|0,n=n|0;var r=0;r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Nl[r&127](e)}function V9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=y4()|0,e=Y9(r)|0,ur(l,n,s,e,$9(r,o)|0,o)}function y4(){var e=0,n=0;if(c[7800]|0||(Pw(9936),Bt(44,9936,Q|0)|0,n=7800,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9936)|0)){e=9936,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Pw(9936)}return 9936}function Y9(e){return e=e|0,e|0}function $9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=y4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Iw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(K9(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Iw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function K9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=X9(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,J9(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Iw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,Q9(e,s),Z9(s),h=_;return}}function X9(e){return e=e|0,536870911}function J9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function Q9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Z9(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Pw(e){e=e|0,nx(e)}function ex(e){e=e|0,tx(e+24|0)}function tx(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function nx(e){e=e|0;var n=0;n=An()|0,Nn(e,1,23,n,Mo()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function rx(e,n){e=e|0,n=n|0,ox(t[(ix(e)|0)>>2]|0,n)}function ix(e){return e=e|0,(t[(y4()|0)+24>>2]|0)+(e<<3)|0}function ox(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,On(o,n),n=x1(o,n)|0,Nl[e&127](n),h=r}function ux(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=w4()|0,e=sx(r)|0,ur(l,n,s,e,lx(r,o)|0,o)}function w4(){var e=0,n=0;if(c[7808]|0||(Fw(9972),Bt(45,9972,Q|0)|0,n=7808,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9972)|0)){e=9972,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Fw(9972)}return 9972}function sx(e){return e=e|0,e|0}function lx(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=w4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Mw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(fx(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Mw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function fx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=cx(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,ax(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Mw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,dx(e,s),px(s),h=_;return}}function cx(e){return e=e|0,536870911}function ax(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function dx(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function px(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Fw(e){e=e|0,vx(e)}function hx(e){e=e|0,mx(e+24|0)}function mx(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function vx(e){e=e|0;var n=0;n=An()|0,Nn(e,1,9,n,gx()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gx(){return 1348}function _x(e,n){return e=e|0,n=n|0,wx(t[(yx(e)|0)>>2]|0,n)|0}function yx(e){return e=e|0,(t[(w4()|0)+24>>2]|0)+(e<<3)|0}function wx(e,n){e=e|0,n=n|0;var r=0,o=0;return r=h,h=h+16|0,o=r,Lw(o,n),n=Rw(o,n)|0,n=Xc(dc[e&31](n)|0)|0,h=r,n|0}function Lw(e,n){e=e|0,n=n|0}function Rw(e,n){return e=e|0,n=n|0,Dx(n)|0}function Dx(e){return e=e|0,e|0}function Ex(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=D4()|0,e=Sx(r)|0,ur(l,n,s,e,Cx(r,o)|0,o)}function D4(){var e=0,n=0;if(c[7816]|0||(Bw(10008),Bt(46,10008,Q|0)|0,n=7816,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10008)|0)){e=10008,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Bw(10008)}return 10008}function Sx(e){return e=e|0,e|0}function Cx(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=D4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Nw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(Tx(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Nw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function Tx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=xx(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,kx(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Nw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,Ax(e,s),Ox(s),h=_;return}}function xx(e){return e=e|0,536870911}function kx(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function Ax(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Ox(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Bw(e){e=e|0,Mx(e)}function Ix(e){e=e|0,Px(e+24|0)}function Px(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function Mx(e){e=e|0;var n=0;n=An()|0,Nn(e,1,15,n,mp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Fx(e){return e=e|0,Rx(t[(Lx(e)|0)>>2]|0)|0}function Lx(e){return e=e|0,(t[(D4()|0)+24>>2]|0)+(e<<3)|0}function Rx(e){return e=e|0,Xc(ph[e&7]()|0)|0}function Nx(){var e=0;return c[7832]|0||(bx(10052),Bt(25,10052,Q|0)|0,e=7832,t[e>>2]=1,t[e+4>>2]=0),10052}function Bx(e,n){e=e|0,n=n|0,t[e>>2]=jx()|0,t[e+4>>2]=Ux()|0,t[e+12>>2]=n,t[e+8>>2]=qx()|0,t[e+32>>2]=2}function jx(){return 11709}function Ux(){return 1188}function qx(){return eh()|0}function zx(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(Wx(r),Ve(r)):n|0&&(mu(n),Ve(n))}function Sf(e,n){return e=e|0,n=n|0,n&e|0}function Wx(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function eh(){var e=0;return c[7824]|0||(t[2511]=Hx()|0,t[2512]=0,e=7824,t[e>>2]=1,t[e+4>>2]=0),10044}function Hx(){return 0}function bx(e){e=e|0,Ys(e)}function Gx(e){e=e|0;var n=0,r=0,o=0,s=0,l=0;n=h,h=h+32|0,r=n+24|0,l=n+16|0,s=n+8|0,o=n,Vx(e,4827),Yx(e,4834,3)|0,$x(e,3682,47)|0,t[l>>2]=9,t[l+4>>2]=0,t[r>>2]=t[l>>2],t[r+4>>2]=t[l+4>>2],Kx(e,4841,r)|0,t[s>>2]=1,t[s+4>>2]=0,t[r>>2]=t[s>>2],t[r+4>>2]=t[s+4>>2],Xx(e,4871,r)|0,t[o>>2]=10,t[o+4>>2]=0,t[r>>2]=t[o>>2],t[r+4>>2]=t[o+4>>2],Jx(e,4891,r)|0,h=n}function Vx(e,n){e=e|0,n=n|0;var r=0;r=Ok()|0,t[e>>2]=r,Ik(r,n),Cf(t[e>>2]|0)}function Yx(e,n,r){return e=e|0,n=n|0,r=r|0,pk(e,Zn(n)|0,r,0),e|0}function $x(e,n,r){return e=e|0,n=n|0,r=r|0,Q7(e,Zn(n)|0,r,0),e|0}function Kx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],F7(e,n,s),h=o,e|0}function Xx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],h7(e,n,s),h=o,e|0}function Jx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Qx(e,n,s),h=o,e|0}function Qx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Zx(e,r,s,1),h=o}function Zx(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=E4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=e7(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,t7(l,o)|0,o),h=s}function E4(){var e=0,n=0;if(c[7840]|0||(Uw(10100),Bt(48,10100,Q|0)|0,n=7840,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10100)|0)){e=10100,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Uw(10100)}return 10100}function e7(e){return e=e|0,0}function t7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=E4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],jw(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(n7(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function jw(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function n7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=r7(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,i7(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],jw(l,o,r),t[y>>2]=(t[y>>2]|0)+12,o7(e,_),u7(_),h=k;return}}function r7(e){return e=e|0,357913941}function i7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function o7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function u7(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Uw(e){e=e|0,f7(e)}function s7(e){e=e|0,l7(e+24|0)}function l7(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function f7(e){e=e|0;var n=0;n=An()|0,Nn(e,2,6,n,c7()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function c7(){return 1364}function a7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=d7(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=p7(n,s,r)|0,h=o,r|0}function d7(e){return e=e|0,(t[(E4()|0)+24>>2]|0)+(e*12|0)|0}function p7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;return l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(s,r),s=ns(s,r)|0,s=ip(J4[o&15](e,s)|0)|0,h=l,s|0}function h7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],m7(e,r,s,0),h=o}function m7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=S4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=v7(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,g7(l,o)|0,o),h=s}function S4(){var e=0,n=0;if(c[7848]|0||(zw(10136),Bt(49,10136,Q|0)|0,n=7848,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10136)|0)){e=10136,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));zw(10136)}return 10136}function v7(e){return e=e|0,0}function g7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=S4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],qw(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(_7(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function qw(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function _7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=y7(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,w7(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],qw(l,o,r),t[y>>2]=(t[y>>2]|0)+12,D7(e,_),E7(_),h=k;return}}function y7(e){return e=e|0,357913941}function w7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function D7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function E7(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function zw(e){e=e|0,T7(e)}function S7(e){e=e|0,C7(e+24|0)}function C7(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function T7(e){e=e|0;var n=0;n=An()|0,Nn(e,2,9,n,x7()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function x7(){return 1372}function k7(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=A7(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],O7(n,s,r),h=o}function A7(e){return e=e|0,(t[(S4()|0)+24>>2]|0)+(e*12|0)|0}function O7(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=tt;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),I7(s,r),d=w(P7(s,r)),tD[o&1](e,d),h=l}function I7(e,n){e=e|0,n=+n}function P7(e,n){return e=e|0,n=+n,w(M7(n))}function M7(e){return e=+e,w(e)}function F7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],L7(e,r,s,0),h=o}function L7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=C4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=R7(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,N7(l,o)|0,o),h=s}function C4(){var e=0,n=0;if(c[7856]|0||(Hw(10172),Bt(50,10172,Q|0)|0,n=7856,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10172)|0)){e=10172,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Hw(10172)}return 10172}function R7(e){return e=e|0,0}function N7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=C4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Ww(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(B7(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Ww(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function B7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=j7(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,U7(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Ww(l,o,r),t[y>>2]=(t[y>>2]|0)+12,q7(e,_),z7(_),h=k;return}}function j7(e){return e=e|0,357913941}function U7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function q7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function z7(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Hw(e){e=e|0,b7(e)}function W7(e){e=e|0,H7(e+24|0)}function H7(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function b7(e){e=e|0;var n=0;n=An()|0,Nn(e,2,3,n,G7()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function G7(){return 1380}function V7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+8|0,d=s,_=Y7(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],$7(n,l,r,o),h=s}function Y7(e){return e=e|0,(t[(C4()|0)+24>>2]|0)+(e*12|0)|0}function $7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;_=h,h=h+16|0,l=_+1|0,d=_,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),ts(l,r),l=ns(l,r)|0,K7(d,o),d=X7(d,o)|0,X1[s&15](e,l,d),h=_}function K7(e,n){e=e|0,n=n|0}function X7(e,n){return e=e|0,n=n|0,J7(n)|0}function J7(e){return e=e|0,(e|0)!=0|0}function Q7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=T4()|0,e=Z7(r)|0,ur(l,n,s,e,ek(r,o)|0,o)}function T4(){var e=0,n=0;if(c[7864]|0||(Gw(10208),Bt(51,10208,Q|0)|0,n=7864,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10208)|0)){e=10208,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Gw(10208)}return 10208}function Z7(e){return e=e|0,e|0}function ek(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=T4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(bw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(tk(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function bw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function tk(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=nk(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,rk(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,bw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,ik(e,s),ok(s),h=_;return}}function nk(e){return e=e|0,536870911}function rk(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function ik(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function ok(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Gw(e){e=e|0,lk(e)}function uk(e){e=e|0,sk(e+24|0)}function sk(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function lk(e){e=e|0;var n=0;n=An()|0,Nn(e,1,24,n,fk()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function fk(){return 1392}function ck(e,n){e=e|0,n=n|0,dk(t[(ak(e)|0)>>2]|0,n)}function ak(e){return e=e|0,(t[(T4()|0)+24>>2]|0)+(e<<3)|0}function dk(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Lw(o,n),n=Rw(o,n)|0,Nl[e&127](n),h=r}function pk(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=x4()|0,e=hk(r)|0,ur(l,n,s,e,mk(r,o)|0,o)}function x4(){var e=0,n=0;if(c[7872]|0||(Yw(10244),Bt(52,10244,Q|0)|0,n=7872,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10244)|0)){e=10244,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Yw(10244)}return 10244}function hk(e){return e=e|0,e|0}function mk(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=x4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Vw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(vk(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Vw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function vk(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=gk(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,_k(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Vw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,yk(e,s),wk(s),h=_;return}}function gk(e){return e=e|0,536870911}function _k(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function yk(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function wk(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Yw(e){e=e|0,Sk(e)}function Dk(e){e=e|0,Ek(e+24|0)}function Ek(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function Sk(e){e=e|0;var n=0;n=An()|0,Nn(e,1,16,n,Ck()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Ck(){return 1400}function Tk(e){return e=e|0,kk(t[(xk(e)|0)>>2]|0)|0}function xk(e){return e=e|0,(t[(x4()|0)+24>>2]|0)+(e<<3)|0}function kk(e){return e=e|0,Ak(ph[e&7]()|0)|0}function Ak(e){return e=e|0,e|0}function Ok(){var e=0;return c[7880]|0||(Nk(10280),Bt(25,10280,Q|0)|0,e=7880,t[e>>2]=1,t[e+4>>2]=0),10280}function Ik(e,n){e=e|0,n=n|0,t[e>>2]=Pk()|0,t[e+4>>2]=Mk()|0,t[e+12>>2]=n,t[e+8>>2]=Fk()|0,t[e+32>>2]=4}function Pk(){return 11711}function Mk(){return 1356}function Fk(){return eh()|0}function Lk(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(Rk(r),Ve(r)):n|0&&(Gi(n),Ve(n))}function Rk(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function Nk(e){e=e|0,Ys(e)}function Bk(e){e=e|0,jk(e,4920),Uk(e)|0,qk(e)|0}function jk(e,n){e=e|0,n=n|0;var r=0;r=Up()|0,t[e>>2]=r,sA(r,n),Cf(t[e>>2]|0)}function Uk(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,Jk()|0),e|0}function qk(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,zk()|0),e|0}function zk(){var e=0;return c[7888]|0||($w(10328),Bt(53,10328,Q|0)|0,e=7888,t[e>>2]=1,t[e+4>>2]=0),Dn(10328)|0||$w(10328),10328}function uc(e,n){e=e|0,n=n|0,ur(e,0,n,0,0,0)}function $w(e){e=e|0,bk(e),sc(e,10)}function Wk(e){e=e|0,Hk(e+24|0)}function Hk(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function bk(e){e=e|0;var n=0;n=An()|0,Nn(e,5,1,n,$k()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Gk(e,n,r){e=e|0,n=n|0,r=+r,Vk(e,n,r)}function sc(e,n){e=e|0,n=n|0,t[e+20>>2]=n}function Vk(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,l=o+8|0,_=o+13|0,s=o,d=o+12|0,ts(_,n),t[l>>2]=ns(_,n)|0,wu(d,r),L[s>>3]=+Du(d,r),Yk(e,l,s),h=o}function Yk(e,n,r){e=e|0,n=n|0,r=r|0,M(e+8|0,t[n>>2]|0,+L[r>>3]),c[e+24>>0]=1}function $k(){return 1404}function Kk(e,n){return e=e|0,n=+n,Xk(e,n)|0}function Xk(e,n){e=e|0,n=+n;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return o=h,h=h+16|0,l=o+4|0,d=o+8|0,_=o,s=Qo(8)|0,r=s,y=Tt(16)|0,ts(l,e),e=ns(l,e)|0,wu(d,n),M(y,e,+Du(d,n)),d=r+4|0,t[d>>2]=y,e=Tt(8)|0,d=t[d>>2]|0,t[_>>2]=0,t[l>>2]=t[_>>2],P1(e,d,l),t[s>>2]=e,h=o,r|0}function Jk(){var e=0;return c[7896]|0||(Kw(10364),Bt(54,10364,Q|0)|0,e=7896,t[e>>2]=1,t[e+4>>2]=0),Dn(10364)|0||Kw(10364),10364}function Kw(e){e=e|0,eA(e),sc(e,55)}function Qk(e){e=e|0,Zk(e+24|0)}function Zk(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function eA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,4,n,iA()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function tA(e){e=e|0,nA(e)}function nA(e){e=e|0,rA(e)}function rA(e){e=e|0,Xw(e+8|0),c[e+24>>0]=1}function Xw(e){e=e|0,t[e>>2]=0,L[e+8>>3]=0}function iA(){return 1424}function oA(){return uA()|0}function uA(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0;return n=h,h=h+16|0,s=n+4|0,d=n,r=Qo(8)|0,e=r,o=Tt(16)|0,Xw(o),l=e+4|0,t[l>>2]=o,o=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],P1(o,l,s),t[r>>2]=o,h=n,e|0}function sA(e,n){e=e|0,n=n|0,t[e>>2]=lA()|0,t[e+4>>2]=fA()|0,t[e+12>>2]=n,t[e+8>>2]=cA()|0,t[e+32>>2]=5}function lA(){return 11710}function fA(){return 1416}function cA(){return th()|0}function aA(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(dA(r),Ve(r)):n|0&&Ve(n)}function dA(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function th(){var e=0;return c[7904]|0||(t[2600]=pA()|0,t[2601]=0,e=7904,t[e>>2]=1,t[e+4>>2]=0),10400}function pA(){return t[357]|0}function hA(e){e=e|0,mA(e,4926),vA(e)|0}function mA(e,n){e=e|0,n=n|0;var r=0;r=u1()|0,t[e>>2]=r,kA(r,n),Cf(t[e>>2]|0)}function vA(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,gA()|0),e|0}function gA(){var e=0;return c[7912]|0||(Jw(10412),Bt(56,10412,Q|0)|0,e=7912,t[e>>2]=1,t[e+4>>2]=0),Dn(10412)|0||Jw(10412),10412}function Jw(e){e=e|0,wA(e),sc(e,57)}function _A(e){e=e|0,yA(e+24|0)}function yA(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function wA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,5,n,CA()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function DA(e){e=e|0,EA(e)}function EA(e){e=e|0,SA(e)}function SA(e){e=e|0;var n=0,r=0;n=e+8|0,r=n+48|0;do t[n>>2]=0,n=n+4|0;while((n|0)<(r|0));c[e+56>>0]=1}function CA(){return 1432}function TA(){return xA()|0}function xA(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0,_=0;d=h,h=h+16|0,e=d+4|0,n=d,r=Qo(8)|0,o=r,s=Tt(48)|0,l=s,_=l+48|0;do t[l>>2]=0,l=l+4|0;while((l|0)<(_|0));return l=o+4|0,t[l>>2]=s,_=Tt(8)|0,l=t[l>>2]|0,t[n>>2]=0,t[e>>2]=t[n>>2],Wd(_,l,e),t[r>>2]=_,h=d,o|0}function kA(e,n){e=e|0,n=n|0,t[e>>2]=AA()|0,t[e+4>>2]=OA()|0,t[e+12>>2]=n,t[e+8>>2]=IA()|0,t[e+32>>2]=6}function AA(){return 11704}function OA(){return 1436}function IA(){return th()|0}function PA(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(MA(r),Ve(r)):n|0&&Ve(n)}function MA(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function FA(e){e=e|0,LA(e,4933),RA(e)|0,NA(e)|0}function LA(e,n){e=e|0,n=n|0;var r=0;r=uO()|0,t[e>>2]=r,sO(r,n),Cf(t[e>>2]|0)}function RA(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,XA()|0),e|0}function NA(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,BA()|0),e|0}function BA(){var e=0;return c[7920]|0||(Qw(10452),Bt(58,10452,Q|0)|0,e=7920,t[e>>2]=1,t[e+4>>2]=0),Dn(10452)|0||Qw(10452),10452}function Qw(e){e=e|0,qA(e),sc(e,1)}function jA(e){e=e|0,UA(e+24|0)}function UA(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function qA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,1,n,bA()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function zA(e,n,r){e=e|0,n=+n,r=+r,WA(e,n,r)}function WA(e,n,r){e=e|0,n=+n,r=+r;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+32|0,l=o+8|0,_=o+17|0,s=o,d=o+16|0,wu(_,n),L[l>>3]=+Du(_,n),wu(d,r),L[s>>3]=+Du(d,r),HA(e,l,s),h=o}function HA(e,n,r){e=e|0,n=n|0,r=r|0,Zw(e+8|0,+L[n>>3],+L[r>>3]),c[e+24>>0]=1}function Zw(e,n,r){e=e|0,n=+n,r=+r,L[e>>3]=n,L[e+8>>3]=r}function bA(){return 1472}function GA(e,n){return e=+e,n=+n,VA(e,n)|0}function VA(e,n){e=+e,n=+n;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return o=h,h=h+16|0,d=o+4|0,_=o+8|0,y=o,s=Qo(8)|0,r=s,l=Tt(16)|0,wu(d,e),e=+Du(d,e),wu(_,n),Zw(l,e,+Du(_,n)),_=r+4|0,t[_>>2]=l,l=Tt(8)|0,_=t[_>>2]|0,t[y>>2]=0,t[d>>2]=t[y>>2],e8(l,_,d),t[s>>2]=l,h=o,r|0}function e8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1452,t[r+12>>2]=n,t[e+4>>2]=r}function YA(e){e=e|0,da(e),Ve(e)}function $A(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function KA(e){e=e|0,Ve(e)}function XA(){var e=0;return c[7928]|0||(t8(10488),Bt(59,10488,Q|0)|0,e=7928,t[e>>2]=1,t[e+4>>2]=0),Dn(10488)|0||t8(10488),10488}function t8(e){e=e|0,ZA(e),sc(e,60)}function JA(e){e=e|0,QA(e+24|0)}function QA(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function ZA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,6,n,rO()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function eO(e){e=e|0,tO(e)}function tO(e){e=e|0,nO(e)}function nO(e){e=e|0,n8(e+8|0),c[e+24>>0]=1}function n8(e){e=e|0,t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,t[e+12>>2]=0}function rO(){return 1492}function iO(){return oO()|0}function oO(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0;return n=h,h=h+16|0,s=n+4|0,d=n,r=Qo(8)|0,e=r,o=Tt(16)|0,n8(o),l=e+4|0,t[l>>2]=o,o=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],e8(o,l,s),t[r>>2]=o,h=n,e|0}function uO(){var e=0;return c[7936]|0||(pO(10524),Bt(25,10524,Q|0)|0,e=7936,t[e>>2]=1,t[e+4>>2]=0),10524}function sO(e,n){e=e|0,n=n|0,t[e>>2]=lO()|0,t[e+4>>2]=fO()|0,t[e+12>>2]=n,t[e+8>>2]=cO()|0,t[e+32>>2]=7}function lO(){return 11700}function fO(){return 1484}function cO(){return th()|0}function aO(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(dO(r),Ve(r)):n|0&&Ve(n)}function dO(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function pO(e){e=e|0,Ys(e)}function hO(e,n,r){e=e|0,n=n|0,r=r|0,e=Zn(n)|0,n=mO(r)|0,r=vO(r,0)|0,VO(e,n,r,k4()|0,0)}function mO(e){return e=e|0,e|0}function vO(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=k4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(i8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(SO(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function k4(){var e=0,n=0;if(c[7944]|0||(r8(10568),Bt(61,10568,Q|0)|0,n=7944,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10568)|0)){e=10568,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));r8(10568)}return 10568}function r8(e){e=e|0,yO(e)}function gO(e){e=e|0,_O(e+24|0)}function _O(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function yO(e){e=e|0;var n=0;n=An()|0,Nn(e,1,17,n,Dp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function wO(e){return e=e|0,EO(t[(DO(e)|0)>>2]|0)|0}function DO(e){return e=e|0,(t[(k4()|0)+24>>2]|0)+(e<<3)|0}function EO(e){return e=e|0,ea(ph[e&7]()|0)|0}function i8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function SO(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=CO(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,TO(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,i8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,xO(e,s),kO(s),h=_;return}}function CO(e){return e=e|0,536870911}function TO(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function xO(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function kO(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function AO(){OO()}function OO(){IO(10604)}function IO(e){e=e|0,PO(e,4955)}function PO(e,n){e=e|0,n=n|0;var r=0;r=MO()|0,t[e>>2]=r,FO(r,n),Cf(t[e>>2]|0)}function MO(){var e=0;return c[7952]|0||(WO(10612),Bt(25,10612,Q|0)|0,e=7952,t[e>>2]=1,t[e+4>>2]=0),10612}function FO(e,n){e=e|0,n=n|0,t[e>>2]=BO()|0,t[e+4>>2]=jO()|0,t[e+12>>2]=n,t[e+8>>2]=UO()|0,t[e+32>>2]=8}function Cf(e){e=e|0;var n=0,r=0;n=h,h=h+16|0,r=n,sa()|0,t[r>>2]=e,LO(10608,r),h=n}function sa(){return c[11714]|0||(t[2652]=0,Bt(62,10608,Q|0)|0,c[11714]=1),10608}function LO(e,n){e=e|0,n=n|0;var r=0;r=Tt(8)|0,t[r+4>>2]=t[n>>2],t[r>>2]=t[e>>2],t[e>>2]=r}function RO(e){e=e|0,NO(e)}function NO(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,Ve(r);while((n|0)!=0);t[e>>2]=0}function BO(){return 11715}function jO(){return 1496}function UO(){return eh()|0}function qO(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(zO(r),Ve(r)):n|0&&Ve(n)}function zO(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function WO(e){e=e|0,Ys(e)}function HO(e,n){e=e|0,n=n|0;var r=0,o=0;sa()|0,r=t[2652]|0;e:do if(r|0){for(;o=t[r+4>>2]|0,!(o|0?(U8(A4(o)|0,e)|0)==0:0);)if(r=t[r>>2]|0,!r)break e;bO(o,n)}while(0)}function A4(e){return e=e|0,t[e+12>>2]|0}function bO(e,n){e=e|0,n=n|0;var r=0;e=e+36|0,r=t[e>>2]|0,r|0&&(Ju(r),Ve(r)),r=Tt(4)|0,ba(r,n),t[e>>2]=r}function O4(){return c[11716]|0||(t[2664]=0,Bt(63,10656,Q|0)|0,c[11716]=1),10656}function o8(){var e=0;return c[11717]|0?e=t[2665]|0:(GO(),t[2665]=1504,c[11717]=1,e=1504),e|0}function GO(){c[11740]|0||(c[11718]=Lt(Lt(8,0)|0,0)|0,c[11719]=Lt(Lt(0,0)|0,0)|0,c[11720]=Lt(Lt(0,16)|0,0)|0,c[11721]=Lt(Lt(8,0)|0,0)|0,c[11722]=Lt(Lt(0,0)|0,0)|0,c[11723]=Lt(Lt(8,0)|0,0)|0,c[11724]=Lt(Lt(0,0)|0,0)|0,c[11725]=Lt(Lt(8,0)|0,0)|0,c[11726]=Lt(Lt(0,0)|0,0)|0,c[11727]=Lt(Lt(8,0)|0,0)|0,c[11728]=Lt(Lt(0,0)|0,0)|0,c[11729]=Lt(Lt(0,0)|0,32)|0,c[11730]=Lt(Lt(0,0)|0,32)|0,c[11740]=1)}function u8(){return 1572}function VO(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0,T=0;l=h,h=h+32|0,T=l+16|0,k=l+12|0,y=l+8|0,_=l+4|0,d=l,t[T>>2]=e,t[k>>2]=n,t[y>>2]=r,t[_>>2]=o,t[d>>2]=s,O4()|0,YO(10656,T,k,y,_,d),h=l}function YO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0;d=Tt(24)|0,t1(d+4|0,t[n>>2]|0,t[r>>2]|0,t[o>>2]|0,t[s>>2]|0,t[l>>2]|0),t[d>>2]=t[e>>2],t[e>>2]=d}function s8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0;if(qe=h,h=h+32|0,le=qe+20|0,ie=qe+8|0,Pe=qe+4|0,ke=qe,n=t[n>>2]|0,n|0){we=le+4|0,y=le+8|0,k=ie+4|0,T=ie+8|0,P=ie+8|0,q=le+8|0;do{if(d=n+4|0,_=I4(d)|0,_|0){if(s=b1(_)|0,t[le>>2]=0,t[we>>2]=0,t[y>>2]=0,o=(G1(_)|0)+1|0,$O(le,o),o|0)for(;o=o+-1|0,os(ie,t[s>>2]|0),l=t[we>>2]|0,l>>>0<(t[q>>2]|0)>>>0?(t[l>>2]=t[ie>>2],t[we>>2]=(t[we>>2]|0)+4):P4(le,ie),o;)s=s+4|0;o=V1(_)|0,t[ie>>2]=0,t[k>>2]=0,t[T>>2]=0;e:do if(t[o>>2]|0)for(s=0,l=0;;){if((s|0)==(l|0)?KO(ie,o):(t[s>>2]=t[o>>2],t[k>>2]=(t[k>>2]|0)+4),o=o+4|0,!(t[o>>2]|0))break e;s=t[k>>2]|0,l=t[P>>2]|0}while(0);t[Pe>>2]=nh(d)|0,t[ke>>2]=Dn(_)|0,XO(r,e,Pe,ke,le,ie),M4(ie),Rl(le)}n=t[n>>2]|0}while((n|0)!=0)}h=qe}function I4(e){return e=e|0,t[e+12>>2]|0}function b1(e){return e=e|0,t[e+12>>2]|0}function G1(e){return e=e|0,t[e+16>>2]|0}function $O(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;s=h,h=h+32|0,r=s,o=t[e>>2]|0,(t[e+8>>2]|0)-o>>2>>>0>>0&&(m8(r,n,(t[e+4>>2]|0)-o>>2,e+8|0),v8(e,r),g8(r)),h=s}function P4(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;if(d=h,h=h+32|0,r=d,o=e+4|0,s=((t[o>>2]|0)-(t[e>>2]|0)>>2)+1|0,l=h8(e)|0,l>>>0>>0)$n(e);else{_=t[e>>2]|0,k=(t[e+8>>2]|0)-_|0,y=k>>1,m8(r,k>>2>>>0>>1>>>0?y>>>0>>0?s:y:l,(t[o>>2]|0)-_>>2,e+8|0),l=r+8|0,t[t[l>>2]>>2]=t[n>>2],t[l>>2]=(t[l>>2]|0)+4,v8(e,r),g8(r),h=d;return}}function V1(e){return e=e|0,t[e+8>>2]|0}function KO(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;if(d=h,h=h+32|0,r=d,o=e+4|0,s=((t[o>>2]|0)-(t[e>>2]|0)>>2)+1|0,l=p8(e)|0,l>>>0>>0)$n(e);else{_=t[e>>2]|0,k=(t[e+8>>2]|0)-_|0,y=k>>1,mI(r,k>>2>>>0>>1>>>0?y>>>0>>0?s:y:l,(t[o>>2]|0)-_>>2,e+8|0),l=r+8|0,t[t[l>>2]>>2]=t[n>>2],t[l>>2]=(t[l>>2]|0)+4,vI(e,r),gI(r),h=d;return}}function nh(e){return e=e|0,t[e>>2]|0}function XO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,JO(e,n,r,o,s,l)}function M4(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-o|0)>>>2)<<2)),Ve(r))}function Rl(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-o|0)>>>2)<<2)),Ve(r))}function JO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0;d=h,h=h+48|0,T=d+40|0,_=d+32|0,P=d+24|0,y=d+12|0,k=d,Zo(_),e=Oi(e)|0,t[P>>2]=t[n>>2],r=t[r>>2]|0,o=t[o>>2]|0,F4(y,s),QO(k,l),t[T>>2]=t[P>>2],ZO(e,T,r,o,y,k),M4(k),Rl(y),eu(_),h=d}function F4(e,n){e=e|0,n=n|0;var r=0,o=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,o=(t[r>>2]|0)-(t[n>>2]|0)>>2,o|0&&(pI(e,o),hI(e,t[n>>2]|0,t[r>>2]|0,o))}function QO(e,n){e=e|0,n=n|0;var r=0,o=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,o=(t[r>>2]|0)-(t[n>>2]|0)>>2,o|0&&(aI(e,o),dI(e,t[n>>2]|0,t[r>>2]|0,o))}function ZO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0;d=h,h=h+32|0,T=d+28|0,P=d+24|0,_=d+12|0,y=d,k=ko(eI()|0)|0,t[P>>2]=t[n>>2],t[T>>2]=t[P>>2],n=lc(T)|0,r=l8(r)|0,o=L4(o)|0,t[_>>2]=t[s>>2],T=s+4|0,t[_+4>>2]=t[T>>2],P=s+8|0,t[_+8>>2]=t[P>>2],t[P>>2]=0,t[T>>2]=0,t[s>>2]=0,s=R4(_)|0,t[y>>2]=t[l>>2],T=l+4|0,t[y+4>>2]=t[T>>2],P=l+8|0,t[y+8>>2]=t[P>>2],t[P>>2]=0,t[T>>2]=0,t[l>>2]=0,qo(0,k|0,e|0,n|0,r|0,o|0,s|0,tI(y)|0)|0,M4(y),Rl(_),h=d}function eI(){var e=0;return c[7968]|0||(fI(10708),e=7968,t[e>>2]=1,t[e+4>>2]=0),10708}function lc(e){return e=e|0,c8(e)|0}function l8(e){return e=e|0,f8(e)|0}function L4(e){return e=e|0,ea(e)|0}function R4(e){return e=e|0,rI(e)|0}function tI(e){return e=e|0,nI(e)|0}function nI(e){e=e|0;var n=0,r=0,o=0;if(o=(t[e+4>>2]|0)-(t[e>>2]|0)|0,r=o>>2,o=Qo(o+4|0)|0,t[o>>2]=r,r|0){n=0;do t[o+4+(n<<2)>>2]=f8(t[(t[e>>2]|0)+(n<<2)>>2]|0)|0,n=n+1|0;while((n|0)!=(r|0))}return o|0}function f8(e){return e=e|0,e|0}function rI(e){e=e|0;var n=0,r=0,o=0;if(o=(t[e+4>>2]|0)-(t[e>>2]|0)|0,r=o>>2,o=Qo(o+4|0)|0,t[o>>2]=r,r|0){n=0;do t[o+4+(n<<2)>>2]=c8((t[e>>2]|0)+(n<<2)|0)|0,n=n+1|0;while((n|0)!=(r|0))}return o|0}function c8(e){e=e|0;var n=0,r=0,o=0,s=0;return s=h,h=h+32|0,n=s+12|0,r=s,o=U0(a8()|0)|0,o?(s1(n,o),l1(r,n),UF(e,r),e=f1(n)|0):e=iI(e)|0,h=s,e|0}function a8(){var e=0;return c[7960]|0||(lI(10664),Bt(25,10664,Q|0)|0,e=7960,t[e>>2]=1,t[e+4>>2]=0),10664}function iI(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;return r=h,h=h+16|0,s=r+4|0,d=r,o=Qo(8)|0,n=o,_=Tt(4)|0,t[_>>2]=t[e>>2],l=n+4|0,t[l>>2]=_,e=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],d8(e,l,s),t[o>>2]=e,h=r,n|0}function d8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1656,t[r+12>>2]=n,t[e+4>>2]=r}function oI(e){e=e|0,da(e),Ve(e)}function uI(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function sI(e){e=e|0,Ve(e)}function lI(e){e=e|0,Ys(e)}function fI(e){e=e|0,Ao(e,cI()|0,5)}function cI(){return 1676}function aI(e,n){e=e|0,n=n|0;var r=0;if((p8(e)|0)>>>0>>0&&$n(e),n>>>0>1073741823)_n();else{r=Tt(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function dI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,o=e+4|0,e=r-n|0,(e|0)>0&&(vn(t[o>>2]|0,n|0,e|0)|0,t[o>>2]=(t[o>>2]|0)+(e>>>2<<2))}function p8(e){return e=e|0,1073741823}function pI(e,n){e=e|0,n=n|0;var r=0;if((h8(e)|0)>>>0>>0&&$n(e),n>>>0>1073741823)_n();else{r=Tt(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function hI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,o=e+4|0,e=r-n|0,(e|0)>0&&(vn(t[o>>2]|0,n|0,e|0)|0,t[o>>2]=(t[o>>2]|0)+(e>>>2<<2))}function h8(e){return e=e|0,1073741823}function mI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>1073741823)_n();else{s=Tt(n<<2)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<2)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<2)}function vI(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>2)<<2)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function gI(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&Ve(e)}function m8(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>1073741823)_n();else{s=Tt(n<<2)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<2)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<2)}function v8(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>2)<<2)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function g8(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&Ve(e)}function _I(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0;if(ie=h,h=h+32|0,T=ie+20|0,P=ie+12|0,k=ie+16|0,q=ie+4|0,we=ie,le=ie+8|0,_=o8()|0,l=t[_>>2]|0,d=t[l>>2]|0,d|0)for(y=t[_+8>>2]|0,_=t[_+4>>2]|0;os(T,d),yI(e,T,_,y),l=l+4|0,d=t[l>>2]|0,d;)y=y+1|0,_=_+1|0;if(l=u8()|0,d=t[l>>2]|0,d|0)do os(T,d),t[P>>2]=t[l+4>>2],wI(n,T,P),l=l+8|0,d=t[l>>2]|0;while((d|0)!=0);if(l=t[(sa()|0)>>2]|0,l|0)do n=t[l+4>>2]|0,os(T,t[(la(n)|0)>>2]|0),t[P>>2]=A4(n)|0,DI(r,T,P),l=t[l>>2]|0;while((l|0)!=0);if(os(k,0),l=O4()|0,t[T>>2]=t[k>>2],s8(T,l,s),l=t[(sa()|0)>>2]|0,l|0){e=T+4|0,n=T+8|0,r=T+8|0;do{if(y=t[l+4>>2]|0,os(P,t[(la(y)|0)>>2]|0),EI(q,_8(y)|0),d=t[q>>2]|0,d|0){t[T>>2]=0,t[e>>2]=0,t[n>>2]=0;do os(we,t[(la(t[d+4>>2]|0)|0)>>2]|0),_=t[e>>2]|0,_>>>0<(t[r>>2]|0)>>>0?(t[_>>2]=t[we>>2],t[e>>2]=(t[e>>2]|0)+4):P4(T,we),d=t[d>>2]|0;while((d|0)!=0);SI(o,P,T),Rl(T)}t[le>>2]=t[P>>2],k=y8(y)|0,t[T>>2]=t[le>>2],s8(T,k,s),bd(q),l=t[l>>2]|0}while((l|0)!=0)}h=ie}function yI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,RI(e,n,r,o)}function wI(e,n,r){e=e|0,n=n|0,r=r|0,LI(e,n,r)}function la(e){return e=e|0,e|0}function DI(e,n,r){e=e|0,n=n|0,r=r|0,II(e,n,r)}function _8(e){return e=e|0,e+16|0}function EI(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;if(l=h,h=h+16|0,s=l+8|0,r=l,t[e>>2]=0,o=t[n>>2]|0,t[s>>2]=o,t[r>>2]=e,r=OI(r)|0,o|0){if(o=Tt(12)|0,d=(w8(s)|0)+4|0,e=t[d+4>>2]|0,n=o+4|0,t[n>>2]=t[d>>2],t[n+4>>2]=e,n=t[t[s>>2]>>2]|0,t[s>>2]=n,!n)e=o;else for(n=o;e=Tt(12)|0,y=(w8(s)|0)+4|0,_=t[y+4>>2]|0,d=e+4|0,t[d>>2]=t[y>>2],t[d+4>>2]=_,t[n>>2]=e,d=t[t[s>>2]>>2]|0,t[s>>2]=d,d;)n=e;t[e>>2]=t[r>>2],t[r>>2]=o}h=l}function SI(e,n,r){e=e|0,n=n|0,r=r|0,CI(e,n,r)}function y8(e){return e=e|0,e+24|0}function CI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+32|0,d=o+24|0,s=o+16|0,_=o+12|0,l=o,Zo(s),e=Oi(e)|0,t[_>>2]=t[n>>2],F4(l,r),t[d>>2]=t[_>>2],TI(e,d,l),Rl(l),eu(s),h=o}function TI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+32|0,d=o+16|0,_=o+12|0,s=o,l=ko(xI()|0)|0,t[_>>2]=t[n>>2],t[d>>2]=t[_>>2],n=lc(d)|0,t[s>>2]=t[r>>2],d=r+4|0,t[s+4>>2]=t[d>>2],_=r+8|0,t[s+8>>2]=t[_>>2],t[_>>2]=0,t[d>>2]=0,t[r>>2]=0,Ts(0,l|0,e|0,n|0,R4(s)|0)|0,Rl(s),h=o}function xI(){var e=0;return c[7976]|0||(kI(10720),e=7976,t[e>>2]=1,t[e+4>>2]=0),10720}function kI(e){e=e|0,Ao(e,AI()|0,2)}function AI(){return 1732}function OI(e){return e=e|0,t[e>>2]|0}function w8(e){return e=e|0,t[e>>2]|0}function II(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+32|0,l=o+16|0,s=o+8|0,d=o,Zo(s),e=Oi(e)|0,t[d>>2]=t[n>>2],r=t[r>>2]|0,t[l>>2]=t[d>>2],D8(e,l,r),eu(s),h=o}function D8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,l=o+4|0,d=o,s=ko(PI()|0)|0,t[d>>2]=t[n>>2],t[l>>2]=t[d>>2],n=lc(l)|0,Ts(0,s|0,e|0,n|0,l8(r)|0)|0,h=o}function PI(){var e=0;return c[7984]|0||(MI(10732),e=7984,t[e>>2]=1,t[e+4>>2]=0),10732}function MI(e){e=e|0,Ao(e,FI()|0,2)}function FI(){return 1744}function LI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+32|0,l=o+16|0,s=o+8|0,d=o,Zo(s),e=Oi(e)|0,t[d>>2]=t[n>>2],r=t[r>>2]|0,t[l>>2]=t[d>>2],D8(e,l,r),eu(s),h=o}function RI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+32|0,d=s+16|0,l=s+8|0,_=s,Zo(l),e=Oi(e)|0,t[_>>2]=t[n>>2],r=c[r>>0]|0,o=c[o>>0]|0,t[d>>2]=t[_>>2],NI(e,d,r,o),eu(l),h=s}function NI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,d=s+4|0,_=s,l=ko(BI()|0)|0,t[_>>2]=t[n>>2],t[d>>2]=t[_>>2],n=lc(d)|0,r=fa(r)|0,Bu(0,l|0,e|0,n|0,r|0,fa(o)|0)|0,h=s}function BI(){var e=0;return c[7992]|0||(UI(10744),e=7992,t[e>>2]=1,t[e+4>>2]=0),10744}function fa(e){return e=e|0,jI(e)|0}function jI(e){return e=e|0,e&255|0}function UI(e){e=e|0,Ao(e,qI()|0,3)}function qI(){return 1756}function zI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;switch(q=h,h=h+32|0,_=q+8|0,y=q+4|0,k=q+20|0,T=q,_1(e,0),o=jF(n)|0,t[_>>2]=0,P=_+4|0,t[P>>2]=0,t[_+8>>2]=0,o<<24>>24){case 0:{c[k>>0]=0,WI(y,r,k),rh(e,y)|0,ei(y);break}case 8:{P=z4(n)|0,c[k>>0]=8,os(T,t[P+4>>2]|0),HI(y,r,k,T,P+8|0),rh(e,y)|0,ei(y);break}case 9:{if(l=z4(n)|0,n=t[l+4>>2]|0,n|0)for(d=_+8|0,s=l+12|0;n=n+-1|0,os(y,t[s>>2]|0),o=t[P>>2]|0,o>>>0<(t[d>>2]|0)>>>0?(t[o>>2]=t[y>>2],t[P>>2]=(t[P>>2]|0)+4):P4(_,y),n;)s=s+4|0;c[k>>0]=9,os(T,t[l+8>>2]|0),bI(y,r,k,T,_),rh(e,y)|0,ei(y);break}default:P=z4(n)|0,c[k>>0]=o,os(T,t[P+4>>2]|0),GI(y,r,k,T),rh(e,y)|0,ei(y)}Rl(_),h=q}function WI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,Zo(s),n=Oi(n)|0,iP(e,n,c[r>>0]|0),eu(s),h=o}function rh(e,n){e=e|0,n=n|0;var r=0;return r=t[e>>2]|0,r|0&&ju(r|0),t[e>>2]=t[n>>2],t[n>>2]=0,e|0}function HI(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0;l=h,h=h+32|0,_=l+16|0,d=l+8|0,y=l,Zo(d),n=Oi(n)|0,r=c[r>>0]|0,t[y>>2]=t[o>>2],s=t[s>>2]|0,t[_>>2]=t[y>>2],eP(e,n,r,_,s),eu(d),h=l}function bI(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0;l=h,h=h+32|0,y=l+24|0,d=l+16|0,k=l+12|0,_=l,Zo(d),n=Oi(n)|0,r=c[r>>0]|0,t[k>>2]=t[o>>2],F4(_,s),t[y>>2]=t[k>>2],XI(e,n,r,y,_),Rl(_),eu(d),h=l}function GI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+32|0,d=s+16|0,l=s+8|0,_=s,Zo(l),n=Oi(n)|0,r=c[r>>0]|0,t[_>>2]=t[o>>2],t[d>>2]=t[_>>2],VI(e,n,r,d),eu(l),h=s}function VI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+4|0,_=s,d=ko(YI()|0)|0,r=fa(r)|0,t[_>>2]=t[o>>2],t[l>>2]=t[_>>2],ih(e,Ts(0,d|0,n|0,r|0,lc(l)|0)|0),h=s}function YI(){var e=0;return c[8e3]|0||($I(10756),e=8e3,t[e>>2]=1,t[e+4>>2]=0),10756}function ih(e,n){e=e|0,n=n|0,_1(e,n)}function $I(e){e=e|0,Ao(e,KI()|0,2)}function KI(){return 1772}function XI(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0;l=h,h=h+32|0,y=l+16|0,k=l+12|0,d=l,_=ko(JI()|0)|0,r=fa(r)|0,t[k>>2]=t[o>>2],t[y>>2]=t[k>>2],o=lc(y)|0,t[d>>2]=t[s>>2],y=s+4|0,t[d+4>>2]=t[y>>2],k=s+8|0,t[d+8>>2]=t[k>>2],t[k>>2]=0,t[y>>2]=0,t[s>>2]=0,ih(e,Bu(0,_|0,n|0,r|0,o|0,R4(d)|0)|0),Rl(d),h=l}function JI(){var e=0;return c[8008]|0||(QI(10768),e=8008,t[e>>2]=1,t[e+4>>2]=0),10768}function QI(e){e=e|0,Ao(e,ZI()|0,3)}function ZI(){return 1784}function eP(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0;l=h,h=h+16|0,_=l+4|0,y=l,d=ko(tP()|0)|0,r=fa(r)|0,t[y>>2]=t[o>>2],t[_>>2]=t[y>>2],o=lc(_)|0,ih(e,Bu(0,d|0,n|0,r|0,o|0,L4(s)|0)|0),h=l}function tP(){var e=0;return c[8016]|0||(nP(10780),e=8016,t[e>>2]=1,t[e+4>>2]=0),10780}function nP(e){e=e|0,Ao(e,rP()|0,3)}function rP(){return 1800}function iP(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=ko(oP()|0)|0,ih(e,sf(0,o|0,n|0,fa(r)|0)|0)}function oP(){var e=0;return c[8024]|0||(uP(10792),e=8024,t[e>>2]=1,t[e+4>>2]=0),10792}function uP(e){e=e|0,Ao(e,sP()|0,1)}function sP(){return 1816}function lP(){fP(),cP(),aP()}function fP(){t[2702]=K8(65536)|0}function cP(){PP(10856)}function aP(){dP(10816)}function dP(e){e=e|0,pP(e,5044),hP(e)|0}function pP(e,n){e=e|0,n=n|0;var r=0;r=a8()|0,t[e>>2]=r,TP(r,n),Cf(t[e>>2]|0)}function hP(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,mP()|0),e|0}function mP(){var e=0;return c[8032]|0||(E8(10820),Bt(64,10820,Q|0)|0,e=8032,t[e>>2]=1,t[e+4>>2]=0),Dn(10820)|0||E8(10820),10820}function E8(e){e=e|0,_P(e),sc(e,25)}function vP(e){e=e|0,gP(e+24|0)}function gP(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function _P(e){e=e|0;var n=0;n=An()|0,Nn(e,5,18,n,EP()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function yP(e,n){e=e|0,n=n|0,wP(e,n)}function wP(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;r=h,h=h+16|0,o=r,s=r+4|0,Ml(s,n),t[o>>2]=Fl(s,n)|0,DP(e,o),h=r}function DP(e,n){e=e|0,n=n|0,S8(e+4|0,t[n>>2]|0),c[e+8>>0]=1}function S8(e,n){e=e|0,n=n|0,t[e>>2]=n}function EP(){return 1824}function SP(e){return e=e|0,CP(e)|0}function CP(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;return r=h,h=h+16|0,s=r+4|0,d=r,o=Qo(8)|0,n=o,_=Tt(4)|0,Ml(s,e),S8(_,Fl(s,e)|0),l=n+4|0,t[l>>2]=_,e=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],d8(e,l,s),t[o>>2]=e,h=r,n|0}function Qo(e){e=e|0;var n=0,r=0;return e=e+7&-8,(e>>>0<=32768?(n=t[2701]|0,e>>>0<=(65536-n|0)>>>0):0)?(r=(t[2702]|0)+n|0,t[2701]=n+e,e=r):(e=K8(e+8|0)|0,t[e>>2]=t[2703],t[2703]=e,e=e+8|0),e|0}function TP(e,n){e=e|0,n=n|0,t[e>>2]=xP()|0,t[e+4>>2]=kP()|0,t[e+12>>2]=n,t[e+8>>2]=AP()|0,t[e+32>>2]=9}function xP(){return 11744}function kP(){return 1832}function AP(){return th()|0}function OP(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(IP(r),Ve(r)):n|0&&Ve(n)}function IP(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function PP(e){e=e|0,MP(e,5052),FP(e)|0,LP(e,5058,26)|0,RP(e,5069,1)|0,NP(e,5077,10)|0,BP(e,5087,19)|0,jP(e,5094,27)|0}function MP(e,n){e=e|0,n=n|0;var r=0;r=IF()|0,t[e>>2]=r,PF(r,n),Cf(t[e>>2]|0)}function FP(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,vF()|0),e|0}function LP(e,n,r){return e=e|0,n=n|0,r=r|0,QM(e,Zn(n)|0,r,0),e|0}function RP(e,n,r){return e=e|0,n=n|0,r=r|0,BM(e,Zn(n)|0,r,0),e|0}function NP(e,n,r){return e=e|0,n=n|0,r=r|0,mM(e,Zn(n)|0,r,0),e|0}function BP(e,n,r){return e=e|0,n=n|0,r=r|0,eM(e,Zn(n)|0,r,0),e|0}function C8(e,n){e=e|0,n=n|0;var r=0,o=0;e:for(;;){for(r=t[2703]|0;;){if((r|0)==(n|0))break e;if(o=t[r>>2]|0,t[2703]=o,!r)r=o;else break}Ve(r)}t[2701]=e}function jP(e,n,r){return e=e|0,n=n|0,r=r|0,UP(e,Zn(n)|0,r,0),e|0}function UP(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=N4()|0,e=qP(r)|0,ur(l,n,s,e,zP(r,o)|0,o)}function N4(){var e=0,n=0;if(c[8040]|0||(x8(10860),Bt(65,10860,Q|0)|0,n=8040,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10860)|0)){e=10860,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));x8(10860)}return 10860}function qP(e){return e=e|0,e|0}function zP(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=N4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(T8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(WP(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function T8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function WP(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=HP(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,bP(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,T8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,GP(e,s),VP(s),h=_;return}}function HP(e){return e=e|0,536870911}function bP(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function GP(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function VP(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function x8(e){e=e|0,KP(e)}function YP(e){e=e|0,$P(e+24|0)}function $P(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function KP(e){e=e|0;var n=0;n=An()|0,Nn(e,1,11,n,XP()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function XP(){return 1840}function JP(e,n,r){e=e|0,n=n|0,r=r|0,ZP(t[(QP(e)|0)>>2]|0,n,r)}function QP(e){return e=e|0,(t[(N4()|0)+24>>2]|0)+(e<<3)|0}function ZP(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;o=h,h=h+16|0,l=o+1|0,s=o,Ml(l,n),n=Fl(l,n)|0,Ml(s,r),r=Fl(s,r)|0,Bl[e&31](n,r),h=o}function eM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=B4()|0,e=tM(r)|0,ur(l,n,s,e,nM(r,o)|0,o)}function B4(){var e=0,n=0;if(c[8048]|0||(A8(10896),Bt(66,10896,Q|0)|0,n=8048,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10896)|0)){e=10896,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));A8(10896)}return 10896}function tM(e){return e=e|0,e|0}function nM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=B4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(k8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(rM(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function k8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function rM(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=iM(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,oM(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,k8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,uM(e,s),sM(s),h=_;return}}function iM(e){return e=e|0,536870911}function oM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function uM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function sM(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function A8(e){e=e|0,cM(e)}function lM(e){e=e|0,fM(e+24|0)}function fM(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function cM(e){e=e|0;var n=0;n=An()|0,Nn(e,1,11,n,aM()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function aM(){return 1852}function dM(e,n){return e=e|0,n=n|0,hM(t[(pM(e)|0)>>2]|0,n)|0}function pM(e){return e=e|0,(t[(B4()|0)+24>>2]|0)+(e<<3)|0}function hM(e,n){e=e|0,n=n|0;var r=0,o=0;return r=h,h=h+16|0,o=r,Ml(o,n),n=Fl(o,n)|0,n=ea(dc[e&31](n)|0)|0,h=r,n|0}function mM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=j4()|0,e=vM(r)|0,ur(l,n,s,e,gM(r,o)|0,o)}function j4(){var e=0,n=0;if(c[8056]|0||(I8(10932),Bt(67,10932,Q|0)|0,n=8056,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10932)|0)){e=10932,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));I8(10932)}return 10932}function vM(e){return e=e|0,e|0}function gM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=j4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(O8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(_M(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function O8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function _M(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=yM(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,wM(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,O8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,DM(e,s),EM(s),h=_;return}}function yM(e){return e=e|0,536870911}function wM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function DM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function EM(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function I8(e){e=e|0,TM(e)}function SM(e){e=e|0,CM(e+24|0)}function CM(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function TM(e){e=e|0;var n=0;n=An()|0,Nn(e,1,7,n,xM()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function xM(){return 1860}function kM(e,n,r){return e=e|0,n=n|0,r=r|0,OM(t[(AM(e)|0)>>2]|0,n,r)|0}function AM(e){return e=e|0,(t[(j4()|0)+24>>2]|0)+(e<<3)|0}function OM(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0;return o=h,h=h+32|0,d=o+12|0,l=o+8|0,_=o,y=o+16|0,s=o+4|0,IM(y,n),PM(_,y,n),$s(s,r),r=Ks(s,r)|0,t[d>>2]=t[_>>2],X1[e&15](l,d,r),r=MM(l)|0,ei(l),Xs(s),h=o,r|0}function IM(e,n){e=e|0,n=n|0}function PM(e,n,r){e=e|0,n=n|0,r=r|0,FM(e,r)}function MM(e){return e=e|0,Oi(e)|0}function FM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;s=h,h=h+16|0,r=s,o=n,o&1?(LM(r,0),c0(o|0,r|0)|0,RM(e,r),NM(r)):t[e>>2]=t[n>>2],h=s}function LM(e,n){e=e|0,n=n|0,wd(e,n),t[e+4>>2]=0,c[e+8>>0]=0}function RM(e,n){e=e|0,n=n|0,t[e>>2]=t[n+4>>2]}function NM(e){e=e|0,c[e+8>>0]=0}function BM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=U4()|0,e=jM(r)|0,ur(l,n,s,e,UM(r,o)|0,o)}function U4(){var e=0,n=0;if(c[8064]|0||(M8(10968),Bt(68,10968,Q|0)|0,n=8064,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10968)|0)){e=10968,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));M8(10968)}return 10968}function jM(e){return e=e|0,e|0}function UM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=U4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(P8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(qM(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function P8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function qM(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=zM(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,WM(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,P8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,HM(e,s),bM(s),h=_;return}}function zM(e){return e=e|0,536870911}function WM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function HM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function bM(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function M8(e){e=e|0,YM(e)}function GM(e){e=e|0,VM(e+24|0)}function VM(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function YM(e){e=e|0;var n=0;n=An()|0,Nn(e,1,1,n,$M()|0,5),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function $M(){return 1872}function KM(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,JM(t[(XM(e)|0)>>2]|0,n,r,o,s,l)}function XM(e){return e=e|0,(t[(U4()|0)+24>>2]|0)+(e<<3)|0}function JM(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0;d=h,h=h+32|0,_=d+16|0,y=d+12|0,k=d+8|0,T=d+4|0,P=d,$s(_,n),n=Ks(_,n)|0,$s(y,r),r=Ks(y,r)|0,$s(k,o),o=Ks(k,o)|0,$s(T,s),s=Ks(T,s)|0,$s(P,l),l=Ks(P,l)|0,eD[e&1](n,r,o,s,l),Xs(P),Xs(T),Xs(k),Xs(y),Xs(_),h=d}function QM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=q4()|0,e=ZM(r)|0,ur(l,n,s,e,eF(r,o)|0,o)}function q4(){var e=0,n=0;if(c[8072]|0||(L8(11004),Bt(69,11004,Q|0)|0,n=8072,t[n>>2]=1,t[n+4>>2]=0),!(Dn(11004)|0)){e=11004,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));L8(11004)}return 11004}function ZM(e){return e=e|0,e|0}function eF(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=q4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(F8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(tF(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function F8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function tF(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=nF(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,rF(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,F8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,iF(e,s),oF(s),h=_;return}}function nF(e){return e=e|0,536870911}function rF(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function iF(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function oF(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function L8(e){e=e|0,lF(e)}function uF(e){e=e|0,sF(e+24|0)}function sF(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function lF(e){e=e|0;var n=0;n=An()|0,Nn(e,1,12,n,fF()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function fF(){return 1896}function cF(e,n,r){e=e|0,n=n|0,r=r|0,dF(t[(aF(e)|0)>>2]|0,n,r)}function aF(e){return e=e|0,(t[(q4()|0)+24>>2]|0)+(e<<3)|0}function dF(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;o=h,h=h+16|0,l=o+4|0,s=o,pF(l,n),n=hF(l,n)|0,$s(s,r),r=Ks(s,r)|0,Bl[e&31](n,r),Xs(s),h=o}function pF(e,n){e=e|0,n=n|0}function hF(e,n){return e=e|0,n=n|0,mF(n)|0}function mF(e){return e=e|0,e|0}function vF(){var e=0;return c[8080]|0||(R8(11040),Bt(70,11040,Q|0)|0,e=8080,t[e>>2]=1,t[e+4>>2]=0),Dn(11040)|0||R8(11040),11040}function R8(e){e=e|0,yF(e),sc(e,71)}function gF(e){e=e|0,_F(e+24|0)}function _F(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function yF(e){e=e|0;var n=0;n=An()|0,Nn(e,5,7,n,SF()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function wF(e){e=e|0,DF(e)}function DF(e){e=e|0,EF(e)}function EF(e){e=e|0,c[e+8>>0]=1}function SF(){return 1936}function CF(){return TF()|0}function TF(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0;return n=h,h=h+16|0,s=n+4|0,d=n,r=Qo(8)|0,e=r,l=e+4|0,t[l>>2]=Tt(1)|0,o=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],xF(o,l,s),t[r>>2]=o,h=n,e|0}function xF(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1916,t[r+12>>2]=n,t[e+4>>2]=r}function kF(e){e=e|0,da(e),Ve(e)}function AF(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function OF(e){e=e|0,Ve(e)}function IF(){var e=0;return c[8088]|0||(BF(11076),Bt(25,11076,Q|0)|0,e=8088,t[e>>2]=1,t[e+4>>2]=0),11076}function PF(e,n){e=e|0,n=n|0,t[e>>2]=MF()|0,t[e+4>>2]=FF()|0,t[e+12>>2]=n,t[e+8>>2]=LF()|0,t[e+32>>2]=10}function MF(){return 11745}function FF(){return 1940}function LF(){return eh()|0}function RF(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(NF(r),Ve(r)):n|0&&Ve(n)}function NF(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function BF(e){e=e|0,Ys(e)}function os(e,n){e=e|0,n=n|0,t[e>>2]=n}function z4(e){return e=e|0,t[e>>2]|0}function jF(e){return e=e|0,c[t[e>>2]>>0]|0}function UF(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,t[o>>2]=t[e>>2],qF(n,o)|0,h=r}function qF(e,n){e=e|0,n=n|0;var r=0;return r=zF(t[e>>2]|0,n)|0,n=e+4|0,t[(t[n>>2]|0)+8>>2]=r,t[(t[n>>2]|0)+8>>2]|0}function zF(e,n){e=e|0,n=n|0;var r=0,o=0;return r=h,h=h+16|0,o=r,Zo(o),e=Oi(e)|0,n=WF(e,t[n>>2]|0)|0,eu(o),h=r,n|0}function Zo(e){e=e|0,t[e>>2]=t[2701],t[e+4>>2]=t[2703]}function WF(e,n){e=e|0,n=n|0;var r=0;return r=ko(HF()|0)|0,sf(0,r|0,e|0,L4(n)|0)|0}function eu(e){e=e|0,C8(t[e>>2]|0,t[e+4>>2]|0)}function HF(){var e=0;return c[8096]|0||(bF(11120),e=8096,t[e>>2]=1,t[e+4>>2]=0),11120}function bF(e){e=e|0,Ao(e,GF()|0,1)}function GF(){return 1948}function VF(){YF()}function YF(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0;if(le=h,h=h+16|0,T=le+4|0,P=le,si(65536,10804,t[2702]|0,10812),r=o8()|0,n=t[r>>2]|0,e=t[n>>2]|0,e|0)for(o=t[r+8>>2]|0,r=t[r+4>>2]|0;As(e|0,C[r>>0]|0|0,c[o>>0]|0),n=n+4|0,e=t[n>>2]|0,e;)o=o+1|0,r=r+1|0;if(e=u8()|0,n=t[e>>2]|0,n|0)do uu(n|0,t[e+4>>2]|0),e=e+8|0,n=t[e>>2]|0;while((n|0)!=0);uu($F()|0,5167),k=sa()|0,e=t[k>>2]|0;e:do if(e|0){do KF(t[e+4>>2]|0),e=t[e>>2]|0;while((e|0)!=0);if(e=t[k>>2]|0,e|0){y=k;do{for(;s=e,e=t[e>>2]|0,s=t[s+4>>2]|0,!!(XF(s)|0);)if(t[P>>2]=y,t[T>>2]=t[P>>2],JF(k,T)|0,!e)break e;if(QF(s),y=t[y>>2]|0,n=N8(s)|0,l=Wo()|0,d=h,h=h+((1*(n<<2)|0)+15&-16)|0,_=h,h=h+((1*(n<<2)|0)+15&-16)|0,n=t[(_8(s)|0)>>2]|0,n|0)for(r=d,o=_;t[r>>2]=t[(la(t[n+4>>2]|0)|0)>>2],t[o>>2]=t[n+8>>2],n=t[n>>2]|0,n;)r=r+4|0,o=o+4|0;ie=la(s)|0,n=ZF(s)|0,r=N8(s)|0,o=eL(s)|0,Is(ie|0,n|0,d|0,_|0,r|0,o|0,A4(s)|0),b0(l|0)}while((e|0)!=0)}}while(0);if(e=t[(O4()|0)>>2]|0,e|0)do ie=e+4|0,k=I4(ie)|0,s=V1(k)|0,l=b1(k)|0,d=(G1(k)|0)+1|0,_=oh(k)|0,y=B8(ie)|0,k=Dn(k)|0,T=nh(ie)|0,P=W4(ie)|0,zo(0,s|0,l|0,d|0,_|0,y|0,k|0,T|0,P|0,H4(ie)|0),e=t[e>>2]|0;while((e|0)!=0);e=t[(sa()|0)>>2]|0;e:do if(e|0){t:for(;;){if(n=t[e+4>>2]|0,n|0?(q=t[(la(n)|0)>>2]|0,we=t[(y8(n)|0)>>2]|0,we|0):0){r=we;do{n=r+4|0,o=I4(n)|0;n:do if(o|0)switch(Dn(o)|0){case 0:break t;case 4:case 3:case 2:{_=V1(o)|0,y=b1(o)|0,k=(G1(o)|0)+1|0,T=oh(o)|0,P=Dn(o)|0,ie=nh(n)|0,zo(q|0,_|0,y|0,k|0,T|0,0,P|0,ie|0,W4(n)|0,H4(n)|0);break n}case 1:{d=V1(o)|0,_=b1(o)|0,y=(G1(o)|0)+1|0,k=oh(o)|0,T=B8(n)|0,P=Dn(o)|0,ie=nh(n)|0,zo(q|0,d|0,_|0,y|0,k|0,T|0,P|0,ie|0,W4(n)|0,H4(n)|0);break n}case 5:{k=V1(o)|0,T=b1(o)|0,P=(G1(o)|0)+1|0,ie=oh(o)|0,zo(q|0,k|0,T|0,P|0,ie|0,tL(o)|0,Dn(o)|0,0,0,0);break n}default:break n}while(0);r=t[r>>2]|0}while((r|0)!=0)}if(e=t[e>>2]|0,!e)break e}_n()}while(0);uf(),h=le}function $F(){return 11703}function KF(e){e=e|0,c[e+40>>0]=0}function XF(e){return e=e|0,(c[e+40>>0]|0)!=0|0}function JF(e,n){return e=e|0,n=n|0,n=nL(n)|0,e=t[n>>2]|0,t[n>>2]=t[e>>2],Ve(e),t[n>>2]|0}function QF(e){e=e|0,c[e+40>>0]=1}function N8(e){return e=e|0,t[e+20>>2]|0}function ZF(e){return e=e|0,t[e+8>>2]|0}function eL(e){return e=e|0,t[e+32>>2]|0}function oh(e){return e=e|0,t[e+4>>2]|0}function B8(e){return e=e|0,t[e+4>>2]|0}function W4(e){return e=e|0,t[e+8>>2]|0}function H4(e){return e=e|0,t[e+16>>2]|0}function tL(e){return e=e|0,t[e+20>>2]|0}function nL(e){return e=e|0,t[e>>2]|0}function uh(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0,pe=0,_e=0,vt=0;vt=h,h=h+16|0,q=vt;do if(e>>>0<245){if(k=e>>>0<11?16:e+11&-8,e=k>>>3,P=t[2783]|0,r=P>>>e,r&3|0)return n=(r&1^1)+e|0,e=11172+(n<<1<<2)|0,r=e+8|0,o=t[r>>2]|0,s=o+8|0,l=t[s>>2]|0,(e|0)==(l|0)?t[2783]=P&~(1<>2]=e,t[r>>2]=l),_e=n<<3,t[o+4>>2]=_e|3,_e=o+_e+4|0,t[_e>>2]=t[_e>>2]|1,_e=s,h=vt,_e|0;if(T=t[2785]|0,k>>>0>T>>>0){if(r|0)return n=2<>>12&16,n=n>>>d,r=n>>>5&8,n=n>>>r,s=n>>>2&4,n=n>>>s,e=n>>>1&2,n=n>>>e,o=n>>>1&1,o=(r|d|s|e|o)+(n>>>o)|0,n=11172+(o<<1<<2)|0,e=n+8|0,s=t[e>>2]|0,d=s+8|0,r=t[d>>2]|0,(n|0)==(r|0)?(e=P&~(1<>2]=n,t[e>>2]=r,e=P),l=(o<<3)-k|0,t[s+4>>2]=k|3,o=s+k|0,t[o+4>>2]=l|1,t[o+l>>2]=l,T|0&&(s=t[2788]|0,n=T>>>3,r=11172+(n<<1<<2)|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=s,t[n+12>>2]=s,t[s+8>>2]=n,t[s+12>>2]=r),t[2785]=l,t[2788]=o,_e=d,h=vt,_e|0;if(_=t[2784]|0,_){if(r=(_&0-_)+-1|0,d=r>>>12&16,r=r>>>d,l=r>>>5&8,r=r>>>l,y=r>>>2&4,r=r>>>y,o=r>>>1&2,r=r>>>o,e=r>>>1&1,e=t[11436+((l|d|y|o|e)+(r>>>e)<<2)>>2]|0,r=(t[e+4>>2]&-8)-k|0,o=t[e+16+(((t[e+16>>2]|0)==0&1)<<2)>>2]|0,!o)y=e,l=r;else{do d=(t[o+4>>2]&-8)-k|0,y=d>>>0>>0,r=y?d:r,e=y?o:e,o=t[o+16+(((t[o+16>>2]|0)==0&1)<<2)>>2]|0;while((o|0)!=0);y=e,l=r}if(d=y+k|0,y>>>0>>0){s=t[y+24>>2]|0,n=t[y+12>>2]|0;do if((n|0)==(y|0)){if(e=y+20|0,n=t[e>>2]|0,!n&&(e=y+16|0,n=t[e>>2]|0,!n)){r=0;break}for(;;){if(r=n+20|0,o=t[r>>2]|0,o|0){n=o,e=r;continue}if(r=n+16|0,o=t[r>>2]|0,o)n=o,e=r;else break}t[e>>2]=0,r=n}else r=t[y+8>>2]|0,t[r+12>>2]=n,t[n+8>>2]=r,r=n;while(0);do if(s|0){if(n=t[y+28>>2]|0,e=11436+(n<<2)|0,(y|0)==(t[e>>2]|0)){if(t[e>>2]=r,!r){t[2784]=_&~(1<>2]|0)!=(y|0)&1)<<2)>>2]=r,!r)break;t[r+24>>2]=s,n=t[y+16>>2]|0,n|0&&(t[r+16>>2]=n,t[n+24>>2]=r),n=t[y+20>>2]|0,n|0&&(t[r+20>>2]=n,t[n+24>>2]=r)}while(0);return l>>>0<16?(_e=l+k|0,t[y+4>>2]=_e|3,_e=y+_e+4|0,t[_e>>2]=t[_e>>2]|1):(t[y+4>>2]=k|3,t[d+4>>2]=l|1,t[d+l>>2]=l,T|0&&(o=t[2788]|0,n=T>>>3,r=11172+(n<<1<<2)|0,n=1<>2]|0):(t[2783]=P|n,n=r,e=r+8|0),t[e>>2]=o,t[n+12>>2]=o,t[o+8>>2]=n,t[o+12>>2]=r),t[2785]=l,t[2788]=d),_e=y+8|0,h=vt,_e|0}else P=k}else P=k}else P=k}else if(e>>>0<=4294967231)if(e=e+11|0,k=e&-8,y=t[2784]|0,y){o=0-k|0,e=e>>>8,e?k>>>0>16777215?_=31:(P=(e+1048320|0)>>>16&8,pe=e<>>16&4,pe=pe<>>16&2,_=14-(T|P|_)+(pe<<_>>>15)|0,_=k>>>(_+7|0)&1|_<<1):_=0,r=t[11436+(_<<2)>>2]|0;e:do if(!r)r=0,e=0,pe=57;else for(e=0,d=k<<((_|0)==31?0:25-(_>>>1)|0),l=0;;){if(s=(t[r+4>>2]&-8)-k|0,s>>>0>>0)if(s)e=r,o=s;else{e=r,o=0,s=r,pe=61;break e}if(s=t[r+20>>2]|0,r=t[r+16+(d>>>31<<2)>>2]|0,l=(s|0)==0|(s|0)==(r|0)?l:s,s=(r|0)==0,s){r=l,pe=57;break}else d=d<<((s^1)&1)}while(0);if((pe|0)==57){if((r|0)==0&(e|0)==0){if(e=2<<_,e=y&(e|0-e),!e){P=k;break}P=(e&0-e)+-1|0,d=P>>>12&16,P=P>>>d,l=P>>>5&8,P=P>>>l,_=P>>>2&4,P=P>>>_,T=P>>>1&2,P=P>>>T,r=P>>>1&1,e=0,r=t[11436+((l|d|_|T|r)+(P>>>r)<<2)>>2]|0}r?(s=r,pe=61):(_=e,d=o)}if((pe|0)==61)for(;;)if(pe=0,r=(t[s+4>>2]&-8)-k|0,P=r>>>0>>0,r=P?r:o,e=P?s:e,s=t[s+16+(((t[s+16>>2]|0)==0&1)<<2)>>2]|0,s)o=r,pe=61;else{_=e,d=r;break}if((_|0)!=0?d>>>0<((t[2785]|0)-k|0)>>>0:0){if(l=_+k|0,_>>>0>=l>>>0)return _e=0,h=vt,_e|0;s=t[_+24>>2]|0,n=t[_+12>>2]|0;do if((n|0)==(_|0)){if(e=_+20|0,n=t[e>>2]|0,!n&&(e=_+16|0,n=t[e>>2]|0,!n)){n=0;break}for(;;){if(r=n+20|0,o=t[r>>2]|0,o|0){n=o,e=r;continue}if(r=n+16|0,o=t[r>>2]|0,o)n=o,e=r;else break}t[e>>2]=0}else _e=t[_+8>>2]|0,t[_e+12>>2]=n,t[n+8>>2]=_e;while(0);do if(s){if(e=t[_+28>>2]|0,r=11436+(e<<2)|0,(_|0)==(t[r>>2]|0)){if(t[r>>2]=n,!n){o=y&~(1<>2]|0)!=(_|0)&1)<<2)>>2]=n,!n){o=y;break}t[n+24>>2]=s,e=t[_+16>>2]|0,e|0&&(t[n+16>>2]=e,t[e+24>>2]=n),e=t[_+20>>2]|0,e&&(t[n+20>>2]=e,t[e+24>>2]=n),o=y}else o=y;while(0);do if(d>>>0>=16){if(t[_+4>>2]=k|3,t[l+4>>2]=d|1,t[l+d>>2]=d,n=d>>>3,d>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=l,t[n+12>>2]=l,t[l+8>>2]=n,t[l+12>>2]=r;break}if(n=d>>>8,n?d>>>0>16777215?n=31:(pe=(n+1048320|0)>>>16&8,_e=n<>>16&4,_e=_e<>>16&2,n=14-(qe|pe|n)+(_e<>>15)|0,n=d>>>(n+7|0)&1|n<<1):n=0,r=11436+(n<<2)|0,t[l+28>>2]=n,e=l+16|0,t[e+4>>2]=0,t[e>>2]=0,e=1<>2]=l,t[l+24>>2]=r,t[l+12>>2]=l,t[l+8>>2]=l;break}for(e=d<<((n|0)==31?0:25-(n>>>1)|0),r=t[r>>2]|0;;){if((t[r+4>>2]&-8|0)==(d|0)){pe=97;break}if(o=r+16+(e>>>31<<2)|0,n=t[o>>2]|0,n)e=e<<1,r=n;else{pe=96;break}}if((pe|0)==96){t[o>>2]=l,t[l+24>>2]=r,t[l+12>>2]=l,t[l+8>>2]=l;break}else if((pe|0)==97){pe=r+8|0,_e=t[pe>>2]|0,t[_e+12>>2]=l,t[pe>>2]=l,t[l+8>>2]=_e,t[l+12>>2]=r,t[l+24>>2]=0;break}}else _e=d+k|0,t[_+4>>2]=_e|3,_e=_+_e+4|0,t[_e>>2]=t[_e>>2]|1;while(0);return _e=_+8|0,h=vt,_e|0}else P=k}else P=k;else P=-1;while(0);if(r=t[2785]|0,r>>>0>=P>>>0)return n=r-P|0,e=t[2788]|0,n>>>0>15?(_e=e+P|0,t[2788]=_e,t[2785]=n,t[_e+4>>2]=n|1,t[_e+n>>2]=n,t[e+4>>2]=P|3):(t[2785]=0,t[2788]=0,t[e+4>>2]=r|3,_e=e+r+4|0,t[_e>>2]=t[_e>>2]|1),_e=e+8|0,h=vt,_e|0;if(d=t[2786]|0,d>>>0>P>>>0)return qe=d-P|0,t[2786]=qe,_e=t[2789]|0,pe=_e+P|0,t[2789]=pe,t[pe+4>>2]=qe|1,t[_e+4>>2]=P|3,_e=_e+8|0,h=vt,_e|0;if(t[2901]|0?e=t[2903]|0:(t[2903]=4096,t[2902]=4096,t[2904]=-1,t[2905]=-1,t[2906]=0,t[2894]=0,e=q&-16^1431655768,t[q>>2]=e,t[2901]=e,e=4096),_=P+48|0,y=P+47|0,l=e+y|0,s=0-e|0,k=l&s,k>>>0<=P>>>0||(e=t[2893]|0,e|0?(T=t[2891]|0,q=T+k|0,q>>>0<=T>>>0|q>>>0>e>>>0):0))return _e=0,h=vt,_e|0;e:do if(t[2894]&4)n=0,pe=133;else{r=t[2789]|0;t:do if(r){for(o=11580;e=t[o>>2]|0,!(e>>>0<=r>>>0?(ie=o+4|0,(e+(t[ie>>2]|0)|0)>>>0>r>>>0):0);)if(e=t[o+8>>2]|0,e)o=e;else{pe=118;break t}if(n=l-d&s,n>>>0<2147483647)if(e=xf(n|0)|0,(e|0)==((t[o>>2]|0)+(t[ie>>2]|0)|0)){if((e|0)!=(-1|0)){d=n,l=e,pe=135;break e}}else o=e,pe=126;else n=0}else pe=118;while(0);do if((pe|0)==118)if(r=xf(0)|0,(r|0)!=(-1|0)?(n=r,we=t[2902]|0,le=we+-1|0,n=((le&n|0)==0?0:(le+n&0-we)-n|0)+k|0,we=t[2891]|0,le=n+we|0,n>>>0>P>>>0&n>>>0<2147483647):0){if(ie=t[2893]|0,ie|0?le>>>0<=we>>>0|le>>>0>ie>>>0:0){n=0;break}if(e=xf(n|0)|0,(e|0)==(r|0)){d=n,l=r,pe=135;break e}else o=e,pe=126}else n=0;while(0);do if((pe|0)==126){if(r=0-n|0,!(_>>>0>n>>>0&(n>>>0<2147483647&(o|0)!=(-1|0))))if((o|0)==(-1|0)){n=0;break}else{d=n,l=o,pe=135;break e}if(e=t[2903]|0,e=y-n+e&0-e,e>>>0>=2147483647){d=n,l=o,pe=135;break e}if((xf(e|0)|0)==(-1|0)){xf(r|0)|0,n=0;break}else{d=e+n|0,l=o,pe=135;break e}}while(0);t[2894]=t[2894]|4,pe=133}while(0);if((((pe|0)==133?k>>>0<2147483647:0)?(qe=xf(k|0)|0,ie=xf(0)|0,Pe=ie-qe|0,ke=Pe>>>0>(P+40|0)>>>0,!((qe|0)==(-1|0)|ke^1|qe>>>0>>0&((qe|0)!=(-1|0)&(ie|0)!=(-1|0))^1)):0)&&(d=ke?Pe:n,l=qe,pe=135),(pe|0)==135){n=(t[2891]|0)+d|0,t[2891]=n,n>>>0>(t[2892]|0)>>>0&&(t[2892]=n),y=t[2789]|0;do if(y){for(n=11580;;){if(e=t[n>>2]|0,r=n+4|0,o=t[r>>2]|0,(l|0)==(e+o|0)){pe=145;break}if(s=t[n+8>>2]|0,s)n=s;else break}if(((pe|0)==145?(t[n+12>>2]&8|0)==0:0)?y>>>0>>0&y>>>0>=e>>>0:0){t[r>>2]=o+d,_e=y+8|0,_e=(_e&7|0)==0?0:0-_e&7,pe=y+_e|0,_e=(t[2786]|0)+(d-_e)|0,t[2789]=pe,t[2786]=_e,t[pe+4>>2]=_e|1,t[pe+_e+4>>2]=40,t[2790]=t[2905];break}for(l>>>0<(t[2787]|0)>>>0&&(t[2787]=l),r=l+d|0,n=11580;;){if((t[n>>2]|0)==(r|0)){pe=153;break}if(e=t[n+8>>2]|0,e)n=e;else break}if((pe|0)==153?(t[n+12>>2]&8|0)==0:0){t[n>>2]=l,T=n+4|0,t[T>>2]=(t[T>>2]|0)+d,T=l+8|0,T=l+((T&7|0)==0?0:0-T&7)|0,n=r+8|0,n=r+((n&7|0)==0?0:0-n&7)|0,k=T+P|0,_=n-T-P|0,t[T+4>>2]=P|3;do if((n|0)!=(y|0)){if((n|0)==(t[2788]|0)){_e=(t[2785]|0)+_|0,t[2785]=_e,t[2788]=k,t[k+4>>2]=_e|1,t[k+_e>>2]=_e;break}if(e=t[n+4>>2]|0,(e&3|0)==1){d=e&-8,o=e>>>3;e:do if(e>>>0<256)if(e=t[n+8>>2]|0,r=t[n+12>>2]|0,(r|0)==(e|0)){t[2783]=t[2783]&~(1<>2]=r,t[r+8>>2]=e;break}else{l=t[n+24>>2]|0,e=t[n+12>>2]|0;do if((e|0)==(n|0)){if(o=n+16|0,r=o+4|0,e=t[r>>2]|0,!e)if(e=t[o>>2]|0,e)r=o;else{e=0;break}for(;;){if(o=e+20|0,s=t[o>>2]|0,s|0){e=s,r=o;continue}if(o=e+16|0,s=t[o>>2]|0,s)e=s,r=o;else break}t[r>>2]=0}else _e=t[n+8>>2]|0,t[_e+12>>2]=e,t[e+8>>2]=_e;while(0);if(!l)break;r=t[n+28>>2]|0,o=11436+(r<<2)|0;do if((n|0)!=(t[o>>2]|0)){if(t[l+16+(((t[l+16>>2]|0)!=(n|0)&1)<<2)>>2]=e,!e)break e}else{if(t[o>>2]=e,e|0)break;t[2784]=t[2784]&~(1<>2]=l,r=n+16|0,o=t[r>>2]|0,o|0&&(t[e+16>>2]=o,t[o+24>>2]=e),r=t[r+4>>2]|0,!r)break;t[e+20>>2]=r,t[r+24>>2]=e}while(0);n=n+d|0,s=d+_|0}else s=_;if(n=n+4|0,t[n>>2]=t[n>>2]&-2,t[k+4>>2]=s|1,t[k+s>>2]=s,n=s>>>3,s>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=k,t[n+12>>2]=k,t[k+8>>2]=n,t[k+12>>2]=r;break}n=s>>>8;do if(!n)n=0;else{if(s>>>0>16777215){n=31;break}pe=(n+1048320|0)>>>16&8,_e=n<>>16&4,_e=_e<>>16&2,n=14-(qe|pe|n)+(_e<>>15)|0,n=s>>>(n+7|0)&1|n<<1}while(0);if(o=11436+(n<<2)|0,t[k+28>>2]=n,e=k+16|0,t[e+4>>2]=0,t[e>>2]=0,e=t[2784]|0,r=1<>2]=k,t[k+24>>2]=o,t[k+12>>2]=k,t[k+8>>2]=k;break}for(e=s<<((n|0)==31?0:25-(n>>>1)|0),r=t[o>>2]|0;;){if((t[r+4>>2]&-8|0)==(s|0)){pe=194;break}if(o=r+16+(e>>>31<<2)|0,n=t[o>>2]|0,n)e=e<<1,r=n;else{pe=193;break}}if((pe|0)==193){t[o>>2]=k,t[k+24>>2]=r,t[k+12>>2]=k,t[k+8>>2]=k;break}else if((pe|0)==194){pe=r+8|0,_e=t[pe>>2]|0,t[_e+12>>2]=k,t[pe>>2]=k,t[k+8>>2]=_e,t[k+12>>2]=r,t[k+24>>2]=0;break}}else _e=(t[2786]|0)+_|0,t[2786]=_e,t[2789]=k,t[k+4>>2]=_e|1;while(0);return _e=T+8|0,h=vt,_e|0}for(n=11580;e=t[n>>2]|0,!(e>>>0<=y>>>0?(_e=e+(t[n+4>>2]|0)|0,_e>>>0>y>>>0):0);)n=t[n+8>>2]|0;s=_e+-47|0,e=s+8|0,e=s+((e&7|0)==0?0:0-e&7)|0,s=y+16|0,e=e>>>0>>0?y:e,n=e+8|0,r=l+8|0,r=(r&7|0)==0?0:0-r&7,pe=l+r|0,r=d+-40-r|0,t[2789]=pe,t[2786]=r,t[pe+4>>2]=r|1,t[pe+r+4>>2]=40,t[2790]=t[2905],r=e+4|0,t[r>>2]=27,t[n>>2]=t[2895],t[n+4>>2]=t[2896],t[n+8>>2]=t[2897],t[n+12>>2]=t[2898],t[2895]=l,t[2896]=d,t[2898]=0,t[2897]=n,n=e+24|0;do pe=n,n=n+4|0,t[n>>2]=7;while((pe+8|0)>>>0<_e>>>0);if((e|0)!=(y|0)){if(l=e-y|0,t[r>>2]=t[r>>2]&-2,t[y+4>>2]=l|1,t[e>>2]=l,n=l>>>3,l>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=y,t[n+12>>2]=y,t[y+8>>2]=n,t[y+12>>2]=r;break}if(n=l>>>8,n?l>>>0>16777215?r=31:(pe=(n+1048320|0)>>>16&8,_e=n<>>16&4,_e=_e<>>16&2,r=14-(qe|pe|r)+(_e<>>15)|0,r=l>>>(r+7|0)&1|r<<1):r=0,o=11436+(r<<2)|0,t[y+28>>2]=r,t[y+20>>2]=0,t[s>>2]=0,n=t[2784]|0,e=1<>2]=y,t[y+24>>2]=o,t[y+12>>2]=y,t[y+8>>2]=y;break}for(e=l<<((r|0)==31?0:25-(r>>>1)|0),r=t[o>>2]|0;;){if((t[r+4>>2]&-8|0)==(l|0)){pe=216;break}if(o=r+16+(e>>>31<<2)|0,n=t[o>>2]|0,n)e=e<<1,r=n;else{pe=215;break}}if((pe|0)==215){t[o>>2]=y,t[y+24>>2]=r,t[y+12>>2]=y,t[y+8>>2]=y;break}else if((pe|0)==216){pe=r+8|0,_e=t[pe>>2]|0,t[_e+12>>2]=y,t[pe>>2]=y,t[y+8>>2]=_e,t[y+12>>2]=r,t[y+24>>2]=0;break}}}else{_e=t[2787]|0,(_e|0)==0|l>>>0<_e>>>0&&(t[2787]=l),t[2895]=l,t[2896]=d,t[2898]=0,t[2792]=t[2901],t[2791]=-1,n=0;do _e=11172+(n<<1<<2)|0,t[_e+12>>2]=_e,t[_e+8>>2]=_e,n=n+1|0;while((n|0)!=32);_e=l+8|0,_e=(_e&7|0)==0?0:0-_e&7,pe=l+_e|0,_e=d+-40-_e|0,t[2789]=pe,t[2786]=_e,t[pe+4>>2]=_e|1,t[pe+_e+4>>2]=40,t[2790]=t[2905]}while(0);if(n=t[2786]|0,n>>>0>P>>>0)return qe=n-P|0,t[2786]=qe,_e=t[2789]|0,pe=_e+P|0,t[2789]=pe,t[pe+4>>2]=qe|1,t[_e+4>>2]=P|3,_e=_e+8|0,h=vt,_e|0}return t[(ca()|0)>>2]=12,_e=0,h=vt,_e|0}function sh(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0;if(!!e){r=e+-8|0,s=t[2787]|0,e=t[e+-4>>2]|0,n=e&-8,y=r+n|0;do if(e&1)_=r,d=r;else{if(o=t[r>>2]|0,!(e&3)||(d=r+(0-o)|0,l=o+n|0,d>>>0>>0))return;if((d|0)==(t[2788]|0)){if(e=y+4|0,n=t[e>>2]|0,(n&3|0)!=3){_=d,n=l;break}t[2785]=l,t[e>>2]=n&-2,t[d+4>>2]=l|1,t[d+l>>2]=l;return}if(r=o>>>3,o>>>0<256)if(e=t[d+8>>2]|0,n=t[d+12>>2]|0,(n|0)==(e|0)){t[2783]=t[2783]&~(1<>2]=n,t[n+8>>2]=e,_=d,n=l;break}s=t[d+24>>2]|0,e=t[d+12>>2]|0;do if((e|0)==(d|0)){if(r=d+16|0,n=r+4|0,e=t[n>>2]|0,!e)if(e=t[r>>2]|0,e)n=r;else{e=0;break}for(;;){if(r=e+20|0,o=t[r>>2]|0,o|0){e=o,n=r;continue}if(r=e+16|0,o=t[r>>2]|0,o)e=o,n=r;else break}t[n>>2]=0}else _=t[d+8>>2]|0,t[_+12>>2]=e,t[e+8>>2]=_;while(0);if(s){if(n=t[d+28>>2]|0,r=11436+(n<<2)|0,(d|0)==(t[r>>2]|0)){if(t[r>>2]=e,!e){t[2784]=t[2784]&~(1<>2]|0)!=(d|0)&1)<<2)>>2]=e,!e){_=d,n=l;break}t[e+24>>2]=s,n=d+16|0,r=t[n>>2]|0,r|0&&(t[e+16>>2]=r,t[r+24>>2]=e),n=t[n+4>>2]|0,n?(t[e+20>>2]=n,t[n+24>>2]=e,_=d,n=l):(_=d,n=l)}else _=d,n=l}while(0);if(!(d>>>0>=y>>>0)&&(e=y+4|0,o=t[e>>2]|0,!!(o&1))){if(o&2)t[e>>2]=o&-2,t[_+4>>2]=n|1,t[d+n>>2]=n,s=n;else{if(e=t[2788]|0,(y|0)==(t[2789]|0)){if(y=(t[2786]|0)+n|0,t[2786]=y,t[2789]=_,t[_+4>>2]=y|1,(_|0)!=(e|0))return;t[2788]=0,t[2785]=0;return}if((y|0)==(e|0)){y=(t[2785]|0)+n|0,t[2785]=y,t[2788]=d,t[_+4>>2]=y|1,t[d+y>>2]=y;return}s=(o&-8)+n|0,r=o>>>3;do if(o>>>0<256)if(n=t[y+8>>2]|0,e=t[y+12>>2]|0,(e|0)==(n|0)){t[2783]=t[2783]&~(1<>2]=e,t[e+8>>2]=n;break}else{l=t[y+24>>2]|0,e=t[y+12>>2]|0;do if((e|0)==(y|0)){if(r=y+16|0,n=r+4|0,e=t[n>>2]|0,!e)if(e=t[r>>2]|0,e)n=r;else{r=0;break}for(;;){if(r=e+20|0,o=t[r>>2]|0,o|0){e=o,n=r;continue}if(r=e+16|0,o=t[r>>2]|0,o)e=o,n=r;else break}t[n>>2]=0,r=e}else r=t[y+8>>2]|0,t[r+12>>2]=e,t[e+8>>2]=r,r=e;while(0);if(l|0){if(e=t[y+28>>2]|0,n=11436+(e<<2)|0,(y|0)==(t[n>>2]|0)){if(t[n>>2]=r,!r){t[2784]=t[2784]&~(1<>2]|0)!=(y|0)&1)<<2)>>2]=r,!r)break;t[r+24>>2]=l,e=y+16|0,n=t[e>>2]|0,n|0&&(t[r+16>>2]=n,t[n+24>>2]=r),e=t[e+4>>2]|0,e|0&&(t[r+20>>2]=e,t[e+24>>2]=r)}}while(0);if(t[_+4>>2]=s|1,t[d+s>>2]=s,(_|0)==(t[2788]|0)){t[2785]=s;return}}if(e=s>>>3,s>>>0<256){r=11172+(e<<1<<2)|0,n=t[2783]|0,e=1<>2]|0):(t[2783]=n|e,e=r,n=r+8|0),t[n>>2]=_,t[e+12>>2]=_,t[_+8>>2]=e,t[_+12>>2]=r;return}e=s>>>8,e?s>>>0>16777215?e=31:(d=(e+1048320|0)>>>16&8,y=e<>>16&4,y=y<>>16&2,e=14-(l|d|e)+(y<>>15)|0,e=s>>>(e+7|0)&1|e<<1):e=0,o=11436+(e<<2)|0,t[_+28>>2]=e,t[_+20>>2]=0,t[_+16>>2]=0,n=t[2784]|0,r=1<>>1)|0),r=t[o>>2]|0;;){if((t[r+4>>2]&-8|0)==(s|0)){e=73;break}if(o=r+16+(n>>>31<<2)|0,e=t[o>>2]|0,e)n=n<<1,r=e;else{e=72;break}}if((e|0)==72){t[o>>2]=_,t[_+24>>2]=r,t[_+12>>2]=_,t[_+8>>2]=_;break}else if((e|0)==73){d=r+8|0,y=t[d>>2]|0,t[y+12>>2]=_,t[d>>2]=_,t[_+8>>2]=y,t[_+12>>2]=r,t[_+24>>2]=0;break}}else t[2784]=n|r,t[o>>2]=_,t[_+24>>2]=o,t[_+12>>2]=_,t[_+8>>2]=_;while(0);if(y=(t[2791]|0)+-1|0,t[2791]=y,!y)e=11588;else return;for(;e=t[e>>2]|0,e;)e=e+8|0;t[2791]=-1}}}function rL(){return 11628}function iL(e){e=e|0;var n=0,r=0;return n=h,h=h+16|0,r=n,t[r>>2]=sL(t[e+60>>2]|0)|0,e=lh(Ms(6,r|0)|0)|0,h=n,e|0}function j8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0;P=h,h=h+48|0,k=P+16|0,l=P,s=P+32|0,_=e+28|0,o=t[_>>2]|0,t[s>>2]=o,y=e+20|0,o=(t[y>>2]|0)-o|0,t[s+4>>2]=o,t[s+8>>2]=n,t[s+12>>2]=r,o=o+r|0,d=e+60|0,t[l>>2]=t[d>>2],t[l+4>>2]=s,t[l+8>>2]=2,l=lh(G0(146,l|0)|0)|0;e:do if((o|0)!=(l|0)){for(n=2;!((l|0)<0);)if(o=o-l|0,we=t[s+4>>2]|0,q=l>>>0>we>>>0,s=q?s+8|0:s,n=(q<<31>>31)+n|0,we=l-(q?we:0)|0,t[s>>2]=(t[s>>2]|0)+we,q=s+4|0,t[q>>2]=(t[q>>2]|0)-we,t[k>>2]=t[d>>2],t[k+4>>2]=s,t[k+8>>2]=n,l=lh(G0(146,k|0)|0)|0,(o|0)==(l|0)){T=3;break e}t[e+16>>2]=0,t[_>>2]=0,t[y>>2]=0,t[e>>2]=t[e>>2]|32,(n|0)==2?r=0:r=r-(t[s+4>>2]|0)|0}else T=3;while(0);return(T|0)==3&&(we=t[e+44>>2]|0,t[e+16>>2]=we+(t[e+48>>2]|0),t[_>>2]=we,t[y>>2]=we),h=P,r|0}function oL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;return s=h,h=h+32|0,l=s,o=s+20|0,t[l>>2]=t[e+60>>2],t[l+4>>2]=0,t[l+8>>2]=n,t[l+12>>2]=o,t[l+16>>2]=r,(lh(Uu(140,l|0)|0)|0)<0?(t[o>>2]=-1,e=-1):e=t[o>>2]|0,h=s,e|0}function lh(e){return e=e|0,e>>>0>4294963200&&(t[(ca()|0)>>2]=0-e,e=-1),e|0}function ca(){return(uL()|0)+64|0}function uL(){return b4()|0}function b4(){return 2084}function sL(e){return e=e|0,e|0}function lL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;return s=h,h=h+32|0,o=s,t[e+36>>2]=1,((t[e>>2]&64|0)==0?(t[o>>2]=t[e+60>>2],t[o+4>>2]=21523,t[o+8>>2]=s+16,su(54,o|0)|0):0)&&(c[e+75>>0]=-1),o=j8(e,n,r)|0,h=s,o|0}function U8(e,n){e=e|0,n=n|0;var r=0,o=0;if(r=c[e>>0]|0,o=c[n>>0]|0,r<<24>>24==0?1:r<<24>>24!=o<<24>>24)e=o;else{do e=e+1|0,n=n+1|0,r=c[e>>0]|0,o=c[n>>0]|0;while(!(r<<24>>24==0?1:r<<24>>24!=o<<24>>24));e=o}return(r&255)-(e&255)|0}function fL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;e:do if(!r)e=0;else{for(;o=c[e>>0]|0,s=c[n>>0]|0,o<<24>>24==s<<24>>24;)if(r=r+-1|0,r)e=e+1|0,n=n+1|0;else{e=0;break e}e=(o&255)-(s&255)|0}while(0);return e|0}function q8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0;ie=h,h=h+224|0,T=ie+120|0,P=ie+80|0,we=ie,le=ie+136|0,o=P,s=o+40|0;do t[o>>2]=0,o=o+4|0;while((o|0)<(s|0));return t[T>>2]=t[r>>2],(G4(0,n,T,we,P)|0)<0?r=-1:((t[e+76>>2]|0)>-1?q=cL(e)|0:q=0,r=t[e>>2]|0,k=r&32,(c[e+74>>0]|0)<1&&(t[e>>2]=r&-33),o=e+48|0,t[o>>2]|0?r=G4(e,n,T,we,P)|0:(s=e+44|0,l=t[s>>2]|0,t[s>>2]=le,d=e+28|0,t[d>>2]=le,_=e+20|0,t[_>>2]=le,t[o>>2]=80,y=e+16|0,t[y>>2]=le+80,r=G4(e,n,T,we,P)|0,l&&(dh[t[e+36>>2]&7](e,0,0)|0,r=(t[_>>2]|0)==0?-1:r,t[s>>2]=l,t[o>>2]=0,t[y>>2]=0,t[d>>2]=0,t[_>>2]=0)),o=t[e>>2]|0,t[e>>2]=o|k,q|0&&aL(e),r=(o&32|0)==0?r:-1),h=ie,r|0}function G4(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0,pe=0,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0;zt=h,h=h+64|0,Ht=zt+16|0,It=zt,vt=zt+24|0,gn=zt+8|0,Pn=zt+20|0,t[Ht>>2]=n,qe=(e|0)!=0,pe=vt+40|0,_e=pe,vt=vt+39|0,Ln=gn+4|0,d=0,l=0,T=0;e:for(;;){do if((l|0)>-1)if((d|0)>(2147483647-l|0)){t[(ca()|0)>>2]=75,l=-1;break}else{l=d+l|0;break}while(0);if(d=c[n>>0]|0,d<<24>>24)_=n;else{ke=87;break}t:for(;;){switch(d<<24>>24){case 37:{d=_,ke=9;break t}case 0:{d=_;break t}default:}Pe=_+1|0,t[Ht>>2]=Pe,d=c[Pe>>0]|0,_=Pe}t:do if((ke|0)==9)for(;;){if(ke=0,(c[_+1>>0]|0)!=37)break t;if(d=d+1|0,_=_+2|0,t[Ht>>2]=_,(c[_>>0]|0)==37)ke=9;else break}while(0);if(d=d-n|0,qe&&ri(e,n,d),d|0){n=_;continue}y=_+1|0,d=(c[y>>0]|0)+-48|0,d>>>0<10?(Pe=(c[_+2>>0]|0)==36,ie=Pe?d:-1,T=Pe?1:T,y=Pe?_+3|0:y):ie=-1,t[Ht>>2]=y,d=c[y>>0]|0,_=(d<<24>>24)+-32|0;t:do if(_>>>0<32)for(k=0,P=d;;){if(d=1<<_,!(d&75913)){d=P;break t}if(k=d|k,y=y+1|0,t[Ht>>2]=y,d=c[y>>0]|0,_=(d<<24>>24)+-32|0,_>>>0>=32)break;P=d}else k=0;while(0);if(d<<24>>24==42){if(_=y+1|0,d=(c[_>>0]|0)+-48|0,d>>>0<10?(c[y+2>>0]|0)==36:0)t[s+(d<<2)>>2]=10,d=t[o+((c[_>>0]|0)+-48<<3)>>2]|0,T=1,y=y+3|0;else{if(T|0){l=-1;break}qe?(T=(t[r>>2]|0)+(4-1)&~(4-1),d=t[T>>2]|0,t[r>>2]=T+4,T=0,y=_):(d=0,T=0,y=_)}t[Ht>>2]=y,Pe=(d|0)<0,d=Pe?0-d|0:d,k=Pe?k|8192:k}else{if(d=z8(Ht)|0,(d|0)<0){l=-1;break}y=t[Ht>>2]|0}do if((c[y>>0]|0)==46){if((c[y+1>>0]|0)!=42){t[Ht>>2]=y+1,_=z8(Ht)|0,y=t[Ht>>2]|0;break}if(P=y+2|0,_=(c[P>>0]|0)+-48|0,_>>>0<10?(c[y+3>>0]|0)==36:0){t[s+(_<<2)>>2]=10,_=t[o+((c[P>>0]|0)+-48<<3)>>2]|0,y=y+4|0,t[Ht>>2]=y;break}if(T|0){l=-1;break e}qe?(Pe=(t[r>>2]|0)+(4-1)&~(4-1),_=t[Pe>>2]|0,t[r>>2]=Pe+4):_=0,t[Ht>>2]=P,y=P}else _=-1;while(0);for(le=0;;){if(((c[y>>0]|0)+-65|0)>>>0>57){l=-1;break e}if(Pe=y+1|0,t[Ht>>2]=Pe,P=c[(c[y>>0]|0)+-65+(5178+(le*58|0))>>0]|0,q=P&255,(q+-1|0)>>>0<8)le=q,y=Pe;else break}if(!(P<<24>>24)){l=-1;break}we=(ie|0)>-1;do if(P<<24>>24==19)if(we){l=-1;break e}else ke=49;else{if(we){t[s+(ie<<2)>>2]=q,we=o+(ie<<3)|0,ie=t[we+4>>2]|0,ke=It,t[ke>>2]=t[we>>2],t[ke+4>>2]=ie,ke=49;break}if(!qe){l=0;break e}W8(It,q,r)}while(0);if((ke|0)==49?(ke=0,!qe):0){d=0,n=Pe;continue}y=c[y>>0]|0,y=(le|0)!=0&(y&15|0)==3?y&-33:y,we=k&-65537,ie=(k&8192|0)==0?k:we;t:do switch(y|0){case 110:switch((le&255)<<24>>24){case 0:{t[t[It>>2]>>2]=l,d=0,n=Pe;continue e}case 1:{t[t[It>>2]>>2]=l,d=0,n=Pe;continue e}case 2:{d=t[It>>2]|0,t[d>>2]=l,t[d+4>>2]=((l|0)<0)<<31>>31,d=0,n=Pe;continue e}case 3:{g[t[It>>2]>>1]=l,d=0,n=Pe;continue e}case 4:{c[t[It>>2]>>0]=l,d=0,n=Pe;continue e}case 6:{t[t[It>>2]>>2]=l,d=0,n=Pe;continue e}case 7:{d=t[It>>2]|0,t[d>>2]=l,t[d+4>>2]=((l|0)<0)<<31>>31,d=0,n=Pe;continue e}default:{d=0,n=Pe;continue e}}case 112:{y=120,_=_>>>0>8?_:8,n=ie|8,ke=61;break}case 88:case 120:{n=ie,ke=61;break}case 111:{y=It,n=t[y>>2]|0,y=t[y+4>>2]|0,q=pL(n,y,pe)|0,we=_e-q|0,k=0,P=5642,_=(ie&8|0)==0|(_|0)>(we|0)?_:we+1|0,we=ie,ke=67;break}case 105:case 100:if(y=It,n=t[y>>2]|0,y=t[y+4>>2]|0,(y|0)<0){n=fh(0,0,n|0,y|0)|0,y=be,k=It,t[k>>2]=n,t[k+4>>2]=y,k=1,P=5642,ke=66;break t}else{k=(ie&2049|0)!=0&1,P=(ie&2048|0)==0?(ie&1|0)==0?5642:5644:5643,ke=66;break t}case 117:{y=It,k=0,P=5642,n=t[y>>2]|0,y=t[y+4>>2]|0,ke=66;break}case 99:{c[vt>>0]=t[It>>2],n=vt,k=0,P=5642,q=pe,y=1,_=we;break}case 109:{y=hL(t[(ca()|0)>>2]|0)|0,ke=71;break}case 115:{y=t[It>>2]|0,y=y|0?y:5652,ke=71;break}case 67:{t[gn>>2]=t[It>>2],t[Ln>>2]=0,t[It>>2]=gn,q=-1,y=gn,ke=75;break}case 83:{n=t[It>>2]|0,_?(q=_,y=n,ke=75):(wi(e,32,d,0,ie),n=0,ke=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{d=vL(e,+L[It>>3],d,_,ie,y)|0,n=Pe;continue e}default:k=0,P=5642,q=pe,y=_,_=ie}while(0);t:do if((ke|0)==61)ie=It,le=t[ie>>2]|0,ie=t[ie+4>>2]|0,q=dL(le,ie,pe,y&32)|0,P=(n&8|0)==0|(le|0)==0&(ie|0)==0,k=P?0:2,P=P?5642:5642+(y>>4)|0,we=n,n=le,y=ie,ke=67;else if((ke|0)==66)q=aa(n,y,pe)|0,we=ie,ke=67;else if((ke|0)==71)ke=0,ie=mL(y,0,_)|0,le=(ie|0)==0,n=y,k=0,P=5642,q=le?y+_|0:ie,y=le?_:ie-y|0,_=we;else if((ke|0)==75){for(ke=0,P=y,n=0,_=0;k=t[P>>2]|0,!(!k||(_=H8(Pn,k)|0,(_|0)<0|_>>>0>(q-n|0)>>>0));)if(n=_+n|0,q>>>0>n>>>0)P=P+4|0;else break;if((_|0)<0){l=-1;break e}if(wi(e,32,d,n,ie),!n)n=0,ke=84;else for(k=0;;){if(_=t[y>>2]|0,!_){ke=84;break t}if(_=H8(Pn,_)|0,k=_+k|0,(k|0)>(n|0)){ke=84;break t}if(ri(e,Pn,_),k>>>0>=n>>>0){ke=84;break}else y=y+4|0}}while(0);if((ke|0)==67)ke=0,y=(n|0)!=0|(y|0)!=0,ie=(_|0)!=0|y,y=((y^1)&1)+(_e-q)|0,n=ie?q:pe,q=pe,y=ie?(_|0)>(y|0)?_:y:_,_=(_|0)>-1?we&-65537:we;else if((ke|0)==84){ke=0,wi(e,32,d,n,ie^8192),d=(d|0)>(n|0)?d:n,n=Pe;continue}le=q-n|0,we=(y|0)<(le|0)?le:y,ie=we+k|0,d=(d|0)<(ie|0)?ie:d,wi(e,32,d,ie,_),ri(e,P,k),wi(e,48,d,ie,_^65536),wi(e,48,we,le,0),ri(e,n,le),wi(e,32,d,ie,_^8192),n=Pe}e:do if((ke|0)==87&&!e)if(!T)l=0;else{for(l=1;n=t[s+(l<<2)>>2]|0,!!n;)if(W8(o+(l<<3)|0,n,r),l=l+1|0,(l|0)>=10){l=1;break e}for(;;){if(t[s+(l<<2)>>2]|0){l=-1;break e}if(l=l+1|0,(l|0)>=10){l=1;break}}}while(0);return h=zt,l|0}function cL(e){return e=e|0,0}function aL(e){e=e|0}function ri(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]&32||TL(n,r,e)|0}function z8(e){e=e|0;var n=0,r=0,o=0;if(r=t[e>>2]|0,o=(c[r>>0]|0)+-48|0,o>>>0<10){n=0;do n=o+(n*10|0)|0,r=r+1|0,t[e>>2]=r,o=(c[r>>0]|0)+-48|0;while(o>>>0<10)}else n=0;return n|0}function W8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;e:do if(n>>>0<=20)do switch(n|0){case 9:{o=(t[r>>2]|0)+(4-1)&~(4-1),n=t[o>>2]|0,t[r>>2]=o+4,t[e>>2]=n;break e}case 10:{o=(t[r>>2]|0)+(4-1)&~(4-1),n=t[o>>2]|0,t[r>>2]=o+4,o=e,t[o>>2]=n,t[o+4>>2]=((n|0)<0)<<31>>31;break e}case 11:{o=(t[r>>2]|0)+(4-1)&~(4-1),n=t[o>>2]|0,t[r>>2]=o+4,o=e,t[o>>2]=n,t[o+4>>2]=0;break e}case 12:{o=(t[r>>2]|0)+(8-1)&~(8-1),n=o,s=t[n>>2]|0,n=t[n+4>>2]|0,t[r>>2]=o+8,o=e,t[o>>2]=s,t[o+4>>2]=n;break e}case 13:{s=(t[r>>2]|0)+(4-1)&~(4-1),o=t[s>>2]|0,t[r>>2]=s+4,o=(o&65535)<<16>>16,s=e,t[s>>2]=o,t[s+4>>2]=((o|0)<0)<<31>>31;break e}case 14:{s=(t[r>>2]|0)+(4-1)&~(4-1),o=t[s>>2]|0,t[r>>2]=s+4,s=e,t[s>>2]=o&65535,t[s+4>>2]=0;break e}case 15:{s=(t[r>>2]|0)+(4-1)&~(4-1),o=t[s>>2]|0,t[r>>2]=s+4,o=(o&255)<<24>>24,s=e,t[s>>2]=o,t[s+4>>2]=((o|0)<0)<<31>>31;break e}case 16:{s=(t[r>>2]|0)+(4-1)&~(4-1),o=t[s>>2]|0,t[r>>2]=s+4,s=e,t[s>>2]=o&255,t[s+4>>2]=0;break e}case 17:{s=(t[r>>2]|0)+(8-1)&~(8-1),l=+L[s>>3],t[r>>2]=s+8,L[e>>3]=l;break e}case 18:{s=(t[r>>2]|0)+(8-1)&~(8-1),l=+L[s>>3],t[r>>2]=s+8,L[e>>3]=l;break e}default:break e}while(0);while(0)}function dL(e,n,r,o){if(e=e|0,n=n|0,r=r|0,o=o|0,!((e|0)==0&(n|0)==0))do r=r+-1|0,c[r>>0]=C[5694+(e&15)>>0]|0|o,e=ch(e|0,n|0,4)|0,n=be;while(!((e|0)==0&(n|0)==0));return r|0}function pL(e,n,r){if(e=e|0,n=n|0,r=r|0,!((e|0)==0&(n|0)==0))do r=r+-1|0,c[r>>0]=e&7|48,e=ch(e|0,n|0,3)|0,n=be;while(!((e|0)==0&(n|0)==0));return r|0}function aa(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;if(n>>>0>0|(n|0)==0&e>>>0>4294967295){for(;o=K4(e|0,n|0,10,0)|0,r=r+-1|0,c[r>>0]=o&255|48,o=e,e=$4(e|0,n|0,10,0)|0,n>>>0>9|(n|0)==9&o>>>0>4294967295;)n=be;n=e}else n=e;if(n)for(;r=r+-1|0,c[r>>0]=(n>>>0)%10|0|48,!(n>>>0<10);)n=(n>>>0)/10|0;return r|0}function hL(e){return e=e|0,DL(e,t[(wL()|0)+188>>2]|0)|0}function mL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;l=n&255,o=(r|0)!=0;e:do if(o&(e&3|0)!=0)for(s=n&255;;){if((c[e>>0]|0)==s<<24>>24){d=6;break e}if(e=e+1|0,r=r+-1|0,o=(r|0)!=0,!(o&(e&3|0)!=0)){d=5;break}}else d=5;while(0);(d|0)==5&&(o?d=6:r=0);e:do if((d|0)==6&&(s=n&255,(c[e>>0]|0)!=s<<24>>24)){o=Un(l,16843009)|0;t:do if(r>>>0>3){for(;l=t[e>>2]^o,!((l&-2139062144^-2139062144)&l+-16843009|0);)if(e=e+4|0,r=r+-4|0,r>>>0<=3){d=11;break t}}else d=11;while(0);if((d|0)==11&&!r){r=0;break}for(;;){if((c[e>>0]|0)==s<<24>>24)break e;if(e=e+1|0,r=r+-1|0,!r){r=0;break}}}while(0);return(r|0?e:0)|0}function wi(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0;if(d=h,h=h+256|0,l=d,(r|0)>(o|0)&(s&73728|0)==0){if(s=r-o|0,pa(l|0,n|0,(s>>>0<256?s:256)|0)|0,s>>>0>255){n=r-o|0;do ri(e,l,256),s=s+-256|0;while(s>>>0>255);s=n&255}ri(e,l,s)}h=d}function H8(e,n){return e=e|0,n=n|0,e?e=_L(e,n,0)|0:e=0,e|0}function vL(e,n,r,o,s,l){e=e|0,n=+n,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0,pe=0,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=0;Dr=h,h=h+560|0,y=Dr+8|0,Pe=Dr,zt=Dr+524|0,Pn=zt,k=Dr+512|0,t[Pe>>2]=0,gn=k+12|0,b8(n)|0,(be|0)<0?(n=-n,Ht=1,Ln=5659):(Ht=(s&2049|0)!=0&1,Ln=(s&2048|0)==0?(s&1|0)==0?5660:5665:5662),b8(n)|0,It=be&2146435072;do if(It>>>0<2146435072|(It|0)==2146435072&0<0){if(we=+gL(n,Pe)*2,d=we!=0,d&&(t[Pe>>2]=(t[Pe>>2]|0)+-1),qe=l|32,(qe|0)==97){le=l&32,q=(le|0)==0?Ln:Ln+9|0,P=Ht|2,d=12-o|0;do if(o>>>0>11|(d|0)==0)n=we;else{n=8;do d=d+-1|0,n=n*16;while((d|0)!=0);if((c[q>>0]|0)==45){n=-(n+(-we-n));break}else{n=we+n-n;break}}while(0);_=t[Pe>>2]|0,d=(_|0)<0?0-_|0:_,d=aa(d,((d|0)<0)<<31>>31,gn)|0,(d|0)==(gn|0)&&(d=k+11|0,c[d>>0]=48),c[d+-1>>0]=(_>>31&2)+43,T=d+-2|0,c[T>>0]=l+15,k=(o|0)<1,y=(s&8|0)==0,d=zt;do It=~~n,_=d+1|0,c[d>>0]=C[5694+It>>0]|le,n=(n-+(It|0))*16,((_-Pn|0)==1?!(y&(k&n==0)):0)?(c[_>>0]=46,d=d+2|0):d=_;while(n!=0);It=d-Pn|0,Pn=gn-T|0,gn=(o|0)!=0&(It+-2|0)<(o|0)?o+2|0:It,d=Pn+P+gn|0,wi(e,32,r,d,s),ri(e,q,P),wi(e,48,r,d,s^65536),ri(e,zt,It),wi(e,48,gn-It|0,0,0),ri(e,T,Pn),wi(e,32,r,d,s^8192);break}_=(o|0)<0?6:o,d?(d=(t[Pe>>2]|0)+-28|0,t[Pe>>2]=d,n=we*268435456):(n=we,d=t[Pe>>2]|0),It=(d|0)<0?y:y+288|0,y=It;do _e=~~n>>>0,t[y>>2]=_e,y=y+4|0,n=(n-+(_e>>>0))*1e9;while(n!=0);if((d|0)>0)for(k=It,P=y;;){if(T=(d|0)<29?d:29,d=P+-4|0,d>>>0>=k>>>0){y=0;do pe=X8(t[d>>2]|0,0,T|0)|0,pe=Y4(pe|0,be|0,y|0,0)|0,_e=be,ke=K4(pe|0,_e|0,1e9,0)|0,t[d>>2]=ke,y=$4(pe|0,_e|0,1e9,0)|0,d=d+-4|0;while(d>>>0>=k>>>0);y&&(k=k+-4|0,t[k>>2]=y)}for(y=P;!(y>>>0<=k>>>0);)if(d=y+-4|0,!(t[d>>2]|0))y=d;else break;if(d=(t[Pe>>2]|0)-T|0,t[Pe>>2]=d,(d|0)>0)P=y;else break}else k=It;if((d|0)<0){o=((_+25|0)/9|0)+1|0,ie=(qe|0)==102;do{if(le=0-d|0,le=(le|0)<9?le:9,k>>>0>>0){T=(1<>>le,q=0,d=k;do _e=t[d>>2]|0,t[d>>2]=(_e>>>le)+q,q=Un(_e&T,P)|0,d=d+4|0;while(d>>>0>>0);d=(t[k>>2]|0)==0?k+4|0:k,q?(t[y>>2]=q,k=d,d=y+4|0):(k=d,d=y)}else k=(t[k>>2]|0)==0?k+4|0:k,d=y;y=ie?It:k,y=(d-y>>2|0)>(o|0)?y+(o<<2)|0:d,d=(t[Pe>>2]|0)+le|0,t[Pe>>2]=d}while((d|0)<0);d=k,o=y}else d=k,o=y;if(_e=It,d>>>0>>0){if(y=(_e-d>>2)*9|0,T=t[d>>2]|0,T>>>0>=10){k=10;do k=k*10|0,y=y+1|0;while(T>>>0>=k>>>0)}}else y=0;if(ie=(qe|0)==103,ke=(_|0)!=0,k=_-((qe|0)!=102?y:0)+((ke&ie)<<31>>31)|0,(k|0)<(((o-_e>>2)*9|0)+-9|0)){if(k=k+9216|0,le=It+4+(((k|0)/9|0)+-1024<<2)|0,k=((k|0)%9|0)+1|0,(k|0)<9){T=10;do T=T*10|0,k=k+1|0;while((k|0)!=9)}else T=10;if(P=t[le>>2]|0,q=(P>>>0)%(T>>>0)|0,k=(le+4|0)==(o|0),k&(q|0)==0)k=le;else if(we=(((P>>>0)/(T>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,pe=(T|0)/2|0,n=q>>>0>>0?.5:k&(q|0)==(pe|0)?1:1.5,Ht&&(pe=(c[Ln>>0]|0)==45,n=pe?-n:n,we=pe?-we:we),k=P-q|0,t[le>>2]=k,we+n!=we){if(pe=k+T|0,t[le>>2]=pe,pe>>>0>999999999)for(y=le;k=y+-4|0,t[y>>2]=0,k>>>0>>0&&(d=d+-4|0,t[d>>2]=0),pe=(t[k>>2]|0)+1|0,t[k>>2]=pe,pe>>>0>999999999;)y=k;else k=le;if(y=(_e-d>>2)*9|0,P=t[d>>2]|0,P>>>0>=10){T=10;do T=T*10|0,y=y+1|0;while(P>>>0>=T>>>0)}}else k=le;k=k+4|0,k=o>>>0>k>>>0?k:o,pe=d}else k=o,pe=d;for(qe=k;;){if(qe>>>0<=pe>>>0){Pe=0;break}if(d=qe+-4|0,!(t[d>>2]|0))qe=d;else{Pe=1;break}}o=0-y|0;do if(ie)if(d=((ke^1)&1)+_|0,(d|0)>(y|0)&(y|0)>-5?(T=l+-1|0,_=d+-1-y|0):(T=l+-2|0,_=d+-1|0),d=s&8,d)le=d;else{if(Pe?(vt=t[qe+-4>>2]|0,(vt|0)!=0):0)if((vt>>>0)%10|0)k=0;else{k=0,d=10;do d=d*10|0,k=k+1|0;while(!((vt>>>0)%(d>>>0)|0|0))}else k=9;if(d=((qe-_e>>2)*9|0)+-9|0,(T|32|0)==102){le=d-k|0,le=(le|0)>0?le:0,_=(_|0)<(le|0)?_:le,le=0;break}else{le=d+y-k|0,le=(le|0)>0?le:0,_=(_|0)<(le|0)?_:le,le=0;break}}else T=l,le=s&8;while(0);if(ie=_|le,P=(ie|0)!=0&1,q=(T|32|0)==102,q)ke=0,d=(y|0)>0?y:0;else{if(d=(y|0)<0?o:y,d=aa(d,((d|0)<0)<<31>>31,gn)|0,k=gn,(k-d|0)<2)do d=d+-1|0,c[d>>0]=48;while((k-d|0)<2);c[d+-1>>0]=(y>>31&2)+43,d=d+-2|0,c[d>>0]=T,ke=d,d=k-d|0}if(d=Ht+1+_+P+d|0,wi(e,32,r,d,s),ri(e,Ln,Ht),wi(e,48,r,d,s^65536),q){T=pe>>>0>It>>>0?It:pe,le=zt+9|0,P=le,q=zt+8|0,k=T;do{if(y=aa(t[k>>2]|0,0,le)|0,(k|0)==(T|0))(y|0)==(le|0)&&(c[q>>0]=48,y=q);else if(y>>>0>zt>>>0){pa(zt|0,48,y-Pn|0)|0;do y=y+-1|0;while(y>>>0>zt>>>0)}ri(e,y,P-y|0),k=k+4|0}while(k>>>0<=It>>>0);if(ie|0&&ri(e,5710,1),k>>>0>>0&(_|0)>0)for(;;){if(y=aa(t[k>>2]|0,0,le)|0,y>>>0>zt>>>0){pa(zt|0,48,y-Pn|0)|0;do y=y+-1|0;while(y>>>0>zt>>>0)}if(ri(e,y,(_|0)<9?_:9),k=k+4|0,y=_+-9|0,k>>>0>>0&(_|0)>9)_=y;else{_=y;break}}wi(e,48,_+9|0,9,0)}else{if(ie=Pe?qe:pe+4|0,(_|0)>-1){Pe=zt+9|0,le=(le|0)==0,o=Pe,P=0-Pn|0,q=zt+8|0,T=pe;do{y=aa(t[T>>2]|0,0,Pe)|0,(y|0)==(Pe|0)&&(c[q>>0]=48,y=q);do if((T|0)==(pe|0)){if(k=y+1|0,ri(e,y,1),le&(_|0)<1){y=k;break}ri(e,5710,1),y=k}else{if(y>>>0<=zt>>>0)break;pa(zt|0,48,y+P|0)|0;do y=y+-1|0;while(y>>>0>zt>>>0)}while(0);Pn=o-y|0,ri(e,y,(_|0)>(Pn|0)?Pn:_),_=_-Pn|0,T=T+4|0}while(T>>>0>>0&(_|0)>-1)}wi(e,48,_+18|0,18,0),ri(e,ke,gn-ke|0)}wi(e,32,r,d,s^8192)}else zt=(l&32|0)!=0,d=Ht+3|0,wi(e,32,r,d,s&-65537),ri(e,Ln,Ht),ri(e,n!=n|!1?zt?5686:5690:zt?5678:5682,3),wi(e,32,r,d,s^8192);while(0);return h=Dr,((d|0)<(r|0)?r:d)|0}function b8(e){e=+e;var n=0;return L[j>>3]=e,n=t[j>>2]|0,be=t[j+4>>2]|0,n|0}function gL(e,n){return e=+e,n=n|0,+ +G8(e,n)}function G8(e,n){e=+e,n=n|0;var r=0,o=0,s=0;switch(L[j>>3]=e,r=t[j>>2]|0,o=t[j+4>>2]|0,s=ch(r|0,o|0,52)|0,s&2047){case 0:{e!=0?(e=+G8(e*18446744073709552e3,n),r=(t[n>>2]|0)+-64|0):r=0,t[n>>2]=r;break}case 2047:break;default:t[n>>2]=(s&2047)+-1022,t[j>>2]=r,t[j+4>>2]=o&-2146435073|1071644672,e=+L[j>>3]}return+e}function _L(e,n,r){e=e|0,n=n|0,r=r|0;do if(e){if(n>>>0<128){c[e>>0]=n,e=1;break}if(!(t[t[(yL()|0)+188>>2]>>2]|0))if((n&-128|0)==57216){c[e>>0]=n,e=1;break}else{t[(ca()|0)>>2]=84,e=-1;break}if(n>>>0<2048){c[e>>0]=n>>>6|192,c[e+1>>0]=n&63|128,e=2;break}if(n>>>0<55296|(n&-8192|0)==57344){c[e>>0]=n>>>12|224,c[e+1>>0]=n>>>6&63|128,c[e+2>>0]=n&63|128,e=3;break}if((n+-65536|0)>>>0<1048576){c[e>>0]=n>>>18|240,c[e+1>>0]=n>>>12&63|128,c[e+2>>0]=n>>>6&63|128,c[e+3>>0]=n&63|128,e=4;break}else{t[(ca()|0)>>2]=84,e=-1;break}}else e=1;while(0);return e|0}function yL(){return b4()|0}function wL(){return b4()|0}function DL(e,n){e=e|0,n=n|0;var r=0,o=0;for(o=0;;){if((C[5712+o>>0]|0)==(e|0)){e=2;break}if(r=o+1|0,(r|0)==87){r=5800,o=87,e=5;break}else o=r}if((e|0)==2&&(o?(r=5800,e=5):r=5800),(e|0)==5)for(;;){do e=r,r=r+1|0;while((c[e>>0]|0)!=0);if(o=o+-1|0,o)e=5;else break}return EL(r,t[n+20>>2]|0)|0}function EL(e,n){return e=e|0,n=n|0,SL(e,n)|0}function SL(e,n){return e=e|0,n=n|0,n?n=CL(t[n>>2]|0,t[n+4>>2]|0,e)|0:n=0,(n|0?n:e)|0}function CL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;q=(t[e>>2]|0)+1794895138|0,l=fc(t[e+8>>2]|0,q)|0,o=fc(t[e+12>>2]|0,q)|0,s=fc(t[e+16>>2]|0,q)|0;e:do if((l>>>0>>2>>>0?(P=n-(l<<2)|0,o>>>0

>>0&s>>>0

>>0):0)?((s|o)&3|0)==0:0){for(P=o>>>2,T=s>>>2,k=0;;){if(_=l>>>1,y=k+_|0,d=y<<1,s=d+P|0,o=fc(t[e+(s<<2)>>2]|0,q)|0,s=fc(t[e+(s+1<<2)>>2]|0,q)|0,!(s>>>0>>0&o>>>0<(n-s|0)>>>0)){o=0;break e}if(c[e+(s+o)>>0]|0){o=0;break e}if(o=U8(r,e+s|0)|0,!o)break;if(o=(o|0)<0,(l|0)==1){o=0;break e}else k=o?k:y,l=o?_:l-_|0}o=d+T|0,s=fc(t[e+(o<<2)>>2]|0,q)|0,o=fc(t[e+(o+1<<2)>>2]|0,q)|0,o>>>0>>0&s>>>0<(n-o|0)>>>0?o=(c[e+(o+s)>>0]|0)==0?e+o|0:0:o=0}else o=0;while(0);return o|0}function fc(e,n){e=e|0,n=n|0;var r=0;return r=Z8(e|0)|0,((n|0)==0?e:r)|0}function TL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=r+16|0,s=t[o>>2]|0,s?l=5:xL(r)|0?o=0:(s=t[o>>2]|0,l=5);e:do if((l|0)==5){if(_=r+20|0,d=t[_>>2]|0,o=d,(s-d|0)>>>0>>0){o=dh[t[r+36>>2]&7](r,e,n)|0;break}t:do if((c[r+75>>0]|0)>-1){for(d=n;;){if(!d){l=0,s=e;break t}if(s=d+-1|0,(c[e+s>>0]|0)==10)break;d=s}if(o=dh[t[r+36>>2]&7](r,e,d)|0,o>>>0>>0)break e;l=d,s=e+d|0,n=n-d|0,o=t[_>>2]|0}else l=0,s=e;while(0);vn(o|0,s|0,n|0)|0,t[_>>2]=(t[_>>2]|0)+n,o=l+n|0}while(0);return o|0}function xL(e){e=e|0;var n=0,r=0;return n=e+74|0,r=c[n>>0]|0,c[n>>0]=r+255|r,n=t[e>>2]|0,n&8?(t[e>>2]=n|32,e=-1):(t[e+8>>2]=0,t[e+4>>2]=0,r=t[e+44>>2]|0,t[e+28>>2]=r,t[e+20>>2]=r,t[e+16>>2]=r+(t[e+48>>2]|0),e=0),e|0}function Ur(e,n){e=w(e),n=w(n);var r=0,o=0;r=V8(e)|0;do if((r&2147483647)>>>0<=2139095040){if(o=V8(n)|0,(o&2147483647)>>>0<=2139095040)if((o^r|0)<0){e=(r|0)<0?n:e;break}else{e=e>2]=e,t[j>>2]|0|0}function cc(e,n){e=w(e),n=w(n);var r=0,o=0;r=Y8(e)|0;do if((r&2147483647)>>>0<=2139095040){if(o=Y8(n)|0,(o&2147483647)>>>0<=2139095040)if((o^r|0)<0){e=(r|0)<0?e:n;break}else{e=e>2]=e,t[j>>2]|0|0}function V4(e,n){e=w(e),n=w(n);var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;l=(D[j>>2]=e,t[j>>2]|0),_=(D[j>>2]=n,t[j>>2]|0),r=l>>>23&255,d=_>>>23&255,y=l&-2147483648,s=_<<1;e:do if((s|0)!=0?!((r|0)==255|((kL(n)|0)&2147483647)>>>0>2139095040):0){if(o=l<<1,o>>>0<=s>>>0)return n=w(e*w(0)),w((o|0)==(s|0)?n:e);if(r)o=l&8388607|8388608;else{if(r=l<<9,(r|0)>-1){o=r,r=0;do r=r+-1|0,o=o<<1;while((o|0)>-1)}else r=0;o=l<<1-r}if(d)_=_&8388607|8388608;else{if(l=_<<9,(l|0)>-1){s=0;do s=s+-1|0,l=l<<1;while((l|0)>-1)}else s=0;d=s,_=_<<1-s}s=o-_|0,l=(s|0)>-1;t:do if((r|0)>(d|0)){for(;;){if(l)if(s)o=s;else break;if(o=o<<1,r=r+-1|0,s=o-_|0,l=(s|0)>-1,(r|0)<=(d|0))break t}n=w(e*w(0));break e}while(0);if(l)if(s)o=s;else{n=w(e*w(0));break}if(o>>>0<8388608)do o=o<<1,r=r+-1|0;while(o>>>0<8388608);(r|0)>0?r=o+-8388608|r<<23:r=o>>>(1-r|0),n=(t[j>>2]=r|y,w(D[j>>2]))}else k=3;while(0);return(k|0)==3&&(n=w(e*n),n=w(n/n)),w(n)}function kL(e){return e=w(e),D[j>>2]=e,t[j>>2]|0|0}function AL(e,n){return e=e|0,n=n|0,q8(t[582]|0,e,n)|0}function $n(e){e=e|0,_n()}function da(e){e=e|0}function OL(e,n){return e=e|0,n=n|0,0}function IL(e){return e=e|0,($8(e+4|0)|0)==-1?(Nl[t[(t[e>>2]|0)+8>>2]&127](e),e=1):e=0,e|0}function $8(e){e=e|0;var n=0;return n=t[e>>2]|0,t[e>>2]=n+-1,n+-1|0}function Tf(e){e=e|0,IL(e)|0&&PL(e)}function PL(e){e=e|0;var n=0;n=e+8|0,((t[n>>2]|0)!=0?($8(n)|0)!=-1:0)||Nl[t[(t[e>>2]|0)+16>>2]&127](e)}function Tt(e){e=e|0;var n=0;for(n=(e|0)==0?1:e;e=uh(n)|0,!(e|0);){if(e=FL()|0,!e){e=0;break}fD[e&0]()}return e|0}function K8(e){return e=e|0,Tt(e)|0}function Ve(e){e=e|0,sh(e)}function ML(e){e=e|0,(c[e+11>>0]|0)<0&&Ve(t[e>>2]|0)}function FL(){var e=0;return e=t[2923]|0,t[2923]=e+0,e|0}function LL(){}function fh(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,o=n-o-(r>>>0>e>>>0|0)>>>0,be=o,e-r>>>0|0|0}function Y4(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,r=e+r>>>0,be=n+o+(r>>>0>>0|0)>>>0,r|0|0}function pa(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;if(l=e+r|0,n=n&255,(r|0)>=67){for(;e&3;)c[e>>0]=n,e=e+1|0;for(o=l&-4|0,s=o-64|0,d=n|n<<8|n<<16|n<<24;(e|0)<=(s|0);)t[e>>2]=d,t[e+4>>2]=d,t[e+8>>2]=d,t[e+12>>2]=d,t[e+16>>2]=d,t[e+20>>2]=d,t[e+24>>2]=d,t[e+28>>2]=d,t[e+32>>2]=d,t[e+36>>2]=d,t[e+40>>2]=d,t[e+44>>2]=d,t[e+48>>2]=d,t[e+52>>2]=d,t[e+56>>2]=d,t[e+60>>2]=d,e=e+64|0;for(;(e|0)<(o|0);)t[e>>2]=d,e=e+4|0}for(;(e|0)<(l|0);)c[e>>0]=n,e=e+1|0;return l-r|0}function X8(e,n,r){return e=e|0,n=n|0,r=r|0,(r|0)<32?(be=n<>>32-r,e<>>r,e>>>r|(n&(1<>>r-32|0)}function vn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;if((r|0)>=8192)return wo(e|0,n|0,r|0)|0;if(l=e|0,s=e+r|0,(e&3)==(n&3)){for(;e&3;){if(!r)return l|0;c[e>>0]=c[n>>0]|0,e=e+1|0,n=n+1|0,r=r-1|0}for(r=s&-4|0,o=r-64|0;(e|0)<=(o|0);)t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2],t[e+16>>2]=t[n+16>>2],t[e+20>>2]=t[n+20>>2],t[e+24>>2]=t[n+24>>2],t[e+28>>2]=t[n+28>>2],t[e+32>>2]=t[n+32>>2],t[e+36>>2]=t[n+36>>2],t[e+40>>2]=t[n+40>>2],t[e+44>>2]=t[n+44>>2],t[e+48>>2]=t[n+48>>2],t[e+52>>2]=t[n+52>>2],t[e+56>>2]=t[n+56>>2],t[e+60>>2]=t[n+60>>2],e=e+64|0,n=n+64|0;for(;(e|0)<(r|0);)t[e>>2]=t[n>>2],e=e+4|0,n=n+4|0}else for(r=s-4|0;(e|0)<(r|0);)c[e>>0]=c[n>>0]|0,c[e+1>>0]=c[n+1>>0]|0,c[e+2>>0]=c[n+2>>0]|0,c[e+3>>0]=c[n+3>>0]|0,e=e+4|0,n=n+4|0;for(;(e|0)<(s|0);)c[e>>0]=c[n>>0]|0,e=e+1|0,n=n+1|0;return l|0}function J8(e){e=e|0;var n=0;return n=c[ce+(e&255)>>0]|0,(n|0)<8?n|0:(n=c[ce+(e>>8&255)>>0]|0,(n|0)<8?n+8|0:(n=c[ce+(e>>16&255)>>0]|0,(n|0)<8?n+16|0:(c[ce+(e>>>24)>>0]|0)+24|0))}function Q8(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0;if(T=e,y=n,k=y,d=r,q=o,_=q,!k)return l=(s|0)!=0,_?l?(t[s>>2]=e|0,t[s+4>>2]=n&0,q=0,s=0,be=q,s|0):(q=0,s=0,be=q,s|0):(l&&(t[s>>2]=(T>>>0)%(d>>>0),t[s+4>>2]=0),q=0,s=(T>>>0)/(d>>>0)>>>0,be=q,s|0);l=(_|0)==0;do if(d){if(!l){if(l=(cr(_|0)|0)-(cr(k|0)|0)|0,l>>>0<=31){P=l+1|0,_=31-l|0,n=l-31>>31,d=P,e=T>>>(P>>>0)&n|k<<_,n=k>>>(P>>>0)&n,l=0,_=T<<_;break}return s?(t[s>>2]=e|0,t[s+4>>2]=y|n&0,q=0,s=0,be=q,s|0):(q=0,s=0,be=q,s|0)}if(l=d-1|0,l&d|0){_=(cr(d|0)|0)+33-(cr(k|0)|0)|0,le=64-_|0,P=32-_|0,y=P>>31,we=_-32|0,n=we>>31,d=_,e=P-1>>31&k>>>(we>>>0)|(k<>>(_>>>0))&n,n=n&k>>>(_>>>0),l=T<>>(we>>>0))&y|T<>31;break}return s|0&&(t[s>>2]=l&T,t[s+4>>2]=0),(d|0)==1?(we=y|n&0,le=e|0|0,be=we,le|0):(le=J8(d|0)|0,we=k>>>(le>>>0)|0,le=k<<32-le|T>>>(le>>>0)|0,be=we,le|0)}else{if(l)return s|0&&(t[s>>2]=(k>>>0)%(d>>>0),t[s+4>>2]=0),we=0,le=(k>>>0)/(d>>>0)>>>0,be=we,le|0;if(!T)return s|0&&(t[s>>2]=0,t[s+4>>2]=(k>>>0)%(_>>>0)),we=0,le=(k>>>0)/(_>>>0)>>>0,be=we,le|0;if(l=_-1|0,!(l&_))return s|0&&(t[s>>2]=e|0,t[s+4>>2]=l&k|n&0),we=0,le=k>>>((J8(_|0)|0)>>>0),be=we,le|0;if(l=(cr(_|0)|0)-(cr(k|0)|0)|0,l>>>0<=30){n=l+1|0,_=31-l|0,d=n,e=k<<_|T>>>(n>>>0),n=k>>>(n>>>0),l=0,_=T<<_;break}return s?(t[s>>2]=e|0,t[s+4>>2]=y|n&0,we=0,le=0,be=we,le|0):(we=0,le=0,be=we,le|0)}while(0);if(!d)k=_,y=0,_=0;else{P=r|0|0,T=q|o&0,k=Y4(P|0,T|0,-1,-1)|0,r=be,y=_,_=0;do o=y,y=l>>>31|y<<1,l=_|l<<1,o=e<<1|o>>>31|0,q=e>>>31|n<<1|0,fh(k|0,r|0,o|0,q|0)|0,le=be,we=le>>31|((le|0)<0?-1:0)<<1,_=we&1,e=fh(o|0,q|0,we&P|0,(((le|0)<0?-1:0)>>31|((le|0)<0?-1:0)<<1)&T|0)|0,n=be,d=d-1|0;while((d|0)!=0);k=y,y=0}return d=0,s|0&&(t[s>>2]=e,t[s+4>>2]=n),we=(l|0)>>>31|(k|d)<<1|(d<<1|l>>>31)&0|y,le=(l<<1|0>>>31)&-2|_,be=we,le|0}function $4(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,Q8(e,n,r,o,0)|0}function xf(e){e=e|0;var n=0,r=0;return r=e+15&-16|0,n=t[N>>2]|0,e=n+r|0,(r|0)>0&(e|0)<(n|0)|(e|0)<0?(vr()|0,Os(12),-1):(t[N>>2]=e,((e|0)>(Xn()|0)?(Bn()|0)==0:0)?(t[N>>2]=n,Os(12),-1):n|0)}function Y1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;if((n|0)<(e|0)&(e|0)<(n+r|0)){for(o=e,n=n+r|0,e=e+r|0;(r|0)>0;)e=e-1|0,n=n-1|0,r=r-1|0,c[e>>0]=c[n>>0]|0;e=o}else vn(e,n,r)|0;return e|0}function K4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;return l=h,h=h+16|0,s=l|0,Q8(e,n,r,o,s)|0,h=l,be=t[s+4>>2]|0,t[s>>2]|0|0}function Z8(e){return e=e|0,(e&255)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>>24|0}function RL(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,eD[e&1](n|0,r|0,o|0,s|0,l|0)}function NL(e,n,r){e=e|0,n=n|0,r=w(r),tD[e&1](n|0,w(r))}function BL(e,n,r){e=e|0,n=n|0,r=+r,nD[e&31](n|0,+r)}function jL(e,n,r,o){return e=e|0,n=n|0,r=w(r),o=w(o),w(rD[e&0](n|0,w(r),w(o)))}function UL(e,n){e=e|0,n=n|0,Nl[e&127](n|0)}function qL(e,n,r){e=e|0,n=n|0,r=r|0,Bl[e&31](n|0,r|0)}function zL(e,n){return e=e|0,n=n|0,dc[e&31](n|0)|0}function WL(e,n,r,o,s){e=e|0,n=n|0,r=+r,o=+o,s=s|0,iD[e&1](n|0,+r,+o,s|0)}function HL(e,n,r,o){e=e|0,n=n|0,r=+r,o=+o,CR[e&1](n|0,+r,+o)}function bL(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,dh[e&7](n|0,r|0,o|0)|0}function VL(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,+TR[e&1](n|0,r|0,o|0)}function YL(e,n){return e=e|0,n=n|0,+oD[e&15](n|0)}function $L(e,n,r){return e=e|0,n=n|0,r=+r,xR[e&1](n|0,+r)|0}function KL(e,n,r){return e=e|0,n=n|0,r=r|0,J4[e&15](n|0,r|0)|0}function XL(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=+o,s=+s,l=l|0,kR[e&1](n|0,r|0,+o,+s,l|0)}function JL(e,n,r,o,s,l,d){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0,AR[e&1](n|0,r|0,o|0,s|0,l|0,d|0)}function QL(e,n,r){return e=e|0,n=n|0,r=r|0,+uD[e&7](n|0,r|0)}function ZL(e){return e=e|0,ph[e&7]()|0}function eR(e,n,r,o,s,l){return e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,sD[e&1](n|0,r|0,o|0,s|0,l|0)|0}function tR(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=+s,OR[e&1](n|0,r|0,o|0,+s)}function nR(e,n,r,o,s,l,d){e=e|0,n=n|0,r=r|0,o=w(o),s=s|0,l=w(l),d=d|0,lD[e&1](n|0,r|0,w(o),s|0,w(l),d|0)}function rR(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,X1[e&15](n|0,r|0,o|0)}function iR(e){e=e|0,fD[e&0]()}function oR(e,n,r,o){e=e|0,n=n|0,r=r|0,o=+o,cD[e&15](n|0,r|0,+o)}function uR(e,n,r){return e=e|0,n=+n,r=+r,IR[e&1](+n,+r)|0}function sR(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,Q4[e&15](n|0,r|0,o|0,s|0)}function lR(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,pt(0)}function fR(e,n){e=e|0,n=w(n),pt(1)}function Lo(e,n){e=e|0,n=+n,pt(2)}function cR(e,n,r){return e=e|0,n=w(n),r=w(r),pt(3),tt}function tn(e){e=e|0,pt(4)}function $1(e,n){e=e|0,n=n|0,pt(5)}function tu(e){return e=e|0,pt(6),0}function aR(e,n,r,o){e=e|0,n=+n,r=+r,o=o|0,pt(7)}function dR(e,n,r){e=e|0,n=+n,r=+r,pt(8)}function pR(e,n,r){return e=e|0,n=n|0,r=r|0,pt(9),0}function hR(e,n,r){return e=e|0,n=n|0,r=r|0,pt(10),0}function ac(e){return e=e|0,pt(11),0}function mR(e,n){return e=e|0,n=+n,pt(12),0}function K1(e,n){return e=e|0,n=n|0,pt(13),0}function vR(e,n,r,o,s){e=e|0,n=n|0,r=+r,o=+o,s=s|0,pt(14)}function gR(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,pt(15)}function X4(e,n){return e=e|0,n=n|0,pt(16),0}function _R(){return pt(17),0}function yR(e,n,r,o,s){return e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,pt(18),0}function wR(e,n,r,o){e=e|0,n=n|0,r=r|0,o=+o,pt(19)}function DR(e,n,r,o,s,l){e=e|0,n=n|0,r=w(r),o=o|0,s=w(s),l=l|0,pt(20)}function ah(e,n,r){e=e|0,n=n|0,r=r|0,pt(21)}function ER(){pt(22)}function ha(e,n,r){e=e|0,n=n|0,r=+r,pt(23)}function SR(e,n){return e=+e,n=+n,pt(24),0}function ma(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,pt(25)}var eD=[lR,_I],tD=[fR,x0],nD=[Lo,Kf,Tl,xl,hf,xo,mf,Wa,Hs,mi,Xf,Rc,Jf,ao,$o,kl,Nc,Al,vf,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo],rD=[cR],Nl=[tn,da,Km,Xm,es,a_,d_,p_,YA,$A,KA,oI,uI,sI,kF,AF,OF,Sn,Oc,pf,ti,vi,Nm,Uc,r1,Hd,Pl,mv,Av,Kc,Jc,yp,Eg,na,Ug,Yg,u_,k_,q_,J_,a4,Ct,w9,U9,ex,hx,Ix,_0,s7,S7,W7,uk,Dk,Wk,Qk,tA,_A,DA,jA,JA,eO,gO,RO,d1,vP,YP,lM,SM,GM,uF,gF,wF,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn],Bl=[$1,ja,Ua,$f,gu,co,qa,Ws,za,Mc,Fc,Lc,po,Ce,ze,Et,on,sr,mn,Zf,gd,xd,H9,rx,ck,yP,HO,C8,$1,$1,$1,$1],dc=[tu,iL,Ba,m,b,ee,Ye,Ze,ut,In,jr,gi,Pm,Ha,Ya,Fx,Tk,wO,SP,Qo,tu,tu,tu,tu,tu,tu,tu,tu,tu,tu,tu,tu],iD=[aR,Sd],CR=[dR,zA],dh=[pR,j8,oL,lL,Gv,P_,a7,kM],TR=[hR,Op],oD=[ac,_i,Re,pr,Cd,ho,bs,$a,Td,qc,ac,ac,ac,ac,ac,ac],xR=[mR,Kk],J4=[K1,OL,vd,Vc,_v,ig,pg,f_,H_,_x,Xu,dM,K1,K1,K1,K1],kR=[vR,iv],AR=[gR,KM],uD=[X4,Hr,Ka,kd,Xa,Jg,X4,X4],ph=[_R,Ja,Z0,g0,oA,TA,iO,CF],sD=[yR,or],OR=[wR,m4],lD=[DR,Bc],X1=[ah,S,A0,Vn,ni,Mv,Tg,dn,C9,fo,zI,JP,cF,ah,ah,ah],fD=[ER],cD=[ha,Ic,vu,Pc,Qu,Qf,k0,v,W1,k7,Gk,ha,ha,ha,ha,ha],IR=[SR,GA],Q4=[ma,Fg,zx,V7,Lk,aA,PA,aO,qO,OP,RF,ma,ma,ma,ma,ma];return{_llvm_bswap_i32:Z8,dynCall_idd:uR,dynCall_i:ZL,_i64Subtract:fh,___udivdi3:$4,dynCall_vif:NL,setThrew:vl,dynCall_viii:rR,_bitshift64Lshr:ch,_bitshift64Shl:X8,dynCall_vi:UL,dynCall_viiddi:XL,dynCall_diii:VL,dynCall_iii:KL,_memset:pa,_sbrk:xf,_memcpy:vn,__GLOBAL__sub_I_Yoga_cpp:t0,dynCall_vii:qL,___uremdi3:K4,dynCall_vid:BL,stackAlloc:zi,_nbind_init:VF,getTempRet0:fu,dynCall_di:YL,dynCall_iid:$L,setTempRet0:gl,_i64Add:Y4,dynCall_fiff:jL,dynCall_iiii:bL,_emscripten_get_global_libc:rL,dynCall_viid:oR,dynCall_viiid:tR,dynCall_viififi:nR,dynCall_ii:zL,__GLOBAL__sub_I_Binding_cc:lP,dynCall_viiii:sR,dynCall_iiiiii:eR,stackSave:lu,dynCall_viiiii:RL,__GLOBAL__sub_I_nbind_cc:Gs,dynCall_vidd:HL,_free:sh,runPostSets:LL,dynCall_viiiiii:JL,establishStackSpace:O0,_memmove:Y1,stackRestore:Ho,_malloc:uh,__GLOBAL__sub_I_common_cc:AO,dynCall_viddi:WL,dynCall_dii:QL,dynCall_v:iR}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(i){this.name="ExitStatus",this.message="Program terminated with exit("+i+")",this.status=i}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function i(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=i)},Module.callMain=Module.callMain=function(u){u=u||[],ensureInitRuntime();var f=u.length+1;function c(){for(var x=0;x<4-1;x++)g.push(0)}var g=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];c();for(var t=0;t0||(preRun(),runDependencies>0)||Module.calledRun)return;function u(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(i),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),u()},1)):u()}Module.run=Module.run=run;function exit(i,u){u&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=i,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(i)),ENVIRONMENT_IS_NODE&&process.exit(i),Module.quit(i,new ExitStatus(i)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(i){Module.onAbort&&Module.onAbort(i),i!==void 0?(Module.print(i),Module.printErr(i),i=JSON.stringify(i)):i="",ABORT=!0,EXITSTATUS=1;var u=` -If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,f="abort("+i+") at "+stackTrace()+u;throw abortDecorators&&abortDecorators.forEach(function(c){f=c(f,i)}),f}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var hc=Me((hb,vE)=>{"use strict";var wN=hE(),DN=mE(),Py=!1,My=null;DN({},function(i,u){if(!Py){if(Py=!0,i)throw i;My=u}});if(!Py)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");vE.exports=wN(My.bind,My.lib)});var _E=Me((mb,gE)=>{"use strict";gE.exports=({onlyFirst:i=!1}={})=>{let u=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(u,i?void 0:"g")}});var Fy=Me((vb,yE)=>{"use strict";var EN=_E();yE.exports=i=>typeof i=="string"?i.replace(EN(),""):i});var Ry=Me((gb,Ly)=>{"use strict";var wE=i=>Number.isNaN(i)?!1:i>=4352&&(i<=4447||i===9001||i===9002||11904<=i&&i<=12871&&i!==12351||12880<=i&&i<=19903||19968<=i&&i<=42182||43360<=i&&i<=43388||44032<=i&&i<=55203||63744<=i&&i<=64255||65040<=i&&i<=65049||65072<=i&&i<=65131||65281<=i&&i<=65376||65504<=i&&i<=65510||110592<=i&&i<=110593||127488<=i&&i<=127569||131072<=i&&i<=262141);Ly.exports=wE;Ly.exports.default=wE});var EE=Me((_b,DE)=>{"use strict";DE.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var Mh=Me((yb,Ny)=>{"use strict";var SN=Fy(),CN=Ry(),TN=EE(),SE=i=>{if(i=i.replace(TN()," "),typeof i!="string"||i.length===0)return 0;i=SN(i);let u=0;for(let f=0;f=127&&c<=159||c>=768&&c<=879||(c>65535&&f++,u+=CN(c)?2:1)}return u};Ny.exports=SE;Ny.exports.default=SE});var jy=Me((wb,By)=>{"use strict";var xN=Mh(),CE=i=>{let u=0;for(let f of i.split(` -`))u=Math.max(u,xN(f));return u};By.exports=CE;By.exports.default=CE});var TE=Me(a2=>{"use strict";var kN=a2&&a2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(a2,"__esModule",{value:!0});var AN=kN(jy()),Uy={};a2.default=i=>{if(i.length===0)return{width:0,height:0};if(Uy[i])return Uy[i];let u=AN.default(i),f=i.split(` -`).length;return Uy[i]={width:u,height:f},{width:u,height:f}}});var xE=Me(d2=>{"use strict";var ON=d2&&d2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(d2,"__esModule",{value:!0});var hr=ON(hc()),IN=(i,u)=>{"position"in u&&i.setPositionType(u.position==="absolute"?hr.default.POSITION_TYPE_ABSOLUTE:hr.default.POSITION_TYPE_RELATIVE)},PN=(i,u)=>{"marginLeft"in u&&i.setMargin(hr.default.EDGE_START,u.marginLeft||0),"marginRight"in u&&i.setMargin(hr.default.EDGE_END,u.marginRight||0),"marginTop"in u&&i.setMargin(hr.default.EDGE_TOP,u.marginTop||0),"marginBottom"in u&&i.setMargin(hr.default.EDGE_BOTTOM,u.marginBottom||0)},MN=(i,u)=>{"paddingLeft"in u&&i.setPadding(hr.default.EDGE_LEFT,u.paddingLeft||0),"paddingRight"in u&&i.setPadding(hr.default.EDGE_RIGHT,u.paddingRight||0),"paddingTop"in u&&i.setPadding(hr.default.EDGE_TOP,u.paddingTop||0),"paddingBottom"in u&&i.setPadding(hr.default.EDGE_BOTTOM,u.paddingBottom||0)},FN=(i,u)=>{var f;"flexGrow"in u&&i.setFlexGrow((f=u.flexGrow)!==null&&f!==void 0?f:0),"flexShrink"in u&&i.setFlexShrink(typeof u.flexShrink=="number"?u.flexShrink:1),"flexDirection"in u&&(u.flexDirection==="row"&&i.setFlexDirection(hr.default.FLEX_DIRECTION_ROW),u.flexDirection==="row-reverse"&&i.setFlexDirection(hr.default.FLEX_DIRECTION_ROW_REVERSE),u.flexDirection==="column"&&i.setFlexDirection(hr.default.FLEX_DIRECTION_COLUMN),u.flexDirection==="column-reverse"&&i.setFlexDirection(hr.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in u&&(typeof u.flexBasis=="number"?i.setFlexBasis(u.flexBasis):typeof u.flexBasis=="string"?i.setFlexBasisPercent(Number.parseInt(u.flexBasis,10)):i.setFlexBasis(NaN)),"alignItems"in u&&((u.alignItems==="stretch"||!u.alignItems)&&i.setAlignItems(hr.default.ALIGN_STRETCH),u.alignItems==="flex-start"&&i.setAlignItems(hr.default.ALIGN_FLEX_START),u.alignItems==="center"&&i.setAlignItems(hr.default.ALIGN_CENTER),u.alignItems==="flex-end"&&i.setAlignItems(hr.default.ALIGN_FLEX_END)),"alignSelf"in u&&((u.alignSelf==="auto"||!u.alignSelf)&&i.setAlignSelf(hr.default.ALIGN_AUTO),u.alignSelf==="flex-start"&&i.setAlignSelf(hr.default.ALIGN_FLEX_START),u.alignSelf==="center"&&i.setAlignSelf(hr.default.ALIGN_CENTER),u.alignSelf==="flex-end"&&i.setAlignSelf(hr.default.ALIGN_FLEX_END)),"justifyContent"in u&&((u.justifyContent==="flex-start"||!u.justifyContent)&&i.setJustifyContent(hr.default.JUSTIFY_FLEX_START),u.justifyContent==="center"&&i.setJustifyContent(hr.default.JUSTIFY_CENTER),u.justifyContent==="flex-end"&&i.setJustifyContent(hr.default.JUSTIFY_FLEX_END),u.justifyContent==="space-between"&&i.setJustifyContent(hr.default.JUSTIFY_SPACE_BETWEEN),u.justifyContent==="space-around"&&i.setJustifyContent(hr.default.JUSTIFY_SPACE_AROUND))},LN=(i,u)=>{var f,c;"width"in u&&(typeof u.width=="number"?i.setWidth(u.width):typeof u.width=="string"?i.setWidthPercent(Number.parseInt(u.width,10)):i.setWidthAuto()),"height"in u&&(typeof u.height=="number"?i.setHeight(u.height):typeof u.height=="string"?i.setHeightPercent(Number.parseInt(u.height,10)):i.setHeightAuto()),"minWidth"in u&&(typeof u.minWidth=="string"?i.setMinWidthPercent(Number.parseInt(u.minWidth,10)):i.setMinWidth((f=u.minWidth)!==null&&f!==void 0?f:0)),"minHeight"in u&&(typeof u.minHeight=="string"?i.setMinHeightPercent(Number.parseInt(u.minHeight,10)):i.setMinHeight((c=u.minHeight)!==null&&c!==void 0?c:0))},RN=(i,u)=>{"display"in u&&i.setDisplay(u.display==="flex"?hr.default.DISPLAY_FLEX:hr.default.DISPLAY_NONE)},NN=(i,u)=>{if("borderStyle"in u){let f=typeof u.borderStyle=="string"?1:0;i.setBorder(hr.default.EDGE_TOP,f),i.setBorder(hr.default.EDGE_BOTTOM,f),i.setBorder(hr.default.EDGE_LEFT,f),i.setBorder(hr.default.EDGE_RIGHT,f)}};d2.default=(i,u={})=>{IN(i,u),PN(i,u),MN(i,u),FN(i,u),LN(i,u),RN(i,u),NN(i,u)}});var AE=Me((Sb,kE)=>{"use strict";kE.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var qy=Me((Cb,OE)=>{var p2=AE(),IE={};for(let i of Object.keys(p2))IE[p2[i]]=i;var Xt={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};OE.exports=Xt;for(let i of Object.keys(Xt)){if(!("channels"in Xt[i]))throw new Error("missing channels property: "+i);if(!("labels"in Xt[i]))throw new Error("missing channel labels property: "+i);if(Xt[i].labels.length!==Xt[i].channels)throw new Error("channel and label counts mismatch: "+i);let{channels:u,labels:f}=Xt[i];delete Xt[i].channels,delete Xt[i].labels,Object.defineProperty(Xt[i],"channels",{value:u}),Object.defineProperty(Xt[i],"labels",{value:f})}Xt.rgb.hsl=function(i){let u=i[0]/255,f=i[1]/255,c=i[2]/255,g=Math.min(u,f,c),t=Math.max(u,f,c),C=t-g,A,x;t===g?A=0:u===t?A=(f-c)/C:f===t?A=2+(c-u)/C:c===t&&(A=4+(u-f)/C),A=Math.min(A*60,360),A<0&&(A+=360);let D=(g+t)/2;return t===g?x=0:D<=.5?x=C/(t+g):x=C/(2-t-g),[A,x*100,D*100]};Xt.rgb.hsv=function(i){let u,f,c,g,t,C=i[0]/255,A=i[1]/255,x=i[2]/255,D=Math.max(C,A,x),L=D-Math.min(C,A,x),N=function(j){return(D-j)/6/L+1/2};return L===0?(g=0,t=0):(t=L/D,u=N(C),f=N(A),c=N(x),C===D?g=c-f:A===D?g=1/3+u-c:x===D&&(g=2/3+f-u),g<0?g+=1:g>1&&(g-=1)),[g*360,t*100,D*100]};Xt.rgb.hwb=function(i){let u=i[0],f=i[1],c=i[2],g=Xt.rgb.hsl(i)[0],t=1/255*Math.min(u,Math.min(f,c));return c=1-1/255*Math.max(u,Math.max(f,c)),[g,t*100,c*100]};Xt.rgb.cmyk=function(i){let u=i[0]/255,f=i[1]/255,c=i[2]/255,g=Math.min(1-u,1-f,1-c),t=(1-u-g)/(1-g)||0,C=(1-f-g)/(1-g)||0,A=(1-c-g)/(1-g)||0;return[t*100,C*100,A*100,g*100]};function BN(i,u){return(i[0]-u[0])**2+(i[1]-u[1])**2+(i[2]-u[2])**2}Xt.rgb.keyword=function(i){let u=IE[i];if(u)return u;let f=Infinity,c;for(let g of Object.keys(p2)){let t=p2[g],C=BN(i,t);C.04045?((u+.055)/1.055)**2.4:u/12.92,f=f>.04045?((f+.055)/1.055)**2.4:f/12.92,c=c>.04045?((c+.055)/1.055)**2.4:c/12.92;let g=u*.4124+f*.3576+c*.1805,t=u*.2126+f*.7152+c*.0722,C=u*.0193+f*.1192+c*.9505;return[g*100,t*100,C*100]};Xt.rgb.lab=function(i){let u=Xt.rgb.xyz(i),f=u[0],c=u[1],g=u[2];f/=95.047,c/=100,g/=108.883,f=f>.008856?f**(1/3):7.787*f+16/116,c=c>.008856?c**(1/3):7.787*c+16/116,g=g>.008856?g**(1/3):7.787*g+16/116;let t=116*c-16,C=500*(f-c),A=200*(c-g);return[t,C,A]};Xt.hsl.rgb=function(i){let u=i[0]/360,f=i[1]/100,c=i[2]/100,g,t,C;if(f===0)return C=c*255,[C,C,C];c<.5?g=c*(1+f):g=c+f-c*f;let A=2*c-g,x=[0,0,0];for(let D=0;D<3;D++)t=u+1/3*-(D-1),t<0&&t++,t>1&&t--,6*t<1?C=A+(g-A)*6*t:2*t<1?C=g:3*t<2?C=A+(g-A)*(2/3-t)*6:C=A,x[D]=C*255;return x};Xt.hsl.hsv=function(i){let u=i[0],f=i[1]/100,c=i[2]/100,g=f,t=Math.max(c,.01);c*=2,f*=c<=1?c:2-c,g*=t<=1?t:2-t;let C=(c+f)/2,A=c===0?2*g/(t+g):2*f/(c+f);return[u,A*100,C*100]};Xt.hsv.rgb=function(i){let u=i[0]/60,f=i[1]/100,c=i[2]/100,g=Math.floor(u)%6,t=u-Math.floor(u),C=255*c*(1-f),A=255*c*(1-f*t),x=255*c*(1-f*(1-t));switch(c*=255,g){case 0:return[c,x,C];case 1:return[A,c,C];case 2:return[C,c,x];case 3:return[C,A,c];case 4:return[x,C,c];case 5:return[c,C,A]}};Xt.hsv.hsl=function(i){let u=i[0],f=i[1]/100,c=i[2]/100,g=Math.max(c,.01),t,C;C=(2-f)*c;let A=(2-f)*g;return t=f*g,t/=A<=1?A:2-A,t=t||0,C/=2,[u,t*100,C*100]};Xt.hwb.rgb=function(i){let u=i[0]/360,f=i[1]/100,c=i[2]/100,g=f+c,t;g>1&&(f/=g,c/=g);let C=Math.floor(6*u),A=1-c;t=6*u-C,(C&1)!=0&&(t=1-t);let x=f+t*(A-f),D,L,N;switch(C){default:case 6:case 0:D=A,L=x,N=f;break;case 1:D=x,L=A,N=f;break;case 2:D=f,L=A,N=x;break;case 3:D=f,L=x,N=A;break;case 4:D=x,L=f,N=A;break;case 5:D=A,L=f,N=x;break}return[D*255,L*255,N*255]};Xt.cmyk.rgb=function(i){let u=i[0]/100,f=i[1]/100,c=i[2]/100,g=i[3]/100,t=1-Math.min(1,u*(1-g)+g),C=1-Math.min(1,f*(1-g)+g),A=1-Math.min(1,c*(1-g)+g);return[t*255,C*255,A*255]};Xt.xyz.rgb=function(i){let u=i[0]/100,f=i[1]/100,c=i[2]/100,g,t,C;return g=u*3.2406+f*-1.5372+c*-.4986,t=u*-.9689+f*1.8758+c*.0415,C=u*.0557+f*-.204+c*1.057,g=g>.0031308?1.055*g**(1/2.4)-.055:g*12.92,t=t>.0031308?1.055*t**(1/2.4)-.055:t*12.92,C=C>.0031308?1.055*C**(1/2.4)-.055:C*12.92,g=Math.min(Math.max(0,g),1),t=Math.min(Math.max(0,t),1),C=Math.min(Math.max(0,C),1),[g*255,t*255,C*255]};Xt.xyz.lab=function(i){let u=i[0],f=i[1],c=i[2];u/=95.047,f/=100,c/=108.883,u=u>.008856?u**(1/3):7.787*u+16/116,f=f>.008856?f**(1/3):7.787*f+16/116,c=c>.008856?c**(1/3):7.787*c+16/116;let g=116*f-16,t=500*(u-f),C=200*(f-c);return[g,t,C]};Xt.lab.xyz=function(i){let u=i[0],f=i[1],c=i[2],g,t,C;t=(u+16)/116,g=f/500+t,C=t-c/200;let A=t**3,x=g**3,D=C**3;return t=A>.008856?A:(t-16/116)/7.787,g=x>.008856?x:(g-16/116)/7.787,C=D>.008856?D:(C-16/116)/7.787,g*=95.047,t*=100,C*=108.883,[g,t,C]};Xt.lab.lch=function(i){let u=i[0],f=i[1],c=i[2],g;g=Math.atan2(c,f)*360/2/Math.PI,g<0&&(g+=360);let C=Math.sqrt(f*f+c*c);return[u,C,g]};Xt.lch.lab=function(i){let u=i[0],f=i[1],g=i[2]/360*2*Math.PI,t=f*Math.cos(g),C=f*Math.sin(g);return[u,t,C]};Xt.rgb.ansi16=function(i,u=null){let[f,c,g]=i,t=u===null?Xt.rgb.hsv(i)[2]:u;if(t=Math.round(t/50),t===0)return 30;let C=30+(Math.round(g/255)<<2|Math.round(c/255)<<1|Math.round(f/255));return t===2&&(C+=60),C};Xt.hsv.ansi16=function(i){return Xt.rgb.ansi16(Xt.hsv.rgb(i),i[2])};Xt.rgb.ansi256=function(i){let u=i[0],f=i[1],c=i[2];return u===f&&f===c?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(f/255*5)+Math.round(c/255*5)};Xt.ansi16.rgb=function(i){let u=i%10;if(u===0||u===7)return i>50&&(u+=3.5),u=u/10.5*255,[u,u,u];let f=(~~(i>50)+1)*.5,c=(u&1)*f*255,g=(u>>1&1)*f*255,t=(u>>2&1)*f*255;return[c,g,t]};Xt.ansi256.rgb=function(i){if(i>=232){let t=(i-232)*10+8;return[t,t,t]}i-=16;let u,f=Math.floor(i/36)/5*255,c=Math.floor((u=i%36)/6)/5*255,g=u%6/5*255;return[f,c,g]};Xt.rgb.hex=function(i){let f=(((Math.round(i[0])&255)<<16)+((Math.round(i[1])&255)<<8)+(Math.round(i[2])&255)).toString(16).toUpperCase();return"000000".substring(f.length)+f};Xt.hex.rgb=function(i){let u=i.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!u)return[0,0,0];let f=u[0];u[0].length===3&&(f=f.split("").map(A=>A+A).join(""));let c=parseInt(f,16),g=c>>16&255,t=c>>8&255,C=c&255;return[g,t,C]};Xt.rgb.hcg=function(i){let u=i[0]/255,f=i[1]/255,c=i[2]/255,g=Math.max(Math.max(u,f),c),t=Math.min(Math.min(u,f),c),C=g-t,A,x;return C<1?A=t/(1-C):A=0,C<=0?x=0:g===u?x=(f-c)/C%6:g===f?x=2+(c-u)/C:x=4+(u-f)/C,x/=6,x%=1,[x*360,C*100,A*100]};Xt.hsl.hcg=function(i){let u=i[1]/100,f=i[2]/100,c=f<.5?2*u*f:2*u*(1-f),g=0;return c<1&&(g=(f-.5*c)/(1-c)),[i[0],c*100,g*100]};Xt.hsv.hcg=function(i){let u=i[1]/100,f=i[2]/100,c=u*f,g=0;return c<1&&(g=(f-c)/(1-c)),[i[0],c*100,g*100]};Xt.hcg.rgb=function(i){let u=i[0]/360,f=i[1]/100,c=i[2]/100;if(f===0)return[c*255,c*255,c*255];let g=[0,0,0],t=u%1*6,C=t%1,A=1-C,x=0;switch(Math.floor(t)){case 0:g[0]=1,g[1]=C,g[2]=0;break;case 1:g[0]=A,g[1]=1,g[2]=0;break;case 2:g[0]=0,g[1]=1,g[2]=C;break;case 3:g[0]=0,g[1]=A,g[2]=1;break;case 4:g[0]=C,g[1]=0,g[2]=1;break;default:g[0]=1,g[1]=0,g[2]=A}return x=(1-f)*c,[(f*g[0]+x)*255,(f*g[1]+x)*255,(f*g[2]+x)*255]};Xt.hcg.hsv=function(i){let u=i[1]/100,f=i[2]/100,c=u+f*(1-u),g=0;return c>0&&(g=u/c),[i[0],g*100,c*100]};Xt.hcg.hsl=function(i){let u=i[1]/100,c=i[2]/100*(1-u)+.5*u,g=0;return c>0&&c<.5?g=u/(2*c):c>=.5&&c<1&&(g=u/(2*(1-c))),[i[0],g*100,c*100]};Xt.hcg.hwb=function(i){let u=i[1]/100,f=i[2]/100,c=u+f*(1-u);return[i[0],(c-u)*100,(1-c)*100]};Xt.hwb.hcg=function(i){let u=i[1]/100,f=i[2]/100,c=1-f,g=c-u,t=0;return g<1&&(t=(c-g)/(1-g)),[i[0],g*100,t*100]};Xt.apple.rgb=function(i){return[i[0]/65535*255,i[1]/65535*255,i[2]/65535*255]};Xt.rgb.apple=function(i){return[i[0]/255*65535,i[1]/255*65535,i[2]/255*65535]};Xt.gray.rgb=function(i){return[i[0]/100*255,i[0]/100*255,i[0]/100*255]};Xt.gray.hsl=function(i){return[0,0,i[0]]};Xt.gray.hsv=Xt.gray.hsl;Xt.gray.hwb=function(i){return[0,100,i[0]]};Xt.gray.cmyk=function(i){return[0,0,0,i[0]]};Xt.gray.lab=function(i){return[i[0],0,0]};Xt.gray.hex=function(i){let u=Math.round(i[0]/100*255)&255,c=((u<<16)+(u<<8)+u).toString(16).toUpperCase();return"000000".substring(c.length)+c};Xt.rgb.gray=function(i){return[(i[0]+i[1]+i[2])/3/255*100]}});var ME=Me((Tb,PE)=>{var Fh=qy();function jN(){let i={},u=Object.keys(Fh);for(let f=u.length,c=0;c{var zy=qy(),WN=ME(),Ca={},HN=Object.keys(zy);function bN(i){let u=function(...f){let c=f[0];return c==null?c:(c.length>1&&(f=c),i(f))};return"conversion"in i&&(u.conversion=i.conversion),u}function GN(i){let u=function(...f){let c=f[0];if(c==null)return c;c.length>1&&(f=c);let g=i(f);if(typeof g=="object")for(let t=g.length,C=0;C{Ca[i]={},Object.defineProperty(Ca[i],"channels",{value:zy[i].channels}),Object.defineProperty(Ca[i],"labels",{value:zy[i].labels});let u=WN(i);Object.keys(u).forEach(c=>{let g=u[c];Ca[i][c]=GN(g),Ca[i][c].raw=bN(g)})});FE.exports=Ca});var Rh=Me((kb,RE)=>{"use strict";var NE=(i,u)=>(...f)=>`[${i(...f)+u}m`,BE=(i,u)=>(...f)=>{let c=i(...f);return`[${38+u};5;${c}m`},jE=(i,u)=>(...f)=>{let c=i(...f);return`[${38+u};2;${c[0]};${c[1]};${c[2]}m`},Lh=i=>i,UE=(i,u,f)=>[i,u,f],Ta=(i,u,f)=>{Object.defineProperty(i,u,{get:()=>{let c=f();return Object.defineProperty(i,u,{value:c,enumerable:!0,configurable:!0}),c},enumerable:!0,configurable:!0})},Wy,xa=(i,u,f,c)=>{Wy===void 0&&(Wy=LE());let g=c?10:0,t={};for(let[C,A]of Object.entries(Wy)){let x=C==="ansi16"?"ansi":C;C===u?t[x]=i(f,g):typeof A=="object"&&(t[x]=i(A[u],g))}return t};function VN(){let i=new Map,u={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};u.color.gray=u.color.blackBright,u.bgColor.bgGray=u.bgColor.bgBlackBright,u.color.grey=u.color.blackBright,u.bgColor.bgGrey=u.bgColor.bgBlackBright;for(let[f,c]of Object.entries(u)){for(let[g,t]of Object.entries(c))u[g]={open:`[${t[0]}m`,close:`[${t[1]}m`},c[g]=u[g],i.set(t[0],t[1]);Object.defineProperty(u,f,{value:c,enumerable:!1})}return Object.defineProperty(u,"codes",{value:i,enumerable:!1}),u.color.close="",u.bgColor.close="",Ta(u.color,"ansi",()=>xa(NE,"ansi16",Lh,!1)),Ta(u.color,"ansi256",()=>xa(BE,"ansi256",Lh,!1)),Ta(u.color,"ansi16m",()=>xa(jE,"rgb",UE,!1)),Ta(u.bgColor,"ansi",()=>xa(NE,"ansi16",Lh,!0)),Ta(u.bgColor,"ansi256",()=>xa(BE,"ansi256",Lh,!0)),Ta(u.bgColor,"ansi16m",()=>xa(jE,"rgb",UE,!0)),u}Object.defineProperty(RE,"exports",{enumerable:!0,get:VN})});var WE=Me((Ab,qE)=>{"use strict";var h2=Mh(),YN=Fy(),$N=Rh(),Hy=new Set(["","\x9B"]),KN=39,zE=i=>`${Hy.values().next().value}[${i}m`,XN=i=>i.split(" ").map(u=>h2(u)),by=(i,u,f)=>{let c=[...u],g=!1,t=h2(YN(i[i.length-1]));for(let[C,A]of c.entries()){let x=h2(A);if(t+x<=f?i[i.length-1]+=A:(i.push(A),t=0),Hy.has(A))g=!0;else if(g&&A==="m"){g=!1;continue}g||(t+=x,t===f&&C0&&i.length>1&&(i[i.length-2]+=i.pop())},JN=i=>{let u=i.split(" "),f=u.length;for(;f>0&&!(h2(u[f-1])>0);)f--;return f===u.length?i:u.slice(0,f).join(" ")+u.slice(f).join("")},QN=(i,u,f={})=>{if(f.trim!==!1&&i.trim()==="")return"";let c="",g="",t,C=XN(i),A=[""];for(let[x,D]of i.split(" ").entries()){f.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let L=h2(A[A.length-1]);if(x!==0&&(L>=u&&(f.wordWrap===!1||f.trim===!1)&&(A.push(""),L=0),(L>0||f.trim===!1)&&(A[A.length-1]+=" ",L++)),f.hard&&C[x]>u){let N=u-L,j=1+Math.floor((C[x]-N-1)/u);Math.floor((C[x]-1)/u)u&&L>0&&C[x]>0){if(f.wordWrap===!1&&Lu&&f.wordWrap===!1){by(A,D,u);continue}A[A.length-1]+=D}f.trim!==!1&&(A=A.map(JN)),c=A.join(` -`);for(let[x,D]of[...c].entries()){if(g+=D,Hy.has(D)){let N=parseFloat(/\d[^m]*/.exec(c.slice(x,x+4)));t=N===KN?null:N}let L=$N.codes.get(Number(t));t&&L&&(c[x+1]===` -`?g+=zE(L):D===` -`&&(g+=zE(t)))}return g};qE.exports=(i,u,f)=>String(i).normalize().replace(/\r\n/g,` -`).split(` -`).map(c=>QN(c,u,f)).join(` -`)});var GE=Me((Ob,HE)=>{"use strict";var bE="[\uD800-\uDBFF][\uDC00-\uDFFF]",ZN=i=>i&&i.exact?new RegExp(`^${bE}$`):new RegExp(bE,"g");HE.exports=ZN});var Gy=Me((Ib,VE)=>{"use strict";var eB=Ry(),tB=GE(),YE=Rh(),$E=["","\x9B"],Nh=i=>`${$E[0]}[${i}m`,KE=(i,u,f)=>{let c=[];i=[...i];for(let g of i){let t=g;g.match(";")&&(g=g.split(";")[0][0]+"0");let C=YE.codes.get(parseInt(g,10));if(C){let A=i.indexOf(C.toString());A>=0?i.splice(A,1):c.push(Nh(u?C:t))}else if(u){c.push(Nh(0));break}else c.push(Nh(t))}if(u&&(c=c.filter((g,t)=>c.indexOf(g)===t),f!==void 0)){let g=Nh(YE.codes.get(parseInt(f,10)));c=c.reduce((t,C)=>C===g?[C,...t]:[...t,C],[])}return c.join("")};VE.exports=(i,u,f)=>{let c=[...i.normalize()],g=[];f=typeof f=="number"?f:c.length;let t=!1,C,A=0,x="";for(let[D,L]of c.entries()){let N=!1;if($E.includes(L)){let j=/\d[^m]*/.exec(i.slice(D,D+18));C=j&&j.length>0?j[0]:void 0,Au&&A<=f)x+=L;else if(A===u&&!t&&C!==void 0)x=KE(g);else if(A>=f){x+=KE(g,!0,C);break}}return x}});var JE=Me((Pb,XE)=>{"use strict";var Bf=Gy(),nB=Mh();function Bh(i,u,f){if(i.charAt(u)===" ")return u;for(let c=1;c<=3;c++)if(f){if(i.charAt(u+c)===" ")return u+c}else if(i.charAt(u-c)===" ")return u-c;return u}XE.exports=(i,u,f)=>{f=dt({position:"end",preferTruncationOnSpace:!1},f);let{position:c,space:g,preferTruncationOnSpace:t}=f,C="\u2026",A=1;if(typeof i!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof i}`);if(typeof u!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof u}`);if(u<1)return"";if(u===1)return C;let x=nB(i);if(x<=u)return i;if(c==="start"){if(t){let D=Bh(i,x-u+1,!0);return C+Bf(i,D,x).trim()}return g===!0&&(C+=" ",A=2),C+Bf(i,x-u+A,x)}if(c==="middle"){g===!0&&(C=" "+C+" ",A=3);let D=Math.floor(u/2);if(t){let L=Bh(i,D),N=Bh(i,x-(u-D)+1,!0);return Bf(i,0,L)+C+Bf(i,N,x).trim()}return Bf(i,0,D)+C+Bf(i,x-(u-D)+A,x)}if(c==="end"){if(t){let D=Bh(i,u-1);return Bf(i,0,D)+C}return g===!0&&(C=" "+C,A=2),Bf(i,0,u-A)+C}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${c}`)}});var Yy=Me(m2=>{"use strict";var QE=m2&&m2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(m2,"__esModule",{value:!0});var rB=QE(WE()),iB=QE(JE()),Vy={};m2.default=(i,u,f)=>{let c=i+String(u)+String(f);if(Vy[c])return Vy[c];let g=i;if(f==="wrap"&&(g=rB.default(i,u,{trim:!1,hard:!0})),f.startsWith("truncate")){let t="end";f==="truncate-middle"&&(t="middle"),f==="truncate-start"&&(t="start"),g=iB.default(i,u,{position:t})}return Vy[c]=g,g}});var Ky=Me($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});var ZE=i=>{let u="";if(i.childNodes.length>0)for(let f of i.childNodes){let c="";f.nodeName==="#text"?c=f.nodeValue:((f.nodeName==="ink-text"||f.nodeName==="ink-virtual-text")&&(c=ZE(f)),c.length>0&&typeof f.internal_transform=="function"&&(c=f.internal_transform(c))),u+=c}return u};$y.default=ZE});var Xy=Me(Zr=>{"use strict";var v2=Zr&&Zr.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Zr,"__esModule",{value:!0});Zr.setTextNodeValue=Zr.createTextNode=Zr.setStyle=Zr.setAttribute=Zr.removeChildNode=Zr.insertBeforeNode=Zr.appendChildNode=Zr.createNode=Zr.TEXT_NAME=void 0;var oB=v2(hc()),e6=v2(TE()),uB=v2(xE()),sB=v2(Yy()),lB=v2(Ky());Zr.TEXT_NAME="#text";Zr.createNode=i=>{var u;let f={nodeName:i,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:i==="ink-virtual-text"?void 0:oB.default.Node.create()};return i==="ink-text"&&((u=f.yogaNode)===null||u===void 0||u.setMeasureFunc(fB.bind(null,f))),f};Zr.appendChildNode=(i,u)=>{var f;u.parentNode&&Zr.removeChildNode(u.parentNode,u),u.parentNode=i,i.childNodes.push(u),u.yogaNode&&((f=i.yogaNode)===null||f===void 0||f.insertChild(u.yogaNode,i.yogaNode.getChildCount())),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&jh(i)};Zr.insertBeforeNode=(i,u,f)=>{var c,g;u.parentNode&&Zr.removeChildNode(u.parentNode,u),u.parentNode=i;let t=i.childNodes.indexOf(f);if(t>=0){i.childNodes.splice(t,0,u),u.yogaNode&&((c=i.yogaNode)===null||c===void 0||c.insertChild(u.yogaNode,t));return}i.childNodes.push(u),u.yogaNode&&((g=i.yogaNode)===null||g===void 0||g.insertChild(u.yogaNode,i.yogaNode.getChildCount())),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&jh(i)};Zr.removeChildNode=(i,u)=>{var f,c;u.yogaNode&&((c=(f=u.parentNode)===null||f===void 0?void 0:f.yogaNode)===null||c===void 0||c.removeChild(u.yogaNode)),u.parentNode=null;let g=i.childNodes.indexOf(u);g>=0&&i.childNodes.splice(g,1),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&jh(i)};Zr.setAttribute=(i,u,f)=>{i.attributes[u]=f};Zr.setStyle=(i,u)=>{i.style=u,i.yogaNode&&uB.default(i.yogaNode,u)};Zr.createTextNode=i=>{let u={nodeName:"#text",nodeValue:i,yogaNode:void 0,parentNode:null,style:{}};return Zr.setTextNodeValue(u,i),u};var fB=function(i,u){var f,c;let g=i.nodeName==="#text"?i.nodeValue:lB.default(i),t=e6.default(g);if(t.width<=u||t.width>=1&&u>0&&u<1)return t;let C=(c=(f=i.style)===null||f===void 0?void 0:f.textWrap)!==null&&c!==void 0?c:"wrap",A=sB.default(g,u,C);return e6.default(A)},t6=i=>{var u;if(!(!i||!i.parentNode))return(u=i.yogaNode)!==null&&u!==void 0?u:t6(i.parentNode)},jh=i=>{let u=t6(i);u==null||u.markDirty()};Zr.setTextNodeValue=(i,u)=>{typeof u!="string"&&(u=String(u)),i.nodeValue=u,jh(i)}});var mc=Me((Rb,n6)=>{"use strict";n6.exports={BINARY_TYPES:["nodebuffer","arraybuffer","fragments"],GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),EMPTY_BUFFER:Buffer.alloc(0),NOOP:()=>{}}});var g2=Me((Nb,Jy)=>{"use strict";var{EMPTY_BUFFER:cB}=mc();function r6(i,u){if(i.length===0)return cB;if(i.length===1)return i[0];let f=Buffer.allocUnsafe(u),c=0;for(let g=0;g{"use strict";var l6=Symbol("kDone"),Qy=Symbol("kRun"),f6=class{constructor(u){this[l6]=()=>{this.pending--,this[Qy]()},this.concurrency=u||Infinity,this.jobs=[],this.pending=0}add(u){this.jobs.push(u),this[Qy]()}[Qy](){if(this.pending!==this.concurrency&&this.jobs.length){let u=this.jobs.shift();this.pending++,u(this[l6])}}};s6.exports=f6});var w2=Me((jb,a6)=>{"use strict";var _2=require("zlib"),d6=g2(),aB=c6(),{kStatusCode:p6,NOOP:dB}=mc(),pB=Buffer.from([0,0,255,255]),qh=Symbol("permessage-deflate"),Xl=Symbol("total-length"),y2=Symbol("callback"),jf=Symbol("buffers"),Zy=Symbol("error"),zh,h6=class{constructor(u,f,c){if(this._maxPayload=c|0,this._options=u||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!f,this._deflate=null,this._inflate=null,this.params=null,!zh){let g=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;zh=new aB(g)}}static get extensionName(){return"permessage-deflate"}offer(){let u={};return this._options.serverNoContextTakeover&&(u.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(u.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(u.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?u.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(u.client_max_window_bits=!0),u}accept(u){return u=this.normalizeParams(u),this.params=this._isServer?this.acceptAsServer(u):this.acceptAsClient(u),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let u=this._deflate[y2];this._deflate.close(),this._deflate=null,u&&u(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(u){let f=this._options,c=u.find(g=>!(f.serverNoContextTakeover===!1&&g.server_no_context_takeover||g.server_max_window_bits&&(f.serverMaxWindowBits===!1||typeof f.serverMaxWindowBits=="number"&&f.serverMaxWindowBits>g.server_max_window_bits)||typeof f.clientMaxWindowBits=="number"&&!g.client_max_window_bits));if(!c)throw new Error("None of the extension offers can be accepted");return f.serverNoContextTakeover&&(c.server_no_context_takeover=!0),f.clientNoContextTakeover&&(c.client_no_context_takeover=!0),typeof f.serverMaxWindowBits=="number"&&(c.server_max_window_bits=f.serverMaxWindowBits),typeof f.clientMaxWindowBits=="number"?c.client_max_window_bits=f.clientMaxWindowBits:(c.client_max_window_bits===!0||f.clientMaxWindowBits===!1)&&delete c.client_max_window_bits,c}acceptAsClient(u){let f=u[0];if(this._options.clientNoContextTakeover===!1&&f.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!f.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(f.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&f.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return f}normalizeParams(u){return u.forEach(f=>{Object.keys(f).forEach(c=>{let g=f[c];if(g.length>1)throw new Error(`Parameter "${c}" must have only a single value`);if(g=g[0],c==="client_max_window_bits"){if(g!==!0){let t=+g;if(!Number.isInteger(t)||t<8||t>15)throw new TypeError(`Invalid value for parameter "${c}": ${g}`);g=t}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${c}": ${g}`)}else if(c==="server_max_window_bits"){let t=+g;if(!Number.isInteger(t)||t<8||t>15)throw new TypeError(`Invalid value for parameter "${c}": ${g}`);g=t}else if(c==="client_no_context_takeover"||c==="server_no_context_takeover"){if(g!==!0)throw new TypeError(`Invalid value for parameter "${c}": ${g}`)}else throw new Error(`Unknown parameter "${c}"`);f[c]=g})}),u}decompress(u,f,c){zh.add(g=>{this._decompress(u,f,(t,C)=>{g(),c(t,C)})})}compress(u,f,c){zh.add(g=>{this._compress(u,f,(t,C)=>{g(),c(t,C)})})}_decompress(u,f,c){let g=this._isServer?"client":"server";if(!this._inflate){let t=`${g}_max_window_bits`,C=typeof this.params[t]!="number"?_2.Z_DEFAULT_WINDOWBITS:this.params[t];this._inflate=_2.createInflateRaw(zn(dt({},this._options.zlibInflateOptions),{windowBits:C})),this._inflate[qh]=this,this._inflate[Xl]=0,this._inflate[jf]=[],this._inflate.on("error",mB),this._inflate.on("data",m6)}this._inflate[y2]=c,this._inflate.write(u),f&&this._inflate.write(pB),this._inflate.flush(()=>{let t=this._inflate[Zy];if(t){this._inflate.close(),this._inflate=null,c(t);return}let C=d6.concat(this._inflate[jf],this._inflate[Xl]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[Xl]=0,this._inflate[jf]=[],f&&this.params[`${g}_no_context_takeover`]&&this._inflate.reset()),c(null,C)})}_compress(u,f,c){let g=this._isServer?"server":"client";if(!this._deflate){let t=`${g}_max_window_bits`,C=typeof this.params[t]!="number"?_2.Z_DEFAULT_WINDOWBITS:this.params[t];this._deflate=_2.createDeflateRaw(zn(dt({},this._options.zlibDeflateOptions),{windowBits:C})),this._deflate[Xl]=0,this._deflate[jf]=[],this._deflate.on("error",dB),this._deflate.on("data",hB)}this._deflate[y2]=c,this._deflate.write(u),this._deflate.flush(_2.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let t=d6.concat(this._deflate[jf],this._deflate[Xl]);f&&(t=t.slice(0,t.length-4)),this._deflate[y2]=null,this._deflate[Xl]=0,this._deflate[jf]=[],f&&this.params[`${g}_no_context_takeover`]&&this._deflate.reset(),c(null,t)})}};a6.exports=h6;function hB(i){this[jf].push(i),this[Xl]+=i.length}function m6(i){if(this[Xl]+=i.length,this[qh]._maxPayload<1||this[Xl]<=this[qh]._maxPayload){this[jf].push(i);return}this[Zy]=new RangeError("Max payload size exceeded"),this[Zy][p6]=1009,this.removeListener("data",m6),this.reset()}function mB(i){this[qh]._inflate=null,i[p6]=1007,this[y2](i)}});var t3=Me((Ub,e3)=>{"use strict";function v6(i){return i>=1e3&&i<=1014&&i!==1004&&i!==1005&&i!==1006||i>=3e3&&i<=4999}function g6(i){let u=i.length,f=0;for(;f=u||(i[f+1]&192)!=128||(i[f+2]&192)!=128||i[f]===224&&(i[f+1]&224)==128||i[f]===237&&(i[f+1]&224)==160)return!1;f+=3}else if((i[f]&248)==240){if(f+3>=u||(i[f+1]&192)!=128||(i[f+2]&192)!=128||(i[f+3]&192)!=128||i[f]===240&&(i[f+1]&240)==128||i[f]===244&&i[f+1]>143||i[f]>244)return!1;f+=4}else return!1;return!0}try{let i=require("utf-8-validate");typeof i=="object"&&(i=i.Validation.isValidUTF8),e3.exports={isValidStatusCode:v6,isValidUTF8(u){return u.length<150?g6(u):i(u)}}}catch(i){e3.exports={isValidStatusCode:v6,isValidUTF8:g6}}});var i3=Me((qb,_6)=>{"use strict";var{Writable:vB}=require("stream"),y6=w2(),{BINARY_TYPES:gB,EMPTY_BUFFER:_B,kStatusCode:yB,kWebSocket:wB}=mc(),{concat:n3,toArrayBuffer:DB,unmask:EB}=g2(),{isValidStatusCode:SB,isValidUTF8:w6}=t3(),D2=0,D6=1,E6=2,S6=3,r3=4,CB=5,C6=class extends vB{constructor(u,f,c,g){super();this._binaryType=u||gB[0],this[wB]=void 0,this._extensions=f||{},this._isServer=!!c,this._maxPayload=g|0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._state=D2,this._loop=!1}_write(u,f,c){if(this._opcode===8&&this._state==D2)return c();this._bufferedBytes+=u.length,this._buffers.push(u),this.startLoop(c)}consume(u){if(this._bufferedBytes-=u,u===this._buffers[0].length)return this._buffers.shift();if(u=c.length?f.set(this._buffers.shift(),g):(f.set(new Uint8Array(c.buffer,c.byteOffset,u),g),this._buffers[0]=c.slice(u)),u-=c.length}while(u>0);return f}startLoop(u){let f;this._loop=!0;do switch(this._state){case D2:f=this.getInfo();break;case D6:f=this.getPayloadLength16();break;case E6:f=this.getPayloadLength64();break;case S6:this.getMask();break;case r3:f=this.getData(u);break;default:this._loop=!1;return}while(this._loop);u(f)}getInfo(){if(this._bufferedBytes<2){this._loop=!1;return}let u=this.consume(2);if((u[0]&48)!=0)return this._loop=!1,ii(RangeError,"RSV2 and RSV3 must be clear",!0,1002);let f=(u[0]&64)==64;if(f&&!this._extensions[y6.extensionName])return this._loop=!1,ii(RangeError,"RSV1 must be clear",!0,1002);if(this._fin=(u[0]&128)==128,this._opcode=u[0]&15,this._payloadLength=u[1]&127,this._opcode===0){if(f)return this._loop=!1,ii(RangeError,"RSV1 must be clear",!0,1002);if(!this._fragmented)return this._loop=!1,ii(RangeError,"invalid opcode 0",!0,1002);this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented)return this._loop=!1,ii(RangeError,`invalid opcode ${this._opcode}`,!0,1002);this._compressed=f}else if(this._opcode>7&&this._opcode<11){if(!this._fin)return this._loop=!1,ii(RangeError,"FIN must be set",!0,1002);if(f)return this._loop=!1,ii(RangeError,"RSV1 must be clear",!0,1002);if(this._payloadLength>125)return this._loop=!1,ii(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002)}else return this._loop=!1,ii(RangeError,`invalid opcode ${this._opcode}`,!0,1002);if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(u[1]&128)==128,this._isServer){if(!this._masked)return this._loop=!1,ii(RangeError,"MASK must be set",!0,1002)}else if(this._masked)return this._loop=!1,ii(RangeError,"MASK must be clear",!0,1002);if(this._payloadLength===126)this._state=D6;else if(this._payloadLength===127)this._state=E6;else return this.haveLength()}getPayloadLength16(){if(this._bufferedBytes<2){this._loop=!1;return}return this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength()}getPayloadLength64(){if(this._bufferedBytes<8){this._loop=!1;return}let u=this.consume(8),f=u.readUInt32BE(0);return f>Math.pow(2,53-32)-1?(this._loop=!1,ii(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009)):(this._payloadLength=f*Math.pow(2,32)+u.readUInt32BE(4),this.haveLength())}haveLength(){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0))return this._loop=!1,ii(RangeError,"Max payload size exceeded",!1,1009);this._masked?this._state=S6:this._state=r3}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=r3}getData(u){let f=_B;if(this._payloadLength){if(this._bufferedBytes7)return this.controlMessage(f);if(this._compressed){this._state=CB,this.decompress(f,u);return}return f.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(f)),this.dataMessage()}decompress(u,f){this._extensions[y6.extensionName].decompress(u,this._fin,(g,t)=>{if(g)return f(g);if(t.length){if(this._messageLength+=t.length,this._messageLength>this._maxPayload&&this._maxPayload>0)return f(ii(RangeError,"Max payload size exceeded",!1,1009));this._fragments.push(t)}let C=this.dataMessage();if(C)return f(C);this.startLoop(f)})}dataMessage(){if(this._fin){let u=this._messageLength,f=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let c;this._binaryType==="nodebuffer"?c=n3(f,u):this._binaryType==="arraybuffer"?c=DB(n3(f,u)):c=f,this.emit("message",c)}else{let c=n3(f,u);if(!w6(c))return this._loop=!1,ii(Error,"invalid UTF-8 sequence",!0,1007);this.emit("message",c.toString())}}this._state=D2}controlMessage(u){if(this._opcode===8)if(this._loop=!1,u.length===0)this.emit("conclude",1005,""),this.end();else{if(u.length===1)return ii(RangeError,"invalid payload length 1",!0,1002);{let f=u.readUInt16BE(0);if(!SB(f))return ii(RangeError,`invalid status code ${f}`,!0,1002);let c=u.slice(2);if(!w6(c))return ii(Error,"invalid UTF-8 sequence",!0,1007);this.emit("conclude",f,c.toString()),this.end()}}else this._opcode===9?this.emit("ping",u):this.emit("pong",u);this._state=D2}};_6.exports=C6;function ii(i,u,f,c){let g=new i(f?`Invalid WebSocket frame: ${u}`:u);return Error.captureStackTrace(g,ii),g[yB]=c,g}});var o3=Me((zb,T6)=>{"use strict";var{randomFillSync:TB}=require("crypto"),x6=w2(),{EMPTY_BUFFER:xB}=mc(),{isValidStatusCode:kB}=t3(),{mask:k6,toBuffer:Jl}=g2(),vc=Buffer.alloc(4),Ql=class{constructor(u,f){this._extensions=f||{},this._socket=u,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(u,f){let c=f.mask&&f.readOnly,g=f.mask?6:2,t=u.length;u.length>=65536?(g+=8,t=127):u.length>125&&(g+=2,t=126);let C=Buffer.allocUnsafe(c?u.length+g:g);return C[0]=f.fin?f.opcode|128:f.opcode,f.rsv1&&(C[0]|=64),C[1]=t,t===126?C.writeUInt16BE(u.length,2):t===127&&(C.writeUInt32BE(0,2),C.writeUInt32BE(u.length,6)),f.mask?(TB(vc,0,4),C[1]|=128,C[g-4]=vc[0],C[g-3]=vc[1],C[g-2]=vc[2],C[g-1]=vc[3],c?(k6(u,vc,C,g,u.length),[C]):(k6(u,vc,u,0,u.length),[C,u])):[C,u]}close(u,f,c,g){let t;if(u===void 0)t=xB;else{if(typeof u!="number"||!kB(u))throw new TypeError("First argument must be a valid error code number");if(f===void 0||f==="")t=Buffer.allocUnsafe(2),t.writeUInt16BE(u,0);else{let C=Buffer.byteLength(f);if(C>123)throw new RangeError("The message must not be greater than 123 bytes");t=Buffer.allocUnsafe(2+C),t.writeUInt16BE(u,0),t.write(f,2)}}this._deflating?this.enqueue([this.doClose,t,c,g]):this.doClose(t,c,g)}doClose(u,f,c){this.sendFrame(Ql.frame(u,{fin:!0,rsv1:!1,opcode:8,mask:f,readOnly:!1}),c)}ping(u,f,c){let g=Jl(u);if(g.length>125)throw new RangeError("The data size must not be greater than 125 bytes");this._deflating?this.enqueue([this.doPing,g,f,Jl.readOnly,c]):this.doPing(g,f,Jl.readOnly,c)}doPing(u,f,c,g){this.sendFrame(Ql.frame(u,{fin:!0,rsv1:!1,opcode:9,mask:f,readOnly:c}),g)}pong(u,f,c){let g=Jl(u);if(g.length>125)throw new RangeError("The data size must not be greater than 125 bytes");this._deflating?this.enqueue([this.doPong,g,f,Jl.readOnly,c]):this.doPong(g,f,Jl.readOnly,c)}doPong(u,f,c,g){this.sendFrame(Ql.frame(u,{fin:!0,rsv1:!1,opcode:10,mask:f,readOnly:c}),g)}send(u,f,c){let g=Jl(u),t=this._extensions[x6.extensionName],C=f.binary?2:1,A=f.compress;if(this._firstFragment?(this._firstFragment=!1,A&&t&&(A=g.length>=t._threshold),this._compress=A):(A=!1,C=0),f.fin&&(this._firstFragment=!0),t){let x={fin:f.fin,rsv1:A,opcode:C,mask:f.mask,readOnly:Jl.readOnly};this._deflating?this.enqueue([this.dispatch,g,this._compress,x,c]):this.dispatch(g,this._compress,x,c)}else this.sendFrame(Ql.frame(g,{fin:f.fin,rsv1:!1,opcode:C,mask:f.mask,readOnly:Jl.readOnly}),c)}dispatch(u,f,c,g){if(!f){this.sendFrame(Ql.frame(u,c),g);return}let t=this._extensions[x6.extensionName];this._bufferedBytes+=u.length,this._deflating=!0,t.compress(u,c.fin,(C,A)=>{if(this._socket.destroyed){let x=new Error("The socket was closed while data was being compressed");typeof g=="function"&&g(x);for(let D=0;D{"use strict";var E2=class{constructor(u,f){this.target=f,this.type=u}},O6=class extends E2{constructor(u,f){super("message",f);this.data=u}},I6=class extends E2{constructor(u,f,c){super("close",c);this.wasClean=c._closeFrameReceived&&c._closeFrameSent,this.reason=f,this.code=u}},P6=class extends E2{constructor(u){super("open",u)}},M6=class extends E2{constructor(u,f){super("error",f);this.message=u.message,this.error=u}},AB={addEventListener(i,u,f){if(typeof u!="function")return;function c(x){u.call(this,new O6(x,this))}function g(x,D){u.call(this,new I6(x,D,this))}function t(x){u.call(this,new M6(x,this))}function C(){u.call(this,new P6(this))}let A=f&&f.once?"once":"on";i==="message"?(c._listener=u,this[A](i,c)):i==="close"?(g._listener=u,this[A](i,g)):i==="error"?(t._listener=u,this[A](i,t)):i==="open"?(C._listener=u,this[A](i,C)):this[A](i,u)},removeEventListener(i,u){let f=this.listeners(i);for(let c=0;c{"use strict";var S2=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function rl(i,u,f){i[u]===void 0?i[u]=[f]:i[u].push(f)}function OB(i){let u=Object.create(null);if(i===void 0||i==="")return u;let f=Object.create(null),c=!1,g=!1,t=!1,C,A,x=-1,D=-1,L=0;for(;L{let f=i[u];return Array.isArray(f)||(f=[f]),f.map(c=>[u].concat(Object.keys(c).map(g=>{let t=c[g];return Array.isArray(t)||(t=[t]),t.map(C=>C===!0?g:`${g}=${C}`).join("; ")})).join("; ")).join(", ")}).join(", ")}L6.exports={format:IB,parse:OB}});var a3=Me((bb,R6)=>{"use strict";var PB=require("events"),MB=require("https"),FB=require("http"),N6=require("net"),LB=require("tls"),{randomBytes:RB,createHash:NB}=require("crypto"),{URL:s3}=require("url"),Uf=w2(),BB=i3(),jB=o3(),{BINARY_TYPES:B6,EMPTY_BUFFER:l3,GUID:UB,kStatusCode:qB,kWebSocket:No,NOOP:j6}=mc(),{addEventListener:zB,removeEventListener:WB}=F6(),{format:HB,parse:bB}=u3(),{toBuffer:GB}=g2(),U6=["CONNECTING","OPEN","CLOSING","CLOSED"],f3=[8,13],VB=30*1e3,mr=class extends PB{constructor(u,f,c){super();this._binaryType=B6[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage="",this._closeTimer=null,this._extensions={},this._protocol="",this._readyState=mr.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,u!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,Array.isArray(f)?f=f.join(", "):typeof f=="object"&&f!==null&&(c=f,f=void 0),q6(this,u,f,c)):this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(u){!B6.includes(u)||(this._binaryType=u,this._receiver&&(this._receiver._binaryType=u))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(u,f,c){let g=new BB(this.binaryType,this._extensions,this._isServer,c);this._sender=new jB(u,this._extensions),this._receiver=g,this._socket=u,g[No]=this,u[No]=this,g.on("conclude",YB),g.on("drain",$B),g.on("error",KB),g.on("message",XB),g.on("ping",JB),g.on("pong",QB),u.setTimeout(0),u.setNoDelay(),f.length>0&&u.unshift(f),u.on("close",z6),u.on("data",Wh),u.on("end",W6),u.on("error",H6),this._readyState=mr.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=mr.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[Uf.extensionName]&&this._extensions[Uf.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=mr.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(u,f){if(this.readyState!==mr.CLOSED){if(this.readyState===mr.CONNECTING){let c="WebSocket was closed before the connection was established";return Zl(this,this._req,c)}if(this.readyState===mr.CLOSING){this._closeFrameSent&&this._closeFrameReceived&&this._socket.end();return}this._readyState=mr.CLOSING,this._sender.close(u,f,!this._isServer,c=>{c||(this._closeFrameSent=!0,this._closeFrameReceived&&this._socket.end())}),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),VB)}}ping(u,f,c){if(this.readyState===mr.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof u=="function"?(c=u,u=f=void 0):typeof f=="function"&&(c=f,f=void 0),typeof u=="number"&&(u=u.toString()),this.readyState!==mr.OPEN){c3(this,u,c);return}f===void 0&&(f=!this._isServer),this._sender.ping(u||l3,f,c)}pong(u,f,c){if(this.readyState===mr.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof u=="function"?(c=u,u=f=void 0):typeof f=="function"&&(c=f,f=void 0),typeof u=="number"&&(u=u.toString()),this.readyState!==mr.OPEN){c3(this,u,c);return}f===void 0&&(f=!this._isServer),this._sender.pong(u||l3,f,c)}send(u,f,c){if(this.readyState===mr.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof f=="function"&&(c=f,f={}),typeof u=="number"&&(u=u.toString()),this.readyState!==mr.OPEN){c3(this,u,c);return}let g=dt({binary:typeof u!="string",mask:!this._isServer,compress:!0,fin:!0},f);this._extensions[Uf.extensionName]||(g.compress=!1),this._sender.send(u||l3,g,c)}terminate(){if(this.readyState!==mr.CLOSED){if(this.readyState===mr.CONNECTING){let u="WebSocket was closed before the connection was established";return Zl(this,this._req,u)}this._socket&&(this._readyState=mr.CLOSING,this._socket.destroy())}}};U6.forEach((i,u)=>{let f={enumerable:!0,value:u};Object.defineProperty(mr.prototype,i,f),Object.defineProperty(mr,i,f)});["binaryType","bufferedAmount","extensions","protocol","readyState","url"].forEach(i=>{Object.defineProperty(mr.prototype,i,{enumerable:!0})});["open","error","close","message"].forEach(i=>{Object.defineProperty(mr.prototype,`on${i}`,{configurable:!0,enumerable:!0,get(){let u=this.listeners(i);for(let f=0;f{Zl(i,j,"Opening handshake has timed out")}),j.on("error",$=>{j===null||j.aborted||(j=i._req=null,i._readyState=mr.CLOSING,i.emit("error",$),i.emitClose())}),j.on("response",$=>{let h=$.headers.location,re=$.statusCode;if(h&&g.followRedirects&&re>=300&&re<400){if(++i._redirects>g.maxRedirects){Zl(i,j,"Maximum redirects exceeded");return}j.abort();let ce=new s3(h,u);q6(i,ce,f,c)}else i.emit("unexpected-response",j,$)||Zl(i,j,`Unexpected server response: ${$.statusCode}`)}),j.on("upgrade",($,h,re)=>{if(i.emit("upgrade",$),i.readyState!==mr.CONNECTING)return;j=i._req=null;let ce=NB("sha1").update(D+UB).digest("base64");if($.headers["sec-websocket-accept"]!==ce){Zl(i,h,"Invalid Sec-WebSocket-Accept header");return}let Q=$.headers["sec-websocket-protocol"],oe=(f||"").split(/, */),Se;if(!f&&Q?Se="Server sent a subprotocol but none was requested":f&&!Q?Se="Server sent no subprotocol":Q&&!oe.includes(Q)&&(Se="Server sent an invalid subprotocol"),Se){Zl(i,h,Se);return}if(Q&&(i._protocol=Q),N)try{let me=bB($.headers["sec-websocket-extensions"]);me[Uf.extensionName]&&(N.accept(me[Uf.extensionName]),i._extensions[Uf.extensionName]=N)}catch(me){Zl(i,h,"Invalid Sec-WebSocket-Extensions header");return}i.setSocket(h,re,g.maxPayload)})}function ZB(i){return i.path=i.socketPath,N6.connect(i)}function ej(i){return i.path=void 0,!i.servername&&i.servername!==""&&(i.servername=N6.isIP(i.host)?"":i.host),LB.connect(i)}function Zl(i,u,f){i._readyState=mr.CLOSING;let c=new Error(f);Error.captureStackTrace(c,Zl),u.setHeader?(u.abort(),u.socket&&!u.socket.destroyed&&u.socket.destroy(),u.once("abort",i.emitClose.bind(i)),i.emit("error",c)):(u.destroy(c),u.once("error",i.emit.bind(i,"error")),u.once("close",i.emitClose.bind(i)))}function c3(i,u,f){if(u){let c=GB(u).length;i._socket?i._sender._bufferedBytes+=c:i._bufferedAmount+=c}if(f){let c=new Error(`WebSocket is not open: readyState ${i.readyState} (${U6[i.readyState]})`);f(c)}}function YB(i,u){let f=this[No];f._socket.removeListener("data",Wh),f._socket.resume(),f._closeFrameReceived=!0,f._closeMessage=u,f._closeCode=i,i===1005?f.close():f.close(i,u)}function $B(){this[No]._socket.resume()}function KB(i){let u=this[No];u._socket.removeListener("data",Wh),u._readyState=mr.CLOSING,u._closeCode=i[qB],u.emit("error",i),u._socket.destroy()}function b6(){this[No].emitClose()}function XB(i){this[No].emit("message",i)}function JB(i){let u=this[No];u.pong(i,!u._isServer,j6),u.emit("ping",i)}function QB(i){this[No].emit("pong",i)}function z6(){let i=this[No];this.removeListener("close",z6),this.removeListener("end",W6),i._readyState=mr.CLOSING,i._socket.read(),i._receiver.end(),this.removeListener("data",Wh),this[No]=void 0,clearTimeout(i._closeTimer),i._receiver._writableState.finished||i._receiver._writableState.errorEmitted?i.emitClose():(i._receiver.on("error",b6),i._receiver.on("finish",b6))}function Wh(i){this[No]._receiver.write(i)||this.pause()}function W6(){let i=this[No];i._readyState=mr.CLOSING,i._receiver.end(),this.end()}function H6(){let i=this[No];this.removeListener("error",H6),this.on("error",j6),i&&(i._readyState=mr.CLOSING,this.destroy())}});var $6=Me((Gb,G6)=>{"use strict";var{Duplex:tj}=require("stream");function V6(i){i.emit("close")}function nj(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Y6(i){this.removeListener("error",Y6),this.destroy(),this.listenerCount("error")===0&&this.emit("error",i)}function rj(i,u){let f=!0;function c(){f&&i._socket.resume()}i.readyState===i.CONNECTING?i.once("open",function(){i._receiver.removeAllListeners("drain"),i._receiver.on("drain",c)}):(i._receiver.removeAllListeners("drain"),i._receiver.on("drain",c));let g=new tj(zn(dt({},u),{autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1}));return i.on("message",function(C){g.push(C)||(f=!1,i._socket.pause())}),i.once("error",function(C){g.destroyed||g.destroy(C)}),i.once("close",function(){g.destroyed||g.push(null)}),g._destroy=function(t,C){if(i.readyState===i.CLOSED){C(t),process.nextTick(V6,g);return}let A=!1;i.once("error",function(D){A=!0,C(D)}),i.once("close",function(){A||C(t),process.nextTick(V6,g)}),i.terminate()},g._final=function(t){if(i.readyState===i.CONNECTING){i.once("open",function(){g._final(t)});return}i._socket!==null&&(i._socket._writableState.finished?(t(),g._readableState.endEmitted&&g.destroy()):(i._socket.once("finish",function(){t()}),i.close()))},g._read=function(){i.readyState===i.OPEN&&!f&&(f=!0,i._receiver._writableState.needDrain||i._socket.resume())},g._write=function(t,C,A){if(i.readyState===i.CONNECTING){i.once("open",function(){g._write(t,C,A)});return}i.send(t,A)},g.on("end",nj),g.on("error",Y6),g}G6.exports=rj});var J6=Me((Vb,K6)=>{"use strict";var ij=require("events"),{createHash:oj}=require("crypto"),{createServer:uj,STATUS_CODES:d3}=require("http"),gc=w2(),sj=a3(),{format:lj,parse:fj}=u3(),{GUID:cj,kWebSocket:aj}=mc(),dj=/^[+/0-9A-Za-z]{22}==$/,X6=class extends ij{constructor(u,f){super();if(u=dt({maxPayload:100*1024*1024,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null},u),u.port==null&&!u.server&&!u.noServer)throw new TypeError('One of the "port", "server", or "noServer" options must be specified');if(u.port!=null?(this._server=uj((c,g)=>{let t=d3[426];g.writeHead(426,{"Content-Length":t.length,"Content-Type":"text/plain"}),g.end(t)}),this._server.listen(u.port,u.host,u.backlog,f)):u.server&&(this._server=u.server),this._server){let c=this.emit.bind(this,"connection");this._removeListeners=pj(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(g,t,C)=>{this.handleUpgrade(g,t,C,c)}})}u.perMessageDeflate===!0&&(u.perMessageDeflate={}),u.clientTracking&&(this.clients=new Set),this.options=u}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(u){if(u&&this.once("close",u),this.clients)for(let c of this.clients)c.terminate();let f=this._server;if(f&&(this._removeListeners(),this._removeListeners=this._server=null,this.options.port!=null)){f.close(()=>this.emit("close"));return}process.nextTick(hj,this)}shouldHandle(u){if(this.options.path){let f=u.url.indexOf("?");if((f!==-1?u.url.slice(0,f):u.url)!==this.options.path)return!1}return!0}handleUpgrade(u,f,c,g){f.on("error",p3);let t=u.headers["sec-websocket-key"]!==void 0?u.headers["sec-websocket-key"].trim():!1,C=+u.headers["sec-websocket-version"],A={};if(u.method!=="GET"||u.headers.upgrade.toLowerCase()!=="websocket"||!t||!dj.test(t)||C!==8&&C!==13||!this.shouldHandle(u))return Hh(f,400);if(this.options.perMessageDeflate){let x=new gc(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let D=fj(u.headers["sec-websocket-extensions"]);D[gc.extensionName]&&(x.accept(D[gc.extensionName]),A[gc.extensionName]=x)}catch(D){return Hh(f,400)}}if(this.options.verifyClient){let x={origin:u.headers[`${C===8?"sec-websocket-origin":"origin"}`],secure:!!(u.socket.authorized||u.socket.encrypted),req:u};if(this.options.verifyClient.length===2){this.options.verifyClient(x,(D,L,N,j)=>{if(!D)return Hh(f,L||401,N,j);this.completeUpgrade(t,A,u,f,c,g)});return}if(!this.options.verifyClient(x))return Hh(f,401)}this.completeUpgrade(t,A,u,f,c,g)}completeUpgrade(u,f,c,g,t,C){if(!g.readable||!g.writable)return g.destroy();if(g[aj])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");let A=oj("sha1").update(u+cj).digest("base64"),x=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${A}`],D=new sj(null),L=c.headers["sec-websocket-protocol"];if(L&&(L=L.split(",").map(mj),this.options.handleProtocols?L=this.options.handleProtocols(L,c):L=L[0],L&&(x.push(`Sec-WebSocket-Protocol: ${L}`),D._protocol=L)),f[gc.extensionName]){let N=f[gc.extensionName].params,j=lj({[gc.extensionName]:[N]});x.push(`Sec-WebSocket-Extensions: ${j}`),D._extensions=f}this.emit("headers",x,c),g.write(x.concat(`\r -`).join(`\r -`)),g.removeListener("error",p3),D.setSocket(g,t,this.options.maxPayload),this.clients&&(this.clients.add(D),D.on("close",()=>this.clients.delete(D))),C(D,c)}};K6.exports=X6;function pj(i,u){for(let f of Object.keys(u))i.on(f,u[f]);return function(){for(let c of Object.keys(u))i.removeListener(c,u[c])}}function hj(i){i.emit("close")}function p3(){this.destroy()}function Hh(i,u,f,c){i.writable&&(f=f||d3[u],c=dt({Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(f)},c),i.write(`HTTP/1.1 ${u} ${d3[u]}\r -`+Object.keys(c).map(g=>`${g}: ${c[g]}`).join(`\r -`)+`\r -\r -`+f)),i.removeListener("error",p3),i.destroy()}function mj(i){return i.trim()}});var Z6=Me((Yb,Q6)=>{"use strict";var C2=a3();C2.createWebSocketStream=$6();C2.Server=J6();C2.Receiver=i3();C2.Sender=o3();Q6.exports=C2});var eS=Me(bh=>{"use strict";var vj=bh&&bh.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(bh,"__esModule",{value:!0});var gj=vj(Z6()),T2=global;T2.WebSocket||(T2.WebSocket=gj.default);T2.window||(T2.window=global);T2.window.__REACT_DEVTOOLS_COMPONENT_FILTERS__=[{type:1,value:7,isEnabled:!0},{type:2,value:"InternalApp",isEnabled:!0,isValid:!0},{type:2,value:"InternalAppContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdoutContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStderrContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdinContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalFocusContext",isEnabled:!0,isValid:!0}]});var tS=Me((Gh,h3)=>{(function(i,u){typeof Gh=="object"&&typeof h3=="object"?h3.exports=u():typeof define=="function"&&define.amd?define([],u):typeof Gh=="object"?Gh.ReactDevToolsBackend=u():i.ReactDevToolsBackend=u()})(window,function(){return function(i){var u={};function f(c){if(u[c])return u[c].exports;var g=u[c]={i:c,l:!1,exports:{}};return i[c].call(g.exports,g,g.exports,f),g.l=!0,g.exports}return f.m=i,f.c=u,f.d=function(c,g,t){f.o(c,g)||Object.defineProperty(c,g,{enumerable:!0,get:t})},f.r=function(c){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(c,"__esModule",{value:!0})},f.t=function(c,g){if(1&g&&(c=f(c)),8&g||4&g&&typeof c=="object"&&c&&c.__esModule)return c;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:c}),2&g&&typeof c!="string")for(var C in c)f.d(t,C,function(A){return c[A]}.bind(null,C));return t},f.n=function(c){var g=c&&c.__esModule?function(){return c.default}:function(){return c};return f.d(g,"a",g),g},f.o=function(c,g){return Object.prototype.hasOwnProperty.call(c,g)},f.p="",f(f.s=20)}([function(i,u,f){"use strict";i.exports=f(12)},function(i,u,f){"use strict";var c=Object.getOwnPropertySymbols,g=Object.prototype.hasOwnProperty,t=Object.prototype.propertyIsEnumerable;function C(A){if(A==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(A)}i.exports=function(){try{if(!Object.assign)return!1;var A=new String("abc");if(A[5]="de",Object.getOwnPropertyNames(A)[0]==="5")return!1;for(var x={},D=0;D<10;D++)x["_"+String.fromCharCode(D)]=D;if(Object.getOwnPropertyNames(x).map(function(N){return x[N]}).join("")!=="0123456789")return!1;var L={};return"abcdefghijklmnopqrst".split("").forEach(function(N){L[N]=N}),Object.keys(Object.assign({},L)).join("")==="abcdefghijklmnopqrst"}catch(N){return!1}}()?Object.assign:function(A,x){for(var D,L,N=C(A),j=1;j=J||Ft<0||Nt&&it-At>=ot}function Z(){var it=ce();if(ge(it))return Ae(it);Ue=setTimeout(Z,function(Ft){var jt=J-(Ft-be);return Nt?re(jt,ot-(Ft-At)):jt}(it))}function Ae(it){return Ue=void 0,Je&&Oe?V(it):(Oe=Le=void 0,ct)}function at(){var it=ce(),Ft=ge(it);if(Oe=arguments,Le=this,be=it,Ft){if(Ue===void 0)return ne(be);if(Nt)return Ue=setTimeout(Z,J),V(be)}return Ue===void 0&&(Ue=setTimeout(Z,J)),ct}return J=me(J)||0,oe(Te)&&(Ot=!!Te.leading,ot=(Nt="maxWait"in Te)?h(me(Te.maxWait)||0,J):ot,Je="trailing"in Te?!!Te.trailing:Je),at.cancel=function(){Ue!==void 0&&clearTimeout(Ue),At=0,Oe=be=Le=Ue=void 0},at.flush=function(){return Ue===void 0?ct:Ae(ce())},at}function oe(De){var J=g(De);return!!De&&(J=="object"||J=="function")}function Se(De){return g(De)=="symbol"||function(J){return!!J&&g(J)=="object"}(De)&&$.call(De)=="[object Symbol]"}function me(De){if(typeof De=="number")return De;if(Se(De))return NaN;if(oe(De)){var J=typeof De.valueOf=="function"?De.valueOf():De;De=oe(J)?J+"":J}if(typeof De!="string")return De===0?De:+De;De=De.replace(t,"");var Te=A.test(De);return Te||x.test(De)?D(De.slice(2),Te?2:8):C.test(De)?NaN:+De}i.exports=function(De,J,Te){var Oe=!0,Le=!0;if(typeof De!="function")throw new TypeError("Expected a function");return oe(Te)&&(Oe="leading"in Te?!!Te.leading:Oe,Le="trailing"in Te?!!Te.trailing:Le),Q(De,J,{leading:Oe,maxWait:J,trailing:Le})}}).call(this,f(4))},function(i,u,f){(function(c){function g(V){return(g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(ne){return typeof ne}:function(ne){return ne&&typeof Symbol=="function"&&ne.constructor===Symbol&&ne!==Symbol.prototype?"symbol":typeof ne})(V)}var t;u=i.exports=h,t=(c===void 0?"undefined":g(c))==="object"&&c.env&&c.env.NODE_DEBUG&&/\bsemver\b/i.test(c.env.NODE_DEBUG)?function(){var V=Array.prototype.slice.call(arguments,0);V.unshift("SEMVER"),console.log.apply(console,V)}:function(){},u.SEMVER_SPEC_VERSION="2.0.0";var C=Number.MAX_SAFE_INTEGER||9007199254740991,A=u.re=[],x=u.src=[],D=u.tokens={},L=0;function N(V){D[V]=L++}N("NUMERICIDENTIFIER"),x[D.NUMERICIDENTIFIER]="0|[1-9]\\d*",N("NUMERICIDENTIFIERLOOSE"),x[D.NUMERICIDENTIFIERLOOSE]="[0-9]+",N("NONNUMERICIDENTIFIER"),x[D.NONNUMERICIDENTIFIER]="\\d*[a-zA-Z-][a-zA-Z0-9-]*",N("MAINVERSION"),x[D.MAINVERSION]="("+x[D.NUMERICIDENTIFIER]+")\\.("+x[D.NUMERICIDENTIFIER]+")\\.("+x[D.NUMERICIDENTIFIER]+")",N("MAINVERSIONLOOSE"),x[D.MAINVERSIONLOOSE]="("+x[D.NUMERICIDENTIFIERLOOSE]+")\\.("+x[D.NUMERICIDENTIFIERLOOSE]+")\\.("+x[D.NUMERICIDENTIFIERLOOSE]+")",N("PRERELEASEIDENTIFIER"),x[D.PRERELEASEIDENTIFIER]="(?:"+x[D.NUMERICIDENTIFIER]+"|"+x[D.NONNUMERICIDENTIFIER]+")",N("PRERELEASEIDENTIFIERLOOSE"),x[D.PRERELEASEIDENTIFIERLOOSE]="(?:"+x[D.NUMERICIDENTIFIERLOOSE]+"|"+x[D.NONNUMERICIDENTIFIER]+")",N("PRERELEASE"),x[D.PRERELEASE]="(?:-("+x[D.PRERELEASEIDENTIFIER]+"(?:\\."+x[D.PRERELEASEIDENTIFIER]+")*))",N("PRERELEASELOOSE"),x[D.PRERELEASELOOSE]="(?:-?("+x[D.PRERELEASEIDENTIFIERLOOSE]+"(?:\\."+x[D.PRERELEASEIDENTIFIERLOOSE]+")*))",N("BUILDIDENTIFIER"),x[D.BUILDIDENTIFIER]="[0-9A-Za-z-]+",N("BUILD"),x[D.BUILD]="(?:\\+("+x[D.BUILDIDENTIFIER]+"(?:\\."+x[D.BUILDIDENTIFIER]+")*))",N("FULL"),N("FULLPLAIN"),x[D.FULLPLAIN]="v?"+x[D.MAINVERSION]+x[D.PRERELEASE]+"?"+x[D.BUILD]+"?",x[D.FULL]="^"+x[D.FULLPLAIN]+"$",N("LOOSEPLAIN"),x[D.LOOSEPLAIN]="[v=\\s]*"+x[D.MAINVERSIONLOOSE]+x[D.PRERELEASELOOSE]+"?"+x[D.BUILD]+"?",N("LOOSE"),x[D.LOOSE]="^"+x[D.LOOSEPLAIN]+"$",N("GTLT"),x[D.GTLT]="((?:<|>)?=?)",N("XRANGEIDENTIFIERLOOSE"),x[D.XRANGEIDENTIFIERLOOSE]=x[D.NUMERICIDENTIFIERLOOSE]+"|x|X|\\*",N("XRANGEIDENTIFIER"),x[D.XRANGEIDENTIFIER]=x[D.NUMERICIDENTIFIER]+"|x|X|\\*",N("XRANGEPLAIN"),x[D.XRANGEPLAIN]="[v=\\s]*("+x[D.XRANGEIDENTIFIER]+")(?:\\.("+x[D.XRANGEIDENTIFIER]+")(?:\\.("+x[D.XRANGEIDENTIFIER]+")(?:"+x[D.PRERELEASE]+")?"+x[D.BUILD]+"?)?)?",N("XRANGEPLAINLOOSE"),x[D.XRANGEPLAINLOOSE]="[v=\\s]*("+x[D.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+x[D.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+x[D.XRANGEIDENTIFIERLOOSE]+")(?:"+x[D.PRERELEASELOOSE]+")?"+x[D.BUILD]+"?)?)?",N("XRANGE"),x[D.XRANGE]="^"+x[D.GTLT]+"\\s*"+x[D.XRANGEPLAIN]+"$",N("XRANGELOOSE"),x[D.XRANGELOOSE]="^"+x[D.GTLT]+"\\s*"+x[D.XRANGEPLAINLOOSE]+"$",N("COERCE"),x[D.COERCE]="(^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])",N("COERCERTL"),A[D.COERCERTL]=new RegExp(x[D.COERCE],"g"),N("LONETILDE"),x[D.LONETILDE]="(?:~>?)",N("TILDETRIM"),x[D.TILDETRIM]="(\\s*)"+x[D.LONETILDE]+"\\s+",A[D.TILDETRIM]=new RegExp(x[D.TILDETRIM],"g"),N("TILDE"),x[D.TILDE]="^"+x[D.LONETILDE]+x[D.XRANGEPLAIN]+"$",N("TILDELOOSE"),x[D.TILDELOOSE]="^"+x[D.LONETILDE]+x[D.XRANGEPLAINLOOSE]+"$",N("LONECARET"),x[D.LONECARET]="(?:\\^)",N("CARETTRIM"),x[D.CARETTRIM]="(\\s*)"+x[D.LONECARET]+"\\s+",A[D.CARETTRIM]=new RegExp(x[D.CARETTRIM],"g"),N("CARET"),x[D.CARET]="^"+x[D.LONECARET]+x[D.XRANGEPLAIN]+"$",N("CARETLOOSE"),x[D.CARETLOOSE]="^"+x[D.LONECARET]+x[D.XRANGEPLAINLOOSE]+"$",N("COMPARATORLOOSE"),x[D.COMPARATORLOOSE]="^"+x[D.GTLT]+"\\s*("+x[D.LOOSEPLAIN]+")$|^$",N("COMPARATOR"),x[D.COMPARATOR]="^"+x[D.GTLT]+"\\s*("+x[D.FULLPLAIN]+")$|^$",N("COMPARATORTRIM"),x[D.COMPARATORTRIM]="(\\s*)"+x[D.GTLT]+"\\s*("+x[D.LOOSEPLAIN]+"|"+x[D.XRANGEPLAIN]+")",A[D.COMPARATORTRIM]=new RegExp(x[D.COMPARATORTRIM],"g"),N("HYPHENRANGE"),x[D.HYPHENRANGE]="^\\s*("+x[D.XRANGEPLAIN]+")\\s+-\\s+("+x[D.XRANGEPLAIN]+")\\s*$",N("HYPHENRANGELOOSE"),x[D.HYPHENRANGELOOSE]="^\\s*("+x[D.XRANGEPLAINLOOSE]+")\\s+-\\s+("+x[D.XRANGEPLAINLOOSE]+")\\s*$",N("STAR"),x[D.STAR]="(<|>)?=?\\s*\\*";for(var j=0;j256||!(ne.loose?A[D.LOOSE]:A[D.FULL]).test(V))return null;try{return new h(V,ne)}catch(ge){return null}}function h(V,ne){if(ne&&g(ne)==="object"||(ne={loose:!!ne,includePrerelease:!1}),V instanceof h){if(V.loose===ne.loose)return V;V=V.version}else if(typeof V!="string")throw new TypeError("Invalid Version: "+V);if(V.length>256)throw new TypeError("version is longer than 256 characters");if(!(this instanceof h))return new h(V,ne);t("SemVer",V,ne),this.options=ne,this.loose=!!ne.loose;var ge=V.trim().match(ne.loose?A[D.LOOSE]:A[D.FULL]);if(!ge)throw new TypeError("Invalid Version: "+V);if(this.raw=V,this.major=+ge[1],this.minor=+ge[2],this.patch=+ge[3],this.major>C||this.major<0)throw new TypeError("Invalid major version");if(this.minor>C||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>C||this.patch<0)throw new TypeError("Invalid patch version");ge[4]?this.prerelease=ge[4].split(".").map(function(Z){if(/^[0-9]+$/.test(Z)){var Ae=+Z;if(Ae>=0&&Ae=0;)typeof this.prerelease[ge]=="number"&&(this.prerelease[ge]++,ge=-2);ge===-1&&this.prerelease.push(0)}ne&&(this.prerelease[0]===ne?isNaN(this.prerelease[1])&&(this.prerelease=[ne,0]):this.prerelease=[ne,0]);break;default:throw new Error("invalid increment argument: "+V)}return this.format(),this.raw=this.version,this},u.inc=function(V,ne,ge,Z){typeof ge=="string"&&(Z=ge,ge=void 0);try{return new h(V,ge).inc(ne,Z).version}catch(Ae){return null}},u.diff=function(V,ne){if(me(V,ne))return null;var ge=$(V),Z=$(ne),Ae="";if(ge.prerelease.length||Z.prerelease.length){Ae="pre";var at="prerelease"}for(var it in ge)if((it==="major"||it==="minor"||it==="patch")&&ge[it]!==Z[it])return Ae+it;return at},u.compareIdentifiers=ce;var re=/^[0-9]+$/;function ce(V,ne){var ge=re.test(V),Z=re.test(ne);return ge&&Z&&(V=+V,ne=+ne),V===ne?0:ge&&!Z?-1:Z&&!ge?1:V0}function Se(V,ne,ge){return Q(V,ne,ge)<0}function me(V,ne,ge){return Q(V,ne,ge)===0}function De(V,ne,ge){return Q(V,ne,ge)!==0}function J(V,ne,ge){return Q(V,ne,ge)>=0}function Te(V,ne,ge){return Q(V,ne,ge)<=0}function Oe(V,ne,ge,Z){switch(ne){case"===":return g(V)==="object"&&(V=V.version),g(ge)==="object"&&(ge=ge.version),V===ge;case"!==":return g(V)==="object"&&(V=V.version),g(ge)==="object"&&(ge=ge.version),V!==ge;case"":case"=":case"==":return me(V,ge,Z);case"!=":return De(V,ge,Z);case">":return oe(V,ge,Z);case">=":return J(V,ge,Z);case"<":return Se(V,ge,Z);case"<=":return Te(V,ge,Z);default:throw new TypeError("Invalid operator: "+ne)}}function Le(V,ne){if(ne&&g(ne)==="object"||(ne={loose:!!ne,includePrerelease:!1}),V instanceof Le){if(V.loose===!!ne.loose)return V;V=V.value}if(!(this instanceof Le))return new Le(V,ne);t("comparator",V,ne),this.options=ne,this.loose=!!ne.loose,this.parse(V),this.semver===ot?this.value="":this.value=this.operator+this.semver.version,t("comp",this)}u.rcompareIdentifiers=function(V,ne){return ce(ne,V)},u.major=function(V,ne){return new h(V,ne).major},u.minor=function(V,ne){return new h(V,ne).minor},u.patch=function(V,ne){return new h(V,ne).patch},u.compare=Q,u.compareLoose=function(V,ne){return Q(V,ne,!0)},u.compareBuild=function(V,ne,ge){var Z=new h(V,ge),Ae=new h(ne,ge);return Z.compare(Ae)||Z.compareBuild(Ae)},u.rcompare=function(V,ne,ge){return Q(ne,V,ge)},u.sort=function(V,ne){return V.sort(function(ge,Z){return u.compareBuild(ge,Z,ne)})},u.rsort=function(V,ne){return V.sort(function(ge,Z){return u.compareBuild(Z,ge,ne)})},u.gt=oe,u.lt=Se,u.eq=me,u.neq=De,u.gte=J,u.lte=Te,u.cmp=Oe,u.Comparator=Le;var ot={};function ct(V,ne){if(ne&&g(ne)==="object"||(ne={loose:!!ne,includePrerelease:!1}),V instanceof ct)return V.loose===!!ne.loose&&V.includePrerelease===!!ne.includePrerelease?V:new ct(V.raw,ne);if(V instanceof Le)return new ct(V.value,ne);if(!(this instanceof ct))return new ct(V,ne);if(this.options=ne,this.loose=!!ne.loose,this.includePrerelease=!!ne.includePrerelease,this.raw=V,this.set=V.split(/\s*\|\|\s*/).map(function(ge){return this.parseRange(ge.trim())},this).filter(function(ge){return ge.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+V);this.format()}function Ue(V,ne){for(var ge=!0,Z=V.slice(),Ae=Z.pop();ge&&Z.length;)ge=Z.every(function(at){return Ae.intersects(at,ne)}),Ae=Z.pop();return ge}function be(V){return!V||V.toLowerCase()==="x"||V==="*"}function At(V,ne,ge,Z,Ae,at,it,Ft,jt,hn,Un,Jt,Yt){return((ne=be(ge)?"":be(Z)?">="+ge+".0.0":be(Ae)?">="+ge+"."+Z+".0":">="+ne)+" "+(Ft=be(jt)?"":be(hn)?"<"+(+jt+1)+".0.0":be(Un)?"<"+jt+"."+(+hn+1)+".0":Jt?"<="+jt+"."+hn+"."+Un+"-"+Jt:"<="+Ft)).trim()}function Ot(V,ne,ge){for(var Z=0;Z0){var Ae=V[Z].semver;if(Ae.major===ne.major&&Ae.minor===ne.minor&&Ae.patch===ne.patch)return!0}return!1}return!0}function Nt(V,ne,ge){try{ne=new ct(ne,ge)}catch(Z){return!1}return ne.test(V)}function Je(V,ne,ge,Z){var Ae,at,it,Ft,jt;switch(V=new h(V,Z),ne=new ct(ne,Z),ge){case">":Ae=oe,at=Te,it=Se,Ft=">",jt=">=";break;case"<":Ae=Se,at=J,it=oe,Ft="<",jt="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(Nt(V,ne,Z))return!1;for(var hn=0;hn=0.0.0")),Jt=Jt||cr,Yt=Yt||cr,Ae(cr.semver,Jt.semver,Z)?Jt=cr:it(cr.semver,Yt.semver,Z)&&(Yt=cr)}),Jt.operator===Ft||Jt.operator===jt||(!Yt.operator||Yt.operator===Ft)&&at(V,Yt.semver)||Yt.operator===jt&&it(V,Yt.semver))return!1}return!0}Le.prototype.parse=function(V){var ne=this.options.loose?A[D.COMPARATORLOOSE]:A[D.COMPARATOR],ge=V.match(ne);if(!ge)throw new TypeError("Invalid comparator: "+V);this.operator=ge[1]!==void 0?ge[1]:"",this.operator==="="&&(this.operator=""),ge[2]?this.semver=new h(ge[2],this.options.loose):this.semver=ot},Le.prototype.toString=function(){return this.value},Le.prototype.test=function(V){if(t("Comparator.test",V,this.options.loose),this.semver===ot||V===ot)return!0;if(typeof V=="string")try{V=new h(V,this.options)}catch(ne){return!1}return Oe(V,this.operator,this.semver,this.options)},Le.prototype.intersects=function(V,ne){if(!(V instanceof Le))throw new TypeError("a Comparator is required");var ge;if(ne&&g(ne)==="object"||(ne={loose:!!ne,includePrerelease:!1}),this.operator==="")return this.value===""||(ge=new ct(V.value,ne),Nt(this.value,ge,ne));if(V.operator==="")return V.value===""||(ge=new ct(this.value,ne),Nt(V.semver,ge,ne));var Z=!(this.operator!==">="&&this.operator!==">"||V.operator!==">="&&V.operator!==">"),Ae=!(this.operator!=="<="&&this.operator!=="<"||V.operator!=="<="&&V.operator!=="<"),at=this.semver.version===V.semver.version,it=!(this.operator!==">="&&this.operator!=="<="||V.operator!==">="&&V.operator!=="<="),Ft=Oe(this.semver,"<",V.semver,ne)&&(this.operator===">="||this.operator===">")&&(V.operator==="<="||V.operator==="<"),jt=Oe(this.semver,">",V.semver,ne)&&(this.operator==="<="||this.operator==="<")&&(V.operator===">="||V.operator===">");return Z||Ae||at&&it||Ft||jt},u.Range=ct,ct.prototype.format=function(){return this.range=this.set.map(function(V){return V.join(" ").trim()}).join("||").trim(),this.range},ct.prototype.toString=function(){return this.range},ct.prototype.parseRange=function(V){var ne=this.options.loose;V=V.trim();var ge=ne?A[D.HYPHENRANGELOOSE]:A[D.HYPHENRANGE];V=V.replace(ge,At),t("hyphen replace",V),V=V.replace(A[D.COMPARATORTRIM],"$1$2$3"),t("comparator trim",V,A[D.COMPARATORTRIM]),V=(V=(V=V.replace(A[D.TILDETRIM],"$1~")).replace(A[D.CARETTRIM],"$1^")).split(/\s+/).join(" ");var Z=ne?A[D.COMPARATORLOOSE]:A[D.COMPARATOR],Ae=V.split(" ").map(function(at){return function(it,Ft){return t("comp",it,Ft),it=function(jt,hn){return jt.trim().split(/\s+/).map(function(Un){return function(Jt,Yt){t("caret",Jt,Yt);var cr=Yt.loose?A[D.CARETLOOSE]:A[D.CARET];return Jt.replace(cr,function(w,pt,Mn,Bn,Xn){var vr;return t("caret",Jt,w,pt,Mn,Bn,Xn),be(pt)?vr="":be(Mn)?vr=">="+pt+".0.0 <"+(+pt+1)+".0.0":be(Bn)?vr=pt==="0"?">="+pt+"."+Mn+".0 <"+pt+"."+(+Mn+1)+".0":">="+pt+"."+Mn+".0 <"+(+pt+1)+".0.0":Xn?(t("replaceCaret pr",Xn),vr=pt==="0"?Mn==="0"?">="+pt+"."+Mn+"."+Bn+"-"+Xn+" <"+pt+"."+Mn+"."+(+Bn+1):">="+pt+"."+Mn+"."+Bn+"-"+Xn+" <"+pt+"."+(+Mn+1)+".0":">="+pt+"."+Mn+"."+Bn+"-"+Xn+" <"+(+pt+1)+".0.0"):(t("no pr"),vr=pt==="0"?Mn==="0"?">="+pt+"."+Mn+"."+Bn+" <"+pt+"."+Mn+"."+(+Bn+1):">="+pt+"."+Mn+"."+Bn+" <"+pt+"."+(+Mn+1)+".0":">="+pt+"."+Mn+"."+Bn+" <"+(+pt+1)+".0.0"),t("caret return",vr),vr})}(Un,hn)}).join(" ")}(it,Ft),t("caret",it),it=function(jt,hn){return jt.trim().split(/\s+/).map(function(Un){return function(Jt,Yt){var cr=Yt.loose?A[D.TILDELOOSE]:A[D.TILDE];return Jt.replace(cr,function(w,pt,Mn,Bn,Xn){var vr;return t("tilde",Jt,w,pt,Mn,Bn,Xn),be(pt)?vr="":be(Mn)?vr=">="+pt+".0.0 <"+(+pt+1)+".0.0":be(Bn)?vr=">="+pt+"."+Mn+".0 <"+pt+"."+(+Mn+1)+".0":Xn?(t("replaceTilde pr",Xn),vr=">="+pt+"."+Mn+"."+Bn+"-"+Xn+" <"+pt+"."+(+Mn+1)+".0"):vr=">="+pt+"."+Mn+"."+Bn+" <"+pt+"."+(+Mn+1)+".0",t("tilde return",vr),vr})}(Un,hn)}).join(" ")}(it,Ft),t("tildes",it),it=function(jt,hn){return t("replaceXRanges",jt,hn),jt.split(/\s+/).map(function(Un){return function(Jt,Yt){Jt=Jt.trim();var cr=Yt.loose?A[D.XRANGELOOSE]:A[D.XRANGE];return Jt.replace(cr,function(w,pt,Mn,Bn,Xn,vr){t("xRange",Jt,w,pt,Mn,Bn,Xn,vr);var gr=be(Mn),r0=gr||be(Bn),Ci=r0||be(Xn),yo=Ci;return pt==="="&&yo&&(pt=""),vr=Yt.includePrerelease?"-0":"",gr?w=pt===">"||pt==="<"?"<0.0.0-0":"*":pt&&yo?(r0&&(Bn=0),Xn=0,pt===">"?(pt=">=",r0?(Mn=+Mn+1,Bn=0,Xn=0):(Bn=+Bn+1,Xn=0)):pt==="<="&&(pt="<",r0?Mn=+Mn+1:Bn=+Bn+1),w=pt+Mn+"."+Bn+"."+Xn+vr):r0?w=">="+Mn+".0.0"+vr+" <"+(+Mn+1)+".0.0"+vr:Ci&&(w=">="+Mn+"."+Bn+".0"+vr+" <"+Mn+"."+(+Bn+1)+".0"+vr),t("xRange return",w),w})}(Un,hn)}).join(" ")}(it,Ft),t("xrange",it),it=function(jt,hn){return t("replaceStars",jt,hn),jt.trim().replace(A[D.STAR],"")}(it,Ft),t("stars",it),it}(at,this.options)},this).join(" ").split(/\s+/);return this.options.loose&&(Ae=Ae.filter(function(at){return!!at.match(Z)})),Ae=Ae.map(function(at){return new Le(at,this.options)},this)},ct.prototype.intersects=function(V,ne){if(!(V instanceof ct))throw new TypeError("a Range is required");return this.set.some(function(ge){return Ue(ge,ne)&&V.set.some(function(Z){return Ue(Z,ne)&&ge.every(function(Ae){return Z.every(function(at){return Ae.intersects(at,ne)})})})})},u.toComparators=function(V,ne){return new ct(V,ne).set.map(function(ge){return ge.map(function(Z){return Z.value}).join(" ").trim().split(" ")})},ct.prototype.test=function(V){if(!V)return!1;if(typeof V=="string")try{V=new h(V,this.options)}catch(ge){return!1}for(var ne=0;ne":at.prerelease.length===0?at.patch++:at.prerelease.push(0),at.raw=at.format();case"":case">=":ge&&!oe(ge,at)||(ge=at);break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+Ae.operator)}});return ge&&V.test(ge)?ge:null},u.validRange=function(V,ne){try{return new ct(V,ne).range||"*"}catch(ge){return null}},u.ltr=function(V,ne,ge){return Je(V,ne,"<",ge)},u.gtr=function(V,ne,ge){return Je(V,ne,">",ge)},u.outside=Je,u.prerelease=function(V,ne){var ge=$(V,ne);return ge&&ge.prerelease.length?ge.prerelease:null},u.intersects=function(V,ne,ge){return V=new ct(V,ge),ne=new ct(ne,ge),V.intersects(ne)},u.coerce=function(V,ne){if(V instanceof h)return V;if(typeof V=="number"&&(V=String(V)),typeof V!="string")return null;var ge=null;if((ne=ne||{}).rtl){for(var Z;(Z=A[D.COERCERTL].exec(V))&&(!ge||ge.index+ge[0].length!==V.length);)ge&&Z.index+Z[0].length===ge.index+ge[0].length||(ge=Z),A[D.COERCERTL].lastIndex=Z.index+Z[1].length+Z[2].length;A[D.COERCERTL].lastIndex=-1}else ge=V.match(A[D.COERCE]);return ge===null?null:$(ge[2]+"."+(ge[3]||"0")+"."+(ge[4]||"0"),ne)}}).call(this,f(5))},function(i,u){function f(g){return(f=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(g)}var c;c=function(){return this}();try{c=c||new Function("return this")()}catch(g){(typeof window=="undefined"?"undefined":f(window))==="object"&&(c=window)}i.exports=c},function(i,u){var f,c,g=i.exports={};function t(){throw new Error("setTimeout has not been defined")}function C(){throw new Error("clearTimeout has not been defined")}function A(ce){if(f===setTimeout)return setTimeout(ce,0);if((f===t||!f)&&setTimeout)return f=setTimeout,setTimeout(ce,0);try{return f(ce,0)}catch(Q){try{return f.call(null,ce,0)}catch(oe){return f.call(this,ce,0)}}}(function(){try{f=typeof setTimeout=="function"?setTimeout:t}catch(ce){f=t}try{c=typeof clearTimeout=="function"?clearTimeout:C}catch(ce){c=C}})();var x,D=[],L=!1,N=-1;function j(){L&&x&&(L=!1,x.length?D=x.concat(D):N=-1,D.length&&$())}function $(){if(!L){var ce=A(j);L=!0;for(var Q=D.length;Q;){for(x=D,D=[];++N1)for(var oe=1;oethis[C])return De(this,this[h].get(Ue)),!1;var Je=this[h].get(Ue).value;return this[N]&&(this[j]||this[N](Ue,Je.value)),Je.now=Ot,Je.maxAge=At,Je.value=be,this[A]+=Nt-Je.length,Je.length=Nt,this.get(Ue),me(this),!0}var V=new J(Ue,be,Nt,Ot,At);return V.length>this[C]?(this[N]&&this[N](Ue,be),!1):(this[A]+=V.length,this[$].unshift(V),this[h].set(Ue,this[$].head),me(this),!0)}},{key:"has",value:function(Ue){if(!this[h].has(Ue))return!1;var be=this[h].get(Ue).value;return!Se(this,be)}},{key:"get",value:function(Ue){return oe(this,Ue,!0)}},{key:"peek",value:function(Ue){return oe(this,Ue,!1)}},{key:"pop",value:function(){var Ue=this[$].tail;return Ue?(De(this,Ue),Ue.value):null}},{key:"del",value:function(Ue){De(this,this[h].get(Ue))}},{key:"load",value:function(Ue){this.reset();for(var be=Date.now(),At=Ue.length-1;At>=0;At--){var Ot=Ue[At],Nt=Ot.e||0;if(Nt===0)this.set(Ot.k,Ot.v);else{var Je=Nt-be;Je>0&&this.set(Ot.k,Ot.v,Je)}}}},{key:"prune",value:function(){var Ue=this;this[h].forEach(function(be,At){return oe(Ue,At,!1)})}},{key:"max",set:function(Ue){if(typeof Ue!="number"||Ue<0)throw new TypeError("max must be a non-negative number");this[C]=Ue||1/0,me(this)},get:function(){return this[C]}},{key:"allowStale",set:function(Ue){this[D]=!!Ue},get:function(){return this[D]}},{key:"maxAge",set:function(Ue){if(typeof Ue!="number")throw new TypeError("maxAge must be a non-negative number");this[L]=Ue,me(this)},get:function(){return this[L]}},{key:"lengthCalculator",set:function(Ue){var be=this;typeof Ue!="function"&&(Ue=ce),Ue!==this[x]&&(this[x]=Ue,this[A]=0,this[$].forEach(function(At){At.length=be[x](At.value,At.key),be[A]+=At.length})),me(this)},get:function(){return this[x]}},{key:"length",get:function(){return this[A]}},{key:"itemCount",get:function(){return this[$].length}}])&&g(Le.prototype,ot),ct&&g(Le,ct),Oe}(),oe=function(Oe,Le,ot){var ct=Oe[h].get(Le);if(ct){var Ue=ct.value;if(Se(Oe,Ue)){if(De(Oe,ct),!Oe[D])return}else ot&&(Oe[re]&&(ct.value.now=Date.now()),Oe[$].unshiftNode(ct));return Ue.value}},Se=function(Oe,Le){if(!Le||!Le.maxAge&&!Oe[L])return!1;var ot=Date.now()-Le.now;return Le.maxAge?ot>Le.maxAge:Oe[L]&&ot>Oe[L]},me=function(Oe){if(Oe[A]>Oe[C])for(var Le=Oe[$].tail;Oe[A]>Oe[C]&&Le!==null;){var ot=Le.prev;De(Oe,Le),Le=ot}},De=function(Oe,Le){if(Le){var ot=Le.value;Oe[N]&&Oe[N](ot.key,ot.value),Oe[A]-=ot.length,Oe[h].delete(ot.key),Oe[$].removeNode(Le)}},J=function Oe(Le,ot,ct,Ue,be){c(this,Oe),this.key=Le,this.value=ot,this.length=ct,this.now=Ue,this.maxAge=be||0},Te=function(Oe,Le,ot,ct){var Ue=ot.value;Se(Oe,Ue)&&(De(Oe,ot),Oe[D]||(Ue=void 0)),Ue&&Le.call(ct,Ue.value,Ue.key,Oe)};i.exports=Q},function(i,u,f){(function(c){function g(t){return(g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(C){return typeof C}:function(C){return C&&typeof Symbol=="function"&&C.constructor===Symbol&&C!==Symbol.prototype?"symbol":typeof C})(t)}i.exports=function(){if(typeof document=="undefined"||!document.addEventListener)return null;var t,C,A,x={};return x.copy=function(){var D=!1,L=null,N=!1;function j(){D=!1,L=null,N&&window.getSelection().removeAllRanges(),N=!1}return document.addEventListener("copy",function($){if(D){for(var h in L)$.clipboardData.setData(h,L[h]);$.preventDefault()}}),function($){return new Promise(function(h,re){D=!0,typeof $=="string"?L={"text/plain":$}:$ instanceof Node?L={"text/html":new XMLSerializer().serializeToString($)}:$ instanceof Object?L=$:re("Invalid data type. Must be string, DOM node, or an object mapping MIME types to strings."),function ce(Q){try{if(document.execCommand("copy"))j(),h();else{if(Q)throw j(),new Error("Unable to copy. Perhaps it's not available in your browser?");(function(){var oe=document.getSelection();if(!document.queryCommandEnabled("copy")&&oe.isCollapsed){var Se=document.createRange();Se.selectNodeContents(document.body),oe.removeAllRanges(),oe.addRange(Se),N=!0}})(),ce(!0)}}catch(oe){j(),re(oe)}}(!1)})}}(),x.paste=(A=!1,document.addEventListener("paste",function(D){if(A){A=!1,D.preventDefault();var L=t;t=null,L(D.clipboardData.getData(C))}}),function(D){return new Promise(function(L,N){A=!0,t=L,C=D||"text/plain";try{document.execCommand("paste")||(A=!1,N(new Error("Unable to paste. Pasting only works in Internet Explorer at the moment.")))}catch(j){A=!1,N(new Error(j))}})}),typeof ClipboardEvent=="undefined"&&window.clipboardData!==void 0&&window.clipboardData.setData!==void 0&&(function(D){function L(me,De){return function(){me.apply(De,arguments)}}function N(me){if(g(this)!="object")throw new TypeError("Promises must be constructed via new");if(typeof me!="function")throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],Q(me,L($,this),L(h,this))}function j(me){var De=this;return this._state===null?void this._deferreds.push(me):void oe(function(){var J=De._state?me.onFulfilled:me.onRejected;if(J!==null){var Te;try{Te=J(De._value)}catch(Oe){return void me.reject(Oe)}me.resolve(Te)}else(De._state?me.resolve:me.reject)(De._value)})}function $(me){try{if(me===this)throw new TypeError("A promise cannot be resolved with itself.");if(me&&(g(me)=="object"||typeof me=="function")){var De=me.then;if(typeof De=="function")return void Q(L(De,me),L($,this),L(h,this))}this._state=!0,this._value=me,re.call(this)}catch(J){h.call(this,J)}}function h(me){this._state=!1,this._value=me,re.call(this)}function re(){for(var me=0,De=this._deferreds.length;De>me;me++)j.call(this,this._deferreds[me]);this._deferreds=null}function ce(me,De,J,Te){this.onFulfilled=typeof me=="function"?me:null,this.onRejected=typeof De=="function"?De:null,this.resolve=J,this.reject=Te}function Q(me,De,J){var Te=!1;try{me(function(Oe){Te||(Te=!0,De(Oe))},function(Oe){Te||(Te=!0,J(Oe))})}catch(Oe){if(Te)return;Te=!0,J(Oe)}}var oe=N.immediateFn||typeof c=="function"&&c||function(me){setTimeout(me,1)},Se=Array.isArray||function(me){return Object.prototype.toString.call(me)==="[object Array]"};N.prototype.catch=function(me){return this.then(null,me)},N.prototype.then=function(me,De){var J=this;return new N(function(Te,Oe){j.call(J,new ce(me,De,Te,Oe))})},N.all=function(){var me=Array.prototype.slice.call(arguments.length===1&&Se(arguments[0])?arguments[0]:arguments);return new N(function(De,J){function Te(ot,ct){try{if(ct&&(g(ct)=="object"||typeof ct=="function")){var Ue=ct.then;if(typeof Ue=="function")return void Ue.call(ct,function(be){Te(ot,be)},J)}me[ot]=ct,--Oe==0&&De(me)}catch(be){J(be)}}if(me.length===0)return De([]);for(var Oe=me.length,Le=0;LeTe;Te++)me[Te].then(De,J)})},i.exports?i.exports=N:D.Promise||(D.Promise=N)}(this),x.copy=function(D){return new Promise(function(L,N){if(typeof D!="string"&&!("text/plain"in D))throw new Error("You must provide a text/plain type.");var j=typeof D=="string"?D:D["text/plain"];window.clipboardData.setData("Text",j)?L():N(new Error("Copying was rejected."))})},x.paste=function(){return new Promise(function(D,L){var N=window.clipboardData.getData("Text");N?D(N):L(new Error("Pasting was rejected."))})}),x}()}).call(this,f(13).setImmediate)},function(i,u,f){"use strict";i.exports=f(15)},function(i,u,f){"use strict";f.r(u),u.default=`:root { - /** - * IMPORTANT: When new theme variables are added below\u2013 also add them to SettingsContext updateThemeVariables() - */ - - /* Light theme */ - --light-color-attribute-name: #ef6632; - --light-color-attribute-name-not-editable: #23272f; - --light-color-attribute-name-inverted: rgba(255, 255, 255, 0.7); - --light-color-attribute-value: #1a1aa6; - --light-color-attribute-value-inverted: #ffffff; - --light-color-attribute-editable-value: #1a1aa6; - --light-color-background: #ffffff; - --light-color-background-hover: rgba(0, 136, 250, 0.1); - --light-color-background-inactive: #e5e5e5; - --light-color-background-invalid: #fff0f0; - --light-color-background-selected: #0088fa; - --light-color-button-background: #ffffff; - --light-color-button-background-focus: #ededed; - --light-color-button: #5f6673; - --light-color-button-disabled: #cfd1d5; - --light-color-button-active: #0088fa; - --light-color-button-focus: #23272f; - --light-color-button-hover: #23272f; - --light-color-border: #eeeeee; - --light-color-commit-did-not-render-fill: #cfd1d5; - --light-color-commit-did-not-render-fill-text: #000000; - --light-color-commit-did-not-render-pattern: #cfd1d5; - --light-color-commit-did-not-render-pattern-text: #333333; - --light-color-commit-gradient-0: #37afa9; - --light-color-commit-gradient-1: #63b19e; - --light-color-commit-gradient-2: #80b393; - --light-color-commit-gradient-3: #97b488; - --light-color-commit-gradient-4: #abb67d; - --light-color-commit-gradient-5: #beb771; - --light-color-commit-gradient-6: #cfb965; - --light-color-commit-gradient-7: #dfba57; - --light-color-commit-gradient-8: #efbb49; - --light-color-commit-gradient-9: #febc38; - --light-color-commit-gradient-text: #000000; - --light-color-component-name: #6a51b2; - --light-color-component-name-inverted: #ffffff; - --light-color-component-badge-background: rgba(0, 0, 0, 0.1); - --light-color-component-badge-background-inverted: rgba(255, 255, 255, 0.25); - --light-color-component-badge-count: #777d88; - --light-color-component-badge-count-inverted: rgba(255, 255, 255, 0.7); - --light-color-context-background: rgba(0,0,0,.9); - --light-color-context-background-hover: rgba(255, 255, 255, 0.1); - --light-color-context-background-selected: #178fb9; - --light-color-context-border: #3d424a; - --light-color-context-text: #ffffff; - --light-color-context-text-selected: #ffffff; - --light-color-dim: #777d88; - --light-color-dimmer: #cfd1d5; - --light-color-dimmest: #eff0f1; - --light-color-error-background: hsl(0, 100%, 97%); - --light-color-error-border: hsl(0, 100%, 92%); - --light-color-error-text: #ff0000; - --light-color-expand-collapse-toggle: #777d88; - --light-color-link: #0000ff; - --light-color-modal-background: rgba(255, 255, 255, 0.75); - --light-color-record-active: #fc3a4b; - --light-color-record-hover: #3578e5; - --light-color-record-inactive: #0088fa; - --light-color-scroll-thumb: #c2c2c2; - --light-color-scroll-track: #fafafa; - --light-color-search-match: yellow; - --light-color-search-match-current: #f7923b; - --light-color-selected-tree-highlight-active: rgba(0, 136, 250, 0.1); - --light-color-selected-tree-highlight-inactive: rgba(0, 0, 0, 0.05); - --light-color-shadow: rgba(0, 0, 0, 0.25); - --light-color-tab-selected-border: #0088fa; - --light-color-text: #000000; - --light-color-text-invalid: #ff0000; - --light-color-text-selected: #ffffff; - --light-color-toggle-background-invalid: #fc3a4b; - --light-color-toggle-background-on: #0088fa; - --light-color-toggle-background-off: #cfd1d5; - --light-color-toggle-text: #ffffff; - --light-color-tooltip-background: rgba(0, 0, 0, 0.9); - --light-color-tooltip-text: #ffffff; - - /* Dark theme */ - --dark-color-attribute-name: #9d87d2; - --dark-color-attribute-name-not-editable: #ededed; - --dark-color-attribute-name-inverted: #282828; - --dark-color-attribute-value: #cedae0; - --dark-color-attribute-value-inverted: #ffffff; - --dark-color-attribute-editable-value: yellow; - --dark-color-background: #282c34; - --dark-color-background-hover: rgba(255, 255, 255, 0.1); - --dark-color-background-inactive: #3d424a; - --dark-color-background-invalid: #5c0000; - --dark-color-background-selected: #178fb9; - --dark-color-button-background: #282c34; - --dark-color-button-background-focus: #3d424a; - --dark-color-button: #afb3b9; - --dark-color-button-active: #61dafb; - --dark-color-button-disabled: #4f5766; - --dark-color-button-focus: #a2e9fc; - --dark-color-button-hover: #ededed; - --dark-color-border: #3d424a; - --dark-color-commit-did-not-render-fill: #777d88; - --dark-color-commit-did-not-render-fill-text: #000000; - --dark-color-commit-did-not-render-pattern: #666c77; - --dark-color-commit-did-not-render-pattern-text: #ffffff; - --dark-color-commit-gradient-0: #37afa9; - --dark-color-commit-gradient-1: #63b19e; - --dark-color-commit-gradient-2: #80b393; - --dark-color-commit-gradient-3: #97b488; - --dark-color-commit-gradient-4: #abb67d; - --dark-color-commit-gradient-5: #beb771; - --dark-color-commit-gradient-6: #cfb965; - --dark-color-commit-gradient-7: #dfba57; - --dark-color-commit-gradient-8: #efbb49; - --dark-color-commit-gradient-9: #febc38; - --dark-color-commit-gradient-text: #000000; - --dark-color-component-name: #61dafb; - --dark-color-component-name-inverted: #282828; - --dark-color-component-badge-background: rgba(255, 255, 255, 0.25); - --dark-color-component-badge-background-inverted: rgba(0, 0, 0, 0.25); - --dark-color-component-badge-count: #8f949d; - --dark-color-component-badge-count-inverted: rgba(255, 255, 255, 0.7); - --dark-color-context-background: rgba(255,255,255,.9); - --dark-color-context-background-hover: rgba(0, 136, 250, 0.1); - --dark-color-context-background-selected: #0088fa; - --dark-color-context-border: #eeeeee; - --dark-color-context-text: #000000; - --dark-color-context-text-selected: #ffffff; - --dark-color-dim: #8f949d; - --dark-color-dimmer: #777d88; - --dark-color-dimmest: #4f5766; - --dark-color-error-background: #200; - --dark-color-error-border: #900; - --dark-color-error-text: #f55; - --dark-color-expand-collapse-toggle: #8f949d; - --dark-color-link: #61dafb; - --dark-color-modal-background: rgba(0, 0, 0, 0.75); - --dark-color-record-active: #fc3a4b; - --dark-color-record-hover: #a2e9fc; - --dark-color-record-inactive: #61dafb; - --dark-color-scroll-thumb: #afb3b9; - --dark-color-scroll-track: #313640; - --dark-color-search-match: yellow; - --dark-color-search-match-current: #f7923b; - --dark-color-selected-tree-highlight-active: rgba(23, 143, 185, 0.15); - --dark-color-selected-tree-highlight-inactive: rgba(255, 255, 255, 0.05); - --dark-color-shadow: rgba(0, 0, 0, 0.5); - --dark-color-tab-selected-border: #178fb9; - --dark-color-text: #ffffff; - --dark-color-text-invalid: #ff8080; - --dark-color-text-selected: #ffffff; - --dark-color-toggle-background-invalid: #fc3a4b; - --dark-color-toggle-background-on: #178fb9; - --dark-color-toggle-background-off: #777d88; - --dark-color-toggle-text: #ffffff; - --dark-color-tooltip-background: rgba(255, 255, 255, 0.9); - --dark-color-tooltip-text: #000000; - - /* Font smoothing */ - --light-font-smoothing: auto; - --dark-font-smoothing: antialiased; - --font-smoothing: auto; - - /* Compact density */ - --compact-font-size-monospace-small: 9px; - --compact-font-size-monospace-normal: 11px; - --compact-font-size-monospace-large: 15px; - --compact-font-size-sans-small: 10px; - --compact-font-size-sans-normal: 12px; - --compact-font-size-sans-large: 14px; - --compact-line-height-data: 18px; - --compact-root-font-size: 16px; - - /* Comfortable density */ - --comfortable-font-size-monospace-small: 10px; - --comfortable-font-size-monospace-normal: 13px; - --comfortable-font-size-monospace-large: 17px; - --comfortable-font-size-sans-small: 12px; - --comfortable-font-size-sans-normal: 14px; - --comfortable-font-size-sans-large: 16px; - --comfortable-line-height-data: 22px; - --comfortable-root-font-size: 20px; - - /* GitHub.com system fonts */ - --font-family-monospace: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, - Courier, monospace; - --font-family-sans: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, - Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; - - /* Constant values shared between JS and CSS */ - --interaction-commit-size: 10px; - --interaction-label-width: 200px; -} -`},function(i,u,f){"use strict";function c(x){var D=this;if(D instanceof c||(D=new c),D.tail=null,D.head=null,D.length=0,x&&typeof x.forEach=="function")x.forEach(function(j){D.push(j)});else if(arguments.length>0)for(var L=0,N=arguments.length;L1)L=D;else{if(!this.head)throw new TypeError("Reduce of empty list with no initial value");N=this.head.next,L=this.head.value}for(var j=0;N!==null;j++)L=x(L,N.value,j),N=N.next;return L},c.prototype.reduceReverse=function(x,D){var L,N=this.tail;if(arguments.length>1)L=D;else{if(!this.tail)throw new TypeError("Reduce of empty list with no initial value");N=this.tail.prev,L=this.tail.value}for(var j=this.length-1;N!==null;j--)L=x(L,N.value,j),N=N.prev;return L},c.prototype.toArray=function(){for(var x=new Array(this.length),D=0,L=this.head;L!==null;D++)x[D]=L.value,L=L.next;return x},c.prototype.toArrayReverse=function(){for(var x=new Array(this.length),D=0,L=this.tail;L!==null;D++)x[D]=L.value,L=L.prev;return x},c.prototype.slice=function(x,D){(D=D||this.length)<0&&(D+=this.length),(x=x||0)<0&&(x+=this.length);var L=new c;if(Dthis.length&&(D=this.length);for(var N=0,j=this.head;j!==null&&Nthis.length&&(D=this.length);for(var N=this.length,j=this.tail;j!==null&&N>D;N--)j=j.prev;for(;j!==null&&N>x;N--,j=j.prev)L.push(j.value);return L},c.prototype.splice=function(x,D){x>this.length&&(x=this.length-1),x<0&&(x=this.length+x);for(var L=0,N=this.head;N!==null&&L=0&&(A._idleTimeoutId=setTimeout(function(){A._onTimeout&&A._onTimeout()},x))},f(14),u.setImmediate=typeof self!="undefined"&&self.setImmediate||c!==void 0&&c.setImmediate||this&&this.setImmediate,u.clearImmediate=typeof self!="undefined"&&self.clearImmediate||c!==void 0&&c.clearImmediate||this&&this.clearImmediate}).call(this,f(4))},function(i,u,f){(function(c,g){(function(t,C){"use strict";if(!t.setImmediate){var A,x,D,L,N,j=1,$={},h=!1,re=t.document,ce=Object.getPrototypeOf&&Object.getPrototypeOf(t);ce=ce&&ce.setTimeout?ce:t,{}.toString.call(t.process)==="[object process]"?A=function(Se){g.nextTick(function(){oe(Se)})}:function(){if(t.postMessage&&!t.importScripts){var Se=!0,me=t.onmessage;return t.onmessage=function(){Se=!1},t.postMessage("","*"),t.onmessage=me,Se}}()?(L="setImmediate$"+Math.random()+"$",N=function(Se){Se.source===t&&typeof Se.data=="string"&&Se.data.indexOf(L)===0&&oe(+Se.data.slice(L.length))},t.addEventListener?t.addEventListener("message",N,!1):t.attachEvent("onmessage",N),A=function(Se){t.postMessage(L+Se,"*")}):t.MessageChannel?((D=new MessageChannel).port1.onmessage=function(Se){oe(Se.data)},A=function(Se){D.port2.postMessage(Se)}):re&&"onreadystatechange"in re.createElement("script")?(x=re.documentElement,A=function(Se){var me=re.createElement("script");me.onreadystatechange=function(){oe(Se),me.onreadystatechange=null,x.removeChild(me),me=null},x.appendChild(me)}):A=function(Se){setTimeout(oe,0,Se)},ce.setImmediate=function(Se){typeof Se!="function"&&(Se=new Function(""+Se));for(var me=new Array(arguments.length-1),De=0;Dene;ne++)if((V=Q(Je,Ot,ne))!==-1){ce=ne,Ot=V;break e}Ot=-1}}e:{if(Je=Nt,(V=j().get(At.primitive))!==void 0){for(ne=0;neOt-Je?null:Nt.slice(Je,Ot-1))!==null){if(Ot=0,Le!==null){for(;OtOt;Le--)ot=Ue.pop()}for(Le=Nt.length-Ot-1;1<=Le;Le--)Ot=[],ot.push({id:null,isStateEditable:!1,name:Se(Nt[Le-1].functionName),value:void 0,subHooks:Ot}),Ue.push(ot),ot=Ot;Le=Nt}Ot=(Nt=At.primitive)==="Context"||Nt==="DebugValue"?null:ct++,ot.push({id:Ot,isStateEditable:Nt==="Reducer"||Nt==="State",name:Nt,value:At.value,subHooks:[]})}return function ge(Z,Ae){for(var at=[],it=0;it-1&&($=$.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var h=$.replace(/^\s+/,"").replace(/\(eval code/g,"("),re=h.match(/ (\((.+):(\d+):(\d+)\)$)/),ce=(h=re?h.replace(re[0],""):h).split(/\s+/).slice(1),Q=this.extractLocation(re?re[1]:ce.pop()),oe=ce.join(" ")||void 0,Se=["eval",""].indexOf(Q[0])>-1?void 0:Q[0];return new x({functionName:oe,fileName:Se,lineNumber:Q[1],columnNumber:Q[2],source:$})},this)},parseFFOrSafari:function(j){return j.stack.split(` -`).filter(function($){return!$.match(N)},this).map(function($){if($.indexOf(" > eval")>-1&&($=$.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),$.indexOf("@")===-1&&$.indexOf(":")===-1)return new x({functionName:$});var h=/((.*".+"[^@]*)?[^@]*)(?:@)/,re=$.match(h),ce=re&&re[1]?re[1]:void 0,Q=this.extractLocation($.replace(h,""));return new x({functionName:ce,fileName:Q[0],lineNumber:Q[1],columnNumber:Q[2],source:$})},this)},parseOpera:function(j){return!j.stacktrace||j.message.indexOf(` -`)>-1&&j.message.split(` -`).length>j.stacktrace.split(` -`).length?this.parseOpera9(j):j.stack?this.parseOpera11(j):this.parseOpera10(j)},parseOpera9:function(j){for(var $=/Line (\d+).*script (?:in )?(\S+)/i,h=j.message.split(` -`),re=[],ce=2,Q=h.length;ce/,"$2").replace(/\([^)]*\)/g,"")||void 0;Q.match(/\(([^)]*)\)/)&&(h=Q.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var Se=h===void 0||h==="[arguments not available]"?void 0:h.split(",");return new x({functionName:oe,args:Se,fileName:ce[0],lineNumber:ce[1],columnNumber:ce[2],source:$})},this)}}})=="function"?c.apply(u,g):c)===void 0||(i.exports=t)})()},function(i,u,f){var c,g,t;(function(C,A){"use strict";g=[],(t=typeof(c=function(){function x(oe){return oe.charAt(0).toUpperCase()+oe.substring(1)}function D(oe){return function(){return this[oe]}}var L=["isConstructor","isEval","isNative","isToplevel"],N=["columnNumber","lineNumber"],j=["fileName","functionName","source"],$=L.concat(N,j,["args"]);function h(oe){if(oe)for(var Se=0;Se<$.length;Se++)oe[$[Se]]!==void 0&&this["set"+x($[Se])](oe[$[Se]])}h.prototype={getArgs:function(){return this.args},setArgs:function(oe){if(Object.prototype.toString.call(oe)!=="[object Array]")throw new TypeError("Args must be an Array");this.args=oe},getEvalOrigin:function(){return this.evalOrigin},setEvalOrigin:function(oe){if(oe instanceof h)this.evalOrigin=oe;else{if(!(oe instanceof Object))throw new TypeError("Eval Origin must be an Object or StackFrame");this.evalOrigin=new h(oe)}},toString:function(){var oe=this.getFileName()||"",Se=this.getLineNumber()||"",me=this.getColumnNumber()||"",De=this.getFunctionName()||"";return this.getIsEval()?oe?"[eval] ("+oe+":"+Se+":"+me+")":"[eval]:"+Se+":"+me:De?De+" ("+oe+":"+Se+":"+me+")":oe+":"+Se+":"+me}},h.fromString=function(oe){var Se=oe.indexOf("("),me=oe.lastIndexOf(")"),De=oe.substring(0,Se),J=oe.substring(Se+1,me).split(","),Te=oe.substring(me+1);if(Te.indexOf("@")===0)var Oe=/@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(Te,""),Le=Oe[1],ot=Oe[2],ct=Oe[3];return new h({functionName:De,args:J||void 0,fileName:Le,lineNumber:ot||void 0,columnNumber:ct||void 0})};for(var re=0;re1?de-1:0),ve=1;ve=0&&de.splice(W,1)}}}])&&c(R.prototype,U),H&&c(R,H),F}(),t=f(2),C=f.n(t);try{var A=f(9).default,x=function(F){var R=new RegExp("".concat(F,": ([0-9]+)")),U=A.match(R);return parseInt(U[1],10)};x("comfortable-line-height-data"),x("compact-line-height-data")}catch(F){}function D(F){try{return sessionStorage.getItem(F)}catch(R){return null}}function L(F){try{sessionStorage.removeItem(F)}catch(R){}}function N(F,R){try{return sessionStorage.setItem(F,R)}catch(U){}}var j=function(F,R){return F===R},$=f(1),h=f.n($);function re(F){return F.ownerDocument?F.ownerDocument.defaultView:null}function ce(F){var R=re(F);return R?R.frameElement:null}function Q(F){var R=me(F);return oe([F.getBoundingClientRect(),{top:R.borderTop,left:R.borderLeft,bottom:R.borderBottom,right:R.borderRight,width:0,height:0}])}function oe(F){return F.reduce(function(R,U){return R==null?U:{top:R.top+U.top,left:R.left+U.left,width:R.width,height:R.height,bottom:R.bottom+U.bottom,right:R.right+U.right}})}function Se(F,R){var U=ce(F);if(U&&U!==R){for(var H=[F.getBoundingClientRect()],fe=U,ue=!1;fe;){var de=Q(fe);if(H.push(de),fe=ce(fe),ue)break;fe&&re(fe)===R&&(ue=!0)}return oe(H)}return F.getBoundingClientRect()}function me(F){var R=window.getComputedStyle(F);return{borderLeft:parseInt(R.borderLeftWidth,10),borderRight:parseInt(R.borderRightWidth,10),borderTop:parseInt(R.borderTopWidth,10),borderBottom:parseInt(R.borderBottomWidth,10),marginLeft:parseInt(R.marginLeft,10),marginRight:parseInt(R.marginRight,10),marginTop:parseInt(R.marginTop,10),marginBottom:parseInt(R.marginBottom,10),paddingLeft:parseInt(R.paddingLeft,10),paddingRight:parseInt(R.paddingRight,10),paddingTop:parseInt(R.paddingTop,10),paddingBottom:parseInt(R.paddingBottom,10)}}function De(F,R){var U;if(typeof Symbol=="undefined"||F[Symbol.iterator]==null){if(Array.isArray(F)||(U=function(ve,Fe){if(!!ve){if(typeof ve=="string")return J(ve,Fe);var Ge=Object.prototype.toString.call(ve).slice(8,-1);if(Ge==="Object"&&ve.constructor&&(Ge=ve.constructor.name),Ge==="Map"||Ge==="Set")return Array.from(ve);if(Ge==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(Ge))return J(ve,Fe)}}(F))||R&&F&&typeof F.length=="number"){U&&(F=U);var H=0,fe=function(){};return{s:fe,n:function(){return H>=F.length?{done:!0}:{done:!1,value:F[H++]}},e:function(ve){throw ve},f:fe}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ue,de=!0,W=!1;return{s:function(){U=F[Symbol.iterator]()},n:function(){var ve=U.next();return de=ve.done,ve},e:function(ve){W=!0,ue=ve},f:function(){try{de||U.return==null||U.return()}finally{if(W)throw ue}}}}function J(F,R){(R==null||R>F.length)&&(R=F.length);for(var U=0,H=new Array(R);Ude.left+de.width&&(K=de.left+de.width-Ge-5),{style:{top:ve+="px",left:K+="px"}}}(R,U,{width:H.width,height:H.height});h()(this.tip.style,fe.style)}}]),F}(),Ue=function(){function F(){Te(this,F);var R=window.__REACT_DEVTOOLS_TARGET_WINDOW__||window;this.window=R;var U=window.__REACT_DEVTOOLS_TARGET_WINDOW__||window;this.tipBoundsWindow=U;var H=R.document;this.container=H.createElement("div"),this.container.style.zIndex="10000000",this.tip=new ct(H,this.container),this.rects=[],H.body.appendChild(this.container)}return Le(F,[{key:"remove",value:function(){this.tip.remove(),this.rects.forEach(function(R){R.remove()}),this.rects.length=0,this.container.parentNode&&this.container.parentNode.removeChild(this.container)}},{key:"inspect",value:function(R,U){for(var H=this,fe=R.filter(function(Xe){return Xe.nodeType===Node.ELEMENT_NODE});this.rects.length>fe.length;)this.rects.pop().remove();if(fe.length!==0){for(;this.rects.length1&&arguments[1]!==void 0?arguments[1]:j,je=void 0,Xe=[],rt=void 0,st=!1,xt=function(lt,Rt){return xe(lt,Xe[Rt])},wt=function(){for(var lt=arguments.length,Rt=Array(lt),yn=0;yn5&&arguments[5]!==void 0?arguments[5]:0,W=cl(F);switch(W){case"html_element":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F.tagName,type:W};case"function":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:typeof F.name!="function"&&F.name?F.name:"function",type:W};case"string":return F.length<=500?F:F.slice(0,500)+"...";case"bigint":case"symbol":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F.toString(),type:W};case"react_element":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:al(F)||"Unknown",type:W};case"array_buffer":case"data_view":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:W==="data_view"?"DataView":"ArrayBuffer",size:F.byteLength,type:W};case"array":return ue=fe(H),de>=2&&!ue?yo(W,!0,F,R,H):F.map(function(Ge,K){return Ds(Ge,R,U,H.concat([K]),fe,ue?1:de+1)});case"html_all_collection":case"typed_array":case"iterator":if(ue=fe(H),de>=2&&!ue)return yo(W,!0,F,R,H);var ve={unserializable:!0,type:W,readonly:!0,size:W==="typed_array"?F.length:void 0,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F.constructor&&F.constructor.name!=="Object"?F.constructor.name:""};return r0(F[Symbol.iterator])&&Array.from(F).forEach(function(Ge,K){return ve[K]=Ds(Ge,R,U,H.concat([K]),fe,ue?1:de+1)}),U.push(H),ve;case"opaque_iterator":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F[Symbol.toStringTag],type:W};case"date":case"regexp":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F.toString(),type:W};case"object":if(ue=fe(H),de>=2&&!ue)return yo(W,!0,F,R,H);var Fe={};return Es(F).forEach(function(Ge){var K=Ge.toString();Fe[K]=Ds(F[Ge],R,U,H.concat([K]),fe,ue?1:de+1)}),Fe;case"infinity":case"nan":case"undefined":return R.push(H),{type:W};default:return F}}function Mu(F){return(Mu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(R){return typeof R}:function(R){return R&&typeof Symbol=="function"&&R.constructor===Symbol&&R!==Symbol.prototype?"symbol":typeof R})(F)}function Gf(F){return function(R){if(Array.isArray(R))return iu(R)}(F)||function(R){if(typeof Symbol!="undefined"&&Symbol.iterator in Object(R))return Array.from(R)}(F)||function(R,U){if(!!R){if(typeof R=="string")return iu(R,U);var H=Object.prototype.toString.call(R).slice(8,-1);if(H==="Object"&&R.constructor&&(H=R.constructor.name),H==="Map"||H==="Set")return Array.from(R);if(H==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(H))return iu(R,U)}}(F)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function iu(F,R){(R==null||R>F.length)&&(R=F.length);for(var U=0,H=new Array(R);UR.toString()?1:R.toString()>F.toString()?-1:0}function Es(F){for(var R=[],U=F,H=function(){var fe=[].concat(Gf(Object.keys(U)),Gf(Object.getOwnPropertySymbols(U))),ue=Object.getOwnPropertyDescriptors(U);fe.forEach(function(de){ue[de].enumerable&&R.push(de)}),U=Object.getPrototypeOf(U)};U!=null;)H();return R}function Uo(F){var R=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Anonymous",U=ou.get(F);if(U!=null)return U;var H=R;return typeof F.displayName=="string"?H=F.displayName:typeof F.name=="string"&&F.name!==""&&(H=F.name),ou.set(F,H),H}var sl=0;function Ss(){return++sl}function Cs(F){var R=ol.get(F);if(R!==void 0)return R;for(var U=new Array(F.length),H=0;H1&&arguments[1]!==void 0?arguments[1]:50;return F.length>R?F.substr(0,R)+"\u2026":F}function Mr(F,R){if(F!=null&&hasOwnProperty.call(F,Ci.type))return R?F[Ci.preview_long]:F[Ci.preview_short];switch(cl(F)){case"html_element":return"<".concat(Ui(F.tagName.toLowerCase())," />");case"function":return Ui("\u0192 ".concat(typeof F.name=="function"?"":F.name,"() {}"));case"string":return'"'.concat(F,'"');case"bigint":return Ui(F.toString()+"n");case"regexp":case"symbol":return Ui(F.toString());case"react_element":return"<".concat(Ui(al(F)||"Unknown")," />");case"array_buffer":return"ArrayBuffer(".concat(F.byteLength,")");case"data_view":return"DataView(".concat(F.buffer.byteLength,")");case"array":if(R){for(var U="",H=0;H0&&(U+=", "),!((U+=Mr(F[H],!1)).length>50));H++);return"[".concat(Ui(U),"]")}var fe=hasOwnProperty.call(F,Ci.size)?F[Ci.size]:F.length;return"Array(".concat(fe,")");case"typed_array":var ue="".concat(F.constructor.name,"(").concat(F.length,")");if(R){for(var de="",W=0;W0&&(de+=", "),!((de+=F[W]).length>50));W++);return"".concat(ue," [").concat(Ui(de),"]")}return ue;case"iterator":var ve=F.constructor.name;if(R){for(var Fe=Array.from(F),Ge="",K=0;K0&&(Ge+=", "),Array.isArray(xe)){var je=Mr(xe[0],!0),Xe=Mr(xe[1],!1);Ge+="".concat(je," => ").concat(Xe)}else Ge+=Mr(xe,!1);if(Ge.length>50)break}return"".concat(ve,"(").concat(F.size,") {").concat(Ui(Ge),"}")}return"".concat(ve,"(").concat(F.size,")");case"opaque_iterator":return F[Symbol.toStringTag];case"date":return F.toString();case"object":if(R){for(var rt=Es(F).sort(ul),st="",xt=0;xt0&&(st+=", "),(st+="".concat(wt.toString(),": ").concat(Mr(F[wt],!1))).length>50)break}return"{".concat(Ui(st),"}")}return"{\u2026}";case"boolean":case"number":case"infinity":case"nan":case"null":case"undefined":return F;default:try{return Ui(""+F)}catch(lt){return"unserializable"}}}var Ac=f(7);function of(F){return(of=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(R){return typeof R}:function(R){return R&&typeof Symbol=="function"&&R.constructor===Symbol&&R!==Symbol.prototype?"symbol":typeof R})(F)}function Ts(F,R){var U=Object.keys(F);if(Object.getOwnPropertySymbols){var H=Object.getOwnPropertySymbols(F);R&&(H=H.filter(function(fe){return Object.getOwnPropertyDescriptor(F,fe).enumerable})),U.push.apply(U,H)}return U}function xs(F){for(var R=1;R2&&arguments[2]!==void 0?arguments[2]:[];if(F!==null){var H=[],fe=[],ue=Ds(F,H,fe,U,R);return{data:ue,cleaned:H,unserializable:fe}}return null}function qo(F){var R,U,H=(R=F,U=new Set,JSON.stringify(R,function(de,W){if(of(W)==="object"&&W!==null){if(U.has(W))return;U.add(W)}return typeof W=="bigint"?W.toString()+"n":W})),fe=H===void 0?"undefined":H,ue=window.__REACT_DEVTOOLS_GLOBAL_HOOK__.clipboardCopyText;typeof ue=="function"?ue(fe).catch(function(de){}):Object(Ac.copy)(fe)}function kr(F,R){var U=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,H=R[U],fe=Array.isArray(F)?F.slice():xs({},F);return U+1===R.length?Array.isArray(fe)?fe.splice(H,1):delete fe[H]:fe[H]=kr(F[H],R,U+1),fe}function Fr(F,R,U){var H=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,fe=R[H],ue=Array.isArray(F)?F.slice():xs({},F);if(H+1===R.length){var de=U[H];ue[de]=ue[fe],Array.isArray(ue)?ue.splice(fe,1):delete ue[fe]}else ue[fe]=Fr(F[fe],R,U,H+1);return ue}function si(F,R,U){var H=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;if(H>=R.length)return U;var fe=R[H],ue=Array.isArray(F)?F.slice():xs({},F);return ue[fe]=si(F[fe],R,U,H+1),ue}var H0=f(8);function b0(F,R){var U=Object.keys(F);if(Object.getOwnPropertySymbols){var H=Object.getOwnPropertySymbols(F);R&&(H=H.filter(function(fe){return Object.getOwnPropertyDescriptor(F,fe).enumerable})),U.push.apply(U,H)}return U}function Bt(F){for(var R=1;R=F.length?{done:!0}:{done:!1,value:F[H++]}},e:function(ve){throw ve},f:fe}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ue,de=!0,W=!1;return{s:function(){U=F[Symbol.iterator]()},n:function(){var ve=U.next();return de=ve.done,ve},e:function(ve){W=!0,ue=ve},f:function(){try{de||U.return==null||U.return()}finally{if(W)throw ue}}}}function As(F,R){if(F){if(typeof F=="string")return uu(F,R);var U=Object.prototype.toString.call(F).slice(8,-1);return U==="Object"&&F.constructor&&(U=F.constructor.name),U==="Map"||U==="Set"?Array.from(F):U==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(U)?uu(F,R):void 0}}function uu(F,R){(R==null||R>F.length)&&(R=F.length);for(var U=0,H=new Array(R);U0){var et=ue(X);if(et!=null){var Dt,bt=ks(du);try{for(bt.s();!(Dt=bt.n()).done;)if(Dt.value.test(et))return!0}catch(fn){bt.e(fn)}finally{bt.f()}}}if(Y!=null&&Yu.size>0){var Zt,qt=Y.fileName,Ut=ks(Yu);try{for(Ut.s();!(Zt=Ut.n()).done;)if(Zt.value.test(qt))return!0}catch(fn){Ut.e(fn)}finally{Ut.f()}}return!1}function Gr(X){var Y=X.type;switch(X.tag){case Xe:case ar:return 1;case je:case rn:return 5;case wt:return 6;case lt:return 11;case yn:return 7;case Rt:case sn:case xt:return 9;case Hn:case Cr:return 8;case He:return 12;case Qe:return 13;default:switch(de(Y)){case 60111:case"Symbol(react.concurrent_mode)":case"Symbol(react.async_mode)":return 9;case 60109:case"Symbol(react.provider)":return 2;case 60110:case"Symbol(react.context)":return 2;case 60108:case"Symbol(react.strict_mode)":return 9;case 60114:case"Symbol(react.profiler)":return 10;default:return 9}}}function ir(X){if(Co.has(X))return X;var Y=X.alternate;return Y!=null&&Co.has(Y)?Y:(Co.add(X),X)}window.__REACT_DEVTOOLS_COMPONENT_FILTERS__!=null?qs(window.__REACT_DEVTOOLS_COMPONENT_FILTERS__):qs([{type:1,value:7,isEnabled:!0}]);var L0=new Map,Y0=new Map,Co=new Set,$u=new Map,Vo=new Map,Rr=-1;function Jn(X){if(!L0.has(X)){var Y=Ss();L0.set(X,Y),Y0.set(Y,X)}return L0.get(X)}function ai(X){switch(Gr(X)){case 1:if(N0!==null){var Y=Jn(ir(X)),ye=Vr(X);ye!==null&&N0.set(Y,ye)}}}var o0={};function Vr(X){switch(Gr(X)){case 1:var Y=X.stateNode,ye=o0,he=o0;return Y!=null&&(Y.constructor&&Y.constructor.contextType!=null?he=Y.context:(ye=Y.context)&&Object.keys(ye).length===0&&(ye=o0)),[ye,he];default:return null}}function ff(X){switch(Gr(X)){case 1:if(N0!==null){var Y=Jn(ir(X)),ye=N0.has(Y)?N0.get(Y):null,he=Vr(X);if(ye==null||he==null)return null;var We=Ru(ye,2),et=We[0],Dt=We[1],bt=Ru(he,2),Zt=bt[0],qt=bt[1];if(Zt!==o0)return $0(et,Zt);if(qt!==o0)return Dt!==qt}}return null}function cf(X,Y){if(X==null||Y==null)return!1;if(Y.hasOwnProperty("baseState")&&Y.hasOwnProperty("memoizedState")&&Y.hasOwnProperty("next")&&Y.hasOwnProperty("queue"))for(;Y!==null;){if(Y.memoizedState!==X.memoizedState)return!0;Y=Y.next,X=X.next}return!1}function $0(X,Y){if(X==null||Y==null||Y.hasOwnProperty("baseState")&&Y.hasOwnProperty("memoizedState")&&Y.hasOwnProperty("next")&&Y.hasOwnProperty("queue"))return null;var ye,he=[],We=ks(new Set([].concat(c0(Object.keys(X)),c0(Object.keys(Y)))));try{for(We.s();!(ye=We.n()).done;){var et=ye.value;X[et]!==Y[et]&&he.push(et)}}catch(Dt){We.e(Dt)}finally{We.f()}return he}function K0(X,Y){switch(Y.tag){case Xe:case je:case rt:case Hn:case Cr:return(zo(Y)&K)===K;default:return X.memoizedProps!==Y.memoizedProps||X.memoizedState!==Y.memoizedState||X.ref!==Y.ref}}var ae=[],Be=[],Ie=[],ht=[],mt=new Map,wn=0,Gn=null;function $t(X){ae.push(X)}function X0(X){if(ae.length!==0||Be.length!==0||Ie.length!==0||Gn!==null||u0){var Y=Be.length+Ie.length+(Gn===null?0:1),ye=new Array(3+wn+(Y>0?2+Y:0)+ae.length),he=0;if(ye[he++]=R,ye[he++]=Rr,ye[he++]=wn,mt.forEach(function(bt,Zt){ye[he++]=Zt.length;for(var qt=Cs(Zt),Ut=0;Ut0){ye[he++]=2,ye[he++]=Y;for(var We=Be.length-1;We>=0;We--)ye[he++]=Be[We];for(var et=0;et0?X.forEach(function(Y){F.emit("operations",Y)}):(Fn!==null&&(zr=!0),F.getFiberRoots(R).forEach(function(Y){T0(Rr=Jn(ir(Y.current)),Y.current),u0&&Y.memoizedInteractions!=null&&(uo={changeDescriptions:To?new Map:null,durations:[],commitTime:Os()-v0,interactions:Array.from(Y.memoizedInteractions).map(function(ye){return Bt(Bt({},ye),{},{timestamp:ye.timestamp-v0})}),maxActualDuration:0,priorityLevel:null}),$r(Y.current,null,!1,!1),X0(),Rr=-1}))},getBestMatchForTrackedPath:function(){if(Fn===null||pi===null)return null;for(var X=pi;X!==null&&F0(X);)X=X.return;return X===null?null:{id:Jn(ir(X)),isFullMatch:Br===Fn.length-1}},getDisplayNameForFiberID:function(X){var Y=Y0.get(X);return Y!=null?ue(Y):null},getFiberIDForNative:function(X){var Y=arguments.length>1&&arguments[1]!==void 0&&arguments[1],ye=U.findFiberByHostInstance(X);if(ye!=null){if(Y)for(;ye!==null&&F0(ye);)ye=ye.return;return Jn(ir(ye))}return null},getInstanceAndStyle:function(X){var Y=null,ye=null,he=J0(X);return he!==null&&(Y=he.stateNode,he.memoizedProps!==null&&(ye=he.memoizedProps.style)),{instance:Y,style:ye}},getOwnersList:function(X){var Y=J0(X);if(Y==null)return null;var ye=Y._debugOwner,he=[{displayName:ue(Y)||"Anonymous",id:X,type:Gr(Y)}];if(ye)for(var We=ye;We!==null;)he.unshift({displayName:ue(We)||"Anonymous",id:Jn(ir(We)),type:Gr(We)}),We=We._debugOwner||null;return he},getPathForElement:function(X){var Y=Y0.get(X);if(Y==null)return null;for(var ye=[];Y!==null;)ye.push(Ai(Y)),Y=Y.return;return ye.reverse(),ye},getProfilingData:function(){var X=[];if(pu===null)throw Error("getProfilingData() called before any profiling data was recorded");return pu.forEach(function(Y,ye){var he=[],We=[],et=new Map,Dt=new Map,bt=so!==null&&so.get(ye)||"Unknown";C0!=null&&C0.forEach(function(Zt,qt){di!=null&&di.get(qt)===ye&&We.push([qt,Zt])}),Y.forEach(function(Zt,qt){var Ut=Zt.changeDescriptions,fn=Zt.durations,_t=Zt.interactions,_r=Zt.maxActualDuration,Wr=Zt.priorityLevel,Ar=Zt.commitTime,z=[];_t.forEach(function(s0){et.has(s0.id)||et.set(s0.id,s0),z.push(s0.id);var t0=Dt.get(s0.id);t0!=null?t0.push(qt):Dt.set(s0.id,[qt])});for(var dr=[],Or=[],Qn=0;Qn1?kn.set(Ut,fn-1):kn.delete(Ut),wr.delete(Zt)}(Rr),Yr(ye,!1))}else T0(Rr,ye),$r(ye,null,!1,!1);if(u0&&We){var bt=pu.get(Rr);bt!=null?bt.push(uo):pu.set(Rr,[uo])}X0(),oo&&F.emit("traceUpdates",Hi),Rr=-1},handleCommitFiberUnmount:function(X){Yr(X,!1)},inspectElement:function(X,Y){if(Tr(X)){if(Y!=null){R0(Y);var ye=null;return Y[0]==="hooks"&&(ye="hooks"),{id:X,type:"hydrated-path",path:Y,value:qi(Ti(S0,Y),Nr(null,ye),Y)}}return{id:X,type:"no-change"}}if(El=!1,S0!==null&&S0.id===X||(Q0={}),(S0=af(X))===null)return{id:X,type:"not-found"};Y!=null&&R0(Y),function(We){var et=We.hooks,Dt=We.id,bt=We.props,Zt=Y0.get(Dt);if(Zt!=null){var qt=Zt.elementType,Ut=Zt.stateNode,fn=Zt.tag,_t=Zt.type;switch(fn){case Xe:case ar:case rn:H.$r=Ut;break;case je:H.$r={hooks:et,props:bt,type:_t};break;case wt:H.$r={props:bt,type:_t.render};break;case Hn:case Cr:H.$r={props:bt,type:qt!=null&&qt.type!=null?qt.type:_t};break;default:H.$r=null}}else console.warn('Could not find Fiber with id "'.concat(Dt,'"'))}(S0);var he=Bt({},S0);return he.context=qi(he.context,Nr("context",null)),he.hooks=qi(he.hooks,Nr("hooks","hooks")),he.props=qi(he.props,Nr("props",null)),he.state=qi(he.state,Nr("state",null)),{id:X,type:"full-data",value:he}},logElementToConsole:function(X){var Y=Tr(X)?S0:af(X);if(Y!==null){var ye=typeof console.groupCollapsed=="function";ye&&console.groupCollapsed("[Click to expand] %c<".concat(Y.displayName||"Component"," />"),"color: var(--dom-tag-name-color); font-weight: normal;"),Y.props!==null&&console.log("Props:",Y.props),Y.state!==null&&console.log("State:",Y.state),Y.hooks!==null&&console.log("Hooks:",Y.hooks);var he=zs(X);he!==null&&console.log("Nodes:",he),Y.source!==null&&console.log("Location:",Y.source),(window.chrome||/firefox/i.test(navigator.userAgent))&&console.log("Right-click any value to save it as a global variable for further inspection."),ye&&console.groupEnd()}else console.warn('Could not find Fiber with id "'.concat(X,'"'))},prepareViewAttributeSource:function(X,Y){Tr(X)&&(window.$attribute=Ti(S0,Y))},prepareViewElementSource:function(X){var Y=Y0.get(X);if(Y!=null){var ye=Y.elementType,he=Y.tag,We=Y.type;switch(he){case Xe:case ar:case rn:case je:H.$type=We;break;case wt:H.$type=We.render;break;case Hn:case Cr:H.$type=ye!=null&&ye.type!=null?ye.type:We;break;default:H.$type=null}}else console.warn('Could not find Fiber with id "'.concat(X,'"'))},overrideSuspense:function(X,Y){if(typeof Eo!="function"||typeof So!="function")throw new Error("Expected overrideSuspense() to not get called for earlier React versions.");Y?(B0.add(X),B0.size===1&&Eo(hu)):(B0.delete(X),B0.size===0&&Eo(Cl));var ye=Y0.get(X);ye!=null&&So(ye)},overrideValueAtPath:function(X,Y,ye,he,We){var et=J0(Y);if(et!==null){var Dt=et.stateNode;switch(X){case"context":switch(he=he.slice(1),et.tag){case Xe:he.length===0?Dt.context=We:fl(Dt.context,he,We),Dt.forceUpdate()}break;case"hooks":typeof p0=="function"&&p0(et,ye,he,We);break;case"props":switch(et.tag){case Xe:et.pendingProps=si(Dt.props,he,We),Dt.forceUpdate();break;default:typeof xi=="function"&&xi(et,he,We)}break;case"state":switch(et.tag){case Xe:fl(Dt.state,he,We),Dt.forceUpdate()}}}},renamePath:function(X,Y,ye,he,We){var et=J0(Y);if(et!==null){var Dt=et.stateNode;switch(X){case"context":switch(he=he.slice(1),We=We.slice(1),et.tag){case Xe:he.length===0||ll(Dt.context,he,We),Dt.forceUpdate()}break;case"hooks":typeof ci=="function"&&ci(et,ye,he,We);break;case"props":Dt===null?typeof qr=="function"&&qr(et,he,We):(et.pendingProps=Fr(Dt.props,he,We),Dt.forceUpdate());break;case"state":ll(Dt.state,he,We),Dt.forceUpdate()}}},renderer:U,setTraceUpdatesEnabled:function(X){oo=X},setTrackedPath:lo,startProfiling:Sl,stopProfiling:function(){u0=!1,To=!1},storeAsGlobal:function(X,Y,ye){if(Tr(X)){var he=Ti(S0,Y),We="$reactTemp".concat(ye);window[We]=he,console.log(We),console.log(he)}},updateComponentFilters:function(X){if(u0)throw Error("Cannot modify filter preferences while profiling");F.getFiberRoots(R).forEach(function(Y){Rr=Jn(ir(Y.current)),m0(Y.current),Yr(Y.current,!1),Rr=-1}),qs(X),kn.clear(),F.getFiberRoots(R).forEach(function(Y){T0(Rr=Jn(ir(Y.current)),Y.current),$r(Y.current,null,!1,!1),X0(Y),Rr=-1})}}}var _n;function Nu(F){return(Nu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(R){return typeof R}:function(R){return R&&typeof Symbol=="function"&&R.constructor===Symbol&&R!==Symbol.prototype?"symbol":typeof R})(F)}function Wo(F,R,U){if(_n===void 0)try{throw Error()}catch(fe){var H=fe.stack.trim().match(/\n( *(at )?)/);_n=H&&H[1]||""}return` -`+_n+F}var su=!1;function Ps(F,R,U){if(!F||su)return"";var H,fe=Error.prepareStackTrace;Error.prepareStackTrace=void 0,su=!0;var ue=U.current;U.current=null;try{if(R){var de=function(){throw Error()};if(Object.defineProperty(de.prototype,"props",{set:function(){throw Error()}}),(typeof Reflect=="undefined"?"undefined":Nu(Reflect))==="object"&&Reflect.construct){try{Reflect.construct(de,[])}catch(xe){H=xe}Reflect.construct(F,[],de)}else{try{de.call()}catch(xe){H=xe}F.call(de.prototype)}}else{try{throw Error()}catch(xe){H=xe}F()}}catch(xe){if(xe&&H&&typeof xe.stack=="string"){for(var W=xe.stack.split(` -`),ve=H.stack.split(` -`),Fe=W.length-1,Ge=ve.length-1;Fe>=1&&Ge>=0&&W[Fe]!==ve[Ge];)Ge--;for(;Fe>=1&&Ge>=0;Fe--,Ge--)if(W[Fe]!==ve[Ge]){if(Fe!==1||Ge!==1)do if(Fe--,--Ge<0||W[Fe]!==ve[Ge])return` -`+W[Fe].replace(" at new "," at ");while(Fe>=1&&Ge>=0);break}}}finally{su=!1,Error.prepareStackTrace=fe,U.current=ue}var K=F?F.displayName||F.name:"";return K?Wo(K):""}function pl(F,R,U,H){return Ps(F,!1,H)}function Vf(F,R,U){var H=F.HostComponent,fe=F.LazyComponent,ue=F.SuspenseComponent,de=F.SuspenseListComponent,W=F.FunctionComponent,ve=F.IndeterminateComponent,Fe=F.SimpleMemoComponent,Ge=F.ForwardRef,K=F.Block,xe=F.ClassComponent;switch(R.tag){case H:return Wo(R.type);case fe:return Wo("Lazy");case ue:return Wo("Suspense");case de:return Wo("SuspenseList");case W:case ve:case Fe:return pl(R.type,0,0,U);case Ge:return pl(R.type.render,0,0,U);case K:return pl(R.type._render,0,0,U);case xe:return function(je,Xe,rt,st){return Ps(je,!0,st)}(R.type,0,0,U);default:return""}}function hl(F,R,U){try{var H="",fe=R;do H+=Vf(F,fe,U),fe=fe.return;while(fe);return H}catch(ue){return` -Error generating stack: `+ue.message+` -`+ue.stack}}function Bu(F,R){var U;if(typeof Symbol=="undefined"||F[Symbol.iterator]==null){if(Array.isArray(F)||(U=function(ve,Fe){if(!!ve){if(typeof ve=="string")return ju(ve,Fe);var Ge=Object.prototype.toString.call(ve).slice(8,-1);if(Ge==="Object"&&ve.constructor&&(Ge=ve.constructor.name),Ge==="Map"||Ge==="Set")return Array.from(ve);if(Ge==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(Ge))return ju(ve,Fe)}}(F))||R&&F&&typeof F.length=="number"){U&&(F=U);var H=0,fe=function(){};return{s:fe,n:function(){return H>=F.length?{done:!0}:{done:!1,value:F[H++]}},e:function(ve){throw ve},f:fe}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ue,de=!0,W=!1;return{s:function(){U=F[Symbol.iterator]()},n:function(){var ve=U.next();return de=ve.done,ve},e:function(ve){W=!0,ue=ve},f:function(){try{de||U.return==null||U.return()}finally{if(W)throw ue}}}}function ju(F,R){(R==null||R>F.length)&&(R=F.length);for(var U=0,H=new Array(R);U0?Fe[Fe.length-1]:null,xe=K!==null&&(ro.test(K)||Ms.test(K));if(!xe){var je,Xe=Bu(ml.values());try{for(Xe.s();!(je=Xe.n()).done;){var rt=je.value,st=rt.currentDispatcherRef,xt=rt.getCurrentFiber,wt=rt.workTagMap,lt=xt();if(lt!=null){var Rt=hl(wt,lt,st);Rt!==""&&Fe.push(Rt);break}}}catch(yn){Xe.e(yn)}finally{Xe.f()}}}catch(yn){}ue.apply(void 0,Fe)};de.__REACT_DEVTOOLS_ORIGINAL_METHOD__=ue,Uu[fe]=de}catch(W){}})}}function O0(F){return(O0=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(R){return typeof R}:function(R){return R&&typeof Symbol=="function"&&R.constructor===Symbol&&R!==Symbol.prototype?"symbol":typeof R})(F)}function vl(F,R){for(var U=0;UF.length)&&(R=F.length);for(var U=0,H=new Array(R);U1?W-1:0),Fe=1;Fe0?K[K.length-1]:0),K.push(St),W.set(Ne,Fe(ft._topLevelWrapper));try{var Qt=He.apply(this,Qe);return K.pop(),Qt}catch(bn){throw K=[],bn}finally{if(K.length===0){var Cn=W.get(Ne);if(Cn===void 0)throw new Error("Expected to find root ID.");yn(Cn)}}},performUpdateIfNecessary:function(He,Qe){var Ne=Qe[0];if(P0(Ne)===9)return He.apply(this,Qe);var ft=Fe(Ne);K.push(ft);var St=ln(Ne);try{var Qt=He.apply(this,Qe),Cn=ln(Ne);return Ge(St,Cn)||Xe(Ne,ft,Cn),K.pop(),Qt}catch(p0){throw K=[],p0}finally{if(K.length===0){var bn=W.get(Ne);if(bn===void 0)throw new Error("Expected to find root ID.");yn(bn)}}},receiveComponent:function(He,Qe){var Ne=Qe[0];if(P0(Ne)===9)return He.apply(this,Qe);var ft=Fe(Ne);K.push(ft);var St=ln(Ne);try{var Qt=He.apply(this,Qe),Cn=ln(Ne);return Ge(St,Cn)||Xe(Ne,ft,Cn),K.pop(),Qt}catch(p0){throw K=[],p0}finally{if(K.length===0){var bn=W.get(Ne);if(bn===void 0)throw new Error("Expected to find root ID.");yn(bn)}}},unmountComponent:function(He,Qe){var Ne=Qe[0];if(P0(Ne)===9)return He.apply(this,Qe);var ft=Fe(Ne);K.push(ft);try{var St=He.apply(this,Qe);return K.pop(),function(Cn,bn){wt.push(bn),ue.delete(bn)}(0,ft),St}catch(Cn){throw K=[],Cn}finally{if(K.length===0){var Qt=W.get(Ne);if(Qt===void 0)throw new Error("Expected to find root ID.");yn(Qt)}}}}));var st=[],xt=new Map,wt=[],lt=0,Rt=null;function yn(He){if(st.length!==0||wt.length!==0||Rt!==null){var Qe=wt.length+(Rt===null?0:1),Ne=new Array(3+lt+(Qe>0?2+Qe:0)+st.length),ft=0;if(Ne[ft++]=R,Ne[ft++]=He,Ne[ft++]=lt,xt.forEach(function(Cn,bn){Ne[ft++]=bn.length;for(var p0=Cs(bn),h0=0;h00){Ne[ft++]=2,Ne[ft++]=Qe;for(var St=0;St"),"color: var(--dom-tag-name-color); font-weight: normal;"),Qe.props!==null&&console.log("Props:",Qe.props),Qe.state!==null&&console.log("State:",Qe.state),Qe.context!==null&&console.log("Context:",Qe.context);var ft=fe(He);ft!==null&&console.log("Node:",ft),(window.chrome||/firefox/i.test(navigator.userAgent))&&console.log("Right-click any value to save it as a global variable for further inspection."),Ne&&console.groupEnd()}else console.warn('Could not find element with id "'.concat(He,'"'))},overrideSuspense:function(){throw new Error("overrideSuspense not supported by this renderer")},overrideValueAtPath:function(He,Qe,Ne,ft,St){var Qt=ue.get(Qe);if(Qt!=null){var Cn=Qt._instance;if(Cn!=null)switch(He){case"context":fl(Cn.context,ft,St),a0(Cn);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var bn=Qt._currentElement;Qt._currentElement=V0(V0({},bn),{},{props:si(bn.props,ft,St)}),a0(Cn);break;case"state":fl(Cn.state,ft,St),a0(Cn)}}},renamePath:function(He,Qe,Ne,ft,St){var Qt=ue.get(Qe);if(Qt!=null){var Cn=Qt._instance;if(Cn!=null)switch(He){case"context":ll(Cn.context,ft,St),a0(Cn);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var bn=Qt._currentElement;Qt._currentElement=V0(V0({},bn),{},{props:Fr(bn.props,ft,St)}),a0(Cn);break;case"state":ll(Cn.state,ft,St),a0(Cn)}}},prepareViewAttributeSource:function(He,Qe){var Ne=Cr(He);Ne!==null&&(window.$attribute=Ti(Ne,Qe))},prepareViewElementSource:function(He){var Qe=ue.get(He);if(Qe!=null){var Ne=Qe._currentElement;Ne!=null?H.$type=Ne.type:console.warn('Could not find element with id "'.concat(He,'"'))}else console.warn('Could not find instance with id "'.concat(He,'"'))},renderer:U,setTraceUpdatesEnabled:function(He){},setTrackedPath:function(He){},startProfiling:function(){},stopProfiling:function(){},storeAsGlobal:function(He,Qe,Ne){var ft=Cr(He);if(ft!==null){var St=Ti(ft,Qe),Qt="$reactTemp".concat(Ne);window[Qt]=St,console.log(Qt),console.log(St)}},updateComponentFilters:function(He){}}}function nr(F,R){var U=!1,H={bottom:0,left:0,right:0,top:0},fe=R[F];if(fe!=null){for(var ue=0,de=Object.keys(H);ue0?"development":"production";var st=Function.prototype.toString;if(rt.Mount&&rt.Mount._renderNewRootComponent){var xt=st.call(rt.Mount._renderNewRootComponent);return xt.indexOf("function")!==0?"production":xt.indexOf("storedMeasure")!==-1?"development":xt.indexOf("should be a pure function")!==-1?xt.indexOf("NODE_ENV")!==-1||xt.indexOf("development")!==-1||xt.indexOf("true")!==-1?"development":xt.indexOf("nextElement")!==-1||xt.indexOf("nextComponent")!==-1?"unminified":"development":xt.indexOf("nextElement")!==-1||xt.indexOf("nextComponent")!==-1?"unminified":"outdated"}}catch(wt){}return"production"}(ve);try{var K=window.__REACT_DEVTOOLS_APPEND_COMPONENT_STACK__!==!1,xe=window.__REACT_DEVTOOLS_BREAK_ON_CONSOLE_ERRORS__===!0;(K||xe)&&(zi(ve),Ho({appendComponentStack:K,breakOnConsoleErrors:xe}))}catch(rt){}var je=F.__REACT_DEVTOOLS_ATTACH__;if(typeof je=="function"){var Xe=je(W,Fe,ve,F);W.rendererInterfaces.set(Fe,Xe)}return W.emit("renderer",{id:Fe,renderer:ve,reactBuildType:Ge}),Fe},on:function(ve,Fe){ue[ve]||(ue[ve]=[]),ue[ve].push(Fe)},off:function(ve,Fe){if(ue[ve]){var Ge=ue[ve].indexOf(Fe);Ge!==-1&&ue[ve].splice(Ge,1),ue[ve].length||delete ue[ve]}},sub:function(ve,Fe){return W.on(ve,Fe),function(){return W.off(ve,Fe)}},supportsFiber:!0,checkDCE:function(ve){try{Function.prototype.toString.call(ve).indexOf("^_^")>-1&&(U=!0,setTimeout(function(){throw new Error("React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build")}))}catch(Fe){}},onCommitFiberUnmount:function(ve,Fe){var Ge=fe.get(ve);Ge!=null&&Ge.handleCommitFiberUnmount(Fe)},onCommitFiberRoot:function(ve,Fe,Ge){var K=W.getFiberRoots(ve),xe=Fe.current,je=K.has(Fe),Xe=xe.memoizedState==null||xe.memoizedState.element==null;je||Xe?je&&Xe&&K.delete(Fe):K.add(Fe);var rt=fe.get(ve);rt!=null&&rt.handleCommitFiberRoot(Fe,Ge)}};Object.defineProperty(F,"__REACT_DEVTOOLS_GLOBAL_HOOK__",{configurable:!1,enumerable:!1,get:function(){return W}})})(window);var M0=window.__REACT_DEVTOOLS_GLOBAL_HOOK__,au=[{type:1,value:7,isEnabled:!0}];function Lr(F){if(M0!=null){var R=F||{},U=R.host,H=U===void 0?"localhost":U,fe=R.nativeStyleEditorValidAttributes,ue=R.useHttps,de=ue!==void 0&&ue,W=R.port,ve=W===void 0?8097:W,Fe=R.websocket,Ge=R.resolveRNStyle,K=Ge===void 0?null:Ge,xe=R.isAppActive,je=de?"wss":"ws",Xe=null;if((xe===void 0?function(){return!0}:xe)()){var rt=null,st=[],xt=je+"://"+H+":"+ve,wt=Fe||new window.WebSocket(xt);wt.onclose=function(){rt!==null&&rt.emit("shutdown"),lt()},wt.onerror=function(){lt()},wt.onmessage=function(Rt){var yn;try{if(typeof Rt.data!="string")throw Error();yn=JSON.parse(Rt.data)}catch(sn){return void console.error("[React DevTools] Failed to parse JSON: "+Rt.data)}st.forEach(function(sn){try{sn(yn)}catch(ar){throw console.log("[React DevTools] Error calling listener",yn),console.log("error:",ar),ar}})},wt.onopen=function(){(rt=new Do({listen:function(rn){return st.push(rn),function(){var Hn=st.indexOf(rn);Hn>=0&&st.splice(Hn,1)}},send:function(rn,Hn,d0){wt.readyState===wt.OPEN?wt.send(JSON.stringify({event:rn,payload:Hn})):(rt!==null&&rt.shutdown(),lt())}})).addListener("inspectElement",function(rn){var Hn=rn.id,d0=rn.rendererID,Cr=Rt.rendererInterfaces[d0];if(Cr!=null){var He=Cr.findNativeNodesForFiberID(Hn);He!=null&&He[0]!=null&&Rt.emit("showNativeHighlight",He[0])}}),rt.addListener("updateComponentFilters",function(rn){au=rn}),window.__REACT_DEVTOOLS_COMPONENT_FILTERS__==null&&rt.send("overrideComponentFilters",au);var Rt=new I0(rt);if(Rt.addListener("shutdown",function(){M0.emit("shutdown")}),function(rn,Hn,d0){if(rn==null)return function(){};var Cr=[rn.sub("renderer-attached",function(Ne){var ft=Ne.id,St=(Ne.renderer,Ne.rendererInterface);Hn.setRendererInterface(ft,St),St.flushInitialOperations()}),rn.sub("unsupported-renderer-version",function(Ne){Hn.onUnsupportedRenderer(Ne)}),rn.sub("operations",Hn.onHookOperations),rn.sub("traceUpdates",Hn.onTraceUpdates)],He=function(Ne,ft){var St=rn.rendererInterfaces.get(Ne);St==null&&(typeof ft.findFiberByHostInstance=="function"?St=uf(rn,Ne,ft,d0):ft.ComponentTree&&(St=lf(rn,Ne,ft,d0)),St!=null&&rn.rendererInterfaces.set(Ne,St)),St!=null?rn.emit("renderer-attached",{id:Ne,renderer:ft,rendererInterface:St}):rn.emit("unsupported-renderer-version",Ne)};rn.renderers.forEach(function(Ne,ft){He(ft,Ne)}),Cr.push(rn.sub("renderer",function(Ne){var ft=Ne.id,St=Ne.renderer;He(ft,St)})),rn.emit("react-devtools",Hn),rn.reactDevtoolsAgent=Hn;var Qe=function(){Cr.forEach(function(Ne){return Ne()}),rn.rendererInterfaces.forEach(function(Ne){Ne.cleanup()}),rn.reactDevtoolsAgent=null};Hn.addListener("shutdown",Qe),Cr.push(function(){Hn.removeListener("shutdown",Qe)})}(M0,Rt,window),K!=null||M0.resolveRNStyle!=null)Gu(rt,Rt,K||M0.resolveRNStyle,fe||M0.nativeStyleEditorValidAttributes||null);else{var yn,sn,ar=function(){rt!==null&&Gu(rt,Rt,yn,sn)};M0.hasOwnProperty("resolveRNStyle")||Object.defineProperty(M0,"resolveRNStyle",{enumerable:!1,get:function(){return yn},set:function(rn){yn=rn,ar()}}),M0.hasOwnProperty("nativeStyleEditorValidAttributes")||Object.defineProperty(M0,"nativeStyleEditorValidAttributes",{enumerable:!1,get:function(){return sn},set:function(rn){sn=rn,ar()}})}}}else lt()}function lt(){Xe===null&&(Xe=setTimeout(function(){return Lr(F)},2e3))}}}])})});var rS=Me(nS=>{"use strict";Object.defineProperty(nS,"__esModule",{value:!0});eS();var _j=tS();_j.connectToDevTools()});var lS=Me(x2=>{"use strict";var iS=x2&&x2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(x2,"__esModule",{value:!0});var oS=Ay(),yj=iS(lE()),uS=iS(hc()),no=Xy();process.env.DEV==="true"&&rS();var sS=i=>{i==null||i.unsetMeasureFunc(),i==null||i.freeRecursive()};x2.default=yj.default({schedulePassiveEffects:oS.unstable_scheduleCallback,cancelPassiveEffects:oS.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:i=>{if(i.isStaticDirty){i.isStaticDirty=!1,typeof i.onImmediateRender=="function"&&i.onImmediateRender();return}typeof i.onRender=="function"&&i.onRender()},getChildHostContext:(i,u)=>{let f=i.isInsideText,c=u==="ink-text"||u==="ink-virtual-text";return f===c?i:{isInsideText:c}},shouldSetTextContent:()=>!1,createInstance:(i,u,f,c)=>{if(c.isInsideText&&i==="ink-box")throw new Error(" can\u2019t be nested inside component");let g=i==="ink-text"&&c.isInsideText?"ink-virtual-text":i,t=no.createNode(g);for(let[C,A]of Object.entries(u))C!=="children"&&(C==="style"?no.setStyle(t,A):C==="internal_transform"?t.internal_transform=A:C==="internal_static"?t.internal_static=!0:no.setAttribute(t,C,A));return t},createTextInstance:(i,u,f)=>{if(!f.isInsideText)throw new Error(`Text string "${i}" must be rendered inside component`);return no.createTextNode(i)},resetTextContent:()=>{},hideTextInstance:i=>{no.setTextNodeValue(i,"")},unhideTextInstance:(i,u)=>{no.setTextNodeValue(i,u)},getPublicInstance:i=>i,hideInstance:i=>{var u;(u=i.yogaNode)===null||u===void 0||u.setDisplay(uS.default.DISPLAY_NONE)},unhideInstance:i=>{var u;(u=i.yogaNode)===null||u===void 0||u.setDisplay(uS.default.DISPLAY_FLEX)},appendInitialChild:no.appendChildNode,appendChild:no.appendChildNode,insertBefore:no.insertBeforeNode,finalizeInitialChildren:(i,u,f,c)=>(i.internal_static&&(c.isStaticDirty=!0,c.staticNode=i),!1),supportsMutation:!0,appendChildToContainer:no.appendChildNode,insertInContainerBefore:no.insertBeforeNode,removeChildFromContainer:(i,u)=>{no.removeChildNode(i,u),sS(u.yogaNode)},prepareUpdate:(i,u,f,c,g)=>{i.internal_static&&(g.isStaticDirty=!0);let t={},C=Object.keys(c);for(let A of C)if(c[A]!==f[A]){if(A==="style"&&typeof c.style=="object"&&typeof f.style=="object"){let D=c.style,L=f.style,N=Object.keys(D);for(let j of N){if(j==="borderStyle"||j==="borderColor"){if(typeof t.style!="object"){let $={};t.style=$}t.style.borderStyle=D.borderStyle,t.style.borderColor=D.borderColor}if(D[j]!==L[j]){if(typeof t.style!="object"){let $={};t.style=$}t.style[j]=D[j]}}continue}t[A]=c[A]}return t},commitUpdate:(i,u)=>{for(let[f,c]of Object.entries(u))f!=="children"&&(f==="style"?no.setStyle(i,c):f==="internal_transform"?i.internal_transform=c:f==="internal_static"?i.internal_static=!0:no.setAttribute(i,f,c))},commitTextUpdate:(i,u,f)=>{no.setTextNodeValue(i,f)},removeChild:(i,u)=>{no.removeChildNode(i,u),sS(u.yogaNode)}})});var cS=Me((Jb,fS)=>{"use strict";fS.exports=(i,u=1,f)=>{if(f=dt({indent:" ",includeEmptyLines:!1},f),typeof i!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof i}\``);if(typeof u!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof u}\``);if(typeof f.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof f.indent}\``);if(u===0)return i;let c=f.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return i.replace(c,f.indent.repeat(u))}});var aS=Me(k2=>{"use strict";var wj=k2&&k2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(k2,"__esModule",{value:!0});var Vh=wj(hc());k2.default=i=>i.getComputedWidth()-i.getComputedPadding(Vh.default.EDGE_LEFT)-i.getComputedPadding(Vh.default.EDGE_RIGHT)-i.getComputedBorder(Vh.default.EDGE_LEFT)-i.getComputedBorder(Vh.default.EDGE_RIGHT)});var pS=Me((Zb,dS)=>{dS.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var mS=Me((eG,m3)=>{"use strict";var hS=pS();m3.exports=hS;m3.exports.default=hS});var gS=Me((tG,vS)=>{"use strict";vS.exports=(i,u=process.argv)=>{let f=i.startsWith("-")?"":i.length===1?"-":"--",c=u.indexOf(f+i),g=u.indexOf("--");return c!==-1&&(g===-1||c{"use strict";var Dj=require("os"),yS=require("tty"),Pu=gS(),{env:oi}=process,qf;Pu("no-color")||Pu("no-colors")||Pu("color=false")||Pu("color=never")?qf=0:(Pu("color")||Pu("colors")||Pu("color=true")||Pu("color=always"))&&(qf=1);"FORCE_COLOR"in oi&&(oi.FORCE_COLOR==="true"?qf=1:oi.FORCE_COLOR==="false"?qf=0:qf=oi.FORCE_COLOR.length===0?1:Math.min(parseInt(oi.FORCE_COLOR,10),3));function v3(i){return i===0?!1:{level:i,hasBasic:!0,has256:i>=2,has16m:i>=3}}function g3(i,u){if(qf===0)return 0;if(Pu("color=16m")||Pu("color=full")||Pu("color=truecolor"))return 3;if(Pu("color=256"))return 2;if(i&&!u&&qf===void 0)return 0;let f=qf||0;if(oi.TERM==="dumb")return f;if(process.platform==="win32"){let c=Dj.release().split(".");return Number(c[0])>=10&&Number(c[2])>=10586?Number(c[2])>=14931?3:2:1}if("CI"in oi)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(c=>c in oi)||oi.CI_NAME==="codeship"?1:f;if("TEAMCITY_VERSION"in oi)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(oi.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in oi)return 1;if(oi.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in oi){let c=parseInt((oi.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(oi.TERM_PROGRAM){case"iTerm.app":return c>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(oi.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(oi.TERM)||"COLORTERM"in oi?1:f}function Ej(i){let u=g3(i,i&&i.isTTY);return v3(u)}_S.exports={supportsColor:Ej,stdout:v3(g3(!0,yS.isatty(1))),stderr:v3(g3(!0,yS.isatty(2)))}});var ES=Me((rG,DS)=>{"use strict";var Sj=(i,u,f)=>{let c=i.indexOf(u);if(c===-1)return i;let g=u.length,t=0,C="";do C+=i.substr(t,c-t)+u+f,t=c+g,c=i.indexOf(u,t);while(c!==-1);return C+=i.substr(t),C},Cj=(i,u,f,c)=>{let g=0,t="";do{let C=i[c-1]==="\r";t+=i.substr(g,(C?c-1:c)-g)+u+(C?`\r -`:` -`)+f,g=c+1,c=i.indexOf(` -`,g)}while(c!==-1);return t+=i.substr(g),t};DS.exports={stringReplaceAll:Sj,stringEncaseCRLFWithFirstIndex:Cj}});var kS=Me((iG,SS)=>{"use strict";var Tj=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,CS=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,xj=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,kj=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,Aj=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e",""],["a","\x07"]]);function TS(i){let u=i[0]==="u",f=i[1]==="{";return u&&!f&&i.length===5||i[0]==="x"&&i.length===3?String.fromCharCode(parseInt(i.slice(1),16)):u&&f?String.fromCodePoint(parseInt(i.slice(2,-1),16)):Aj.get(i)||i}function Oj(i,u){let f=[],c=u.trim().split(/\s*,\s*/g),g;for(let t of c){let C=Number(t);if(!Number.isNaN(C))f.push(C);else if(g=t.match(xj))f.push(g[2].replace(kj,(A,x,D)=>x?TS(x):D));else throw new Error(`Invalid Chalk template style argument: ${t} (in style '${i}')`)}return f}function Ij(i){CS.lastIndex=0;let u=[],f;for(;(f=CS.exec(i))!==null;){let c=f[1];if(f[2]){let g=Oj(c,f[2]);u.push([c].concat(g))}else u.push([c])}return u}function xS(i,u){let f={};for(let g of u)for(let t of g.styles)f[t[0]]=g.inverse?null:t.slice(1);let c=i;for(let[g,t]of Object.entries(f))if(!!Array.isArray(t)){if(!(g in c))throw new Error(`Unknown Chalk style: ${g}`);c=t.length>0?c[g](...t):c[g]}return c}SS.exports=(i,u)=>{let f=[],c=[],g=[];if(u.replace(Tj,(t,C,A,x,D,L)=>{if(C)g.push(TS(C));else if(x){let N=g.join("");g=[],c.push(f.length===0?N:xS(i,f)(N)),f.push({inverse:A,styles:Ij(x)})}else if(D){if(f.length===0)throw new Error("Found extraneous } in Chalk template literal");c.push(xS(i,f)(g.join(""))),g=[],f.pop()}else g.push(L)}),c.push(g.join("")),f.length>0){let t=`Chalk template literal is missing ${f.length} closing bracket${f.length===1?"":"s"} (\`}\`)`;throw new Error(t)}return c.join("")}});var Jh=Me((oG,AS)=>{"use strict";var A2=Rh(),{stdout:_3,stderr:y3}=wS(),{stringReplaceAll:Pj,stringEncaseCRLFWithFirstIndex:Mj}=ES(),{isArray:Yh}=Array,OS=["ansi","ansi","ansi256","ansi16m"],ka=Object.create(null),Fj=(i,u={})=>{if(u.level&&!(Number.isInteger(u.level)&&u.level>=0&&u.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let f=_3?_3.level:0;i.level=u.level===void 0?f:u.level},IS=class{constructor(u){return PS(u)}},PS=i=>{let u={};return Fj(u,i),u.template=(...f)=>MS(u.template,...f),Object.setPrototypeOf(u,$h.prototype),Object.setPrototypeOf(u.template,u),u.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},u.template.Instance=IS,u.template};function $h(i){return PS(i)}for(let[i,u]of Object.entries(A2))ka[i]={get(){let f=Kh(this,w3(u.open,u.close,this._styler),this._isEmpty);return Object.defineProperty(this,i,{value:f}),f}};ka.visible={get(){let i=Kh(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:i}),i}};var LS=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let i of LS)ka[i]={get(){let{level:u}=this;return function(...f){let c=w3(A2.color[OS[u]][i](...f),A2.color.close,this._styler);return Kh(this,c,this._isEmpty)}}};for(let i of LS){let u="bg"+i[0].toUpperCase()+i.slice(1);ka[u]={get(){let{level:f}=this;return function(...c){let g=w3(A2.bgColor[OS[f]][i](...c),A2.bgColor.close,this._styler);return Kh(this,g,this._isEmpty)}}}}var Lj=Object.defineProperties(()=>{},zn(dt({},ka),{level:{enumerable:!0,get(){return this._generator.level},set(i){this._generator.level=i}}})),w3=(i,u,f)=>{let c,g;return f===void 0?(c=i,g=u):(c=f.openAll+i,g=u+f.closeAll),{open:i,close:u,openAll:c,closeAll:g,parent:f}},Kh=(i,u,f)=>{let c=(...g)=>Yh(g[0])&&Yh(g[0].raw)?RS(c,MS(c,...g)):RS(c,g.length===1?""+g[0]:g.join(" "));return Object.setPrototypeOf(c,Lj),c._generator=i,c._styler=u,c._isEmpty=f,c},RS=(i,u)=>{if(i.level<=0||!u)return i._isEmpty?"":u;let f=i._styler;if(f===void 0)return u;let{openAll:c,closeAll:g}=f;if(u.indexOf("")!==-1)for(;f!==void 0;)u=Pj(u,f.close,f.open),f=f.parent;let t=u.indexOf(` -`);return t!==-1&&(u=Mj(u,g,c,t)),c+u+g},D3,MS=(i,...u)=>{let[f]=u;if(!Yh(f)||!Yh(f.raw))return u.join(" ");let c=u.slice(1),g=[f.raw[0]];for(let t=1;t{"use strict";var Rj=O2&&O2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(O2,"__esModule",{value:!0});var I2=Rj(Jh()),Nj=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,Bj=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,Qh=(i,u)=>u==="foreground"?i:"bg"+i[0].toUpperCase()+i.slice(1);O2.default=(i,u,f)=>{if(!u)return i;if(u in I2.default){let g=Qh(u,f);return I2.default[g](i)}if(u.startsWith("#")){let g=Qh("hex",f);return I2.default[g](u)(i)}if(u.startsWith("ansi")){let g=Bj.exec(u);if(!g)return i;let t=Qh(g[1],f),C=Number(g[2]);return I2.default[t](C)(i)}if(u.startsWith("rgb")||u.startsWith("hsl")||u.startsWith("hsv")||u.startsWith("hwb")){let g=Nj.exec(u);if(!g)return i;let t=Qh(g[1],f),C=Number(g[2]),A=Number(g[3]),x=Number(g[4]);return I2.default[t](C,A,x)(i)}return i}});var BS=Me(P2=>{"use strict";var NS=P2&&P2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(P2,"__esModule",{value:!0});var jj=NS(mS()),S3=NS(E3());P2.default=(i,u,f,c)=>{if(typeof f.style.borderStyle=="string"){let g=f.yogaNode.getComputedWidth(),t=f.yogaNode.getComputedHeight(),C=f.style.borderColor,A=jj.default[f.style.borderStyle],x=S3.default(A.topLeft+A.horizontal.repeat(g-2)+A.topRight,C,"foreground"),D=(S3.default(A.vertical,C,"foreground")+` -`).repeat(t-2),L=S3.default(A.bottomLeft+A.horizontal.repeat(g-2)+A.bottomRight,C,"foreground");c.write(i,u,x,{transformers:[]}),c.write(i,u+1,D,{transformers:[]}),c.write(i+g-1,u+1,D,{transformers:[]}),c.write(i,u+t-1,L,{transformers:[]})}}});var US=Me(M2=>{"use strict";var _c=M2&&M2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(M2,"__esModule",{value:!0});var Uj=_c(hc()),qj=_c(jy()),zj=_c(cS()),Wj=_c(Yy()),Hj=_c(aS()),bj=_c(Ky()),Gj=_c(BS()),Vj=(i,u)=>{var f;let c=(f=i.childNodes[0])===null||f===void 0?void 0:f.yogaNode;if(c){let g=c.getComputedLeft(),t=c.getComputedTop();u=` -`.repeat(t)+zj.default(u,g)}return u},jS=(i,u,f)=>{var c;let{offsetX:g=0,offsetY:t=0,transformers:C=[],skipStaticElements:A}=f;if(A&&i.internal_static)return;let{yogaNode:x}=i;if(x){if(x.getDisplay()===Uj.default.DISPLAY_NONE)return;let D=g+x.getComputedLeft(),L=t+x.getComputedTop(),N=C;if(typeof i.internal_transform=="function"&&(N=[i.internal_transform,...C]),i.nodeName==="ink-text"){let j=bj.default(i);if(j.length>0){let $=qj.default(j),h=Hj.default(x);if($>h){let re=(c=i.style.textWrap)!==null&&c!==void 0?c:"wrap";j=Wj.default(j,h,re)}j=Vj(i,j),u.write(D,L,j,{transformers:N})}return}if(i.nodeName==="ink-box"&&Gj.default(D,L,i,u),i.nodeName==="ink-root"||i.nodeName==="ink-box")for(let j of i.childNodes)jS(j,u,{offsetX:D,offsetY:L,transformers:N,skipStaticElements:A})}};M2.default=jS});var zS=Me((fG,qS)=>{"use strict";qS.exports=i=>{i=Object.assign({onlyFirst:!1},i);let u=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(u,i.onlyFirst?void 0:"g")}});var HS=Me((cG,C3)=>{"use strict";var Yj=zS(),WS=i=>typeof i=="string"?i.replace(Yj(),""):i;C3.exports=WS;C3.exports.default=WS});var VS=Me((aG,bS)=>{"use strict";var GS="[\uD800-\uDBFF][\uDC00-\uDFFF]";bS.exports=i=>i&&i.exact?new RegExp(`^${GS}$`):new RegExp(GS,"g")});var $S=Me((dG,T3)=>{"use strict";var $j=HS(),Kj=VS(),YS=i=>$j(i).replace(Kj()," ").length;T3.exports=YS;T3.exports.default=YS});var QS=Me(F2=>{"use strict";var KS=F2&&F2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(F2,"__esModule",{value:!0});var XS=KS(Gy()),Xj=KS($S()),JS=class{constructor(u){this.writes=[];let{width:f,height:c}=u;this.width=f,this.height=c}write(u,f,c,g){let{transformers:t}=g;!c||this.writes.push({x:u,y:f,text:c,transformers:t})}get(){let u=[];for(let c=0;cc.trimRight()).join(` -`),height:u.length}}};F2.default=JS});var t5=Me(L2=>{"use strict";var x3=L2&&L2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(L2,"__esModule",{value:!0});var Jj=x3(hc()),ZS=x3(US()),e5=x3(QS());L2.default=(i,u)=>{var f;if(i.yogaNode.setWidth(u),i.yogaNode){i.yogaNode.calculateLayout(void 0,void 0,Jj.default.DIRECTION_LTR);let c=new e5.default({width:i.yogaNode.getComputedWidth(),height:i.yogaNode.getComputedHeight()});ZS.default(i,c,{skipStaticElements:!0});let g;((f=i.staticNode)===null||f===void 0?void 0:f.yogaNode)&&(g=new e5.default({width:i.staticNode.yogaNode.getComputedWidth(),height:i.staticNode.yogaNode.getComputedHeight()}),ZS.default(i.staticNode,g,{skipStaticElements:!1}));let{output:t,height:C}=c.get();return{output:t,outputHeight:C,staticOutput:g?`${g.get().output} -`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var o5=Me((mG,n5)=>{"use strict";var r5=require("stream"),i5=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],k3={},Qj=i=>{let u=new r5.PassThrough,f=new r5.PassThrough;u.write=g=>i("stdout",g),f.write=g=>i("stderr",g);let c=new console.Console(u,f);for(let g of i5)k3[g]=console[g],console[g]=c[g];return()=>{for(let g of i5)console[g]=k3[g];k3={}}};n5.exports=Qj});var O3=Me(A3=>{"use strict";Object.defineProperty(A3,"__esModule",{value:!0});A3.default=new WeakMap});var P3=Me(I3=>{"use strict";Object.defineProperty(I3,"__esModule",{value:!0});var Zj=lr(),u5=Zj.createContext({exit:()=>{}});u5.displayName="InternalAppContext";I3.default=u5});var F3=Me(M3=>{"use strict";Object.defineProperty(M3,"__esModule",{value:!0});var eU=lr(),s5=eU.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});s5.displayName="InternalStdinContext";M3.default=s5});var R3=Me(L3=>{"use strict";Object.defineProperty(L3,"__esModule",{value:!0});var tU=lr(),l5=tU.createContext({stdout:void 0,write:()=>{}});l5.displayName="InternalStdoutContext";L3.default=l5});var B3=Me(N3=>{"use strict";Object.defineProperty(N3,"__esModule",{value:!0});var nU=lr(),f5=nU.createContext({stderr:void 0,write:()=>{}});f5.displayName="InternalStderrContext";N3.default=f5});var Zh=Me(j3=>{"use strict";Object.defineProperty(j3,"__esModule",{value:!0});var rU=lr(),c5=rU.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});c5.displayName="InternalFocusContext";j3.default=c5});var d5=Me((EG,a5)=>{"use strict";var iU=/[|\\{}()[\]^$+*?.-]/g;a5.exports=i=>{if(typeof i!="string")throw new TypeError("Expected a string");return i.replace(iU,"\\$&")}});var v5=Me((SG,p5)=>{"use strict";var oU=d5(),h5=[].concat(require("module").builtinModules,"bootstrap_node","node").map(i=>new RegExp(`(?:\\(${i}\\.js:\\d+:\\d+\\)$|^\\s*at ${i}\\.js:\\d+:\\d+$)`));h5.push(/\(internal\/[^:]+:\d+:\d+\)$/,/\s*at internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var em=class{constructor(u){u=dt({ignoredPackages:[]},u),"internals"in u||(u.internals=em.nodeInternals()),"cwd"in u||(u.cwd=process.cwd()),this._cwd=u.cwd.replace(/\\/g,"/"),this._internals=[].concat(u.internals,uU(u.ignoredPackages)),this._wrapCallSite=u.wrapCallSite||!1}static nodeInternals(){return[...h5]}clean(u,f=0){f=" ".repeat(f),Array.isArray(u)||(u=u.split(` -`)),!/^\s*at /.test(u[0])&&/^\s*at /.test(u[1])&&(u=u.slice(1));let c=!1,g=null,t=[];return u.forEach(C=>{if(C=C.replace(/\\/g,"/"),this._internals.some(x=>x.test(C)))return;let A=/^\s*at /.test(C);c?C=C.trimEnd().replace(/^(\s+)at /,"$1"):(C=C.trim(),A&&(C=C.slice(3))),C=C.replace(`${this._cwd}/`,""),C&&(A?(g&&(t.push(g),g=null),t.push(C)):(c=!0,g=C))}),t.map(C=>`${f}${C} -`).join("")}captureString(u,f=this.captureString){typeof u=="function"&&(f=u,u=Infinity);let{stackTraceLimit:c}=Error;u&&(Error.stackTraceLimit=u);let g={};Error.captureStackTrace(g,f);let{stack:t}=g;return Error.stackTraceLimit=c,this.clean(t)}capture(u,f=this.capture){typeof u=="function"&&(f=u,u=Infinity);let{prepareStackTrace:c,stackTraceLimit:g}=Error;Error.prepareStackTrace=(A,x)=>this._wrapCallSite?x.map(this._wrapCallSite):x,u&&(Error.stackTraceLimit=u);let t={};Error.captureStackTrace(t,f);let{stack:C}=t;return Object.assign(Error,{prepareStackTrace:c,stackTraceLimit:g}),C}at(u=this.at){let[f]=this.capture(1,u);if(!f)return{};let c={line:f.getLineNumber(),column:f.getColumnNumber()};m5(c,f.getFileName(),this._cwd),f.isConstructor()&&(c.constructor=!0),f.isEval()&&(c.evalOrigin=f.getEvalOrigin()),f.isNative()&&(c.native=!0);let g;try{g=f.getTypeName()}catch(A){}g&&g!=="Object"&&g!=="[object Object]"&&(c.type=g);let t=f.getFunctionName();t&&(c.function=t);let C=f.getMethodName();return C&&t!==C&&(c.method=C),c}parseLine(u){let f=u&&u.match(sU);if(!f)return null;let c=f[1]==="new",g=f[2],t=f[3],C=f[4],A=Number(f[5]),x=Number(f[6]),D=f[7],L=f[8],N=f[9],j=f[10]==="native",$=f[11]===")",h,re={};if(L&&(re.line=Number(L)),N&&(re.column=Number(N)),$&&D){let ce=0;for(let Q=D.length-1;Q>0;Q--)if(D.charAt(Q)===")")ce++;else if(D.charAt(Q)==="("&&D.charAt(Q-1)===" "&&(ce--,ce===-1&&D.charAt(Q-1)===" ")){let oe=D.slice(0,Q-1);D=D.slice(Q+1),g+=` (${oe}`;break}}if(g){let ce=g.match(lU);ce&&(g=ce[1],h=ce[2])}return m5(re,D,this._cwd),c&&(re.constructor=!0),t&&(re.evalOrigin=t,re.evalLine=A,re.evalColumn=x,re.evalFile=C&&C.replace(/\\/g,"/")),j&&(re.native=!0),g&&(re.function=g),h&&g!==h&&(re.method=h),re}};function m5(i,u,f){u&&(u=u.replace(/\\/g,"/"),u.startsWith(`${f}/`)&&(u=u.slice(f.length+1)),i.file=u)}function uU(i){if(i.length===0)return[];let u=i.map(f=>oU(f));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${u.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var sU=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),lU=/^(.*?) \[as (.*?)\]$/;p5.exports=em});var _5=Me((CG,g5)=>{"use strict";g5.exports=(i,u)=>i.replace(/^\t+/gm,f=>" ".repeat(f.length*(u||2)))});var w5=Me((TG,y5)=>{"use strict";var fU=_5(),cU=(i,u)=>{let f=[],c=i-u,g=i+u;for(let t=c;t<=g;t++)f.push(t);return f};y5.exports=(i,u,f)=>{if(typeof i!="string")throw new TypeError("Source code is missing.");if(!u||u<1)throw new TypeError("Line number must start from `1`.");if(i=fU(i).split(/\r?\n/),!(u>i.length))return f=dt({around:3},f),cU(u,f.around).filter(c=>i[c-1]!==void 0).map(c=>({line:c,value:i[c-1]}))}});var tm=Me(hs=>{"use strict";var aU=hs&&hs.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),dU=hs&&hs.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),pU=hs&&hs.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&aU(u,i,f);return dU(u,i),u},hU=hs&&hs.__rest||function(i,u){var f={};for(var c in i)Object.prototype.hasOwnProperty.call(i,c)&&u.indexOf(c)<0&&(f[c]=i[c]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var g=0,c=Object.getOwnPropertySymbols(i);g{var{children:f}=i,c=hU(i,["children"]);let g=Object.assign(Object.assign({},c),{marginLeft:c.marginLeft||c.marginX||c.margin||0,marginRight:c.marginRight||c.marginX||c.margin||0,marginTop:c.marginTop||c.marginY||c.margin||0,marginBottom:c.marginBottom||c.marginY||c.margin||0,paddingLeft:c.paddingLeft||c.paddingX||c.padding||0,paddingRight:c.paddingRight||c.paddingX||c.padding||0,paddingTop:c.paddingTop||c.paddingY||c.padding||0,paddingBottom:c.paddingBottom||c.paddingY||c.padding||0});return D5.default.createElement("ink-box",{ref:u,style:g},f)});U3.displayName="Box";U3.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};hs.default=U3});var W3=Me(R2=>{"use strict";var q3=R2&&R2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(R2,"__esModule",{value:!0});var mU=q3(lr()),Aa=q3(Jh()),E5=q3(E3()),z3=({color:i,backgroundColor:u,dimColor:f,bold:c,italic:g,underline:t,strikethrough:C,inverse:A,wrap:x,children:D})=>{if(D==null)return null;let L=N=>(f&&(N=Aa.default.dim(N)),i&&(N=E5.default(N,i,"foreground")),u&&(N=E5.default(N,u,"background")),c&&(N=Aa.default.bold(N)),g&&(N=Aa.default.italic(N)),t&&(N=Aa.default.underline(N)),C&&(N=Aa.default.strikethrough(N)),A&&(N=Aa.default.inverse(N)),N);return mU.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:x},internal_transform:L},D)};z3.displayName="Text";z3.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};R2.default=z3});var x5=Me(ms=>{"use strict";var vU=ms&&ms.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),gU=ms&&ms.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),_U=ms&&ms.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&vU(u,i,f);return gU(u,i),u},N2=ms&&ms.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(ms,"__esModule",{value:!0});var S5=_U(require("fs")),ui=N2(lr()),C5=N2(v5()),yU=N2(w5()),ef=N2(tm()),il=N2(W3()),T5=new C5.default({cwd:process.cwd(),internals:C5.default.nodeInternals()}),wU=({error:i})=>{let u=i.stack?i.stack.split(` -`).slice(1):void 0,f=u?T5.parseLine(u[0]):void 0,c,g=0;if((f==null?void 0:f.file)&&(f==null?void 0:f.line)&&S5.existsSync(f.file)){let t=S5.readFileSync(f.file,"utf8");if(c=yU.default(t,f.line),c)for(let{line:C}of c)g=Math.max(g,String(C).length)}return ui.default.createElement(ef.default,{flexDirection:"column",padding:1},ui.default.createElement(ef.default,null,ui.default.createElement(il.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),ui.default.createElement(il.default,null," ",i.message)),f&&ui.default.createElement(ef.default,{marginTop:1},ui.default.createElement(il.default,{dimColor:!0},f.file,":",f.line,":",f.column)),f&&c&&ui.default.createElement(ef.default,{marginTop:1,flexDirection:"column"},c.map(({line:t,value:C})=>ui.default.createElement(ef.default,{key:t},ui.default.createElement(ef.default,{width:g+1},ui.default.createElement(il.default,{dimColor:t!==f.line,backgroundColor:t===f.line?"red":void 0,color:t===f.line?"white":void 0},String(t).padStart(g," "),":")),ui.default.createElement(il.default,{key:t,backgroundColor:t===f.line?"red":void 0,color:t===f.line?"white":void 0}," "+C)))),i.stack&&ui.default.createElement(ef.default,{marginTop:1,flexDirection:"column"},i.stack.split(` -`).slice(1).map(t=>{let C=T5.parseLine(t);return C?ui.default.createElement(ef.default,{key:t},ui.default.createElement(il.default,{dimColor:!0},"- "),ui.default.createElement(il.default,{dimColor:!0,bold:!0},C.function),ui.default.createElement(il.default,{dimColor:!0,color:"gray"}," ","(",C.file,":",C.line,":",C.column,")")):ui.default.createElement(ef.default,{key:t},ui.default.createElement(il.default,{dimColor:!0},"- "),ui.default.createElement(il.default,{dimColor:!0,bold:!0},t))})))};ms.default=wU});var A5=Me(vs=>{"use strict";var DU=vs&&vs.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),EU=vs&&vs.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),SU=vs&&vs.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&DU(u,i,f);return EU(u,i),u},yc=vs&&vs.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(vs,"__esModule",{value:!0});var wc=SU(lr()),k5=yc(gy()),CU=yc(P3()),TU=yc(F3()),xU=yc(R3()),kU=yc(B3()),AU=yc(Zh()),OU=yc(x5()),IU=" ",PU="",MU="",H3=class extends wc.PureComponent{constructor(){super(...arguments);this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=u=>{let{stdin:f}=this.props;if(!this.isRawModeSupported())throw f===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(f.setEncoding("utf8"),u){this.rawModeEnabledCount===0&&(f.addListener("data",this.handleInput),f.resume(),f.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount==0&&(f.setRawMode(!1),f.removeListener("data",this.handleInput),f.pause())},this.handleInput=u=>{u===""&&this.props.exitOnCtrlC&&this.handleExit(),u===MU&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(u===IU&&this.focusNext(),u===PU&&this.focusPrevious())},this.handleExit=u=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(u)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(u=>{let f=u.focusables[0].id;return{activeFocusId:this.findNextFocusable(u)||f}})},this.focusPrevious=()=>{this.setState(u=>{let f=u.focusables[u.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(u)||f}})},this.addFocusable=(u,{autoFocus:f})=>{this.setState(c=>{let g=c.activeFocusId;return!g&&f&&(g=u),{activeFocusId:g,focusables:[...c.focusables,{id:u,isActive:!0}]}})},this.removeFocusable=u=>{this.setState(f=>({activeFocusId:f.activeFocusId===u?void 0:f.activeFocusId,focusables:f.focusables.filter(c=>c.id!==u)}))},this.activateFocusable=u=>{this.setState(f=>({focusables:f.focusables.map(c=>c.id!==u?c:{id:u,isActive:!0})}))},this.deactivateFocusable=u=>{this.setState(f=>({activeFocusId:f.activeFocusId===u?void 0:f.activeFocusId,focusables:f.focusables.map(c=>c.id!==u?c:{id:u,isActive:!1})}))},this.findNextFocusable=u=>{let f=u.focusables.findIndex(c=>c.id===u.activeFocusId);for(let c=f+1;c{let f=u.focusables.findIndex(c=>c.id===u.activeFocusId);for(let c=f-1;c>=0;c--)if(u.focusables[c].isActive)return u.focusables[c].id}}static getDerivedStateFromError(u){return{error:u}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return wc.default.createElement(CU.default.Provider,{value:{exit:this.handleExit}},wc.default.createElement(TU.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},wc.default.createElement(xU.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},wc.default.createElement(kU.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},wc.default.createElement(AU.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?wc.default.createElement(OU.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){k5.default.hide(this.props.stdout)}componentWillUnmount(){k5.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(u){this.handleExit(u)}};vs.default=H3;H3.displayName="InternalApp"});var M5=Me(gs=>{"use strict";var FU=gs&&gs.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),LU=gs&&gs.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),RU=gs&&gs.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&FU(u,i,f);return LU(u,i),u},_s=gs&&gs.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(gs,"__esModule",{value:!0});var NU=_s(lr()),O5=AD(),BU=_s(WD()),jU=_s(ay()),UU=_s(KD()),qU=_s(JD()),nm=_s(lS()),zU=_s(t5()),WU=_s(vy()),HU=_s(o5()),bU=RU(Xy()),GU=_s(O3()),VU=_s(A5()),Oa=process.env.CI==="false"?!1:UU.default,I5=()=>{},P5=class{constructor(u){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:f,outputHeight:c,staticOutput:g}=zU.default(this.rootNode,this.options.stdout.columns||80),t=g&&g!==` -`;if(this.options.debug){t&&(this.fullStaticOutput+=g),this.options.stdout.write(this.fullStaticOutput+f);return}if(Oa){t&&this.options.stdout.write(g),this.lastOutput=f;return}if(t&&(this.fullStaticOutput+=g),c>=this.options.stdout.rows){this.options.stdout.write(jU.default.clearTerminal+this.fullStaticOutput+f),this.lastOutput=f;return}t&&(this.log.clear(),this.options.stdout.write(g),this.log(f)),!t&&f!==this.lastOutput&&this.throttledLog(f),this.lastOutput=f},qU.default(this),this.options=u,this.rootNode=bU.createNode("ink-root"),this.rootNode.onRender=u.debug?this.onRender:O5.throttle(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=BU.default.create(u.stdout),this.throttledLog=u.debug?this.log:O5.throttle(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=nm.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=WU.default(this.unmount,{alwaysLast:!1}),process.env.DEV==="true"&&nm.default.injectIntoDevTools({bundleType:0,version:"16.13.1",rendererPackageName:"ink"}),u.patchConsole&&this.patchConsole(),Oa||(u.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{u.stdout.off("resize",this.onRender)})}render(u){let f=NU.default.createElement(VU.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},u);nm.default.updateContainer(f,this.container,null,I5)}writeToStdout(u){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(u+this.fullStaticOutput+this.lastOutput);return}if(Oa){this.options.stdout.write(u);return}this.log.clear(),this.options.stdout.write(u),this.log(this.lastOutput)}}writeToStderr(u){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(u),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(Oa){this.options.stderr.write(u);return}this.log.clear(),this.options.stderr.write(u),this.log(this.lastOutput)}}unmount(u){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),Oa?this.options.stdout.write(this.lastOutput+` -`):this.options.debug||this.log.done(),this.isUnmounted=!0,nm.default.updateContainer(null,this.container,null,I5),GU.default.delete(this.options.stdout),u instanceof Error?this.rejectExitPromise(u):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((u,f)=>{this.resolveExitPromise=u,this.rejectExitPromise=f})),this.exitPromise}clear(){!Oa&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=HU.default((u,f)=>{u==="stdout"&&this.writeToStdout(f),u==="stderr"&&(f.startsWith("The above error occurred")||this.writeToStderr(f))}))}};gs.default=P5});var L5=Me(B2=>{"use strict";var F5=B2&&B2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(B2,"__esModule",{value:!0});var YU=F5(M5()),rm=F5(O3()),$U=require("stream"),JU=(i,u)=>{let f=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},KU(u)),c=XU(f.stdout,()=>new YU.default(f));return c.render(i),{rerender:c.render,unmount:()=>c.unmount(),waitUntilExit:c.waitUntilExit,cleanup:()=>rm.default.delete(f.stdout),clear:c.clear}};B2.default=JU;var KU=(i={})=>i instanceof $U.Stream?{stdout:i,stdin:process.stdin}:i,XU=(i,u)=>{let f;return rm.default.has(i)?f=rm.default.get(i):(f=u(),rm.default.set(i,f)),f}});var N5=Me(tf=>{"use strict";var QU=tf&&tf.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),ZU=tf&&tf.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),eq=tf&&tf.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&QU(u,i,f);return ZU(u,i),u};Object.defineProperty(tf,"__esModule",{value:!0});var j2=eq(lr()),R5=i=>{let{items:u,children:f,style:c}=i,[g,t]=j2.useState(0),C=j2.useMemo(()=>u.slice(g),[u,g]);j2.useLayoutEffect(()=>{t(u.length)},[u.length]);let A=C.map((D,L)=>f(D,g+L)),x=j2.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},c),[c]);return j2.default.createElement("ink-box",{internal_static:!0,style:x},A)};R5.displayName="Static";tf.default=R5});var j5=Me(U2=>{"use strict";var tq=U2&&U2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(U2,"__esModule",{value:!0});var nq=tq(lr()),B5=({children:i,transform:u})=>i==null?null:nq.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:u},i);B5.displayName="Transform";U2.default=B5});var q5=Me(q2=>{"use strict";var rq=q2&&q2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(q2,"__esModule",{value:!0});var iq=rq(lr()),U5=({count:i=1})=>iq.default.createElement("ink-text",null,` -`.repeat(i));U5.displayName="Newline";q2.default=U5});var H5=Me(z2=>{"use strict";var z5=z2&&z2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(z2,"__esModule",{value:!0});var oq=z5(lr()),uq=z5(tm()),W5=()=>oq.default.createElement(uq.default,{flexGrow:1});W5.displayName="Spacer";z2.default=W5});var im=Me(W2=>{"use strict";var sq=W2&&W2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(W2,"__esModule",{value:!0});var lq=lr(),fq=sq(F3()),cq=()=>lq.useContext(fq.default);W2.default=cq});var G5=Me(H2=>{"use strict";var aq=H2&&H2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(H2,"__esModule",{value:!0});var b5=lr(),dq=aq(im()),pq=(i,u={})=>{let{stdin:f,setRawMode:c,internal_exitOnCtrlC:g}=dq.default();b5.useEffect(()=>{if(u.isActive!==!1)return c(!0),()=>{c(!1)}},[u.isActive,c]),b5.useEffect(()=>{if(u.isActive===!1)return;let t=C=>{let A=String(C),x={upArrow:A==="",downArrow:A==="",leftArrow:A==="",rightArrow:A==="",pageDown:A==="[6~",pageUp:A==="[5~",return:A==="\r",escape:A==="",ctrl:!1,shift:!1,tab:A===" "||A==="",backspace:A==="\b",delete:A==="\x7F"||A==="[3~",meta:!1};A<=""&&!x.return&&(A=String.fromCharCode(A.charCodeAt(0)+"a".charCodeAt(0)-1),x.ctrl=!0),A.startsWith("")&&(A=A.slice(1),x.meta=!0);let D=A>="A"&&A<="Z",L=A>="\u0410"&&A<="\u042F";A.length===1&&(D||L)&&(x.shift=!0),x.tab&&A==="[Z"&&(x.shift=!0),(x.tab||x.backspace||x.delete)&&(A=""),(!(A==="c"&&x.ctrl)||!g)&&i(A,x)};return f==null||f.on("data",t),()=>{f==null||f.off("data",t)}},[u.isActive,f,g,i])};H2.default=pq});var V5=Me(b2=>{"use strict";var hq=b2&&b2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(b2,"__esModule",{value:!0});var mq=lr(),vq=hq(P3()),gq=()=>mq.useContext(vq.default);b2.default=gq});var Y5=Me(G2=>{"use strict";var _q=G2&&G2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(G2,"__esModule",{value:!0});var yq=lr(),wq=_q(R3()),Dq=()=>yq.useContext(wq.default);G2.default=Dq});var $5=Me(V2=>{"use strict";var Eq=V2&&V2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(V2,"__esModule",{value:!0});var Sq=lr(),Cq=Eq(B3()),Tq=()=>Sq.useContext(Cq.default);V2.default=Tq});var X5=Me(Y2=>{"use strict";var K5=Y2&&Y2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Y2,"__esModule",{value:!0});var $2=lr(),xq=K5(Zh()),kq=K5(im()),Aq=({isActive:i=!0,autoFocus:u=!1}={})=>{let{isRawModeSupported:f,setRawMode:c}=kq.default(),{activeId:g,add:t,remove:C,activate:A,deactivate:x}=$2.useContext(xq.default),D=$2.useMemo(()=>Math.random().toString().slice(2,7),[]);return $2.useEffect(()=>(t(D,{autoFocus:u}),()=>{C(D)}),[D,u]),$2.useEffect(()=>{i?A(D):x(D)},[i,D]),$2.useEffect(()=>{if(!(!f||!i))return c(!0),()=>{c(!1)}},[i]),{isFocused:Boolean(D)&&g===D}};Y2.default=Aq});var J5=Me(K2=>{"use strict";var Oq=K2&&K2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(K2,"__esModule",{value:!0});var Iq=lr(),Pq=Oq(Zh()),Mq=()=>{let i=Iq.useContext(Pq.default);return{enableFocus:i.enableFocus,disableFocus:i.disableFocus,focusNext:i.focusNext,focusPrevious:i.focusPrevious}};K2.default=Mq});var Q5=Me(b3=>{"use strict";Object.defineProperty(b3,"__esModule",{value:!0});b3.default=i=>{var u,f,c,g;return{width:(f=(u=i.yogaNode)===null||u===void 0?void 0:u.getComputedWidth())!==null&&f!==void 0?f:0,height:(g=(c=i.yogaNode)===null||c===void 0?void 0:c.getComputedHeight())!==null&&g!==void 0?g:0}}});var ys=Me(ji=>{"use strict";Object.defineProperty(ji,"__esModule",{value:!0});var Fq=L5();Object.defineProperty(ji,"render",{enumerable:!0,get:function(){return Fq.default}});var Lq=tm();Object.defineProperty(ji,"Box",{enumerable:!0,get:function(){return Lq.default}});var Rq=W3();Object.defineProperty(ji,"Text",{enumerable:!0,get:function(){return Rq.default}});var Nq=N5();Object.defineProperty(ji,"Static",{enumerable:!0,get:function(){return Nq.default}});var Bq=j5();Object.defineProperty(ji,"Transform",{enumerable:!0,get:function(){return Bq.default}});var jq=q5();Object.defineProperty(ji,"Newline",{enumerable:!0,get:function(){return jq.default}});var Uq=H5();Object.defineProperty(ji,"Spacer",{enumerable:!0,get:function(){return Uq.default}});var qq=G5();Object.defineProperty(ji,"useInput",{enumerable:!0,get:function(){return qq.default}});var zq=V5();Object.defineProperty(ji,"useApp",{enumerable:!0,get:function(){return zq.default}});var Wq=im();Object.defineProperty(ji,"useStdin",{enumerable:!0,get:function(){return Wq.default}});var Hq=Y5();Object.defineProperty(ji,"useStdout",{enumerable:!0,get:function(){return Hq.default}});var bq=$5();Object.defineProperty(ji,"useStderr",{enumerable:!0,get:function(){return bq.default}});var Gq=X5();Object.defineProperty(ji,"useFocus",{enumerable:!0,get:function(){return Gq.default}});var Vq=J5();Object.defineProperty(ji,"useFocusManager",{enumerable:!0,get:function(){return Vq.default}});var Yq=Q5();Object.defineProperty(ji,"measureElement",{enumerable:!0,get:function(){return Yq.default}})});var lC=Me(X2=>{"use strict";Object.defineProperty(X2,"__esModule",{value:!0});X2.UncontrolledTextInput=void 0;var oC=lr(),Y3=lr(),uC=ys(),Sc=Jh(),sC=({value:i,placeholder:u="",focus:f=!0,mask:c,highlightPastedText:g=!1,showCursor:t=!0,onChange:C,onSubmit:A})=>{let[{cursorOffset:x,cursorWidth:D},L]=Y3.useState({cursorOffset:(i||"").length,cursorWidth:0});Y3.useEffect(()=>{L(re=>{if(!f||!t)return re;let ce=i||"";return re.cursorOffset>ce.length-1?{cursorOffset:ce.length,cursorWidth:0}:re})},[i,f,t]);let N=g?D:0,j=c?c.repeat(i.length):i,$=j,h=u?Sc.grey(u):void 0;if(t&&f){h=u.length>0?Sc.inverse(u[0])+Sc.grey(u.slice(1)):Sc.inverse(" "),$=j.length>0?"":Sc.inverse(" ");let re=0;for(let ce of j)re>=x-N&&re<=x?$+=Sc.inverse(ce):$+=ce,re++;j.length>0&&x===j.length&&($+=Sc.inverse(" "))}return uC.useInput((re,ce)=>{if(ce.upArrow||ce.downArrow||ce.ctrl&&re==="c"||ce.tab||ce.shift&&ce.tab)return;if(ce.return){A&&A(i);return}let Q=x,oe=i,Se=0;ce.leftArrow?t&&Q--:ce.rightArrow?t&&Q++:ce.backspace||ce.delete?x>0&&(oe=i.slice(0,x-1)+i.slice(x,i.length),Q--):(oe=i.slice(0,x)+re+i.slice(x,i.length),Q+=re.length,re.length>1&&(Se=re.length)),x<0&&(Q=0),x>i.length&&(Q=i.length),L({cursorOffset:Q,cursorWidth:Se}),oe!==i&&C(oe)},{isActive:f}),oC.createElement(uC.Text,null,u?j.length>0?$:h:$)};X2.default=sC;X2.UncontrolledTextInput=i=>{let[u,f]=Y3.useState("");return oC.createElement(sC,Object.assign({},i,{value:u,onChange:f}))}});var cC=Me(pm=>{"use strict";Object.defineProperty(pm,"__esModule",{value:!0});function J2(i){let u=[...i.caches],f=u.shift();return f===void 0?fC():{get(c,g,t={miss:()=>Promise.resolve()}){return f.get(c,g,t).catch(()=>J2({caches:u}).get(c,g,t))},set(c,g){return f.set(c,g).catch(()=>J2({caches:u}).set(c,g))},delete(c){return f.delete(c).catch(()=>J2({caches:u}).delete(c))},clear(){return f.clear().catch(()=>J2({caches:u}).clear())}}}function fC(){return{get(i,u,f={miss:()=>Promise.resolve()}){return u().then(g=>Promise.all([g,f.miss(g)])).then(([g])=>g)},set(i,u){return Promise.resolve(u)},delete(i){return Promise.resolve()},clear(){return Promise.resolve()}}}pm.createFallbackableCache=J2;pm.createNullCache=fC});var dC=Me((fV,aC)=>{aC.exports=cC()});var pC=Me($3=>{"use strict";Object.defineProperty($3,"__esModule",{value:!0});function $q(i={serializable:!0}){let u={};return{get(f,c,g={miss:()=>Promise.resolve()}){let t=JSON.stringify(f);if(t in u)return Promise.resolve(i.serializable?JSON.parse(u[t]):u[t]);let C=c(),A=g&&g.miss||(()=>Promise.resolve());return C.then(x=>A(x)).then(()=>C)},set(f,c){return u[JSON.stringify(f)]=i.serializable?JSON.stringify(c):c,Promise.resolve(c)},delete(f){return delete u[JSON.stringify(f)],Promise.resolve()},clear(){return u={},Promise.resolve()}}}$3.createInMemoryCache=$q});var mC=Me((aV,hC)=>{hC.exports=pC()});var gC=Me(ws=>{"use strict";Object.defineProperty(ws,"__esModule",{value:!0});function Kq(i,u,f){let c={"x-algolia-api-key":f,"x-algolia-application-id":u};return{headers(){return i===K3.WithinHeaders?c:{}},queryParameters(){return i===K3.WithinQueryParameters?c:{}}}}function Xq(i){let u=0,f=()=>(u++,new Promise(c=>{setTimeout(()=>{c(i(f))},Math.min(100*u,1e3))}));return i(f)}function vC(i,u=(f,c)=>Promise.resolve()){return Object.assign(i,{wait(f){return vC(i.then(c=>Promise.all([u(c,f),c])).then(c=>c[1]))}})}function Jq(i){let u=i.length-1;for(u;u>0;u--){let f=Math.floor(Math.random()*(u+1)),c=i[u];i[u]=i[f],i[f]=c}return i}function Qq(i,u){return Object.keys(u!==void 0?u:{}).forEach(f=>{i[f]=u[f](i)}),i}function Zq(i,...u){let f=0;return i.replace(/%s/g,()=>encodeURIComponent(u[f++]))}var ez="4.2.0",tz=i=>()=>i.transporter.requester.destroy(),K3={WithinQueryParameters:0,WithinHeaders:1};ws.AuthMode=K3;ws.addMethods=Qq;ws.createAuth=Kq;ws.createRetryablePromise=Xq;ws.createWaitablePromise=vC;ws.destroy=tz;ws.encode=Zq;ws.shuffle=Jq;ws.version=ez});var Q2=Me((pV,_C)=>{_C.exports=gC()});var yC=Me(X3=>{"use strict";Object.defineProperty(X3,"__esModule",{value:!0});var nz={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};X3.MethodEnum=nz});var Z2=Me((mV,wC)=>{wC.exports=yC()});var RC=Me(y0=>{"use strict";Object.defineProperty(y0,"__esModule",{value:!0});var DC=Z2();function J3(i,u){let f=i||{},c=f.data||{};return Object.keys(f).forEach(g=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(g)===-1&&(c[g]=f[g])}),{data:Object.entries(c).length>0?c:void 0,timeout:f.timeout||u,headers:f.headers||{},queryParameters:f.queryParameters||{},cacheable:f.cacheable}}var hm={Read:1,Write:2,Any:3},Ia={Up:1,Down:2,Timeouted:3},EC=2*60*1e3;function Q3(i,u=Ia.Up){return zn(dt({},i),{status:u,lastUpdate:Date.now()})}function SC(i){return i.status===Ia.Up||Date.now()-i.lastUpdate>EC}function CC(i){return i.status===Ia.Timeouted&&Date.now()-i.lastUpdate<=EC}function Z3(i){return{protocol:i.protocol||"https",url:i.url,accept:i.accept||hm.Any}}function rz(i,u){return Promise.all(u.map(f=>i.get(f,()=>Promise.resolve(Q3(f))))).then(f=>{let c=f.filter(A=>SC(A)),g=f.filter(A=>CC(A)),t=[...c,...g],C=t.length>0?t.map(A=>Z3(A)):u;return{getTimeout(A,x){return(g.length===0&&A===0?1:g.length+3+A)*x},statelessHosts:C}})}var iz=({isTimedOut:i,status:u})=>!i&&~~u==0,oz=i=>{let u=i.status;return i.isTimedOut||iz(i)||~~(u/100)!=2&&~~(u/100)!=4},uz=({status:i})=>~~(i/100)==2,sz=(i,u)=>oz(i)?u.onRetry(i):uz(i)?u.onSucess(i):u.onFail(i);function PC(i,u,f,c){let g=[],t=AC(f,c),C=OC(i,c),A=f.method,x=f.method!==DC.MethodEnum.Get?{}:dt(dt({},f.data),c.data),D=dt(dt(dt({"x-algolia-agent":i.userAgent.value},i.queryParameters),x),c.queryParameters),L=0,N=(j,$)=>{let h=j.pop();if(h===void 0)throw IC(ew(g));let re={data:t,headers:C,method:A,url:kC(h,f.path,D),connectTimeout:$(L,i.timeouts.connect),responseTimeout:$(L,c.timeout)},ce=oe=>{let Se={request:re,response:oe,host:h,triesLeft:j.length};return g.push(Se),Se},Q={onSucess:oe=>TC(oe),onRetry(oe){let Se=ce(oe);return oe.isTimedOut&&L++,Promise.all([i.logger.info("Retryable failure",tw(Se)),i.hostsCache.set(h,Q3(h,oe.isTimedOut?Ia.Timeouted:Ia.Down))]).then(()=>N(j,$))},onFail(oe){throw ce(oe),xC(oe,ew(g))}};return i.requester.send(re).then(oe=>sz(oe,Q))};return rz(i.hostsCache,u).then(j=>N([...j.statelessHosts].reverse(),j.getTimeout))}function lz(i){let{hostsCache:u,logger:f,requester:c,requestsCache:g,responsesCache:t,timeouts:C,userAgent:A,hosts:x,queryParameters:D,headers:L}=i,N={hostsCache:u,logger:f,requester:c,requestsCache:g,responsesCache:t,timeouts:C,userAgent:A,headers:L,queryParameters:D,hosts:x.map(j=>Z3(j)),read(j,$){let h=J3($,N.timeouts.read),re=()=>PC(N,N.hosts.filter(oe=>(oe.accept&hm.Read)!=0),j,h);if((h.cacheable!==void 0?h.cacheable:j.cacheable)!==!0)return re();let Q={request:j,mappedRequestOptions:h,transporter:{queryParameters:N.queryParameters,headers:N.headers}};return N.responsesCache.get(Q,()=>N.requestsCache.get(Q,()=>N.requestsCache.set(Q,re()).then(oe=>Promise.all([N.requestsCache.delete(Q),oe]),oe=>Promise.all([N.requestsCache.delete(Q),Promise.reject(oe)])).then(([oe,Se])=>Se)),{miss:oe=>N.responsesCache.set(Q,oe)})},write(j,$){return PC(N,N.hosts.filter(h=>(h.accept&hm.Write)!=0),j,J3($,N.timeouts.write))}};return N}function fz(i){let u={value:`Algolia for JavaScript (${i})`,add(f){let c=`; ${f.segment}${f.version!==void 0?` (${f.version})`:""}`;return u.value.indexOf(c)===-1&&(u.value=`${u.value}${c}`),u}};return u}function TC(i){try{return JSON.parse(i.content)}catch(u){throw MC(u.message,i)}}function xC({content:i,status:u},f){let c=i;try{c=JSON.parse(i).message}catch(g){}return FC(c,u,f)}function cz(i,...u){let f=0;return i.replace(/%s/g,()=>encodeURIComponent(u[f++]))}function kC(i,u,f){let c=LC(f),g=`${i.protocol}://${i.url}/${u.charAt(0)==="/"?u.substr(1):u}`;return c.length&&(g+=`?${c}`),g}function LC(i){let u=f=>Object.prototype.toString.call(f)==="[object Object]"||Object.prototype.toString.call(f)==="[object Array]";return Object.keys(i).map(f=>cz("%s=%s",f,u(i[f])?JSON.stringify(i[f]):i[f])).join("&")}function AC(i,u){if(i.method===DC.MethodEnum.Get||i.data===void 0&&u.data===void 0)return;let f=Array.isArray(i.data)?i.data:dt(dt({},i.data),u.data);return JSON.stringify(f)}function OC(i,u){let f=dt(dt({},i.headers),u.headers),c={};return Object.keys(f).forEach(g=>{let t=f[g];c[g.toLowerCase()]=t}),c}function ew(i){return i.map(u=>tw(u))}function tw(i){let u=i.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return zn(dt({},i),{request:zn(dt({},i.request),{headers:dt(dt({},i.request.headers),u)})})}function FC(i,u,f){return{name:"ApiError",message:i,status:u,transporterStackTrace:f}}function MC(i,u){return{name:"DeserializationError",message:i,response:u}}function IC(i){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:i}}y0.CallEnum=hm;y0.HostStatusEnum=Ia;y0.createApiError=FC;y0.createDeserializationError=MC;y0.createMappedRequestOptions=J3;y0.createRetryError=IC;y0.createStatefulHost=Q3;y0.createStatelessHost=Z3;y0.createTransporter=lz;y0.createUserAgent=fz;y0.deserializeFailure=xC;y0.deserializeSuccess=TC;y0.isStatefulHostTimeouted=CC;y0.isStatefulHostUp=SC;y0.serializeData=AC;y0.serializeHeaders=OC;y0.serializeQueryParameters=LC;y0.serializeUrl=kC;y0.stackFrameWithoutCredentials=tw;y0.stackTraceWithoutCredentials=ew});var ed=Me((gV,NC)=>{NC.exports=RC()});var BC=Me(Hf=>{"use strict";Object.defineProperty(Hf,"__esModule",{value:!0});var Pa=Q2(),az=ed(),td=Z2(),dz=i=>{let u=i.region||"us",f=Pa.createAuth(Pa.AuthMode.WithinHeaders,i.appId,i.apiKey),c=az.createTransporter(zn(dt({hosts:[{url:`analytics.${u}.algolia.com`}]},i),{headers:dt(zn(dt({},f.headers()),{"content-type":"application/json"}),i.headers),queryParameters:dt(dt({},f.queryParameters()),i.queryParameters)})),g=i.appId;return Pa.addMethods({appId:g,transporter:c},i.methods)},pz=i=>(u,f)=>i.transporter.write({method:td.MethodEnum.Post,path:"2/abtests",data:u},f),hz=i=>(u,f)=>i.transporter.write({method:td.MethodEnum.Delete,path:Pa.encode("2/abtests/%s",u)},f),mz=i=>(u,f)=>i.transporter.read({method:td.MethodEnum.Get,path:Pa.encode("2/abtests/%s",u)},f),vz=i=>u=>i.transporter.read({method:td.MethodEnum.Get,path:"2/abtests"},u),gz=i=>(u,f)=>i.transporter.write({method:td.MethodEnum.Post,path:Pa.encode("2/abtests/%s/stop",u)},f);Hf.addABTest=pz;Hf.createAnalyticsClient=dz;Hf.deleteABTest=hz;Hf.getABTest=mz;Hf.getABTests=vz;Hf.stopABTest=gz});var UC=Me((yV,jC)=>{jC.exports=BC()});var zC=Me(nd=>{"use strict";Object.defineProperty(nd,"__esModule",{value:!0});var nw=Q2(),_z=ed(),qC=Z2(),yz=i=>{let u=i.region||"us",f=nw.createAuth(nw.AuthMode.WithinHeaders,i.appId,i.apiKey),c=_z.createTransporter(zn(dt({hosts:[{url:`recommendation.${u}.algolia.com`}]},i),{headers:dt(zn(dt({},f.headers()),{"content-type":"application/json"}),i.headers),queryParameters:dt(dt({},f.queryParameters()),i.queryParameters)}));return nw.addMethods({appId:i.appId,transporter:c},i.methods)},wz=i=>u=>i.transporter.read({method:qC.MethodEnum.Get,path:"1/strategies/personalization"},u),Dz=i=>(u,f)=>i.transporter.write({method:qC.MethodEnum.Post,path:"1/strategies/personalization",data:u},f);nd.createRecommendationClient=yz;nd.getPersonalizationStrategy=wz;nd.setPersonalizationStrategy=Dz});var HC=Me((DV,WC)=>{WC.exports=zC()});var nT=Me(yt=>{"use strict";Object.defineProperty(yt,"__esModule",{value:!0});var Wt=Q2(),jo=ed(),Rn=Z2(),Ez=require("crypto");function mm(i){let u=f=>i.request(f).then(c=>{if(i.batch!==void 0&&i.batch(c.hits),!i.shouldStop(c))return c.cursor?u({cursor:c.cursor}):u({page:(f.page||0)+1})});return u({})}var Sz=i=>{let u=i.appId,f=Wt.createAuth(i.authMode!==void 0?i.authMode:Wt.AuthMode.WithinHeaders,u,i.apiKey),c=jo.createTransporter(zn(dt({hosts:[{url:`${u}-dsn.algolia.net`,accept:jo.CallEnum.Read},{url:`${u}.algolia.net`,accept:jo.CallEnum.Write}].concat(Wt.shuffle([{url:`${u}-1.algolianet.com`},{url:`${u}-2.algolianet.com`},{url:`${u}-3.algolianet.com`}]))},i),{headers:dt(zn(dt({},f.headers()),{"content-type":"application/x-www-form-urlencoded"}),i.headers),queryParameters:dt(dt({},f.queryParameters()),i.queryParameters)})),g={transporter:c,appId:u,addAlgoliaAgent(t,C){c.userAgent.add({segment:t,version:C})},clearCache(){return Promise.all([c.requestsCache.clear(),c.responsesCache.clear()]).then(()=>{})}};return Wt.addMethods(g,i.methods)};function bC(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function GC(){return{name:"ObjectNotFoundError",message:"Object not found."}}function VC(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Cz=i=>(u,f)=>{let A=f||{},{queryParameters:c}=A,g=Si(A,["queryParameters"]),t=dt({acl:u},c!==void 0?{queryParameters:c}:{}),C=(x,D)=>Wt.createRetryablePromise(L=>rd(i)(x.key,D).catch(N=>{if(N.status!==404)throw N;return L()}));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:"1/keys",data:t},g),C)},Tz=i=>(u,f,c)=>{let g=jo.createMappedRequestOptions(c);return g.queryParameters["X-Algolia-User-ID"]=u,i.transporter.write({method:Rn.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:f}},g)},xz=i=>(u,f,c)=>i.transporter.write({method:Rn.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:u,cluster:f}},c),vm=i=>(u,f,c)=>{let g=(t,C)=>id(i)(u,{methods:{waitTask:z0}}).waitTask(t.taskID,C);return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/operation",u),data:{operation:"copy",destination:f}},c),g)},kz=i=>(u,f,c)=>vm(i)(u,f,zn(dt({},c),{scope:[gm.Rules]})),Az=i=>(u,f,c)=>vm(i)(u,f,zn(dt({},c),{scope:[gm.Settings]})),Oz=i=>(u,f,c)=>vm(i)(u,f,zn(dt({},c),{scope:[gm.Synonyms]})),Iz=i=>(u,f)=>{let c=(g,t)=>Wt.createRetryablePromise(C=>rd(i)(u,t).then(C).catch(A=>{if(A.status!==404)throw A}));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Delete,path:Wt.encode("1/keys/%s",u)},f),c)},Pz=()=>(i,u)=>{let f=jo.serializeQueryParameters(u),c=Ez.createHmac("sha256",i).update(f).digest("hex");return Buffer.from(c+f).toString("base64")},rd=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/keys/%s",u)},f),Mz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/logs"},u),Fz=()=>i=>{let u=Buffer.from(i,"base64").toString("ascii"),f=/validUntil=(\d+)/,c=u.match(f);if(c===null)throw VC();return parseInt(c[1],10)-Math.round(new Date().getTime()/1e3)},Lz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/clusters/mapping/top"},u),Rz=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/clusters/mapping/%s",u)},f),Nz=i=>u=>{let g=u||{},{retrieveMappings:f}=g,c=Si(g,["retrieveMappings"]);return f===!0&&(c.getClusters=!0),i.transporter.read({method:Rn.MethodEnum.Get,path:"1/clusters/mapping/pending"},c)},id=i=>(u,f={})=>{let c={transporter:i.transporter,appId:i.appId,indexName:u};return Wt.addMethods(c,f.methods)},Bz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/keys"},u),jz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/clusters"},u),Uz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/indexes"},u),qz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/clusters/mapping"},u),zz=i=>(u,f,c)=>{let g=(t,C)=>id(i)(u,{methods:{waitTask:z0}}).waitTask(t.taskID,C);return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/operation",u),data:{operation:"move",destination:f}},c),g)},Wz=i=>(u,f)=>{let c=(g,t)=>Promise.all(Object.keys(g.taskID).map(C=>id(i)(C,{methods:{waitTask:z0}}).waitTask(g.taskID[C],t)));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:u}},f),c)},Hz=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:u}},f),bz=i=>(u,f)=>{let c=u.map(g=>zn(dt({},g),{params:jo.serializeQueryParameters(g.params||{})}));return i.transporter.read({method:Rn.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:c},cacheable:!0},f)},Gz=i=>(u,f)=>Promise.all(u.map(c=>{let A=c.params,{facetName:g,facetQuery:t}=A,C=Si(A,["facetName","facetQuery"]);return id(i)(c.indexName,{methods:{searchForFacetValues:YC}}).searchForFacetValues(g,t,dt(dt({},f),C))})),Vz=i=>(u,f)=>{let c=jo.createMappedRequestOptions(f);return c.queryParameters["X-Algolia-User-ID"]=u,i.transporter.write({method:Rn.MethodEnum.Delete,path:"1/clusters/mapping"},c)},Yz=i=>(u,f)=>{let c=(g,t)=>Wt.createRetryablePromise(C=>rd(i)(u,t).catch(A=>{if(A.status!==404)throw A;return C()}));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/keys/%s/restore",u)},f),c)},$z=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:u}},f),Kz=i=>(u,f)=>{let c=Object.assign({},f),L=f||{},{queryParameters:g}=L,t=Si(L,["queryParameters"]),C=g?{queryParameters:g}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],x=N=>Object.keys(c).filter(j=>A.indexOf(j)!==-1).every(j=>N[j]===c[j]),D=(N,j)=>Wt.createRetryablePromise($=>rd(i)(u,j).then(h=>x(h)?Promise.resolve():$()));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Put,path:Wt.encode("1/keys/%s",u),data:C},t),D)},$C=i=>(u,f)=>{let c=(g,t)=>z0(i)(g.taskID,t);return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/batch",i.indexName),data:{requests:u}},f),c)},Xz=i=>u=>mm(zn(dt({},u),{shouldStop:f=>f.cursor===void 0,request:f=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/browse",i.indexName),data:f},u)})),Jz=i=>u=>{let f=dt({hitsPerPage:1e3},u);return mm(zn(dt({},f),{shouldStop:c=>c.hits.lengthzn(dt({},g),{hits:g.hits.map(t=>(delete t._highlightResult,t))}))}}))},Qz=i=>u=>{let f=dt({hitsPerPage:1e3},u);return mm(zn(dt({},f),{shouldStop:c=>c.hits.lengthzn(dt({},g),{hits:g.hits.map(t=>(delete t._highlightResult,t))}))}}))},_m=i=>(u,f,c)=>{let x=c||{},{batchSize:g}=x,t=Si(x,["batchSize"]),C={taskIDs:[],objectIDs:[]},A=(D=0)=>{let L=[],N;for(N=D;N({action:f,body:j})),t).then(j=>(C.objectIDs=C.objectIDs.concat(j.objectIDs),C.taskIDs.push(j.taskID),N++,A(N)))};return Wt.createWaitablePromise(A(),(D,L)=>Promise.all(D.taskIDs.map(N=>z0(i)(N,L))))},Zz=i=>u=>Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/clear",i.indexName)},u),(f,c)=>z0(i)(f.taskID,c)),eW=i=>u=>{let t=u||{},{forwardToReplicas:f}=t,c=Si(t,["forwardToReplicas"]),g=jo.createMappedRequestOptions(c);return f&&(g.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/rules/clear",i.indexName)},g),(C,A)=>z0(i)(C.taskID,A))},tW=i=>u=>{let t=u||{},{forwardToReplicas:f}=t,c=Si(t,["forwardToReplicas"]),g=jo.createMappedRequestOptions(c);return f&&(g.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/synonyms/clear",i.indexName)},g),(C,A)=>z0(i)(C.taskID,A))},nW=i=>(u,f)=>Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/deleteByQuery",i.indexName),data:u},f),(c,g)=>z0(i)(c.taskID,g)),rW=i=>u=>Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Delete,path:Wt.encode("1/indexes/%s",i.indexName)},u),(f,c)=>z0(i)(f.taskID,c)),iW=i=>(u,f)=>Wt.createWaitablePromise(JC(i)([u],f).then(c=>({taskID:c.taskIDs[0]})),(c,g)=>z0(i)(c.taskID,g)),JC=i=>(u,f)=>{let c=u.map(g=>({objectID:g}));return _m(i)(c,Cc.DeleteObject,f)},oW=i=>(u,f)=>{let C=f||{},{forwardToReplicas:c}=C,g=Si(C,["forwardToReplicas"]),t=jo.createMappedRequestOptions(g);return c&&(t.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Delete,path:Wt.encode("1/indexes/%s/rules/%s",i.indexName,u)},t),(A,x)=>z0(i)(A.taskID,x))},uW=i=>(u,f)=>{let C=f||{},{forwardToReplicas:c}=C,g=Si(C,["forwardToReplicas"]),t=jo.createMappedRequestOptions(g);return c&&(t.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Delete,path:Wt.encode("1/indexes/%s/synonyms/%s",i.indexName,u)},t),(A,x)=>z0(i)(A.taskID,x))},sW=i=>u=>QC(i)(u).then(()=>!0).catch(f=>{if(f.status!==404)throw f;return!1}),lW=i=>(u,f)=>{let x=f||{},{query:c,paginate:g}=x,t=Si(x,["query","paginate"]),C=0,A=()=>ZC(i)(c||"",zn(dt({},t),{page:C})).then(D=>{for(let[L,N]of Object.entries(D.hits))if(u(N))return{object:N,position:parseInt(L,10),page:C};if(C++,g===!1||C>=D.nbPages)throw GC();return A()});return A()},fW=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/%s",i.indexName,u)},f),cW=()=>(i,u)=>{for(let[f,c]of Object.entries(i.hits))if(c.objectID===u)return parseInt(f,10);return-1},aW=i=>(u,f)=>{let C=f||{},{attributesToRetrieve:c}=C,g=Si(C,["attributesToRetrieve"]),t=u.map(A=>dt({indexName:i.indexName,objectID:A},c?{attributesToRetrieve:c}:{}));return i.transporter.read({method:Rn.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:t}},g)},dW=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/rules/%s",i.indexName,u)},f),QC=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/settings",i.indexName),data:{getVersion:2}},u),pW=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/synonyms/%s",i.indexName,u)},f),eT=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/task/%s",i.indexName,u.toString())},f),hW=i=>(u,f)=>Wt.createWaitablePromise(tT(i)([u],f).then(c=>({objectID:c.objectIDs[0],taskID:c.taskIDs[0]})),(c,g)=>z0(i)(c.taskID,g)),tT=i=>(u,f)=>{let C=f||{},{createIfNotExists:c}=C,g=Si(C,["createIfNotExists"]),t=c?Cc.PartialUpdateObject:Cc.PartialUpdateObjectNoCreate;return _m(i)(u,t,g)},mW=i=>(u,f)=>{let h=f||{},{safe:c,autoGenerateObjectIDIfNotExist:g,batchSize:t}=h,C=Si(h,["safe","autoGenerateObjectIDIfNotExist","batchSize"]),A=(re,ce,Q,oe)=>Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/operation",re),data:{operation:Q,destination:ce}},oe),(Se,me)=>z0(i)(Se.taskID,me)),x=Math.random().toString(36).substring(7),D=`${i.indexName}_tmp_${x}`,L=rw({appId:i.appId,transporter:i.transporter,indexName:D}),N=[],j=A(i.indexName,D,"copy",zn(dt({},C),{scope:["settings","synonyms","rules"]}));N.push(j);let $=(c?j.wait(C):j).then(()=>{let re=L(u,zn(dt({},C),{autoGenerateObjectIDIfNotExist:g,batchSize:t}));return N.push(re),c?re.wait(C):re}).then(()=>{let re=A(D,i.indexName,"move",C);return N.push(re),c?re.wait(C):re}).then(()=>Promise.all(N)).then(([re,ce,Q])=>({objectIDs:ce.objectIDs,taskIDs:[re.taskID,...ce.taskIDs,Q.taskID]}));return Wt.createWaitablePromise($,(re,ce)=>Promise.all(N.map(Q=>Q.wait(ce))))},vW=i=>(u,f)=>iw(i)(u,zn(dt({},f),{clearExistingRules:!0})),gW=i=>(u,f)=>ow(i)(u,zn(dt({},f),{replaceExistingSynonyms:!0})),_W=i=>(u,f)=>Wt.createWaitablePromise(rw(i)([u],f).then(c=>({objectID:c.objectIDs[0],taskID:c.taskIDs[0]})),(c,g)=>z0(i)(c.taskID,g)),rw=i=>(u,f)=>{let C=f||{},{autoGenerateObjectIDIfNotExist:c}=C,g=Si(C,["autoGenerateObjectIDIfNotExist"]),t=c?Cc.AddObject:Cc.UpdateObject;if(t===Cc.UpdateObject){for(let A of u)if(A.objectID===void 0)return Wt.createWaitablePromise(Promise.reject(bC()))}return _m(i)(u,t,g)},yW=i=>(u,f)=>iw(i)([u],f),iw=i=>(u,f)=>{let A=f||{},{forwardToReplicas:c,clearExistingRules:g}=A,t=Si(A,["forwardToReplicas","clearExistingRules"]),C=jo.createMappedRequestOptions(t);return c&&(C.queryParameters.forwardToReplicas=1),g&&(C.queryParameters.clearExistingRules=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/rules/batch",i.indexName),data:u},C),(x,D)=>z0(i)(x.taskID,D))},wW=i=>(u,f)=>ow(i)([u],f),ow=i=>(u,f)=>{let A=f||{},{forwardToReplicas:c,replaceExistingSynonyms:g}=A,t=Si(A,["forwardToReplicas","replaceExistingSynonyms"]),C=jo.createMappedRequestOptions(t);return c&&(C.queryParameters.forwardToReplicas=1),g&&(C.queryParameters.replaceExistingSynonyms=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/synonyms/batch",i.indexName),data:u},C),(x,D)=>z0(i)(x.taskID,D))},ZC=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/query",i.indexName),data:{query:u},cacheable:!0},f),YC=i=>(u,f,c)=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/facets/%s/query",i.indexName,u),data:{facetQuery:f},cacheable:!0},c),KC=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/rules/search",i.indexName),data:{query:u}},f),XC=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/synonyms/search",i.indexName),data:{query:u}},f),DW=i=>(u,f)=>{let C=f||{},{forwardToReplicas:c}=C,g=Si(C,["forwardToReplicas"]),t=jo.createMappedRequestOptions(g);return c&&(t.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Put,path:Wt.encode("1/indexes/%s/settings",i.indexName),data:u},t),(A,x)=>z0(i)(A.taskID,x))},z0=i=>(u,f)=>Wt.createRetryablePromise(c=>eT(i)(u,f).then(g=>g.status!=="published"?c():void 0)),EW={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},Cc={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject"},gm={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},SW={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},CW={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};yt.ApiKeyACLEnum=EW;yt.BatchActionEnum=Cc;yt.ScopeEnum=gm;yt.StrategyEnum=SW;yt.SynonymEnum=CW;yt.addApiKey=Cz;yt.assignUserID=Tz;yt.assignUserIDs=xz;yt.batch=$C;yt.browseObjects=Xz;yt.browseRules=Jz;yt.browseSynonyms=Qz;yt.chunkedBatch=_m;yt.clearObjects=Zz;yt.clearRules=eW;yt.clearSynonyms=tW;yt.copyIndex=vm;yt.copyRules=kz;yt.copySettings=Az;yt.copySynonyms=Oz;yt.createBrowsablePromise=mm;yt.createMissingObjectIDError=bC;yt.createObjectNotFoundError=GC;yt.createSearchClient=Sz;yt.createValidUntilNotFoundError=VC;yt.deleteApiKey=Iz;yt.deleteBy=nW;yt.deleteIndex=rW;yt.deleteObject=iW;yt.deleteObjects=JC;yt.deleteRule=oW;yt.deleteSynonym=uW;yt.exists=sW;yt.findObject=lW;yt.generateSecuredApiKey=Pz;yt.getApiKey=rd;yt.getLogs=Mz;yt.getObject=fW;yt.getObjectPosition=cW;yt.getObjects=aW;yt.getRule=dW;yt.getSecuredApiKeyRemainingValidity=Fz;yt.getSettings=QC;yt.getSynonym=pW;yt.getTask=eT;yt.getTopUserIDs=Lz;yt.getUserID=Rz;yt.hasPendingMappings=Nz;yt.initIndex=id;yt.listApiKeys=Bz;yt.listClusters=jz;yt.listIndices=Uz;yt.listUserIDs=qz;yt.moveIndex=zz;yt.multipleBatch=Wz;yt.multipleGetObjects=Hz;yt.multipleQueries=bz;yt.multipleSearchForFacetValues=Gz;yt.partialUpdateObject=hW;yt.partialUpdateObjects=tT;yt.removeUserID=Vz;yt.replaceAllObjects=mW;yt.replaceAllRules=vW;yt.replaceAllSynonyms=gW;yt.restoreApiKey=Yz;yt.saveObject=_W;yt.saveObjects=rw;yt.saveRule=yW;yt.saveRules=iw;yt.saveSynonym=wW;yt.saveSynonyms=ow;yt.search=ZC;yt.searchForFacetValues=YC;yt.searchRules=KC;yt.searchSynonyms=XC;yt.searchUserIDs=$z;yt.setSettings=DW;yt.updateApiKey=Kz;yt.waitTask=z0});var iT=Me((SV,rT)=>{rT.exports=nT()});var oT=Me(ym=>{"use strict";Object.defineProperty(ym,"__esModule",{value:!0});function TW(){return{debug(i,u){return Promise.resolve()},info(i,u){return Promise.resolve()},error(i,u){return Promise.resolve()}}}var xW={Debug:1,Info:2,Error:3};ym.LogLevelEnum=xW;ym.createNullLogger=TW});var sT=Me((TV,uT)=>{uT.exports=oT()});var cT=Me(uw=>{"use strict";Object.defineProperty(uw,"__esModule",{value:!0});var lT=require("http"),fT=require("https"),kW=require("url");function AW(){let i={keepAlive:!0},u=new lT.Agent(i),f=new fT.Agent(i);return{send(c){return new Promise(g=>{let t=kW.parse(c.url),C=t.query===null?t.pathname:`${t.pathname}?${t.query}`,A=dt({agent:t.protocol==="https:"?f:u,hostname:t.hostname,path:C,method:c.method,headers:c.headers},t.port!==void 0?{port:t.port||""}:{}),x=(t.protocol==="https:"?fT:lT).request(A,j=>{let $="";j.on("data",h=>$+=h),j.on("end",()=>{clearTimeout(L),clearTimeout(N),g({status:j.statusCode||0,content:$,isTimedOut:!1})})}),D=(j,$)=>setTimeout(()=>{x.abort(),g({status:0,content:$,isTimedOut:!0})},j*1e3),L=D(c.connectTimeout,"Connection timeout"),N;x.on("error",j=>{clearTimeout(L),clearTimeout(N),g({status:0,content:j.message,isTimedOut:!1})}),x.once("response",()=>{clearTimeout(L),N=D(c.responseTimeout,"Socket timeout")}),c.data!==void 0&&x.write(c.data),x.end()})},destroy(){return u.destroy(),f.destroy(),Promise.resolve()}}}uw.createNodeHttpRequester=AW});var dT=Me((kV,aT)=>{aT.exports=cT()});var vT=Me((AV,pT)=>{"use strict";var hT=dC(),OW=mC(),Ma=UC(),sw=Q2(),lw=HC(),Mt=iT(),IW=sT(),PW=dT(),MW=ed();function mT(i,u,f){let c={appId:i,apiKey:u,timeouts:{connect:2,read:5,write:30},requester:PW.createNodeHttpRequester(),logger:IW.createNullLogger(),responsesCache:hT.createNullCache(),requestsCache:hT.createNullCache(),hostsCache:OW.createInMemoryCache(),userAgent:MW.createUserAgent(sw.version).add({segment:"Node.js",version:process.versions.node})};return Mt.createSearchClient(zn(dt(dt({},c),f),{methods:{search:Mt.multipleQueries,searchForFacetValues:Mt.multipleSearchForFacetValues,multipleBatch:Mt.multipleBatch,multipleGetObjects:Mt.multipleGetObjects,multipleQueries:Mt.multipleQueries,copyIndex:Mt.copyIndex,copySettings:Mt.copySettings,copyRules:Mt.copyRules,copySynonyms:Mt.copySynonyms,moveIndex:Mt.moveIndex,listIndices:Mt.listIndices,getLogs:Mt.getLogs,listClusters:Mt.listClusters,multipleSearchForFacetValues:Mt.multipleSearchForFacetValues,getApiKey:Mt.getApiKey,addApiKey:Mt.addApiKey,listApiKeys:Mt.listApiKeys,updateApiKey:Mt.updateApiKey,deleteApiKey:Mt.deleteApiKey,restoreApiKey:Mt.restoreApiKey,assignUserID:Mt.assignUserID,assignUserIDs:Mt.assignUserIDs,getUserID:Mt.getUserID,searchUserIDs:Mt.searchUserIDs,listUserIDs:Mt.listUserIDs,getTopUserIDs:Mt.getTopUserIDs,removeUserID:Mt.removeUserID,hasPendingMappings:Mt.hasPendingMappings,generateSecuredApiKey:Mt.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:Mt.getSecuredApiKeyRemainingValidity,destroy:sw.destroy,initIndex:g=>t=>Mt.initIndex(g)(t,{methods:{batch:Mt.batch,delete:Mt.deleteIndex,getObject:Mt.getObject,getObjects:Mt.getObjects,saveObject:Mt.saveObject,saveObjects:Mt.saveObjects,search:Mt.search,searchForFacetValues:Mt.searchForFacetValues,waitTask:Mt.waitTask,setSettings:Mt.setSettings,getSettings:Mt.getSettings,partialUpdateObject:Mt.partialUpdateObject,partialUpdateObjects:Mt.partialUpdateObjects,deleteObject:Mt.deleteObject,deleteObjects:Mt.deleteObjects,deleteBy:Mt.deleteBy,clearObjects:Mt.clearObjects,browseObjects:Mt.browseObjects,getObjectPosition:Mt.getObjectPosition,findObject:Mt.findObject,exists:Mt.exists,saveSynonym:Mt.saveSynonym,saveSynonyms:Mt.saveSynonyms,getSynonym:Mt.getSynonym,searchSynonyms:Mt.searchSynonyms,browseSynonyms:Mt.browseSynonyms,deleteSynonym:Mt.deleteSynonym,clearSynonyms:Mt.clearSynonyms,replaceAllObjects:Mt.replaceAllObjects,replaceAllSynonyms:Mt.replaceAllSynonyms,searchRules:Mt.searchRules,getRule:Mt.getRule,deleteRule:Mt.deleteRule,saveRule:Mt.saveRule,saveRules:Mt.saveRules,replaceAllRules:Mt.replaceAllRules,browseRules:Mt.browseRules,clearRules:Mt.clearRules}}),initAnalytics:()=>g=>Ma.createAnalyticsClient(zn(dt(dt({},c),g),{methods:{addABTest:Ma.addABTest,getABTest:Ma.getABTest,getABTests:Ma.getABTests,stopABTest:Ma.stopABTest,deleteABTest:Ma.deleteABTest}})),initRecommendation:()=>g=>lw.createRecommendationClient(zn(dt(dt({},c),g),{methods:{getPersonalizationStrategy:lw.getPersonalizationStrategy,setPersonalizationStrategy:lw.setPersonalizationStrategy}}))}}))}mT.version=sw.version;pT.exports=mT});var _T=Me((OV,fw)=>{var gT=vT();fw.exports=gT;fw.exports.default=gT});var rf=Me(dw=>{"use strict";Object.defineProperty(dw,"__esModule",{value:!0});dw.default=kT;function kT(){}kT.prototype={diff:function(u,f){var c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},g=c.callback;typeof c=="function"&&(g=c,c={}),this.options=c;var t=this;function C(re){return g?(setTimeout(function(){g(void 0,re)},0),!0):re}u=this.castInput(u),f=this.castInput(f),u=this.removeEmpty(this.tokenize(u)),f=this.removeEmpty(this.tokenize(f));var A=f.length,x=u.length,D=1,L=A+x,N=[{newPos:-1,components:[]}],j=this.extractCommon(N[0],f,u,0);if(N[0].newPos+1>=A&&j+1>=x)return C([{value:this.join(f),count:f.length}]);function $(){for(var re=-1*D;re<=D;re+=2){var ce=void 0,Q=N[re-1],oe=N[re+1],Se=(oe?oe.newPos:0)-re;Q&&(N[re-1]=void 0);var me=Q&&Q.newPos+1=A&&Se+1>=x)return C(LW(t,ce.components,f,u,t.useLongestToken));N[re]=ce}D++}if(g)(function re(){setTimeout(function(){if(D>L)return g();$()||re()},0)})();else for(;D<=L;){var h=$();if(h)return h}},pushComponent:function(u,f,c){var g=u[u.length-1];g&&g.added===f&&g.removed===c?u[u.length-1]={count:g.count+1,added:f,removed:c}:u.push({count:1,added:f,removed:c})},extractCommon:function(u,f,c,g){for(var t=f.length,C=c.length,A=u.newPos,x=A-g,D=0;A+1$.length?re:$}),D.value=i.join(L)}else D.value=i.join(f.slice(A,A+D.count));A+=D.count,D.added||(x+=D.count)}}var j=u[C-1];return C>1&&typeof j.value=="string"&&(j.added||j.removed)&&i.equals("",j.value)&&(u[C-2].value+=j.value,u.pop()),u}function RW(i){return{newPos:i.newPos,components:i.components.slice(0)}}});var OT=Me(ld=>{"use strict";Object.defineProperty(ld,"__esModule",{value:!0});ld.diffChars=NW;ld.characterDiff=void 0;var jW=BW(rf());function BW(i){return i&&i.__esModule?i:{default:i}}var AT=new jW.default;ld.characterDiff=AT;function NW(i,u,f){return AT.diff(i,u,f)}});var hw=Me(pw=>{"use strict";Object.defineProperty(pw,"__esModule",{value:!0});pw.generateOptions=UW;function UW(i,u){if(typeof i=="function")u.callback=i;else if(i)for(var f in i)i.hasOwnProperty(f)&&(u[f]=i[f]);return u}});var MT=Me(Fa=>{"use strict";Object.defineProperty(Fa,"__esModule",{value:!0});Fa.diffWords=qW;Fa.diffWordsWithSpace=zW;Fa.wordDiff=void 0;var HW=WW(rf()),bW=hw();function WW(i){return i&&i.__esModule?i:{default:i}}var IT=/^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/,PT=/\S/,fd=new HW.default;Fa.wordDiff=fd;fd.equals=function(i,u){return this.options.ignoreCase&&(i=i.toLowerCase(),u=u.toLowerCase()),i===u||this.options.ignoreWhitespace&&!PT.test(i)&&!PT.test(u)};fd.tokenize=function(i){for(var u=i.split(/(\s+|[()[\]{}'"]|\b)/),f=0;f{"use strict";Object.defineProperty(La,"__esModule",{value:!0});La.diffLines=GW;La.diffTrimmedLines=VW;La.lineDiff=void 0;var $W=YW(rf()),KW=hw();function YW(i){return i&&i.__esModule?i:{default:i}}var Dm=new $W.default;La.lineDiff=Dm;Dm.tokenize=function(i){var u=[],f=i.split(/(\n|\r\n)/);f[f.length-1]||f.pop();for(var c=0;c{"use strict";Object.defineProperty(cd,"__esModule",{value:!0});cd.diffSentences=XW;cd.sentenceDiff=void 0;var QW=JW(rf());function JW(i){return i&&i.__esModule?i:{default:i}}var mw=new QW.default;cd.sentenceDiff=mw;mw.tokenize=function(i){return i.split(/(\S.+?[.!?])(?=\s+|$)/)};function XW(i,u,f){return mw.diff(i,u,f)}});var LT=Me(ad=>{"use strict";Object.defineProperty(ad,"__esModule",{value:!0});ad.diffCss=ZW;ad.cssDiff=void 0;var tH=eH(rf());function eH(i){return i&&i.__esModule?i:{default:i}}var vw=new tH.default;ad.cssDiff=vw;vw.tokenize=function(i){return i.split(/([{}:;,]|\s+)/)};function ZW(i,u,f){return vw.diff(i,u,f)}});var NT=Me(Ra=>{"use strict";Object.defineProperty(Ra,"__esModule",{value:!0});Ra.diffJson=nH;Ra.canonicalize=Sm;Ra.jsonDiff=void 0;var RT=rH(rf()),iH=Em();function rH(i){return i&&i.__esModule?i:{default:i}}function Cm(i){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Cm=function(f){return typeof f}:Cm=function(f){return f&&typeof Symbol=="function"&&f.constructor===Symbol&&f!==Symbol.prototype?"symbol":typeof f},Cm(i)}var oH=Object.prototype.toString,xc=new RT.default;Ra.jsonDiff=xc;xc.useLongestToken=!0;xc.tokenize=iH.lineDiff.tokenize;xc.castInput=function(i){var u=this.options,f=u.undefinedReplacement,c=u.stringifyReplacer,g=c===void 0?function(t,C){return typeof C=="undefined"?f:C}:c;return typeof i=="string"?i:JSON.stringify(Sm(i,null,null,g),g," ")};xc.equals=function(i,u){return RT.default.prototype.equals.call(xc,i.replace(/,([\r\n])/g,"$1"),u.replace(/,([\r\n])/g,"$1"))};function nH(i,u,f){return xc.diff(i,u,f)}function Sm(i,u,f,c,g){u=u||[],f=f||[],c&&(i=c(g,i));var t;for(t=0;t{"use strict";Object.defineProperty(dd,"__esModule",{value:!0});dd.diffArrays=uH;dd.arrayDiff=void 0;var lH=sH(rf());function sH(i){return i&&i.__esModule?i:{default:i}}var pd=new lH.default;dd.arrayDiff=pd;pd.tokenize=function(i){return i.slice()};pd.join=pd.removeEmpty=function(i){return i};function uH(i,u,f){return pd.diff(i,u,f)}});var Tm=Me(gw=>{"use strict";Object.defineProperty(gw,"__esModule",{value:!0});gw.parsePatch=fH;function fH(i){var u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},f=i.split(/\r\n|[\n\v\f\r\x85]/),c=i.match(/\r\n|[\n\v\f\r\x85]/g)||[],g=[],t=0;function C(){var D={};for(g.push(D);t{"use strict";Object.defineProperty(_w,"__esModule",{value:!0});_w.default=cH;function cH(i,u,f){var c=!0,g=!1,t=!1,C=1;return function A(){if(c&&!t){if(g?C++:c=!1,i+C<=f)return C;t=!0}if(!g)return t||(c=!0),u<=i-C?-C++:(g=!0,A())}}});var zT=Me(xm=>{"use strict";Object.defineProperty(xm,"__esModule",{value:!0});xm.applyPatch=UT;xm.applyPatches=aH;var qT=Tm(),pH=dH(jT());function dH(i){return i&&i.__esModule?i:{default:i}}function UT(i,u){var f=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(typeof u=="string"&&(u=(0,qT.parsePatch)(u)),Array.isArray(u)){if(u.length>1)throw new Error("applyPatch only works with a single input.");u=u[0]}var c=i.split(/\r\n|[\n\v\f\r\x85]/),g=i.match(/\r\n|[\n\v\f\r\x85]/g)||[],t=u.hunks,C=f.compareLine||function(Ot,Nt,Je,V){return Nt===V},A=0,x=f.fuzzFactor||0,D=0,L=0,N,j;function $(Ot,Nt){for(var Je=0;Je0?V[0]:" ",ge=V.length>0?V.substr(1):V;if(ne===" "||ne==="-"){if(!C(Nt+1,c[Nt],ne,ge)&&(A++,A>x))return!1;Nt++}}return!0}for(var h=0;h0?Le[0]:" ",ct=Le.length>0?Le.substr(1):Le,Ue=J.linedelimiters[Oe];if(ot===" ")Te++;else if(ot==="-")c.splice(Te,1),g.splice(Te,1);else if(ot==="+")c.splice(Te,0,ct),g.splice(Te,0,Ue),Te++;else if(ot==="\\"){var be=J.lines[Oe-1]?J.lines[Oe-1][0]:null;be==="+"?N=!0:be==="-"&&(j=!0)}}}if(N)for(;!c[c.length-1];)c.pop(),g.pop();else j&&(c.push(""),g.push(` -`));for(var At=0;At{"use strict";Object.defineProperty(hd,"__esModule",{value:!0});hd.structuredPatch=WT;hd.createTwoFilesPatch=HT;hd.createPatch=hH;var mH=Em();function yw(i){return _H(i)||gH(i)||vH()}function vH(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function gH(i){if(Symbol.iterator in Object(i)||Object.prototype.toString.call(i)==="[object Arguments]")return Array.from(i)}function _H(i){if(Array.isArray(i)){for(var u=0,f=new Array(i.length);u0?x(J.lines.slice(-C.context)):[],L-=j.length,N-=j.length)}(De=j).push.apply(De,yw(me.map(function(At){return(Se.added?"+":"-")+At}))),Se.added?h+=me.length:$+=me.length}else{if(L)if(me.length<=C.context*2&&oe=A.length-2&&me.length<=C.context){var ct=/\n$/.test(f),Ue=/\n$/.test(c),be=me.length==0&&j.length>ot.oldLines;!ct&&be&&j.splice(ot.oldLines,0,"\\ No newline at end of file"),(!ct&&!be||!Ue)&&j.push("\\ No newline at end of file")}D.push(ot),L=0,N=0,j=[]}$+=me.length,h+=me.length}},ce=0;ce{"use strict";Object.defineProperty(km,"__esModule",{value:!0});km.arrayEqual=yH;km.arrayStartsWith=bT;function yH(i,u){return i.length!==u.length?!1:bT(i,u)}function bT(i,u){if(u.length>i.length)return!1;for(var f=0;f{"use strict";Object.defineProperty(Am,"__esModule",{value:!0});Am.calcLineCount=VT;Am.merge=wH;var DH=ww(),EH=Tm(),Dw=GT();function Na(i){return TH(i)||CH(i)||SH()}function SH(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function CH(i){if(Symbol.iterator in Object(i)||Object.prototype.toString.call(i)==="[object Arguments]")return Array.from(i)}function TH(i){if(Array.isArray(i)){for(var u=0,f=new Array(i.length);u{"use strict";Object.defineProperty(Cw,"__esModule",{value:!0});Cw.convertChangesToDMP=OH;function OH(i){for(var u=[],f,c,g=0;g{"use strict";Object.defineProperty(Tw,"__esModule",{value:!0});Tw.convertChangesToXML=IH;function IH(i){for(var u=[],f=0;f"):c.removed&&u.push(""),u.push(PH(c.value)),c.added?u.push(""):c.removed&&u.push("")}return u.join("")}function PH(i){var u=i;return u=u.replace(/&/g,"&"),u=u.replace(//g,">"),u=u.replace(/"/g,"""),u}});var f9=Me(w0=>{"use strict";Object.defineProperty(w0,"__esModule",{value:!0});Object.defineProperty(w0,"Diff",{enumerable:!0,get:function(){return MH.default}});Object.defineProperty(w0,"diffChars",{enumerable:!0,get:function(){return FH.diffChars}});Object.defineProperty(w0,"diffWords",{enumerable:!0,get:function(){return o9.diffWords}});Object.defineProperty(w0,"diffWordsWithSpace",{enumerable:!0,get:function(){return o9.diffWordsWithSpace}});Object.defineProperty(w0,"diffLines",{enumerable:!0,get:function(){return u9.diffLines}});Object.defineProperty(w0,"diffTrimmedLines",{enumerable:!0,get:function(){return u9.diffTrimmedLines}});Object.defineProperty(w0,"diffSentences",{enumerable:!0,get:function(){return LH.diffSentences}});Object.defineProperty(w0,"diffCss",{enumerable:!0,get:function(){return RH.diffCss}});Object.defineProperty(w0,"diffJson",{enumerable:!0,get:function(){return s9.diffJson}});Object.defineProperty(w0,"canonicalize",{enumerable:!0,get:function(){return s9.canonicalize}});Object.defineProperty(w0,"diffArrays",{enumerable:!0,get:function(){return NH.diffArrays}});Object.defineProperty(w0,"applyPatch",{enumerable:!0,get:function(){return l9.applyPatch}});Object.defineProperty(w0,"applyPatches",{enumerable:!0,get:function(){return l9.applyPatches}});Object.defineProperty(w0,"parsePatch",{enumerable:!0,get:function(){return BH.parsePatch}});Object.defineProperty(w0,"merge",{enumerable:!0,get:function(){return jH.merge}});Object.defineProperty(w0,"structuredPatch",{enumerable:!0,get:function(){return xw.structuredPatch}});Object.defineProperty(w0,"createTwoFilesPatch",{enumerable:!0,get:function(){return xw.createTwoFilesPatch}});Object.defineProperty(w0,"createPatch",{enumerable:!0,get:function(){return xw.createPatch}});Object.defineProperty(w0,"convertChangesToDMP",{enumerable:!0,get:function(){return UH.convertChangesToDMP}});Object.defineProperty(w0,"convertChangesToXML",{enumerable:!0,get:function(){return qH.convertChangesToXML}});var MH=zH(rf()),FH=OT(),o9=MT(),u9=Em(),LH=FT(),RH=LT(),s9=NT(),NH=BT(),l9=zT(),BH=Tm(),jH=n9(),xw=ww(),UH=r9(),qH=i9();function zH(i){return i&&i.__esModule?i:{default:i}}});var HH={};jR(HH,{default:()=>GH});var wT=Er(require("@yarnpkg/cli")),Tc=Er(require("@yarnpkg/core"));var Z5=Er(ys()),Dc=Er(lr()),om=(0,Dc.memo)(({active:i})=>{let u=(0,Dc.useMemo)(()=>i?"\u25C9":"\u25EF",[i]),f=(0,Dc.useMemo)(()=>i?"green":"yellow",[i]);return Dc.default.createElement(Z5.Text,{color:f},u)});var Wf=Er(ys()),Bo=Er(lr());var eC=Er(ys()),um=Er(lr());function zf({active:i},u,f){let{stdin:c}=(0,eC.useStdin)(),g=(0,um.useCallback)((t,C)=>u(t,C),f);(0,um.useEffect)(()=>{if(!(!i||!c))return c.on("keypress",g),()=>{c.off("keypress",g)}},[i,g,c])}var sm;(function(f){f.BEFORE="before",f.AFTER="after"})(sm||(sm={}));var tC=function({active:i},u,f){zf({active:i},(c,g)=>{g.name==="tab"&&(g.shift?u(sm.BEFORE):u(sm.AFTER))},f)};var lm=function(i,u,{active:f,minus:c,plus:g,set:t,loop:C=!0}){zf({active:f},(A,x)=>{let D=u.indexOf(i);switch(x.name){case c:{let L=D-1;if(C){t(u[(u.length+L)%u.length]);return}if(L<0)return;t(u[L])}break;case g:{let L=D+1;if(C){t(u[L%u.length]);return}if(L>=u.length)return;t(u[L])}break}},[u,i,g,t,C])};var fm=({active:i=!0,children:u=[],radius:f=10,size:c=1,loop:g=!0,onFocusRequest:t,willReachEnd:C})=>{let A=ce=>{if(ce.key===null)throw new Error("Expected all children to have a key");return ce.key},x=Bo.default.Children.map(u,ce=>A(ce)),D=x[0],[L,N]=(0,Bo.useState)(D),j=x.indexOf(L);(0,Bo.useEffect)(()=>{x.includes(L)||N(D)},[u]),(0,Bo.useEffect)(()=>{C&&j>=x.length-2&&C()},[j]),tC({active:i&&!!t},ce=>{t==null||t(ce)},[t]),lm(L,x,{active:i,minus:"up",plus:"down",set:N,loop:g});let $=j-f,h=j+f;h>x.length&&($-=h-x.length,h=x.length),$<0&&(h+=-$,$=0),h>=x.length&&(h=x.length-1);let re=[];for(let ce=$;ce<=h;++ce){let Q=x[ce],oe=i&&Q===L;re.push(Bo.default.createElement(Wf.Box,{key:Q,height:c},Bo.default.createElement(Wf.Box,{marginLeft:1,marginRight:1},Bo.default.createElement(Wf.Text,null,oe?Bo.default.createElement(Wf.Text,{color:"cyan",bold:!0},">"):" ")),Bo.default.createElement(Wf.Box,null,Bo.default.cloneElement(u[ce],{active:oe}))))}return Bo.default.createElement(Wf.Box,{flexDirection:"column",width:"100%"},re)};var cm=Er(lr());var nC=Er(ys()),nf=Er(lr()),rC=Er(require("readline")),G3=nf.default.createContext(null),iC=({children:i})=>{let{stdin:u,setRawMode:f}=(0,nC.useStdin)();(0,nf.useEffect)(()=>{f&&f(!0),u&&(0,rC.emitKeypressEvents)(u)},[u,f]);let[c,g]=(0,nf.useState)(new Map),t=(0,nf.useMemo)(()=>({getAll:()=>c,get:C=>c.get(C),set:(C,A)=>g(new Map([...c,[C,A]]))}),[c,g]);return nf.default.createElement(G3.Provider,{value:t,children:i})};function Ec(i,u){let f=(0,cm.useContext)(G3);if(f===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof i=="undefined")return f.getAll();let c=(0,cm.useCallback)(t=>{f.set(i,t)},[i,f.set]),g=f.get(i);return typeof g=="undefined"&&(g=u),[g,c]}var am=Er(ys()),V3=Er(lr());async function dm(i,u){let f,c=t=>{let{exit:C}=(0,am.useApp)();zf({active:!0},(A,x)=>{x.name==="return"&&(f=t,C())},[C,t])},{waitUntilExit:g}=(0,am.render)(V3.default.createElement(iC,null,V3.default.createElement(i,zn(dt({},u),{useSubmit:c}))));return await g(),f}var DT=Er(require("clipanion")),ET=Er(lC()),un=Er(ys()),Pt=Er(lr());var yT=Er(_T()),cw={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},FW=(0,yT.default)(cw.appId,cw.apiKey).initIndex(cw.indexName),aw=async(i,u=0)=>await FW.search(i,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:u,hitsPerPage:10});var od=["regular","dev","peer"],ud=class extends wT.BaseCommand{async execute(){let u=await Tc.Configuration.find(this.context.cwd,this.context.plugins),f=()=>Pt.default.createElement(un.Box,{flexDirection:"row"},Pt.default.createElement(un.Box,{flexDirection:"column",width:48},Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},""),"/",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," to move between packages.")),Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," to select a package.")),Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," again to change the target."))),Pt.default.createElement(un.Box,{flexDirection:"column"},Pt.default.createElement(un.Box,{marginLeft:1},Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),Pt.default.createElement(un.Box,{marginLeft:1},Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," to abort.")))),c=()=>Pt.default.createElement(Pt.default.Fragment,null,Pt.default.createElement(un.Box,{width:15},Pt.default.createElement(un.Text,{bold:!0,underline:!0,color:"gray"},"Owner")),Pt.default.createElement(un.Box,{width:11},Pt.default.createElement(un.Text,{bold:!0,underline:!0,color:"gray"},"Version")),Pt.default.createElement(un.Box,{width:10},Pt.default.createElement(un.Text,{bold:!0,underline:!0,color:"gray"},"Downloads"))),g=()=>Pt.default.createElement(un.Box,{width:17},Pt.default.createElement(un.Text,{bold:!0,underline:!0,color:"gray"},"Target")),t=({hit:$,active:h})=>{let[re,ce]=Ec($.name,null);zf({active:h},(Se,me)=>{if(me.name!=="space")return;if(!re){ce(od[0]);return}let De=od.indexOf(re)+1;De===od.length?ce(null):ce(od[De])},[re,ce]);let Q=Tc.structUtils.parseIdent($.name),oe=Tc.structUtils.prettyIdent(u,Q);return Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Box,{width:45},Pt.default.createElement(un.Text,{bold:!0,wrap:"wrap"},oe)),Pt.default.createElement(un.Box,{width:14,marginLeft:1},Pt.default.createElement(un.Text,{bold:!0,wrap:"truncate"},$.owner.name)),Pt.default.createElement(un.Box,{width:10,marginLeft:1},Pt.default.createElement(un.Text,{italic:!0,wrap:"truncate"},$.version)),Pt.default.createElement(un.Box,{width:16,marginLeft:1},Pt.default.createElement(un.Text,null,$.humanDownloadsLast30Days)))},C=({name:$,active:h})=>{let[re]=Ec($,null),ce=Tc.structUtils.parseIdent($);return Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Box,{width:47},Pt.default.createElement(un.Text,{bold:!0}," - ",Tc.structUtils.prettyIdent(u,ce))),od.map(Q=>Pt.default.createElement(un.Box,{key:Q,width:14,marginLeft:1},Pt.default.createElement(un.Text,null," ",Pt.default.createElement(om,{active:re===Q})," ",Pt.default.createElement(un.Text,{bold:!0},Q)))))},A=()=>Pt.default.createElement(un.Box,{marginTop:1},Pt.default.createElement(un.Text,null,"Powered by Algolia.")),D=await dm(({useSubmit:$})=>{let h=Ec();$(h);let re=Array.from(h.keys()).filter(Le=>h.get(Le)!==null),[ce,Q]=(0,Pt.useState)(""),[oe,Se]=(0,Pt.useState)(0),[me,De]=(0,Pt.useState)([]),J=Le=>{Le.match(/\t| /)||Q(Le)},Te=async()=>{Se(0);let Le=await aw(ce);Le.query===ce&&De(Le.hits)},Oe=async()=>{let Le=await aw(ce,oe+1);Le.query===ce&&Le.page-1===oe&&(Se(Le.page),De([...me,...Le.hits]))};return(0,Pt.useEffect)(()=>{ce?Te():De([])},[ce]),Pt.default.createElement(un.Box,{flexDirection:"column"},Pt.default.createElement(f,null),Pt.default.createElement(un.Box,{flexDirection:"row",marginTop:1},Pt.default.createElement(un.Text,{bold:!0},"Search: "),Pt.default.createElement(un.Box,{width:41},Pt.default.createElement(ET.default,{value:ce,onChange:J,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),Pt.default.createElement(c,null)),me.length?Pt.default.createElement(fm,{radius:2,loop:!1,children:me.map(Le=>Pt.default.createElement(t,{key:Le.name,hit:Le,active:!1})),willReachEnd:Oe}):Pt.default.createElement(un.Text,{color:"gray"},"Start typing..."),Pt.default.createElement(un.Box,{flexDirection:"row",marginTop:1},Pt.default.createElement(un.Box,{width:49},Pt.default.createElement(un.Text,{bold:!0},"Selected:")),Pt.default.createElement(g,null)),re.length?re.map(Le=>Pt.default.createElement(C,{key:Le,name:Le,active:!1})):Pt.default.createElement(un.Text,{color:"gray"},"No selected packages..."),Pt.default.createElement(A,null))},{});if(typeof D=="undefined")return 1;let L=Array.from(D.keys()).filter($=>D.get($)==="regular"),N=Array.from(D.keys()).filter($=>D.get($)==="dev"),j=Array.from(D.keys()).filter($=>D.get($)==="peer");return L.length&&await this.cli.run(["add",...L]),N.length&&await this.cli.run(["add","--dev",...N]),j&&await this.cli.run(["add","--peer",...j]),0}};ud.paths=[["search"]],ud.usage=DT.Command.Usage({category:"Interactive commands",description:"open the search interface",details:` - This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. - `,examples:[["Open the search window","yarn search"]]});var ST=ud;var Im=Er(require("@yarnpkg/cli")),W0=Er(require("@yarnpkg/core"));var sd=Er(ys()),bf=Er(lr());var CT=Er(ys()),TT=Er(lr()),wm=({length:i,active:u})=>{if(i===0)return null;let f=i>1?` ${"-".repeat(i-1)}`:" ";return TT.default.createElement(CT.Text,{dimColor:!u},f)};var xT=function({active:i,skewer:u,options:f,value:c,onChange:g,sizes:t=[]}){let C=f.filter(({label:x})=>!!x).map(({value:x})=>x),A=f.findIndex(x=>x.value===c&&x.label!="");return lm(c,C,{active:i,minus:"left",plus:"right",set:g}),bf.default.createElement(bf.default.Fragment,null,f.map(({label:x},D)=>{let L=D===A,N=t[D]-1||0,j=x.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),$=Math.max(0,N-j.length-2);return x?bf.default.createElement(sd.Box,{key:x,width:N,marginLeft:1},bf.default.createElement(sd.Text,{wrap:"truncate"},bf.default.createElement(om,{active:L})," ",x),u?bf.default.createElement(wm,{active:i,length:$}):null):bf.default.createElement(sd.Box,{key:`spacer-${D}`,width:N,marginLeft:1})}))};var c9=Er(require("@yarnpkg/plugin-essentials")),a9=Er(require("clipanion")),d9=Er(f9()),tr=Er(ys()),pn=Er(lr()),p9=Er(require("semver")),h9=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,WH=10,md=class extends Im.BaseCommand{async execute(){let u=await W0.Configuration.find(this.context.cwd,this.context.plugins),{project:f,workspace:c}=await W0.Project.find(u,this.context.cwd),g=await W0.Cache.find(u);if(!c)throw new Im.WorkspaceRequiredError(f.cwd,this.context.cwd);await f.restoreInstallState({restoreResolutions:!1});let t=(Q,oe)=>{let Se=(0,d9.diffWords)(Q,oe),me="";for(let De of Se)De.added?me+=W0.formatUtils.pretty(u,De.value,"green"):De.removed||(me+=De.value);return me},C=(Q,oe)=>{if(Q===oe)return oe;let Se=W0.structUtils.parseRange(Q),me=W0.structUtils.parseRange(oe),De=Se.selector.match(h9),J=me.selector.match(h9);if(!De||!J)return t(Q,oe);let Te=["gray","red","yellow","green","magenta"],Oe=null,Le="";for(let ot=1;ot{let me=await c9.suggestUtils.fetchDescriptorFrom(Q,Se,{project:f,cache:g,preserveModifier:oe,workspace:c});return me!==null?me.range:Q.range},x=async Q=>{let oe=p9.default.valid(Q.range)?`^${Q.range}`:Q.range,[Se,me]=await Promise.all([A(Q,Q.range,oe).catch(()=>null),A(Q,Q.range,"latest").catch(()=>null)]),De=[{value:null,label:Q.range}];return Se&&Se!==Q.range?De.push({value:Se,label:C(Q.range,Se)}):De.push({value:null,label:""}),me&&me!==Se&&me!==Q.range?De.push({value:me,label:C(Q.range,me)}):De.push({value:null,label:""}),De},D=()=>pn.default.createElement(tr.Box,{flexDirection:"row"},pn.default.createElement(tr.Box,{flexDirection:"column",width:49},pn.default.createElement(tr.Box,{marginLeft:1},pn.default.createElement(tr.Text,null,"Press ",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},""),"/",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},"")," to select packages.")),pn.default.createElement(tr.Box,{marginLeft:1},pn.default.createElement(tr.Text,null,"Press ",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},""),"/",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},"")," to select versions."))),pn.default.createElement(tr.Box,{flexDirection:"column"},pn.default.createElement(tr.Box,{marginLeft:1},pn.default.createElement(tr.Text,null,"Press ",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},"")," to install.")),pn.default.createElement(tr.Box,{marginLeft:1},pn.default.createElement(tr.Text,null,"Press ",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},"")," to abort.")))),L=()=>pn.default.createElement(tr.Box,{flexDirection:"row",paddingTop:1,paddingBottom:1},pn.default.createElement(tr.Box,{width:50},pn.default.createElement(tr.Text,{bold:!0},pn.default.createElement(tr.Text,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),pn.default.createElement(tr.Box,{width:17},pn.default.createElement(tr.Text,{bold:!0,underline:!0,color:"gray"},"Current")),pn.default.createElement(tr.Box,{width:17},pn.default.createElement(tr.Text,{bold:!0,underline:!0,color:"gray"},"Range")),pn.default.createElement(tr.Box,{width:17},pn.default.createElement(tr.Text,{bold:!0,underline:!0,color:"gray"},"Latest"))),N=({active:Q,descriptor:oe,suggestions:Se})=>{let[me,De]=Ec(oe.descriptorHash,null),J=W0.structUtils.stringifyIdent(oe),Te=Math.max(0,45-J.length);return pn.default.createElement(pn.default.Fragment,null,pn.default.createElement(tr.Box,null,pn.default.createElement(tr.Box,{width:45},pn.default.createElement(tr.Text,{bold:!0},W0.structUtils.prettyIdent(u,oe)),pn.default.createElement(wm,{active:Q,length:Te})),Se!==null?pn.default.createElement(xT,{active:Q,options:Se,value:me,skewer:!0,onChange:De,sizes:[17,17,17]}):pn.default.createElement(tr.Box,{marginLeft:2},pn.default.createElement(tr.Text,{color:"gray"},"Fetching suggestions..."))))},j=({dependencies:Q})=>{let[oe,Se]=(0,pn.useState)(null),me=(0,pn.useRef)(!0);return(0,pn.useEffect)(()=>()=>{me.current=!1}),(0,pn.useEffect)(()=>{Promise.all(Q.map(De=>x(De))).then(De=>{let J=Q.map((Te,Oe)=>{let Le=De[Oe];return[Te,Le]}).filter(([Te,Oe])=>Oe.filter(Le=>Le.label!=="").length>1);me.current&&Se(J)})},[]),oe?oe.length?pn.default.createElement(fm,{radius:WH,children:oe.map(([De,J])=>pn.default.createElement(N,{key:De.descriptorHash,active:!1,descriptor:De,suggestions:J}))}):pn.default.createElement(tr.Text,null,"No upgrades found"):pn.default.createElement(tr.Text,null,"Fetching suggestions...")},h=await dm(({useSubmit:Q})=>{Q(Ec());let oe=new Map;for(let me of f.workspaces)for(let De of["dependencies","devDependencies"])for(let J of me.manifest[De].values())f.tryWorkspaceByDescriptor(J)===null&&oe.set(J.descriptorHash,J);let Se=W0.miscUtils.sortMap(oe.values(),me=>W0.structUtils.stringifyDescriptor(me));return pn.default.createElement(tr.Box,{flexDirection:"column"},pn.default.createElement(D,null),pn.default.createElement(L,null),pn.default.createElement(j,{dependencies:Se}))},{});if(typeof h=="undefined")return 1;let re=!1;for(let Q of f.workspaces)for(let oe of["dependencies","devDependencies"]){let Se=Q.manifest[oe];for(let me of Se.values()){let De=h.get(me.descriptorHash);typeof De!="undefined"&&De!==null&&(Se.set(me.identHash,W0.structUtils.makeDescriptor(me,De)),re=!0)}}return re?(await W0.StreamReport.start({configuration:u,stdout:this.context.stdout,includeLogs:!this.context.quiet},async Q=>{await f.install({cache:g,report:Q})})).exitCode():0}};md.paths=[["upgrade-interactive"]],md.usage=a9.Command.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` - This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. - `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var m9=md;var bH={commands:[ST,m9]},GH=bH;return HH;})(); -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react-debug-tools.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.24.0 - * react-reconciler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v16.13.1 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -return plugin; -} -}; diff --git a/.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs b/.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs deleted file mode 100644 index 799c5be98..000000000 --- a/.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs +++ /dev/null @@ -1,28 +0,0 @@ -/* eslint-disable */ -//prettier-ignore -module.exports = { -name: "@yarnpkg/plugin-workspace-tools", -factory: function (require) { -var plugin=(()=>{var Cr=Object.create,ge=Object.defineProperty,wr=Object.defineProperties,Sr=Object.getOwnPropertyDescriptor,vr=Object.getOwnPropertyDescriptors,Hr=Object.getOwnPropertyNames,Je=Object.getOwnPropertySymbols,$r=Object.getPrototypeOf,et=Object.prototype.hasOwnProperty,Tr=Object.prototype.propertyIsEnumerable;var tt=(e,t,r)=>t in e?ge(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,N=(e,t)=>{for(var r in t||(t={}))et.call(t,r)&&tt(e,r,t[r]);if(Je)for(var r of Je(t))Tr.call(t,r)&&tt(e,r,t[r]);return e},Q=(e,t)=>wr(e,vr(t)),kr=e=>ge(e,"__esModule",{value:!0});var q=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Lr=(e,t)=>{for(var r in t)ge(e,r,{get:t[r],enumerable:!0})},Or=(e,t,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Hr(t))!et.call(e,n)&&n!=="default"&&ge(e,n,{get:()=>t[n],enumerable:!(r=Sr(t,n))||r.enumerable});return e},Y=e=>Or(kr(ge(e!=null?Cr($r(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var He=q(J=>{"use strict";J.isInteger=e=>typeof e=="number"?Number.isInteger(e):typeof e=="string"&&e.trim()!==""?Number.isInteger(Number(e)):!1;J.find=(e,t)=>e.nodes.find(r=>r.type===t);J.exceedsLimit=(e,t,r=1,n)=>n===!1||!J.isInteger(e)||!J.isInteger(t)?!1:(Number(t)-Number(e))/Number(r)>=n;J.escapeNode=(e,t=0,r)=>{let n=e.nodes[t];!n||(r&&n.type===r||n.type==="open"||n.type==="close")&&n.escaped!==!0&&(n.value="\\"+n.value,n.escaped=!0)};J.encloseBrace=e=>e.type!=="brace"?!1:e.commas>>0+e.ranges>>0==0?(e.invalid=!0,!0):!1;J.isInvalidBrace=e=>e.type!=="brace"?!1:e.invalid===!0||e.dollar?!0:e.commas>>0+e.ranges>>0==0||e.open!==!0||e.close!==!0?(e.invalid=!0,!0):!1;J.isOpenOrClose=e=>e.type==="open"||e.type==="close"?!0:e.open===!0||e.close===!0;J.reduce=e=>e.reduce((t,r)=>(r.type==="text"&&t.push(r.value),r.type==="range"&&(r.type="text"),t),[]);J.flatten=(...e)=>{let t=[],r=n=>{for(let s=0;s{"use strict";var at=He();st.exports=(e,t={})=>{let r=(n,s={})=>{let a=t.escapeInvalid&&at.isInvalidBrace(s),i=n.invalid===!0&&t.escapeInvalid===!0,o="";if(n.value)return(a||i)&&at.isOpenOrClose(n)?"\\"+n.value:n.value;if(n.value)return n.value;if(n.nodes)for(let h of n.nodes)o+=r(h);return o};return r(e)}});var ot=q((is,it)=>{"use strict";it.exports=function(e){return typeof e=="number"?e-e==0:typeof e=="string"&&e.trim()!==""?Number.isFinite?Number.isFinite(+e):isFinite(+e):!1}});var At=q((os,ut)=>{"use strict";var ct=ot(),pe=(e,t,r)=>{if(ct(e)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(t===void 0||e===t)return String(e);if(ct(t)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let n=N({relaxZeros:!0},r);typeof n.strictZeros=="boolean"&&(n.relaxZeros=n.strictZeros===!1);let s=String(n.relaxZeros),a=String(n.shorthand),i=String(n.capture),o=String(n.wrap),h=e+":"+t+"="+s+a+i+o;if(pe.cache.hasOwnProperty(h))return pe.cache[h].result;let A=Math.min(e,t),f=Math.max(e,t);if(Math.abs(A-f)===1){let R=e+"|"+t;return n.capture?`(${R})`:n.wrap===!1?R:`(?:${R})`}let m=pt(e)||pt(t),p={min:e,max:t,a:A,b:f},H=[],_=[];if(m&&(p.isPadded=m,p.maxLen=String(p.max).length),A<0){let R=f<0?Math.abs(f):1;_=lt(R,Math.abs(A),p,n),A=p.a=0}return f>=0&&(H=lt(A,f,p,n)),p.negatives=_,p.positives=H,p.result=Nr(_,H,n),n.capture===!0?p.result=`(${p.result})`:n.wrap!==!1&&H.length+_.length>1&&(p.result=`(?:${p.result})`),pe.cache[h]=p,p.result};function Nr(e,t,r){let n=Pe(e,t,"-",!1,r)||[],s=Pe(t,e,"",!1,r)||[],a=Pe(e,t,"-?",!0,r)||[];return n.concat(a).concat(s).join("|")}function Br(e,t){let r=1,n=1,s=ft(e,r),a=new Set([t]);for(;e<=s&&s<=t;)a.add(s),r+=1,s=ft(e,r);for(s=ht(t+1,n)-1;e1&&o.count.pop(),o.count.push(f.count[0]),o.string=o.pattern+dt(o.count),i=A+1;continue}r.isPadded&&(m=Gr(A,r,n)),f.string=m+f.pattern+dt(f.count),a.push(f),i=A+1,o=f}return a}function Pe(e,t,r,n,s){let a=[];for(let i of e){let{string:o}=i;!n&&!gt(t,"string",o)&&a.push(r+o),n&>(t,"string",o)&&a.push(r+o)}return a}function Mr(e,t){let r=[];for(let n=0;nt?1:t>e?-1:0}function gt(e,t,r){return e.some(n=>n[t]===r)}function ft(e,t){return Number(String(e).slice(0,-t)+"9".repeat(t))}function ht(e,t){return e-e%Math.pow(10,t)}function dt(e){let[t=0,r=""]=e;return r||t>1?`{${t+(r?","+r:"")}}`:""}function Pr(e,t,r){return`[${e}${t-e==1?"":"-"}${t}]`}function pt(e){return/^-?(0+)\d/.test(e)}function Gr(e,t,r){if(!t.isPadded)return e;let n=Math.abs(t.maxLen-String(e).length),s=r.relaxZeros!==!1;switch(n){case 0:return"";case 1:return s?"0?":"0";case 2:return s?"0{0,2}":"00";default:return s?`0{0,${n}}`:`0{${n}}`}}pe.cache={};pe.clearCache=()=>pe.cache={};ut.exports=pe});var Ue=q((us,mt)=>{"use strict";var Ur=require("util"),Rt=At(),yt=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),qr=e=>t=>e===!0?Number(t):String(t),De=e=>typeof e=="number"||typeof e=="string"&&e!=="",me=e=>Number.isInteger(+e),Ge=e=>{let t=`${e}`,r=-1;if(t[0]==="-"&&(t=t.slice(1)),t==="0")return!1;for(;t[++r]==="0";);return r>0},Kr=(e,t,r)=>typeof e=="string"||typeof t=="string"?!0:r.stringify===!0,Wr=(e,t,r)=>{if(t>0){let n=e[0]==="-"?"-":"";n&&(e=e.slice(1)),e=n+e.padStart(n?t-1:t,"0")}return r===!1?String(e):e},_t=(e,t)=>{let r=e[0]==="-"?"-":"";for(r&&(e=e.slice(1),t--);e.length{e.negatives.sort((i,o)=>io?1:0),e.positives.sort((i,o)=>io?1:0);let r=t.capture?"":"?:",n="",s="",a;return e.positives.length&&(n=e.positives.join("|")),e.negatives.length&&(s=`-(${r}${e.negatives.join("|")})`),n&&s?a=`${n}|${s}`:a=n||s,t.wrap?`(${r}${a})`:a},Et=(e,t,r,n)=>{if(r)return Rt(e,t,N({wrap:!1},n));let s=String.fromCharCode(e);if(e===t)return s;let a=String.fromCharCode(t);return`[${s}-${a}]`},xt=(e,t,r)=>{if(Array.isArray(e)){let n=r.wrap===!0,s=r.capture?"":"?:";return n?`(${s}${e.join("|")})`:e.join("|")}return Rt(e,t,r)},bt=(...e)=>new RangeError("Invalid range arguments: "+Ur.inspect(...e)),Ct=(e,t,r)=>{if(r.strictRanges===!0)throw bt([e,t]);return[]},Fr=(e,t)=>{if(t.strictRanges===!0)throw new TypeError(`Expected step "${e}" to be a number`);return[]},Qr=(e,t,r=1,n={})=>{let s=Number(e),a=Number(t);if(!Number.isInteger(s)||!Number.isInteger(a)){if(n.strictRanges===!0)throw bt([e,t]);return[]}s===0&&(s=0),a===0&&(a=0);let i=s>a,o=String(e),h=String(t),A=String(r);r=Math.max(Math.abs(r),1);let f=Ge(o)||Ge(h)||Ge(A),m=f?Math.max(o.length,h.length,A.length):0,p=f===!1&&Kr(e,t,n)===!1,H=n.transform||qr(p);if(n.toRegex&&r===1)return Et(_t(e,m),_t(t,m),!0,n);let _={negatives:[],positives:[]},R=T=>_[T<0?"negatives":"positives"].push(Math.abs(T)),b=[],C=0;for(;i?s>=a:s<=a;)n.toRegex===!0&&r>1?R(s):b.push(Wr(H(s,C),m,p)),s=i?s-r:s+r,C++;return n.toRegex===!0?r>1?jr(_,n):xt(b,null,N({wrap:!1},n)):b},Xr=(e,t,r=1,n={})=>{if(!me(e)&&e.length>1||!me(t)&&t.length>1)return Ct(e,t,n);let s=n.transform||(p=>String.fromCharCode(p)),a=`${e}`.charCodeAt(0),i=`${t}`.charCodeAt(0),o=a>i,h=Math.min(a,i),A=Math.max(a,i);if(n.toRegex&&r===1)return Et(h,A,!1,n);let f=[],m=0;for(;o?a>=i:a<=i;)f.push(s(a,m)),a=o?a-r:a+r,m++;return n.toRegex===!0?xt(f,null,{wrap:!1,options:n}):f},Te=(e,t,r,n={})=>{if(t==null&&De(e))return[e];if(!De(e)||!De(t))return Ct(e,t,n);if(typeof r=="function")return Te(e,t,1,{transform:r});if(yt(r))return Te(e,t,0,r);let s=N({},n);return s.capture===!0&&(s.wrap=!0),r=r||s.step||1,me(r)?me(e)&&me(t)?Qr(e,t,r,s):Xr(e,t,Math.max(Math.abs(r),1),s):r!=null&&!yt(r)?Fr(r,s):Te(e,t,1,r)};mt.exports=Te});var vt=q((cs,wt)=>{"use strict";var Zr=Ue(),St=He(),Yr=(e,t={})=>{let r=(n,s={})=>{let a=St.isInvalidBrace(s),i=n.invalid===!0&&t.escapeInvalid===!0,o=a===!0||i===!0,h=t.escapeInvalid===!0?"\\":"",A="";if(n.isOpen===!0||n.isClose===!0)return h+n.value;if(n.type==="open")return o?h+n.value:"(";if(n.type==="close")return o?h+n.value:")";if(n.type==="comma")return n.prev.type==="comma"?"":o?n.value:"|";if(n.value)return n.value;if(n.nodes&&n.ranges>0){let f=St.reduce(n.nodes),m=Zr(...f,Q(N({},t),{wrap:!1,toRegex:!0}));if(m.length!==0)return f.length>1&&m.length>1?`(${m})`:m}if(n.nodes)for(let f of n.nodes)A+=r(f,n);return A};return r(e)};wt.exports=Yr});var Tt=q((ls,Ht)=>{"use strict";var zr=Ue(),$t=$e(),he=He(),fe=(e="",t="",r=!1)=>{let n=[];if(e=[].concat(e),t=[].concat(t),!t.length)return e;if(!e.length)return r?he.flatten(t).map(s=>`{${s}}`):t;for(let s of e)if(Array.isArray(s))for(let a of s)n.push(fe(a,t,r));else for(let a of t)r===!0&&typeof a=="string"&&(a=`{${a}}`),n.push(Array.isArray(a)?fe(s,a,r):s+a);return he.flatten(n)},Vr=(e,t={})=>{let r=t.rangeLimit===void 0?1e3:t.rangeLimit,n=(s,a={})=>{s.queue=[];let i=a,o=a.queue;for(;i.type!=="brace"&&i.type!=="root"&&i.parent;)i=i.parent,o=i.queue;if(s.invalid||s.dollar){o.push(fe(o.pop(),$t(s,t)));return}if(s.type==="brace"&&s.invalid!==!0&&s.nodes.length===2){o.push(fe(o.pop(),["{}"]));return}if(s.nodes&&s.ranges>0){let m=he.reduce(s.nodes);if(he.exceedsLimit(...m,t.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let p=zr(...m,t);p.length===0&&(p=$t(s,t)),o.push(fe(o.pop(),p)),s.nodes=[];return}let h=he.encloseBrace(s),A=s.queue,f=s;for(;f.type!=="brace"&&f.type!=="root"&&f.parent;)f=f.parent,A=f.queue;for(let m=0;m{"use strict";kt.exports={MAX_LENGTH:1024*64,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:` -`,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var Mt=q((fs,Ot)=>{"use strict";var Jr=$e(),{MAX_LENGTH:Nt,CHAR_BACKSLASH:qe,CHAR_BACKTICK:en,CHAR_COMMA:tn,CHAR_DOT:rn,CHAR_LEFT_PARENTHESES:nn,CHAR_RIGHT_PARENTHESES:sn,CHAR_LEFT_CURLY_BRACE:an,CHAR_RIGHT_CURLY_BRACE:on,CHAR_LEFT_SQUARE_BRACKET:It,CHAR_RIGHT_SQUARE_BRACKET:Bt,CHAR_DOUBLE_QUOTE:un,CHAR_SINGLE_QUOTE:cn,CHAR_NO_BREAK_SPACE:ln,CHAR_ZERO_WIDTH_NOBREAK_SPACE:pn}=Lt(),fn=(e,t={})=>{if(typeof e!="string")throw new TypeError("Expected a string");let r=t||{},n=typeof r.maxLength=="number"?Math.min(Nt,r.maxLength):Nt;if(e.length>n)throw new SyntaxError(`Input length (${e.length}), exceeds max characters (${n})`);let s={type:"root",input:e,nodes:[]},a=[s],i=s,o=s,h=0,A=e.length,f=0,m=0,p,H={},_=()=>e[f++],R=b=>{if(b.type==="text"&&o.type==="dot"&&(o.type="text"),o&&o.type==="text"&&b.type==="text"){o.value+=b.value;return}return i.nodes.push(b),b.parent=i,b.prev=o,o=b,b};for(R({type:"bos"});f0){if(i.ranges>0){i.ranges=0;let b=i.nodes.shift();i.nodes=[b,{type:"text",value:Jr(i)}]}R({type:"comma",value:p}),i.commas++;continue}if(p===rn&&m>0&&i.commas===0){let b=i.nodes;if(m===0||b.length===0){R({type:"text",value:p});continue}if(o.type==="dot"){if(i.range=[],o.value+=p,o.type="range",i.nodes.length!==3&&i.nodes.length!==5){i.invalid=!0,i.ranges=0,o.type="text";continue}i.ranges++,i.args=[];continue}if(o.type==="range"){b.pop();let C=b[b.length-1];C.value+=o.value+p,o=C,i.ranges--;continue}R({type:"dot",value:p});continue}R({type:"text",value:p})}do if(i=a.pop(),i.type!=="root"){i.nodes.forEach(T=>{T.nodes||(T.type==="open"&&(T.isOpen=!0),T.type==="close"&&(T.isClose=!0),T.nodes||(T.type="text"),T.invalid=!0)});let b=a[a.length-1],C=b.nodes.indexOf(i);b.nodes.splice(C,1,...i.nodes)}while(a.length>0);return R({type:"eos"}),s};Ot.exports=fn});var Gt=q((hs,Pt)=>{"use strict";var Dt=$e(),hn=vt(),dn=Tt(),gn=Mt(),z=(e,t={})=>{let r=[];if(Array.isArray(e))for(let n of e){let s=z.create(n,t);Array.isArray(s)?r.push(...s):r.push(s)}else r=[].concat(z.create(e,t));return t&&t.expand===!0&&t.nodupes===!0&&(r=[...new Set(r)]),r};z.parse=(e,t={})=>gn(e,t);z.stringify=(e,t={})=>typeof e=="string"?Dt(z.parse(e,t),t):Dt(e,t);z.compile=(e,t={})=>(typeof e=="string"&&(e=z.parse(e,t)),hn(e,t));z.expand=(e,t={})=>{typeof e=="string"&&(e=z.parse(e,t));let r=dn(e,t);return t.noempty===!0&&(r=r.filter(Boolean)),t.nodupes===!0&&(r=[...new Set(r)]),r};z.create=(e,t={})=>e===""||e.length<3?[e]:t.expand!==!0?z.compile(e,t):z.expand(e,t);Pt.exports=z});var Re=q((ds,Ut)=>{"use strict";var An=require("path"),se="\\\\/",qt=`[^${se}]`,oe="\\.",mn="\\+",Rn="\\?",ke="\\/",yn="(?=.)",Kt="[^/]",Ke=`(?:${ke}|$)`,Wt=`(?:^|${ke})`,We=`${oe}{1,2}${Ke}`,_n=`(?!${oe})`,En=`(?!${Wt}${We})`,xn=`(?!${oe}{0,1}${Ke})`,bn=`(?!${We})`,Cn=`[^.${ke}]`,wn=`${Kt}*?`,jt={DOT_LITERAL:oe,PLUS_LITERAL:mn,QMARK_LITERAL:Rn,SLASH_LITERAL:ke,ONE_CHAR:yn,QMARK:Kt,END_ANCHOR:Ke,DOTS_SLASH:We,NO_DOT:_n,NO_DOTS:En,NO_DOT_SLASH:xn,NO_DOTS_SLASH:bn,QMARK_NO_DOT:Cn,STAR:wn,START_ANCHOR:Wt},Sn=Q(N({},jt),{SLASH_LITERAL:`[${se}]`,QMARK:qt,STAR:`${qt}*?`,DOTS_SLASH:`${oe}{1,2}(?:[${se}]|$)`,NO_DOT:`(?!${oe})`,NO_DOTS:`(?!(?:^|[${se}])${oe}{1,2}(?:[${se}]|$))`,NO_DOT_SLASH:`(?!${oe}{0,1}(?:[${se}]|$))`,NO_DOTS_SLASH:`(?!${oe}{1,2}(?:[${se}]|$))`,QMARK_NO_DOT:`[^.${se}]`,START_ANCHOR:`(?:^|[${se}])`,END_ANCHOR:`(?:[${se}]|$)`}),vn={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};Ut.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:vn,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:An.sep,extglobChars(e){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${e.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(e){return e===!0?Sn:jt}}});var ye=q(X=>{"use strict";var Hn=require("path"),$n=process.platform==="win32",{REGEX_BACKSLASH:Tn,REGEX_REMOVE_BACKSLASH:kn,REGEX_SPECIAL_CHARS:Ln,REGEX_SPECIAL_CHARS_GLOBAL:On}=Re();X.isObject=e=>e!==null&&typeof e=="object"&&!Array.isArray(e);X.hasRegexChars=e=>Ln.test(e);X.isRegexChar=e=>e.length===1&&X.hasRegexChars(e);X.escapeRegex=e=>e.replace(On,"\\$1");X.toPosixSlashes=e=>e.replace(Tn,"/");X.removeBackslashes=e=>e.replace(kn,t=>t==="\\"?"":t);X.supportsLookbehinds=()=>{let e=process.version.slice(1).split(".").map(Number);return e.length===3&&e[0]>=9||e[0]===8&&e[1]>=10};X.isWindows=e=>e&&typeof e.windows=="boolean"?e.windows:$n===!0||Hn.sep==="\\";X.escapeLast=(e,t,r)=>{let n=e.lastIndexOf(t,r);return n===-1?e:e[n-1]==="\\"?X.escapeLast(e,t,n-1):`${e.slice(0,n)}\\${e.slice(n)}`};X.removePrefix=(e,t={})=>{let r=e;return r.startsWith("./")&&(r=r.slice(2),t.prefix="./"),r};X.wrapOutput=(e,t={},r={})=>{let n=r.contains?"":"^",s=r.contains?"":"$",a=`${n}(?:${e})${s}`;return t.negated===!0&&(a=`(?:^(?!${a}).*$)`),a}});var er=q((As,Ft)=>{"use strict";var Qt=ye(),{CHAR_ASTERISK:je,CHAR_AT:Nn,CHAR_BACKWARD_SLASH:_e,CHAR_COMMA:In,CHAR_DOT:Fe,CHAR_EXCLAMATION_MARK:Xt,CHAR_FORWARD_SLASH:Zt,CHAR_LEFT_CURLY_BRACE:Qe,CHAR_LEFT_PARENTHESES:Xe,CHAR_LEFT_SQUARE_BRACKET:Bn,CHAR_PLUS:Mn,CHAR_QUESTION_MARK:Yt,CHAR_RIGHT_CURLY_BRACE:Pn,CHAR_RIGHT_PARENTHESES:zt,CHAR_RIGHT_SQUARE_BRACKET:Dn}=Re(),Vt=e=>e===Zt||e===_e,Jt=e=>{e.isPrefix!==!0&&(e.depth=e.isGlobstar?Infinity:1)},Gn=(e,t)=>{let r=t||{},n=e.length-1,s=r.parts===!0||r.scanToEnd===!0,a=[],i=[],o=[],h=e,A=-1,f=0,m=0,p=!1,H=!1,_=!1,R=!1,b=!1,C=!1,T=!1,k=!1,E=!1,ee=0,j,y,x={value:"",depth:0,isGlob:!1},M=()=>A>=n,$=()=>h.charCodeAt(A+1),u=()=>(j=y,h.charCodeAt(++A));for(;A0&&(W=h.slice(0,f),h=h.slice(f),m-=f),w&&_===!0&&m>0?(w=h.slice(0,m),P=h.slice(m)):_===!0?(w="",P=h):w=h,w&&w!==""&&w!=="/"&&w!==h&&Vt(w.charCodeAt(w.length-1))&&(w=w.slice(0,-1)),r.unescape===!0&&(P&&(P=Qt.removeBackslashes(P)),w&&T===!0&&(w=Qt.removeBackslashes(w)));let l={prefix:W,input:e,start:f,base:w,glob:P,isBrace:p,isBracket:H,isGlob:_,isExtglob:R,isGlobstar:b,negated:k};if(r.tokens===!0&&(l.maxDepth=0,Vt(y)||i.push(x),l.tokens=i),r.parts===!0||r.tokens===!0){let c;for(let D=0;D{"use strict";var Le=Re(),V=ye(),{MAX_LENGTH:Oe,POSIX_REGEX_SOURCE:Un,REGEX_NON_SPECIAL_CHARS:qn,REGEX_SPECIAL_CHARS_BACKREF:Kn,REPLACEMENTS:rr}=Le,Wn=(e,t)=>{if(typeof t.expandRange=="function")return t.expandRange(...e,t);e.sort();let r=`[${e.join("-")}]`;try{new RegExp(r)}catch(n){return e.map(s=>V.escapeRegex(s)).join("..")}return r},de=(e,t)=>`Missing ${e}: "${t}" - use "\\\\${t}" to match literal characters`,nr=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a string");e=rr[e]||e;let r=N({},t),n=typeof r.maxLength=="number"?Math.min(Oe,r.maxLength):Oe,s=e.length;if(s>n)throw new SyntaxError(`Input length: ${s}, exceeds maximum allowed length: ${n}`);let a={type:"bos",value:"",output:r.prepend||""},i=[a],o=r.capture?"":"?:",h=V.isWindows(t),A=Le.globChars(h),f=Le.extglobChars(A),{DOT_LITERAL:m,PLUS_LITERAL:p,SLASH_LITERAL:H,ONE_CHAR:_,DOTS_SLASH:R,NO_DOT:b,NO_DOT_SLASH:C,NO_DOTS_SLASH:T,QMARK:k,QMARK_NO_DOT:E,STAR:ee,START_ANCHOR:j}=A,y=g=>`(${o}(?:(?!${j}${g.dot?R:m}).)*?)`,x=r.dot?"":b,M=r.dot?k:E,$=r.bash===!0?y(r):ee;r.capture&&($=`(${$})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let u={input:e,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:i};e=V.removePrefix(e,u),s=e.length;let w=[],W=[],P=[],l=a,c,D=()=>u.index===s-1,G=u.peek=(g=1)=>e[u.index+g],te=u.advance=()=>e[++u.index],re=()=>e.slice(u.index+1),ie=(g="",L=0)=>{u.consumed+=g,u.index+=L},be=g=>{u.output+=g.output!=null?g.output:g.value,ie(g.value)},xr=()=>{let g=1;for(;G()==="!"&&(G(2)!=="("||G(3)==="?");)te(),u.start++,g++;return g%2==0?!1:(u.negated=!0,u.start++,!0)},Ce=g=>{u[g]++,P.push(g)},ce=g=>{u[g]--,P.pop()},S=g=>{if(l.type==="globstar"){let L=u.braces>0&&(g.type==="comma"||g.type==="brace"),d=g.extglob===!0||w.length&&(g.type==="pipe"||g.type==="paren");g.type!=="slash"&&g.type!=="paren"&&!L&&!d&&(u.output=u.output.slice(0,-l.output.length),l.type="star",l.value="*",l.output=$,u.output+=l.output)}if(w.length&&g.type!=="paren"&&!f[g.value]&&(w[w.length-1].inner+=g.value),(g.value||g.output)&&be(g),l&&l.type==="text"&&g.type==="text"){l.value+=g.value,l.output=(l.output||"")+g.value;return}g.prev=l,i.push(g),l=g},we=(g,L)=>{let d=Q(N({},f[L]),{conditions:1,inner:""});d.prev=l,d.parens=u.parens,d.output=u.output;let v=(r.capture?"(":"")+d.open;Ce("parens"),S({type:g,value:L,output:u.output?"":_}),S({type:"paren",extglob:!0,value:te(),output:v}),w.push(d)},br=g=>{let L=g.close+(r.capture?")":"");if(g.type==="negate"){let d=$;g.inner&&g.inner.length>1&&g.inner.includes("/")&&(d=y(r)),(d!==$||D()||/^\)+$/.test(re()))&&(L=g.close=`)$))${d}`),g.prev.type==="bos"&&(u.negatedExtglob=!0)}S({type:"paren",extglob:!0,value:c,output:L}),ce("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(e)){let g=!1,L=e.replace(Kn,(d,v,I,F,U,Me)=>F==="\\"?(g=!0,d):F==="?"?v?v+F+(U?k.repeat(U.length):""):Me===0?M+(U?k.repeat(U.length):""):k.repeat(I.length):F==="."?m.repeat(I.length):F==="*"?v?v+F+(U?$:""):$:v?d:`\\${d}`);return g===!0&&(r.unescape===!0?L=L.replace(/\\/g,""):L=L.replace(/\\+/g,d=>d.length%2==0?"\\\\":d?"\\":"")),L===e&&r.contains===!0?(u.output=e,u):(u.output=V.wrapOutput(L,u,t),u)}for(;!D();){if(c=te(),c==="\0")continue;if(c==="\\"){let d=G();if(d==="/"&&r.bash!==!0||d==="."||d===";")continue;if(!d){c+="\\",S({type:"text",value:c});continue}let v=/^\\+/.exec(re()),I=0;if(v&&v[0].length>2&&(I=v[0].length,u.index+=I,I%2!=0&&(c+="\\")),r.unescape===!0?c=te()||"":c+=te()||"",u.brackets===0){S({type:"text",value:c});continue}}if(u.brackets>0&&(c!=="]"||l.value==="["||l.value==="[^")){if(r.posix!==!1&&c===":"){let d=l.value.slice(1);if(d.includes("[")&&(l.posix=!0,d.includes(":"))){let v=l.value.lastIndexOf("["),I=l.value.slice(0,v),F=l.value.slice(v+2),U=Un[F];if(U){l.value=I+U,u.backtrack=!0,te(),!a.output&&i.indexOf(l)===1&&(a.output=_);continue}}}(c==="["&&G()!==":"||c==="-"&&G()==="]")&&(c=`\\${c}`),c==="]"&&(l.value==="["||l.value==="[^")&&(c=`\\${c}`),r.posix===!0&&c==="!"&&l.value==="["&&(c="^"),l.value+=c,be({value:c});continue}if(u.quotes===1&&c!=='"'){c=V.escapeRegex(c),l.value+=c,be({value:c});continue}if(c==='"'){u.quotes=u.quotes===1?0:1,r.keepQuotes===!0&&S({type:"text",value:c});continue}if(c==="("){Ce("parens"),S({type:"paren",value:c});continue}if(c===")"){if(u.parens===0&&r.strictBrackets===!0)throw new SyntaxError(de("opening","("));let d=w[w.length-1];if(d&&u.parens===d.parens+1){br(w.pop());continue}S({type:"paren",value:c,output:u.parens?")":"\\)"}),ce("parens");continue}if(c==="["){if(r.nobracket===!0||!re().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(de("closing","]"));c=`\\${c}`}else Ce("brackets");S({type:"bracket",value:c});continue}if(c==="]"){if(r.nobracket===!0||l&&l.type==="bracket"&&l.value.length===1){S({type:"text",value:c,output:`\\${c}`});continue}if(u.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(de("opening","["));S({type:"text",value:c,output:`\\${c}`});continue}ce("brackets");let d=l.value.slice(1);if(l.posix!==!0&&d[0]==="^"&&!d.includes("/")&&(c=`/${c}`),l.value+=c,be({value:c}),r.literalBrackets===!1||V.hasRegexChars(d))continue;let v=V.escapeRegex(l.value);if(u.output=u.output.slice(0,-l.value.length),r.literalBrackets===!0){u.output+=v,l.value=v;continue}l.value=`(${o}${v}|${l.value})`,u.output+=l.value;continue}if(c==="{"&&r.nobrace!==!0){Ce("braces");let d={type:"brace",value:c,output:"(",outputIndex:u.output.length,tokensIndex:u.tokens.length};W.push(d),S(d);continue}if(c==="}"){let d=W[W.length-1];if(r.nobrace===!0||!d){S({type:"text",value:c,output:c});continue}let v=")";if(d.dots===!0){let I=i.slice(),F=[];for(let U=I.length-1;U>=0&&(i.pop(),I[U].type!=="brace");U--)I[U].type!=="dots"&&F.unshift(I[U].value);v=Wn(F,r),u.backtrack=!0}if(d.comma!==!0&&d.dots!==!0){let I=u.output.slice(0,d.outputIndex),F=u.tokens.slice(d.tokensIndex);d.value=d.output="\\{",c=v="\\}",u.output=I;for(let U of F)u.output+=U.output||U.value}S({type:"brace",value:c,output:v}),ce("braces"),W.pop();continue}if(c==="|"){w.length>0&&w[w.length-1].conditions++,S({type:"text",value:c});continue}if(c===","){let d=c,v=W[W.length-1];v&&P[P.length-1]==="braces"&&(v.comma=!0,d="|"),S({type:"comma",value:c,output:d});continue}if(c==="/"){if(l.type==="dot"&&u.index===u.start+1){u.start=u.index+1,u.consumed="",u.output="",i.pop(),l=a;continue}S({type:"slash",value:c,output:H});continue}if(c==="."){if(u.braces>0&&l.type==="dot"){l.value==="."&&(l.output=m);let d=W[W.length-1];l.type="dots",l.output+=c,l.value+=c,d.dots=!0;continue}if(u.braces+u.parens===0&&l.type!=="bos"&&l.type!=="slash"){S({type:"text",value:c,output:m});continue}S({type:"dot",value:c,output:m});continue}if(c==="?"){if(!(l&&l.value==="(")&&r.noextglob!==!0&&G()==="("&&G(2)!=="?"){we("qmark",c);continue}if(l&&l.type==="paren"){let v=G(),I=c;if(v==="<"&&!V.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(l.value==="("&&!/[!=<:]/.test(v)||v==="<"&&!/<([!=]|\w+>)/.test(re()))&&(I=`\\${c}`),S({type:"text",value:c,output:I});continue}if(r.dot!==!0&&(l.type==="slash"||l.type==="bos")){S({type:"qmark",value:c,output:E});continue}S({type:"qmark",value:c,output:k});continue}if(c==="!"){if(r.noextglob!==!0&&G()==="("&&(G(2)!=="?"||!/[!=<:]/.test(G(3)))){we("negate",c);continue}if(r.nonegate!==!0&&u.index===0){xr();continue}}if(c==="+"){if(r.noextglob!==!0&&G()==="("&&G(2)!=="?"){we("plus",c);continue}if(l&&l.value==="("||r.regex===!1){S({type:"plus",value:c,output:p});continue}if(l&&(l.type==="bracket"||l.type==="paren"||l.type==="brace")||u.parens>0){S({type:"plus",value:c});continue}S({type:"plus",value:p});continue}if(c==="@"){if(r.noextglob!==!0&&G()==="("&&G(2)!=="?"){S({type:"at",extglob:!0,value:c,output:""});continue}S({type:"text",value:c});continue}if(c!=="*"){(c==="$"||c==="^")&&(c=`\\${c}`);let d=qn.exec(re());d&&(c+=d[0],u.index+=d[0].length),S({type:"text",value:c});continue}if(l&&(l.type==="globstar"||l.star===!0)){l.type="star",l.star=!0,l.value+=c,l.output=$,u.backtrack=!0,u.globstar=!0,ie(c);continue}let g=re();if(r.noextglob!==!0&&/^\([^?]/.test(g)){we("star",c);continue}if(l.type==="star"){if(r.noglobstar===!0){ie(c);continue}let d=l.prev,v=d.prev,I=d.type==="slash"||d.type==="bos",F=v&&(v.type==="star"||v.type==="globstar");if(r.bash===!0&&(!I||g[0]&&g[0]!=="/")){S({type:"star",value:c,output:""});continue}let U=u.braces>0&&(d.type==="comma"||d.type==="brace"),Me=w.length&&(d.type==="pipe"||d.type==="paren");if(!I&&d.type!=="paren"&&!U&&!Me){S({type:"star",value:c,output:""});continue}for(;g.slice(0,3)==="/**";){let Se=e[u.index+4];if(Se&&Se!=="/")break;g=g.slice(3),ie("/**",3)}if(d.type==="bos"&&D()){l.type="globstar",l.value+=c,l.output=y(r),u.output=l.output,u.globstar=!0,ie(c);continue}if(d.type==="slash"&&d.prev.type!=="bos"&&!F&&D()){u.output=u.output.slice(0,-(d.output+l.output).length),d.output=`(?:${d.output}`,l.type="globstar",l.output=y(r)+(r.strictSlashes?")":"|$)"),l.value+=c,u.globstar=!0,u.output+=d.output+l.output,ie(c);continue}if(d.type==="slash"&&d.prev.type!=="bos"&&g[0]==="/"){let Se=g[1]!==void 0?"|$":"";u.output=u.output.slice(0,-(d.output+l.output).length),d.output=`(?:${d.output}`,l.type="globstar",l.output=`${y(r)}${H}|${H}${Se})`,l.value+=c,u.output+=d.output+l.output,u.globstar=!0,ie(c+te()),S({type:"slash",value:"/",output:""});continue}if(d.type==="bos"&&g[0]==="/"){l.type="globstar",l.value+=c,l.output=`(?:^|${H}|${y(r)}${H})`,u.output=l.output,u.globstar=!0,ie(c+te()),S({type:"slash",value:"/",output:""});continue}u.output=u.output.slice(0,-l.output.length),l.type="globstar",l.output=y(r),l.value+=c,u.output+=l.output,u.globstar=!0,ie(c);continue}let L={type:"star",value:c,output:$};if(r.bash===!0){L.output=".*?",(l.type==="bos"||l.type==="slash")&&(L.output=x+L.output),S(L);continue}if(l&&(l.type==="bracket"||l.type==="paren")&&r.regex===!0){L.output=c,S(L);continue}(u.index===u.start||l.type==="slash"||l.type==="dot")&&(l.type==="dot"?(u.output+=C,l.output+=C):r.dot===!0?(u.output+=T,l.output+=T):(u.output+=x,l.output+=x),G()!=="*"&&(u.output+=_,l.output+=_)),S(L)}for(;u.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(de("closing","]"));u.output=V.escapeLast(u.output,"["),ce("brackets")}for(;u.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(de("closing",")"));u.output=V.escapeLast(u.output,"("),ce("parens")}for(;u.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(de("closing","}"));u.output=V.escapeLast(u.output,"{"),ce("braces")}if(r.strictSlashes!==!0&&(l.type==="star"||l.type==="bracket")&&S({type:"maybe_slash",value:"",output:`${H}?`}),u.backtrack===!0){u.output="";for(let g of u.tokens)u.output+=g.output!=null?g.output:g.value,g.suffix&&(u.output+=g.suffix)}return u};nr.fastpaths=(e,t)=>{let r=N({},t),n=typeof r.maxLength=="number"?Math.min(Oe,r.maxLength):Oe,s=e.length;if(s>n)throw new SyntaxError(`Input length: ${s}, exceeds maximum allowed length: ${n}`);e=rr[e]||e;let a=V.isWindows(t),{DOT_LITERAL:i,SLASH_LITERAL:o,ONE_CHAR:h,DOTS_SLASH:A,NO_DOT:f,NO_DOTS:m,NO_DOTS_SLASH:p,STAR:H,START_ANCHOR:_}=Le.globChars(a),R=r.dot?m:f,b=r.dot?p:f,C=r.capture?"":"?:",T={negated:!1,prefix:""},k=r.bash===!0?".*?":H;r.capture&&(k=`(${k})`);let E=x=>x.noglobstar===!0?k:`(${C}(?:(?!${_}${x.dot?A:i}).)*?)`,ee=x=>{switch(x){case"*":return`${R}${h}${k}`;case".*":return`${i}${h}${k}`;case"*.*":return`${R}${k}${i}${h}${k}`;case"*/*":return`${R}${k}${o}${h}${b}${k}`;case"**":return R+E(r);case"**/*":return`(?:${R}${E(r)}${o})?${b}${h}${k}`;case"**/*.*":return`(?:${R}${E(r)}${o})?${b}${k}${i}${h}${k}`;case"**/.*":return`(?:${R}${E(r)}${o})?${i}${h}${k}`;default:{let M=/^(.*?)\.(\w+)$/.exec(x);if(!M)return;let $=ee(M[1]);return $?$+i+M[2]:void 0}}},j=V.removePrefix(e,T),y=ee(j);return y&&r.strictSlashes!==!0&&(y+=`${o}?`),y};tr.exports=nr});var ir=q((Rs,ar)=>{"use strict";var jn=require("path"),Fn=er(),Ze=sr(),Ye=ye(),Qn=Re(),Xn=e=>e&&typeof e=="object"&&!Array.isArray(e),B=(e,t,r=!1)=>{if(Array.isArray(e)){let f=e.map(p=>B(p,t,r));return p=>{for(let H of f){let _=H(p);if(_)return _}return!1}}let n=Xn(e)&&e.tokens&&e.input;if(e===""||typeof e!="string"&&!n)throw new TypeError("Expected pattern to be a non-empty string");let s=t||{},a=Ye.isWindows(t),i=n?B.compileRe(e,t):B.makeRe(e,t,!1,!0),o=i.state;delete i.state;let h=()=>!1;if(s.ignore){let f=Q(N({},t),{ignore:null,onMatch:null,onResult:null});h=B(s.ignore,f,r)}let A=(f,m=!1)=>{let{isMatch:p,match:H,output:_}=B.test(f,i,t,{glob:e,posix:a}),R={glob:e,state:o,regex:i,posix:a,input:f,output:_,match:H,isMatch:p};return typeof s.onResult=="function"&&s.onResult(R),p===!1?(R.isMatch=!1,m?R:!1):h(f)?(typeof s.onIgnore=="function"&&s.onIgnore(R),R.isMatch=!1,m?R:!1):(typeof s.onMatch=="function"&&s.onMatch(R),m?R:!0)};return r&&(A.state=o),A};B.test=(e,t,r,{glob:n,posix:s}={})=>{if(typeof e!="string")throw new TypeError("Expected input to be a string");if(e==="")return{isMatch:!1,output:""};let a=r||{},i=a.format||(s?Ye.toPosixSlashes:null),o=e===n,h=o&&i?i(e):e;return o===!1&&(h=i?i(e):e,o=h===n),(o===!1||a.capture===!0)&&(a.matchBase===!0||a.basename===!0?o=B.matchBase(e,t,r,s):o=t.exec(h)),{isMatch:Boolean(o),match:o,output:h}};B.matchBase=(e,t,r,n=Ye.isWindows(r))=>(t instanceof RegExp?t:B.makeRe(t,r)).test(jn.basename(e));B.isMatch=(e,t,r)=>B(t,r)(e);B.parse=(e,t)=>Array.isArray(e)?e.map(r=>B.parse(r,t)):Ze(e,Q(N({},t),{fastpaths:!1}));B.scan=(e,t)=>Fn(e,t);B.compileRe=(e,t,r=!1,n=!1)=>{if(r===!0)return e.output;let s=t||{},a=s.contains?"":"^",i=s.contains?"":"$",o=`${a}(?:${e.output})${i}`;e&&e.negated===!0&&(o=`^(?!${o}).*$`);let h=B.toRegex(o,t);return n===!0&&(h.state=e),h};B.makeRe=(e,t,r=!1,n=!1)=>{if(!e||typeof e!="string")throw new TypeError("Expected a non-empty string");let s=t||{},a={negated:!1,fastpaths:!0},i="",o;return e.startsWith("./")&&(e=e.slice(2),i=a.prefix="./"),s.fastpaths!==!1&&(e[0]==="."||e[0]==="*")&&(o=Ze.fastpaths(e,t)),o===void 0?(a=Ze(e,t),a.prefix=i+(a.prefix||"")):a.output=o,B.compileRe(a,t,r,n)};B.toRegex=(e,t)=>{try{let r=t||{};return new RegExp(e,r.flags||(r.nocase?"i":""))}catch(r){if(t&&t.debug===!0)throw r;return/$^/}};B.constants=Qn;ar.exports=B});var ur=q((ys,or)=>{"use strict";or.exports=ir()});var hr=q((_s,cr)=>{"use strict";var lr=require("util"),pr=Gt(),ae=ur(),ze=ye(),fr=e=>typeof e=="string"&&(e===""||e==="./"),O=(e,t,r)=>{t=[].concat(t),e=[].concat(e);let n=new Set,s=new Set,a=new Set,i=0,o=f=>{a.add(f.output),r&&r.onResult&&r.onResult(f)};for(let f=0;f!n.has(f));if(r&&A.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${t.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?t.map(f=>f.replace(/\\/g,"")):t}return A};O.match=O;O.matcher=(e,t)=>ae(e,t);O.isMatch=(e,t,r)=>ae(t,r)(e);O.any=O.isMatch;O.not=(e,t,r={})=>{t=[].concat(t).map(String);let n=new Set,s=[],a=o=>{r.onResult&&r.onResult(o),s.push(o.output)},i=O(e,t,Q(N({},r),{onResult:a}));for(let o of s)i.includes(o)||n.add(o);return[...n]};O.contains=(e,t,r)=>{if(typeof e!="string")throw new TypeError(`Expected a string: "${lr.inspect(e)}"`);if(Array.isArray(t))return t.some(n=>O.contains(e,n,r));if(typeof t=="string"){if(fr(e)||fr(t))return!1;if(e.includes(t)||e.startsWith("./")&&e.slice(2).includes(t))return!0}return O.isMatch(e,t,Q(N({},r),{contains:!0}))};O.matchKeys=(e,t,r)=>{if(!ze.isObject(e))throw new TypeError("Expected the first argument to be an object");let n=O(Object.keys(e),t,r),s={};for(let a of n)s[a]=e[a];return s};O.some=(e,t,r)=>{let n=[].concat(e);for(let s of[].concat(t)){let a=ae(String(s),r);if(n.some(i=>a(i)))return!0}return!1};O.every=(e,t,r)=>{let n=[].concat(e);for(let s of[].concat(t)){let a=ae(String(s),r);if(!n.every(i=>a(i)))return!1}return!0};O.all=(e,t,r)=>{if(typeof e!="string")throw new TypeError(`Expected a string: "${lr.inspect(e)}"`);return[].concat(t).every(n=>ae(n,r)(e))};O.capture=(e,t,r)=>{let n=ze.isWindows(r),a=ae.makeRe(String(e),Q(N({},r),{capture:!0})).exec(n?ze.toPosixSlashes(t):t);if(a)return a.slice(1).map(i=>i===void 0?"":i)};O.makeRe=(...e)=>ae.makeRe(...e);O.scan=(...e)=>ae.scan(...e);O.parse=(e,t)=>{let r=[];for(let n of[].concat(e||[]))for(let s of pr(String(n),t))r.push(ae.parse(s,t));return r};O.braces=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a string");return t&&t.nobrace===!0||!/\{.*\}/.test(e)?[e]:pr(e,t)};O.braceExpand=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a string");return O.braces(e,Q(N({},t),{expand:!0}))};cr.exports=O});var gr=q((Es,dr)=>{"use strict";dr.exports=(e,...t)=>new Promise(r=>{r(e(...t))})});var mr=q((xs,Ve)=>{"use strict";var Zn=gr(),Ar=e=>{if(e<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let t=[],r=0,n=()=>{r--,t.length>0&&t.shift()()},s=(o,h,...A)=>{r++;let f=Zn(o,...A);h(f),f.then(n,n)},a=(o,h,...A)=>{rnew Promise(A=>a(o,A,...h));return Object.defineProperties(i,{activeCount:{get:()=>r},pendingCount:{get:()=>t.length}}),i};Ve.exports=Ar;Ve.exports.default=Ar});var zn={};Lr(zn,{default:()=>Jn});var ve=Y(require("@yarnpkg/cli")),ne=Y(require("@yarnpkg/core")),rt=Y(require("@yarnpkg/core")),le=Y(require("clipanion")),Ae=class extends ve.BaseCommand{constructor(){super(...arguments);this.json=le.Option.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.production=le.Option.Boolean("--production",!1,{description:"Only install regular dependencies by omitting dev dependencies"});this.all=le.Option.Boolean("-A,--all",!1,{description:"Install the entire project"});this.workspaces=le.Option.Rest()}async execute(){let t=await ne.Configuration.find(this.context.cwd,this.context.plugins),{project:r,workspace:n}=await ne.Project.find(t,this.context.cwd),s=await ne.Cache.find(t);await r.restoreInstallState({restoreResolutions:!1});let a;if(this.all)a=new Set(r.workspaces);else if(this.workspaces.length===0){if(!n)throw new ve.WorkspaceRequiredError(r.cwd,this.context.cwd);a=new Set([n])}else a=new Set(this.workspaces.map(o=>r.getWorkspaceByIdent(rt.structUtils.parseIdent(o))));for(let o of a)for(let h of this.production?["dependencies"]:ne.Manifest.hardDependencies)for(let A of o.manifest.getForScope(h).values()){let f=r.tryWorkspaceByDescriptor(A);f!==null&&a.add(f)}for(let o of r.workspaces)a.has(o)?this.production&&o.manifest.devDependencies.clear():(o.manifest.dependencies.clear(),o.manifest.devDependencies.clear(),o.manifest.peerDependencies.clear(),o.manifest.scripts.clear());return(await ne.StreamReport.start({configuration:t,json:this.json,stdout:this.context.stdout,includeLogs:!0},async o=>{await r.install({cache:s,report:o,persistProject:!1})})).exitCode()}};Ae.paths=[["workspaces","focus"]],Ae.usage=le.Command.Usage({category:"Workspace-related commands",description:"install a single workspace and its dependencies",details:"\n This command will run an install as if the specified workspaces (and all other workspaces they depend on) were the only ones in the project. If no workspaces are explicitly listed, the active one will be assumed.\n\n Note that this command is only very moderately useful when using zero-installs, since the cache will contain all the packages anyway - meaning that the only difference between a full install and a focused install would just be a few extra lines in the `.pnp.cjs` file, at the cost of introducing an extra complexity.\n\n If the `-A,--all` flag is set, the entire project will be installed. Combine with `--production` to replicate the old `yarn install --production`.\n "});var nt=Ae;var Ne=Y(require("@yarnpkg/cli")),Ie=Y(require("@yarnpkg/core")),Ee=Y(require("@yarnpkg/core")),Z=Y(require("@yarnpkg/core")),K=Y(require("clipanion")),Be=Y(hr()),Rr=Y(require("os")),yr=Y(mr()),ue=Y(require("typanion")),xe=class extends Ne.BaseCommand{constructor(){super(...arguments);this.recursive=K.Option.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.from=K.Option.Array("--from",[],{description:"An array of glob pattern idents from which to base any recursion"});this.all=K.Option.Boolean("-A,--all",!1,{description:"Run the command on all workspaces of a project"});this.verbose=K.Option.Boolean("-v,--verbose",!1,{description:"Prefix each output line with the name of the originating workspace"});this.parallel=K.Option.Boolean("-p,--parallel",!1,{description:"Run the commands in parallel"});this.interlaced=K.Option.Boolean("-i,--interlaced",!1,{description:"Print the output of commands in real-time instead of buffering it"});this.jobs=K.Option.String("-j,--jobs",{description:"The maximum number of parallel tasks that the execution will be limited to",validator:ue.applyCascade(ue.isNumber(),[ue.isInteger(),ue.isAtLeast(2)])});this.topological=K.Option.Boolean("-t,--topological",!1,{description:"Run the command after all workspaces it depends on (regular) have finished"});this.topologicalDev=K.Option.Boolean("--topological-dev",!1,{description:"Run the command after all workspaces it depends on (regular + dev) have finished"});this.include=K.Option.Array("--include",[],{description:"An array of glob pattern idents; only matching workspaces will be traversed"});this.exclude=K.Option.Array("--exclude",[],{description:"An array of glob pattern idents; matching workspaces won't be traversed"});this.publicOnly=K.Option.Boolean("--no-private",{description:"Avoid running the command on private workspaces"});this.commandName=K.Option.String();this.args=K.Option.Proxy()}async execute(){let t=await Ie.Configuration.find(this.context.cwd,this.context.plugins),{project:r,workspace:n}=await Ie.Project.find(t,this.context.cwd);if(!this.all&&!n)throw new Ne.WorkspaceRequiredError(r.cwd,this.context.cwd);let s=this.cli.process([this.commandName,...this.args]),a=s.path.length===1&&s.path[0]==="run"&&typeof s.scriptName!="undefined"?s.scriptName:null;if(s.path.length===0)throw new K.UsageError("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let i=this.all?r.topLevelWorkspace:n,o=E=>Be.default.isMatch(Z.structUtils.stringifyIdent(E.locator),this.from),h=this.from.length>0?[i,...i.getRecursiveWorkspaceChildren()].filter(o):[i],A=this.recursive?[...h,...h.map(E=>[...E.getRecursiveWorkspaceDependencies()]).flat()]:[...h,...h.map(E=>[...E.getRecursiveWorkspaceChildren()]).flat()],f=[];for(let E of A)a&&!E.manifest.scripts.has(a)&&!a.includes(":")||a===process.env.npm_lifecycle_event&&E.cwd===n.cwd||this.include.length>0&&!Be.default.isMatch(Z.structUtils.stringifyIdent(E.locator),this.include)||this.exclude.length>0&&Be.default.isMatch(Z.structUtils.stringifyIdent(E.locator),this.exclude)||this.publicOnly&&E.manifest.private===!0||f.push(E);let m=this.interlaced;this.parallel||(m=!0);let p=new Map,H=new Set,_=this.parallel?Math.max(1,(0,Rr.cpus)().length/2):1,R=(0,yr.default)(this.jobs||_),b=0,C=null,T=!1,k=await Ee.StreamReport.start({configuration:t,stdout:this.context.stdout},async E=>{let ee=async(j,{commandIndex:y})=>{if(T)return-1;!this.parallel&&this.verbose&&y>1&&E.reportSeparator();let x=Yn(j,{configuration:t,verbose:this.verbose,commandIndex:y}),[M,$]=_r(E,{prefix:x,interlaced:m}),[u,w]=_r(E,{prefix:x,interlaced:m});try{this.verbose&&E.reportInfo(null,`${x} Process started`);let W=Date.now(),P=await this.cli.run([this.commandName,...this.args],{cwd:j.cwd,stdout:M,stderr:u})||0;M.end(),u.end(),await $,await w;let l=Date.now();if(this.verbose){let c=t.get("enableTimers")?`, completed in ${Z.formatUtils.pretty(t,l-W,Z.formatUtils.Type.DURATION)}`:"";E.reportInfo(null,`${x} Process exited (exit code ${P})${c}`)}return P===130&&(T=!0,C=P),P}catch(W){throw M.end(),u.end(),await $,await w,W}};for(let j of f)p.set(j.anchoredLocator.locatorHash,j);for(;p.size>0&&!E.hasErrors();){let j=[];for(let[M,$]of p){if(H.has($.anchoredDescriptor.descriptorHash))continue;let u=!0;if(this.topological||this.topologicalDev){let w=this.topologicalDev?new Map([...$.manifest.dependencies,...$.manifest.devDependencies]):$.manifest.dependencies;for(let W of w.values()){let P=r.tryWorkspaceByDescriptor(W);if(u=P===null||!p.has(P.anchoredLocator.locatorHash),!u)break}}if(!!u&&(H.add($.anchoredDescriptor.descriptorHash),j.push(R(async()=>{let w=await ee($,{commandIndex:++b});return p.delete(M),H.delete($.anchoredDescriptor.descriptorHash),w})),!this.parallel))break}if(j.length===0){let M=Array.from(p.values()).map($=>Z.structUtils.prettyLocator(t,$.anchoredLocator)).join(", ");E.reportError(Ee.MessageName.CYCLIC_DEPENDENCIES,`Dependency cycle detected (${M})`);return}let x=(await Promise.all(j)).find(M=>M!==0);C===null&&(C=typeof x!="undefined"?1:C),(this.topological||this.topologicalDev)&&typeof x!="undefined"&&E.reportError(Ee.MessageName.UNNAMED,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return C!==null?C:k.exitCode()}};xe.paths=[["workspaces","foreach"]],xe.usage=K.Command.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project. By default yarn runs the command only on current and all its descendant workspaces.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n Adding the `-v,--verbose` flag will cause Yarn to print more information; in particular the name of the workspace that generated the output will be printed at the front of each line.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish current and all descendant packages","yarn workspaces foreach npm publish --tolerate-republish"],["Run build script on current and all descendant packages","yarn workspaces foreach run build"],["Run build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -pt run build"],["Run build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -ptR --from '{workspace-a,workspace-b}' run build"]]});var Er=xe;function _r(e,{prefix:t,interlaced:r}){let n=e.createStreamReporter(t),s=new Z.miscUtils.DefaultStream;s.pipe(n,{end:!1}),s.on("finish",()=>{n.end()});let a=new Promise(o=>{n.on("finish",()=>{o(s.active)})});if(r)return[s,a];let i=new Z.miscUtils.BufferStream;return i.pipe(s,{end:!1}),i.on("finish",()=>{s.end()}),[i,a]}function Yn(e,{configuration:t,commandIndex:r,verbose:n}){if(!n)return null;let s=Z.structUtils.convertToIdent(e.locator),i=`[${Z.structUtils.stringifyIdent(s)}]:`,o=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],h=o[r%o.length];return Z.formatUtils.pretty(t,i,h)}var Vn={commands:[nt,Er]},Jn=Vn;return zn;})(); -/*! - * fill-range - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Licensed under the MIT License. - */ -/*! - * is-number - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Released under the MIT License. - */ -/*! - * to-regex-range - * - * Copyright (c) 2015-present, Jon Schlinkert. - * Released under the MIT License. - */ -return plugin; -} -}; diff --git a/.yarn/releases/yarn-3.3.1.cjs b/.yarn/releases/yarn-3.3.1.cjs deleted file mode 100755 index 53a282e43..000000000 --- a/.yarn/releases/yarn-3.3.1.cjs +++ /dev/null @@ -1,823 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable */ -//prettier-ignore -(()=>{var dfe=Object.create;var jS=Object.defineProperty;var Cfe=Object.getOwnPropertyDescriptor;var mfe=Object.getOwnPropertyNames;var Efe=Object.getPrototypeOf,Ife=Object.prototype.hasOwnProperty;var J=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+r+'" is not supported')});var y=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ht=(r,e)=>{for(var t in e)jS(r,t,{get:e[t],enumerable:!0})},yfe=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of mfe(e))!Ife.call(r,n)&&n!==t&&jS(r,n,{get:()=>e[n],enumerable:!(i=Cfe(e,n))||i.enumerable});return r};var ne=(r,e,t)=>(t=r!=null?dfe(Efe(r)):{},yfe(e||!r||!r.__esModule?jS(t,"default",{value:r,enumerable:!0}):t,r));var aK=y((uZe,oK)=>{oK.exports=sK;sK.sync=Gfe;var iK=J("fs");function Hfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(";"),t.indexOf("")!==-1))return!0;for(var i=0;i{uK.exports=lK;lK.sync=Yfe;var AK=J("fs");function lK(r,e,t){AK.stat(r,function(i,n){t(i,i?!1:cK(n,e))})}function Yfe(r,e){return cK(AK.statSync(r),e)}function cK(r,e){return r.isFile()&&jfe(r,e)}function jfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt("100",8),l=parseInt("010",8),c=parseInt("001",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var hK=y((hZe,fK)=>{var fZe=J("fs"),OI;process.platform==="win32"||global.TESTING_WINDOWS?OI=aK():OI=gK();fK.exports=av;av.sync=qfe;function av(r,e,t){if(typeof e=="function"&&(t=e,e={}),!t){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(i,n){av(r,e||{},function(s,o){s?n(s):i(o)})})}OI(r,e||{},function(i,n){i&&(i.code==="EACCES"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function qfe(r,e){try{return OI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code==="EACCES")return!1;throw t}}});var yK=y((pZe,IK)=>{var _g=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",pK=J("path"),Jfe=_g?";":":",dK=hK(),CK=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),mK=(r,e)=>{let t=e.colon||Jfe,i=r.match(/\//)||_g&&r.match(/\\/)?[""]:[..._g?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(t)],n=_g?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=_g?n.split(t):[""];return _g&&r.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:i,pathExt:s,pathExtExe:n}},EK=(r,e,t)=>{typeof e=="function"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=mK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(CK(r));let f=i[c],h=/^".*"$/.test(f)?f.slice(1,-1):f,p=pK.join(h,r),C=!h&&/^\.[\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];dK(c+p,{pathExt:s},(C,w)=>{if(!C&&w)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Wfe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=mK(r,e),s=[];for(let o=0;o{"use strict";var wK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(i=>i.toUpperCase()==="PATH")||"Path"};Av.exports=wK;Av.exports.default=wK});var vK=y((CZe,SK)=>{"use strict";var bK=J("path"),zfe=yK(),Vfe=BK();function QK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=zfe.sync(r.command,{path:t[Vfe({env:t})],pathExt:e?bK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=bK.resolve(n?r.options.cwd:"",o)),o}function Xfe(r){return QK(r)||QK(r,!0)}SK.exports=Xfe});var xK=y((mZe,cv)=>{"use strict";var lv=/([()\][%!^"`<>&|;, *?])/g;function _fe(r){return r=r.replace(lv,"^$1"),r}function Zfe(r,e){return r=`${r}`,r=r.replace(/(\\*)"/g,'$1$1\\"'),r=r.replace(/(\\*)$/,"$1$1"),r=`"${r}"`,r=r.replace(lv,"^$1"),e&&(r=r.replace(lv,"^$1")),r}cv.exports.command=_fe;cv.exports.argument=Zfe});var DK=y((EZe,PK)=>{"use strict";PK.exports=/^#!(.*)/});var RK=y((IZe,kK)=>{"use strict";var $fe=DK();kK.exports=(r="")=>{let e=r.match($fe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,"").split(" "),n=t.split("/").pop();return n==="env"?i:i?`${n} ${i}`:n}});var NK=y((yZe,FK)=>{"use strict";var uv=J("fs"),ehe=RK();function the(r){let t=Buffer.alloc(150),i;try{i=uv.openSync(r,"r"),uv.readSync(i,t,0,150,0),uv.closeSync(i)}catch{}return ehe(t.toString())}FK.exports=the});var MK=y((wZe,OK)=>{"use strict";var rhe=J("path"),TK=vK(),LK=xK(),ihe=NK(),nhe=process.platform==="win32",she=/\.(?:com|exe)$/i,ohe=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function ahe(r){r.file=TK(r);let e=r.file&&ihe(r.file);return e?(r.args.unshift(r.file),r.command=e,TK(r)):r.file}function Ahe(r){if(!nhe)return r;let e=ahe(r),t=!she.test(e);if(r.options.forceShell||t){let i=ohe.test(e);r.command=rhe.normalize(r.command),r.command=LK.command(r.command),r.args=r.args.map(s=>LK.argument(s,i));let n=[r.command].concat(r.args).join(" ");r.args=["/d","/s","/c",`"${n}"`],r.command=process.env.comspec||"cmd.exe",r.options.windowsVerbatimArguments=!0}return r}function lhe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Ahe(i)}OK.exports=lhe});var HK=y((BZe,KK)=>{"use strict";var gv=process.platform==="win32";function fv(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function che(r,e){if(!gv)return;let t=r.emit;r.emit=function(i,n){if(i==="exit"){let s=UK(n,e,"spawn");if(s)return t.call(r,"error",s)}return t.apply(r,arguments)}}function UK(r,e){return gv&&r===1&&!e.file?fv(e.original,"spawn"):null}function uhe(r,e){return gv&&r===1&&!e.file?fv(e.original,"spawnSync"):null}KK.exports={hookChildProcess:che,verifyENOENT:UK,verifyENOENTSync:uhe,notFoundError:fv}});var dv=y((bZe,Zg)=>{"use strict";var GK=J("child_process"),hv=MK(),pv=HK();function YK(r,e,t){let i=hv(r,e,t),n=GK.spawn(i.command,i.args,i.options);return pv.hookChildProcess(n,i),n}function ghe(r,e,t){let i=hv(r,e,t),n=GK.spawnSync(i.command,i.args,i.options);return n.error=n.error||pv.verifyENOENTSync(n.status,i),n}Zg.exports=YK;Zg.exports.spawn=YK;Zg.exports.sync=ghe;Zg.exports._parse=hv;Zg.exports._enoent=pv});var qK=y((QZe,jK)=>{"use strict";function fhe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function uc(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,uc)}fhe(uc,Error);uc.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g>",re=de(">>",!1),me=">&",tt=de(">&",!1),Rt=">",It=de(">",!1),Ur="<<<",oi=de("<<<",!1),pi="<&",pr=de("<&",!1),di="<",ai=de("<",!1),Os=function(m){return{type:"argument",segments:[].concat(...m)}},dr=function(m){return m},Bi="$'",_n=de("$'",!1),pa="'",EA=de("'",!1),kg=function(m){return[{type:"text",text:m}]},Zn='""',IA=de('""',!1),da=function(){return{type:"text",text:""}},Jp='"',yA=de('"',!1),wA=function(m){return m},Br=function(m){return{type:"arithmetic",arithmetic:m,quoted:!0}},Vl=function(m){return{type:"shell",shell:m,quoted:!0}},Rg=function(m){return{type:"variable",...m,quoted:!0}},Eo=function(m){return{type:"text",text:m}},Fg=function(m){return{type:"arithmetic",arithmetic:m,quoted:!1}},Wp=function(m){return{type:"shell",shell:m,quoted:!1}},zp=function(m){return{type:"variable",...m,quoted:!1}},Pr=function(m){return{type:"glob",pattern:m}},oe=/^[^']/,Io=Ye(["'"],!0,!1),kn=function(m){return m.join("")},Ng=/^[^$"]/,bt=Ye(["$",'"'],!0,!1),Xl=`\\ -`,Rn=de(`\\ -`,!1),$n=function(){return""},es="\\",ut=de("\\",!1),yo=/^[\\$"`]/,at=Ye(["\\","$",'"',"`"],!1,!1),ln=function(m){return m},S="\\a",Lt=de("\\a",!1),Tg=function(){return"a"},_l="\\b",Vp=de("\\b",!1),Xp=function(){return"\b"},_p=/^[Ee]/,Zp=Ye(["E","e"],!1,!1),$p=function(){return"\x1B"},G="\\f",yt=de("\\f",!1),BA=function(){return"\f"},Wi="\\n",Zl=de("\\n",!1),We=function(){return` -`},Ca="\\r",Lg=de("\\r",!1),uI=function(){return"\r"},ed="\\t",gI=de("\\t",!1),ar=function(){return" "},Fn="\\v",$l=de("\\v",!1),td=function(){return"\v"},Ms=/^[\\'"?]/,ma=Ye(["\\","'",'"',"?"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},ke="\\x",Og=de("\\x",!1),ec="\\u",Us=de("\\u",!1),tc="\\U",bA=de("\\U",!1),Mg=function(m){return String.fromCodePoint(parseInt(m,16))},Ug=/^[0-7]/,Ea=Ye([["0","7"]],!1,!1),Ia=/^[0-9a-fA-f]/,$e=Ye([["0","9"],["a","f"],["A","f"]],!1,!1),wo=rt(),QA="-",rc=de("-",!1),Ks="+",ic=de("+",!1),fI=".",rd=de(".",!1),Kg=function(m,Q,F){return{type:"number",value:(m==="-"?-1:1)*parseFloat(Q.join("")+"."+F.join(""))}},id=function(m,Q){return{type:"number",value:(m==="-"?-1:1)*parseInt(Q.join(""))}},hI=function(m){return{type:"variable",...m}},nc=function(m){return{type:"variable",name:m}},pI=function(m){return m},Hg="*",SA=de("*",!1),Nr="/",dI=de("/",!1),Hs=function(m,Q,F){return{type:Q==="*"?"multiplication":"division",right:F}},Gs=function(m,Q){return Q.reduce((F,K)=>({left:F,...K}),m)},Gg=function(m,Q,F){return{type:Q==="+"?"addition":"subtraction",right:F}},vA="$((",R=de("$((",!1),q="))",pe=de("))",!1),Ne=function(m){return m},xe="$(",qe=de("$(",!1),dt=function(m){return m},Ft="${",Nn=de("${",!1),vS=":-",AU=de(":-",!1),lU=function(m,Q){return{name:m,defaultValue:Q}},xS=":-}",cU=de(":-}",!1),uU=function(m){return{name:m,defaultValue:[]}},PS=":+",gU=de(":+",!1),fU=function(m,Q){return{name:m,alternativeValue:Q}},DS=":+}",hU=de(":+}",!1),pU=function(m){return{name:m,alternativeValue:[]}},kS=function(m){return{name:m}},dU="$",CU=de("$",!1),mU=function(m){return e.isGlobPattern(m)},EU=function(m){return m},RS=/^[a-zA-Z0-9_]/,FS=Ye([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),NS=function(){return O()},TS=/^[$@*?#a-zA-Z0-9_\-]/,LS=Ye(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),IU=/^[(){}<>$|&; \t"']/,Yg=Ye(["(",")","{","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),OS=/^[<>&; \t"']/,MS=Ye(["<",">","&",";"," "," ",'"',"'"],!1,!1),CI=/^[ \t]/,mI=Ye([" "," "],!1,!1),b=0,Fe=0,xA=[{line:1,column:1}],d=0,E=[],I=0,k;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function O(){return r.substring(Fe,b)}function X(){return Et(Fe,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Fe,b),Fi([At(m)],r.substring(Fe,b),Q)}function ye(m,Q){throw Q=Q!==void 0?Q:Et(Fe,b),Tn(m,Q)}function de(m,Q){return{type:"literal",text:m,ignoreCase:Q}}function Ye(m,Q,F){return{type:"class",parts:m,inverted:Q,ignoreCase:F}}function rt(){return{type:"any"}}function wt(){return{type:"end"}}function At(m){return{type:"other",description:m}}function et(m){var Q=xA[m],F;if(Q)return Q;for(F=m-1;!xA[F];)F--;for(Q=xA[F],Q={line:Q.line,column:Q.column};Fd&&(d=b,E=[]),E.push(m))}function Tn(m,Q){return new uc(m,null,null,Q)}function Fi(m,Q,F){return new uc(uc.buildMessage(m,Q),m,Q,F)}function PA(){var m,Q;return m=b,Q=Kr(),Q===t&&(Q=null),Q!==t&&(Fe=m,Q=s(Q)),m=Q,m}function Kr(){var m,Q,F,K,ce;if(m=b,Q=Hr(),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();F!==t?(K=ya(),K!==t?(ce=ts(),ce===t&&(ce=null),ce!==t?(Fe=m,Q=o(Q,K,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Hr(),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();F!==t?(K=ya(),K===t&&(K=null),K!==t?(Fe=m,Q=a(Q,K),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function ts(){var m,Q,F,K,ce;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(F=Kr(),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=l(F),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function ya(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&Be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&Be(f))),m}function Hr(){var m,Q,F;return m=b,Q=yU(),Q!==t?(F=$ge(),F===t&&(F=null),F!==t?(Fe=m,Q=h(Q,F),m=Q):(b=m,m=t)):(b=m,m=t),m}function $ge(){var m,Q,F,K,ce,Qe,ft;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(F=efe(),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=Hr(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();Qe!==t?(Fe=m,Q=p(F,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function efe(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&Be(w)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&Be(v))),m}function yU(){var m,Q,F;return m=b,Q=ife(),Q!==t?(F=tfe(),F===t&&(F=null),F!==t?(Fe=m,Q=D(Q,F),m=Q):(b=m,m=t)):(b=m,m=t),m}function tfe(){var m,Q,F,K,ce,Qe,ft;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(F=rfe(),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=yU(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();Qe!==t?(Fe=m,Q=T(F,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function rfe(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&Be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&Be(V))),m}function EI(){var m,Q,F,K,ce,Qe;if(m=b,Q=FU(),Q!==t)if(r.charCodeAt(b)===61?(F=W,b++):(F=t,I===0&&Be(Z)),F!==t)if(K=bU(),K!==t){for(ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();ce!==t?(Fe=m,Q=A(Q,K),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=FU(),Q!==t)if(r.charCodeAt(b)===61?(F=W,b++):(F=t,I===0&&Be(Z)),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function ife(){var m,Q,F,K,ce,Qe,ft,Bt,Vr,Ci,rs;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(r.charCodeAt(b)===40?(F=ge,b++):(F=t,I===0&&Be(_)),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=Kr(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();if(Qe!==t)if(r.charCodeAt(b)===41?(ft=L,b++):(ft=t,I===0&&Be(N)),ft!==t){for(Bt=[],Vr=Me();Vr!==t;)Bt.push(Vr),Vr=Me();if(Bt!==t){for(Vr=[],Ci=nd();Ci!==t;)Vr.push(Ci),Ci=nd();if(Vr!==t){for(Ci=[],rs=Me();rs!==t;)Ci.push(rs),rs=Me();Ci!==t?(Fe=m,Q=ue(ce,Vr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(r.charCodeAt(b)===123?(F=we,b++):(F=t,I===0&&Be(Te)),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=Kr(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();if(Qe!==t)if(r.charCodeAt(b)===125?(ft=Pe,b++):(ft=t,I===0&&Be(Le)),ft!==t){for(Bt=[],Vr=Me();Vr!==t;)Bt.push(Vr),Vr=Me();if(Bt!==t){for(Vr=[],Ci=nd();Ci!==t;)Vr.push(Ci),Ci=nd();if(Vr!==t){for(Ci=[],rs=Me();rs!==t;)Ci.push(rs),rs=Me();Ci!==t?(Fe=m,Q=se(ce,Vr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t){for(F=[],K=EI();K!==t;)F.push(K),K=EI();if(F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t){if(ce=[],Qe=BU(),Qe!==t)for(;Qe!==t;)ce.push(Qe),Qe=BU();else ce=t;if(ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();Qe!==t?(Fe=m,Q=Ae(F,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t){if(F=[],K=EI(),K!==t)for(;K!==t;)F.push(K),K=EI();else F=t;if(F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=be(F),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function wU(){var m,Q,F,K,ce;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t){if(F=[],K=II(),K!==t)for(;K!==t;)F.push(K),K=II();else F=t;if(F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=fe(F),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function BU(){var m,Q,F;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t?(F=nd(),F!==t?(Fe=m,Q=le(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();Q!==t?(F=II(),F!==t?(Fe=m,Q=le(F),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function nd(){var m,Q,F,K,ce;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();return Q!==t?(Ge.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(ie)),F===t&&(F=null),F!==t?(K=nfe(),K!==t?(ce=II(),ce!==t?(Fe=m,Q=Y(F,K,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function nfe(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&Be(re)),m===t&&(r.substr(b,2)===me?(m=me,b+=2):(m=t,I===0&&Be(tt)),m===t&&(r.charCodeAt(b)===62?(m=Rt,b++):(m=t,I===0&&Be(It)),m===t&&(r.substr(b,3)===Ur?(m=Ur,b+=3):(m=t,I===0&&Be(oi)),m===t&&(r.substr(b,2)===pi?(m=pi,b+=2):(m=t,I===0&&Be(pr)),m===t&&(r.charCodeAt(b)===60?(m=di,b++):(m=t,I===0&&Be(ai))))))),m}function II(){var m,Q,F;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();return Q!==t?(F=bU(),F!==t?(Fe=m,Q=le(F),m=Q):(b=m,m=t)):(b=m,m=t),m}function bU(){var m,Q,F;if(m=b,Q=[],F=QU(),F!==t)for(;F!==t;)Q.push(F),F=QU();else Q=t;return Q!==t&&(Fe=m,Q=Os(Q)),m=Q,m}function QU(){var m,Q;return m=b,Q=sfe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q,m===t&&(m=b,Q=ofe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q,m===t&&(m=b,Q=afe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q,m===t&&(m=b,Q=Afe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q))),m}function sfe(){var m,Q,F,K;return m=b,r.substr(b,2)===Bi?(Q=Bi,b+=2):(Q=t,I===0&&Be(_n)),Q!==t?(F=ufe(),F!==t?(r.charCodeAt(b)===39?(K=pa,b++):(K=t,I===0&&Be(EA)),K!==t?(Fe=m,Q=kg(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function ofe(){var m,Q,F,K;return m=b,r.charCodeAt(b)===39?(Q=pa,b++):(Q=t,I===0&&Be(EA)),Q!==t?(F=lfe(),F!==t?(r.charCodeAt(b)===39?(K=pa,b++):(K=t,I===0&&Be(EA)),K!==t?(Fe=m,Q=kg(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function afe(){var m,Q,F,K;if(m=b,r.substr(b,2)===Zn?(Q=Zn,b+=2):(Q=t,I===0&&Be(IA)),Q!==t&&(Fe=m,Q=da()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=Jp,b++):(Q=t,I===0&&Be(yA)),Q!==t){for(F=[],K=SU();K!==t;)F.push(K),K=SU();F!==t?(r.charCodeAt(b)===34?(K=Jp,b++):(K=t,I===0&&Be(yA)),K!==t?(Fe=m,Q=wA(F),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function Afe(){var m,Q,F;if(m=b,Q=[],F=vU(),F!==t)for(;F!==t;)Q.push(F),F=vU();else Q=t;return Q!==t&&(Fe=m,Q=wA(Q)),m=Q,m}function SU(){var m,Q;return m=b,Q=kU(),Q!==t&&(Fe=m,Q=Br(Q)),m=Q,m===t&&(m=b,Q=RU(),Q!==t&&(Fe=m,Q=Vl(Q)),m=Q,m===t&&(m=b,Q=GS(),Q!==t&&(Fe=m,Q=Rg(Q)),m=Q,m===t&&(m=b,Q=cfe(),Q!==t&&(Fe=m,Q=Eo(Q)),m=Q))),m}function vU(){var m,Q;return m=b,Q=kU(),Q!==t&&(Fe=m,Q=Fg(Q)),m=Q,m===t&&(m=b,Q=RU(),Q!==t&&(Fe=m,Q=Wp(Q)),m=Q,m===t&&(m=b,Q=GS(),Q!==t&&(Fe=m,Q=zp(Q)),m=Q,m===t&&(m=b,Q=hfe(),Q!==t&&(Fe=m,Q=Pr(Q)),m=Q,m===t&&(m=b,Q=ffe(),Q!==t&&(Fe=m,Q=Eo(Q)),m=Q)))),m}function lfe(){var m,Q,F;for(m=b,Q=[],oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io));F!==t;)Q.push(F),oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io));return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function cfe(){var m,Q,F;if(m=b,Q=[],F=xU(),F===t&&(Ng.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(bt))),F!==t)for(;F!==t;)Q.push(F),F=xU(),F===t&&(Ng.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(bt)));else Q=t;return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function xU(){var m,Q,F;return m=b,r.substr(b,2)===Xl?(Q=Xl,b+=2):(Q=t,I===0&&Be(Rn)),Q!==t&&(Fe=m,Q=$n()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(yo.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(at)),F!==t?(Fe=m,Q=ln(F),m=Q):(b=m,m=t)):(b=m,m=t)),m}function ufe(){var m,Q,F;for(m=b,Q=[],F=PU(),F===t&&(oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io)));F!==t;)Q.push(F),F=PU(),F===t&&(oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io)));return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function PU(){var m,Q,F;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&Be(Lt)),Q!==t&&(Fe=m,Q=Tg()),m=Q,m===t&&(m=b,r.substr(b,2)===_l?(Q=_l,b+=2):(Q=t,I===0&&Be(Vp)),Q!==t&&(Fe=m,Q=Xp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(_p.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Zp)),F!==t?(Fe=m,Q=$p(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&Be(yt)),Q!==t&&(Fe=m,Q=BA()),m=Q,m===t&&(m=b,r.substr(b,2)===Wi?(Q=Wi,b+=2):(Q=t,I===0&&Be(Zl)),Q!==t&&(Fe=m,Q=We()),m=Q,m===t&&(m=b,r.substr(b,2)===Ca?(Q=Ca,b+=2):(Q=t,I===0&&Be(Lg)),Q!==t&&(Fe=m,Q=uI()),m=Q,m===t&&(m=b,r.substr(b,2)===ed?(Q=ed,b+=2):(Q=t,I===0&&Be(gI)),Q!==t&&(Fe=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Fn?(Q=Fn,b+=2):(Q=t,I===0&&Be($l)),Q!==t&&(Fe=m,Q=td()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(Ms.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(ma)),F!==t?(Fe=m,Q=ln(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=gfe()))))))))),m}function gfe(){var m,Q,F,K,ce,Qe,ft,Bt,Vr,Ci,rs,YS;return m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(F=US(),F!==t?(Fe=m,Q=cn(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===ke?(Q=ke,b+=2):(Q=t,I===0&&Be(Og)),Q!==t?(F=b,K=b,ce=US(),ce!==t?(Qe=Ln(),Qe!==t?(ce=[ce,Qe],K=ce):(b=K,K=t)):(b=K,K=t),K===t&&(K=US()),K!==t?F=r.substring(F,b):F=K,F!==t?(Fe=m,Q=cn(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===ec?(Q=ec,b+=2):(Q=t,I===0&&Be(Us)),Q!==t?(F=b,K=b,ce=Ln(),ce!==t?(Qe=Ln(),Qe!==t?(ft=Ln(),ft!==t?(Bt=Ln(),Bt!==t?(ce=[ce,Qe,ft,Bt],K=ce):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t),K!==t?F=r.substring(F,b):F=K,F!==t?(Fe=m,Q=cn(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===tc?(Q=tc,b+=2):(Q=t,I===0&&Be(bA)),Q!==t?(F=b,K=b,ce=Ln(),ce!==t?(Qe=Ln(),Qe!==t?(ft=Ln(),ft!==t?(Bt=Ln(),Bt!==t?(Vr=Ln(),Vr!==t?(Ci=Ln(),Ci!==t?(rs=Ln(),rs!==t?(YS=Ln(),YS!==t?(ce=[ce,Qe,ft,Bt,Vr,Ci,rs,YS],K=ce):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t),K!==t?F=r.substring(F,b):F=K,F!==t?(Fe=m,Q=Mg(F),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function US(){var m;return Ug.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be(Ea)),m}function Ln(){var m;return Ia.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be($e)),m}function ffe(){var m,Q,F,K,ce;if(m=b,Q=[],F=b,r.charCodeAt(b)===92?(K=es,b++):(K=t,I===0&&Be(ut)),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t),F===t&&(F=b,K=b,I++,ce=NU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t)),F!==t)for(;F!==t;)Q.push(F),F=b,r.charCodeAt(b)===92?(K=es,b++):(K=t,I===0&&Be(ut)),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t),F===t&&(F=b,K=b,I++,ce=NU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t));else Q=t;return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function KS(){var m,Q,F,K,ce,Qe;if(m=b,r.charCodeAt(b)===45?(Q=QA,b++):(Q=t,I===0&&Be(rc)),Q===t&&(r.charCodeAt(b)===43?(Q=Ks,b++):(Q=t,I===0&&Be(ic))),Q===t&&(Q=null),Q!==t){if(F=[],Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie)),K!==t)for(;K!==t;)F.push(K),Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie));else F=t;if(F!==t)if(r.charCodeAt(b)===46?(K=fI,b++):(K=t,I===0&&Be(rd)),K!==t){if(ce=[],Ge.test(r.charAt(b))?(Qe=r.charAt(b),b++):(Qe=t,I===0&&Be(ie)),Qe!==t)for(;Qe!==t;)ce.push(Qe),Ge.test(r.charAt(b))?(Qe=r.charAt(b),b++):(Qe=t,I===0&&Be(ie));else ce=t;ce!==t?(Fe=m,Q=Kg(Q,F,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=QA,b++):(Q=t,I===0&&Be(rc)),Q===t&&(r.charCodeAt(b)===43?(Q=Ks,b++):(Q=t,I===0&&Be(ic))),Q===t&&(Q=null),Q!==t){if(F=[],Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie)),K!==t)for(;K!==t;)F.push(K),Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie));else F=t;F!==t?(Fe=m,Q=id(Q,F),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=GS(),Q!==t&&(Fe=m,Q=hI(Q)),m=Q,m===t&&(m=b,Q=sc(),Q!==t&&(Fe=m,Q=nc(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&Be(_)),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();if(F!==t)if(K=DU(),K!==t){for(ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();ce!==t?(r.charCodeAt(b)===41?(Qe=L,b++):(Qe=t,I===0&&Be(N)),Qe!==t?(Fe=m,Q=pI(K),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function HS(){var m,Q,F,K,ce,Qe,ft,Bt;if(m=b,Q=KS(),Q!==t){for(F=[],K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===42?(Qe=Hg,b++):(Qe=t,I===0&&Be(SA)),Qe===t&&(r.charCodeAt(b)===47?(Qe=Nr,b++):(Qe=t,I===0&&Be(dI))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=KS(),Bt!==t?(Fe=K,ce=Hs(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t;for(;K!==t;){for(F.push(K),K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===42?(Qe=Hg,b++):(Qe=t,I===0&&Be(SA)),Qe===t&&(r.charCodeAt(b)===47?(Qe=Nr,b++):(Qe=t,I===0&&Be(dI))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=KS(),Bt!==t?(Fe=K,ce=Hs(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t}F!==t?(Fe=m,Q=Gs(Q,F),m=Q):(b=m,m=t)}else b=m,m=t;return m}function DU(){var m,Q,F,K,ce,Qe,ft,Bt;if(m=b,Q=HS(),Q!==t){for(F=[],K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===43?(Qe=Ks,b++):(Qe=t,I===0&&Be(ic)),Qe===t&&(r.charCodeAt(b)===45?(Qe=QA,b++):(Qe=t,I===0&&Be(rc))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=HS(),Bt!==t?(Fe=K,ce=Gg(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t;for(;K!==t;){for(F.push(K),K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===43?(Qe=Ks,b++):(Qe=t,I===0&&Be(ic)),Qe===t&&(r.charCodeAt(b)===45?(Qe=QA,b++):(Qe=t,I===0&&Be(rc))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=HS(),Bt!==t?(Fe=K,ce=Gg(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t}F!==t?(Fe=m,Q=Gs(Q,F),m=Q):(b=m,m=t)}else b=m,m=t;return m}function kU(){var m,Q,F,K,ce,Qe;if(m=b,r.substr(b,3)===vA?(Q=vA,b+=3):(Q=t,I===0&&Be(R)),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();if(F!==t)if(K=DU(),K!==t){for(ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();ce!==t?(r.substr(b,2)===q?(Qe=q,b+=2):(Qe=t,I===0&&Be(pe)),Qe!==t?(Fe=m,Q=Ne(K),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function RU(){var m,Q,F,K;return m=b,r.substr(b,2)===xe?(Q=xe,b+=2):(Q=t,I===0&&Be(qe)),Q!==t?(F=Kr(),F!==t?(r.charCodeAt(b)===41?(K=L,b++):(K=t,I===0&&Be(N)),K!==t?(Fe=m,Q=dt(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function GS(){var m,Q,F,K,ce,Qe;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,2)===vS?(K=vS,b+=2):(K=t,I===0&&Be(AU)),K!==t?(ce=wU(),ce!==t?(r.charCodeAt(b)===125?(Qe=Pe,b++):(Qe=t,I===0&&Be(Le)),Qe!==t?(Fe=m,Q=lU(F,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,3)===xS?(K=xS,b+=3):(K=t,I===0&&Be(cU)),K!==t?(Fe=m,Q=uU(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,2)===PS?(K=PS,b+=2):(K=t,I===0&&Be(gU)),K!==t?(ce=wU(),ce!==t?(r.charCodeAt(b)===125?(Qe=Pe,b++):(Qe=t,I===0&&Be(Le)),Qe!==t?(Fe=m,Q=fU(F,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,3)===DS?(K=DS,b+=3):(K=t,I===0&&Be(hU)),K!==t?(Fe=m,Q=pU(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.charCodeAt(b)===125?(K=Pe,b++):(K=t,I===0&&Be(Le)),K!==t?(Fe=m,Q=kS(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=dU,b++):(Q=t,I===0&&Be(CU)),Q!==t?(F=sc(),F!==t?(Fe=m,Q=kS(F),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function hfe(){var m,Q,F;return m=b,Q=pfe(),Q!==t?(Fe=b,F=mU(Q),F?F=void 0:F=t,F!==t?(Fe=m,Q=EU(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function pfe(){var m,Q,F,K,ce;if(m=b,Q=[],F=b,K=b,I++,ce=TU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t),F!==t)for(;F!==t;)Q.push(F),F=b,K=b,I++,ce=TU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t);else Q=t;return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function FU(){var m,Q,F;if(m=b,Q=[],RS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(FS)),F!==t)for(;F!==t;)Q.push(F),RS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(FS));else Q=t;return Q!==t&&(Fe=m,Q=NS()),m=Q,m}function sc(){var m,Q,F;if(m=b,Q=[],TS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(LS)),F!==t)for(;F!==t;)Q.push(F),TS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(LS));else Q=t;return Q!==t&&(Fe=m,Q=NS()),m=Q,m}function NU(){var m;return IU.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be(Yg)),m}function TU(){var m;return OS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be(MS)),m}function Me(){var m,Q;if(m=[],CI.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&Be(mI)),Q!==t)for(;Q!==t;)m.push(Q),CI.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&Be(mI));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b{"use strict";function phe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function fc(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,fc)}phe(fc,Error);fc.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;gH&&(H=v,j=[]),j.push(ie))}function Le(ie,Y){return new fc(ie,null,null,Y)}function se(ie,Y,he){return new fc(fc.buildMessage(ie,Y),ie,Y,he)}function Ae(){var ie,Y,he,re;return ie=v,Y=be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Pe(o)),he!==t?(re=be(),re!==t?(D=ie,Y=a(Y,re),ie=Y):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t),ie===t&&(ie=v,Y=be(),Y!==t&&(D=ie,Y=l(Y)),ie=Y),ie}function be(){var ie,Y,he,re;return ie=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Pe(u)),he!==t?(re=Ge(),re!==t?(D=ie,Y=g(Y,re),ie=Y):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t),ie===t&&(ie=v,Y=fe(),Y!==t&&(D=ie,Y=f(Y)),ie=Y),ie}function fe(){var ie,Y,he,re,me;return ie=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Pe(u)),Y!==t?(he=le(),he!==t?(r.charCodeAt(v)===47?(re=s,v++):(re=t,$===0&&Pe(o)),re!==t?(me=le(),me!==t?(D=ie,Y=h(),ie=Y):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t),ie===t&&(ie=v,Y=le(),Y!==t&&(D=ie,Y=h()),ie=Y),ie}function le(){var ie,Y,he;if(ie=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(C));else Y=t;return Y!==t&&(D=ie,Y=h()),ie=Y,ie}function Ge(){var ie,Y,he;if(ie=v,Y=[],w.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(B)),he!==t)for(;he!==t;)Y.push(he),w.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(B));else Y=t;return Y!==t&&(D=ie,Y=h()),ie=Y,ie}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v{"use strict";function XK(r){return typeof r>"u"||r===null}function Che(r){return typeof r=="object"&&r!==null}function mhe(r){return Array.isArray(r)?r:XK(r)?[]:[r]}function Ehe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t{"use strict";function md(r,e){Error.call(this),this.name="YAMLException",this.reason=r,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}md.prototype=Object.create(Error.prototype);md.prototype.constructor=md;md.prototype.toString=function(e){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!e&&this.mark&&(t+=" "+this.mark.toString()),t};_K.exports=md});var e2=y((YZe,$K)=>{"use strict";var ZK=pc();function wv(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}wv.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i="",n=this.position;n>0&&`\0\r -\x85\u2028\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=" ... ",n+=5;break}for(s="",o=this.position;ot/2-1){s=" ... ",o-=5;break}return a=this.buffer.slice(n,o),ZK.repeat(" ",e)+i+a+s+` -`+ZK.repeat(" ",e+this.position-n+i.length)+"^"};wv.prototype.toString=function(e){var t,i="";return this.name&&(i+='in "'+this.name+'" '),i+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`: -`+t)),i};$K.exports=wv});var Ai=y((jZe,r2)=>{"use strict";var t2=tf(),whe=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],Bhe=["scalar","sequence","mapping"];function bhe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Qhe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(whe.indexOf(t)===-1)throw new t2('Unknown option "'+t+'" is met in definition of "'+r+'" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=bhe(e.styleAliases||null),Bhe.indexOf(this.kind)===-1)throw new t2('Unknown kind "'+this.kind+'" is specified for "'+r+'" YAML type.')}r2.exports=Qhe});var dc=y((qZe,n2)=>{"use strict";var i2=pc(),jI=tf(),She=Ai();function Bv(r,e,t){var i=[];return r.include.forEach(function(n){t=Bv(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function vhe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e{"use strict";var xhe=Ai();s2.exports=new xhe("tag:yaml.org,2002:str",{kind:"scalar",construct:function(r){return r!==null?r:""}})});var A2=y((WZe,a2)=>{"use strict";var Phe=Ai();a2.exports=new Phe("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(r){return r!==null?r:[]}})});var c2=y((zZe,l2)=>{"use strict";var Dhe=Ai();l2.exports=new Dhe("tag:yaml.org,2002:map",{kind:"mapping",construct:function(r){return r!==null?r:{}}})});var qI=y((VZe,u2)=>{"use strict";var khe=dc();u2.exports=new khe({explicit:[o2(),A2(),c2()]})});var f2=y((XZe,g2)=>{"use strict";var Rhe=Ai();function Fhe(r){if(r===null)return!0;var e=r.length;return e===1&&r==="~"||e===4&&(r==="null"||r==="Null"||r==="NULL")}function Nhe(){return null}function The(r){return r===null}g2.exports=new Rhe("tag:yaml.org,2002:null",{kind:"scalar",resolve:Fhe,construct:Nhe,predicate:The,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var p2=y((_Ze,h2)=>{"use strict";var Lhe=Ai();function Ohe(r){if(r===null)return!1;var e=r.length;return e===4&&(r==="true"||r==="True"||r==="TRUE")||e===5&&(r==="false"||r==="False"||r==="FALSE")}function Mhe(r){return r==="true"||r==="True"||r==="TRUE"}function Uhe(r){return Object.prototype.toString.call(r)==="[object Boolean]"}h2.exports=new Lhe("tag:yaml.org,2002:bool",{kind:"scalar",resolve:Ohe,construct:Mhe,predicate:Uhe,represent:{lowercase:function(r){return r?"true":"false"},uppercase:function(r){return r?"TRUE":"FALSE"},camelcase:function(r){return r?"True":"False"}},defaultStyle:"lowercase"})});var C2=y((ZZe,d2)=>{"use strict";var Khe=pc(),Hhe=Ai();function Ghe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function Yhe(r){return 48<=r&&r<=55}function jhe(r){return 48<=r&&r<=57}function qhe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n==="-"||n==="+")&&(n=r[++t]),n==="0"){if(t+1===e)return!0;if(n=r[++t],n==="b"){for(t++;t=0?"0b"+r.toString(2):"-0b"+r.toString(2).slice(1)},octal:function(r){return r>=0?"0"+r.toString(8):"-0"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?"0x"+r.toString(16).toUpperCase():"-0x"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var I2=y(($Ze,E2)=>{"use strict";var m2=pc(),zhe=Ai(),Vhe=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Xhe(r){return!(r===null||!Vhe.test(r)||r[r.length-1]==="_")}function _he(r){var e,t,i,n;return e=r.replace(/_/g,"").toLowerCase(),t=e[0]==="-"?-1:1,n=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var Zhe=/^[-+]?[0-9]+e/;function $he(r,e){var t;if(isNaN(r))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===r)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(m2.isNegativeZero(r))return"-0.0";return t=r.toString(10),Zhe.test(t)?t.replace("e",".e"):t}function epe(r){return Object.prototype.toString.call(r)==="[object Number]"&&(r%1!==0||m2.isNegativeZero(r))}E2.exports=new zhe("tag:yaml.org,2002:float",{kind:"scalar",resolve:Xhe,construct:_he,predicate:epe,represent:$he,defaultStyle:"lowercase"})});var bv=y((e$e,y2)=>{"use strict";var tpe=dc();y2.exports=new tpe({include:[qI()],implicit:[f2(),p2(),C2(),I2()]})});var Qv=y((t$e,w2)=>{"use strict";var rpe=dc();w2.exports=new rpe({include:[bv()]})});var S2=y((r$e,Q2)=>{"use strict";var ipe=Ai(),B2=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),b2=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function npe(r){return r===null?!1:B2.exec(r)!==null||b2.exec(r)!==null}function spe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=B2.exec(r),e===null&&(e=b2.exec(r)),e===null)throw new Error("Date resolve error");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]==="-"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function ope(r){return r.toISOString()}Q2.exports=new ipe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:npe,construct:spe,instanceOf:Date,represent:ope})});var x2=y((i$e,v2)=>{"use strict";var ape=Ai();function Ape(r){return r==="<<"||r===null}v2.exports=new ape("tag:yaml.org,2002:merge",{kind:"scalar",resolve:Ape})});var k2=y((n$e,D2)=>{"use strict";var Cc;try{P2=J,Cc=P2("buffer").Buffer}catch{}var P2,lpe=Ai(),Sv=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function cpe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=Sv;for(t=0;t64)){if(e<0)return!1;i+=6}return i%8===0}function upe(r){var e,t,i=r.replace(/[\r\n=]/g,""),n=i.length,s=Sv,o=0,a=[];for(e=0;e>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),Cc?Cc.from?Cc.from(a):new Cc(a):a}function gpe(r){var e="",t=0,i,n,s=r.length,o=Sv;for(i=0;i>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function fpe(r){return Cc&&Cc.isBuffer(r)}D2.exports=new lpe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:cpe,construct:upe,predicate:fpe,represent:gpe})});var F2=y((s$e,R2)=>{"use strict";var hpe=Ai(),ppe=Object.prototype.hasOwnProperty,dpe=Object.prototype.toString;function Cpe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t{"use strict";var Epe=Ai(),Ipe=Object.prototype.toString;function ype(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e{"use strict";var Bpe=Ai(),bpe=Object.prototype.hasOwnProperty;function Qpe(r){if(r===null)return!0;var e,t=r;for(e in t)if(bpe.call(t,e)&&t[e]!==null)return!1;return!0}function Spe(r){return r!==null?r:{}}L2.exports=new Bpe("tag:yaml.org,2002:set",{kind:"mapping",resolve:Qpe,construct:Spe})});var nf=y((A$e,M2)=>{"use strict";var vpe=dc();M2.exports=new vpe({include:[Qv()],implicit:[S2(),x2()],explicit:[k2(),F2(),T2(),O2()]})});var K2=y((l$e,U2)=>{"use strict";var xpe=Ai();function Ppe(){return!0}function Dpe(){}function kpe(){return""}function Rpe(r){return typeof r>"u"}U2.exports=new xpe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:Ppe,construct:Dpe,predicate:Rpe,represent:kpe})});var G2=y((c$e,H2)=>{"use strict";var Fpe=Ai();function Npe(r){if(r===null||r.length===0)return!1;var e=r,t=/\/([gim]*)$/.exec(r),i="";return!(e[0]==="/"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!=="/"))}function Tpe(r){var e=r,t=/\/([gim]*)$/.exec(r),i="";return e[0]==="/"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Lpe(r){var e="/"+r.source+"/";return r.global&&(e+="g"),r.multiline&&(e+="m"),r.ignoreCase&&(e+="i"),e}function Ope(r){return Object.prototype.toString.call(r)==="[object RegExp]"}H2.exports=new Fpe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:Npe,construct:Tpe,predicate:Ope,represent:Lpe})});var q2=y((u$e,j2)=>{"use strict";var JI;try{Y2=J,JI=Y2("esprima")}catch{typeof window<"u"&&(JI=window.esprima)}var Y2,Mpe=Ai();function Upe(r){if(r===null)return!1;try{var e="("+r+")",t=JI.parse(e,{range:!0});return!(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function Kpe(r){var e="("+r+")",t=JI.parse(e,{range:!0}),i=[],n;if(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type==="BlockStatement"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,"return "+e.slice(n[0],n[1]))}function Hpe(r){return r.toString()}function Gpe(r){return Object.prototype.toString.call(r)==="[object Function]"}j2.exports=new Mpe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:Upe,construct:Kpe,predicate:Gpe,represent:Hpe})});var Ed=y((g$e,W2)=>{"use strict";var J2=dc();W2.exports=J2.DEFAULT=new J2({include:[nf()],explicit:[K2(),G2(),q2()]})});var gH=y((f$e,Id)=>{"use strict";var Qa=pc(),eH=tf(),Ype=e2(),tH=nf(),jpe=Ed(),NA=Object.prototype.hasOwnProperty,WI=1,rH=2,iH=3,zI=4,vv=1,qpe=2,z2=3,Jpe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Wpe=/[\x85\u2028\u2029]/,zpe=/[,\[\]\{\}]/,nH=/^(?:!|!!|![a-z\-]+!)$/i,sH=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function V2(r){return Object.prototype.toString.call(r)}function So(r){return r===10||r===13}function Ec(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function sf(r){return r===44||r===91||r===93||r===123||r===125}function Vpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function Xpe(r){return r===120?2:r===117?4:r===85?8:0}function _pe(r){return 48<=r&&r<=57?r-48:-1}function X2(r){return r===48?"\0":r===97?"\x07":r===98?"\b":r===116||r===9?" ":r===110?` -`:r===118?"\v":r===102?"\f":r===114?"\r":r===101?"\x1B":r===32?" ":r===34?'"':r===47?"/":r===92?"\\":r===78?"\x85":r===95?"\xA0":r===76?"\u2028":r===80?"\u2029":""}function Zpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var oH=new Array(256),aH=new Array(256);for(mc=0;mc<256;mc++)oH[mc]=X2(mc)?1:0,aH[mc]=X2(mc);var mc;function $pe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||jpe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function AH(r,e){return new eH(e,new Ype(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function gt(r,e){throw AH(r,e)}function VI(r,e){r.onWarning&&r.onWarning.call(null,AH(r,e))}var _2={YAML:function(e,t,i){var n,s,o;e.version!==null&>(e,"duplication of %YAML directive"),i.length!==1&>(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&>(e,"ill-formed argument of the YAML directive"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&>(e,"unacceptable YAML version of the document"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&VI(e,"unsupported YAML version of the document")},TAG:function(e,t,i){var n,s;i.length!==2&>(e,"TAG directive accepts exactly two arguments"),n=i[0],s=i[1],nH.test(n)||gt(e,"ill-formed tag handle (first argument) of the TAG directive"),NA.call(e.tagMap,n)&>(e,'there is a previously declared suffix for "'+n+'" tag handle'),sH.test(s)||gt(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[n]=s}};function FA(r,e,t,i){var n,s,o,a;if(e1&&(r.result+=Qa.repeat(` -`,e-1))}function ede(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||sf(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&sf(n)))return!1;for(r.kind="scalar",r.result="",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&sf(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&XI(r)||t&&sf(h))break;if(So(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,_r(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(FA(r,s,o,!1),Pv(r,r.line-l),s=o=r.position,a=!1),Ec(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return FA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function tde(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind="scalar",r.result="",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(FA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else So(t)?(FA(r,i,n,!0),Pv(r,_r(r,!1,e)),i=n=r.position):r.position===r.lineStart&&XI(r)?gt(r,"unexpected end of the document within a single quoted scalar"):(r.position++,n=r.position);gt(r,"unexpected end of the stream within a single quoted scalar")}function rde(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind="scalar",r.result="",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return FA(r,t,r.position,!0),r.position++,!0;if(a===92){if(FA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),So(a))_r(r,!1,e);else if(a<256&&oH[a])r.result+=aH[a],r.position++;else if((o=Xpe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=Vpe(a))>=0?s=(s<<4)+o:gt(r,"expected hexadecimal character");r.result+=Zpe(s),r.position++}else gt(r,"unknown escape sequence");t=i=r.position}else So(a)?(FA(r,t,i,!0),Pv(r,_r(r,!1,e)),t=i=r.position):r.position===r.lineStart&&XI(r)?gt(r,"unexpected end of the document within a double quoted scalar"):(r.position++,i=r.position)}gt(r,"unexpected end of the stream within a double quoted scalar")}function ide(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,w;if(w=r.input.charCodeAt(r.position),w===91)l=93,g=!1,s=[];else if(w===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),w=r.input.charCodeAt(++r.position);w!==0;){if(_r(r,!0,e),w=r.input.charCodeAt(r.position),w===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?"mapping":"sequence",r.result=s,!0;t||gt(r,"missed comma between flow collection entries"),p=h=C=null,c=u=!1,w===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,_r(r,!0,e))),i=r.line,af(r,e,WI,!1,!0),p=r.tag,h=r.result,_r(r,!0,e),w=r.input.charCodeAt(r.position),(u||r.line===i)&&w===58&&(c=!0,w=r.input.charCodeAt(++r.position),_r(r,!0,e),af(r,e,WI,!1,!0),C=r.result),g?of(r,s,f,p,h,C):c?s.push(of(r,null,f,p,h,C)):s.push(h),_r(r,!0,e),w=r.input.charCodeAt(r.position),w===44?(t=!0,w=r.input.charCodeAt(++r.position)):t=!1}gt(r,"unexpected end of the stream within a flow collection")}function nde(r,e){var t,i,n=vv,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind="scalar",r.result="";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)vv===n?n=g===43?z2:qpe:gt(r,"repeat of a chomping mode identifier");else if((u=_pe(g))>=0)u===0?gt(r,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?gt(r,"repeat of an indentation width identifier"):(a=e+u-1,o=!0);else break;if(Ec(g)){do g=r.input.charCodeAt(++r.position);while(Ec(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!So(g)&&g!==0)}for(;g!==0;){for(xv(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndenta&&(a=r.lineIndent),So(g)){l++;continue}if(r.lineIndente)&&l!==0)gt(r,"bad indentation of a sequence entry");else if(r.lineIndente)&&(af(r,e,zI,!0,n)&&(p?f=r.result:h=r.result),p||(of(r,c,u,g,f,h,s,o),g=f=h=null),_r(r,!0,-1),w=r.input.charCodeAt(r.position)),r.lineIndent>e&&w!==0)gt(r,"bad indentation of a mapping entry");else if(r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndent tag; it should be "scalar", not "'+r.kind+'"'),g=0,f=r.implicitTypes.length;g tag; it should be "'+h.kind+'", not "'+r.kind+'"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):gt(r,"cannot resolve a node with !<"+r.tag+"> explicit tag")):gt(r,"unknown tag !<"+r.tag+">");return r.listener!==null&&r.listener("close",r),r.tag!==null||r.anchor!==null||u}function lde(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(_r(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&>(r,"directive name must not be less than one character in length");o!==0;){for(;Ec(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!So(o));break}if(So(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&xv(r),NA.call(_2,i)?_2[i](r,i,n):VI(r,'unknown document directive "'+i+'"')}if(_r(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,_r(r,!0,-1)):s&>(r,"directives end mark is expected"),af(r,r.lineIndent-1,zI,!1,!0),_r(r,!0,-1),r.checkLineBreaks&&Wpe.test(r.input.slice(e,r.position))&&VI(r,"non-ASCII line breaks are interpreted as content"),r.documents.push(r.result),r.position===r.lineStart&&XI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,_r(r,!0,-1));return}if(r.position"u"&&(t=e,e=null);var i=lH(r,t);if(typeof e!="function")return i;for(var n=0,s=i.length;n"u"&&(t=e,e=null),cH(r,e,Qa.extend({schema:tH},t))}function ude(r,e){return uH(r,Qa.extend({schema:tH},e))}Id.exports.loadAll=cH;Id.exports.load=uH;Id.exports.safeLoadAll=cde;Id.exports.safeLoad=ude});var TH=y((h$e,Fv)=>{"use strict";var wd=pc(),Bd=tf(),gde=Ed(),fde=nf(),IH=Object.prototype.toString,yH=Object.prototype.hasOwnProperty,hde=9,yd=10,pde=13,dde=32,Cde=33,mde=34,wH=35,Ede=37,Ide=38,yde=39,wde=42,BH=44,Bde=45,bH=58,bde=61,Qde=62,Sde=63,vde=64,QH=91,SH=93,xde=96,vH=123,Pde=124,xH=125,Ti={};Ti[0]="\\0";Ti[7]="\\a";Ti[8]="\\b";Ti[9]="\\t";Ti[10]="\\n";Ti[11]="\\v";Ti[12]="\\f";Ti[13]="\\r";Ti[27]="\\e";Ti[34]='\\"';Ti[92]="\\\\";Ti[133]="\\N";Ti[160]="\\_";Ti[8232]="\\L";Ti[8233]="\\P";var Dde=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function kde(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n0?r.charCodeAt(s-1):null,f=f&&pH(o,a)}else{for(s=0;si&&r[g+1]!==" ",g=s);else if(!Af(o))return _I;a=s>0?r.charCodeAt(s-1):null,f=f&&pH(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==" "}return!l&&!c?f&&!n(r)?DH:kH:t>9&&PH(r)?_I:c?FH:RH}function Ode(r,e,t,i){r.dump=function(){if(e.length===0)return"''";if(!r.noCompatMode&&Dde.indexOf(e)!==-1)return"'"+e+"'";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return Fde(r,l)}switch(Lde(e,o,r.indent,s,a)){case DH:return e;case kH:return"'"+e.replace(/'/g,"''")+"'";case RH:return"|"+dH(e,r.indent)+CH(hH(e,n));case FH:return">"+dH(e,r.indent)+CH(hH(Mde(e,s),n));case _I:return'"'+Ude(e,s)+'"';default:throw new Bd("impossible error: invalid scalar style")}}()}function dH(r,e){var t=PH(r)?String(e):"",i=r[r.length-1]===` -`,n=i&&(r[r.length-2]===` -`||r===` -`),s=n?"+":i?"":"-";return t+s+` -`}function CH(r){return r[r.length-1]===` -`?r.slice(0,-1):r}function Mde(r,e){for(var t=/(\n+)([^\n]*)/g,i=function(){var c=r.indexOf(` -`);return c=c!==-1?c:r.length,t.lastIndex=c,mH(r.slice(0,c),e)}(),n=r[0]===` -`||r[0]===" ",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===" ",i+=a+(!n&&!s&&l!==""?` -`:"")+mH(l,e),n=s}return i}function mH(r,e){if(r===""||r[0]===" ")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l="";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=` -`+r.slice(n,s),n=s+1),o=a;return l+=` -`,r.length-n>e&&o>n?l+=r.slice(n,o)+` -`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function Ude(r){for(var e="",t,i,n,s=0;s=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=fH((t-55296)*1024+i-56320+65536),s++;continue}n=Ti[t],e+=!n&&Af(t)?r[s]:n||fH(t)}return e}function Kde(r,e,t){var i="",n=r.tag,s,o;for(s=0,o=t.length;s1024&&(u+="? "),u+=r.dump+(r.condenseFlow?'"':"")+":"+(r.condenseFlow?"":" "),Ic(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump="{"+i+"}"}function Yde(r,e,t,i){var n="",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys=="function")o.sort(r.sortKeys);else if(r.sortKeys)throw new Bd("sortKeys must be a boolean or a function");for(a=0,l=o.length;a1024,g&&(r.dump&&yd===r.dump.charCodeAt(0)?f+="?":f+="? "),f+=r.dump,g&&(f+=Dv(r,e)),Ic(r,e+1,u,!0,g)&&(r.dump&&yd===r.dump.charCodeAt(0)?f+=":":f+=": ",f+=r.dump,n+=f));r.tag=s,r.dump=n||"{}"}function EH(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s tag resolver accepts not "'+l+'" style');r.dump=i}return!0}return!1}function Ic(r,e,t,i,n,s){r.tag=null,r.dump=t,EH(r,t,!1)||EH(r,t,!0);var o=IH.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o==="[object Object]"||o==="[object Array]",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!=="?"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump="*ref_"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o==="[object Object]")i&&Object.keys(r.dump).length!==0?(Yde(r,e,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(Gde(r,e,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump));else if(o==="[object Array]"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(Hde(r,u,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(Kde(r,u,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump))}else if(o==="[object String]")r.tag!=="?"&&Ode(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new Bd("unacceptable kind of an object to dump "+o)}r.tag!==null&&r.tag!=="?"&&(r.dump="!<"+r.tag+"> "+r.dump)}return!0}function jde(r,e){var t=[],i=[],n,s;for(kv(r,t,i),n=0,s=i.length;n{"use strict";var ZI=gH(),LH=TH();function $I(r){return function(){throw new Error("Function "+r+" is deprecated and cannot be used.")}}Tr.exports.Type=Ai();Tr.exports.Schema=dc();Tr.exports.FAILSAFE_SCHEMA=qI();Tr.exports.JSON_SCHEMA=bv();Tr.exports.CORE_SCHEMA=Qv();Tr.exports.DEFAULT_SAFE_SCHEMA=nf();Tr.exports.DEFAULT_FULL_SCHEMA=Ed();Tr.exports.load=ZI.load;Tr.exports.loadAll=ZI.loadAll;Tr.exports.safeLoad=ZI.safeLoad;Tr.exports.safeLoadAll=ZI.safeLoadAll;Tr.exports.dump=LH.dump;Tr.exports.safeDump=LH.safeDump;Tr.exports.YAMLException=tf();Tr.exports.MINIMAL_SCHEMA=qI();Tr.exports.SAFE_SCHEMA=nf();Tr.exports.DEFAULT_SCHEMA=Ed();Tr.exports.scan=$I("scan");Tr.exports.parse=$I("parse");Tr.exports.compose=$I("compose");Tr.exports.addConstructor=$I("addConstructor")});var UH=y((d$e,MH)=>{"use strict";var Jde=OH();MH.exports=Jde});var HH=y((C$e,KH)=>{"use strict";function Wde(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function yc(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,yc)}Wde(yc,Error);yc.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g({[Ne]:pe})))},H=function(R){return R},j=function(R){return R},$=Ms("correct indentation"),V=" ",W=ar(" ",!1),Z=function(R){return R.length===vA*Gg},A=function(R){return R.length===(vA+1)*Gg},ae=function(){return vA++,!0},ge=function(){return vA--,!0},_=function(){return Lg()},L=Ms("pseudostring"),N=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,ue=Fn(["\r",` -`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),we=/^[^\r\n\t ,\][{}:#"']/,Te=Fn(["\r",` -`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),Pe=function(){return Lg().replace(/^ *| *$/g,"")},Le="--",se=ar("--",!1),Ae=/^[a-zA-Z\/0-9]/,be=Fn([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),fe=/^[^\r\n\t :,]/,le=Fn(["\r",` -`," "," ",":",","],!0,!1),Ge="null",ie=ar("null",!1),Y=function(){return null},he="true",re=ar("true",!1),me=function(){return!0},tt="false",Rt=ar("false",!1),It=function(){return!1},Ur=Ms("string"),oi='"',pi=ar('"',!1),pr=function(){return""},di=function(R){return R},ai=function(R){return R.join("")},Os=/^[^"\\\0-\x1F\x7F]/,dr=Fn(['"',"\\",["\0",""],"\x7F"],!0,!1),Bi='\\"',_n=ar('\\"',!1),pa=function(){return'"'},EA="\\\\",kg=ar("\\\\",!1),Zn=function(){return"\\"},IA="\\/",da=ar("\\/",!1),Jp=function(){return"/"},yA="\\b",wA=ar("\\b",!1),Br=function(){return"\b"},Vl="\\f",Rg=ar("\\f",!1),Eo=function(){return"\f"},Fg="\\n",Wp=ar("\\n",!1),zp=function(){return` -`},Pr="\\r",oe=ar("\\r",!1),Io=function(){return"\r"},kn="\\t",Ng=ar("\\t",!1),bt=function(){return" "},Xl="\\u",Rn=ar("\\u",!1),$n=function(R,q,pe,Ne){return String.fromCharCode(parseInt(`0x${R}${q}${pe}${Ne}`))},es=/^[0-9a-fA-F]/,ut=Fn([["0","9"],["a","f"],["A","F"]],!1,!1),yo=Ms("blank space"),at=/^[ \t]/,ln=Fn([" "," "],!1,!1),S=Ms("white space"),Lt=/^[ \t\n\r]/,Tg=Fn([" "," ",` -`,"\r"],!1,!1),_l=`\r -`,Vp=ar(`\r -`,!1),Xp=` -`,_p=ar(` -`,!1),Zp="\r",$p=ar("\r",!1),G=0,yt=0,BA=[{line:1,column:1}],Wi=0,Zl=[],We=0,Ca;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function Lg(){return r.substring(yt,G)}function uI(){return cn(yt,G)}function ed(R,q){throw q=q!==void 0?q:cn(yt,G),ec([Ms(R)],r.substring(yt,G),q)}function gI(R,q){throw q=q!==void 0?q:cn(yt,G),Og(R,q)}function ar(R,q){return{type:"literal",text:R,ignoreCase:q}}function Fn(R,q,pe){return{type:"class",parts:R,inverted:q,ignoreCase:pe}}function $l(){return{type:"any"}}function td(){return{type:"end"}}function Ms(R){return{type:"other",description:R}}function ma(R){var q=BA[R],pe;if(q)return q;for(pe=R-1;!BA[pe];)pe--;for(q=BA[pe],q={line:q.line,column:q.column};peWi&&(Wi=G,Zl=[]),Zl.push(R))}function Og(R,q){return new yc(R,null,null,q)}function ec(R,q,pe){return new yc(yc.buildMessage(R,q),R,q,pe)}function Us(){var R;return R=Mg(),R}function tc(){var R,q,pe;for(R=G,q=[],pe=bA();pe!==t;)q.push(pe),pe=bA();return q!==t&&(yt=R,q=s(q)),R=q,R}function bA(){var R,q,pe,Ne,xe;return R=G,q=Ia(),q!==t?(r.charCodeAt(G)===45?(pe=o,G++):(pe=t,We===0&&ke(a)),pe!==t?(Ne=Nr(),Ne!==t?(xe=Ea(),xe!==t?(yt=R,q=l(xe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Mg(){var R,q,pe;for(R=G,q=[],pe=Ug();pe!==t;)q.push(pe),pe=Ug();return q!==t&&(yt=R,q=c(q)),R=q,R}function Ug(){var R,q,pe,Ne,xe,qe,dt,Ft,Nn;if(R=G,q=Nr(),q===t&&(q=null),q!==t){if(pe=G,r.charCodeAt(G)===35?(Ne=u,G++):(Ne=t,We===0&&ke(g)),Ne!==t){if(xe=[],qe=G,dt=G,We++,Ft=Gs(),We--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,We===0&&ke(f)),Ft!==t?(dt=[dt,Ft],qe=dt):(G=qe,qe=t)):(G=qe,qe=t),qe!==t)for(;qe!==t;)xe.push(qe),qe=G,dt=G,We++,Ft=Gs(),We--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,We===0&&ke(f)),Ft!==t?(dt=[dt,Ft],qe=dt):(G=qe,qe=t)):(G=qe,qe=t);else xe=t;xe!==t?(Ne=[Ne,xe],pe=Ne):(G=pe,pe=t)}else G=pe,pe=t;if(pe===t&&(pe=null),pe!==t){if(Ne=[],xe=Hs(),xe!==t)for(;xe!==t;)Ne.push(xe),xe=Hs();else Ne=t;Ne!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=Ia(),q!==t?(pe=rc(),pe!==t?(Ne=Nr(),Ne===t&&(Ne=null),Ne!==t?(r.charCodeAt(G)===58?(xe=p,G++):(xe=t,We===0&&ke(C)),xe!==t?(qe=Nr(),qe===t&&(qe=null),qe!==t?(dt=Ea(),dt!==t?(yt=R,q=w(pe,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=Ia(),q!==t?(pe=Ks(),pe!==t?(Ne=Nr(),Ne===t&&(Ne=null),Ne!==t?(r.charCodeAt(G)===58?(xe=p,G++):(xe=t,We===0&&ke(C)),xe!==t?(qe=Nr(),qe===t&&(qe=null),qe!==t?(dt=Ea(),dt!==t?(yt=R,q=w(pe,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=Ia(),q!==t)if(pe=Ks(),pe!==t)if(Ne=Nr(),Ne!==t)if(xe=fI(),xe!==t){if(qe=[],dt=Hs(),dt!==t)for(;dt!==t;)qe.push(dt),dt=Hs();else qe=t;qe!==t?(yt=R,q=w(pe,xe),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=Ia(),q!==t)if(pe=Ks(),pe!==t){if(Ne=[],xe=G,qe=Nr(),qe===t&&(qe=null),qe!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,We===0&&ke(v)),dt!==t?(Ft=Nr(),Ft===t&&(Ft=null),Ft!==t?(Nn=Ks(),Nn!==t?(yt=xe,qe=D(pe,Nn),xe=qe):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t),xe!==t)for(;xe!==t;)Ne.push(xe),xe=G,qe=Nr(),qe===t&&(qe=null),qe!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,We===0&&ke(v)),dt!==t?(Ft=Nr(),Ft===t&&(Ft=null),Ft!==t?(Nn=Ks(),Nn!==t?(yt=xe,qe=D(pe,Nn),xe=qe):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t);else Ne=t;Ne!==t?(xe=Nr(),xe===t&&(xe=null),xe!==t?(r.charCodeAt(G)===58?(qe=p,G++):(qe=t,We===0&&ke(C)),qe!==t?(dt=Nr(),dt===t&&(dt=null),dt!==t?(Ft=Ea(),Ft!==t?(yt=R,q=T(pe,Ne,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ea(){var R,q,pe,Ne,xe,qe,dt;if(R=G,q=G,We++,pe=G,Ne=Gs(),Ne!==t?(xe=$e(),xe!==t?(r.charCodeAt(G)===45?(qe=o,G++):(qe=t,We===0&&ke(a)),qe!==t?(dt=Nr(),dt!==t?(Ne=[Ne,xe,qe,dt],pe=Ne):(G=pe,pe=t)):(G=pe,pe=t)):(G=pe,pe=t)):(G=pe,pe=t),We--,pe!==t?(G=q,q=void 0):q=t,q!==t?(pe=Hs(),pe!==t?(Ne=wo(),Ne!==t?(xe=tc(),xe!==t?(qe=QA(),qe!==t?(yt=R,q=H(xe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=Gs(),q!==t?(pe=wo(),pe!==t?(Ne=Mg(),Ne!==t?(xe=QA(),xe!==t?(yt=R,q=H(Ne),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=ic(),q!==t){if(pe=[],Ne=Hs(),Ne!==t)for(;Ne!==t;)pe.push(Ne),Ne=Hs();else pe=t;pe!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function Ia(){var R,q,pe;for(We++,R=G,q=[],r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));pe!==t;)q.push(pe),r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));return q!==t?(yt=G,pe=Z(q),pe?pe=void 0:pe=t,pe!==t?(q=[q,pe],R=q):(G=R,R=t)):(G=R,R=t),We--,R===t&&(q=t,We===0&&ke($)),R}function $e(){var R,q,pe;for(R=G,q=[],r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));pe!==t;)q.push(pe),r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));return q!==t?(yt=G,pe=A(q),pe?pe=void 0:pe=t,pe!==t?(q=[q,pe],R=q):(G=R,R=t)):(G=R,R=t),R}function wo(){var R;return yt=G,R=ae(),R?R=void 0:R=t,R}function QA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function rc(){var R;return R=nc(),R===t&&(R=rd()),R}function Ks(){var R,q,pe;if(R=nc(),R===t){if(R=G,q=[],pe=Kg(),pe!==t)for(;pe!==t;)q.push(pe),pe=Kg();else q=t;q!==t&&(yt=R,q=_()),R=q}return R}function ic(){var R;return R=id(),R===t&&(R=hI(),R===t&&(R=nc(),R===t&&(R=rd()))),R}function fI(){var R;return R=id(),R===t&&(R=nc(),R===t&&(R=Kg())),R}function rd(){var R,q,pe,Ne,xe,qe;if(We++,R=G,N.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(ue)),q!==t){for(pe=[],Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(we.test(r.charAt(G))?(qe=r.charAt(G),G++):(qe=t,We===0&&ke(Te)),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);Ne!==t;)pe.push(Ne),Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(we.test(r.charAt(G))?(qe=r.charAt(G),G++):(qe=t,We===0&&ke(Te)),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);pe!==t?(yt=R,q=Pe(),R=q):(G=R,R=t)}else G=R,R=t;return We--,R===t&&(q=t,We===0&&ke(L)),R}function Kg(){var R,q,pe,Ne,xe;if(R=G,r.substr(G,2)===Le?(q=Le,G+=2):(q=t,We===0&&ke(se)),q===t&&(q=null),q!==t)if(Ae.test(r.charAt(G))?(pe=r.charAt(G),G++):(pe=t,We===0&&ke(be)),pe!==t){for(Ne=[],fe.test(r.charAt(G))?(xe=r.charAt(G),G++):(xe=t,We===0&&ke(le));xe!==t;)Ne.push(xe),fe.test(r.charAt(G))?(xe=r.charAt(G),G++):(xe=t,We===0&&ke(le));Ne!==t?(yt=R,q=Pe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function id(){var R,q;return R=G,r.substr(G,4)===Ge?(q=Ge,G+=4):(q=t,We===0&&ke(ie)),q!==t&&(yt=R,q=Y()),R=q,R}function hI(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,We===0&&ke(re)),q!==t&&(yt=R,q=me()),R=q,R===t&&(R=G,r.substr(G,5)===tt?(q=tt,G+=5):(q=t,We===0&&ke(Rt)),q!==t&&(yt=R,q=It()),R=q),R}function nc(){var R,q,pe,Ne;return We++,R=G,r.charCodeAt(G)===34?(q=oi,G++):(q=t,We===0&&ke(pi)),q!==t?(r.charCodeAt(G)===34?(pe=oi,G++):(pe=t,We===0&&ke(pi)),pe!==t?(yt=R,q=pr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=oi,G++):(q=t,We===0&&ke(pi)),q!==t?(pe=pI(),pe!==t?(r.charCodeAt(G)===34?(Ne=oi,G++):(Ne=t,We===0&&ke(pi)),Ne!==t?(yt=R,q=di(pe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),We--,R===t&&(q=t,We===0&&ke(Ur)),R}function pI(){var R,q,pe;if(R=G,q=[],pe=Hg(),pe!==t)for(;pe!==t;)q.push(pe),pe=Hg();else q=t;return q!==t&&(yt=R,q=ai(q)),R=q,R}function Hg(){var R,q,pe,Ne,xe,qe;return Os.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,We===0&&ke(dr)),R===t&&(R=G,r.substr(G,2)===Bi?(q=Bi,G+=2):(q=t,We===0&&ke(_n)),q!==t&&(yt=R,q=pa()),R=q,R===t&&(R=G,r.substr(G,2)===EA?(q=EA,G+=2):(q=t,We===0&&ke(kg)),q!==t&&(yt=R,q=Zn()),R=q,R===t&&(R=G,r.substr(G,2)===IA?(q=IA,G+=2):(q=t,We===0&&ke(da)),q!==t&&(yt=R,q=Jp()),R=q,R===t&&(R=G,r.substr(G,2)===yA?(q=yA,G+=2):(q=t,We===0&&ke(wA)),q!==t&&(yt=R,q=Br()),R=q,R===t&&(R=G,r.substr(G,2)===Vl?(q=Vl,G+=2):(q=t,We===0&&ke(Rg)),q!==t&&(yt=R,q=Eo()),R=q,R===t&&(R=G,r.substr(G,2)===Fg?(q=Fg,G+=2):(q=t,We===0&&ke(Wp)),q!==t&&(yt=R,q=zp()),R=q,R===t&&(R=G,r.substr(G,2)===Pr?(q=Pr,G+=2):(q=t,We===0&&ke(oe)),q!==t&&(yt=R,q=Io()),R=q,R===t&&(R=G,r.substr(G,2)===kn?(q=kn,G+=2):(q=t,We===0&&ke(Ng)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Xl?(q=Xl,G+=2):(q=t,We===0&&ke(Rn)),q!==t?(pe=SA(),pe!==t?(Ne=SA(),Ne!==t?(xe=SA(),xe!==t?(qe=SA(),qe!==t?(yt=R,q=$n(pe,Ne,xe,qe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function SA(){var R;return es.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,We===0&&ke(ut)),R}function Nr(){var R,q;if(We++,R=[],at.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(ln)),q!==t)for(;q!==t;)R.push(q),at.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(ln));else R=t;return We--,R===t&&(q=t,We===0&&ke(yo)),R}function dI(){var R,q;if(We++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(Tg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(Tg));else R=t;return We--,R===t&&(q=t,We===0&&ke(S)),R}function Hs(){var R,q,pe,Ne,xe,qe;if(R=G,q=Gs(),q!==t){for(pe=[],Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(qe=Gs(),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);Ne!==t;)pe.push(Ne),Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(qe=Gs(),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);pe!==t?(q=[q,pe],R=q):(G=R,R=t)}else G=R,R=t;return R}function Gs(){var R;return r.substr(G,2)===_l?(R=_l,G+=2):(R=t,We===0&&ke(Vp)),R===t&&(r.charCodeAt(G)===10?(R=Xp,G++):(R=t,We===0&&ke(_p)),R===t&&(r.charCodeAt(G)===13?(R=Zp,G++):(R=t,We===0&&ke($p)))),R}let Gg=2,vA=0;if(Ca=n(),Ca!==t&&G===r.length)return Ca;throw Ca!==t&&G{"use strict";var $de=r=>{let e=!1,t=!1,i=!1;for(let n=0;n{if(!(typeof r=="string"||Array.isArray(r)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join("-"):r=r.trim(),r.length===0?"":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=$de(r)),r=r.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\d+(\w|$)/g,n=>n.toUpperCase()),t(r))};Tv.exports=JH;Tv.exports.default=JH});var zH=y((B$e,eCe)=>{eCe.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var wc=y(Mn=>{"use strict";var XH=zH(),vo=process.env;Object.defineProperty(Mn,"_vendors",{value:XH.map(function(r){return r.constant})});Mn.name=null;Mn.isPR=null;XH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return VH(i)});if(Mn[r.constant]=t,t)switch(Mn.name=r.name,typeof r.pr){case"string":Mn.isPR=!!vo[r.pr];break;case"object":"env"in r.pr?Mn.isPR=r.pr.env in vo&&vo[r.pr.env]!==r.pr.ne:"any"in r.pr?Mn.isPR=r.pr.any.some(function(i){return!!vo[i]}):Mn.isPR=VH(r.pr);break;default:Mn.isPR=null}});Mn.isCI=!!(vo.CI||vo.CONTINUOUS_INTEGRATION||vo.BUILD_NUMBER||vo.RUN_ID||Mn.name);function VH(r){return typeof r=="string"?!!vo[r]:Object.keys(r).every(function(e){return vo[e]===r[e]})}});var ry=y(Un=>{"use strict";Object.defineProperty(Un,"__esModule",{value:!0});var tCe=0,rCe=1,iCe=2,nCe="",sCe="\0",oCe=-1,aCe=/^(-h|--help)(?:=([0-9]+))?$/,ACe=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,lCe=/^-[a-zA-Z]{2,}$/,cCe=/^([^=]+)=([\s\S]*)$/,uCe=process.env.DEBUG_CLI==="1";Un.BATCH_REGEX=lCe;Un.BINDING_REGEX=cCe;Un.DEBUG=uCe;Un.END_OF_INPUT=sCe;Un.HELP_COMMAND_INDEX=oCe;Un.HELP_REGEX=aCe;Un.NODE_ERRORED=iCe;Un.NODE_INITIAL=tCe;Un.NODE_SUCCESS=rCe;Un.OPTION_REGEX=ACe;Un.START_OF_INPUT=nCe});var iy=y(Qd=>{"use strict";Object.defineProperty(Qd,"__esModule",{value:!0});var gCe=ry(),Lv=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},Ov=class extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(i=>i.reason!==null&&i.reason===t[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i} - -${this.candidates.map(({usage:n})=>`$ ${n}`).join(` -`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean: - -$ ${i} -${Uv(e)}`}else this.message=`Command not found; did you mean one of: - -${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(` -`)} - -${Uv(e)}`}},Mv=class extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: - -${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(` -`)} - -${Uv(e)}`}},Uv=r=>`While running ${r.filter(e=>e!==gCe.END_OF_INPUT).map(e=>{let t=JSON.stringify(e);return e.match(/\s/)||e.length===0||t!==`"${e}"`?t:e}).join(" ")}`;Qd.AmbiguousSyntaxError=Mv;Qd.UnknownSyntaxError=Ov;Qd.UsageError=Lv});var va=y(TA=>{"use strict";Object.defineProperty(TA,"__esModule",{value:!0});var _H=iy(),ZH=Symbol("clipanion/isOption");function fCe(r){return{...r,[ZH]:!0}}function hCe(r,e){return typeof r>"u"?[r,e]:typeof r=="object"&&r!==null&&!Array.isArray(r)?[void 0,r]:[r,e]}function Kv(r,e=!1){let t=r.replace(/^\.: /,"");return e&&(t=t[0].toLowerCase()+t.slice(1)),t}function $H(r,e){return e.length===1?new _H.UsageError(`${r}: ${Kv(e[0],!0)}`):new _H.UsageError(`${r}: -${e.map(t=>` -- ${Kv(t)}`).join("")}`)}function pCe(r,e,t){if(typeof t>"u")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!t(e,{errors:i,coercions:n,coercion:s}))throw $H(`Invalid value for ${r}`,i);for(let[,a]of n)a();return e}TA.applyValidator=pCe;TA.cleanValidationError=Kv;TA.formatError=$H;TA.isOptionSymbol=ZH;TA.makeCommandOption=fCe;TA.rerouteArguments=hCe});var ns=y(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});var eG=/^[a-zA-Z_][a-zA-Z0-9_]*$/,tG=/^#[0-9a-f]{6}$/i,rG=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,iG=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,nG=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,Hv=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/,sG=r=>()=>r;function Qt({test:r}){return sG(r)()}function Zr(r){return r===null?"null":r===void 0?"undefined":r===""?"an empty string":JSON.stringify(r)}function LA(r,e){var t,i,n;return typeof e=="number"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:"."}[${e}]`:eG.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:""}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:"."}[${JSON.stringify(e)}]`}function Bc(r,e){return t=>{let i=r[e];return r[e]=t,Bc(r,e).bind(null,i)}}function oG(r,e){return t=>{r[e]=t}}function ny(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:"."}: ${t}`),!1}var aG=()=>Qt({test:(r,e)=>!0});function dCe(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Zr(r)})`):!0})}var CCe=()=>Qt({test:(r,e)=>typeof r!="string"?pt(e,`Expected a string (got ${Zr(r)})`):!0});function mCe(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Zr(i)})`)})}var ECe=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]),ICe=()=>Qt({test:(r,e)=>{var t;if(typeof r!="boolean"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i=ECe.get(r);if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Zr(r)})`)}return!0}}),yCe=()=>Qt({test:(r,e)=>{var t;if(typeof r!="number"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"){let n;try{n=JSON.parse(r)}catch{}if(typeof n=="number")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Zr(r)})`)}return!0}}),wCe=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"&&Hv.test(r))i=new Date(r);else{let n;if(typeof r=="string"){let s;try{s=JSON.parse(r)}catch{}typeof s=="number"&&(n=s)}else typeof r=="number"&&(n=r);if(typeof n<"u")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Zr(r)})`)}return!0}}),BCe=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t=="string"&&typeof e<"u"&&typeof(i==null?void 0:i.coercions)<"u"){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Zr(t)})`);let s=!0;for(let o=0,a=t.length;o{let t=AG(r.length);return Qt({test:(i,n)=>{var s;if(typeof i=="string"&&typeof e<"u"&&typeof(n==null?void 0:n.coercions)<"u"){if(typeof(n==null?void 0:n.coercion)>"u")return pt(n,"Unbound coercion result");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:".",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Zr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;aQt({test:(t,i)=>{if(typeof t!="object"||t===null)return pt(i,`Expected an object (got ${Zr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!="object"||i===null)return pt(n,`Expected an object (got ${Zr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l==="constructor"||l==="__proto__")a=pt(Object.assign(Object.assign({},n),{p:LA(n,l)}),"Unsafe property name");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<"u"?a=c(u,Object.assign(Object.assign({},n),{p:LA(n,l),coercion:Bc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:LA(n,l)}),`Extraneous property (got ${Zr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:oG(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},vCe=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Zr(e)})`)}),xCe=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<"u"?[]:void 0;for(let c=0,u=r.length;c1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(", ")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),PCe=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<"u"?Bc(o,"value"):void 0,l=typeof(i==null?void 0:i.coercions)<"u"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<"u")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<"u"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),DCe=r=>Qt({test:(e,t)=>typeof e>"u"?!0:r(e,t)}),kCe=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),RCe=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),FCe=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),AG=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),NCe=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;sQt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),LCe=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),OCe=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),MCe=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),UCe=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),KCe=(r,e)=>Qt({test:(t,i)=>t>=r&&tQt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),GCe=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Zr(e)})`)}),YCe=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),jCe=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),qCe=()=>Qt({test:(r,e)=>nG.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Zr(r)})`)}),JCe=()=>Qt({test:(r,e)=>Hv.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Zr(r)})`)}),WCe=({alpha:r=!1})=>Qt({test:(e,t)=>(r?tG.test(e):rG.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Zr(e)})`)}),zCe=()=>Qt({test:(r,e)=>iG.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Zr(r)})`)}),VCe=(r=aG())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Zr(e)})`)}return r(i,t)}}),XCe=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${ny(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},_Ce=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${ny(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},ZCe=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`"${o}"`).join(", ")}`):!0}})};(function(r){r.Forbids="Forbids",r.Requires="Requires"})(st.KeyRelationship||(st.KeyRelationship={}));var $Ce={[st.KeyRelationship.Forbids]:{expect:!1,message:"forbids using"},[st.KeyRelationship.Requires]:{expect:!0,message:"requires using"}},eme=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=$Ce[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property "${r}" ${o.message} ${ny(u.length,"property","properties")} ${u.map(g=>`"${g}"`).join(", ")}`):!0}})};st.applyCascade=PCe;st.base64RegExp=iG;st.colorStringAlphaRegExp=rG;st.colorStringRegExp=tG;st.computeKey=LA;st.getPrintable=Zr;st.hasExactLength=AG;st.hasForbiddenKeys=_Ce;st.hasKeyRelationship=eme;st.hasMaxLength=FCe;st.hasMinLength=RCe;st.hasMutuallyExclusiveKeys=ZCe;st.hasRequiredKeys=XCe;st.hasUniqueItems=NCe;st.isArray=BCe;st.isAtLeast=OCe;st.isAtMost=MCe;st.isBase64=zCe;st.isBoolean=ICe;st.isDate=wCe;st.isDict=QCe;st.isEnum=mCe;st.isHexColor=WCe;st.isISO8601=JCe;st.isInExclusiveRange=KCe;st.isInInclusiveRange=UCe;st.isInstanceOf=vCe;st.isInteger=HCe;st.isJSON=VCe;st.isLiteral=dCe;st.isLowerCase=YCe;st.isNegative=TCe;st.isNullable=kCe;st.isNumber=yCe;st.isObject=SCe;st.isOneOf=xCe;st.isOptional=DCe;st.isPositive=LCe;st.isString=CCe;st.isTuple=bCe;st.isUUID4=qCe;st.isUnknown=aG;st.isUpperCase=jCe;st.iso8601RegExp=Hv;st.makeCoercionFn=Bc;st.makeSetter=oG;st.makeTrait=sG;st.makeValidator=Qt;st.matchesRegExp=GCe;st.plural=ny;st.pushError=pt;st.simpleKeyRegExp=eG;st.uuid4RegExp=nG});var bc=y(Gv=>{"use strict";Object.defineProperty(Gv,"__esModule",{value:!0});var lG=va();function tme(r){if(r&&r.__esModule)return r;var e=Object.create(null);return r&&Object.keys(r).forEach(function(t){if(t!=="default"){var i=Object.getOwnPropertyDescriptor(r,t);Object.defineProperty(e,t,i.get?i:{enumerable:!0,get:function(){return r[t]}})}}),e.default=r,Object.freeze(e)}var Sd=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let t=this.constructor.schema;if(Array.isArray(t)){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(function(){return tme(ns())}),a=o(n(s()),t),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw lG.formatError("Invalid option schema",l);for(let[,g]of c)g()}else if(t!=null)throw new Error("Invalid command schema");let i=await this.execute();return typeof i<"u"?i:0}};Sd.isOption=lG.isOptionSymbol;Sd.Default=[];Gv.Command=Sd});var jv=y(vd=>{"use strict";Object.defineProperty(vd,"__esModule",{value:!0});var cG=80,Yv=Array(cG).fill("\u2501");for(let r=0;r<=24;++r)Yv[Yv.length-r]=`\x1B[38;5;${232+r}m\u2501`;var rme={header:r=>`\x1B[1m\u2501\u2501\u2501 ${r}${r.length`\x1B[1m${r}\x1B[22m`,error:r=>`\x1B[31m\x1B[1m${r}\x1B[22m\x1B[39m`,code:r=>`\x1B[36m${r}\x1B[39m`},ime={header:r=>r,bold:r=>r,error:r=>r,code:r=>r};function nme(r){let e=r.split(` -`),t=e.filter(n=>n.match(/\S/)),i=t.length>0?t.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(` -`)}function sme(r,{format:e,paragraphs:t}){return r=r.replace(/\r\n?/g,` -`),r=nme(r),r=r.replace(/^\n+|\n+$/g,""),r=r.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 - -`),r=r.replace(/\n(\n)?\n*/g,"$1"),t&&(r=r.split(/\n/).map(i=>{let n=i.match(/^\s*[*-][\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(` -`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,"g")).map((o,a)=>" ".repeat(s)+(a===0?"- ":" ")+o).join(` -`)}).join(` - -`)),r=r.replace(/(`+)((?:.|[\n])*?)\1/g,(i,n,s)=>e.code(n+s+n)),r=r.replace(/(\*\*)((?:.|[\n])*?)\1/g,(i,n,s)=>e.bold(n+s+n)),r?`${r} -`:""}vd.formatMarkdownish=sme;vd.richFormat=rme;vd.textFormat=ime});var ly=y(Ar=>{"use strict";Object.defineProperty(Ar,"__esModule",{value:!0});var lt=ry(),ay=iy();function Vi(r){lt.DEBUG&&console.log(r)}var uG={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:lt.HELP_COMMAND_INDEX};function qv(){return{nodes:[Li(),Li(),Li()]}}function gG(r){let e=qv(),t=[],i=e.nodes.length;for(let n of r){t.push(i);for(let s=0;s{if(e.has(i))return;e.add(i);let n=r.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)t(a);for(let[,{to:o}]of n.dynamics)t(o);for(let{to:o}of n.shortcuts)t(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=r.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};t(lt.NODE_INITIAL)}function hG(r,{prefix:e=""}={}){if(lt.DEBUG){Vi(`${e}Nodes are:`);for(let t=0;tl!==lt.NODE_ERRORED).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===lt.NODE_ERRORED))throw new ay.UnknownSyntaxError(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=pG(a)}if(i.length>0){Vi(" Results:");for(let s of i)Vi(` - ${s.node} -> ${JSON.stringify(s.state)}`)}else Vi(" No results");return i}function ome(r,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(r.statics,lt.END_OF_INPUT)){for(let{to:t}of r.statics[lt.END_OF_INPUT])if(t===lt.NODE_SUCCESS)return!0}return!1}function ame(r,e,t){let i=t&&e.length>0?[""]:[],n=Jv(r,e,t),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let C=r.nodes[p],w=Object.keys(C.statics);for(let B of Object.keys(C.statics)){let v=w[0];for(let{to:D,reducer:T}of C.statics[v])T==="pushPath"&&(u||l.push(v),g.push(D))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=r.nodes[l],g=ome(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==lt.END_OF_INPUT||!f.startsWith("-")&&h.some(({reducer:p})=>p==="pushPath"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===lt.NODE_ERRORED)continue;let p=IG(f,c);if(p!==null)for(let C of p)a([...i,C],l)}}return[...s].sort()}function Ame(r,e){let t=Jv(r,[...e,lt.END_OF_INPUT]);return dG(e,t.map(({state:i})=>i))}function pG(r){let e=0;for(let{state:t}of r)t.path.length>e&&(e=t.path.length);return r.filter(({state:t})=>t.path.length===e)}function dG(r,e){let t=e.filter(g=>g.selectedIndex!==null);if(t.length===0)throw new Error;let i=t.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new ay.UnknownSyntaxError(r,t.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=CG(c);if(u.length>1)throw new ay.AmbiguousSyntaxError(r,u.map(g=>g.candidateUsage));return u[0]}function CG(r){let e=[],t=[];for(let i of r)i.selectedIndex===lt.HELP_COMMAND_INDEX?t.push(i):e.push(i);return t.length>0&&e.push({...uG,path:mG(...t.map(i=>i.path)),options:t.reduce((i,n)=>i.concat(n.options),[])}),e}function mG(r,e,...t){return e===void 0?Array.from(r):mG(r.filter((i,n)=>i===e[n]),...t)}function Li(){return{dynamics:[],shortcuts:[],statics:{}}}function Wv(r){return r===lt.NODE_SUCCESS||r===lt.NODE_ERRORED}function sy(r,e=0){return{to:Wv(r.to)?r.to:r.to>2?r.to+e-2:r.to+e,reducer:r.reducer}}function EG(r,e=0){let t=Li();for(let[i,n]of r.dynamics)t.dynamics.push([i,sy(n,e)]);for(let i of r.shortcuts)t.shortcuts.push(sy(i,e));for(let[i,n]of Object.entries(r.statics))t.statics[i]=n.map(s=>sy(s,e));return t}function Ei(r,e,t,i,n){r.nodes[e].dynamics.push([t,{to:i,reducer:n}])}function Qc(r,e,t,i){r.nodes[e].shortcuts.push({to:t,reducer:i})}function xo(r,e,t,i,n){(Object.prototype.hasOwnProperty.call(r.nodes[e].statics,t)?r.nodes[e].statics[t]:r.nodes[e].statics[t]=[]).push({to:i,reducer:n})}function xd(r,e,t,i){if(Array.isArray(e)){let[n,...s]=e;return r[n](t,i,...s)}else return r[e](t,i)}function IG(r,e){let t=Array.isArray(r)?Pd[r[0]]:Pd[r];if(typeof t.suggest>"u")return null;let i=Array.isArray(r)?r.slice(1):[];return t.suggest(e,...i)}var Pd={always:()=>!0,isOptionLike:(r,e)=>!r.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(r,e)=>r.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(r,e,t,i)=>!r.ignoreOptions&&e===t,isBatchOption:(r,e,t)=>!r.ignoreOptions&<.BATCH_REGEX.test(e)&&[...e.slice(1)].every(i=>t.includes(`-${i}`)),isBoundOption:(r,e,t,i)=>{let n=e.match(lt.BINDING_REGEX);return!r.ignoreOptions&&!!n&<.OPTION_REGEX.test(n[1])&&t.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(r,e,t)=>!r.ignoreOptions&&e===`--no-${t.slice(2)}`,isHelp:(r,e)=>!r.ignoreOptions&<.HELP_REGEX.test(e),isUnsupportedOption:(r,e,t)=>!r.ignoreOptions&&e.startsWith("-")&<.OPTION_REGEX.test(e)&&!t.includes(e),isInvalidOption:(r,e)=>!r.ignoreOptions&&e.startsWith("-")&&!lt.OPTION_REGEX.test(e)};Pd.isOption.suggest=(r,e,t=!0)=>t?null:[e];var oy={setCandidateState:(r,e,t)=>({...r,...t}),setSelectedIndex:(r,e,t)=>({...r,selectedIndex:t}),pushBatch:(r,e)=>({...r,options:r.options.concat([...e.slice(1)].map(t=>({name:`-${t}`,value:!0})))}),pushBound:(r,e)=>{let[,t,i]=e.match(lt.BINDING_REGEX);return{...r,options:r.options.concat({name:t,value:i})}},pushPath:(r,e)=>({...r,path:r.path.concat(e)}),pushPositional:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!1})}),pushExtra:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:Po})}),pushTrue:(r,e,t=e)=>({...r,options:r.options.concat({name:e,value:!0})}),pushFalse:(r,e,t=e)=>({...r,options:r.options.concat({name:t,value:!1})}),pushUndefined:(r,e)=>({...r,options:r.options.concat({name:e,value:void 0})}),pushStringValue:(r,e)=>{var t;let i={...r,options:[...r.options]},n=r.options[r.options.length-1];return n.value=((t=n.value)!==null&&t!==void 0?t:[]).concat([e]),i},setStringValue:(r,e)=>{let t={...r,options:[...r.options]},i=r.options[r.options.length-1];return i.value=e,t},inhibateOptions:r=>({...r,ignoreOptions:!0}),useHelp:(r,e,t)=>{let[,,i]=e.match(lt.HELP_REGEX);return typeof i<"u"?{...r,options:[{name:"-c",value:String(t)},{name:"-i",value:i}]}:{...r,options:[{name:"-c",value:String(t)}]}},setError:(r,e,t)=>e===lt.END_OF_INPUT?{...r,errorMessage:`${t}.`}:{...r,errorMessage:`${t} ("${e}").`},setOptionArityError:(r,e)=>{let t=r.options[r.options.length-1];return{...r,errorMessage:`Not enough arguments to option ${t.name}.`}}},Po=Symbol(),Ay=class{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:i,proxy:n})}addPositional({name:e="arg",required:t=!0}={}){if(!t&&this.arity.extra===Po)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!t&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!t&&this.arity.extra!==Po?this.arity.extra.push(e):this.arity.extra!==Po&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:t=0}={}){if(this.arity.extra===Po)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let i=0;i1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Po?i.push("..."):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(" "),options:n}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=qv(),t=lt.NODE_INITIAL,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);t=ss(e,Li()),xo(e,lt.NODE_INITIAL,lt.START_OF_INPUT,t,["setCandidateState",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?"always":"isNotOptionLike",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=t;if(a.length>0){let f=ss(e,Li());Qc(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f0||!this.arity.proxy){let f=ss(e,Li());Ei(e,l,"isHelp",f,["useHelp",this.cliIndex]),xo(e,f,lt.END_OF_INPUT,lt.NODE_SUCCESS,["setSelectedIndex",lt.HELP_COMMAND_INDEX]),this.registerOptions(e,l)}this.arity.leading.length>0&&xo(e,l,lt.END_OF_INPUT,lt.NODE_ERRORED,["setError","Not enough positional arguments"]);let c=l;for(let f=0;f0||f+1!==this.arity.leading.length)&&xo(e,h,lt.END_OF_INPUT,lt.NODE_ERRORED,["setError","Not enough positional arguments"]),Ei(e,c,"isNotOptionLike",h,"pushPositional"),c=h}let u=c;if(this.arity.extra===Po||this.arity.extra.length>0){let f=ss(e,Li());if(Qc(e,c,f),this.arity.extra===Po){let h=ss(e,Li());this.arity.proxy||this.registerOptions(e,h),Ei(e,c,s,h,"pushExtraNoLimits"),Ei(e,h,s,h,"pushExtraNoLimits"),Qc(e,h,f)}else for(let h=0;h0&&xo(e,u,lt.END_OF_INPUT,lt.NODE_ERRORED,["setError","Not enough positional arguments"]);let g=u;for(let f=0;fo.length>s.length?o:s,"");if(i.arity===0)for(let s of i.names)Ei(e,t,["isOption",s,i.hidden||s!==n],t,"pushTrue"),s.startsWith("--")&&!s.startsWith("--no-")&&Ei(e,t,["isNegatedOption",s],t,["pushFalse",s]);else{let s=ss(e,Li());for(let o of i.names)Ei(e,t,["isOption",o,i.hidden||o!==n],s,"pushUndefined");for(let o=0;o=0&&eAme(i,n),suggest:(n,s)=>ame(i,n,s)}}};Ar.CliBuilder=Dd;Ar.CommandBuilder=Ay;Ar.NoLimits=Po;Ar.aggregateHelpStates=CG;Ar.cloneNode=EG;Ar.cloneTransition=sy;Ar.debug=Vi;Ar.debugMachine=hG;Ar.execute=xd;Ar.injectNode=ss;Ar.isTerminalNode=Wv;Ar.makeAnyOfMachine=gG;Ar.makeNode=Li;Ar.makeStateMachine=qv;Ar.reducers=oy;Ar.registerDynamic=Ei;Ar.registerShortcut=Qc;Ar.registerStatic=xo;Ar.runMachineInternal=Jv;Ar.selectBestState=dG;Ar.simplifyMachine=fG;Ar.suggest=IG;Ar.tests=Pd;Ar.trimSmallerBranches=pG});var yG=y(zv=>{"use strict";Object.defineProperty(zv,"__esModule",{value:!0});var lme=bc(),kd=class extends lme.Command{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){let i=new kd(t);i.path=e.path;for(let n of e.options)switch(n.name){case"-c":i.commands.push(Number(n.value));break;case"-i":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: -`),this.context.stdout.write(` -`);let t=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${t++}. `.padStart(5)}));this.context.stdout.write(` -`),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. -`)}}};zv.HelpCommand=kd});var vG=y(Vv=>{"use strict";Object.defineProperty(Vv,"__esModule",{value:!0});var cme=ry(),wG=bc(),ume=J("tty"),gme=ly(),hn=jv(),fme=yG();function hme(r){return r&&typeof r=="object"&&"default"in r?r:{default:r}}var BG=hme(ume),bG=Symbol("clipanion/errorCommand");function pme(){return process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}var OA=class{constructor({binaryLabel:e,binaryName:t="...",binaryVersion:i,enableCapture:n=!1,enableColors:s}={}){this.registrations=new Map,this.builder=new gme.CliBuilder({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=i,this.enableCapture=n,this.enableColors=s}static from(e,t={}){let i=new OA(t);for(let n of e)i.register(n);return i}register(e){var t;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c=="object"&&c!==null&&c[wG.Command.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(t=e.paths)!==null&&t!==void 0?t:n.paths;if(typeof a<"u")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:t,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case cme.HELP_COMMAND_INDEX:return fme.HelpCommand.from(n,t);default:{let{commandClass:s}=t[n.selectedIndex],o=this.registrations.get(s);if(typeof o>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[bG]=a,l}}break}}async run(e,t){var i;let n,s={...OA.defaultContext,...t},o=(i=this.enableColors)!==null&&i!==void 0?i:s.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e)}catch(c){return s.stdout.write(this.error(c,{colored:o})),1}if(n.help)return s.stdout.write(this.usage(n,{colored:o,detailed:!0})),0;n.context=s,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(c,u)=>this.error(c,u),format:c=>this.format(c),process:c=>this.process(c),run:(c,u)=>this.run(c,{...s,...u}),usage:(c,u)=>this.usage(c,u)};let a=this.enableCapture?dme(s):SG,l;try{l=await a(()=>n.validateAndExecute().catch(c=>n.catch(c).then(()=>0)))}catch(c){return s.stdout.write(this.error(c,{colored:o,command:n})),1}return l}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){let{suggest:i}=this.builder.compile();return i(e,t)}definitions({colored:e=!1}={}){let t=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage>"u")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category<"u"?hn.formatMarkdownish(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description<"u"?hn.formatMarkdownish(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details<"u"?hn.formatMarkdownish(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples<"u"?i.usage.examples.map(([f,h])=>[hn.formatMarkdownish(f,{format:this.format(e),paragraphs:!1}),h.replace(/\$0/g,this.binaryName)]):void 0;t.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return t}usage(e=null,{colored:t,detailed:i=!1,prefix:n="$ "}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage<"u";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof wG.Command?e.constructor:e,a="";if(o)if(i){let{description:l="",details:c="",examples:u=[]}=o.usage||{};l!==""&&(a+=hn.formatMarkdownish(l,{format:this.format(t),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=` -`),(c!==""||u.length>0)&&(a+=`${this.format(t).header("Usage")} -`,a+=` -`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(t).bold(n)}${g} -`,f.length>0){a+=` -`,a+=`${hn.richFormat.header("Options")} -`;let h=f.reduce((p,C)=>Math.max(p,C.definition.length),0);a+=` -`;for(let{definition:p,description:C}of f)a+=` ${this.format(t).bold(p.padEnd(h))} ${hn.formatMarkdownish(C,{format:this.format(t),paragraphs:!1})}`}if(c!==""&&(a+=` -`,a+=`${this.format(t).header("Details")} -`,a+=` -`,a+=hn.formatMarkdownish(c,{format:this.format(t),paragraphs:!0})),u.length>0){a+=` -`,a+=`${this.format(t).header("Examples")} -`;for(let[h,p]of u)a+=` -`,a+=hn.formatMarkdownish(h,{format:this.format(t),paragraphs:!1}),a+=`${p.replace(/^/m,` ${this.format(t).bold(n)}`).replace(/\$0/g,this.binaryName)} -`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(t).bold(n)}${l} -`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage>"u")continue;let p=typeof f.usage.category<"u"?hn.formatMarkdownish(f.usage.category,{format:this.format(t),paragraphs:!1}):null,C=l.get(p);typeof C>"u"&&l.set(p,C=[]);let{usage:w}=this.getUsageByIndex(h);C.push({commandClass:f,usage:w})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,"en",{usage:"sort",caseFirst:"upper"})),u=typeof this.binaryLabel<"u",g=typeof this.binaryVersion<"u";u||g?(u&&g?a+=`${this.format(t).header(`${this.binaryLabel} - ${this.binaryVersion}`)} - -`:u?a+=`${this.format(t).header(`${this.binaryLabel}`)} -`:a+=`${this.format(t).header(`${this.binaryVersion}`)} -`,a+=` ${this.format(t).bold(n)}${this.binaryName} -`):a+=`${this.format(t).bold(n)}${this.binaryName} -`;for(let f of c){let h=l.get(f).slice().sort((C,w)=>C.usage.localeCompare(w.usage,"en",{usage:"sort",caseFirst:"upper"})),p=f!==null?f.trim():"General commands";a+=` -`,a+=`${this.format(t).header(`${p}`)} -`;for(let{commandClass:C,usage:w}of h){let B=C.usage.description||"undocumented";a+=` -`,a+=` ${this.format(t).bold(w)} -`,a+=` ${hn.formatMarkdownish(B,{format:this.format(t),paragraphs:!1})}`}}a+=` -`,a+=hn.formatMarkdownish("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(t),paragraphs:!0})}return a}error(e,t){var i,{colored:n,command:s=(i=e[bG])!==null&&i!==void 0?i:null}=t===void 0?{}:t;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o="",a=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");a==="Error"&&(a="Internal Error"),o+=`${this.format(n).error(a)}: ${e.message} -`;let l=e.clipanion;return typeof l<"u"?l.type==="usage"&&(o+=` -`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\n/,"")} -`),o}format(e){var t;return((t=e!=null?e:this.enableColors)!==null&&t!==void 0?t:OA.defaultContext.colorDepth>1)?hn.richFormat:hn.textFormat}getUsageByRegistration(e,t){let i=this.registrations.get(e);if(typeof i>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(i.index,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}};OA.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:"getColorDepth"in BG.default.WriteStream.prototype?BG.default.WriteStream.prototype.getColorDepth():pme()};var QG;function dme(r){let e=QG;if(typeof e>"u"){if(r.stdout===process.stdout&&r.stderr===process.stderr)return SG;let{AsyncLocalStorage:t}=J("async_hooks");e=QG=new t;let i=process.stdout._write;process.stdout._write=function(s,o,a){let l=e.getStore();return typeof l>"u"?i.call(this,s,o,a):l.stdout.write(s,o,a)};let n=process.stderr._write;process.stderr._write=function(s,o,a){let l=e.getStore();return typeof l>"u"?n.call(this,s,o,a):l.stderr.write(s,o,a)}}return t=>e.run(r,t)}function SG(r){return r()}Vv.Cli=OA});var xG=y(Xv=>{"use strict";Object.defineProperty(Xv,"__esModule",{value:!0});var Cme=bc(),cy=class extends Cme.Command{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} -`)}};cy.paths=[["--clipanion=definitions"]];Xv.DefinitionsCommand=cy});var PG=y(_v=>{"use strict";Object.defineProperty(_v,"__esModule",{value:!0});var mme=bc(),uy=class extends mme.Command{async execute(){this.context.stdout.write(this.cli.usage())}};uy.paths=[["-h"],["--help"]];_v.HelpCommand=uy});var DG=y(Zv=>{"use strict";Object.defineProperty(Zv,"__esModule",{value:!0});var Eme=bc(),gy=class extends Eme.Command{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} -`)}};gy.paths=[["-v"],["--version"]];Zv.VersionCommand=gy});var kG=y(Rd=>{"use strict";Object.defineProperty(Rd,"__esModule",{value:!0});var Ime=xG(),yme=PG(),wme=DG();Rd.DefinitionsCommand=Ime.DefinitionsCommand;Rd.HelpCommand=yme.HelpCommand;Rd.VersionCommand=wme.VersionCommand});var FG=y($v=>{"use strict";Object.defineProperty($v,"__esModule",{value:!0});var RG=va();function Bme(r,e,t){let[i,n]=RG.rerouteArguments(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(","),a=new Set(o);return RG.makeCommandOption({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i<"u"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}$v.Array=Bme});var TG=y(ex=>{"use strict";Object.defineProperty(ex,"__esModule",{value:!0});var NG=va();function bme(r,e,t){let[i,n]=NG.rerouteArguments(e,t!=null?t:{}),s=r.split(","),o=new Set(s);return NG.makeCommandOption({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}ex.Boolean=bme});var OG=y(tx=>{"use strict";Object.defineProperty(tx,"__esModule",{value:!0});var LG=va();function Qme(r,e,t){let[i,n]=LG.rerouteArguments(e,t!=null?t:{}),s=r.split(","),o=new Set(s);return LG.makeCommandOption({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}tx.Counter=Qme});var MG=y(rx=>{"use strict";Object.defineProperty(rx,"__esModule",{value:!0});var Sme=va();function vme(r={}){return Sme.makeCommandOption({definition(e,t){var i;e.addProxy({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){return i.positionals.map(({value:n})=>n)}})}rx.Proxy=vme});var UG=y(ix=>{"use strict";Object.defineProperty(ix,"__esModule",{value:!0});var xme=va(),Pme=ly();function Dme(r={}){return xme.makeCommandOption({definition(e,t){var i;e.addRest({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){let n=o=>{let a=i.positionals[o];return a.extra===Pme.NoLimits||a.extra===!1&&oo)}})}ix.Rest=Dme});var KG=y(nx=>{"use strict";Object.defineProperty(nx,"__esModule",{value:!0});var Fd=va(),kme=ly();function Rme(r,e,t){let[i,n]=Fd.rerouteArguments(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(","),a=new Set(o);return Fd.makeCommandOption({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f=="string"?Fd.applyValidator(g!=null?g:c,f,n.validator):f}})}function Fme(r={}){let{required:e=!0}=r;return Fd.makeCommandOption({definition(t,i){var n;t.addPositional({name:(n=r.name)!==null&&n!==void 0?n:i,required:r.required})},transformer(t,i,n){var s;for(let o=0;o{"use strict";Object.defineProperty(pn,"__esModule",{value:!0});var lf=va(),Tme=FG(),Lme=TG(),Ome=OG(),Mme=MG(),Ume=UG(),Kme=KG();pn.applyValidator=lf.applyValidator;pn.cleanValidationError=lf.cleanValidationError;pn.formatError=lf.formatError;pn.isOptionSymbol=lf.isOptionSymbol;pn.makeCommandOption=lf.makeCommandOption;pn.rerouteArguments=lf.rerouteArguments;pn.Array=Tme.Array;pn.Boolean=Lme.Boolean;pn.Counter=Ome.Counter;pn.Proxy=Mme.Proxy;pn.Rest=Ume.Rest;pn.String=Kme.String});var Xe=y(MA=>{"use strict";Object.defineProperty(MA,"__esModule",{value:!0});var Hme=iy(),Gme=bc(),Yme=jv(),jme=vG(),qme=kG(),Jme=HG();MA.UsageError=Hme.UsageError;MA.Command=Gme.Command;MA.formatMarkdownish=Yme.formatMarkdownish;MA.Cli=jme.Cli;MA.Builtins=qme;MA.Option=Jme});var YG=y((J$e,GG)=>{"use strict";GG.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var cf=y((W$e,sx)=>{"use strict";var Wme=YG(),jG=r=>{if(r<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=Wme(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{tnew Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};sx.exports=jG;sx.exports.default=jG});var Nd=y((V$e,qG)=>{var zme="2.0.0",Vme=Number.MAX_SAFE_INTEGER||9007199254740991,Xme=16;qG.exports={SEMVER_SPEC_VERSION:zme,MAX_LENGTH:256,MAX_SAFE_INTEGER:Vme,MAX_SAFE_COMPONENT_LENGTH:Xme}});var Td=y((X$e,JG)=>{var _me=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error("SEMVER",...r):()=>{};JG.exports=_me});var Sc=y((KA,WG)=>{var{MAX_SAFE_COMPONENT_LENGTH:ox}=Nd(),Zme=Td();KA=WG.exports={};var $me=KA.re=[],_e=KA.src=[],Ze=KA.t={},eEe=0,St=(r,e,t)=>{let i=eEe++;Zme(i,e),Ze[r]=i,_e[i]=e,$me[i]=new RegExp(e,t?"g":void 0)};St("NUMERICIDENTIFIER","0|[1-9]\\d*");St("NUMERICIDENTIFIERLOOSE","[0-9]+");St("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*");St("MAINVERSION",`(${_e[Ze.NUMERICIDENTIFIER]})\\.(${_e[Ze.NUMERICIDENTIFIER]})\\.(${_e[Ze.NUMERICIDENTIFIER]})`);St("MAINVERSIONLOOSE",`(${_e[Ze.NUMERICIDENTIFIERLOOSE]})\\.(${_e[Ze.NUMERICIDENTIFIERLOOSE]})\\.(${_e[Ze.NUMERICIDENTIFIERLOOSE]})`);St("PRERELEASEIDENTIFIER",`(?:${_e[Ze.NUMERICIDENTIFIER]}|${_e[Ze.NONNUMERICIDENTIFIER]})`);St("PRERELEASEIDENTIFIERLOOSE",`(?:${_e[Ze.NUMERICIDENTIFIERLOOSE]}|${_e[Ze.NONNUMERICIDENTIFIER]})`);St("PRERELEASE",`(?:-(${_e[Ze.PRERELEASEIDENTIFIER]}(?:\\.${_e[Ze.PRERELEASEIDENTIFIER]})*))`);St("PRERELEASELOOSE",`(?:-?(${_e[Ze.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${_e[Ze.PRERELEASEIDENTIFIERLOOSE]})*))`);St("BUILDIDENTIFIER","[0-9A-Za-z-]+");St("BUILD",`(?:\\+(${_e[Ze.BUILDIDENTIFIER]}(?:\\.${_e[Ze.BUILDIDENTIFIER]})*))`);St("FULLPLAIN",`v?${_e[Ze.MAINVERSION]}${_e[Ze.PRERELEASE]}?${_e[Ze.BUILD]}?`);St("FULL",`^${_e[Ze.FULLPLAIN]}$`);St("LOOSEPLAIN",`[v=\\s]*${_e[Ze.MAINVERSIONLOOSE]}${_e[Ze.PRERELEASELOOSE]}?${_e[Ze.BUILD]}?`);St("LOOSE",`^${_e[Ze.LOOSEPLAIN]}$`);St("GTLT","((?:<|>)?=?)");St("XRANGEIDENTIFIERLOOSE",`${_e[Ze.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);St("XRANGEIDENTIFIER",`${_e[Ze.NUMERICIDENTIFIER]}|x|X|\\*`);St("XRANGEPLAIN",`[v=\\s]*(${_e[Ze.XRANGEIDENTIFIER]})(?:\\.(${_e[Ze.XRANGEIDENTIFIER]})(?:\\.(${_e[Ze.XRANGEIDENTIFIER]})(?:${_e[Ze.PRERELEASE]})?${_e[Ze.BUILD]}?)?)?`);St("XRANGEPLAINLOOSE",`[v=\\s]*(${_e[Ze.XRANGEIDENTIFIERLOOSE]})(?:\\.(${_e[Ze.XRANGEIDENTIFIERLOOSE]})(?:\\.(${_e[Ze.XRANGEIDENTIFIERLOOSE]})(?:${_e[Ze.PRERELEASELOOSE]})?${_e[Ze.BUILD]}?)?)?`);St("XRANGE",`^${_e[Ze.GTLT]}\\s*${_e[Ze.XRANGEPLAIN]}$`);St("XRANGELOOSE",`^${_e[Ze.GTLT]}\\s*${_e[Ze.XRANGEPLAINLOOSE]}$`);St("COERCE",`(^|[^\\d])(\\d{1,${ox}})(?:\\.(\\d{1,${ox}}))?(?:\\.(\\d{1,${ox}}))?(?:$|[^\\d])`);St("COERCERTL",_e[Ze.COERCE],!0);St("LONETILDE","(?:~>?)");St("TILDETRIM",`(\\s*)${_e[Ze.LONETILDE]}\\s+`,!0);KA.tildeTrimReplace="$1~";St("TILDE",`^${_e[Ze.LONETILDE]}${_e[Ze.XRANGEPLAIN]}$`);St("TILDELOOSE",`^${_e[Ze.LONETILDE]}${_e[Ze.XRANGEPLAINLOOSE]}$`);St("LONECARET","(?:\\^)");St("CARETTRIM",`(\\s*)${_e[Ze.LONECARET]}\\s+`,!0);KA.caretTrimReplace="$1^";St("CARET",`^${_e[Ze.LONECARET]}${_e[Ze.XRANGEPLAIN]}$`);St("CARETLOOSE",`^${_e[Ze.LONECARET]}${_e[Ze.XRANGEPLAINLOOSE]}$`);St("COMPARATORLOOSE",`^${_e[Ze.GTLT]}\\s*(${_e[Ze.LOOSEPLAIN]})$|^$`);St("COMPARATOR",`^${_e[Ze.GTLT]}\\s*(${_e[Ze.FULLPLAIN]})$|^$`);St("COMPARATORTRIM",`(\\s*)${_e[Ze.GTLT]}\\s*(${_e[Ze.LOOSEPLAIN]}|${_e[Ze.XRANGEPLAIN]})`,!0);KA.comparatorTrimReplace="$1$2$3";St("HYPHENRANGE",`^\\s*(${_e[Ze.XRANGEPLAIN]})\\s+-\\s+(${_e[Ze.XRANGEPLAIN]})\\s*$`);St("HYPHENRANGELOOSE",`^\\s*(${_e[Ze.XRANGEPLAINLOOSE]})\\s+-\\s+(${_e[Ze.XRANGEPLAINLOOSE]})\\s*$`);St("STAR","(<|>)?=?\\s*\\*");St("GTE0","^\\s*>=\\s*0.0.0\\s*$");St("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")});var Ld=y((_$e,zG)=>{var tEe=["includePrerelease","loose","rtl"],rEe=r=>r?typeof r!="object"?{loose:!0}:tEe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};zG.exports=rEe});var hy=y((Z$e,_G)=>{var VG=/^[0-9]+$/,XG=(r,e)=>{let t=VG.test(r),i=VG.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:rXG(e,r);_G.exports={compareIdentifiers:XG,rcompareIdentifiers:iEe}});var Oi=y(($$e,tY)=>{var py=Td(),{MAX_LENGTH:ZG,MAX_SAFE_INTEGER:dy}=Nd(),{re:$G,t:eY}=Sc(),nEe=Ld(),{compareIdentifiers:Od}=hy(),Kn=class{constructor(e,t){if(t=nEe(t),e instanceof Kn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid Version: ${e}`);if(e.length>ZG)throw new TypeError(`version is longer than ${ZG} characters`);py("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?$G[eY.LOOSE]:$G[eY.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>dy||this.major<0)throw new TypeError("Invalid major version");if(this.minor>dy||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>dy||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s=0;)typeof this.prerelease[i]=="number"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};tY.exports=Kn});var vc=y((eet,sY)=>{var{MAX_LENGTH:sEe}=Nd(),{re:rY,t:iY}=Sc(),nY=Oi(),oEe=Ld(),aEe=(r,e)=>{if(e=oEe(e),r instanceof nY)return r;if(typeof r!="string"||r.length>sEe||!(e.loose?rY[iY.LOOSE]:rY[iY.FULL]).test(r))return null;try{return new nY(r,e)}catch{return null}};sY.exports=aEe});var aY=y((tet,oY)=>{var AEe=vc(),lEe=(r,e)=>{let t=AEe(r,e);return t?t.version:null};oY.exports=lEe});var lY=y((ret,AY)=>{var cEe=vc(),uEe=(r,e)=>{let t=cEe(r.trim().replace(/^[=v]+/,""),e);return t?t.version:null};AY.exports=uEe});var uY=y((iet,cY)=>{var gEe=Oi(),fEe=(r,e,t,i)=>{typeof t=="string"&&(i=t,t=void 0);try{return new gEe(r,t).inc(e,i).version}catch{return null}};cY.exports=fEe});var os=y((net,fY)=>{var gY=Oi(),hEe=(r,e,t)=>new gY(r,t).compare(new gY(e,t));fY.exports=hEe});var Cy=y((set,hY)=>{var pEe=os(),dEe=(r,e,t)=>pEe(r,e,t)===0;hY.exports=dEe});var CY=y((oet,dY)=>{var pY=vc(),CEe=Cy(),mEe=(r,e)=>{if(CEe(r,e))return null;{let t=pY(r),i=pY(e),n=t.prerelease.length||i.prerelease.length,s=n?"pre":"",o=n?"prerelease":"";for(let a in t)if((a==="major"||a==="minor"||a==="patch")&&t[a]!==i[a])return s+a;return o}};dY.exports=mEe});var EY=y((aet,mY)=>{var EEe=Oi(),IEe=(r,e)=>new EEe(r,e).major;mY.exports=IEe});var yY=y((Aet,IY)=>{var yEe=Oi(),wEe=(r,e)=>new yEe(r,e).minor;IY.exports=wEe});var BY=y((cet,wY)=>{var BEe=Oi(),bEe=(r,e)=>new BEe(r,e).patch;wY.exports=bEe});var QY=y((uet,bY)=>{var QEe=vc(),SEe=(r,e)=>{let t=QEe(r,e);return t&&t.prerelease.length?t.prerelease:null};bY.exports=SEe});var vY=y((get,SY)=>{var vEe=os(),xEe=(r,e,t)=>vEe(e,r,t);SY.exports=xEe});var PY=y((fet,xY)=>{var PEe=os(),DEe=(r,e)=>PEe(r,e,!0);xY.exports=DEe});var my=y((het,kY)=>{var DY=Oi(),kEe=(r,e,t)=>{let i=new DY(r,t),n=new DY(e,t);return i.compare(n)||i.compareBuild(n)};kY.exports=kEe});var FY=y((pet,RY)=>{var REe=my(),FEe=(r,e)=>r.sort((t,i)=>REe(t,i,e));RY.exports=FEe});var TY=y((det,NY)=>{var NEe=my(),TEe=(r,e)=>r.sort((t,i)=>NEe(i,t,e));NY.exports=TEe});var Md=y((Cet,LY)=>{var LEe=os(),OEe=(r,e,t)=>LEe(r,e,t)>0;LY.exports=OEe});var Ey=y((met,OY)=>{var MEe=os(),UEe=(r,e,t)=>MEe(r,e,t)<0;OY.exports=UEe});var ax=y((Eet,MY)=>{var KEe=os(),HEe=(r,e,t)=>KEe(r,e,t)!==0;MY.exports=HEe});var Iy=y((Iet,UY)=>{var GEe=os(),YEe=(r,e,t)=>GEe(r,e,t)>=0;UY.exports=YEe});var yy=y((yet,KY)=>{var jEe=os(),qEe=(r,e,t)=>jEe(r,e,t)<=0;KY.exports=qEe});var Ax=y((wet,HY)=>{var JEe=Cy(),WEe=ax(),zEe=Md(),VEe=Iy(),XEe=Ey(),_Ee=yy(),ZEe=(r,e,t,i)=>{switch(e){case"===":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r===t;case"!==":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r!==t;case"":case"=":case"==":return JEe(r,t,i);case"!=":return WEe(r,t,i);case">":return zEe(r,t,i);case">=":return VEe(r,t,i);case"<":return XEe(r,t,i);case"<=":return _Ee(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};HY.exports=ZEe});var YY=y((Bet,GY)=>{var $Ee=Oi(),eIe=vc(),{re:wy,t:By}=Sc(),tIe=(r,e)=>{if(r instanceof $Ee)return r;if(typeof r=="number"&&(r=String(r)),typeof r!="string")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(wy[By.COERCE]);else{let i;for(;(i=wy[By.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),wy[By.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;wy[By.COERCERTL].lastIndex=-1}return t===null?null:eIe(`${t[2]}.${t[3]||"0"}.${t[4]||"0"}`,e)};GY.exports=tIe});var qY=y((bet,jY)=>{"use strict";jY.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var Ud=y((Qet,JY)=>{"use strict";JY.exports=Ht;Ht.Node=xc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach=="function")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(ethis.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&ithis.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i{"use strict";var sIe=Ud(),Pc=Symbol("max"),Pa=Symbol("length"),uf=Symbol("lengthCalculator"),Hd=Symbol("allowStale"),Dc=Symbol("maxAge"),xa=Symbol("dispose"),WY=Symbol("noDisposeOnSet"),Ii=Symbol("lruList"),zs=Symbol("cache"),VY=Symbol("updateAgeOnGet"),lx=()=>1,ux=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let t=this[Pc]=e.max||1/0,i=e.length||lx;if(this[uf]=typeof i!="function"?lx:i,this[Hd]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[Dc]=e.maxAge||0,this[xa]=e.dispose,this[WY]=e.noDisposeOnSet||!1,this[VY]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[Pc]=e||1/0,Kd(this)}get max(){return this[Pc]}set allowStale(e){this[Hd]=!!e}get allowStale(){return this[Hd]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[Dc]=e,Kd(this)}get maxAge(){return this[Dc]}set lengthCalculator(e){typeof e!="function"&&(e=lx),e!==this[uf]&&(this[uf]=e,this[Pa]=0,this[Ii].forEach(t=>{t.length=this[uf](t.value,t.key),this[Pa]+=t.length})),Kd(this)}get lengthCalculator(){return this[uf]}get length(){return this[Pa]}get itemCount(){return this[Ii].length}rforEach(e,t){t=t||this;for(let i=this[Ii].tail;i!==null;){let n=i.prev;zY(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[Ii].head;i!==null;){let n=i.next;zY(this,e,i,t),i=n}}keys(){return this[Ii].toArray().map(e=>e.key)}values(){return this[Ii].toArray().map(e=>e.value)}reset(){this[xa]&&this[Ii]&&this[Ii].length&&this[Ii].forEach(e=>this[xa](e.key,e.value)),this[zs]=new Map,this[Ii]=new sIe,this[Pa]=0}dump(){return this[Ii].map(e=>by(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[Ii]}set(e,t,i){if(i=i||this[Dc],i&&typeof i!="number")throw new TypeError("maxAge must be a number");let n=i?Date.now():0,s=this[uf](t,e);if(this[zs].has(e)){if(s>this[Pc])return gf(this,this[zs].get(e)),!1;let l=this[zs].get(e).value;return this[xa]&&(this[WY]||this[xa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[Pa]+=s-l.length,l.length=s,this.get(e),Kd(this),!0}let o=new gx(e,t,s,n,i);return o.length>this[Pc]?(this[xa]&&this[xa](e,t),!1):(this[Pa]+=o.length,this[Ii].unshift(o),this[zs].set(e,this[Ii].head),Kd(this),!0)}has(e){if(!this[zs].has(e))return!1;let t=this[zs].get(e).value;return!by(this,t)}get(e){return cx(this,e,!0)}peek(e){return cx(this,e,!1)}pop(){let e=this[Ii].tail;return e?(gf(this,e),e.value):null}del(e){gf(this,this[zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[zs].forEach((e,t)=>cx(this,t,!1))}},cx=(r,e,t)=>{let i=r[zs].get(e);if(i){let n=i.value;if(by(r,n)){if(gf(r,i),!r[Hd])return}else t&&(r[VY]&&(i.value.now=Date.now()),r[Ii].unshiftNode(i));return n.value}},by=(r,e)=>{if(!e||!e.maxAge&&!r[Dc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[Dc]&&t>r[Dc]},Kd=r=>{if(r[Pa]>r[Pc])for(let e=r[Ii].tail;r[Pa]>r[Pc]&&e!==null;){let t=e.prev;gf(r,e),e=t}},gf=(r,e)=>{if(e){let t=e.value;r[xa]&&r[xa](t.key,t.value),r[Pa]-=t.length,r[zs].delete(t.key),r[Ii].removeNode(e)}},gx=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},zY=(r,e,t,i)=>{let n=t.value;by(r,n)&&(gf(r,t),r[Hd]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};XY.exports=ux});var as=y((xet,tj)=>{var kc=class{constructor(e,t){if(t=aIe(t),e instanceof kc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new kc(e.raw,t);if(e instanceof fx)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!$Y(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&gIe(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(",")}:${e}`,n=ZY.get(i);if(n)return n;let s=this.options.loose,o=s?Mi[Qi.HYPHENRANGELOOSE]:Mi[Qi.HYPHENRANGE];e=e.replace(o,wIe(this.options.includePrerelease)),jr("hyphen replace",e),e=e.replace(Mi[Qi.COMPARATORTRIM],lIe),jr("comparator trim",e,Mi[Qi.COMPARATORTRIM]),e=e.replace(Mi[Qi.TILDETRIM],cIe),e=e.replace(Mi[Qi.CARETTRIM],uIe),e=e.split(/\s+/).join(" ");let a=s?Mi[Qi.COMPARATORLOOSE]:Mi[Qi.COMPARATOR],l=e.split(" ").map(f=>fIe(f,this.options)).join(" ").split(/\s+/).map(f=>yIe(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new fx(f,this.options)),c=l.length,u=new Map;for(let f of l){if($Y(f))return[f];u.set(f.value,f)}u.size>1&&u.has("")&&u.delete("");let g=[...u.values()];return ZY.set(i,g),g}intersects(e,t){if(!(e instanceof kc))throw new TypeError("a Range is required");return this.set.some(i=>ej(i,t)&&e.set.some(n=>ej(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new AIe(e,this.options)}catch{return!1}for(let t=0;tr.value==="<0.0.0-0",gIe=r=>r.value==="",ej=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},fIe=(r,e)=>(jr("comp",r,e),r=dIe(r,e),jr("caret",r),r=hIe(r,e),jr("tildes",r),r=mIe(r,e),jr("xrange",r),r=IIe(r,e),jr("stars",r),r),Xi=r=>!r||r.toLowerCase()==="x"||r==="*",hIe=(r,e)=>r.trim().split(/\s+/).map(t=>pIe(t,e)).join(" "),pIe=(r,e)=>{let t=e.loose?Mi[Qi.TILDELOOSE]:Mi[Qi.TILDE];return r.replace(t,(i,n,s,o,a)=>{jr("tilde",r,i,n,s,o,a);let l;return Xi(n)?l="":Xi(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:Xi(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(jr("replaceTilde pr",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,jr("tilde return",l),l})},dIe=(r,e)=>r.trim().split(/\s+/).map(t=>CIe(t,e)).join(" "),CIe=(r,e)=>{jr("caret",r,e);let t=e.loose?Mi[Qi.CARETLOOSE]:Mi[Qi.CARET],i=e.includePrerelease?"-0":"";return r.replace(t,(n,s,o,a,l)=>{jr("caret",r,n,s,o,a,l);let c;return Xi(s)?c="":Xi(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:Xi(a)?s==="0"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(jr("replaceCaret pr",l),s==="0"?o==="0"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(jr("no pr"),s==="0"?o==="0"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),jr("caret return",c),c})},mIe=(r,e)=>(jr("replaceXRanges",r,e),r.split(/\s+/).map(t=>EIe(t,e)).join(" ")),EIe=(r,e)=>{r=r.trim();let t=e.loose?Mi[Qi.XRANGELOOSE]:Mi[Qi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{jr("xRange",r,i,n,s,o,a,l);let c=Xi(s),u=c||Xi(o),g=u||Xi(a),f=g;return n==="="&&f&&(n=""),l=e.includePrerelease?"-0":"",c?n===">"||n==="<"?i="<0.0.0-0":i="*":n&&f?(u&&(o=0),a=0,n===">"?(n=">=",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n==="<="&&(n="<",u?s=+s+1:o=+o+1),n==="<"&&(l="-0"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),jr("xRange return",i),i})},IIe=(r,e)=>(jr("replaceStars",r,e),r.trim().replace(Mi[Qi.STAR],"")),yIe=(r,e)=>(jr("replaceGTE0",r,e),r.trim().replace(Mi[e.includePrerelease?Qi.GTE0PRE:Qi.GTE0],"")),wIe=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>(Xi(i)?t="":Xi(n)?t=`>=${i}.0.0${r?"-0":""}`:Xi(s)?t=`>=${i}.${n}.0${r?"-0":""}`:o?t=`>=${t}`:t=`>=${t}${r?"-0":""}`,Xi(c)?l="":Xi(u)?l=`<${+c+1}.0.0-0`:Xi(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),BIe=(r,e,t)=>{for(let i=0;i0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Gd=y((Pet,oj)=>{var Yd=Symbol("SemVer ANY"),ff=class{static get ANY(){return Yd}constructor(e,t){if(t=bIe(t),e instanceof ff){if(e.loose===!!t.loose)return e;e=e.value}px("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Yd?this.value="":this.value=this.operator+this.semver.version,px("comp",this)}parse(e){let t=this.options.loose?rj[ij.COMPARATORLOOSE]:rj[ij.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:"",this.operator==="="&&(this.operator=""),i[2]?this.semver=new nj(i[2],this.options.loose):this.semver=Yd}toString(){return this.value}test(e){if(px("Comparator.test",e,this.options.loose),this.semver===Yd||e===Yd)return!0;if(typeof e=="string")try{e=new nj(e,this.options)}catch{return!1}return hx(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof ff))throw new TypeError("a Comparator is required");if((!t||typeof t!="object")&&(t={loose:!!t,includePrerelease:!1}),this.operator==="")return this.value===""?!0:new sj(e.value,t).test(this.value);if(e.operator==="")return e.value===""?!0:new sj(this.value,t).test(e.semver);let i=(this.operator===">="||this.operator===">")&&(e.operator===">="||e.operator===">"),n=(this.operator==="<="||this.operator==="<")&&(e.operator==="<="||e.operator==="<"),s=this.semver.version===e.semver.version,o=(this.operator===">="||this.operator==="<=")&&(e.operator===">="||e.operator==="<="),a=hx(this.semver,"<",e.semver,t)&&(this.operator===">="||this.operator===">")&&(e.operator==="<="||e.operator==="<"),l=hx(this.semver,">",e.semver,t)&&(this.operator==="<="||this.operator==="<")&&(e.operator===">="||e.operator===">");return i||n||s&&o||a||l}};oj.exports=ff;var bIe=Ld(),{re:rj,t:ij}=Sc(),hx=Ax(),px=Td(),nj=Oi(),sj=as()});var jd=y((Det,aj)=>{var QIe=as(),SIe=(r,e,t)=>{try{e=new QIe(e,t)}catch{return!1}return e.test(r)};aj.exports=SIe});var lj=y((ket,Aj)=>{var vIe=as(),xIe=(r,e)=>new vIe(r,e).set.map(t=>t.map(i=>i.value).join(" ").trim().split(" "));Aj.exports=xIe});var uj=y((Ret,cj)=>{var PIe=Oi(),DIe=as(),kIe=(r,e,t)=>{let i=null,n=null,s=null;try{s=new DIe(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new PIe(i,t))}),i};cj.exports=kIe});var fj=y((Fet,gj)=>{var RIe=Oi(),FIe=as(),NIe=(r,e,t)=>{let i=null,n=null,s=null;try{s=new FIe(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new RIe(i,t))}),i};gj.exports=NIe});var dj=y((Net,pj)=>{var dx=Oi(),TIe=as(),hj=Md(),LIe=(r,e)=>{r=new TIe(r,e);let t=new dx("0.0.0");if(r.test(t)||(t=new dx("0.0.0-0"),r.test(t)))return t;t=null;for(let i=0;i{let a=new dx(o.semver.version);switch(o.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!s||hj(a,s))&&(s=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||hj(t,s))&&(t=s)}return t&&r.test(t)?t:null};pj.exports=LIe});var mj=y((Tet,Cj)=>{var OIe=as(),MIe=(r,e)=>{try{return new OIe(r,e).range||"*"}catch{return null}};Cj.exports=MIe});var Qy=y((Let,wj)=>{var UIe=Oi(),yj=Gd(),{ANY:KIe}=yj,HIe=as(),GIe=jd(),Ej=Md(),Ij=Ey(),YIe=yy(),jIe=Iy(),qIe=(r,e,t,i)=>{r=new UIe(r,i),e=new HIe(e,i);let n,s,o,a,l;switch(t){case">":n=Ej,s=YIe,o=Ij,a=">",l=">=";break;case"<":n=Ij,s=jIe,o=Ej,a="<",l="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(GIe(r,e,i))return!1;for(let c=0;c{h.semver===KIe&&(h=new yj(">=0.0.0")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};wj.exports=qIe});var bj=y((Oet,Bj)=>{var JIe=Qy(),WIe=(r,e,t)=>JIe(r,e,">",t);Bj.exports=WIe});var Sj=y((Met,Qj)=>{var zIe=Qy(),VIe=(r,e,t)=>zIe(r,e,"<",t);Qj.exports=VIe});var Pj=y((Uet,xj)=>{var vj=as(),XIe=(r,e,t)=>(r=new vj(r,t),e=new vj(e,t),r.intersects(e));xj.exports=XIe});var kj=y((Ket,Dj)=>{var _Ie=jd(),ZIe=os();Dj.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>ZIe(u,g,t));for(let u of o)_Ie(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push("*"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return l.length{var Rj=as(),Sy=Gd(),{ANY:Cx}=Sy,qd=jd(),mx=os(),$Ie=(r,e,t={})=>{if(r===e)return!0;r=new Rj(r,t),e=new Rj(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=eye(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},eye=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===Cx){if(e.length===1&&e[0].semver===Cx)return!0;t.includePrerelease?r=[new Sy(">=0.0.0-0")]:r=[new Sy(">=0.0.0")]}if(e.length===1&&e[0].semver===Cx){if(t.includePrerelease)return!0;e=[new Sy(">=0.0.0")]}let i=new Set,n,s;for(let h of r)h.operator===">"||h.operator===">="?n=Fj(n,h,t):h.operator==="<"||h.operator==="<="?s=Nj(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=mx(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==">="||s.operator!=="<="))return null}for(let h of i){if(n&&!qd(h,String(n),t)||s&&!qd(h,String(s),t))return null;for(let p of e)if(!qd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator==="<"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===">"||h.operator===">=",c=c||h.operator==="<"||h.operator==="<=",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===">"||h.operator===">="){if(a=Fj(n,h,t),a===h&&a!==n)return!1}else if(n.operator===">="&&!qd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator==="<"||h.operator==="<="){if(l=Nj(s,h,t),l===h&&l!==s)return!1}else if(s.operator==="<="&&!qd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},Fj=(r,e,t)=>{if(!r)return e;let i=mx(r.semver,e.semver,t);return i>0?r:i<0||e.operator===">"&&r.operator===">="?e:r},Nj=(r,e,t)=>{if(!r)return e;let i=mx(r.semver,e.semver,t);return i<0?r:i>0||e.operator==="<"&&r.operator==="<="?e:r};Tj.exports=$Ie});var $r=y((Get,Oj)=>{var Ex=Sc();Oj.exports={re:Ex.re,src:Ex.src,tokens:Ex.t,SEMVER_SPEC_VERSION:Nd().SEMVER_SPEC_VERSION,SemVer:Oi(),compareIdentifiers:hy().compareIdentifiers,rcompareIdentifiers:hy().rcompareIdentifiers,parse:vc(),valid:aY(),clean:lY(),inc:uY(),diff:CY(),major:EY(),minor:yY(),patch:BY(),prerelease:QY(),compare:os(),rcompare:vY(),compareLoose:PY(),compareBuild:my(),sort:FY(),rsort:TY(),gt:Md(),lt:Ey(),eq:Cy(),neq:ax(),gte:Iy(),lte:yy(),cmp:Ax(),coerce:YY(),Comparator:Gd(),Range:as(),satisfies:jd(),toComparators:lj(),maxSatisfying:uj(),minSatisfying:fj(),minVersion:dj(),validRange:mj(),outside:Qy(),gtr:bj(),ltr:Sj(),intersects:Pj(),simplifyRange:kj(),subset:Lj()}});var Ix=y(vy=>{"use strict";Object.defineProperty(vy,"__esModule",{value:!0});vy.VERSION=void 0;vy.VERSION="9.1.0"});var Gt=y((exports,module)=>{"use strict";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i{(function(r,e){typeof define=="function"&&define.amd?define([],e):typeof xy=="object"&&xy.exports?xy.exports=e():r.regexpToAst=e()})(typeof self<"u"?self:Mj,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar("/");var C=this.disjunction();this.consumeChar("/");for(var w={type:"Flags",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case"g":o(w,"global");break;case"i":o(w,"ignoreCase");break;case"m":o(w,"multiLine");break;case"u":o(w,"unicode");break;case"y":o(w,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:w,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),p.push(this.alternative());return{type:"Disjunction",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:"Alternative",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(p)};case"$":return{type:"EndAnchor",loc:this.loc(p)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(p)};case"B":return{type:"NonWordBoundary",loc:this.loc(p)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");var C;switch(this.popChar()){case"=":C="Lookahead";break;case"!":C="NegativeLookahead";break}a(C);var w=this.disjunction();return this.consumeChar(")"),{type:C,value:w,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,w=this.idx;switch(this.popChar()){case"*":C={atLeast:0,atMost:1/0};break;case"+":C={atLeast:1,atMost:1/0};break;case"?":C={atLeast:0,atMost:1};break;case"{":var B=this.integerIncludingZero();switch(this.popChar()){case"}":C={atLeast:B,atMost:B};break;case",":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar("}");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)==="?"?(this.consumeChar("?"),C.greedy=!1):C.greedy=!0,C.type="Quantifier",C.loc=this.loc(w),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case".":p=this.dotAll();break;case"\\":p=this.atomEscape();break;case"[":p=this.characterClass();break;case"(":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar("."),{type:"Set",complement:!0,value:[n(` -`),n("\r"),n("\u2028"),n("\u2029")]}},r.prototype.atomEscape=function(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:"GroupBackReference",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case"d":p=u;break;case"D":p=u,C=!0;break;case"s":p=f;break;case"S":p=f,C=!0;break;case"w":p=g;break;case"W":p=g,C=!0;break}return a(p),{type:"Set",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case"f":p=n("\f");break;case"n":p=n(` -`);break;case"r":p=n("\r");break;case"t":p=n(" ");break;case"v":p=n("\v");break}return a(p),{type:"Character",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar("c");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error("Invalid ");var C=p.toUpperCase().charCodeAt(0)-64;return{type:"Character",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar("0"),{type:"Character",value:n("\0")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar("x"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar("u"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:"Character",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case` -`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:var p=this.popChar();return{type:"Character",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),C=!0);this.isClassAtom();){var w=this.classAtom(),B=w.type==="Character";if(B&&this.isRangeDash()){this.consumeChar("-");var v=this.classAtom(),D=v.type==="Character";if(D){if(v.value=this.input.length)throw Error("Unexpected end of input");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(w){C.push(w)}):C.push(p)}function o(p,C){if(p[C]===!0)throw"duplicate flag "+C;p[C]=!0}function a(p){if(p===void 0)throw Error("Internal Error - Should never get here!")}function l(){throw Error("Internal Error - Should never get here!")}var c,u=[];for(c=n("0");c<=n("9");c++)u.push(c);var g=[n("_")].concat(u);for(c=n("a");c<=n("z");c++)g.push(c);for(c=n("A");c<=n("Z");c++)g.push(c);var f=[n(" "),n("\f"),n(` -`),n("\r"),n(" "),n("\v"),n(" "),n("\xA0"),n("\u1680"),n("\u2000"),n("\u2001"),n("\u2002"),n("\u2003"),n("\u2004"),n("\u2005"),n("\u2006"),n("\u2007"),n("\u2008"),n("\u2009"),n("\u200A"),n("\u2028"),n("\u2029"),n("\u202F"),n("\u205F"),n("\u3000"),n("\uFEFF")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var w=p[C];p.hasOwnProperty(C)&&(w.type!==void 0?this.visit(w):Array.isArray(w)&&w.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case"Pattern":this.visitPattern(p);break;case"Flags":this.visitFlags(p);break;case"Disjunction":this.visitDisjunction(p);break;case"Alternative":this.visitAlternative(p);break;case"StartAnchor":this.visitStartAnchor(p);break;case"EndAnchor":this.visitEndAnchor(p);break;case"WordBoundary":this.visitWordBoundary(p);break;case"NonWordBoundary":this.visitNonWordBoundary(p);break;case"Lookahead":this.visitLookahead(p);break;case"NegativeLookahead":this.visitNegativeLookahead(p);break;case"Character":this.visitCharacter(p);break;case"Set":this.visitSet(p);break;case"Group":this.visitGroup(p);break;case"GroupBackReference":this.visitGroupBackReference(p);break;case"Quantifier":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:"0.5.0"}})});var ky=y(hf=>{"use strict";Object.defineProperty(hf,"__esModule",{value:!0});hf.clearRegExpParserCache=hf.getRegExpAst=void 0;var tye=Py(),Dy={},rye=new tye.RegExpParser;function iye(r){var e=r.toString();if(Dy.hasOwnProperty(e))return Dy[e];var t=rye.pattern(e);return Dy[e]=t,t}hf.getRegExpAst=iye;function nye(){Dy={}}hf.clearRegExpParserCache=nye});var Yj=y(dn=>{"use strict";var sye=dn&&dn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dn,"__esModule",{value:!0});dn.canMatchCharCode=dn.firstCharOptimizedIndices=dn.getOptimizedStartCodesIndices=dn.failedOptimizationPrefixMsg=void 0;var Kj=Py(),As=Gt(),Hj=ky(),Da=wx(),Gj="Complement Sets are not supported for first char optimization";dn.failedOptimizationPrefixMsg=`Unable to use "first char" lexer optimizations: -`;function oye(r,e){e===void 0&&(e=!1);try{var t=(0,Hj.getRegExpAst)(r),i=Fy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===Gj)e&&(0,As.PRINT_WARNING)(""+dn.failedOptimizationPrefixMsg+(" Unable to optimize: < "+r.toString()+` > -`)+` Complement Sets cannot be automatically optimized. - This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n="";e&&(n=` - This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,As.PRINT_ERROR)(dn.failedOptimizationPrefixMsg+` -`+(" Failed parsing: < "+r.toString()+` > -`)+(" Using the regexp-to-ast library version: "+Kj.VERSION+` -`)+" Please open an issue at: https://github.com/bd82/regexp-to-ast/issues"+n)}}return[]}dn.getOptimizedStartCodesIndices=oye;function Fy(r,e,t){switch(r.type){case"Disjunction":for(var i=0;i=Da.minOptimizationVal)for(var f=u.from>=Da.minOptimizationVal?u.from:Da.minOptimizationVal,h=u.to,p=(0,Da.charCodeToOptimizedIndex)(f),C=(0,Da.charCodeToOptimizedIndex)(h),w=p;w<=C;w++)e[w]=w}}});break;case"Group":Fy(o.value,e,t);break;default:throw Error("Non Exhaustive Match")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type==="Group"&&yx(o)===!1||o.type!=="Group"&&a===!1)break}break;default:throw Error("non exhaustive match!")}return(0,As.values)(e)}dn.firstCharOptimizedIndices=Fy;function Ry(r,e,t){var i=(0,Da.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&aye(r,e)}function aye(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,Da.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,Da.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function Uj(r,e){return(0,As.find)(r.value,function(t){if(typeof t=="number")return(0,As.contains)(e,t);var i=t;return(0,As.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function yx(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,As.isArray)(r.value)?(0,As.every)(r.value,yx):yx(r.value):!1}var Aye=function(r){sye(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case"Lookahead":this.visitLookahead(t);return;case"NegativeLookahead":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,As.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?Uj(t,this.targetCharCodes)===void 0&&(this.found=!0):Uj(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(Kj.BaseRegExpVisitor);function lye(r,e){if(e instanceof RegExp){var t=(0,Hj.getRegExpAst)(e),i=new Aye(r);return i.visit(t),i.found}else return(0,As.find)(e,function(n){return(0,As.contains)(r,n.charCodeAt(0))})!==void 0}dn.canMatchCharCode=lye});var wx=y(Je=>{"use strict";var jj=Je&&Je.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Je,"__esModule",{value:!0});Je.charCodeToOptimizedIndex=Je.minOptimizationVal=Je.buildLineBreakIssueMessage=Je.LineTerminatorOptimizedTester=Je.isShortPattern=Je.isCustomPattern=Je.cloneEmptyGroups=Je.performWarningRuntimeChecks=Je.performRuntimeChecks=Je.addStickyFlag=Je.addStartOfInput=Je.findUnreachablePatterns=Je.findModesThatDoNotExist=Je.findInvalidGroupType=Je.findDuplicatePatterns=Je.findUnsupportedFlags=Je.findStartOfInputAnchor=Je.findEmptyMatchRegExps=Je.findEndOfInputAnchor=Je.findInvalidPatterns=Je.findMissingPatterns=Je.validatePatterns=Je.analyzeTokenTypes=Je.enableSticky=Je.disableSticky=Je.SUPPORT_STICKY=Je.MODES=Je.DEFAULT_MODE=void 0;var qj=Py(),ir=Jd(),Se=Gt(),pf=Yj(),Jj=ky(),Do="PATTERN";Je.DEFAULT_MODE="defaultMode";Je.MODES="modes";Je.SUPPORT_STICKY=typeof new RegExp("(?:)").sticky=="boolean";function cye(){Je.SUPPORT_STICKY=!1}Je.disableSticky=cye;function uye(){Je.SUPPORT_STICKY=!0}Je.enableSticky=uye;function gye(r,e){e=(0,Se.defaults)(e,{useSticky:Je.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` -`],tracer:function(v,D){return D()}});var t=e.tracer;t("initCharCodeToOptimizedIndexMap",function(){wye()});var i;t("Reject Lexer.NA",function(){i=(0,Se.reject)(r,function(v){return v[Do]===ir.Lexer.NA})});var n=!1,s;t("Transform Patterns",function(){n=!1,s=(0,Se.map)(i,function(v){var D=v[Do];if((0,Se.isRegExp)(D)){var T=D.source;return T.length===1&&T!=="^"&&T!=="$"&&T!=="."&&!D.ignoreCase?T:T.length===2&&T[0]==="\\"&&!(0,Se.contains)(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],T[1])?T[1]:e.useSticky?Qx(D):bx(D)}else{if((0,Se.isFunction)(D))return n=!0,{exec:D};if((0,Se.has)(D,"exec"))return n=!0,D;if(typeof D=="string"){if(D.length===1)return D;var H=D.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),j=new RegExp(H);return e.useSticky?Qx(j):bx(j)}else throw Error("non exhaustive match")}})});var o,a,l,c,u;t("misc mapping",function(){o=(0,Se.map)(i,function(v){return v.tokenTypeIdx}),a=(0,Se.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,Se.isString)(D))return D;if((0,Se.isUndefined)(D))return!1;throw Error("non exhaustive match")}}),l=(0,Se.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,Se.isArray)(D)?(0,Se.map)(D,function(H){return(0,Se.indexOf)(i,H)}):[(0,Se.indexOf)(i,D)];return T}}),c=(0,Se.map)(i,function(v){return v.PUSH_MODE}),u=(0,Se.map)(i,function(v){return(0,Se.has)(v,"POP_MODE")})});var g;t("Line Terminator Handling",function(){var v=oq(e.lineTerminatorCharacters);g=(0,Se.map)(i,function(D){return!1}),e.positionTracking!=="onlyOffset"&&(g=(0,Se.map)(i,function(D){if((0,Se.has)(D,"LINE_BREAKS"))return D.LINE_BREAKS;if(nq(D,v)===!1)return(0,pf.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t("Misc Mapping #2",function(){f=(0,Se.map)(i,vx),h=(0,Se.map)(s,iq),p=(0,Se.reduce)(i,function(v,D){var T=D.GROUP;return(0,Se.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,Se.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var w=!0,B=[];return e.safeMode||t("First Char Optimization",function(){B=(0,Se.reduce)(i,function(v,D,T){if(typeof D.PATTERN=="string"){var H=D.PATTERN.charCodeAt(0),j=Sx(H);Bx(v,j,C[T])}else if((0,Se.isArray)(D.START_CHARS_HINT)){var $;(0,Se.forEach)(D.START_CHARS_HINT,function(W){var Z=typeof W=="string"?W.charCodeAt(0):W,A=Sx(Z);$!==A&&($=A,Bx(v,A,C[T]))})}else if((0,Se.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)w=!1,e.ensureOptimizations&&(0,Se.PRINT_ERROR)(""+pf.failedOptimizationPrefixMsg+(" Unable to analyze < "+D.PATTERN.toString()+` > pattern. -`)+` The regexp unicode flag is not currently supported by the regexp-to-ast library. - This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,pf.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,Se.isEmpty)(V)&&(w=!1),(0,Se.forEach)(V,function(W){Bx(v,W,C[T])})}else e.ensureOptimizations&&(0,Se.PRINT_ERROR)(""+pf.failedOptimizationPrefixMsg+(" TokenType: <"+D.name+`> is using a custom token pattern without providing parameter. -`)+` This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),w=!1;return v},[])}),t("ArrayPacking",function(){B=(0,Se.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:w}}Je.analyzeTokenTypes=gye;function fye(r,e){var t=[],i=Wj(r);t=t.concat(i.errors);var n=zj(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(hye(s)),t=t.concat(eq(s)),t=t.concat(tq(s,e)),t=t.concat(rq(s)),t}Je.validatePatterns=fye;function hye(r){var e=[],t=(0,Se.filter)(r,function(i){return(0,Se.isRegExp)(i[Do])});return e=e.concat(Vj(t)),e=e.concat(_j(t)),e=e.concat(Zj(t)),e=e.concat($j(t)),e=e.concat(Xj(t)),e}function Wj(r){var e=(0,Se.filter)(r,function(n){return!(0,Se.has)(n,Do)}),t=(0,Se.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- missing static 'PATTERN' property",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,Se.difference)(r,e);return{errors:t,valid:i}}Je.findMissingPatterns=Wj;function zj(r){var e=(0,Se.filter)(r,function(n){var s=n[Do];return!(0,Se.isRegExp)(s)&&!(0,Se.isFunction)(s)&&!(0,Se.has)(s,"exec")&&!(0,Se.isString)(s)}),t=(0,Se.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,Se.difference)(r,e);return{errors:t,valid:i}}Je.findInvalidPatterns=zj;var pye=/[^\\][\$]/;function Vj(r){var e=function(n){jj(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(qj.BaseRegExpVisitor),t=(0,Se.filter)(r,function(n){var s=n[Do];try{var o=(0,Jj.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return pye.test(s.source)}}),i=(0,Se.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: - Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$' - See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Je.findEndOfInputAnchor=Vj;function Xj(r){var e=(0,Se.filter)(r,function(i){var n=i[Do];return n.test("")}),t=(0,Se.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' must not match an empty string",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Je.findEmptyMatchRegExps=Xj;var dye=/[^\\[][\^]|^\^/;function _j(r){var e=function(n){jj(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(qj.BaseRegExpVisitor),t=(0,Se.filter)(r,function(n){var s=n[Do];try{var o=(0,Jj.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return dye.test(s.source)}}),i=(0,Se.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: - Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^' - See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Je.findStartOfInputAnchor=_j;function Zj(r){var e=(0,Se.filter)(r,function(i){var n=i[Do];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,Se.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Je.findUnsupportedFlags=Zj;function $j(r){var e=[],t=(0,Se.map)(r,function(s){return(0,Se.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,Se.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,Se.compact)(t);var i=(0,Se.filter)(t,function(s){return s.length>1}),n=(0,Se.map)(i,function(s){var o=(0,Se.map)(s,function(l){return l.name}),a=(0,Se.first)(s).PATTERN;return{message:"The same RegExp pattern ->"+a+"<-"+("has been used in all of the following Token Types: "+o.join(", ")+" <-"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Je.findDuplicatePatterns=$j;function eq(r){var e=(0,Se.filter)(r,function(i){if(!(0,Se.has)(i,"GROUP"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,Se.isString)(n)}),t=(0,Se.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Je.findInvalidGroupType=eq;function tq(r,e){var t=(0,Se.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,Se.contains)(e,n.PUSH_MODE)}),i=(0,Se.map)(t,function(n){var s="Token Type: ->"+n.name+"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->"+n.PUSH_MODE+"<-which does not exist";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Je.findModesThatDoNotExist=tq;function rq(r){var e=[],t=(0,Se.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,Se.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,Se.isRegExp)(o)&&mye(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,Se.forEach)(r,function(i,n){(0,Se.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n"+i.name+"<-")+`in the lexer's definition. -See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Je.findUnreachablePatterns=rq;function Cye(r,e){if((0,Se.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,Se.isFunction)(e))return e(r,0,[],{});if((0,Se.has)(e,"exec"))return e.exec(r,0,[],{});if(typeof e=="string")return e===r;throw Error("non exhaustive match")}}function mye(r){var e=[".","\\","[","]","|","^","$","(",")","?","*","+","{"];return(0,Se.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function bx(r){var e=r.ignoreCase?"i":"";return new RegExp("^(?:"+r.source+")",e)}Je.addStartOfInput=bx;function Qx(r){var e=r.ignoreCase?"iy":"y";return new RegExp(""+r.source,e)}Je.addStickyFlag=Qx;function Eye(r,e,t){var i=[];return(0,Se.has)(r,Je.DEFAULT_MODE)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Je.DEFAULT_MODE+`> property in its definition -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,Se.has)(r,Je.MODES)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Je.MODES+`> property in its definition -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,Se.has)(r,Je.MODES)&&(0,Se.has)(r,Je.DEFAULT_MODE)&&!(0,Se.has)(r.modes,r.defaultMode)&&i.push({message:"A MultiMode Lexer cannot be initialized with a "+Je.DEFAULT_MODE+": <"+r.defaultMode+`>which does not exist -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,Se.has)(r,Je.MODES)&&(0,Se.forEach)(r.modes,function(n,s){(0,Se.forEach)(n,function(o,a){(0,Se.isUndefined)(o)&&i.push({message:"A Lexer cannot be initialized using an undefined Token Type. Mode:"+("<"+s+"> at index: <"+a+`> -`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Je.performRuntimeChecks=Eye;function Iye(r,e,t){var i=[],n=!1,s=(0,Se.compact)((0,Se.flatten)((0,Se.mapValues)(r.modes,function(l){return l}))),o=(0,Se.reject)(s,function(l){return l[Do]===ir.Lexer.NA}),a=oq(t);return e&&(0,Se.forEach)(o,function(l){var c=nq(l,a);if(c!==!1){var u=sq(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,Se.has)(l,"LINE_BREAKS")?l.LINE_BREAKS===!0&&(n=!0):(0,pf.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found. - This Lexer has been defined to track line and column information, - But none of the Token Types can be identified as matching a line terminator. - See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS - for details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Je.performWarningRuntimeChecks=Iye;function yye(r){var e={},t=(0,Se.keys)(r);return(0,Se.forEach)(t,function(i){var n=r[i];if((0,Se.isArray)(n))e[i]=[];else throw Error("non exhaustive match")}),e}Je.cloneEmptyGroups=yye;function vx(r){var e=r.PATTERN;if((0,Se.isRegExp)(e))return!1;if((0,Se.isFunction)(e))return!0;if((0,Se.has)(e,"exec"))return!0;if((0,Se.isString)(e))return!1;throw Error("non exhaustive match")}Je.isCustomPattern=vx;function iq(r){return(0,Se.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Je.isShortPattern=iq;Je.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t Token Type -`)+(" Root cause: "+e.errMsg+`. -`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. -`+(" The problem is in the <"+r.name+`> Token Type -`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK";throw Error("non exhaustive match")}Je.buildLineBreakIssueMessage=sq;function oq(r){var e=(0,Se.map)(r,function(t){return(0,Se.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Bx(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Je.minOptimizationVal=256;var Ny=[];function Sx(r){return r255?255+~~(r/255):r}}});var df=y(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var ei=Gt();function Bye(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=Bye;function bye(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=bye;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function Qye(r){var e=aq(r);Aq(e),cq(e),lq(e),(0,ei.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=Qye;function aq(r){for(var e=(0,ei.cloneArr)(r),t=r,i=!0;i;){t=(0,ei.compact)((0,ei.flatten)((0,ei.map)(t,function(s){return s.CATEGORIES})));var n=(0,ei.difference)(t,e);e=e.concat(n),(0,ei.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=aq;function Aq(r){(0,ei.forEach)(r,function(e){uq(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),xx(e)&&!(0,ei.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),xx(e)||(e.CATEGORIES=[]),gq(e)||(e.categoryMatches=[]),fq(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=Aq;function lq(r){(0,ei.forEach)(r,function(e){e.categoryMatches=[],(0,ei.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=lq;function cq(r){(0,ei.forEach)(r,function(e){Px([],e)})}Nt.assignCategoriesMapProp=cq;function Px(r,e){(0,ei.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,ei.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,ei.contains)(i,t)||Px(i,t)})}Nt.singleAssignCategoriesToksMap=Px;function uq(r){return(0,ei.has)(r,"tokenTypeIdx")}Nt.hasShortKeyProperty=uq;function xx(r){return(0,ei.has)(r,"CATEGORIES")}Nt.hasCategoriesProperty=xx;function gq(r){return(0,ei.has)(r,"categoryMatches")}Nt.hasExtendingTokensTypesProperty=gq;function fq(r){return(0,ei.has)(r,"categoryMatchesMap")}Nt.hasExtendingTokensTypesMapProperty=fq;function Sye(r){return(0,ei.has)(r,"tokenTypeIdx")}Nt.isTokenType=Sye});var Dx=y(Ty=>{"use strict";Object.defineProperty(Ty,"__esModule",{value:!0});Ty.defaultLexerErrorProvider=void 0;Ty.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return"Unable to pop Lexer Mode after encountering Token ->"+r.image+"<- The Mode Stack is empty"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return"unexpected character: ->"+r.charAt(e)+"<- at offset: "+e+","+(" skipped "+t+" characters.")}}});var Jd=y(Rc=>{"use strict";Object.defineProperty(Rc,"__esModule",{value:!0});Rc.Lexer=Rc.LexerDefinitionErrorType=void 0;var Vs=wx(),nr=Gt(),vye=df(),xye=Dx(),Pye=ky(),Dye;(function(r){r[r.MISSING_PATTERN=0]="MISSING_PATTERN",r[r.INVALID_PATTERN=1]="INVALID_PATTERN",r[r.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",r[r.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",r[r.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",r[r.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",r[r.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",r[r.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",r[r.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",r[r.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",r[r.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",r[r.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",r[r.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK"})(Dye=Rc.LexerDefinitionErrorType||(Rc.LexerDefinitionErrorType={}));var Wd={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` -`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:xye.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(Wd);var kye=function(){function r(e,t){var i=this;if(t===void 0&&(t=Wd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. -a boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(Wd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",function(){var s,o=!0;i.TRACE_INIT("Lexer Config handling",function(){if(i.config.lineTerminatorsPattern===Wd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=Vs.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===Wd.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[Vs.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[Vs.DEFAULT_MODE]=Vs.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT("performRuntimeChecks",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,Vs.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT("performWarningRuntimeChecks",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,Vs.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT("Mode: <"+g+"> processing",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT("validatePatterns",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,Vs.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,vye.augmentTokenTypes)(u);var f;i.TRACE_INIT("analyzeTokenTypes",function(){f=(0,Vs.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`----------------------- -`);throw new Error(`Errors detected in definition of Lexer: -`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT("Choosing sub-methods implementations",function(){if(Vs.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid config option: "'+i.config.positionTracking+'"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT("Failed Optimization Warnings",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error("Lexer Modes: < "+u.join(", ")+` > cannot be optimized. - Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. - Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT("clearRegExpParserCache",function(){(0,Pye.clearRegExpParserCache)()}),i.TRACE_INIT("toFastProperties",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`----------------------- -`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: -`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,w,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),Z=[],A=this.trackStartLines?1:void 0,ae=this.trackStartLines?1:void 0,ge=(0,Vs.cloneEmptyGroups)(this.emptyGroups),_=this.trackStartLines,L=this.config.lineTerminatorsPattern,N=0,ue=[],we=[],Te=[],Pe=[];Object.freeze(Pe);var Le=void 0;function se(){return ue}function Ae(dr){var Bi=(0,Vs.charCodeToOptimizedIndex)(dr),_n=we[Bi];return _n===void 0?Pe:_n}var be=function(dr){if(Te.length===1&&dr.tokenType.PUSH_MODE===void 0){var Bi=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(dr);Z.push({offset:dr.startOffset,line:dr.startLine!==void 0?dr.startLine:void 0,column:dr.startColumn!==void 0?dr.startColumn:void 0,length:dr.image.length,message:Bi})}else{Te.pop();var _n=(0,nr.last)(Te);ue=i.patternIdxToConfig[_n],we=i.charCodeToPatternIdxToConfig[_n],N=ue.length;var pa=i.canModeBeOptimized[_n]&&i.config.safeMode===!1;we&&pa?Le=Ae:Le=se}};function fe(dr){Te.push(dr),we=this.charCodeToPatternIdxToConfig[dr],ue=this.patternIdxToConfig[dr],N=ue.length,N=ue.length;var Bi=this.canModeBeOptimized[dr]&&this.config.safeMode===!1;we&&Bi?Le=Ae:Le=se}fe.call(this,t);for(var le;jc.length){c=a,u=g,le=tt;break}}}break}}if(c!==null){if(f=c.length,h=le.group,h!==void 0&&(p=le.tokenTypeIdx,C=this.createTokenInstance(c,j,p,le.tokenType,A,ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,ae=this.computeNewColumn(ae,f),_===!0&&le.canLineTerminator===!0){var It=0,Ur=void 0,oi=void 0;L.lastIndex=0;do Ur=L.test(c),Ur===!0&&(oi=L.lastIndex-1,It++);while(Ur===!0);It!==0&&(A=A+It,ae=f-oi,this.updateTokenEndLineColumnLocation(C,h,oi,It,A,ae,f))}this.handleModes(le,be,fe,C)}else{for(var pi=j,pr=A,di=ae,ai=!1;!ai&&j <"+e+">");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r.SKIPPED="This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.",r.NA=/NOT_APPLICABLE/,r}();Rc.Lexer=kye});var HA=y(Si=>{"use strict";Object.defineProperty(Si,"__esModule",{value:!0});Si.tokenMatcher=Si.createTokenInstance=Si.EOF=Si.createToken=Si.hasTokenLabel=Si.tokenName=Si.tokenLabel=void 0;var Xs=Gt(),Rye=Jd(),kx=df();function Fye(r){return wq(r)?r.LABEL:r.name}Si.tokenLabel=Fye;function Nye(r){return r.name}Si.tokenName=Nye;function wq(r){return(0,Xs.isString)(r.LABEL)&&r.LABEL!==""}Si.hasTokenLabel=wq;var Tye="parent",hq="categories",pq="label",dq="group",Cq="push_mode",mq="pop_mode",Eq="longer_alt",Iq="line_breaks",yq="start_chars_hint";function Bq(r){return Lye(r)}Si.createToken=Bq;function Lye(r){var e=r.pattern,t={};if(t.name=r.name,(0,Xs.isUndefined)(e)||(t.PATTERN=e),(0,Xs.has)(r,Tye))throw`The parent property is no longer supported. -See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,Xs.has)(r,hq)&&(t.CATEGORIES=r[hq]),(0,kx.augmentTokenTypes)([t]),(0,Xs.has)(r,pq)&&(t.LABEL=r[pq]),(0,Xs.has)(r,dq)&&(t.GROUP=r[dq]),(0,Xs.has)(r,mq)&&(t.POP_MODE=r[mq]),(0,Xs.has)(r,Cq)&&(t.PUSH_MODE=r[Cq]),(0,Xs.has)(r,Eq)&&(t.LONGER_ALT=r[Eq]),(0,Xs.has)(r,Iq)&&(t.LINE_BREAKS=r[Iq]),(0,Xs.has)(r,yq)&&(t.START_CHARS_HINT=r[yq]),t}Si.EOF=Bq({name:"EOF",pattern:Rye.Lexer.NA});(0,kx.augmentTokenTypes)([Si.EOF]);function Oye(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Si.createTokenInstance=Oye;function Mye(r,e){return(0,kx.tokenStructuredMatcher)(r,e)}Si.tokenMatcher=Mye});var Cn=y(Wt=>{"use strict";var ka=Wt&&Wt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Wt,"__esModule",{value:!0});Wt.serializeProduction=Wt.serializeGrammar=Wt.Terminal=Wt.Alternation=Wt.RepetitionWithSeparator=Wt.Repetition=Wt.RepetitionMandatoryWithSeparator=Wt.RepetitionMandatory=Wt.Option=Wt.Alternative=Wt.Rule=Wt.NonTerminal=Wt.AbstractProduction=void 0;var lr=Gt(),Uye=HA(),ko=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,"definition",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,lr.forEach)(this.definition,function(t){t.accept(e)})},r}();Wt.AbstractProduction=ko;var bq=function(r){ka(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(ko);Wt.NonTerminal=bq;var Qq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText="",(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Rule=Qq;var Sq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Alternative=Sq;var vq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Option=vq;var xq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.RepetitionMandatory=xq;var Pq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.RepetitionMandatoryWithSeparator=Pq;var Dq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Repetition=Dq;var kq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.RepetitionWithSeparator=kq;var Rq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(ko);Wt.Alternation=Rq;var Ly=function(){function r(e){this.idx=1,(0,lr.assign)(this,(0,lr.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();Wt.Terminal=Ly;function Kye(r){return(0,lr.map)(r,zd)}Wt.serializeGrammar=Kye;function zd(r){function e(s){return(0,lr.map)(s,zd)}if(r instanceof bq){var t={type:"NonTerminal",name:r.nonTerminalName,idx:r.idx};return(0,lr.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof Sq)return{type:"Alternative",definition:e(r.definition)};if(r instanceof vq)return{type:"Option",idx:r.idx,definition:e(r.definition)};if(r instanceof xq)return{type:"RepetitionMandatory",idx:r.idx,definition:e(r.definition)};if(r instanceof Pq)return{type:"RepetitionMandatoryWithSeparator",idx:r.idx,separator:zd(new Ly({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof kq)return{type:"RepetitionWithSeparator",idx:r.idx,separator:zd(new Ly({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Dq)return{type:"Repetition",idx:r.idx,definition:e(r.definition)};if(r instanceof Rq)return{type:"Alternation",idx:r.idx,definition:e(r.definition)};if(r instanceof Ly){var i={type:"Terminal",name:r.terminalType.name,label:(0,Uye.tokenLabel)(r.terminalType),idx:r.idx};(0,lr.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,lr.isRegExp)(n)?n.source:n),i}else{if(r instanceof Qq)return{type:"Rule",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error("non exhaustive match")}}}Wt.serializeProduction=zd});var My=y(Oy=>{"use strict";Object.defineProperty(Oy,"__esModule",{value:!0});Oy.RestWalker=void 0;var Rx=Gt(),mn=Cn(),Hye=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Rx.forEach)(e.definition,function(n,s){var o=(0,Rx.drop)(e.definition,s+1);if(n instanceof mn.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof mn.Terminal)i.walkTerminal(n,o,t);else if(n instanceof mn.Alternative)i.walkFlat(n,o,t);else if(n instanceof mn.Option)i.walkOption(n,o,t);else if(n instanceof mn.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof mn.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof mn.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof mn.Repetition)i.walkMany(n,o,t);else if(n instanceof mn.Alternation)i.walkOr(n,o,t);else throw Error("non exhaustive match")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new mn.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Fq(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new mn.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Fq(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Rx.forEach)(e.definition,function(o){var a=new mn.Alternative({definition:[o]});n.walk(a,s)})},r}();Oy.RestWalker=Hye;function Fq(r,e,t){var i=[new mn.Option({definition:[new mn.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var Cf=y(Uy=>{"use strict";Object.defineProperty(Uy,"__esModule",{value:!0});Uy.GAstVisitor=void 0;var Ro=Cn(),Gye=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Ro.NonTerminal:return this.visitNonTerminal(t);case Ro.Alternative:return this.visitAlternative(t);case Ro.Option:return this.visitOption(t);case Ro.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Ro.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Ro.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Ro.Repetition:return this.visitRepetition(t);case Ro.Alternation:return this.visitAlternation(t);case Ro.Terminal:return this.visitTerminal(t);case Ro.Rule:return this.visitRule(t);default:throw Error("non exhaustive match")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();Uy.GAstVisitor=Gye});var Xd=y(Ui=>{"use strict";var Yye=Ui&&Ui.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ui,"__esModule",{value:!0});Ui.collectMethods=Ui.DslMethodsCollectorVisitor=Ui.getProductionDslName=Ui.isBranchingProd=Ui.isOptionalProd=Ui.isSequenceProd=void 0;var Vd=Gt(),Qr=Cn(),jye=Cf();function qye(r){return r instanceof Qr.Alternative||r instanceof Qr.Option||r instanceof Qr.Repetition||r instanceof Qr.RepetitionMandatory||r instanceof Qr.RepetitionMandatoryWithSeparator||r instanceof Qr.RepetitionWithSeparator||r instanceof Qr.Terminal||r instanceof Qr.Rule}Ui.isSequenceProd=qye;function Fx(r,e){e===void 0&&(e=[]);var t=r instanceof Qr.Option||r instanceof Qr.Repetition||r instanceof Qr.RepetitionWithSeparator;return t?!0:r instanceof Qr.Alternation?(0,Vd.some)(r.definition,function(i){return Fx(i,e)}):r instanceof Qr.NonTerminal&&(0,Vd.contains)(e,r)?!1:r instanceof Qr.AbstractProduction?(r instanceof Qr.NonTerminal&&e.push(r),(0,Vd.every)(r.definition,function(i){return Fx(i,e)})):!1}Ui.isOptionalProd=Fx;function Jye(r){return r instanceof Qr.Alternation}Ui.isBranchingProd=Jye;function Wye(r){if(r instanceof Qr.NonTerminal)return"SUBRULE";if(r instanceof Qr.Option)return"OPTION";if(r instanceof Qr.Alternation)return"OR";if(r instanceof Qr.RepetitionMandatory)return"AT_LEAST_ONE";if(r instanceof Qr.RepetitionMandatoryWithSeparator)return"AT_LEAST_ONE_SEP";if(r instanceof Qr.RepetitionWithSeparator)return"MANY_SEP";if(r instanceof Qr.Repetition)return"MANY";if(r instanceof Qr.Terminal)return"CONSUME";throw Error("non exhaustive match")}Ui.getProductionDslName=Wye;var Nq=function(r){Yye(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator="-",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+"Terminal";(0,Vd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+"Terminal";(0,Vd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(jye.GAstVisitor);Ui.DslMethodsCollectorVisitor=Nq;var Ky=new Nq;function zye(r){Ky.reset(),r.accept(Ky);var e=Ky.dslMethods;return Ky.reset(),e}Ui.collectMethods=zye});var Tx=y(Fo=>{"use strict";Object.defineProperty(Fo,"__esModule",{value:!0});Fo.firstForTerminal=Fo.firstForBranching=Fo.firstForSequence=Fo.first=void 0;var Hy=Gt(),Tq=Cn(),Nx=Xd();function Gy(r){if(r instanceof Tq.NonTerminal)return Gy(r.referencedRule);if(r instanceof Tq.Terminal)return Mq(r);if((0,Nx.isSequenceProd)(r))return Lq(r);if((0,Nx.isBranchingProd)(r))return Oq(r);throw Error("non exhaustive match")}Fo.first=Gy;function Lq(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,Nx.isOptionalProd)(s),e=e.concat(Gy(s)),i=i+1,n=t.length>i;return(0,Hy.uniq)(e)}Fo.firstForSequence=Lq;function Oq(r){var e=(0,Hy.map)(r.definition,function(t){return Gy(t)});return(0,Hy.uniq)((0,Hy.flatten)(e))}Fo.firstForBranching=Oq;function Mq(r){return[r.terminalType]}Fo.firstForTerminal=Mq});var Lx=y(Yy=>{"use strict";Object.defineProperty(Yy,"__esModule",{value:!0});Yy.IN=void 0;Yy.IN="_~IN~_"});var Yq=y(ls=>{"use strict";var Vye=ls&&ls.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(ls,"__esModule",{value:!0});ls.buildInProdFollowPrefix=ls.buildBetweenProdsFollowPrefix=ls.computeAllProdsFollows=ls.ResyncFollowsWalker=void 0;var Xye=My(),_ye=Tx(),Uq=Gt(),Kq=Lx(),Zye=Cn(),Hq=function(r){Vye(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=Gq(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new Zye.Alternative({definition:o}),l=(0,_ye.first)(a);this.follows[s]=l},e}(Xye.RestWalker);ls.ResyncFollowsWalker=Hq;function $ye(r){var e={};return(0,Uq.forEach)(r,function(t){var i=new Hq(t).startWalking();(0,Uq.assign)(e,i)}),e}ls.computeAllProdsFollows=$ye;function Gq(r,e){return r.name+e+Kq.IN}ls.buildBetweenProdsFollowPrefix=Gq;function ewe(r){var e=r.terminalType.name;return e+r.idx+Kq.IN}ls.buildInProdFollowPrefix=ewe});var _d=y(Ra=>{"use strict";Object.defineProperty(Ra,"__esModule",{value:!0});Ra.defaultGrammarValidatorErrorProvider=Ra.defaultGrammarResolverErrorProvider=Ra.defaultParserErrorProvider=void 0;var mf=HA(),twe=Gt(),_s=Gt(),Ox=Cn(),jq=Xd();Ra.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,mf.hasTokenLabel)(e),o=s?"--> "+(0,mf.tokenLabel)(e)+" <--":"token of type --> "+e.name+" <--",a="Expecting "+o+" but found --> '"+t.image+"' <--";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return"Redundant input, expecting EOF but found: "+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o="Expecting: ",a=(0,_s.first)(t).image,l=` -but found: '`+a+"'";if(n)return o+n+l;var c=(0,_s.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,_s.map)(c,function(h){return"["+(0,_s.map)(h,function(p){return(0,mf.tokenLabel)(p)}).join(", ")+"]"}),g=(0,_s.map)(u,function(h,p){return" "+(p+1)+". "+h}),f=`one of these possible Token sequences: -`+g.join(` -`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s="Expecting: ",o=(0,_s.first)(t).image,a=` -but found: '`+o+"'";if(i)return s+i+a;var l=(0,_s.map)(e,function(u){return"["+(0,_s.map)(u,function(g){return(0,mf.tokenLabel)(g)}).join(",")+"]"}),c=`expecting at least one iteration which starts with one of these possible Token sequences:: - `+("<"+l.join(" ,")+">");return s+c+a}};Object.freeze(Ra.defaultParserErrorProvider);Ra.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t="Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- -inside top level rule: ->`+r.name+"<-";return t}};Ra.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Ox.Terminal?u.terminalType.name:u instanceof Ox.NonTerminal?u.nonTerminalName:""}var i=r.name,n=(0,_s.first)(e),s=n.idx,o=(0,jq.getProductionDslName)(n),a=t(n),l=s>0,c="->"+o+(l?s:"")+"<- "+(a?"with argument: ->"+a+"<-":"")+` - appears more than once (`+e.length+" times) in the top level rule: ->"+i+`<-. - For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES - `;return c=c.replace(/[ \t]+/g," "),c=c.replace(/\s\s+/g,` -`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar. -`+("The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <"+r.name+`>. -`)+`To resolve this make sure each Terminal and Non-Terminal names are unique -This is easy to accomplish by using the convention that Terminal names start with an uppercase letter -and Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,_s.map)(r.prefixPath,function(n){return(0,mf.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous alternatives: <"+r.ambiguityIndices.join(" ,")+`> due to common lookahead prefix -`+("in inside <"+r.topLevelRule.name+`> Rule, -`)+("<"+e+`> may appears as a prefix path in all these alternatives. -`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX -For Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,_s.map)(r.prefixPath,function(n){return(0,mf.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous Alternatives Detected: <"+r.ambiguityIndices.join(" ,")+"> in "+(" inside <"+r.topLevelRule.name+`> Rule, -`)+("<"+e+`> may appears as a prefix path in all these alternatives. -`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES -For Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,jq.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t="The repetition <"+e+"> within Rule <"+r.topLevelRule.name+`> can never consume any tokens. -This could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return"deprecated"},buildEmptyAlternationError:function(r){var e="Ambiguous empty alternative: <"+(r.emptyChoiceIdx+1)+">"+(" in inside <"+r.topLevelRule.name+`> Rule. -`)+"Only the last alternative may be an empty alternative.";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives: -`+(" inside <"+r.topLevelRule.name+`> Rule. - has `+(r.alternation.definition.length+1)+" alternatives.");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=twe.map(r.leftRecursionPath,function(s){return s.name}),i=e+" --> "+t.concat([e]).join(" --> "),n=`Left Recursion found in grammar. -`+("rule: <"+e+`> can be invoked from itself (directly or indirectly) -`)+(`without consuming any Tokens. The grammar path that causes this is: - `+i+` -`)+` To fix this refactor your grammar to remove the left recursion. -see: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return"deprecated"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Ox.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t="Duplicate definition, rule: ->"+e+"<- is already defined in the grammar: ->"+r.grammarName+"<-";return t}}});var Wq=y(GA=>{"use strict";var rwe=GA&&GA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(GA,"__esModule",{value:!0});GA.GastRefResolverVisitor=GA.resolveGrammar=void 0;var iwe=Hn(),qq=Gt(),nwe=Cf();function swe(r,e){var t=new Jq(r,e);return t.resolveRefs(),t.errors}GA.resolveGrammar=swe;var Jq=function(r){rwe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,qq.forEach)((0,qq.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:iwe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(nwe.GAstVisitor);GA.GastRefResolverVisitor=Jq});var $d=y(Lr=>{"use strict";var Fc=Lr&&Lr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Lr,"__esModule",{value:!0});Lr.nextPossibleTokensAfter=Lr.possiblePathsFrom=Lr.NextTerminalAfterAtLeastOneSepWalker=Lr.NextTerminalAfterAtLeastOneWalker=Lr.NextTerminalAfterManySepWalker=Lr.NextTerminalAfterManyWalker=Lr.AbstractNextTerminalAfterProductionWalker=Lr.NextAfterTokenWalker=Lr.AbstractNextPossibleTokensWalker=void 0;var zq=My(),Ut=Gt(),owe=Tx(),Dt=Cn(),Vq=function(r){Fc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName="",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=(0,Ut.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Ut.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Ut.isEmpty)(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(zq.RestWalker);Lr.AbstractNextPossibleTokensWalker=Vq;var awe=function(r){Fc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName="",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new Dt.Alternative({definition:s});this.possibleTokTypes=(0,owe.first)(o),this.found=!0}},e}(Vq);Lr.NextAfterTokenWalker=awe;var Zd=function(r){Fc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(zq.RestWalker);Lr.AbstractNextTerminalAfterProductionWalker=Zd;var Awe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterManyWalker=Awe;var lwe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterManySepWalker=lwe;var cwe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterAtLeastOneWalker=cwe;var uwe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterAtLeastOneSepWalker=uwe;function Xq(r,e,t){t===void 0&&(t=[]),t=(0,Ut.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Ut.drop)(r,n+1))}function o(c){var u=Xq(s(c),e,t);return i.concat(u)}for(;t.length=0;ge--){var _=B.definition[ge],L={idx:p,def:_.definition.concat((0,Ut.drop)(h)),ruleStack:C,occurrenceStack:w};g.push(L),g.push(o)}else if(B instanceof Dt.Alternative)g.push({idx:p,def:B.definition.concat((0,Ut.drop)(h)),ruleStack:C,occurrenceStack:w});else if(B instanceof Dt.Rule)g.push(fwe(B,p,C,w));else throw Error("non exhaustive match")}}return u}Lr.nextPossibleTokensAfter=gwe;function fwe(r,e,t,i){var n=(0,Ut.cloneArr)(t);n.push(r.name);var s=(0,Ut.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var eC=y(_t=>{"use strict";var $q=_t&&_t.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(_t,"__esModule",{value:!0});_t.areTokenCategoriesNotUsed=_t.isStrictPrefixOfPath=_t.containsPath=_t.getLookaheadPathsForOptionalProd=_t.getLookaheadPathsForOr=_t.lookAheadSequenceFromAlternatives=_t.buildSingleAlternativeLookaheadFunction=_t.buildAlternativesLookAheadFunc=_t.buildLookaheadFuncForOptionalProd=_t.buildLookaheadFuncForOr=_t.getProdType=_t.PROD_TYPE=void 0;var sr=Gt(),_q=$d(),hwe=My(),jy=df(),YA=Cn(),pwe=Cf(),li;(function(r){r[r.OPTION=0]="OPTION",r[r.REPETITION=1]="REPETITION",r[r.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",r[r.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",r[r.ALTERNATION=5]="ALTERNATION"})(li=_t.PROD_TYPE||(_t.PROD_TYPE={}));function dwe(r){if(r instanceof YA.Option)return li.OPTION;if(r instanceof YA.Repetition)return li.REPETITION;if(r instanceof YA.RepetitionMandatory)return li.REPETITION_MANDATORY;if(r instanceof YA.RepetitionMandatoryWithSeparator)return li.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof YA.RepetitionWithSeparator)return li.REPETITION_WITH_SEPARATOR;if(r instanceof YA.Alternation)return li.ALTERNATION;throw Error("non exhaustive match")}_t.getProdType=dwe;function Cwe(r,e,t,i,n,s){var o=tJ(r,e,t),a=Kx(o)?jy.tokenStructuredMatcherNoCategories:jy.tokenStructuredMatcher;return s(o,i,a,n)}_t.buildLookaheadFuncForOr=Cwe;function mwe(r,e,t,i,n,s){var o=rJ(r,e,n,t),a=Kx(o)?jy.tokenStructuredMatcherNoCategories:jy.tokenStructuredMatcher;return s(o[0],a,i)}_t.buildLookaheadFuncForOptionalProd=mwe;function Ewe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u{"use strict";var Hx=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,"__esModule",{value:!0});zt.checkPrefixAlternativesAmbiguities=zt.validateSomeNonEmptyLookaheadPath=zt.validateTooManyAlts=zt.RepetionCollector=zt.validateAmbiguousAlternationAlternatives=zt.validateEmptyOrAlternative=zt.getFirstNoneTerminal=zt.validateNoLeftRecursion=zt.validateRuleIsOverridden=zt.validateRuleDoesNotAlreadyExist=zt.OccurrenceValidationCollector=zt.identifyProductionForDuplicates=zt.validateGrammar=void 0;var er=Gt(),Sr=Gt(),No=Hn(),Gx=Xd(),Ef=eC(),bwe=$d(),Zs=Cn(),Yx=Cf();function Qwe(r,e,t,i,n){var s=er.map(r,function(h){return Swe(h,i)}),o=er.map(r,function(h){return jx(h,h,i)}),a=[],l=[],c=[];(0,Sr.every)(o,Sr.isEmpty)&&(a=(0,Sr.map)(r,function(h){return AJ(h,i)}),l=(0,Sr.map)(r,function(h){return lJ(h,e,i)}),c=gJ(r,e,i));var u=Pwe(r,t,i),g=(0,Sr.map)(r,function(h){return uJ(h,i)}),f=(0,Sr.map)(r,function(h){return aJ(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}zt.validateGrammar=Qwe;function Swe(r,e){var t=new oJ;r.accept(t);var i=t.allProductions,n=er.groupBy(i,nJ),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,Gx.getProductionDslName)(l),g={message:c,type:No.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=sJ(l);return f&&(g.parameter=f),g});return o}function nJ(r){return(0,Gx.getProductionDslName)(r)+"_#_"+r.idx+"_#_"+sJ(r)}zt.identifyProductionForDuplicates=nJ;function sJ(r){return r instanceof Zs.Terminal?r.terminalType.name:r instanceof Zs.NonTerminal?r.nonTerminalName:""}var oJ=function(r){Hx(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}(Yx.GAstVisitor);zt.OccurrenceValidationCollector=oJ;function aJ(r,e,t,i){var n=[],s=(0,Sr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:No.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}zt.validateRuleDoesNotAlreadyExist=aJ;function vwe(r,e,t){var i=[],n;return er.contains(e,r)||(n="Invalid rule override, rule: ->"+r+"<- cannot be overridden in the grammar: ->"+t+"<-as it is not defined in any of the super grammars ",i.push({message:n,type:No.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}zt.validateRuleIsOverridden=vwe;function jx(r,e,t,i){i===void 0&&(i=[]);var n=[],s=tC(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:No.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),jx(r,u,t,g)});return n.concat(er.flatten(c))}zt.validateNoLeftRecursion=jx;function tC(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof Zs.NonTerminal)e.push(t.referencedRule);else if(t instanceof Zs.Alternative||t instanceof Zs.Option||t instanceof Zs.RepetitionMandatory||t instanceof Zs.RepetitionMandatoryWithSeparator||t instanceof Zs.RepetitionWithSeparator||t instanceof Zs.Repetition)e=e.concat(tC(t.definition));else if(t instanceof Zs.Alternation)e=er.flatten(er.map(t.definition,function(o){return tC(o.definition)}));else if(!(t instanceof Zs.Terminal))throw Error("non exhaustive match");var i=(0,Gx.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(tC(s))}else return e}zt.getFirstNoneTerminal=tC;var qx=function(r){Hx(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}(Yx.GAstVisitor);function AJ(r,e){var t=new qx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,bwe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:No.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}zt.validateEmptyOrAlternative=AJ;function lJ(r,e,t){var i=new qx;r.accept(i);var n=i.alternations;n=(0,Sr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,Ef.getLookaheadPathsForOr)(l,r,c,a),g=xwe(u,a,r,t),f=fJ(u,a,r,t);return o.concat(g,f)},[]);return s}zt.validateAmbiguousAlternationAlternatives=lJ;var cJ=function(r){Hx(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}(Yx.GAstVisitor);zt.RepetionCollector=cJ;function uJ(r,e){var t=new qx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:No.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}zt.validateTooManyAlts=uJ;function gJ(r,e,t){var i=[];return(0,Sr.forEach)(r,function(n){var s=new cJ;n.accept(s);var o=s.allProductions;(0,Sr.forEach)(o,function(a){var l=(0,Ef.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,Ef.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Sr.isEmpty)((0,Sr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:No.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}zt.validateSomeNonEmptyLookaheadPath=gJ;function xwe(r,e,t,i){var n=[],s=(0,Sr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Sr.forEach)(l,function(u){var g=[c];(0,Sr.forEach)(r,function(f,h){c!==h&&(0,Ef.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,Ef.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Sr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:No.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function fJ(r,e,t,i){var n=[],s=(0,Sr.reduce)(r,function(o,a,l){var c=(0,Sr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Sr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Sr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx{"use strict";Object.defineProperty(If,"__esModule",{value:!0});If.validateGrammar=If.resolveGrammar=void 0;var Wx=Gt(),Dwe=Wq(),kwe=Jx(),hJ=_d();function Rwe(r){r=(0,Wx.defaults)(r,{errMsgProvider:hJ.defaultGrammarResolverErrorProvider});var e={};return(0,Wx.forEach)(r.rules,function(t){e[t.name]=t}),(0,Dwe.resolveGrammar)(e,r.errMsgProvider)}If.resolveGrammar=Rwe;function Fwe(r){return r=(0,Wx.defaults)(r,{errMsgProvider:hJ.defaultGrammarValidatorErrorProvider}),(0,kwe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}If.validateGrammar=Fwe});var yf=y(En=>{"use strict";var rC=En&&En.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(En,"__esModule",{value:!0});En.EarlyExitException=En.NotAllInputParsedException=En.NoViableAltException=En.MismatchedTokenException=En.isRecognitionException=void 0;var Nwe=Gt(),dJ="MismatchedTokenException",CJ="NoViableAltException",mJ="EarlyExitException",EJ="NotAllInputParsedException",IJ=[dJ,CJ,mJ,EJ];Object.freeze(IJ);function Twe(r){return(0,Nwe.contains)(IJ,r.name)}En.isRecognitionException=Twe;var qy=function(r){rC(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),Lwe=function(r){rC(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=dJ,s}return e}(qy);En.MismatchedTokenException=Lwe;var Owe=function(r){rC(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=CJ,s}return e}(qy);En.NoViableAltException=Owe;var Mwe=function(r){rC(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=EJ,n}return e}(qy);En.NotAllInputParsedException=Mwe;var Uwe=function(r){rC(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mJ,s}return e}(qy);En.EarlyExitException=Uwe});var Vx=y(Ki=>{"use strict";Object.defineProperty(Ki,"__esModule",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var Jy=HA(),cs=Gt(),Kwe=yf(),Hwe=Lx(),Gwe=Hn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION="InRuleRecoveryException";function zx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=zx;zx.prototype=Error.prototype;var Ywe=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,cs.has)(e,"recoveryEnabled")?e.recoveryEnabled:Gwe.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=yJ)},r.prototype.getTokenToInsert=function(e){var t=(0,Jy.createTokenInstance)(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new Kwe.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,cs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new zx("sad sad panda")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,cs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,cs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,cs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,cs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,cs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,cs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,cs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[Jy.EOF];var t=e.ruleName+e.idxInCallingRule+Hwe.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,Jy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,cs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,cs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,cs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Ywe;function yJ(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=Jy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=yJ});var Wy=y(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.getKeyForAutomaticLookahead=qt.AT_LEAST_ONE_SEP_IDX=qt.MANY_SEP_IDX=qt.AT_LEAST_ONE_IDX=qt.MANY_IDX=qt.OPTION_IDX=qt.OR_IDX=qt.BITS_FOR_ALT_IDX=qt.BITS_FOR_RULE_IDX=qt.BITS_FOR_OCCURRENCE_IDX=qt.BITS_FOR_METHOD_TYPE=void 0;qt.BITS_FOR_METHOD_TYPE=4;qt.BITS_FOR_OCCURRENCE_IDX=8;qt.BITS_FOR_RULE_IDX=12;qt.BITS_FOR_ALT_IDX=8;qt.OR_IDX=1<{"use strict";Object.defineProperty(zy,"__esModule",{value:!0});zy.LooksAhead=void 0;var Fa=eC(),$s=Gt(),wJ=Hn(),Na=Wy(),Nc=Xd(),qwe=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,$s.has)(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:wJ.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,$s.has)(e,"maxLookahead")?e.maxLookahead:wJ.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,$s.isES2015MapSupported)()?new Map:[],(0,$s.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,$s.forEach)(e,function(i){t.TRACE_INIT(i.name+" Rule Lookahead",function(){var n=(0,Nc.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,$s.forEach)(s,function(g){var f=g.idx===0?"":g.idx;t.TRACE_INIT(""+(0,Nc.getProductionDslName)(g)+f,function(){var h=(0,Fa.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Na.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Na.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,$s.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Na.MANY_IDX,Fa.PROD_TYPE.REPETITION,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Na.OPTION_IDX,Fa.PROD_TYPE.OPTION,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Na.AT_LEAST_ONE_IDX,Fa.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Na.AT_LEAST_ONE_SEP_IDX,Fa.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Na.MANY_SEP_IDX,Fa.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Nc.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(""+o+(t===0?"":t),function(){var l=(0,Fa.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Na.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,Fa.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,Fa.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Na.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();zy.LooksAhead=qwe});var bJ=y(To=>{"use strict";Object.defineProperty(To,"__esModule",{value:!0});To.addNoneTerminalToCst=To.addTerminalToCst=To.setNodeLocationFull=To.setNodeLocationOnlyOffset=void 0;function Jwe(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset{"use strict";Object.defineProperty(jA,"__esModule",{value:!0});jA.defineNameProp=jA.functionName=jA.classNameFromInstance=void 0;var Xwe=Gt();function _we(r){return SJ(r.constructor)}jA.classNameFromInstance=_we;var QJ="name";function SJ(r){var e=r.name;return e||"anonymous"}jA.functionName=SJ;function Zwe(r,e){var t=Object.getOwnPropertyDescriptor(r,QJ);return(0,Xwe.isUndefined)(t)||t.configurable?(Object.defineProperty(r,QJ,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}jA.defineNameProp=Zwe});var kJ=y(vi=>{"use strict";Object.defineProperty(vi,"__esModule",{value:!0});vi.validateRedundantMethods=vi.validateMissingCstMethods=vi.validateVisitor=vi.CstVisitorDefinitionError=vi.createBaseVisitorConstructorWithDefaults=vi.createBaseSemanticVisitorConstructor=vi.defaultVisit=void 0;var us=Gt(),iC=Xx();function vJ(r,e){for(var t=(0,us.keys)(r),i=t.length,n=0;n: - `+(""+s.join(` - -`).replace(/\n/g,` - `)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}vi.createBaseSemanticVisitorConstructor=$we;function eBe(r,e,t){var i=function(){};(0,iC.defineNameProp)(i,r+"BaseSemanticsWithDefaults");var n=Object.create(t.prototype);return(0,us.forEach)(e,function(s){n[s]=vJ}),i.prototype=n,i.prototype.constructor=i,i}vi.createBaseVisitorConstructorWithDefaults=eBe;var _x;(function(r){r[r.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",r[r.MISSING_METHOD=1]="MISSING_METHOD"})(_x=vi.CstVisitorDefinitionError||(vi.CstVisitorDefinitionError={}));function xJ(r,e){var t=PJ(r,e),i=DJ(r,e);return t.concat(i)}vi.validateVisitor=xJ;function PJ(r,e){var t=(0,us.map)(e,function(i){if(!(0,us.isFunction)(r[i]))return{msg:"Missing visitor method: <"+i+"> on "+(0,iC.functionName)(r.constructor)+" CST Visitor.",type:_x.MISSING_METHOD,methodName:i}});return(0,us.compact)(t)}vi.validateMissingCstMethods=PJ;var tBe=["constructor","visit","validateVisitor"];function DJ(r,e){var t=[];for(var i in r)(0,us.isFunction)(r[i])&&!(0,us.contains)(tBe,i)&&!(0,us.contains)(e,i)&&t.push({msg:"Redundant visitor method: <"+i+"> on "+(0,iC.functionName)(r.constructor)+` CST Visitor -There is no Grammar Rule corresponding to this method's name. -`,type:_x.REDUNDANT_METHOD,methodName:i});return t}vi.validateRedundantMethods=DJ});var FJ=y(Vy=>{"use strict";Object.defineProperty(Vy,"__esModule",{value:!0});Vy.TreeBuilder=void 0;var wf=bJ(),ti=Gt(),RJ=kJ(),rBe=Hn(),iBe=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,ti.has)(e,"nodeLocationTracking")?e.nodeLocationTracking:rBe.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=ti.NOOP,this.cstFinallyStateUpdate=ti.NOOP,this.cstPostTerminal=ti.NOOP,this.cstPostNonTerminal=ti.NOOP,this.cstPostRule=ti.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=wf.setNodeLocationFull,this.setNodeLocationFromNode=wf.setNodeLocationFull,this.cstPostRule=ti.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=ti.NOOP,this.setNodeLocationFromNode=ti.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=wf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=wf.setNodeLocationOnlyOffset,this.cstPostRule=ti.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=ti.NOOP,this.setNodeLocationFromNode=ti.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=ti.NOOP,this.setNodeLocationFromNode=ti.NOOP,this.cstPostRule=ti.NOOP,this.setInitialNodeLocation=ti.NOOP;else throw Error('Invalid config option: "'+e.nodeLocationTracking+'"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,wf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,wf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,ti.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,RJ.createBaseSemanticVisitorConstructor)(this.className,(0,ti.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,ti.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,RJ.createBaseVisitorConstructorWithDefaults)(this.className,(0,ti.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Vy.TreeBuilder=iBe});var TJ=y(Xy=>{"use strict";Object.defineProperty(Xy,"__esModule",{value:!0});Xy.LexerAdapter=void 0;var NJ=Hn(),nBe=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,"input",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):NJ.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?NJ.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Xy.LexerAdapter=nBe});var OJ=y(_y=>{"use strict";Object.defineProperty(_y,"__esModule",{value:!0});_y.RecognizerApi=void 0;var LJ=Gt(),sBe=yf(),Zx=Hn(),oBe=_d(),aBe=Jx(),ABe=Cn(),lBe=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Zx.DEFAULT_RULE_CONFIG),(0,LJ.contains)(this.definedRulesNames,e)){var n=oBe.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Zx.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Zx.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,aBe.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,sBe.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,ABe.serializeGrammar)((0,LJ.values)(this.gastProductionsCache))},r}();_y.RecognizerApi=lBe});var HJ=y($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.RecognizerEngine=void 0;var kr=Gt(),Gn=Wy(),Zy=yf(),MJ=eC(),Bf=$d(),UJ=Hn(),cBe=Vx(),KJ=HA(),nC=df(),uBe=Xx(),gBe=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,uBe.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=nC.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,kr.has)(t,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. - See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 - For Further details.`);if((0,kr.isArray)(e)){if((0,kr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty. - Note that the first argument for the parser constructor - is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. - See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 - For Further details.`)}if((0,kr.isArray)(e))this.tokensMap=(0,kr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,kr.has)(e,"modes")&&(0,kr.every)((0,kr.flatten)((0,kr.values)(e.modes)),nC.isTokenType)){var i=(0,kr.flatten)((0,kr.values)(e.modes)),n=(0,kr.uniq)(i);this.tokensMap=(0,kr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,kr.isObject)(e))this.tokensMap=(0,kr.cloneObj)(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=KJ.EOF;var s=(0,kr.every)((0,kr.values)(e),function(o){return(0,kr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?nC.tokenStructuredMatcherNoCategories:nC.tokenStructuredMatcher,(0,nC.augmentTokenTypes)((0,kr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error("Grammar rule <"+e+`> may not be defined after the 'performSelfAnalysis' method has been called' -Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,kr.has)(i,"resyncEnabled")?i.resyncEnabled:UJ.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,kr.has)(i,"recoveryValueFunc")?i.recoveryValueFunc:UJ.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(Gn.OR_IDX,t),n=(0,kr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new Zy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,Zy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new Zy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name==="MismatchedTokenException"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===cBe.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,kr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),KJ.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();$y.RecognizerEngine=gBe});var YJ=y(ew=>{"use strict";Object.defineProperty(ew,"__esModule",{value:!0});ew.ErrorHandler=void 0;var $x=yf(),eP=Gt(),GJ=eC(),fBe=Hn(),hBe=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,eP.has)(e,"errorMessageProvider")?e.errorMessageProvider:fBe.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,$x.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,eP.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")},Object.defineProperty(r.prototype,"errors",{get:function(){return(0,eP.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,GJ.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new $x.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,GJ.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new $x.NoViableAltException(c,this.LA(1),l))},r}();ew.ErrorHandler=hBe});var JJ=y(tw=>{"use strict";Object.defineProperty(tw,"__esModule",{value:!0});tw.ContentAssist=void 0;var jJ=$d(),qJ=Gt(),pBe=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,qJ.isUndefined)(i))throw Error("Rule ->"+e+"<- does not exist in this grammar.");return(0,jJ.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,qJ.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new jJ.NextAfterTokenWalker(n,e).startWalking();return s},r}();tw.ContentAssist=pBe});var e3=y(nw=>{"use strict";Object.defineProperty(nw,"__esModule",{value:!0});nw.GastRecorder=void 0;var In=Gt(),Lo=Cn(),dBe=Jd(),XJ=df(),_J=HA(),CBe=Hn(),mBe=Wy(),iw={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(iw);var WJ=!0,zJ=Math.pow(2,mBe.BITS_FOR_OCCURRENCE_IDX)-1,ZJ=(0,_J.createToken)({name:"RECORDING_PHASE_TOKEN",pattern:dBe.Lexer.NA});(0,XJ.augmentTokenTypes)([ZJ]);var $J=(0,_J.createTokenInstance)(ZJ,`This IToken indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze($J);var EBe={name:`This CSTNode indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},IBe=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",function(){for(var t=function(n){var s=n>0?n:"";e["CONSUME"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e["SUBRULE"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e["OPTION"+s]=function(o){return this.optionInternalRecord(o,n)},e["OR"+s]=function(o){return this.orInternalRecord(o,n)},e["MANY"+s]=function(o){this.manyInternalRecord(n,o)},e["MANY_SEP"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e["AT_LEAST_ONE"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e["AT_LEAST_ONE_SEP"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",function(){for(var t=0;t<10;t++){var i=t>0?t:"";delete e["CONSUME"+i],delete e["SUBRULE"+i],delete e["OPTION"+i],delete e["OR"+i],delete e["MANY"+i],delete e["MANY_SEP"+i],delete e["AT_LEAST_ONE"+i],delete e["AT_LEAST_ONE_SEP"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return CBe.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Lo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` - This error was thrown during the "grammar recording phase" For more info see: - https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return sC.call(this,Lo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){sC.call(this,Lo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){sC.call(this,Lo.RepetitionMandatoryWithSeparator,t,e,WJ)},r.prototype.manyInternalRecord=function(e,t){sC.call(this,Lo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){sC.call(this,Lo.RepetitionWithSeparator,t,e,WJ)},r.prototype.orInternalRecord=function(e,t){return yBe.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(rw(t),!e||(0,In.has)(e,"ruleName")===!1){var n=new Error(" argument is invalid"+(" expecting a Parser method reference but got: <"+JSON.stringify(e)+">")+(` - inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,In.peek)(this.recordingProdStack),o=e.ruleName,a=new Lo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?EBe:iw},r.prototype.consumeInternalRecord=function(e,t,i){if(rw(t),!(0,XJ.hasShortKeyProperty)(e)){var n=new Error(" argument is invalid"+(" expecting a TokenType reference but got: <"+JSON.stringify(e)+">")+(` - inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,In.peek)(this.recordingProdStack),o=new Lo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),$J},r}();nw.GastRecorder=IBe;function sC(r,e,t,i){i===void 0&&(i=!1),rw(t);var n=(0,In.peek)(this.recordingProdStack),s=(0,In.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,In.has)(e,"MAX_LOOKAHEAD")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),iw}function yBe(r,e){var t=this;rw(e);var i=(0,In.peek)(this.recordingProdStack),n=(0,In.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Lo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,In.has)(r,"MAX_LOOKAHEAD")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,In.some)(s,function(l){return(0,In.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,In.forEach)(s,function(l){var c=new Lo.Alternative({definition:[]});o.definition.push(c),(0,In.has)(l,"IGNORE_AMBIGUITIES")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,In.has)(l,"GATE")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),iw}function VJ(r){return r===0?"":""+r}function rw(r){if(r<0||r>zJ){var e=new Error("Invalid DSL Method idx value: <"+r+`> - `+("Idx value must be a none negative value smaller than "+(zJ+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var r3=y(sw=>{"use strict";Object.defineProperty(sw,"__esModule",{value:!0});sw.PerformanceTracer=void 0;var t3=Gt(),wBe=Hn(),BBe=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,t3.has)(e,"traceInitPerf")){var t=e.traceInitPerf,i=typeof t=="number";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=wBe.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <"+e+">");var n=(0,t3.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r}();sw.PerformanceTracer=BBe});var i3=y(ow=>{"use strict";Object.defineProperty(ow,"__esModule",{value:!0});ow.applyMixins=void 0;function bBe(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!=="constructor"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}ow.applyMixins=bBe});var Hn=y(Cr=>{"use strict";var o3=Cr&&Cr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cr,"__esModule",{value:!0});Cr.EmbeddedActionsParser=Cr.CstParser=Cr.Parser=Cr.EMPTY_ALT=Cr.ParserDefinitionErrorType=Cr.DEFAULT_RULE_CONFIG=Cr.DEFAULT_PARSER_CONFIG=Cr.END_OF_FILE=void 0;var _i=Gt(),QBe=Yq(),n3=HA(),a3=_d(),s3=pJ(),SBe=Vx(),vBe=BJ(),xBe=FJ(),PBe=TJ(),DBe=OJ(),kBe=HJ(),RBe=YJ(),FBe=JJ(),NBe=e3(),TBe=r3(),LBe=i3();Cr.END_OF_FILE=(0,n3.createTokenInstance)(n3.EOF,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(Cr.END_OF_FILE);Cr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:a3.defaultParserErrorProvider,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1});Cr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var OBe;(function(r){r[r.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",r[r.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",r[r.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",r[r.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",r[r.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",r[r.LEFT_RECURSION=5]="LEFT_RECURSION",r[r.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",r[r.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",r[r.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",r[r.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",r[r.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",r[r.TOO_MANY_ALTS=12]="TOO_MANY_ALTS"})(OBe=Cr.ParserDefinitionErrorType||(Cr.ParserDefinitionErrorType={}));function MBe(r){return r===void 0&&(r=void 0),function(){return r}}Cr.EMPTY_ALT=MBe;var aw=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,_i.has)(t,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. - Please use the flag on the relevant DSL method instead. - See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES - For further details.`);this.skipValidations=(0,_i.has)(t,"skipValidations")?t.skipValidations:Cr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT("performSelfAnalysis",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT("toFastProps",function(){(0,_i.toFastProperties)(e)}),e.TRACE_INIT("Grammar Recording",function(){try{e.enableRecording(),(0,_i.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+" Rule",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT("Grammar Resolving",function(){n=(0,s3.resolveGrammar)({rules:(0,_i.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT("Grammar Validations",function(){if((0,_i.isEmpty)(n)&&e.skipValidations===!1){var s=(0,s3.validateGrammar)({rules:(0,_i.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,_i.values)(e.tokensMap),errMsgProvider:a3.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,_i.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT("computeAllProdsFollows",function(){var s=(0,QBe.computeAllProdsFollows)((0,_i.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT("ComputeLookaheadFunctions",function(){e.preComputeLookaheadFunctions((0,_i.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,_i.isEmpty)(e.definitionErrors))throw t=(0,_i.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected: - `+t.join(` -------------------------------- -`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();Cr.Parser=aw;(0,LBe.applyMixins)(aw,[SBe.Recoverable,vBe.LooksAhead,xBe.TreeBuilder,PBe.LexerAdapter,kBe.RecognizerEngine,DBe.RecognizerApi,RBe.ErrorHandler,FBe.ContentAssist,NBe.GastRecorder,TBe.PerformanceTracer]);var UBe=function(r){o3(e,r);function e(t,i){i===void 0&&(i=Cr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,_i.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(aw);Cr.CstParser=UBe;var KBe=function(r){o3(e,r);function e(t,i){i===void 0&&(i=Cr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,_i.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(aw);Cr.EmbeddedActionsParser=KBe});var l3=y(Aw=>{"use strict";Object.defineProperty(Aw,"__esModule",{value:!0});Aw.createSyntaxDiagramsCode=void 0;var A3=Ix();function HBe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?"https://unpkg.com/chevrotain@"+A3.VERSION+"/diagrams/":i,s=t.css,o=s===void 0?"https://unpkg.com/chevrotain@"+A3.VERSION+"/diagrams/diagrams.css":s,a=` - - - - - -`,l=` - -`,c=` -